/* ============================================================
   Guide School — Design Tokens
   Version 1.0  ·  May 2026
   Source of truth: Goal-Tracker-UI-Redesign-Spec §4
   ============================================================ */

:root {
  /* ---- INK (text, dark UI) ---------------------------------- */
  --ink-900: #0F1419;
  --ink-800: #1F2937;
  --ink-700: #374151;
  --ink-500: #6B7280;
  --ink-300: #9CA3AF;
  --ink-200: #D1D5DB;
  --ink-100: #E5E7EB;
  --ink-50:  #F3F4F6;

  /* ---- PAPER (warm whites, surfaces) ----------------------- */
  --paper-50:   #FAFAF7;
  --paper-100:  #F5F4EE;
  --paper-200:  #EFEDE3;
  --paper-base: #FFFFFE;

  /* ---- ACCENT (slate-teal, used sparingly) ----------------- */
  --accent-700: #134E4A;
  --accent-600: #0F766E;
  --accent-500: #14B8A6;
  --accent-100: #CCFBF1;
  --accent-50:  #F0FDFA;

  /* ---- SEMANTIC (state only — never branding) -------------- */
  --green-600: #16A34A;
  --green-100: #DCFCE7;
  --amber-600: #D97706;
  --amber-100: #FEF3C7;
  --red-600:   #DC2626;
  --red-100:   #FEE2E2;
  --blue-600:  #2563EB;
  --blue-100:  #DBEAFE;

  /* ---- TYPOGRAPHY ------------------------------------------ */
  --font-sans:  'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
  --font-serif: 'Lora', 'Iowan Old Style', Georgia, serif;
  --font-mono:  'JetBrains Mono', 'SF Mono', Menlo, monospace;

  --text-xs:   11px;   --lh-xs:   16px;
  --text-sm:   13px;   --lh-sm:   20px;
  --text-base: 15px;   --lh-base: 24px;
  --text-lg:   17px;   --lh-lg:   26px;
  --text-xl:   20px;   --lh-xl:   30px;
  --text-2xl:  24px;   --lh-2xl:  32px;
  --text-3xl:  30px;   --lh-3xl:  38px;
  --text-4xl:  40px;   --lh-4xl:  48px;
  --text-5xl:  56px;   --lh-5xl:  64px;

  --weight-regular:  400;
  --weight-medium:   500;
  --weight-semibold: 600;

  --tracking-tight:  -0.02em;  /* headings ≥ text-2xl */
  --tracking-caps:    0.08em;  /* small-caps labels */

  /* ---- SPACING (4px base) ---------------------------------- */
  --space-1:  4px;
  --space-2:  8px;
  --space-3:  12px;
  --space-4:  16px;
  --space-5:  20px;
  --space-6:  24px;
  --space-8:  32px;
  --space-10: 40px;
  --space-12: 48px;
  --space-16: 64px;
  --space-20: 80px;
  --space-24: 96px;

  /* ---- RADII ----------------------------------------------- */
  --radius-sm:   4px;
  --radius-md:   6px;
  --radius-lg:   8px;
  --radius-xl:   12px;
  --radius-full: 9999px;

  /* ---- ELEVATION ------------------------------------------- */
  --shadow-xs: 0 1px 2px rgba(15, 20, 25, 0.04);
  --shadow-sm: 0 1px 3px rgba(15, 20, 25, 0.06), 0 1px 2px rgba(15, 20, 25, 0.04);
  --shadow-md: 0 4px 8px -2px rgba(15, 20, 25, 0.08), 0 2px 4px -1px rgba(15, 20, 25, 0.04);
  --shadow-lg: 0 12px 20px -4px rgba(15, 20, 25, 0.10), 0 4px 8px -2px rgba(15, 20, 25, 0.06);
  --shadow-xl: 0 24px 36px -8px rgba(15, 20, 25, 0.14), 0 8px 16px -4px rgba(15, 20, 25, 0.08);
  --shadow-focus: 0 0 0 3px rgba(20, 184, 166, 0.20);

  /* ---- MOTION ---------------------------------------------- */
  --ease-out:    cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);

  --duration-fast:        120ms;
  --duration-base:        200ms;
  --duration-slow:        320ms;
  --duration-celebration: 600ms;

  /* ---- BREAKPOINTS (reference; CSS uses literals) ---------- */
  --bp-sm:  640px;
  --bp-md:  768px;
  --bp-lg:  1024px;
  --bp-xl:  1280px;
  --bp-2xl: 1440px;

  /* ---- VERDICTS (mastery semantic) ------------------------- */
  --verdict-excelling-bg:   var(--green-100);
  --verdict-excelling-fg:   var(--green-600);
  --verdict-ontrack-bg:     var(--accent-100);
  --verdict-ontrack-fg:     var(--accent-600);
  --verdict-watch-bg:       var(--amber-100);
  --verdict-watch-fg:       var(--amber-600);
  --verdict-behind-bg:      var(--red-100);
  --verdict-behind-fg:      var(--red-600);
  --verdict-prelaunch-bg:   var(--ink-100);
  --verdict-prelaunch-fg:   var(--ink-500);
}

/* ============================================================
   Universal resets & defaults that the rest of the system
   relies on. Kept tiny on purpose.
   ============================================================ */

*, *::before, *::after { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  background: var(--paper-50);
  color: var(--ink-800);
  font-family: var(--font-sans);
  font-size: var(--text-base);
  line-height: var(--lh-base);
  font-feature-settings: 'ss01', 'cv11', 'kern';
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

::selection { background: var(--accent-100); color: var(--ink-900); }

a { color: var(--accent-600); text-decoration: none; }
a:hover { text-decoration: underline; }

/* Universal focus ring (spec §4.9) */
:focus { outline: none; }
:focus-visible {
  outline: 2px solid transparent;
  box-shadow: var(--shadow-focus);
  border-radius: var(--radius-sm);
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* Lucide icon defaults: stroke-width 1.5 across the system */
[data-lucide] { stroke-width: 1.5; }
