Skip to content

Typography

One typeface, Inter, does all the work. Hierarchy comes from size, weight and space, so the page reads calmly and the background can be loud.

CSS
css/base.css
Tokens
--font-*, --text-*, --leading-*, --tracking-*

01 — Typeface

Inter

Every heading, label and paragraph is set in Inter. Code uses the system’s monospace font.

Family
Inter
Source
Google Fonts, variable: weights 400 to 700, optical sizes 14 to 32
Fallback
Helvetica Neue, Helvetica, Roboto, Arial, sans-serif
Code
ui-monospace, SF Mono, Cascadia Mono, Roboto Mono, Menlo, Consolas

Principles

  • Hierarchy comes from size, weight and space, never from a second typeface.
  • One family, many voices: Inter at four weights covers display, headings, body and labels.
  • Body copy is 16px with a 1.6 line height, and lines stop at 64 characters.
  • Links carry a hairline underline that tightens on hover. Nothing else moves.
  • Captions and metadata step down in size and color, not in family.
  • Labels are small, uppercase and widely tracked, so they read as metadata at a glance.

Load the font

Add these lines to the <head>, before jewel.css.

HTML
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400..700&display=swap">

02 — Type scale

Styles

Every text style, largest first. Sizes are fluid: the first number is a 360px phone, the second a 1280px screen.

Display.display48–128px · Bold 700 · leading 0.95 · tracking −0.045em

Quick brown fox

Heading 1h1, .h140–80px · Semibold 600 · leading 1.02 · tracking −0.045em

The quick brown fox

Heading 2h2, .h228–44px · Semibold 600 · leading 1.08 · tracking −0.025em

The quick brown fox jumps over the lazy dog

Heading 3h3, .h322–28px · Semibold 600 · leading 1.2 · tracking −0.025em

The quick brown fox jumps over the lazy dog

Heading 4h4, .h418–20px · Semibold 600 · leading 1.2 · tracking −0.01em

The quick brown fox jumps over the lazy dog

Lede.lede18–20px · Regular 400 · leading 1.5 · muted

The quick brown fox jumps over the lazy dog.

Bodyp16px · Regular 400 · leading 1.6 · up to 64 characters a line

The quick brown fox jumps over the lazy dog. Pack my box with five dozen liquor jugs. How vexingly quick daft zebras jump. Sphinx of black quartz, judge my vow.

Caption.caption, small14px · Regular 400 · leading 1.5 · muted

The quick brown fox jumps over the lazy dog.

Label.label12px · Medium 500 · uppercase · tracking 0.12em · muted

The quick brown fox jumps over the lazy dog

Codecode, kbd, preSystem monospace at 0.9em

The quick brown fox jumps over the lazy dog

03 — Weights

Four weights

Bold is for the display size only. Headings are semibold; labels are medium.

Regular 400

Quiet type

Medium 500

Quiet type

Semibold 600

Quiet type

Bold 700

Quiet type

04 — Text colors

On glass and on solid

Four text colors, set with data-text or the --text-* tokens. The same names work on both surfaces: on a solid panel the muted gray steps down a little, because nothing shows through. See Panels and surfaces for when to use each surface.

Glass panel (default)

Default: the reading color.

Muted: captions and metadata.

Accent: links and emphasis.

Inverse on a light fill

Solid panel

Default: the reading color.

Muted: captions and metadata.

Accent: links and emphasis.

Inverse on a light fill

06 — Usage

Use it for

  • One h1 per page, then headings in order. If a heading needs to look smaller, keep the right level and add .h3 or .h4.
  • .lede for the paragraph that introduces a page.
  • .label for metadata: dates, categories, numbered section heads.
  • .caption for notes under figures, tables and forms.

Avoid

  • A second typeface, or a weight outside 400 to 700.
  • Color for emphasis. The accent is for links and focus, not for highlighting words.
  • Uppercase paragraphs. Uppercase is for short labels only.
  • Picking a heading level for its size. Screen readers use the levels to navigate.

07 — Tokens

Tokens
TokenValueWhat it’s for
--font-sansEverything except code
--font-monoCode, keys, samples
--weight-regularBody
--weight-mediumLabels
--weight-semiboldHeadings
--weight-boldDisplay
--text-2xsMicro badges only
--text-xsLabels
--text-smCaptions
--text-baseBody
--text-lgLede, h4
--text-xlh3
--text-2xlh2
--text-3xlh1
--text-displayDisplay
--text-codeMonospace size
--leading-displayDisplay
--leading-tighth1
--leading-headingh2
--leading-snugh3, h4
--leading-labelLabels
--leading-compactLede, captions
--leading-bodyBody
--tracking-displayDisplay, h1
--tracking-headingh2, h3
--tracking-subheadingh4
--tracking-bodyBody
--tracking-labelLabels
--tracking-tagTags
--measureLongest line of body text