One operating voice, and a witness
The workspace speaks in one face. Geist carries every operable surface and every figure; Geist Mono testifies. The two serifs are still mounted, but they are editorial exports now — they live in marketing, generated artifacts and the error pages, and they are never asked to make a number true.
Everything operable and every figure: body, labels, buttons, the rail, the hero number. Weight 400–600, never lighter than 12px.
03:14 · checks passed ✓
07:00 · waiting on you
Timestamps, ids, receipts, source-as-of lines. It testifies; it never persuades. Two token names point at it: --font-witness-mono and the --font-system-mono alias that the operations evidence surfaces read.
The display voice — the marketing site, slide heroes, pull-quotes, the 404 and error pages, and this documentation’s own chapter heads. It no longer renders figures: it was too fragile at display opsz.
Retained for marketing and generated artifacts only. It used to be the proof gate; it is not any more — see Figures & the proof gate.
Four levels — you can hold them in your head
Sizes flex with density; the levels never do. If a fifth level feels necessary, the surface is overgrown.
The shipped scale rides one multiplier
Every step of the 1.20 minor-third scale is written as calc(<px> * var(--font-scale, 1)), so the owner’s text size preference moves the whole system at once instead of overriding sizes one surface at a time. The dial is banded 13–17px around the shipped 15px body, and --font-scale is emitted only when it isn’t 1 — at the default the DOM stays clean.
--t-display:calc(40px*var(--font-scale,1)); --t-display-lh:1.1; --t-display-ls:-0.035em; --t-display-fw:600;
--t-title:calc(32px*var(--font-scale,1)); --t-title-lh:1.1875; --t-title-ls:-0.03em; --t-title-fw:600;
--t-heading:calc(20px*var(--font-scale,1)); --t-heading-lh:1.3; --t-heading-ls:-0.018em; --t-heading-fw:600;
--t-body:calc(15px*var(--font-scale,1)); --t-body-lh:1.4667; --t-body-ls:-0.006em; --t-body-fw:400;
--t-sub:calc(13px*var(--font-scale,1)); --t-caption:calc(12px*var(--font-scale,1)); --t-micro:…