/* ============================================
   Design Token System — Portfolio Site
   程序员个人作品集官网设计系统
   ============================================ */

:root {
  /* --- Brand Color: Deep Indigo + Amber Accent --- */
  --brand-h: 243;

  /* Primary Palette (OKLCH) */
  --color-primary-50:  oklch(97% 0.02 250);
  --color-primary-100: oklch(93% 0.04 250);
  --color-primary-200: oklch(87% 0.07 250);
  --color-primary-300: oklch(78% 0.11 250);
  --color-primary-400: oklch(66% 0.15 250);
  --color-primary-500: oklch(55% 0.18 250);
  --color-primary-600: oklch(46% 0.18 250);
  --color-primary-700: oklch(38% 0.16 250);
  --color-primary-800: oklch(30% 0.13 250);
  --color-primary-900: oklch(22% 0.09 250);

  /* Accent (Amber / Gold) */
  --color-accent-400: oklch(84% 0.16 75);
  --color-accent-500: oklch(75% 0.18 75);
  --color-accent-600: oklch(64% 0.17 75);

  /* Tinted Neutrals (slight blue-indigo cast) */
  --color-neutral-50:  oklch(98% 0.005 250);
  --color-neutral-100: oklch(95% 0.008 250);
  --color-neutral-200: oklch(91% 0.010 250);
  --color-neutral-300: oklch(84% 0.012 250);
  --color-neutral-400: oklch(72% 0.012 250);
  --color-neutral-500: oklch(60% 0.012 250);
  --color-neutral-600: oklch(48% 0.012 250);
  --color-neutral-700: oklch(37% 0.012 250);
  --color-neutral-800: oklch(26% 0.010 250);
  --color-neutral-900: oklch(17% 0.008 250);
  --color-neutral-950: oklch(11% 0.006 250);

  /* Semantic Colors */
  --color-success: oklch(62% 0.17 155);
  --color-success-bg: oklch(95% 0.04 155);
  --color-warning: oklch(72% 0.18 85);
  --color-warning-bg: oklch(96% 0.04 85);
  --color-error: oklch(58% 0.22 25);
  --color-error-bg: oklch(96% 0.04 25);
  --color-info: oklch(58% 0.17 240);
  --color-info-bg: oklch(95% 0.04 240);

  /* --- Surface Tokens (Light Mode) --- */
  --surface-page: oklch(99% 0.004 250);
  --surface-card: oklch(100% 0 0);
  --surface-raised: oklch(98% 0.006 250);
  --surface-overlay: oklch(15% 0.01 250 / 0.6);

  /* Text */
  --text-primary:   oklch(17% 0.008 250);
  --text-secondary: oklch(42% 0.012 250);
  --text-tertiary:  oklch(60% 0.010 250);
  --text-on-dark:   oklch(97% 0.005 250);
  --text-on-brand:  oklch(100% 0 0);

  /* Borders */
  --border-subtle:  oklch(91% 0.010 250);
  --border-default: oklch(84% 0.012 250);
  --border-strong:  oklch(72% 0.012 250);

  /* Code colors */
  --code-bg: oklch(96% 0.008 250);
  --code-border: oklch(89% 0.012 250);

  /* --- Typography --- */
  --font-display: 'Plus Jakarta Sans', 'Outfit', system-ui, sans-serif;
  --font-body:    'DM Sans', 'Instrument Sans', system-ui, sans-serif;
  --font-mono:    'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;

  /* Font Scale (fluid display, fixed body) */
  --text-xs:   0.75rem;    /* 12px */
  --text-sm:   0.875rem;   /* 14px */
  --text-base: 1rem;       /* 16px */
  --text-lg:   1.125rem;   /* 18px */
  --text-xl:   1.25rem;    /* 20px */
  --text-2xl:  1.5rem;     /* 24px */
  --text-3xl:  1.875rem;   /* 30px */
  --text-4xl:  clamp(2rem, 4vw + 1rem, 3rem);
  --text-5xl:  clamp(2.5rem, 5vw + 1rem, 4rem);
  --text-hero: clamp(3rem, 7vw + 1rem, 5.5rem);

  --leading-tight:   1.2;
  --leading-snug:    1.375;
  --leading-normal:  1.5;
  --leading-relaxed: 1.625;

  --tracking-tight:  -0.025em;
  --tracking-normal: 0em;
  --tracking-wide:   0.05em;
  --tracking-wider:  0.1em;

  /* --- Spacing (8px base) --- */
  --space-1:  0.25rem;  /* 4px */
  --space-2:  0.5rem;   /* 8px */
  --space-3:  0.75rem;  /* 12px */
  --space-4:  1rem;     /* 16px */
  --space-5:  1.25rem;  /* 20px */
  --space-6:  1.5rem;   /* 24px */
  --space-8:  2rem;     /* 32px */
  --space-10: 2.5rem;   /* 40px */
  --space-12: 3rem;     /* 48px */
  --space-16: 4rem;     /* 64px */
  --space-20: 5rem;     /* 80px */
  --space-24: 6rem;     /* 96px */
  --space-32: 8rem;     /* 128px */

  /* --- Border Radius --- */
  --radius-sm:  0.25rem;
  --radius-md:  0.5rem;
  --radius-lg:  0.75rem;
  --radius-xl:  1rem;
  --radius-2xl: 1.5rem;
  --radius-full: 9999px;

  /* --- Shadows --- */
  --shadow-xs: 0 1px 2px 0 oklch(17% 0.008 250 / 0.05);
  --shadow-sm: 0 1px 3px 0 oklch(17% 0.008 250 / 0.08),
               0 1px 2px -1px oklch(17% 0.008 250 / 0.05);
  --shadow-md: 0 4px 6px -1px oklch(17% 0.008 250 / 0.08),
               0 2px 4px -2px oklch(17% 0.008 250 / 0.05);
  --shadow-lg: 0 10px 15px -3px oklch(17% 0.008 250 / 0.08),
               0 4px 6px -4px oklch(17% 0.008 250 / 0.05);
  --shadow-xl: 0 20px 25px -5px oklch(17% 0.008 250 / 0.08),
               0 8px 10px -6px oklch(17% 0.008 250 / 0.05);
  --shadow-glow: 0 0 0 3px oklch(55% 0.18 250 / 0.15);
  --shadow-card-hover: 0 20px 40px -12px oklch(55% 0.18 250 / 0.2);

  /* --- Easing --- */
  --ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
  --ease-out-expo:  cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in-quart:  cubic-bezier(0.5, 0, 0.75, 0);
  --ease-in-out:    cubic-bezier(0.65, 0, 0.35, 1);

  /* Duration */
  --dur-instant: 80ms;
  --dur-fast:    150ms;
  --dur-normal:  300ms;
  --dur-slow:    500ms;
  --dur-enter:   600ms;

  /* --- Layout --- */
  --container-sm:  640px;
  --container-md:  768px;
  --container-lg:  1024px;
  --container-xl:  1200px;
  --container-2xl: 1400px;

  --nav-height: 64px;
  --section-padding: clamp(var(--space-12), 8vw, var(--space-24));
}

