D. Typography
D.1 Faces and roles
Section titled “D.1 Faces and roles”| Role | Family | Weights | Files |
|---|---|---|---|
| Display headings | Gilroy | 800 | Gilroy-ExtraBold.woff2 |
| Light display text | Gilroy | 300 | Gilroy-Light.woff2 |
| Body, labels, controls, IDs and every other weight | Outfit | 400–700 | Outfit-Variable.woff2 |
| One short expressive accent | Unbounded | 500, 600 | Unbounded-Variable.woff2 |
Gilroy ships only in its two free weights under LICENSES/Gilroy-Free-Font-EULA.txt; Outfit and Unbounded
are SIL OFL. See fonts/README.md. The logo wordmark is supplied as vector outlines.
D.2 Self-hosted CSS
Section titled “D.2 Self-hosted CSS”Current example (1A-E02): use only shipped weights; the old Gilroy-600 quick start elsewhere in the documentation is historical. See CR-TYPE-01.
.product-display { font-family: var(--font-display); font-weight: 800; font-synthesis: none; }.product-heading { font-family: var(--font-sans); font-weight: 600; font-synthesis: none; }.product-body { font-family: var(--font-sans); font-weight: 400; }Import tokens/tokens.css. Use var(--font-sans) for body and var(--font-display) for headings.
--font-display resolves to Gilroy (use weight 800, or 300 for light display text); --font-sans resolves to Outfit. var(--font-accent) resolves to Unbounded with Outfit as fallback.
Use explicit line heights and font-synthesis: none. IDs and code use Outfit with tabular figures,
not a separate monospace family. Keep pre text wrapping on narrow screens.
D.3 Type scale tokens (family + weight)
Section titled “D.3 Type scale tokens (family + weight)”| Token / class | Size / line | Family · weight | Tracking | Use |
|---|---|---|---|---|
text-display |
72/76 (mobile 44/48) | Gilroy 800 | −0.02em | public landing hero |
text-display-sub |
32/38 (mobile 24/30) | Outfit 400 | 0 | optional sub-line under a display/heading on public and auth only |
text-heading |
48/52 (mobile 34/40) | Gilroy 800 | −0.015em | public section heads, auth brand panel |
.title-page (brand Subheading) |
32/38 (mobile 26/32) | Outfit 600 | −0.01em | one h1 per page |
.title-panel (between Body and Subheading) |
20/28 | Outfit 600 | −0.005em | card and panel titles |
.title-section |
16/24 | Outfit 600 | 0 | section titles, list-row titles |
| Stat number / big display number | 32/38 (hero stats 48/52) | Outfit 600 + tabular-nums |
−0.01em | StatCard, report totals |
| Date-chip numeral | 20/24 | Outfit 600 + tabular-nums |
0 | DateChip |
text-body |
16/24 | Outfit 400 | 0 | body, descriptions, inputs |
text-label |
14/20 | Outfit 500 | 0 | nav items, form labels, meta, dense table cells |
| Button label | 14/20 (large 16/24) | Outfit 600 | 0 | desk-button* |
.col-header |
14/20 | Outfit 600, sentence case, text-accent-ink |
0 | table headers (p.16) |
| Inline strong / pill emphasis | inherit | Outfit 700 | 0 | <strong>, pill counts |
text-caption |
12/16 | Outfit 500 | 0.01em | pills, timestamps, helper text |
.eyebrow |
12/16 | Outfit 600 uppercase | 0.08em | category kicker, text-muted (p.17) |
| IDs / shelf codes | inherit | Outfit 500 + tabular-nums |
0 | text-accent-ink under a title (p.17), text-ink in cells |
text-accent |
48/56 (mobile 32/40) | Unbounded 500 (600 allowed) | −0.01em | one phrase per layout: landing hero, auth brand panel, the empty-state hero; never in staff chrome |
D.4 font-mono decision (Codex 4)
Section titled “D.4 font-mono decision (Codex 4)”There are 235 occurrences on 227 lines in 126 files, plus .eyebrow, .chip and .status-box in CSS.
Migrate, do not alias. IDs and codes move to Outfit with tabular-nums (brand p.17 wants clear IDs in the UI family, not a mono). Secrets, digests and JSON use Outfit with the .code-text utility (font-variant-numeric: tabular-nums slashed-zero; letter-spacing: 0.02em) — owner rule: no monospace family (PLAN §0.4 supersedes this spec). The site lists are in H.6.
Part of Space Works brand → SpaceWorks UI: design-system spec, published from docs/ui-brand-spec.md. Edit it there.
Related v2.1 references
Section titled “Related v2.1 references”Machine-readable type metrics and mobile roles · Native units and host-owned scaling