Source Serif Pro
Use this typeface for editorial pull and display moments. Never for UI titles, body, or controls.
- Letter spacing
- −2%
- Line height
- 102%
- Weight
- 400
Standard light and dark, slightly warm. Neutrals do the work so the product stays calm at speed.
Mocha is the one accent: one action, one selected state, one highlight. Scarcity is what keeps it legible.
Tokens stay locked. If every element shouts, none of them will be heard.
Cup mark plus wordmark. Mocha is roman, trade is italic: one word holds still, the other moves. The mark is steam on dark and ink on light — never mocha, so the accent stays free for action. Don’t redraw the cup; every re-trace drifts, and drift compounds.
Download logo kitThe full lockup is the default signature. Use the cup alone only where type can’t survive: favicons, avatars, app icons. SVGs are cropped tight for layout work; PNGs ship with clear space already built in.
Give the lockup a margin of one eighth of the mark height (H/8) on every side — inside that zone, no type, rules, or imagery. Crowding reads as noise. Below minimum size the steam lines close up: switch to the mark instead of shrinking the wordmark further.
The test is simple: if a treatment changes the silhouette or the color story, it’s out. The mark carries the brand only while it stays exact — steam on dark, ink on light, nothing else.
Four faces, four jobs. Geist runs the product, including titles. Source Serif Pro is editorial pull. Geist Mono holds numbers. Geist Pixel, dotted, marks the system. The pairing works only while each face keeps its lane — the moment two share a job, hierarchy collapses.
Weight, kerning, and leading are paired with the face — treat each card as one locked setting, not a menu. If a face feels wrong at its settings, the face is wrong for the job.
Use this typeface for editorial pull and display moments. Never for UI titles, body, or controls.
Use this typeface for UI titles, body text, nav, buttons, and forms. The whole product runs on it.
Use this typeface for hex, prices, and timestamps. Tabular figures, so columns never wobble while numbers move.
Use this typeface for indexes, kickers, status, and tickers. Label size only — it marks the system, it never speaks for it.
Same sample, four jobs. The scale is the hierarchy: when something needs more emphasis, change the level, not the face.
Brand Guidelines
Neutrals do the work. Mocha is the one accent.
142.80 · #C4552D
Open · 02 Type
Keep UI titles in Geist and prices in Mono — tabular figures keep columns steady while numbers move. Source Serif is for editorial moments, never controls. Pixel stays at label size. And never mix all four faces in one component; three voices in one card is already an argument.
Think rhythm, not rainbow. Gray ramp first, mocha once; status for forms, signals for charts. Values are locked — don’t interpolate new grays or invent a second accent. Restraint is the mechanism: the accent means something because it is rare.
The one accent: a single action, a selected state, or a highlight, never the page fill. Mocha lite is the type that sits on mocha: posters, lockups, a button label. Same pair in both themes. Click to copy.
Product default. Near-black ground, near-white type, the same mocha. Click a field to copy the hex.
Start here. Background is the canvas. Foreground is body and the default button. Mocha is the one action that isn’t neutral.
Borders, muted type, hairlines, disabled states. Stay on the ramp instead of mixing a new gray: eight steps everyone shares beat a hundred grays nobody can name. Standard UI values, barely warm. Mocha is the accent, not the gray.
Cards sit on Elevated. Hover is the lift. Muted is secondary type. Foreground hover is the text state over a control.
Border at rest. Input is the field fill. Pressed is the down state. Selected and accent muted are thin mocha washes on the gray, not terracotta fills. Focus and accent hover are mocha. Disabled is ramp gray. Overlay is the modal scrim.
Forms, toasts, banners. Pair the solid with its muted well. Danger is validation and destructive, not P&L. Clay stays on the chart — if danger also meant loss, neither signal could be trusted.
Sky, tan, gold, sage, lime, clay, rose. The secondary set. Sage is profit, clay is loss. Never a primary button, never the brand: the moment a signal becomes a control, the chart loses its language.
Near-white canvas, near-black type, the same accent. Light is a remap of the same roles — nothing new is invented on the way over.
Start here. Background is the canvas. Foreground is body and the default button. Mocha is the one action that isn’t neutral.
Borders, muted type, hairlines, disabled states. Stay on the ramp instead of mixing a new gray: eight steps everyone shares beat a hundred grays nobody can name. Standard UI values, barely warm. Mocha is the accent, not the gray.
Cards sit on Elevated. Hover is the lift. Muted is secondary type. Foreground hover is the text state over a control.
Border at rest. Input is the field fill. Pressed is the down state. Selected and accent muted are thin mocha washes on the gray, not terracotta fills. Focus and accent hover are mocha. Disabled is ramp gray. Overlay is the modal scrim.
Forms, toasts, banners. Pair the solid with its muted well. Danger is validation and destructive, not P&L. Clay stays on the chart — if danger also meant loss, neither signal could be trusted.
Sky, tan, gold, sage, lime, clay, rose. The secondary set. Sage is profit, clay is loss. Never a primary button, never the brand: the moment a signal becomes a control, the chart loses its language.
Four ways the palette breaks. Each one looks fine in isolation; each one spends the accent’s scarcity or the chart’s vocabulary, and neither comes back cheap.