Skip to content

Typography

Two-family type system: Inter for display/headlines, system-ui for body, IBM Plex Mono for data/code.

Type Scale

RoleFontSizeWeightLine HeightTracking
DisplayInter48–72px600–7001.0–1.1-0.02em
H1Inter32–48px6001.2-0.02em
H2Inter24–32px6001.25-0.01em
H3Inter20–24px5901.3-0.01em
Bodysystem-ui15–18px4501.6normal
Smallsystem-ui13–14px4501.5+0.01em
CaptionIBM Plex Mono11–12px4001.4normal
UI labelsystem-ui12–13px590–6001.4+0.06em (ALL CAPS)

Usage

css
h1 {
  font-family: var(--font-display);
  font-size: var(--type-scale-h1);
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.2;
}

p {
  font-family: var(--font-body);
  font-size: var(--type-scale-body);
  font-weight: 450;
  line-height: 1.6;
}

.mono {
  font-family: var(--font-mono);
  font-size: var(--type-scale-caption);
}

Rules

  • Three-weight system: 450 (read), 590 (emphasize), 600 (announce). Never use 700+ unless you have a good reason.
  • Use letter-spacing on ALL CAPS text (+0.06em) and negative tracking on large headings (-0.02em).
  • Monospace font for IDs, hashes, timestamps, and code.
  • Avoid scrollIntoView in embedded previews (breaks iframes).
  • Never use text-align: justify (creates rivers on the web).