@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@400;500;600;700;800&display=swap');

:root {
  --font-size: 16px;
  
  /* Typography Variables - Display */
  --font-display-lg: 64px;
  --line-display-lg: 72px;
  
  --font-display: 48px;
  --line-display: 56px;
  
  /* Typography Variables - Headings */
  --font-h1: 40px;
  --line-h1: 48px;
  
  --font-h2: 32px;
  --line-h2: 40px;
  
  --font-h3: 28px;
  --line-h3: 36px;
  
  --font-h4: 24px;
  --line-h4: 32px;
  
  --font-h5: 20px;
  --line-h5: 28px;
  
  /* Typography Variables - Body */
  --font-body-lg: 18px;
  --line-body-lg: 28px;
  
  --font-body: 16px;
  --line-body: 24px;
  
  --font-body-sm: 14px;
  --line-body-sm: 20px;
  
  /* Typography Variables - Small */
  --font-caption: 12px;
  --line-caption: 16px;
  
  --font-overline: 11px;
  --line-overline: 16px;
  
  /* Font Weights */
  --weight-regular: 400;
  --weight-medium: 500;
  --weight-semibold: 600;
  --weight-bold: 700;
  --weight-extrabold: 800;
  
  /* ========== Grey Scale ========== */
  --grey-0: #1a1a1a;
  --grey-1: #4a4a4a;
  --grey-2: #6b6b6b;
  --grey-3: #9e9e9e;
  --grey-4: #e0e0e0;
  --grey-5: #ffffff;
  
  /* ========== Primary Colors ========== */
  --primary-dark: #018a6a;
  --primary-main: #01ab83;
  --primary-light: #33bc9a;
  --primary-lighter: #66cdb1;
  --primary-lightest: #e6f7f3;
  
  /* ========== Other Colors ========== */
  --other-success: #01ab83;
  --other-error: #dc2626;
  --other-warning: #f59e0b;
  --other-info: #3b82f6;
  
  /* ========== Background Colors ========== */
  --background-light: #f8fdfb;
  --background-light-grey: #f5f5f5;
  --background-white: #ffffff;
  
  /* ========== Button States - Disabled ========== */
  --button-disabled: #cccccc;
  
  /* ========== Button States - Success ========== */
  --button-success-normal: #01ab83;
  --button-success-hover: #33bc9a;
  --button-success-active: #018a6a;
  
  /* ========== Button States - Info ========== */
  --button-info-normal: #3b82f6;
  --button-info-hover: #60a5fa;
  --button-info-active: #2563eb;
  
  /* ========== Button States - Warning ========== */
  --button-warning-normal: #f59e0b;
  --button-warning-hover: #fbbf24;
  --button-warning-active: #d97706;
  
  /* ========== Button States - Error ========== */
  --button-err-normal: #dc2626;
  --button-err-hover: #ef4444;
  --button-err-active: #b91c1c;
  
  /* ========== Button States - Main (Primary) ========== */
  --button-main-normal: #018a6a;
  --button-main-disable: #b3e5d9;
  --button-main-hover: #01ab83;
  --button-main-active: #016b54;
  
  /* ========== Semantic Token Mapping ========== */
  --background: var(--background-light);
  --foreground: var(--grey-0);
  --card: var(--background-white);
  --card-foreground: var(--grey-0);
  --popover: var(--background-white);
  --popover-foreground: var(--grey-0);
  --primary: var(--primary-main);
  --primary-hover: var(--primary-dark);
  --primary-active: var(--button-main-active);
  --primary-foreground: var(--grey-5);
  --secondary: var(--background-light-grey);
  --secondary-foreground: var(--grey-0);
  --muted: var(--grey-4);
  --muted-foreground: var(--grey-2);
  --accent: var(--primary-light);
  --accent-foreground: var(--grey-5);
  --destructive: var(--other-error);
  --destructive-hover: var(--button-err-hover);
  --destructive-foreground: var(--grey-5);
  --success: var(--other-success);
  --warning: var(--other-warning);
  --info: var(--other-info);
  --border: var(--grey-4);
  --input: transparent;
  --input-background: var(--grey-5);
  --ring: var(--primary-main);
  --elevation-sm: 0px 4px 12px 0px rgba(1, 171, 131, 0.08);
  --elevation-md: 0px 8px 24px 0px rgba(1, 171, 131, 0.12);
  --chart-1: var(--primary-main);
  --chart-2: var(--primary-light);
  --chart-3: var(--other-warning);
  --chart-4: var(--other-info);
  --chart-5: var(--primary-lighter);
  --radius: 8px;
  --radius-button: 8px;
  --radius-card: 12px;
}

