/* ==========================================================================
   Dual Internet — Design Tokens
   Layer 1: primitives  →  Layer 2: semantic  →  Layer 3: component
   Dark-first (OLED). Light mode is an explicit opt-in via [data-theme="light"].
   ========================================================================== */

/* ---------- Layer 1: Primitives ---------- */
:root {
  /* Slate ramp — chassis */
  --slate-950: #080c16;
  --slate-925: #0b1020;
  --slate-900: #0f172a;
  --slate-850: #141d33;
  --slate-800: #1e293b;
  --slate-750: #272f42;
  --slate-700: #334155;
  --slate-600: #475569;
  --slate-500: #64748b;
  --slate-400: #94a3b8;
  --slate-300: #cbd5e1;
  --slate-200: #e2e8f0;
  --slate-100: #f1f5f9;
  --slate-050: #f8fafc;

  /* Lane A — cyan (primary adapter) */
  --cyan-600: #0891b2;
  --cyan-500: #06b6d4;
  --cyan-400: #22d3ee;
  --cyan-300: #67e8f9;

  /* Lane B — green (secondary adapter / "run" state) */
  --green-600: #16a34a;
  --green-500: #22c55e;
  --green-400: #4ade80;
  --green-300: #86efac;

  /* Signal */
  --amber-500: #f59e0b;
  --amber-400: #fbbf24;
  --red-500: #ef4444;
  --red-400: #f87171;
  --violet-500: #8b5cf6;
  --violet-400: #a78bfa;

  /* Type scale — 1.250 major third, clamped fluid */
  --text-2xs: 0.6875rem;   /* 11px — legal/meta only */
  --text-xs:  0.75rem;     /* 12 */
  --text-sm:  0.875rem;    /* 14 */
  --text-base: 1rem;       /* 16 — never smaller for body */
  --text-lg:  1.125rem;    /* 18 */
  --text-xl:  clamp(1.25rem, 1.15rem + 0.5vw, 1.5rem);
  --text-2xl: clamp(1.5rem, 1.3rem + 1vw, 2rem);
  --text-3xl: clamp(1.875rem, 1.5rem + 1.9vw, 2.75rem);
  --text-4xl: clamp(2.25rem, 1.6rem + 3.2vw, 4rem);
  --text-5xl: clamp(2.75rem, 1.7rem + 5vw, 5.25rem);

  /* Spacing — 4px rhythm */
  --sp-1: 0.25rem;  --sp-2: 0.5rem;   --sp-3: 0.75rem;  --sp-4: 1rem;
  --sp-5: 1.25rem;  --sp-6: 1.5rem;   --sp-8: 2rem;     --sp-10: 2.5rem;
  --sp-12: 3rem;    --sp-16: 4rem;    --sp-20: 5rem;    --sp-24: 6rem;
  --sp-32: 8rem;

  /* Section rhythm — fluid so mobile isn't cavernous */
  --section-y: clamp(4rem, 3rem + 6vw, 8rem);
  --section-y-sm: clamp(2.5rem, 2rem + 3vw, 4.5rem);

  /* Radii */
  --r-sm: 6px; --r-md: 10px; --r-lg: 14px; --r-xl: 20px; --r-2xl: 28px;
  --r-full: 999px;

  /* Layout */
  --container: 1200px;
  --container-wide: 1400px;
  --container-prose: 72ch;
  --gutter: clamp(1rem, 0.5rem + 2.5vw, 2.5rem);
  --nav-h: 68px;

  /* Z-index scale — never invent values outside this */
  --z-base: 0; --z-raised: 10; --z-sticky: 20; --z-nav: 40;
  --z-overlay: 100; --z-modal: 200; --z-toast: 1000;

  /* Motion tokens — one rhythm across the whole site */
  --dur-instant: 90ms;
  --dur-fast: 160ms;
  --dur-base: 240ms;
  --dur-slow: 380ms;
  --dur-slower: 620ms;
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);        /* enter */
  --ease-in: cubic-bezier(0.7, 0, 0.84, 0);          /* exit */
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);  /* press / pop */
  --ease-smooth: cubic-bezier(0.4, 0, 0.2, 1);
}

/* ---------- Layer 2: Semantic (dark = default) ---------- */
:root {
  --bg: var(--slate-925);
  --bg-deep: var(--slate-950);
  --surface: #111a2e;
  --surface-2: var(--slate-850);
  --surface-3: var(--slate-800);
  --surface-inset: #0a1020;

  --fg: var(--slate-050);
  --fg-muted: var(--slate-400);
  --fg-subtle: var(--slate-500);
  --fg-inverse: var(--slate-900);

  --border: #26304a;
  --border-strong: var(--slate-600);
  --border-subtle: #1b2338;

  --accent: var(--green-500);
  --accent-hover: var(--green-400);
  --accent-fg: #06240f;

  --lane-a: var(--cyan-400);
  --lane-b: var(--green-400);

  --danger: var(--red-400);
  --warning: var(--amber-400);
  --info: var(--cyan-400);

  --ring: var(--cyan-400);
  --scrim: rgba(4, 8, 18, 0.72);

  --grid-line: rgba(148, 163, 184, 0.07);
  --glow-a: rgba(34, 211, 238, 0.22);
  --glow-b: rgba(34, 197, 94, 0.22);

  --shadow-1: 0 1px 2px rgba(0, 0, 0, 0.4);
  --shadow-2: 0 4px 12px -2px rgba(0, 0, 0, 0.5);
  --shadow-3: 0 12px 32px -8px rgba(0, 0, 0, 0.6);
  --shadow-4: 0 28px 64px -16px rgba(0, 0, 0, 0.7);

  color-scheme: dark;
}

/* ---------- Layer 2b: Light mode (explicit opt-in) ---------- */
[data-theme="light"] {
  --bg: #ffffff;
  --bg-deep: var(--slate-100);
  --surface: #ffffff;
  --surface-2: var(--slate-050);
  --surface-3: var(--slate-100);
  --surface-inset: var(--slate-100);

  --fg: #0b1220;
  --fg-muted: #4a5568;
  --fg-subtle: #64748b;
  --fg-inverse: #ffffff;

  --border: #dbe2ec;
  --border-strong: var(--slate-400);
  --border-subtle: #e9eef5;

  --accent: var(--green-600);
  --accent-hover: #12833c;
  --accent-fg: #ffffff;

  --lane-a: var(--cyan-600);
  --lane-b: var(--green-600);

  --danger: #d92d20;
  --warning: #b45309;
  --info: var(--cyan-600);

  --ring: var(--cyan-600);
  --scrim: rgba(15, 23, 42, 0.45);

  --grid-line: rgba(15, 23, 42, 0.055);
  --glow-a: rgba(8, 145, 178, 0.14);
  --glow-b: rgba(22, 163, 74, 0.14);

  --shadow-1: 0 1px 2px rgba(16, 24, 40, 0.06);
  --shadow-2: 0 4px 12px -2px rgba(16, 24, 40, 0.1);
  --shadow-3: 0 12px 28px -8px rgba(16, 24, 40, 0.14);
  --shadow-4: 0 28px 60px -16px rgba(16, 24, 40, 0.18);

  color-scheme: light;
}
