/* GENERATED by tokens/generate.mjs from tokens/tokens.json — do not edit.
   v3.0.0 · 2026-09-21

   light-dark() carries COLOURS ONLY. Never an opacity, never a
   multi-part value: a top-level comma makes it a three-argument call
   and the whole declaration is silently dropped. Shadows below are
   plain values with a real dark override, for exactly that reason. */

:root {
  color-scheme: light dark;

  /* --- type: base 9, ratio 1.195, 13 steps --- */
  --t0: 9px;   /* caps label — band pill, evidence key, section label */
  --t1: 11px;   /* meta — chip, date, org line */
  --t2: 13px;   /* body — descriptions, buttons, UI */
  --t3: 15.5px;   /* emphasis — nav rows, lede */
  --t4: 18.5px;   /* card title — serif */
  --t5: 22px;   /* screen title — serif */
  --t6: 26px;   /* page title — serif */
  --t7: 31.5px;   /* hero — serif */
  --t8: 37.5px;   /* display — desktop screen title */
  --t9: 44.5px;   /* display — desktop page title */
  --t10: 53.5px;   /* display — desktop hero */
  --t11: 64px;   /* display — wide hero */
  --t12: 76.5px;   /* display — widest hero */

  --font-serif: Newsreader, Georgia, "Times New Roman", serif;
  --font-sans: Inter, -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;

  /* --- space: 4px grid --- */
  --s0: 2px;
  --s1: 4px;
  --s2: 8px;
  --s3: 12px;
  --s4: 16px;
  --s5: 20px;
  --s6: 24px;
  --s7: 32px;
  --s8: 40px;
  --s9: 48px;
  --s10: 56px;
  --s11: 64px;
  --s12: 72px;
  --s13: 80px;
  --s14: 96px;
  --s15: 128px;

  /* --- radius: card 16, step 6 --- */
  --r-chip: 4px;
  --r-inner: 10px;
  --r-card: 16px;
  --r-sheet: 22px;
  --r-pill: 1600px;

  /* --- ground --- */
  --canvas: light-dark(#f8f3eb, #0a0524);
  --surface: light-dark(#ffffff, #1c1544);
  --sunken: light-dark(#ece5d8, #2b284f);
  --text: light-dark(#080331, #f8f3eb);
  --text2: light-dark(#5a5560, #b9b3c4);
  --text-long: light-dark(#080331, #ded9e8);
  --action: light-dark(#080331, #f8f3eb);
  --action-on: light-dark(#f8f3eb, #0a0524);
  --accent: light-dark(#4865ff, #a2baff);
  --evidence: light-dark(#f1f1fa, #2b284f);
  --selected-bg: light-dark(#eaf0ff, #272e42);
  --selected-edge: light-dark(#4865ff, #a2baff);
  --selected-fg: light-dark(#394981, #a4bbff);
  --scrim: light-dark(rgba(8,3,49,.66), rgba(0,0,0,.66));
  --hero-ink: light-dark(#f8f3eb, #f8f3eb);

  /* --- bands: generated from 4 hues + 3 L/C pairs.
         NEAR-MISS is the same ramp at 0.28x chroma — its band IS the neutral. --- */
  --auto: light-dark(#3e954d, #7ac683);
  --ping: light-dark(#617ad1, #93adff);
  --unsure: light-dark(#b86b03, #e89f59);
  --nearmiss: light-dark(#7d7d97, #aeafc7);
  --auto-label: light-dark(#225b2c, #92d098);
  --ping-label: light-dark(#394981, #a4bbff);
  --unsure-label: light-dark(#713f00, #ecb078);
  --nearmiss-label: light-dark(#4b4b5c, #bbbcd0);
  --auto-fill: light-dark(#e7f4e8, #223424);
  --ping-fill: light-dark(#eaf0ff, #272e42);
  --unsure-fill: light-dark(#fbede2, #3d2b1a);
  --nearmiss-fill: light-dark(#eff0f4, #2e2e34);

  /* The rose's empty track is --text at 0.14. It may NEVER be a band
     colour: NEAR-MISS's band is the neutral, so a band-coloured track
     leaves lit and unlit identical but for opacity. */
  --rose-empty: light-dark(#080331, #f8f3eb);
  --rose-empty-alpha: 0.14;

  /* --- band thresholds. The scorer emits `fit` only and every client
         derives the band, so this table had five copies. Now it has one. --- */
  --threshold-auto: 80;
  --threshold-ping: 70;
  --threshold-unsure: 55;

  /* --- motion: real spring step responses, sampled --- */
  --t-snap: 180ms;
  --spring-snap: linear(0.0000, 0.0279, 0.0987, 0.1954, 0.3052, 0.4183, 0.5277, 0.6288, 0.7188, 0.7962, 0.8609, 0.9133, 0.9543, 0.9853, 1.0077, 1.0228, 1.0322, 1.0370, 1.0384, 1.0374, 1.0347, 1.0310, 1.0267, 1.0224, 1.0182, 1.0143, 1.0000);
  --t-settle: 340ms;
  --spring-settle: linear(0.0000, 0.0268, 0.0910, 0.1748, 0.2662, 0.3577, 0.4448, 0.5249, 0.5969, 0.6603, 0.7154, 0.7628, 0.8032, 0.8374, 0.8661, 0.8900, 0.9100, 0.9265, 0.9401, 0.9513, 0.9605, 0.9680, 0.9741, 0.9791, 0.9831, 0.9864, 1.0000);
  --t-arrive: 520ms;
  --spring-arrive: linear(0.0000, 0.0284, 0.1016, 0.2038, 0.3215, 0.4444, 0.5644, 0.6757, 0.7748, 0.8595, 0.9291, 0.9838, 1.0248, 1.0535, 1.0716, 1.0810, 1.0835, 1.0808, 1.0745, 1.0659, 1.0560, 1.0457, 1.0357, 1.0265, 1.0183, 1.0113, 1.0000);
  --t-exit: 160ms;
  --spring-exit: cubic-bezier(0.4, 0, 1, 1);

  --stagger-row: 28ms;
  --stagger-tile: 22ms;
  --stagger-dot: 46ms;
  --travel-row: 10px;
  --travel-tile: 8px;
  --travel-head: 12px;
  --travel-liftHover: -2px;
  --press-card: 0.988;
  --press-control: 0.96;
  --press-heart: 0.88;
  --t-breathe: 4200ms;
  --breathe-floor: 0.9;
  --t-seek: 5600ms;

  /* --- elevation. Light: --surface is #ffffff, the ceiling, so hover
         cannot lift and carries in shadow alone. Dark: no shadow, so it
         carries entirely in lift. The asymmetry is the rule. --- */
  --sh-rest:  0 1px 2px rgba(75,68,57,.05), 0 6px 14px rgba(75,68,57,.06);
  --sh-hover: 0 2px 4px rgba(75,68,57,.06), 0 14px 30px rgba(75,68,57,.10);
  --sh-press: 0 1px 2px rgba(75,68,57,.08);
  --sh-sheet: 0 -2px 8px rgba(75,68,57,.06), 0 -18px 48px rgba(75,68,57,.16);
  --edge-rest:  light-dark(rgba(8,3,49,.08), rgba(248,243,235,.13));
  --edge-hover: light-dark(rgba(8,3,49,.12), rgba(248,243,235,.26));
  --hairline:   light-dark(rgba(8,3,49,.13), rgba(248,243,235,.13));
  --surface-hover: light-dark(#ffffff, #221a52);
}

/* Dark has no shadows: a warm shadow on ink reads as dirt. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) { --sh-rest:none; --sh-hover:none; --sh-press:none; --sh-sheet:none; }
}
:root[data-theme="dark"]  { color-scheme: dark;  --sh-rest:none; --sh-hover:none; --sh-press:none; --sh-sheet:none; }
:root[data-theme="light"] { color-scheme: light; }

/* Market: the hero and the market chip ONLY. Colour law v2.3. */
html[data-market="ca"] { --hero-a: #0e2a4d; --hero-b: #07142a; }
html[data-market="ke"] { --hero-a: #103c19; --hero-b: #0a1820; }
