Foundations / Typography
Geist, compressed to the edge of legibility.
Three voices give every interface its rhythm. Display compresses to announce. Body relaxes to read. Mono labels — uppercase, tracked open — speak the operator's voice for asset codes, timestamps, and audit lines.
Display — 56 / 0.98 / -0.06em
The decision to compress display type past comfort — into engineered-object territory — is the system's loudest move. At -0.06em the words stop reading as prose and start reading as labels, which is what operators scan for. Pair with line-height 0.98–1.02 so verticals stay tight; the negative tracking does the rhythm work.
Hierarchy comes from size and tracking — never from weight. Three weights only: 400 reading, 500 interactive, 600 announcing.
Display L — 42 / 1.02 / -0.055em
Heading 1 — 32 / 1.12 / -0.045em
Heading 2 — 24 / 1.2 / -0.035em
Body — 14 / 1.55 / -0.005em
Mono Label — 10 / 1.0 / +0.14em — uppercase
Uppercase is a mono responsibility. Geist Sans uppercase fights the negative tracking and reads as shouting; Geist Mono with positive tracking reads as a label. This is the only rule the system breaks for: every uppercase string is mono.
Numbers are tabular. Any KPI, stat, table column, or time value uses tabular-nums. Operators compare numbers top-to-bottom; tabular prevents the jitter.