Typography

Typography

Two type scales — Utility and Display — split the typographic load between functional UI text and expressive surfaces.

The two scales

ScaleUse forSizes
UtilityUI text — body, labels, captions, table cells, button labels4 steps (12/14/16/16-bold)
DisplayExpressive type — sub-headings, section headings, page titles, hero4 steps (20/24/32/42)

The split is structural, not decorative. Utility text uses optimised letter-spacing for screen-readability at small sizes; Display text uses negative letter-spacing for a tighter, more confident heading rhythm. Mixing scales (Utility-3 used as a heading, Display-1 used for a button label) breaks the system's visual hierarchy.

Font stack

The substrate ships Inter as the canonical sans-serif, with a system-stack fallback chain:

'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif

Inter is a modern, open-source workhorse face (SIL OFL 1.1), optimised for UI rendering at small sizes. The system stack fallback ensures the substrate is fully functional even if the Inter binary is not loaded — degradation is graceful.

A tenant theme can substitute any font family at the primitive layer. Common substitutions:

  • IBM Plex Sans (open-source, Carbon's canonical face)
  • Source Sans 3 (Adobe, open-source)
  • Public Sans (USWDS, public domain)
  • A tenant's own brand face

Self-hosting the font binary is the customer's responsibility; the substrate references the family by name.

The scale

Utility

TokenSize / Line / WeightUse for
typography.utility-112 / 16 / 400Caption, label, table cell
typography.utility-214 / 20 / 400Secondary body, helper text
typography.utility-316 / 24 / 400Primary body floor
typography.utility-416 / 24 / 600UI heading, button label

Display

TokenSize / Line / WeightUse for
typography.display-120 / 28 / 500Sub-heading
typography.display-224 / 32 / 500Section heading
typography.display-332 / 40 / 400Page title
typography.display-442 / 50 / 300Hero / landing

Heading hierarchy

HTMLToken
<h1>display-3
<h2>display-2
<h3>display-1
<h4>utility-4
Body <p>utility-3
<small>, helper, captionutility-2

A heading-level skip (h1 → h3 with no h2 between) breaks accessibility — screen readers rely on the hierarchy to navigate. The substrate enforces this in subsequent-milestone audit work.

Brand voice

The substrate's voice rules live in the active theme's voice block. PointSav-brand:

  • Confident — no hedging, no apology
  • Direct — action verbs first, single-clause sentences where possible
  • Professional — Bloomberg article standard, no marketing register

Banned vocabulary applies to all body and heading copy.