/* Design tokens. The single source of truth for colour, type, radius and
   elevation across the whole app.

   This lives apart from shell.css because two pages — the show record and the
   public wall — deliberately don't load shell.css (they carry their own layout
   so the first paint doesn't wait on it) and were keeping hand-copied palettes
   in step by hand. They didn't stay in step: the JS colour maps on the show
   record still held the pre-audit values, and four badge colours were failing
   contrast because of it.

   Load this FIRST, before shell.css or any page styles. Nothing here paints
   anything; it only declares. */

/* Palette. Direction C, "Console": a cool neutral ground instead of the cream
   one, cobalt kept as the only colour that carries meaning.

   The cream page plus a single accent was the tell doc 30 section 7 names —
   it is what every generated design produces, and it read as generated to the
   design-literate buyer this product is sold to. Nothing else about the palette
   changed shape: the same tokens, the same jobs, shifted off warm.

   THE GROUND IS NOW WHITE, so every ratio below had to be re-measured — the
   old table was computed against #F7F6F2 and none of it carried over. Text on a
   lighter ground gains contrast, but the tinted status pills sit on new greys,
   and the stacked case (a pill on a hovered row) is what actually decides these
   values. That case is the last column, and it is the one that fails first.

   Every token clears 4.5:1 against the WORST ground it actually lands on:

     token      on white   on chrome   white on it   own tint on a hovered row
     --ink        18.61      17.36        18.61       -
     --muted       6.83       6.37         6.83       -
     --faint       5.78       5.39         5.78       -
     --accent      6.51       6.08         6.51       4.92
     --go          6.89       6.42         6.89       5.13
     --amber       6.57       6.13         6.57       4.94
     --violet      6.80       6.34         6.80       5.09
     --alert       5.96       5.50         5.96       4.71

   --alert is the only value that moved for contrast rather than for hue:
   #B83F25 came through at 4.43 on its own tint over a hovered chrome row, just
   under. #B3391F is the nearest red that clears it. --go and --amber took the
   Console values (#1F6647, #7A5710); the mock's red (#C24327) was tried and
   rejected at 4.41 in the same stacked case. */
:root{
  /* Three grounds, because --panel was doing two jobs: it painted the sidebar
     AND the cards and sheets, which only worked while both were near-white.
     They separate now — chrome recedes, panel is raised. */
  --paper:#FFFFFF;    /* the content ground: body, tables, lists */
  --chrome:#F6F7F9;   /* recedes: sidebar, mobile topbar */
  --panel:#FFFFFF;    /* raised: cards, sheets, menus, empty states */

  --ink:#101318;
  --muted:#545B68;   /* secondary text, and the fill behind white badge text */
  --faint:#5E6675;   /* tertiary. #667080 was tried and failed at 4.43 on a
                        hovered chrome row, which is where it actually sits */
  --line:#E2E5EA; --line-2:#EDEFF3;
  --accent:#2B43F5;  /* cobalt stays. It is the right anti-signal in a category
                        of purple gradients, and it is the one thing doc 30
                        said to keep */
  --alert:#B3391F;   /* was #B83F25 — 4.43 on its own tint over a hovered row */
  --go:#1F6647;      /* was #327457 — warm for this ground */
  --amber:#7A5710;   /* was #8E6217 — warm for this ground */

  /* Violet, for the pill categories that aren't a status: speaking slots,
     dinners, the "activation" budget line. */
  --violet:#6B3FBF;  /* was #7C48C9 */

  /* Surfaces and edges that were being written as raw literals on every page. */
  --white:#FFFFFF;
  --hover:rgba(16,19,24,.04);      /* row and nav hover */
  --hover-2:rgba(16,19,24,.06);    /* the active nav item, pressed states */
  --chip:#E7EAEF;                  /* avatar and segment chips */
  --tint-accent:rgba(43,67,245,.09);
  --tint-go:rgba(31,102,71,.10);
  --tint-alert:rgba(179,57,31,.06);
  --tint-amber:rgba(122,87,16,.10);
  --tint-violet:rgba(107,63,191,.10);

  /* On the ink-coloured toast, where the page palette inverts. --accent itself
     is measured against the page and goes muddy on near-black. */
  --go-on-dark:#5FE0AC;      /* 11.29 on --ink */
  --accent-on-dark:#9DB0FF;  /* 8.94 on --ink */

  /* ---- Type ------------------------------------------------------------
     Geist, replacing Inter. Inter is a fine face and the default output of
     every generated design, which is the specific thing doc 30 section 7
     says the identity has to stop signalling.

     Seven sizes, down from the twenty-nine that were in use. Anything that
     doesn't land on one of these is a mistake, not a nuance — the old spread
     had 13px and 13.5px and 14px all doing the same job on different pages. */
  --font:'Geist',system-ui,-apple-system,sans-serif;
  --font-mono:'Geist Mono',ui-monospace,'SF Mono',Menlo,monospace;

  --t-2xs:10px;    /* uppercase micro-labels: nav sections, block labels */
  --t-xs:11px;     /* badges, counts, provenance lines */
  --t-sm:12.5px;   /* secondary text, table cells, buttons */
  --t-base:13.5px; /* body, nav items, form fields */
  --t-md:15px;     /* card titles, emphasis */
  --t-lg:18px;     /* section heads */
  --t-xl:24px;     /* page title */

  /* ---- Radius ----------------------------------------------------------
     Four steps, down from twelve. The old set had 7px, 8px and 9px buttons
     living on three different pages, which is invisible individually and the
     reason the app never quite looked like one product. */
  --r-sm:6px;      /* inputs, tags, small buttons */
  --r-md:10px;     /* cards, panels, menus */
  --r-lg:16px;     /* sheets and modals */
  --r-pill:100px;

  /* ---- Elevation ------------------------------------------------------- */
  --sh-menu:0 8px 30px rgba(20,22,29,.14);
  --sh-sheet:0 24px 60px rgba(20,22,29,.24);
  --sh-drawer:0 0 40px rgba(20,22,29,.18);
}
