Design system
Design system / Typography

Editorial scale, mechanical labels.

Three typefaces, one editorial scale. Display type names the read. Mono type carries proof. Sans does the work between them.

PaperReceiptsActions
03A / Typefaces

Three families. Defined roles.

Geist Sans and Mono come from the geist npm package and load in app/layout.tsx. The serif is the system serif fallback — we have not paid for a custom face because the system pairing already feels right at editorial weight.

font-sans
Geist Sans
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 & ! ? — / · @ #
Source

geist npm package (loaded in app/layout.tsx)

Stack

var(--font-geist-sans), ui-sans-serif, system-ui, sans-serif

When to use

Body copy, descriptions, evidence prose, navigation, controls.

font-mono
Geist Mono
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 & ! ? — / · @ #
Source

geist npm package (loaded in app/layout.tsx)

Stack

var(--font-geist-mono), ui-monospace, SFMono-Regular, monospace

When to use

Counters, indexes, dates, file paths, eyebrows, compact metadata.

font-serif
System Serif
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 & ! ? — / · @ #
Source

OS default (Georgia on macOS, Cambria on Windows)

Stack

ui-serif, Georgia, Cambria, "Times New Roman", Times, serif

When to use

Display titles, headlines, section heads, editorial reads.

03B / Type scale

Every step, every value.

Sizes are pixel-anchored, not t-shirt sizes. The right column shows the live metrics; the specimen renders at the actual size so values can be confirmed in devtools. The token column maps each step to its Tailwind utility (e.g. text-display, text-h1, text-body, text-mechanical).

Display
The verified record speaks first.
Family
serif
Size
58/92px
Weight
600
Line
0.88
Tracking
-0.03em
Token
text-display

Route titles, decisive editorial reads. One per page.

H1
The verified record speaks first.
Family
serif
Size
54/76px
Weight
600
Line
0.9
Tracking
-0.025em
Token
text-h1

Page titles inside reference frames.

H2
The verified record speaks first.
Family
serif
Size
40/56px
Weight
600
Line
0.95
Tracking
-0.015em
Token
text-h2

Section heads inside reference pages.

H3
The verified record speaks first.
Family
serif
Size
34/38px
Weight
600
Line
0.95
Tracking
-0.01em
Token
text-h3

Specimen names, panel titles, pattern names.

H4
The verified record speaks first.
Family
serif
Size
28px
Weight
600
Line
1
Tracking
-0.005em
Token
text-h4

Component names in inventories, sub-section heads.

H5
The verified record speaks first.
Family
sans
Size
18px
Weight
600
Line
1.25
Tracking
0
Token
text-h5

Card titles, dense module headers.

H6
The verified record speaks first.
Family
sans
Size
14px
Weight
600
Line
1.3
Tracking
0.01em
Token
text-h6

Inline group labels, small panel heads.

Body Large
The verified record speaks first.
Family
sans
Size
18px
Weight
400
Line
1.6
Tracking
0
Token
text-body-lg

Lead paragraphs, page kickers when the read needs weight.

Body
The verified record speaks first.
Family
sans
Size
14px
Weight
400
Line
1.65
Tracking
0
Token
text-body

Default paragraph text, descriptions, evidence prose.

Body Small
The verified record speaks first.
Family
sans
Size
12px
Weight
400
Line
1.55
Tracking
0
Token
text-body-sm

Helper copy, captions under specimens, secondary metadata.

Caption
The verified record speaks first.
Family
sans
Size
11px
Weight
500
Line
1.45
Tracking
0.01em
Token
text-caption

Compact labels, footnotes, mobile section titles.

Eyebrow
The verified record speaks first.
Family
sans
Size
10px
Weight
600
Line
1.4
Tracking
0.18em
Token
text-eyebrow

Uppercase context labels above section heads. .eyebrow class.

Mechanical
The verified record speaks first.
Family
mono
Size
11px
Weight
500
Line
1.4
Tracking
0.14em
Token
text-mechanical

Counters, indexes, dates, file paths, system labels.

03C / Usage

Serif for meaning. Mono for proof.

Use display type to name the real read of a page. Use sans for everything between. Use mono for counters, indexes, paths, dates, and anything that is metadata about a claim. Never use mono to decorate.

Serif

Display, H1–H4. Editorial, ranged-loose, used at most once or twice per route.

Sans

H5, H6, all body. Default for reading and controls. If unsure, use sans.

Mono

Eyebrows, counters, file paths, timestamps. Carries the system's voice of evidence.