System

Typography / The type scale, weights, and prose.

Type Scale

All line heights snap to an 8px baseline grid. The scale runs 12 → 14 → 16 → 18 → 20 → 24 → 28 → 36 → 45.

--text-*
Jumbo
45px48px leading6×8
Display
36px44px leading11×4
Heading 1
28px36px leading9×4
Section Title
24px32px leading4×8
Heading 2
20px28px leading7×4
Heading 3 / Lead
18px24px leading3×8
Heading 4 / Label
14px24px leading3×8
Body (reading)
16px32px leading4×8
Buttons / Nav
14px24px leading3×8
Labels / Meta
12px16px leading2×8

Headings

The heading ramp from display H1 down to H4, each rendered at production size with its family, weight, line-height, and tracking spec beside it.

h1-display → h4

The quick brown fox jumps over the lazy dog

  • StyleDisplay H1
  • Size36px
  • FamilyMix (SERF 25)
  • Weight500
  • Line44px (11×4)
  • Tracking0.01em

Build with the same weight and size across a longer mixed headline

  • StyleDisplay H1 / Mixed
  • Size36px
  • FamilySerif + Sans spans
  • Weight500
  • Line44px (11×4)
  • Tracking0.01em

The quick brown fox jumps over the lazy dog

  • StyleH1
  • Size28px
  • FamilyMix (SERF 25)
  • Weight500
  • Line36px (9×4)
  • Tracking0.01em

The quick brown fox jumps over the lazy dog

  • StyleH2
  • Size20px
  • FamilySans
  • Weight500
  • Line28px (7×4)
  • Tracking0.01em

The quick brown fox jumps over the lazy dog

  • StyleH3
  • Size18px
  • FamilySans
  • Weight500
  • Line24px (3×8)
  • Tracking0.01em

The Quick Brown Fox Jumps Over The Lazy Dog

  • StyleH4
  • Size14px
  • FamilySans
  • Weight600
  • Line24px (3×8)
  • Tracking0.01em

Body Text

The three body copy sizes: lead for section intros, body for default paragraphs, and small for captions and secondary text.

lead / body / small

The quick brown fox jumps over the lazy dog. This lead style is used below major headlines to introduce a section with a little more emphasis than body copy.

  • StyleLead
  • Size18px
  • Weight400 (Regular)
  • Line28px (7×4)
  • Tracking0.01em

The quick brown fox jumps over the lazy dog. This is the default body text style used for paragraphs and general content throughout the site. It features generous line-height for comfortable reading.

  • StyleBody
  • Size16px
  • Weight400 (Regular)
  • Line28px (7×4)
  • Tracking0.01em

The quick brown fox jumps over the lazy dog. This smaller text style is used for captions, footnotes, and secondary information.

  • StyleSmall
  • Size12px
  • FamilyBody
  • Weight400
  • Line16px (2×8)
  • Tracking0.04em

Font Variations

The SERF variable-font axis at its three named stops: font-sans (0), font-mix (25), and font-serif (100).

SERF 0 / 25 / 100

The quick brown fox jumps over the lazy dog

  • StyleSans
  • SERF0

The quick brown fox jumps over the lazy dog

  • StyleMix
  • SERF25

The quick brown fox jumps over the lazy dog

  • StyleSerif
  • SERF100

Font Weights

The four font weights available on the body face, font-medium through font-extrabold.

500 → 800

The quick brown fox jumps over the lazy dog

  • Weight500 (Medium)

The quick brown fox jumps over the lazy dog

  • Weight600 (Semibold)

The quick brown fox jumps over the lazy dog

  • Weight700 (Bold)

The quick brown fox jumps over the lazy dog

  • Weight800 (Extrabold)

Stylistic Alternates

The Innovator Grotesk body face ships three stylistic sets and fifteen character variants, all off by default. Each row shows the affected glyphs with the feature off, then on. Enable one globally with a font-feature-settings declaration on the body, or scope it to an element with a utility.