@theme inline {
  /* Grey Scale */
  --color-grey-0: var(--grey-0);
  --color-grey-1: var(--grey-1);
  --color-grey-2: var(--grey-2);
  --color-grey-3: var(--grey-3);
  --color-grey-4: var(--grey-4);
  --color-grey-5: var(--grey-5);
  
  /* Primary Colors */
  --color-primary-dark: var(--primary-dark);
  --color-primary-main: var(--primary-main);
  --color-primary-light: var(--primary-light);
  --color-primary-lighter: var(--primary-lighter);
  --color-primary-lightest: var(--primary-lightest);
  
  /* Semantic Colors */
  --color-background: var(--background);
  --color-foreground: var(--foreground);
  --color-card: var(--card);
  --color-card-foreground: var(--card-foreground);
  --color-popover: var(--popover);
  --color-popover-foreground: var(--popover-foreground);
  --color-primary: var(--primary);
  --color-primary-hover: var(--primary-hover);
  --color-primary-active: var(--primary-active);
  --color-primary-foreground: var(--primary-foreground);
  --color-secondary: var(--secondary);
  --color-secondary-foreground: var(--secondary-foreground);
  --color-muted: var(--muted);
  --color-muted-foreground: var(--muted-foreground);
  --color-accent: var(--accent);
  --color-accent-foreground: var(--accent-foreground);
  --color-destructive: var(--destructive);
  --color-destructive-hover: var(--destructive-hover);
  --color-destructive-foreground: var(--destructive-foreground);
  --color-success: var(--success);
  --color-warning: var(--warning);
  --color-info: var(--info);
  --color-border: var(--border);
  --color-input: var(--input);
  --color-input-background: var(--input-background);
  --color-ring: var(--ring);
  
  /* Charts */
  --color-chart-1: var(--chart-1);
  --color-chart-2: var(--chart-2);
  --color-chart-3: var(--chart-3);
  --color-chart-4: var(--chart-4);
  --color-chart-5: var(--chart-5);
  
  /* Radius */
  --radius-sm: calc(var(--radius) - 4px);
  --radius-md: calc(var(--radius) - 2px);
  --radius-lg: var(--radius);
  --radius-xl: calc(var(--radius) + 4px);
  --radius-button: var(--radius-button);
  --radius-card: var(--radius-card);
  
  /* Button States */
  --color-button-disabled: var(--button-disabled);
  --color-button-success-normal: var(--button-success-normal);
  --color-button-success-hover: var(--button-success-hover);
  --color-button-success-active: var(--button-success-active);
  --color-button-info-normal: var(--button-info-normal);
  --color-button-info-hover: var(--button-info-hover);
  --color-button-info-active: var(--button-info-active);
  --color-button-warning-normal: var(--button-warning-normal);
  --color-button-warning-hover: var(--button-warning-hover);
  --color-button-warning-active: var(--button-warning-active);
  --color-button-err-normal: var(--button-err-normal);
  --color-button-err-hover: var(--button-err-hover);
  --color-button-err-active: var(--button-err-active);
  --color-button-main-normal: var(--button-main-normal);
  --color-button-main-disable: var(--button-main-disable);
  --color-button-main-hover: var(--button-main-hover);
  --color-button-main-active: var(--button-main-active);
}

@layer base {
  * {
    @apply border-border outline-ring/50;
  }

  body {
    @apply bg-background text-foreground;
    font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  }
}

@layer base {
  :where(:not(:has([class*=" text-"]), :not(:has([class^="text-"])))) {
    h1 {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-h1);
      font-weight: var(--weight-bold);
      line-height: var(--line-h1);
    }

    h2 {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-h2);
      font-weight: var(--weight-semibold);
      line-height: var(--line-h2);
    }

    h3 {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-h3);
      font-weight: var(--weight-semibold);
      line-height: var(--line-h3);
    }

    h4 {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-h4);
      font-weight: var(--weight-semibold);
      line-height: var(--line-h4);
    }

    h5 {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-h5);
      font-weight: var(--weight-semibold);
      line-height: var(--line-h5);
    }

    p {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-body);
      font-weight: var(--weight-regular);
      line-height: var(--line-body);
    }

    label {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-body-sm);
      font-weight: var(--weight-semibold);
      line-height: var(--line-body-sm);
    }

    button {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-body);
      font-weight: var(--weight-semibold);
      line-height: var(--line-body);
    }

    input, textarea, select {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-body);
      font-weight: var(--weight-regular);
      line-height: var(--line-body);
    }

    .caption {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-caption);
      font-weight: var(--weight-medium);
      line-height: var(--line-caption);
    }
    
    .body-lg {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-body-lg);
      font-weight: var(--weight-regular);
      line-height: var(--line-body-lg);
    }
    
    .body-sm {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-body-sm);
      font-weight: var(--weight-regular);
      line-height: var(--line-body-sm);
    }
    
    .overline {
      font-family: 'Noto Sans TC', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
      font-size: var(--font-overline);
      font-weight: var(--weight-semibold);
      line-height: var(--line-overline);
      text-transform: uppercase;
      letter-spacing: 0.05em;
    }
  }
}

