/* Stats v2 — design tokens (Spans/River language, design drop 2026-07-18).
   Source of truth: design_handoff_stats_look_and_feel (approved options 3a/3b/2a/2b).
   Identity pair is CVD-proven — never swap Claude/Codex hues without re-validating. */

:root {
  /* ground & surfaces */
  --ground: #131017;
  --surface: #18131e;
  --raised: #201b26;
  --hairline: rgba(255, 255, 255, .08);
  --hairline-strong: rgba(255, 255, 255, .12);
  --track: rgba(255, 255, 255, .08);
  --track-faint: rgba(255, 255, 255, .06);

  /* ink */
  --ink: #f2edf4;
  --ink-2: #a99fb3;
  --ink-3: #8b8194;
  --ink-4: #6d6377;
  --ink-handoff-body: #cfc7d6;

  /* identity (colorblind-proven pair — binding) */
  --claude: #d55181;
  --codex: #3987e5;
  --codex-stem: rgba(57, 135, 229, .6);

  /* supporting series, in slot order (validated set) */
  --series-3: #c98500;
  --series-4: #199e70;
  --series-5: #9085e9;

  /* brand accent — UI chrome + "live" only, never a data series */
  --accent: #f471b5;
  --accent-dim: rgba(244, 113, 181, .55);

  /* status — reserved for state, never series */
  --good: #0ca30c;
  --warn: #fab219;
  --crit: #d03b3b;

  /* handoff blocks ride series-3 (amber) */
  --handoff: #c98500;
  --handoff-bg: rgba(201, 133, 0, .06);

  /* type — Apple-native, zero payload */
  --font-display: "Avenir Next Condensed", "Arial Narrow", sans-serif;
  --font-body: -apple-system, system-ui, sans-serif;
  --font-mono: ui-monospace, "SF Mono", Menlo, monospace;

  /* ── THE TYPE SCALE ──────────────────────────────────────────────────
     ONE KNOB. --fs-scale multiplies every type step and every dimension
     that has to grow with text (table columns, timeline rows, label
     collision math in js/kit/scale.js). Tuning the whole dashboard is
     editing the number below; tuning one thing is swapping its token.

     The rebuild shipped with 22 distinct hardcoded px sizes — that is not
     a scale, it is 22 accidents. These 12 steps replace all of them; a
     view that needs a size not on the scale is a view arguing for a new
     step, not for a literal. NEVER write a bare px font-size again. */
  --fs-scale: 1.5;

  --fs-micro:  calc(9px    * var(--fs-scale));   /* dense axis ticks, sub-captions */
  --fs-tiny:   calc(10px   * var(--fs-scale));   /* microlabels, chrome */
  --fs-xs:     calc(10.5px * var(--fs-scale));   /* mono chrome, teasers */
  --fs-sm:     calc(11px   * var(--fs-scale));   /* table rows, barrows — the workhorse */
  --fs-md:     calc(12.5px * var(--fs-scale));   /* secondary body */
  --fs-base:   calc(13px   * var(--fs-scale));   /* body */
  --fs-lg:     calc(15px   * var(--fs-scale));   /* lead-in prose */
  --fs-xl:     calc(18px   * var(--fs-scale));   /* nav words */
  --fs-2xl:    calc(21px   * var(--fs-scale));   /* crumb, section numerals */
  --fs-3xl:    calc(26px   * var(--fs-scale));   /* brand, big stats */
  --fs-4xl:    calc(32px   * var(--fs-scale));   /* rail numerals */
  --fs-5xl:    calc(40px   * var(--fs-scale));   /* runway percentage */
  --fs-verdict: clamp(calc(32px * var(--fs-scale)), calc(4.5vw * var(--fs-scale)), calc(44px * var(--fs-scale)));

  /* Text-bound dimensions. These MUST ride the scale or a type bump
     clips every column it feeds. */
  --col-time:   calc(96px * var(--fs-scale));
  --col-cost:   calc(64px * var(--fs-scale));
  --col-out:    calc(58px * var(--fs-scale));
  --col-lines:  calc(56px * var(--fs-scale));
  --col-agents: calc(52px * var(--fs-scale));
  --rail-w:     calc(158px * var(--fs-scale));
}

@keyframes pulse { 0%, 100% { opacity: 1 } 50% { opacity: .35 } }
@keyframes breathe { 0%, 100% { transform: scale(1) } 50% { transform: scale(1.06) } }
