/* tokens.css — Stablecoin Beat Design System v1.0
   Source of truth: DESIGN.md (LOCKED, owner-approved 2026-08-16).
   Brand tokens + self-hosted type. No CDN font loads — see DESIGN.md §3
   (GDPR: Google Fonts CDN must not be linked in production). */

/* ── self-hosted fonts ──────────────────────────────────────────
   Big Shoulders Display and Public Sans are variable fonts; Google
   serves one file per subset covering the full weight axis, so each
   @font-face below declares a weight RANGE and the browser
   interpolates the exact instance requested. Two subsets (latin,
   latin-ext) cover the site's English-plus-accented-names content
   (company/regulator names carry diacritics); vietnamese omitted. */
@font-face {
  font-family: 'Big Shoulders Display';
  font-style: normal;
  font-weight: 700 900;
  font-display: swap;
  src: url('/static/fonts/big-shoulders-display-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Big Shoulders Display';
  font-style: normal;
  font-weight: 700 900;
  font-display: swap;
  src: url('/static/fonts/big-shoulders-display-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/static/fonts/public-sans-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Public Sans';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('/static/fonts/public-sans-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Public Sans';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/static/fonts/public-sans-italic-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Public Sans';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('/static/fonts/public-sans-italic-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ── brand tokens (DESIGN.md §2) ──────────────────────────────── */
:root{
  /* surfaces & ink */
  --paper:      #F5F7FB;   /* page background */
  --panel:      #FFFFFF;   /* chart panels, header */
  --ink:        #10182B;   /* primary text, data lines, footer bg */
  --ink-2:      #46516B;   /* secondary text */
  --faint:      #9AA5BE;   /* captions, axis labels, table headers */
  --line:       #D9DEEC;   /* hairlines inside tables/lists */

  /* brand */
  --blue:       #213FD5;   /* THE blue — rgb(33,63,213), from the logo. Surfaces, plates, par lines, links */
  --blue-dk:    #1A33AE;   /* hover/pressed on blue; link hover on white */
  --blue-tint:  #E7EBFB;   /* row hover, inline-code bg, link underline */
  --on-blue:    #EAF0FF;   /* secondary text on blue plates */
  --line-on-blue: rgba(255,255,255,0.28);

  /* semantic — see DESIGN.md §1: blue=institution/peg, magenta=alive (hairlines/pulse only,
     never a surface), wine=broken peg (±0.5% band violation only; ordinary negatives are NOT red) */
  --thread:     #E0218A;   /* magenta: hairlines + pulse ONLY */
  --alert:      #7E2B3E;   /* wine: depegs, a series ink, and the negative
                              pole of a signed scale — DESIGN.md section 2.
                              Encodes a SIGN, never a judgment. */

  /* type — self-hosted; the display face is a swappable slot (DESIGN.md §3) */
  --disp: 'Big Shoulders Display', 'Arial Narrow', sans-serif;
  --sans: 'Public Sans', Helvetica, Arial, sans-serif;

  /* layout */
  --max: 1180px;       /* page container */
  --measure: 680px;    /* article reading column */
}

/* There is no green token. Positive changes use a plain "+" prefix in ink (DESIGN.md §5).
   No additional grays, no gradients, no shadows anywhere on the site — depth comes from
   rules and plates (DESIGN.md §2, §7). */

/* ── categorical palette (DESIGN.md §6.12, owner amendment 2026-09-06) ──
   For charts with 3+ co-equal series ONLY; one-subject charts keep the
   blue/ink rule. Always assigned in this order. JS twin: static/js/palette.js
   (window.SB_CAT) — the two are pinned together by tests/test_palette.py. */
:root{
  --cat-1:#213FD5; --cat-2:#A93A4A; --cat-3:#1F8A8A;
  --cat-4:#B9862F; --cat-5:#66788C; --cat-6:#7A5FB5;
}