/* ============================================
   Dark Mode
   ============================================ */
[data-theme="dark"] {
  --surface-page:   oklch(14% 0.008 250);
  --surface-card:   oklch(18% 0.010 250);
  --surface-raised: oklch(21% 0.012 250);
  --surface-overlay: oklch(8% 0.006 250 / 0.75);

  --text-primary:   oklch(95% 0.005 250);
  --text-secondary: oklch(72% 0.010 250);
  --text-tertiary:  oklch(52% 0.010 250);

  --border-subtle:  oklch(26% 0.010 250);
  --border-default: oklch(32% 0.012 250);
  --border-strong:  oklch(42% 0.012 250);

  --code-bg: oklch(20% 0.010 250);
  --code-border: oklch(28% 0.010 250);

  --shadow-xs: 0 1px 2px 0 oklch(5% 0 0 / 0.3);
  --shadow-sm: 0 1px 3px 0 oklch(5% 0 0 / 0.4),
               0 1px 2px -1px oklch(5% 0 0 / 0.3);
  --shadow-md: 0 4px 6px -1px oklch(5% 0 0 / 0.4),
               0 2px 4px -2px oklch(5% 0 0 / 0.3);
  --shadow-lg: 0 10px 15px -3px oklch(5% 0 0 / 0.5),
               0 4px 6px -4px oklch(5% 0 0 / 0.3);
  --shadow-card-hover: 0 20px 40px -12px oklch(55% 0.18 250 / 0.3);

  color-scheme: dark;
}
