Typography

Major Third scale with fluid clamp() sizing. Current font: system.

Type scale

8 fluid sizes from xs to 4xl. Each uses clamp() to scale between mobile and desktop. Resize the window to see them change.

xsThe quick brown fox
smThe quick brown fox
baseThe quick brown fox
lgThe quick brown fox
xlThe quick brown fox
2xlThe quick brown fox
3xlThe quick brown fox
4xlThe quick brown fox

Body text scales deliberately

Body sizes (sm / base / lg) jump ~15–20% from mobile to desktop — enough to feel comfortable on large screens, not just a token gesture. base goes 15→18px, lg 17→20px. Headings scale on top of that, so the hierarchy stays intact at every viewport.

Body--text-base15px → 18px (fluid)

Paragraphs use fluid clamp() so prose stays readable on phones and breathes on desktop. Resize the window to feel it.

InputsInput / Textarea / Search16px floor on mobile

Form inputs are a special case — they’re hard-pinned to 16px on mobile (text-[16px] sm:text-sm) to prevent iOS Safari from auto-zooming on focus. This rule is independent of the body scale and won’t change when you tweak --text-* tokens.

Scale ratio

Progressive ratio — body text steps are tight (~1.15), heading jumps are larger (~1.33).

Progressive ratio

Smaller steps for body text (~1.15), larger jumps for headings (~1.33). Not a fixed ratio — progressive scaling feels more natural.

xs
sm
base
lg
xl
2xl
3xl
4xl

Fluid clamp() values

Every size uses clamp(min, preferred, max) — scales smoothly between mobile and desktop.

--text-xs

Captions, fine print

fluid

--text-sm

Labels, helper text

fluid

--text-base

Body text (default)

fluid

--text-lg

Lead paragraphs

fluid

--text-xl

Section headings

fluid

--text-2xl

Page sub-headings

fluid

--text-3xl

Page headings

fluid

--text-4xl

Hero / display

fluid

Font presets

Three presets: system (SF Pro), inter, and geist. Switch via the Theme popover.

Font presets

Active preset: system. Change via Theme popover.

--font-sans

Pack my box with five dozen liquor jugs.

--font-mono

Pack my box with five dozen liquor jugs.

Line height & letter spacing

Three tiers each. Tight for headings, normal for body, relaxed for long-form.

Line height

--leading-tight(1.25)

This copies design tokens, Tailwind theme, cn() utility, and the theme provider into your project. It also installs clsx and tailwind-merge as dependencies. Components use cva() for variants and React.forwardRef for ref forwarding. Use rounded-[var(--ds-radius-card)] for cards and p-[var(--ds-space-card)] for padding.

--leading-normal(1.5)

This copies design tokens, Tailwind theme, cn() utility, and the theme provider into your project. It also installs clsx and tailwind-merge as dependencies. Components use cva() for variants and React.forwardRef for ref forwarding. Use rounded-[var(--ds-radius-card)] for cards and p-[var(--ds-space-card)] for padding.

--leading-relaxed(1.75)

This copies design tokens, Tailwind theme, cn() utility, and the theme provider into your project. It also installs clsx and tailwind-merge as dependencies. Components use cva() for variants and React.forwardRef for ref forwarding. Use rounded-[var(--ds-radius-card)] for cards and p-[var(--ds-space-card)] for padding.

Letter spacing

--tracking-tightDESIGN SYSTEM-0.025em
--tracking-normalDESIGN SYSTEM0em
--tracking-wideDESIGN SYSTEM0.025em