/* Ganymede design tokens.
 * GENERATED by scripts/gen_palette.py -- do not edit by hand.
 * Ramps are built in OKLCH for perceptually even steps; every pair in the
 * script's GATES list is contrast-verified on generation.
 */

:root {
  /* ---- ramps ----------------------------------------------------------- */
  --ice-50:#e8faf8;
  --ice-100:#d1f3ee;
  --ice-200:#a9e5dc;
  --ice-300:#7cd2c5;
  --ice-400:#4cbcac;
  --ice-500:#16a493;
  --ice-600:#008a7a;
  --ice-700:#006e60;
  --ice-800:#075348;
  --ice-900:#083931;
  --ice-950:#062822;

  --ember-50:#fdf5e4;
  --ember-100:#fae8ca;
  --ember-200:#f4d19f;
  --ember-300:#ecb46f;
  --ember-400:#dd9443;
  --ember-500:#ca7718;
  --ember-600:#b15d00;
  --ember-700:#934500;
  --ember-800:#723207;
  --ember-900:#522008;
  --ember-950:#3c1407;

  --kept-50:#ebfbef;
  --kept-100:#d7f3df;
  --kept-200:#b5e5c2;
  --kept-300:#90d2a3;
  --kept-400:#6bbb83;
  --kept-500:#4ca367;
  --kept-600:#388951;
  --kept-700:#2d6e3f;
  --kept-800:#22532e;
  --kept-900:#17391f;
  --kept-950:#0f2914;

  --broken-50:#fff1ed;
  --broken-100:#ffe1da;
  --broken-200:#ffc6bb;
  --broken-300:#f9a79a;
  --broken-400:#ea8779;
  --broken-500:#d5695d;
  --broken-600:#b85249;
  --broken-700:#953f39;
  --broken-800:#732e2a;
  --broken-900:#511f1d;
  --broken-950:#3b1413;

  --slate-50:#f8f7f4;
  --slate-100:#efefeb;
  --slate-200:#dedfdb;
  --slate-300:#c4c7c2;
  --slate-400:#a6ada8;
  --slate-500:#89928e;
  --slate-600:#6b7675;
  --slate-700:#4c595a;
  --slate-800:#313d42;
  --slate-900:#18232a;
  --slate-950:#0b111a;

  /* ---- risk ramp: p(worsen) by decile. Ember only -- a probability
     never gets red/amber/green, which would invent categories from a scalar. */
  --risk-0:#fdf5e4;
  --risk-10:#fae8ca;
  --risk-20:#f4d19f;
  --risk-30:#ecb46f;
  --risk-40:#dd9443;
  --risk-50:#ca7718;
  --risk-60:#b15d00;
  --risk-70:#934500;
  --risk-80:#723207;
  --risk-90:#522008;
  --risk-100:#3c1407;

  /* ---- type ------------------------------------------------------------
     Fraunces carries the argument, Geist carries the readout. The contrast
     between an editorial serif and a grotesk built for data is the concept. */
  --font-display:"Fraunces",Georgia,"Times New Roman",serif;
  --font-ui:"Geist",system-ui,-apple-system,"Segoe UI",sans-serif;
  --font-mono:"Geist Mono",ui-monospace,"SF Mono",Menlo,monospace;

  /* 1.200 minor third from a 17px base. The small end is deliberately not
     small: the two steps below body carry captions, table cells and control
     labels, and at a 16px base they were landing near 11px. */
  --fs--2:0.78rem;  --fs--1:0.882rem; --fs-0:1rem;     --fs-1:1.2rem;
  --fs-2:1.44rem;   --fs-3:1.728rem;  --fs-4:2.074rem; --fs-5:2.488rem;
  --fs-6:2.986rem;  --fs-7:3.583rem;  --fs-8:4.3rem;

  /* the smallest type the site is allowed to use, for chart ticks and chips */
  --fs-micro:0.735rem;

  --lh-tight:1.06; --lh-snug:1.3; --lh-normal:1.6; --lh-loose:1.75;
  --tracking-tight:-0.018em; --tracking-normal:0; --tracking-wide:0.08em;

  /* ---- space: 4pt base ------------------------------------------------- */
  --s-1:4px;  --s-2:8px;  --s-3:12px; --s-4:16px; --s-5:20px; --s-6:24px;
  --s-7:32px; --s-8:40px; --s-9:56px; --s-10:72px; --s-11:96px; --s-12:128px;

  /* ---- form ------------------------------------------------------------ */
  --r-1:4px; --r-2:7px; --r-3:11px; --r-4:16px; --r-full:999px;
  --measure:65ch; --measure-tight:52ch;

  /* ---- motion ---------------------------------------------------------- */
  --dur-fast:120ms; --dur:220ms; --dur-slow:420ms;
  --ease-out:cubic-bezier(.2,.8,.2,1);
  --ease-in-out:cubic-bezier(.6,0,.2,1);

}

/* ---- semantic: dark ---- */
:root, :root[data-theme="dark"] {
  color-scheme:dark;
  --ground:#0b111a;
  --surface:#18232a;
  --surface-2:#313d42;
  --surface-3:#4c595a;
  --line:#313d42;
  --line-strong:#4c595a;
  --text:#efefeb;
  --muted:#a6ada8;
  --faint:#89928e;
  --signal:#7cd2c5;
  --signal-strong:#a9e5dc;
  --signal-quiet:#083931;
  --on-signal:#0b111a;
  --predict:#ecb46f;
  --predict-quiet:#522008;
  --kept:#90d2a3;
  --kept-quiet:#17391f;
  --broken:#f9a79a;
  --broken-quiet:#511f1d;
  --focus:#4cbcac;
  --shadow-1:0 1px 2px rgba(0,0,0,.45);
  --shadow-2:0 1px 2px rgba(0,0,0,.4),0 4px 16px rgba(0,0,0,.32);
  --shadow-3:0 2px 6px rgba(0,0,0,.45),0 16px 40px rgba(0,0,0,.42);
}

/* ---- semantic: light ---- */
:root[data-theme="light"] {
  color-scheme:light;
  --ground:#f8f7f4;
  --surface:#efefeb;
  --surface-2:#dedfdb;
  --surface-3:#c4c7c2;
  --line:#c4c7c2;
  --line-strong:#a6ada8;
  --text:#18232a;
  --muted:#4c595a;
  --faint:#6b7675;
  --signal:#006e60;
  --signal-strong:#075348;
  --signal-quiet:#a9e5dc;
  --on-signal:#f8f7f4;
  --predict:#723207;
  --predict-quiet:#f4d19f;
  --kept:#2d6e3f;
  --kept-quiet:#b5e5c2;
  --broken:#953f39;
  --broken-quiet:#ffc6bb;
  --focus:#008a7a;
  --shadow-1:0 1px 2px rgba(20,26,40,.06);
  --shadow-2:0 1px 2px rgba(20,26,40,.06),0 2px 8px rgba(20,26,40,.05);
  --shadow-3:0 2px 4px rgba(20,26,40,.06),0 12px 32px rgba(20,26,40,.10);
}
