ADR-0099 Three type roles and five faces
Amends: ADR-0023
#Context
ADR-0098 chose the direction: an instrument voice for the interior themes and a signage voice for the field themes, with one display face shared by all four. ADR-0023 gave the system two type roles, display and body, resolved per theme. The new direction also relies on figures that line up: readings, counts, times and codes. Until now that meant a body face with tabular numerals, which gives no signal that a string is data.
#Decision
A third role, mono. Components read --wr-family-mono for figures that line up, the same way they read display and body. The verifier's role list now names three roles.
Five faces, all from google/fonts at a pinned commit, under the SIL Open Font License, recorded in packages/tokens/assets/fonts/upstream/SOURCES.md:
| Role | Interior themes | Field themes |
|---|---|---|
| display | Big Shoulders Display | Big Shoulders Display |
| body | Chivo | Atkinson Hyperlegible Next |
| mono | Chivo Mono | Atkinson Hyperlegible Mono |
- Display is condensed. Set in caps, it is for page titles indoors, and
for section headings too in the field. It is never used for body copy or below 24px. Its fallback leads with Arial Narrow, the closest common metric.
- Field faces stay the Atkinson family (ADR-0023's legibility argument),
moved to its Next and Mono cuts.
The old faces (Signika Negative, Inter, Atkinson Hyperlegible 400 and 700) are removed from the upstream set and from both apps. subset-faces.py subsets the new faces to the declared Latin-1 range. Each app ships the licence text beside the faces.
#Consequences
- No component reads a family role yet: components inherit the body face from
the root. Applying display and mono to components is the component treatment unit. No scene value moved, because fixtures render in the engine's metric face.
- Both apps now load five variable faces, which subset to 128,456 bytes per
app in total.
#Rejected
- Tabular numerals in the body face instead of a mono role. They give no
signal that a string is data, and field legibility wants the Mono cut's distinguishable 0, O, l and 1.
- Italic cuts. Nothing in the direction uses them.