/* Nimb design tokens. One source for the app (index.html), the static pages and docs (pipeline/seo.py) and the brand kit (brand/index.html).
   Rules: Geist 400 for text, 500 for titles and figures, nothing heavier. Filled circles only. Green and red mean Yes and No, nothing else.
   Every control that is pressed is a pill, every surface is 16 px, boxes inside surfaces are 12 px. Motion 180 ms for hover and press, 380 ms for everything that opens, closes or slides.
   Palette: today's palette is the default. The proposed palette ("next", categories moved off the Yes/No hues) is opt-in with <html data-palette="next">
   and is waiting for sign-off. Contrast is checked by the design team's script (WCAG AA for text, light and dark). */
:root{
  /* ground */
  --bg:#FAFAFA; --paper:#FFFFFF; --glass:rgba(255,255,255,.82); --glass-strong:rgba(255,255,255,.92); --glow:#FFFFFF; --ink:#111214; --muted:#62666E; --faint:#B9BCC2; --line:#E6E7EA;
  --veil:rgba(17,18,20,.055);
  /* signal: --act for selection and the primary action; --pos/--neg for Yes/No dots and lines;
     --pos-fill/--neg-fill/--act behind white text (AA 4.5:1); --pos-text/--neg-text/--act-text for coloured text on the ground */
  --act:#2F70D8; --act-text:#2862C4; --on-act:#FFFFFF;
  --pos:#3FAF76; --neg:#E9473A;
  --pos-fill:#218451; --neg-fill:#CF3B30; --onside:#FFFFFF;
  --pos-text:#1F7A4A; --neg-text:#C2362B;
  /* categories (today's palette) */
  --c-pol:#4C8DEB; --c-geo:#E9473A; --c-mkt:#F2C431; --c-ai:#3FAF76; --c-sport:#A9A383; --c-crypto:#F2892E; --c-culture:#9B7FE6;
  /* wallets and the logo bands (grey, logo only) */
  --wbg:#E2E3E6; --wb1:#6E7178; --wb2:#83868D; --wb3:#999CA2; --wb4:#AEB1B6; --wb5:#C2C4C8; --wb6:#D2D4D7;
  /* elevation and glass */
  --shadow:0 1px 2px rgba(17,18,20,.05),0 12px 32px rgba(17,18,20,.08);
  --knob:0 1px 2px rgba(17,18,20,.08),0 3px 10px rgba(17,18,20,.08);
  --blur:20px; --glass-fx:blur(20px) saturate(1.2);
  /* type */
  --sans:"Geist",ui-sans-serif,system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  --mono:"Geist Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --w-text:400; --w-title:400;
  --t-11:11px; --t-12:12px; --t-13:13px; --t-14:14px; --t-15:15px; --t-19:19px; --t-26:26px; --t-44:44px;
  /* space: a 4-pt rhythm */
  --s-4:4px; --s-8:8px; --s-12:12px; --s-16:16px; --s-24:24px; --s-32:32px; --s-48:48px;
  /* radius */
  --r-pill:999px; --r-surface:16px; --r-inner:12px;
  /* motion */
  --dur-1:180ms; --dur-2:380ms; --ease:cubic-bezier(.2,.8,.2,1); --ease-io:cubic-bezier(.65,0,.25,1);
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#0E121A; --paper:#1A1B1F; --glass:rgba(26,27,31,.82); --glass-strong:rgba(26,27,31,.93); --glow:#2A2C31; --ink:#ECEDEE; --muted:#8D9199; --faint:#4A4D53; --line:#26282D;
  --veil:rgba(255,255,255,.06);
  --act-text:#6AA2F5; --pos:#52C48A; --neg:#FF5A48; --pos-text:#52C48A; --neg-text:#FF6B5A;
  --c-pol:#6AA2F5; --c-geo:#FF5A48; --c-mkt:#F5CF4A; --c-ai:#52C48A; --c-sport:#B3AD8C; --c-crypto:#F7983F; --c-culture:#B39CF0;
  --wbg:#2C2F35; --wb1:#C9CBCF; --wb2:#B0B3B8; --wb3:#979A9F; --wb4:#7E8187; --wb5:#666970; --wb6:#53565C;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 12px 32px rgba(0,0,0,.5); --knob:0 1px 2px rgba(0,0,0,.4),0 3px 10px rgba(0,0,0,.35);
  color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#0E121A; --paper:#1A1B1F; --glass:rgba(26,27,31,.82); --glass-strong:rgba(26,27,31,.93); --glow:#2A2C31; --ink:#ECEDEE; --muted:#8D9199; --faint:#4A4D53; --line:#26282D;
  --veil:rgba(255,255,255,.06);
  --act-text:#6AA2F5; --pos:#52C48A; --neg:#FF5A48; --pos-text:#52C48A; --neg-text:#FF6B5A;
  --c-pol:#6AA2F5; --c-geo:#FF5A48; --c-mkt:#F5CF4A; --c-ai:#52C48A; --c-sport:#B3AD8C; --c-crypto:#F7983F; --c-culture:#B39CF0;
  --wbg:#2C2F35; --wb1:#C9CBCF; --wb2:#B0B3B8; --wb3:#979A9F; --wb4:#7E8187; --wb5:#666970; --wb6:#53565C;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 12px 32px rgba(0,0,0,.5); --knob:0 1px 2px rgba(0,0,0,.4),0 3px 10px rgba(0,0,0,.35);
  color-scheme:dark}

/* Proposed palette (opt-in, awaiting sign-off): Geopolitics and AI & Tech leave the Yes/No red and green. */
/* Works on <html> or on any element (the brand kit shows both palettes side by side). */
:root[data-palette="next"],[data-palette="next"]{--c-geo:#C2417A; --c-ai:#1C9EB0;}
@media (prefers-color-scheme: dark){:root[data-palette="next"]:not([data-theme="light"]),:root:not([data-theme="light"]) [data-palette="next"]{--c-geo:#E0609A; --c-ai:#3ABBD2;}}
:root[data-palette="next"][data-theme="dark"],:root[data-theme="dark"] [data-palette="next"]{--c-geo:#E0609A; --c-ai:#3ABBD2;}

/* No synthetic bold: Geist is loaded at 400 and 500 only, and the browser must never fake a heavier cut. */
html{font-synthesis-weight:none}
b,strong{font-weight:var(--w-title)}

/* Shared component utilities. .glass for chrome (dock, search, panel); .glass.strong for surfaces that float over the map and carry reading text (hover card, suggestions). */
.glass{background:var(--glass);-webkit-backdrop-filter:var(--glass-fx);backdrop-filter:var(--glass-fx);border-radius:var(--r-surface);box-shadow:var(--shadow)}
.glass.strong{background:var(--glass-strong)}

@media (prefers-reduced-motion: reduce){:root{--dur-1:1ms; --dur-2:1ms}}
