Foundations
Typography
A type scale derived from the golden ratio (φ = 1.618), creating natural visual hierarchy that feels harmonious at every size.
The Golden Ratio
Canon's type scale is built on φ (phi), the golden ratio. Larger sizes multiply by φ; smaller sizes divide. The result is proportions found throughout nature—from nautilus shells to spiral galaxies.
For the middle range (body text and small headings), we use the minor third (1.2) for finer granularity. Both ratios create harmonic progressions—they're musical.
Type Scale
Display and heading sizes use fluid typography with clamp() for responsive scaling.
Display & Headings
Body & Caption
Font Families
Three font stacks for different purposes, each with robust fallbacks.
Font Weights
Five weights provide sufficient range without excess.
Line Heights
Line height creates vertical rhythm. Note that --leading-relaxed is exactly φ (1.618).
Good design is innovative. Good design makes a product useful. Good design is aesthetic.
Good design is innovative. Good design makes a product useful. Good design is aesthetic.
Good design is innovative. Good design makes a product useful. Good design is aesthetic.
Good design is innovative. Good design makes a product useful. Good design is aesthetic.
Good design is innovative. Good design makes a product useful. Good design is aesthetic.
Letter Spacing
Tracking adjusts horizontal rhythm for different contexts.
Responsive Typography
Display and heading sizes use CSS clamp() for fluid scaling between viewport widths.
This ensures readability across devices without breakpoint jumps.
/* Fluid typography formula */
--text-display: clamp(
2.618rem, /* Minimum: φ² */
4vw + 1.5rem, /* Preferred: scales with viewport */
4.236rem /* Maximum: φ³ */
);Usage
Combine size, weight, height, and spacing tokens for consistent typography.
/* Headlines */
.page-title {
font-size: var(--text-display);
font-weight: var(--font-bold);
line-height: var(--leading-tight);
letter-spacing: var(--tracking-tight);
}
/* Body text */
.article-body {
font-size: var(--text-body);
font-weight: var(--font-regular);
line-height: var(--leading-relaxed);
}
/* Captions */
.image-caption {
font-size: var(--text-caption);
color: var(--color-fg-muted);
letter-spacing: var(--tracking-wide);
}