Skill: Apply Typography Scale
Purpose
Create clear typographic hierarchy using a hand-crafted set of font sizes, weights, and colors.
Core Rules
- Hand-crafted, not mathematical — Avoid modular scales with fractional pixels
- Use px or rem, never em — Prevents compounding issues
- Minimum 25% jumps — 16px → 20px (25%), not 16px → 18px (12.5%)
- Two weights only — 400/500 normal, 600/700 bold
- Never < 400 for UI — Too hard to read at small sizes
Recommended Scales
Marketing Page
Hero: 48-60px, weight 700, line-height 1.1
H1: 36-40px, weight 700, line-height 1.2
H2: 28-32px, weight 600, line-height 1.3
Body: 16-18px, weight 400, line-height 1.6
Small: 14px, weight 400, line-height 1.6
Caption: 12px, weight 400, line-height 1.5
Application/Dense UI
H1: 30-36px, weight 700
H2: 24px, weight 600
H3: 20px, weight 600
H4: 16px, weight 600
Body: 14-16px, weight 400
Small: 12-13px, weight 400
Line-Height Rules
Inverse proportion to size:
- Small text (12-14px): 1.6-1.7 (needs help finding next line)
- Body text (16px): 1.5-1.6
- Large headlines (30px+): 1-1.2 (needs less help)
Line Length
- Optimal: 45-75 characters per line
- Max-width: 20-35em for paragraphs
- Wide paragraphs: Increase line-height to 1.8-2.0
Decision Criteria
PASS
- Scale uses a small set of intentional sizes with clear jumps between roles
- Type hierarchy combines size, weight, line-height, and color
- Body text remains readable across marketing, app, and content contexts
- Line length and line-height fit the reading context
FAIL
- Scale relies on tiny increments that do not create hierarchy
- Font weights are too light for UI text
- Long-form text lines are too wide or cramped
em sizing compounds unpredictably in nested elements
Common Failure Modes
| Failure |
Example |
Fix |
| Em units |
1.25em parent, 0.875em child = 17.5px |
Use px or rem |
| Micro-steps |
16px, 18px, 20px |
16px, 20px, 28px |
| Weight 300 |
Light body text |
Minimum 400 |
| Long lines |
100+ characters |
Constrain to 35em |
| Uniform line-height |
1.5 for all |
Vary by size |
Examples
See examples/typography-scale/ for scale implementations.
References
references/hand-crafted-scales.md
references/avoid-em-units.md
references/line-height-proportion.md
1---2name: apply-typography-scale3description: Create clear typographic hierarchy using hand-crafted font sizes, weights, and colors4---56# Skill: Apply Typography Scale78## Purpose9Create clear typographic hierarchy using a hand-crafted set of font sizes, weights, and colors.1011## Core Rules12131. **Hand-crafted, not mathematical** — Avoid modular scales with fractional pixels142. **Use px or rem, never em** — Prevents compounding issues153. **Minimum 25% jumps** — 16px → 20px (25%), not 16px → 18px (12.5%)164. **Two weights only** — 400/500 normal, 600/700 bold175. **Never < 400 for UI** — Too hard to read at small sizes1819## Recommended Scales2021### Marketing Page22```23Hero: 48-60px, weight 700, line-height 1.124H1: 36-40px, weight 700, line-height 1.225H2: 28-32px, weight 600, line-height 1.326Body: 16-18px, weight 400, line-height 1.627Small: 14px, weight 400, line-height 1.628Caption: 12px, weight 400, line-height 1.529```3031### Application/Dense UI32```33H1: 30-36px, weight 70034H2: 24px, weight 60035H3: 20px, weight 60036H4: 16px, weight 60037Body: 14-16px, weight 40038Small: 12-13px, weight 40039```4041## Line-Height Rules4243**Inverse proportion to size:**44- Small text (12-14px): 1.6-1.7 (needs help finding next line)45- Body text (16px): 1.5-1.646- Large headlines (30px+): 1-1.2 (needs less help)4748## Line Length4950- **Optimal**: 45-75 characters per line51- **Max-width**: 20-35em for paragraphs52- **Wide paragraphs**: Increase line-height to 1.8-2.05354## Decision Criteria5556### PASS57- Scale uses a small set of intentional sizes with clear jumps between roles58- Type hierarchy combines size, weight, line-height, and color59- Body text remains readable across marketing, app, and content contexts60- Line length and line-height fit the reading context6162### FAIL63- Scale relies on tiny increments that do not create hierarchy64- Font weights are too light for UI text65- Long-form text lines are too wide or cramped66- `em` sizing compounds unpredictably in nested elements6768## Common Failure Modes6970| Failure | Example | Fix |71|---------|---------|-----|72| **Em units** | `1.25em` parent, `0.875em` child = 17.5px | Use `px` or `rem` |73| **Micro-steps** | 16px, 18px, 20px | 16px, 20px, 28px |74| **Weight 300** | Light body text | Minimum 400 |75| **Long lines** | 100+ characters | Constrain to 35em |76| **Uniform line-height** | 1.5 for all | Vary by size |7778## Examples7980See `examples/typography-scale/` for scale implementations.8182## References8384- `references/hand-crafted-scales.md`85- `references/avoid-em-units.md`86- `references/line-height-proportion.md`