html {
  font-size: var(--font-size);
}

@keyframes fade-in {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.animate-fade-in {
  animation: fade-in 0.6s ease-out;
}

/* ========== Button Utility Classes ========== */
.button-filled-primary {
  background-color: var(--primary-main);
  color: var(--grey-5);
}

.button-filled-primary:hover {
  background-color: var(--primary-dark);
  color: var(--grey-5);
}

.button-filled-primary:active {
  background-color: var(--button-main-active);
  color: var(--grey-5);
}

.button-filled-primary:disabled {
  background-color: var(--button-main-disable);
  color: var(--grey-5);
  cursor: not-allowed;
  pointer-events: none;
}

.button-outlined-primary {
  border: 2px solid var(--primary-main);
  background-color: transparent;
  color: var(--grey-0);
}

.button-outlined-primary:hover {
  border-color: var(--primary-main);
  background-color: var(--background-light);
  color: var(--grey-0);
}

.button-filled-success {
  background-color: var(--button-success-normal);
  color: var(--grey-5);
}

.button-filled-success:hover {
  background-color: var(--button-success-hover);
  color: var(--grey-5);
}

.button-filled-success:active {
  background-color: var(--button-success-active);
  color: var(--grey-5);
}

.button-outlined-success {
  border: 2px solid var(--other-success);
  background-color: transparent;
  color: var(--grey-0);
}

.button-filled-info {
  background-color: var(--button-info-normal);
  color: var(--grey-5);
}

.button-filled-info:hover {
  background-color: var(--button-info-hover);
  color: var(--grey-5);
}

.button-filled-info:active {
  background-color: var(--button-info-active);
  color: var(--grey-5);
}

.button-outlined-info {
  border: 2px solid var(--other-info);
  background-color: transparent;
  color: var(--grey-0);
}

.button-filled-warning {
  background-color: var(--button-warning-normal);
  color: var(--grey-5);
}

.button-filled-warning:hover {
  background-color: var(--button-warning-hover);
  color: var(--grey-5);
}

.button-filled-warning:active {
  background-color: var(--button-warning-active);
  color: var(--grey-5);
}

.button-outlined-warning {
  border: 2px solid var(--other-warning);
  background-color: transparent;
  color: var(--grey-0);
}

.button-filled-error {
  background-color: var(--button-err-normal);
  color: var(--grey-5);
}

.button-filled-error:hover {
  background-color: var(--button-err-hover);
  color: var(--grey-5);
}

.button-filled-error:active {
  background-color: var(--button-err-active);
  color: var(--grey-5);
}

.button-outlined-error {
  border: 2px solid var(--other-error);
  background-color: transparent;
  color: var(--grey-0);
}

.button-text-primary {
  background-color: transparent;
  color: var(--primary-main);
  border: none;
}

.button-text-primary:hover {
  background-color: var(--background-light);
  color: var(--primary-main);
}

/* ========== Input Field Utility Classes ========== */
.input-default {
  border: 2px solid var(--grey-3);
  background-color: var(--grey-5);
  color: var(--grey-0);
}

.input-focus {
  border: 2px solid var(--primary-main);
  background-color: var(--grey-5);
  color: var(--grey-0);
}

.input-error {
  border: 2px solid var(--other-error);
  background-color: var(--grey-5);
  color: var(--grey-0);
}

.input-disabled {
  border: 2px solid var(--grey-4);
  background-color: var(--background-light-grey);
  color: var(--grey-2);
  cursor: not-allowed;
}

.input-placeholder::placeholder {
  color: var(--grey-3);
}

/* ========== Typography Utility Classes ========== */
.text-primary {
  color: var(--grey-0);
}

.text-secondary {
  color: var(--grey-1);
}

.text-tertiary {
  color: var(--grey-2);
}

.text-disabled {
  color: var(--grey-3);
}

.text-link {
  color: var(--primary-main);
  cursor: pointer;
}

.text-link:hover {
  color: var(--primary-dark);
}

.text-error {
  color: var(--other-error);
}

.text-success {
  color: var(--other-success);
}

.text-warning {
  color: var(--other-warning);
}

.text-info {
  color: var(--other-info);
}

/* ========== Card/Container Utility Classes ========== */
.card-default {
  background-color: var(--background-white);
  border: 1px solid var(--grey-4);
}

.card-hover:hover {
  background-color: var(--background-white);
  border-color: var(--grey-3);
}

.card-light {
  background-color: var(--background-light);
  border-color: transparent;
}

.card-grey {
  background-color: var(--background-light-grey);
  border-color: transparent;
}

/* ========== Status Tags/Badges Utility Classes ========== */
.badge-success {
  background-color: var(--other-success);
  color: var(--grey-5);
}

.badge-error {
  background-color: var(--other-error);
  color: var(--grey-5);
}

.badge-warning {
  background-color: var(--other-warning);
  color: var(--grey-5);
}

.badge-info {
  background-color: var(--other-info);
  color: var(--grey-5);
}

.badge-neutral {
  background-color: var(--grey-3);
  color: var(--grey-5);
}

/* ========== Divider Utility Classes ========== */
.divider-light {
  border-color: var(--grey-4);
}

.divider-medium {
  border-color: var(--grey-3);
}

.divider-dark {
  border-color: var(--grey-2);
}

/* ========== Icon Button Utility Classes ========== */
.button-icon {
  color: var(--grey-0);
  border: 2px solid var(--grey-0);
  background-color: var(--background-light);
  aspect-ratio: 1/1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.button-icon:hover {
  color: var(--primary-main);
  border-color: var(--primary-main);
  background-color: var(--background-white);
}

.button-icon:active {
  color: var(--primary-dark);
  border-color: var(--primary-dark);
  background-color: var(--background-light);
}

.button-icon:focus {
  color: var(--grey-0);
  border-color: var(--primary-main);
  background-color: var(--background-light);
  box-shadow: 0 0 0 3px rgba(1, 171, 131, 0.3);
}

.button-icon:disabled {
  color: var(--grey-3);
  border-color: var(--grey-4);
  background-color: var(--background-light-grey);
  cursor: not-allowed;
  pointer-events: none;
}

.button-icon-selected {
  color: var(--grey-5);
  border-color: var(--primary-main);
  background-color: var(--primary-main);
}

.button-icon-selected:hover {
  color: var(--grey-5);
  border-color: var(--primary-dark);
  background-color: var(--primary-dark);
}

/* ========== Textarea Utility Classes ========== */
.textarea-default {
  border: 2px solid var(--grey-3);
  background-color: var(--grey-5);
  color: var(--grey-0);
}

.textarea-focus {
  border: 2px solid var(--primary-main);
  background-color: var(--grey-5);
  color: var(--grey-0);
}

.textarea-error {
  border: 2px solid var(--other-error);
  background-color: var(--grey-5);
  color: var(--grey-0);
}

.textarea-disabled {
  border: 2px solid var(--grey-4);
  background-color: var(--background-light-grey);
  color: var(--grey-2);
  cursor: not-allowed;
}

.textarea-placeholder::placeholder {
  color: var(--grey-3);
}

/* ========== Button Shorthand Classes (per Guidelines) ========== */
/* These classes are for button styling as specified in Guidelines.md */
.filled {
  background-color: var(--primary-main);
  color: var(--grey-5);
}

.filled:hover:not(:disabled) {
  background-color: var(--primary-dark);
  color: var(--grey-5);
}

.filled:active:not(:disabled) {
  background-color: var(--button-main-active);
  color: var(--grey-5);
}

.filled:disabled {
  background-color: var(--button-main-disable);
  color: var(--grey-5);
  cursor: not-allowed;
  opacity: 0.6;
}

.outlined {
  border: 2px solid var(--primary-main);
  background-color: transparent;
  color: var(--grey-0);
}

.outlined:hover:not(:disabled) {
  border-color: var(--primary-main);
  background-color: var(--background-light);
  color: var(--grey-0);
}

.outlined:active:not(:disabled) {
  border-color: var(--primary-dark);
  background-color: var(--primary-lightest);
  color: var(--grey-0);
}

.outlined:disabled {
  border-color: var(--grey-4);
  background-color: transparent;
  color: var(--grey-3);
  cursor: not-allowed;
  opacity: 0.6;
}