Design HubStudio

1. Typography

Hierarchy, tracking, leading, composition, and whitespace — the four levers that separate clean type from cramped or formless.

Hierarchy with intent

Display headline

h1 · 32 / 40 · -0.025em · 600

Section heading

h2 · 24 / 32 · -0.01em · 600

Subsection

h3 · 20 / 28 · 0 · 600

Body — primary reading text. The quick brown fox jumps over the lazy dog.

p · 16 / 24 · 0 · 400

Secondary — de-emphasized body. The quick brown fox jumps over the lazy dog.

14 / 20 · 0 · 400

Caption — supporting hints, timestamps, meta.

12 / 16 · +0.025em · 400
Section label
h6 · 12 / 16 · +0.05em · 600 · uppercase
Tracking (letter-spacing)

Tracking covaries with size and case. Tighten as size grows (display copy looks loose at neutral). Widen for small uppercase (caps read as a blob without space).

  • Design Hubtight · -0.025em · display
  • Design Hubsnug · -0.01em · h2
  • Design Hubnormal · 0 · body / h3
  • Design Hubwide · +0.025em · captions, small text
  • Design Hubwider · +0.05em · small caps labels (h6)
  • Design Hubwidest · +0.1em · brand marks
Leading (line-height)

Same paragraph, four leadings. Body sits at 1.5; tight is for display headlines; relaxed is for long-form reading.

tight · 1.0

The studio is where the design system gets continuously tested against itself. Every theme switch is a regression check; every new component a chance to surface drift.

snug · 1.25 · headlines

The studio is where the design system gets continuously tested against itself. Every theme switch is a regression check; every new component a chance to surface drift.

normal · 1.5 · body default

The studio is where the design system gets continuously tested against itself. Every theme switch is a regression check; every new component a chance to surface drift.

relaxed · 1.625 · long-form

The studio is where the design system gets continuously tested against itself. Every theme switch is a regression check; every new component a chance to surface drift.

Composition

All four levers together. Line length capped at 70ch — eyes stop tracking cleanly past ~80 characters per line.

Field notes

A design system speaks in restraint

Good typography on screen isn't about variety. It's about predictability — a small, consistent set of sizes and weights, paired to leading and tracking that respect the eye.

The temptation when starting a system is to give every level of hierarchy its own size. By the third tier the differences start to feel arbitrary; by the fifth, the reader can no longer tell levels apart.

Three sizes, then weight

Three heading sizes — display, section, subsection — cover almost every screen UI need. Anything beyond that should reach for font-weight before reaching for a new size token.

Updated 2026-05-12 · Imad Mansour

Whitespace and attention

Same content, two rhythms. Generous whitespace around an element isolates it; isolation directs attention. The right card reads as "the thing that matters." The left reads as noise.

Cramped

Compile this method?

Workflow will be generated and validated.

Breathing

Compile this method?

Workflow will be generated and validated.

Component typography

Typography in a real UI lives inside components, not in isolation. A button isn't "14px medium" — it's a button, and the button variant owns its own typography. The consumer picks a variant, not a size.

Each row renders the element live and documents its typography. Use as a cheat sheet — or as a regression check against your own implementations.

ElementClassSize · WeightColorExtras
Buttons
.btn-sm12 · 500text-on-primaryline-height: 1
.btn-md (default)14 · 500text-on-primaryline-height: 1
.btn-lg16 · 500text-on-primaryline-height: 1
.btn-subtle12 · 500text-muted → text-primary on hoverheight: 28px
Form fields
.form-label14 · 500text-primary
.form-input14 · 400text-primaryheight: 36px
.form-input::placeholder14 · 400text-muted
We'll never share your email..form-help12 · 400text-muted
Email format is invalid..form-error12 · 400error
Tables
NAME.table th12 · 600text-muted+0.04em, uppercase
Plate-A03.table td14 · 400text-primary
Cards
Workflow.card-header16 · 600text-primary
Author and compile workflows..card-body14 (inherits) · 400text-secondaryline-height: 1.5
Status & chrome
Ready.badge10 · 500varies by colorline-height: 1, pill
Beta.tag10 · 500varies by colorline-height: 1, rounded-rect
.tab (active)14 · 500text-primaryunderline 2px primary
.tab (inactive)14 · 500text-muted
Stats & metrics
42stat value32 · 700primaryline-height: 1
plates / hrstat label12 · 400text-muted+0.05em, uppercase