Design System

Typography

Three typefaces, three locked roles.

Three typefaces, three locked roles. Each has a single purpose; they never swap.

Inter

Decision Superiority at the Speed of Relevance
The workhorse face. Body text, UI controls, navigation, metadata, and - at 700/800 - the marketing display register on corporate surfaces.
Regular 400 · Medium 500 · SemiBold 600 · Bold 700 · ExtraBold 800
Attribute Value
Role Body, UI, navigation, metadata, marketing display
Weights 400, 500, 600, 700, 800
Case title case
Features tnum for all numeric readouts · cv11 single-storey a optional at display sizes
Source rsms.me/inter · GitHub
Fallback stack Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif

Barlow Condensed

Gridwatch · Ghost Grid · QRF · Sector
Program Sensitive · Fielded · Contested · Acquire
SemiBold 600 · Bold 700
Attribute Value
Role Wordmarks, product names, tactical labels
Weights 600, 700
Case UPPERCASE, wide-tracked
Rule Never used for prose. If it appears in a body paragraph, it’s wrong.
Source Google Fonts · GitHub
Fallback stack 'Barlow Condensed', 'Oswald', 'Arial Narrow', sans-serif

JetBrains Mono

UNK-003 · TRK-117 · 33TWN · 18:47Z
Tabular data, coordinates, callsigns, track IDs, code. The font is a scalpel - it appears inline when character alignment matters.
Regular 400 · Medium 500
Attribute Value
Role Tabular data, coordinates, callsigns, track IDs, code
Weights 400, 500
Features Ligatures disabled (font-feature-settings: "liga" 0, "calt" 0) - mission-critical readouts show literal glyphs
Source jetbrains.com/mono · GitHub
Fallback stack 'JetBrains Mono', 'SF Mono', Menlo, Consolas, monospace

All three ship under SIL OFL 1.1, self-hosted as .woff2 (primary) plus .ttf (Go tooling fallback).

On “wide grotesque.” Inter at 800 fills the marketing-display role without a fourth face. If a wider character is required later, Söhne Breit (Klim) or Degular Display (OHno) are the sanctioned paid swaps. Do not introduce a third display face without a design review.

The split rule

Uppercase is reserved for identity and tactical labels. Marketing prose is title case.

A hero heading on a product page is title case (Inter 800). The product name stamped above it is uppercase condensed (Barlow Condensed 700). A data readout below it is mono (JetBrains Mono 400). Three roles, three typefaces, never confused.

Scale

Role Face Size / leading Tracking Case Use
Display XL Inter 800 72 / 76 -0.02em title case marketing hero
Display L Inter 800 56 / 60 -0.015em title case section hero
Display M Inter 700 40 / 44 -0.01em title case section heading
Wordmark XL Barlow Cond 700 56 / 60 0.01em UPPERCASE product name in hero
Wordmark L Barlow Cond 700 24 / 28 0.04em UPPERCASE program names on cards
Wordmark S Barlow Cond 700 14 / 18 0.08em UPPERCASE card sub-headers
H1 Inter 700 28 / 36 - title case -
H2 Inter 600 22 / 30 - title case -
H3 Inter 600 18 / 26 - title case -
Body L Inter 400 16 / 24 - - -
Body Inter 400 14 / 22 - - -
Micro Inter 500 11 / 14 0.08em UPPERCASE labels, eyebrow, captions
Data JB Mono 400 13 / 18 tabular - -
Data L JB Mono 500 15 / 22 tabular - -

Signature pairing: a Micro uppercase eyebrow in electric-500 sits above a Display L title-case heading. This is the house move for every hero surface.

WebAwesome token mapping

Typography tokens bind to WebAwesome’s --wa-font-* scale so components inherit system fonts automatically:

Token Maps to
--wa-font-family-body Inter stack
--wa-font-family-heading Inter stack
--wa-font-family-code JetBrains Mono stack
--wa-font-family-longform Inter stack (no serif in the system)
--wa-font-weight-normal 400
--wa-font-weight-action 600 (buttons, interactive labels)
--wa-font-weight-heading 700
--wa-font-weight-emphasized 800
--wa-font-size-xs5xl 11, 13, 14, 16, 22, 28, 40, 56, 72 px

Barlow Condensed is intentionally not mapped to --wa-font-family-heading. It’s a dedicated wordmark face applied via .fdt-wordmark or a component part override. WebAwesome headings get Inter; FDT wordmarks get Barlow Condensed.

Go tooling

The shared internal go-fonts package (consumed by DEBRIEF and sibling Go tooling via go:embed) vends the full typeface set so any Go binary can import fonts without re-bundling.

Weights exposed as named []byte - gofonts.InterBold, gofonts.BarlowCondensedBold700, gofonts.JetBrainsMonoRegular. Go tools (folio for PDF, lipgloss for TUI) resolve system fonts without touching the filesystem or network. The package also embeds the @font-face CSS as a string for HTML contexts.