Typography

Inter for everything that reads. Caveat for exactly one greeting on the homepage. The scale below is the whole system.

Inter, the system typeface

Inter is self-hosted as a variable font. All weights and optical sizes live in a single file, so the scale can shift without loading anything new.

Display 52 px · 600 · -0.025em

The quick brown fox

H1 page title 40 px · 600 · -0.02em

The quick brown fox

H2 section 24 px · 600 · -0.015em

The quick brown fox jumps over the lazy dog

H3 subhead 17 px · 600

The quick brown fox jumps over the lazy dog

Body large 18 px · 400 · 1.65

The quick brown fox jumps over the lazy dog. Some shorter words follow to give the line a sense of rhythm.

Body 16 px · 400 · 1.75

The quick brown fox jumps over the lazy dog. Most prose on the site is set at this size, in --text-secondary against the warm cream.

Small 13.5 px · 400 · 1.55

Captions, metadata, helper text. Used sparingly, usually in text-muted or text-faint.

Label 11 px · 500 · 0.12em · uppercase

Section label

Caveat, the one exception

Caveat is a handwritten script used on exactly one surface: the opening greeting on shibin.co. It never appears on any other page, in any other component, in any other context.

hey, i’m shibin.

Caveat · 48 px · --text-secondary · loaded from Google Fonts

Rules

  • Sentence case for all headings, labels, buttons, and nav.
  • Tight tracking on large type (−0.02em to −0.025em). Body text stays at default.
  • Relaxed line-height on body (1.65–1.75). Tight on headings (1.05–1.2).
  • Color discipline: headings in --foreground, body in --text-secondary, labels in --text-faint.
  • No other typefaces. No Helvetica, no Roboto, no system fallback as a feature. Inter is loaded locally; it should always be available.