Contrast & Accessible Color: The Practical Guide
Contrast is the one part of color design with legal force behind it: WCAG’s ratios set the floors that regulations reference, and the craft is passing them without designing by checker — building palettes where every text and surface pairing clears its floor by construction. This hub collects our guides on the rules, the science behind them, and the newer APCA model; the working overview is a palette’s full role set with every check visible.
The floors and why they exist
The numbers — 4.5:1 for body text, 3:1 for large text and UI parts, 7:1 for the enhanced tier — encode a century of legibility research into enforceable arithmetic. The intuition behind the tiers is stroke width: reading means resolving letterforms against their background, and the thinner the stroke, the more luminance difference the eye needs to trace it. That is why large text earns a relaxed floor — at 24px a letterform survives 3:1 that would sink body text — and why the same 3:1 extends to borders, icons and input outlines, which read as shapes rather than strokes. The guides here cover what each floor applies to, the exemptions (disabled controls, decoration, logos), and the honest edges: places where the ratio passes but reading still suffers, and where it fails while looking fine — the gaps a newer model was built to close. WCAG contrast ratios explained is the reference piece for the numbers themselves; AA vs AAA weighs when the enhanced tier repays its cost, and why maximum contrast isn’t maximum readability covers the comfort ceiling above the floors.
Beyond the ratio
WCAG’s ratio treats light-on-dark and dark-on-light identically; perception doesn’t. APCA — the polarity-aware model developed for WCAG’s next generation — scores what the ratio misses, which matters most in dark themes and with thin type. Our guides read both numbers side by side, the way serious contrast work increasingly does: the ratio for compliance, APCA for judgment. What is APCA introduces the model from zero; WCAG 2 vs APCA maps which verdicts actually change and in which direction — thin light-on-dark type is the classic case where the ratio says pass and your eyes disagree.
What a ratio can’t measure
A contrast check compares two colors; several of the most common accessibility failures live outside that comparison. Roughly 8 % of men see red and green as near neighbors, so a status system that encodes meaning in hue alone can pass every ratio and still be unreadable — designing for color blindness covers the three deficiency types, and never rely on color alone is the principle that survives all of them. Focus indicators fail for a different reason: the contrast exists, but against the wrong neighbor. The most quietly common failure is the gray that passed as body text being reused for placeholders and captions a shade lighter than the floor allows. For teams shipping in the EU, the European Accessibility Act turns these from best practices into obligations — which makes a repeatable testing method worth more than any single checker.
Passing by construction
The deeper theme of this hub: contrast testing is what you do when contrast wasn’t designed. A palette whose text roles are derived against their surfaces — floors built into the derivation, every pairing checked at generation time — ships accessible by default, and a brand change re-derives instead of re-auditing. That is the model Scale Composer is built on: one scale derives color, typography and grid together, and text roles leave the generator with their contrast floors already applied. The machinery lives in our color scales guide; the dark-theme half of the story is in dark mode.
Guides in this hub
- AA vs AAA: Which Level Should You Target?
WCAG AA vs AAA contrast compared: what the 7:1 floor costs a palette, computed; when AAA body text earns its keep; why W3C discourages blanket AAA.
- Contrast for Borders, Icons and UI Components
Non-text contrast under WCAG 1.4.11 sets a 3:1 floor for borders, icons, focus rings and control states — what counts, what's exempt, and why.
- Focus Indicators That Actually Show
Focus indicator accessibility in practice: why outline: none strands keyboard users, the 3:1 rule, and the two-color ring that shows on every surface.
- Large Text Contrast Rules
Large text contrast drops WCAG's floor from 4.5:1 to 3:1 — but only at 24px regular or 18.66px bold, at rendered size. The exact rules and traps.
- Never Rely on Color Alone
Never rely on color alone: the WCAG 1.4.1 accessibility rule. Why color can't be the sole signal, classic failures, and the redundant fixes that cost nothing.
- Placeholder, Caption and Secondary Text: The Gray Trap
Placeholder text contrast is the gray trap: why #999 fails at 2.8:1, why #767676 is the accessible gray at 4.5:1, and how to de-emphasize without excluding.
- Protanopia, Deuteranopia, Tritanopia: Designing for Color Blindness
Color blindness design explained by cone type: what protanopia, deuteranopia and tritanopia actually see, which palette pairs collapse, and how to fix them.
- Testing Contrast: Tools and Method
A color contrast checker audits pairings one by one. The method that scales: build palettes that pass at derivation, then scan and spot-check the rest.
- The European Accessibility Act and Your Color Palette
European Accessibility Act design requirements explained: EN 301 549 points at WCAG 2.1 AA, so 4.5:1 contrast floors now carry legal weight in the EU.
- WCAG 2 vs APCA: What Changes
APCA vs WCAG contrast compared on computed pairings: where the two models disagree — dark pairs, polarity, font weight — and how to read both numbers.
- WCAG Contrast Ratios Explained (4.5:1, 3:1, 7:1)
The WCAG contrast ratio floors explained: 4.5:1 for body text, 3:1 for large text and UI components, 7:1 for AAA — with six real pairings computed.
- What Is APCA?
APCA contrast scores pairings as Lc — polarity-aware, font-aware — instead of a ratio. What the numbers mean, and why WCAG 2.x still decides compliance.
- Why Maximum Contrast Isn't Maximum Readability
Too much contrast is real: why black-on-white text can glare at 21:1, where the comfortable reading band sits, and why WCAG ratios are floors, not targets.
Find your palette’s edges
Rules stick when you’ve watched them bind: open a palette and walk a text color toward its background — watch the ratio fall through 4.5:1, see where APCA disagrees with the ratio, and find the exact step where the pairing stops working. That edge, located once in your own palette, teaches more than any table of requirements.