/* ─────────────────────────────────────────────────────────────────────────
 * v2 type layer — TWO faces, no monospace, self-hosted.
 * From the design project "Dashboard redesign request", the file every
 * Crosslink v2 canvas loads after app.css (restored 2026-09-15 at the user's ask).
 *
 *   Space Grotesk   display only — wordmark, section titles, band figures
 *   Plex Sans       everything else — prose, labels, buttons, keys, figures
 *
 * Both faces ship in app/frontend/fonts/ and are declared in app.css, so
 * nothing is fetched from a third party, which is what the privacy section
 * promises and what the CSP (font-src 'self') allows.
 *
 * Monospace is removed by REMAPPING --mono, not by deleting it: every rule and
 * every chart that still reaches for it lands on Plex Sans. Two compensations
 * carry the weight a fixed advance used to:
 *   · tabular figures page-wide, so a live number never shifts sideways
 *     (Plex Sans's default digits are already one 600-unit advance);
 *   · ligatures and contextual alternates off on keys and hashes, so a hex
 *     string reads as characters rather than shapes.
 *
 * Voice: public infrastructure, not a trading terminal. The tracked-out
 * ALL-CAPS label is the tell, so the caps come off the label roles and the
 * letter-spacing drops to near-normal. Prose steps up: 16px for anything
 * meant to be READ, 14px for labels on something else.
 * ───────────────────────────────────────────────────────────────────────── */

/* The layer's tokens (--sans, --display, --mono, --t-body, --t-meta,
   --t-eyebrow, --tr-label) live in app.css's :root since the design system
   adopted this layer (tokens/type.css, pulled 2026-10-03). What stays here is
   what a token cannot express. */

/* a figure that updates must not move the text beside it */
body { font-variant-numeric: tabular-nums; }

/* a key is a string, not a word */
.key, .hexname, .mono, code, pre {
  font-variant-ligatures: none;
  font-feature-settings: "calt" 0;
  letter-spacing: 0.01em;
}

/* labels read as labels through weight and colour, not caps and tracking.
   The canvas names the first line; the rest are the shipped build's own
   label classes, which the canvases never drew. */
.eyebrow, .netsel a, .pill, .figchip, .uptchip,
.statuschip, .copybtn, .fold .tag, .fold .toggle, .tip-head .eyebrow,
.schip, .srow.head, .rd-eyebrow, .btag, .sorthead, .st-row.st-head, .tabs [role="tab"],
.eyebrow.wide, .se-go, .rd-copy, .board-tally, .bacts, .card-scale {
  text-transform: none;
  letter-spacing: 0.01em;
}
.eyebrow { font-size: var(--t-eyebrow); font-weight: 600; color: var(--fg-2); }

/* a state chip now holds a WORD, not a mark, so it leaves the 11px mark floor */
.figchip, .uptchip, .statuschip { font-size: var(--t-eyebrow); font-weight: 500; }
.segmented button, .copybtn { font-size: var(--t-meta); }

/* controls use the everyday sans at its everyday size */
button, .segmented button, .copybtn, .search input, nav.pages a {
  font-family: var(--sans);
  letter-spacing: 0;
  text-transform: none;
}

/* Space Grotesk sets a true 700 and runs tight, so headings need less pull */
h1, h2, h3 { letter-spacing: -0.015em; }
