1. What is “contrast”, exactly?
Contrast is the difference in lightness between two colors — typically text and its background. High contrast means text is easy to distinguish; low contrast means it blurs into the background. Reading is essentially a contrast-detection task, so contrast is the single biggest accessibility lever in typography.
The hard part is quantifying contrast in a way that matches what humans actually perceive. Two systems try to do that — both standardized, both used in practice, and they disagree meaningfully in some common cases.
2. WCAG 2: the current standard
The Web Content Accessibility Guidelines 2.2 — published as a W3C Recommendation in October 2023 — keeps the same contrast formula that shipped with WCAG 2.0 in 2008. Two colors are converted to relative luminance (a single brightness number derived from sRGB), and the contrast is a simple ratio:
contrast = (L_lighter + 0.05) / (L_darker + 0.05)
That ratio runs from 1:1 (identical colors) to 21:1 (pure black on pure white). WCAG 2 then defines pass/fail thresholds:
| Level | Normal text | Large text (18pt+ or 14pt bold) |
|---|---|---|
| AA | 4.5 : 1 | 3 : 1 |
| AAA | 7 : 1 | 4.5 : 1 |
AA is what most legal accessibility regimes audit against — the US ADA (via DOJ guidance), Section 508, and the European Accessibility Act all effectively require WCAG 2 AA for digital products. AAA is aspirational.
The model has well-documented shortcomings: it ignores the polarityof the contrast (light-on-dark and dark-on-light come out the same), it treats all hues as if they perceive equally (so saturated mid-blues can fail ratios that they look perfectly readable at), and the simple luminance math doesn't account for spatial frequency — the fact that thin, light fonts are much harder to read at the same ratio than heavy, large ones.
3. APCA: the perceptual alternative
The Accessible Perceptual Contrast Algorithm (APCA), developed by Andrew Somers, models how the human visual system actually perceives lightness differences. Instead of a ratio, APCA produces a signed Lcvalue — read as “Lightness contrast” — in the rough range of −108 to +106.
The sign tells you the polarity:
- Positive Lc — dark text on a light background (e.g. black on white ≈ +106)
- Negative Lc — light text on a dark background (e.g. white on black ≈ −108)
The magnitude tells you how strong the contrast is, perceptually. APCA's full conformance model uses lookup tables that map required Lc to specific combinations of font size and weight, but its Bronze Simple Mode defines a small set of threshold levels that approximate WCAG 2-style rules:
| Lc level | Use |
|---|---|
| |Lc| ≥ 75 | Minimum for columns of body text at 14px/700, 16px/500, 18px/400, or 24px/300 (the rough WCAG 2 AA equivalent) |
| |Lc| ≥ 60 | Minimum for content text that isn't body, column, or block text — labels, UI strings, short copy |
| |Lc| ≥ 45 | Minimum for larger, heavier text (36px regular weight or 24px bold) such as headlines |
| |Lc| ≤ 90 | Suggested maximum(not minimum) for very large bold fonts (>36px bold) and large areas of color — higher than this can make extremely bold text harder to read |
APCA also explicitly models spatial frequency: the same Lc value passes a 24px bold heading but fails a 12px light body. That's closer to how readability actually works.
4. Where they disagree
The two systems agree on extremes — pure black-on-white and pure white-on-black look great to both. The interesting cases are the middle, where APCA and WCAG 2 give meaningfully different verdicts. Three common patterns:
Light text on dark backgrounds
WCAG 2's ratio is polarity-blind, so it tells you white text on a 600-step blue is “the same contrast” as the same blue on white text. Human vision disagrees: the dark- mode version reads noticeably harder. APCA reflects that with a smaller Lc magnitude in the negative-polarity direction.
Saturated mid-blues
A saturated, mid-tone blue can hit a WCAG 2 ratio that looks fine on screen but flags as a fail because the luminance math undervalues how the eye perceives short-wavelength light. Conversely, some saturated reds and yellows pass WCAG 2 but are perceptually low-contrast. APCA's perceptual model evens this out across hues.
Thin / light-weight fonts
Two text blocks at the same WCAG 2 ratio can be very differently readable depending on font weight. APCA bakes weight and size into its required-Lc lookup, which means a design system that defines “text should be at least Lc 75” can actually rely on that rule landing readable results.
5. When to design against each
For most teams the answer is “both, for different reasons.”
- Use WCAG 2 AA as your legal floor.If a regulator, contract, or procurement audit cares about accessibility, that's the standard they'll measure against. Run automated checks against it.
- Use APCA to tune perceived readability. WCAG 2 will tell you a combination “passes”, but it won't tell you it's harder to read than it needs to be. APCA gives you a perceptual budget you can optimize against.
- Use APCA when designing the dark-mode half of your palette. This is where WCAG 2 is most inconsistent and where most product surfaces actually live in 2026.
- Don't use APCA as a compliance argument. Until a perceptual contrast model is adopted into a normative standard and incorporated by regulators, APCA is a design-quality tool, not a compliance one.
6. How Palette Daddy uses APCA
Palette Daddy ships with two algorithms for generating its 11-step color scales:
- Tailwind mode— replicates the visual character of Tailwind CSS' default scales. Vibrant, balanced, optimized for visual appeal first.
- APCA mode— tunes the lightness of each step so that text-color choices land at consistent Lc values across hues. The 600 step on a blue scale gives roughly the same APCA Lc against white text as the 600 step on a red scale, which means a single design-system rule (“use 600 for primary action backgrounds”) produces consistent readability everywhere.
Try the same input color in both modes on the generator and switch between light and dark previews to see the difference.
7. Frequently asked questions
8. Further reading
- Official APCA site (myndex.com/APCA) — interactive calculator, lookup tables, and the canonical reference.
- SAPC-APCA on GitHub — the reference implementation, with detailed write-ups of the math and history.
- WCAG 2.2 Recommendation — the current published guideline, including the success criteria for contrast (1.4.3 and 1.4.11).
- WCAG 3 Working Draft — the in-progress next version. Note: still a working draft, not normative.
