Foundation

Typography

Two families and fifteen named roles cover every surface. Geist carries the interface and the draft, Geist Mono carries data, and the role name is the API: choose a role, never a raw size.

Families

Geist carries the product, marketing, and sustained reading. Geist Mono distinguishes counts, timestamps, and identifiers. Sora exists only inside the logo.

Interface + reading
Geist
400 · 500 · 600Primary
Data + metadata
Aa 0123
Geist Mono · 400 · 500Counts, IDs
Logo only
inline
Sora 750 · −0.055emReserved
Sora is not a display face.

Use the exported logo assets. Never set headings, buttons, navigation, or campaign copy in Sora, and never use Geist below 400 or above 600.

Named scale

Every role fixes family, size, line height, weight, and tracking. The role name is the API: choose a role, never an arbitrary size.

display-xlA quiet place64/67 · 600 · −.03em
display-lgRead the draft52/56 · 600 · −.025em
displayYour words stay yours40/45 · 600 · −.02em
h1Questions on your draft32/38 · 600 · −.02em
h2Draft feedback26/33 · 600 · −.015em
h3A connection to test20/27 · 600 · −.01em
h4Draft details17/24 · 500
body-lgInline reads your whole draft, then asks what a professor would ask.18/30 · 400
proseThe square changed how the neighborhood moved through public space.17/30 · 400 · 55–72ch
body-mdWhich source would help your reader verify this connection?15/24 · 400
body-smYour draft is saved while feedback loads.13/20 · 400
labelCourse title13/16 · 500
captionLast revised 4 minutes ago12/17 · 400
overlineEvidence11/14 · 600 · +.12em
code412 words · revision_0413/20 · Mono 400
Only display roles are fluid.

display-xl, display-lg, and display scale with the viewport for marketing. Product and draft roles stay fixed so the editor never reflows between nearby widths.

Try a role

Test real copy against the scale before committing a composition.

In the draft workspace

The draft reads in prose; the margin works in body-sm, so questions never compete with the writing they refer to.

The city's decision did more than alter the square. It changed who could see their history represented in public. The debate therefore became a question about civic memory rather than a dispute over one statue.

412 wordsSaved
03

What evidence shows how residents described that change at the time?

Student draftprose · 17/30 · 55–72ch
Dimension titleoverline · written and colored
Margin questionbody-sm · 13/20
Editor rail countscode · Geist Mono, tabular figures

Rules

  • Sentence case everywhere. Headings, buttons, tabs, labels, and table headers. Uppercase belongs only to the overline, at three words or fewer.
  • Three weights. 400 for reading, 500 for labels, 600 for hierarchy. Thin text disappears on paper; bold turns every heading into a demand.
  • Readable measure. Body copy stays at 45–75ch. Draft prose targets 55–72ch.
  • Tracking is earned. Only headings at 20px and above tighten. Body copy never does.
  • Never truncate the question. Margin questions, draft passages, errors, and button labels are always shown in full.
  • Tabular figures for data. Counts, durations, and changing metrics use tabular-nums in Geist Mono.

Loading

Use the locally bundled variable files and request only the allowed weights. Geist swaps in so writing stays usable; the logo font blocks so a substitute wordmark never flashes.

@font-face {
  font-family: "Geist Inline";
  src: url("../fonts/Geist-Variable.woff2") format("woff2");
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
}
Set font-synthesis: none.

No faux bold, no synthetic italics. Email uses the system stack instead of loading web fonts.