ss01 → ss03
ss01Round punctuation
off. , : ; ! ?
on. , : ; ! ?
ss02High-legibility set
offI J i j l 0 4
onI J i j l 0 4
ss03Regular numerals
off0 1 2 3 4 5 6 7 8 9
on0 1 2 3 4 5 6 7 8 9
cv01 → cv15
cv01Serifed uppercase I
offIllinois
onIllinois
cv02Serifed J
offJasper
onJasper
cv03Straight-terminal J
offJasper
onJasper
cv04G without spur
offGauge
onGauge
cv05Curved-leg R
offRender
onRender
cv06a with tail
offanagram
onanagram
cv07Single-storey a
offanagram
onanagram
cv08Double-storey g
offengaging
onengaging
cv09Serifed i
offminimal
onminimal
cv10Serifed j
offjubilant
onjubilant
cv11Lowercase l with tail
offparallel
onparallel
cv12Regular 1
off1,100
on1,100
cv13Open 4
off404
on404
cv14Regular 6
off646
on646
cv15Regular 9
off909
on909

Prose

The prose utility applied to a full long-form article: headings, paragraphs, links, emphasis, inline code, a pull quote, and both list types.

Long-form article

The opening of a long-form post

Typography on the web is an exercise in restraint. You're designing for a reader you'll never meet, on a device you can't predict, at a moment you can't choose. The best you can do is set the stage (clear hierarchy, comfortable measure, honest rhythm) and then get out of the way so the words can do their work.

This piece walks through the choices that make a reading experience feel considered. We'll cover hierarchy first, then rhythm, then the small decorative moments that turn a wall of text into a place worth staying. Along the way we'll pause on a few specimens (pull quotes, figures, lists) and look at how each one either earns its place or doesn't.

Hierarchy is a promise

A section heading is a contract with the reader. It says: the ground beneath you is about to shift. If the heading is too quiet, the shift doesn't register, and the reader drifts. If it's too loud, it breaks the spell of the prose and pulls attention away from the sentence that should be doing the work.

Good headings earn their weight through a combination of size, weight, voice, and (most often underused) the space around them. A heading with generous air above it announces itself without needing to shout. A heading that sits tight to the paragraph below it creates a sense of forward motion, as if the next thought is already arriving. Those two forces together, separation above and intimacy below, are what make a section feel like a section.

Inline treatments should be quieter than headings but louder than body. A link should signal without underlining every sentence. Emphasis should feel like a voice lowering for a moment, not a hand waving. Strong emphasis is for the sentence you'd underline in a book. And inline code should read as a different object altogether: a thing, not a thought.

On rhythm

Rhythm is the one thing most websites get wrong. They reach for leading that's either too tight (paragraphs crushed into each other, no air to breathe) or so loose the words float apart. The sweet spot is narrower than people expect, and it shifts depending on size and measure. Long lines need more leading. Short lines need less. Bigger type needs less. Smaller type needs more.

The same principle applies vertically. Paragraph spacing should feel related to line-height, not arbitrary. A paragraph gap that's half a line feels cramped. A gap of a full line feels open and generous. More than that, and the page starts to feel stretched.

A pull quote should break the column, not sit inside it. It's a guest, not a tenant.
Robert Bringhurst, The Elements of Typographic Style

Lists are another place where rhythm gets lost. A list inside prose should keep the same leading as the surrounding paragraphs, not collapse to something tighter. The marker should sit in the same column as the text, so the left edge stays clean without pushing the bullet or number into a separate gutter.

  • Set line-height on list items to match body copy, not tighter.
  • Use a modest gap between items (one-quarter to one-half of line-height) so each reads as distinct without feeling like a bulleted brochure.
  • Let the bullet or number sit with the text, not off in the gutter, so the left edge of the prose stays clean.

Ordered lists tend to work best when they inherit the same spacing rules as bullets, then just bring a little more visual structure through the numbers themselves.

  1. Ordered lists carry the same rules, but the numbers themselves become a second typographic voice.
  2. Tabular figures, if your typeface has them, keep the numbers aligned on the right edge.
  3. Without tabular figures, widths shift as numbers grow, and the indentation starts to wobble.

The quiet moments

A horizontal rule, used sparingly, gives the reader a breath. A section break says “this is a new thought, not just a new paragraph.” The rule itself should be quiet: a hairline in a muted color, centered with generous air on either side.


All of this adds up to something that's hard to describe but easy to feel. A post with good typography doesn't announce itself. The reader just keeps reading, scrolling a little, pausing at the pull quote, glancing down the list, and arriving at the end without ever noticing the choices that got them there.

That's the goal. Not typography that shows off, but typography that disappears into the experience of reading, leaving only the words, and the feeling that someone cared enough to get out of their way.