Skip to content
Get Started

Foundation demo // Type specification

Measurements, weights and hierarchy in one contract.

The type specification defines every metric so product and engineering share a single typographic contract—no ad-hoc pixels, no tribal knowledge.

Metrics Line-height, tracking & optical size
Accessibility Minimum sizes & contrast pairs
Implementation Utility classes & CSS variables
Token-locked WCAG AA Fluid

Act I // Metrics

Line-height, tracking and optical size locked to tokens.

Every typographic measurement lives in a CSS custom property. Changing one token reflows the entire hierarchy without scattering pixel overrides across components.

Line-height --vl-lh-tight: 1.2 Display / hero headlines
Line-height --vl-lh-normal: 1.5 Body copy and paragraphs
Tracking --vl-tracking-wide: 0.04em Kickers and labels
Optical size font-optical-sizing: auto Browser adjusts weight for size

Act II // Accessibility

Minimum sizes and contrast pairs baked into the color system.

Body text never drops below 16px. Kickers and small print floor at 12px. Every text token is paired with a surface token that guarantees WCAG AA contrast.

Body ≥ 16px Small ≥ 12px AA 4.5:1
contrast pairing --vl-text-primary on --vl-bg-main → 12.4:1 --vl-text-muted on --vl-bg-surface → 7.2:1 --vl-text-accent on --vl-bg-main → 5.8:1
Rule

Never rely on color alone.

Underlines, icons or weight changes reinforce meaning for all users.

Act III // Implementation

Apply via utility classes and CSS variables—not ad-hoc pixels.

Use vl-display-xl, vl-title-lg or vl-body-lg classes to assign roles. Override at the token level for theming, never at the component level.

.vl-display-xl Hero headings · clamp(2.5rem, 5vw, 4rem)
.vl-title-lg Section heads · clamp(1.5rem, 3vw, 2.25rem)
.vl-body-lg Lead paragraphs · 1.125rem / 1.6
.vl-kicker Eyebrow labels · 0.75rem / wide tracking

Act IV // Applied specification

Metrics, accessibility and utility classes: one typographic contract.

Lock every measurement to a token, pair text and surface colors for contrast, then apply roles via utility classes instead of ad-hoc pixel values.

Metrics Line-height, tracking and optical size in CSS custom properties.
Accessibility Minimum sizes floored at 16/12px with WCAG AA contrast.
Implementation Utility classes map roles; tokens override for theming.
Fluid clamp() values adapt to viewport without breakpoint overrides.