WCAG vs APCA: which contrast method should you use?
One number the law reads, one number modeled on how eyes read - and the color pairs where the two part ways.
The short answer
If you need a rule you can defend in an audit, use WCAG 2. Its contrast ratio - 4.5:1 for body text, 3:1 for large text and 3:1 for the parts of a control people need to see - is the method that accessibility laws and procurement standards point to today.
If you want text that is comfortable to read, not merely compliant, check it with APCA as well. APCA is better at the cases where WCAG's ratio is known to mislead: gray text in dark mode, thin or small type, very large headlines and text on saturated, mid-bright colors.
So the practical answer is both, in a fixed order. WCAG 2 is the floor you have to clear; APCA is a second opinion that tells you when clearing the floor is not enough. Where they disagree, look for a pair that satisfies both - the last demo in this article finds one for you.
Two formulas, side by side
WCAG 2 compares relative luminance. Each sRGB channel is decoded to linear light (divided by 12.92 at or below 0.04045, otherwise raised as ((v + 0.055) / 1.055)2.4), the channels are weighted 0.2126 red, 0.7152 green and 0.0722 blue, and the two luminances go into one ratio:
The ratio is symmetric: swap the text and the background and nothing changes. Older copies of WCAG print the linear threshold as 0.03928; the W3C corrected it to the sRGB value, 0.04045, in 2021. No 8-bit channel value falls between the two - 10/255 is 0.0392 and 11/255 is 0.0431 - so every hex color gets exactly the same answer either way.
APCA, the Accessible Perceptual Contrast Algorithm by Andrew Somers of Myndex Research, starts from a similar luminance (a plain 2.4 power curve with weights 0.2126729, 0.7151522 and 0.0721750) and then does three things WCAG does not:
- It soft-clamps near-black. A luminance below 0.022 is lifted by (0.022 − Y)1.414, a stand-in for screen flare and for the way very dark colors stop looking any darker.
- It treats the two polarities differently. Dark text on a lighter background uses the exponents 0.56 (background) and 0.57 (text); light text on a darker background uses 0.65 and 0.62.
- It reports a signed difference, not a ratio. The difference is scaled by 1.14, trimmed by 0.027 and multiplied by 100. Differences too small to matter (below 0.1 before scaling to 100) are reported as zero.
The output is Lc, lightness contrast: about +106 for black on white and about −108 for white on black. The sign only records polarity; the guidance is read from the magnitude. These are the constants of APCA-W3 version 0.0.98G-4g, the version this site implements.
| Question | WCAG 2 | APCA |
|---|---|---|
| What does it output? | A ratio from 1:1 to 21:1 | A signed Lc, about −108 to +106 |
| Swap text and background? | Same number | A different number |
| Font size and weight? | Two classes: normal and large | A table of sizes and weights |
| Very dark colors? | Only the +0.05 flare term | A soft clamp below Y 0.022 |
| Status in September 2026 | W3C Recommendation, cited by laws | Published by its author; in no W3C Recommendation |
Score one pair both ways
Pick a text color and a background, or try one of the pairs this article discusses. The left card is WCAG 2 with its three verdicts; the right card is APCA with polarity, use level and the smallest text size its guidance allows. The math lines show the intermediate luminances, so you can follow each formula step by step.
Polarity: the difference WCAG cannot see
WCAG's ratio has no idea which color is the text. APCA does. Take #595959 and white: WCAG gives 7.00:1 in both directions. APCA gives Lc +84.3 for gray text on white and Lc −89.2 for white text on the gray. With #0066CC and white the ratio is 5.56:1 both ways, while APCA gives Lc +77.0 for blue text on white and Lc −82.3 for white text on blue.
Do not turn that into a rule of thumb. Which direction scores higher depends on where the pair sits on the lightness scale, and near black the soft clamp takes over. #949494 on black is 6.92:1 - a hair short of WCAG's AAA - yet APCA gives it only Lc −44.6, and black text on #949494 only Lc +46.9. Press Swap text and background in the comparator to flip any pair and watch the Lc change while the ratio stays put.
Same ratio, different Lc
A ratio squeezes two luminances into one number, and a great many pairs share it. Every gray pair in the demo below clears the same WCAG ratio, yet APCA spreads them far apart. At 4.5:1 with dark text, #767676 on white scores Lc +71.6, while #202020 on #878787 - a ratio of 4.53:1, one step further down the lightness scale - scores Lc +37.8.
This is the heart of the disagreement. WCAG rates contrast as a ratio, so a dim pair counts as much as a bright pair with the same ratio. APCA's model holds that the same ratio looks weaker in the darker part of the range, so it gives dim pairs a lower Lc. Across the 139 dark-on-light gray pairs that sit just at 4.5:1, APCA's scores run from Lc +71.6 at the top of the scale down to Lc +32.0 at the bottom.
Seven gray pairs, one WCAG ratio
Choose a target ratio and a polarity. The demo searches every 8-bit gray pair, keeps the ones that reach the target by the smallest margin, and shows seven of them from the brightest to the dimmest. WCAG treats all seven alike; the Lc under each shows how differently APCA sees them.
Where the two methods disagree
Most everyday pairs get similar verdicts from both methods. The interesting cases are the ones where one method passes a pair the other rejects. Five of them, each checked against the same color code the demos use:
| Pair | WCAG 2 | APCA | What it tells you |
|---|---|---|---|
| #767676 on black | 4.62:1 - passes AA | Lc −30.1 - spot text only | A dark-mode gray the ratio accepts and APCA rejects for reading |
| White on #FF6600 | 2.93:1 - fails AA, even for large text | Lc −60.1 - content text at 24px | APCA accepts large white-on-orange; WCAG rejects it at every size |
| Black on #FF6600 | 7.15:1 - passes AAA | Lc +49.3 - headlines only | The ratio's favorite; APCA keeps it for big text |
| #777777 on white | 4.47:1 - fails AA | Lc +71.1 | One step from a pass, and APCA barely notices the step |
| #767676 on white | 4.54:1 - passes AA | Lc +71.6 - 24px regular or 16px bold | WCAG's lightest passing gray on white is below APCA's Lc 75 for body text |
Orange is the classic case. WCAG's ratio divides by the darker color's luminance plus 0.05, so almost anything paired with black earns a large ratio. APCA subtracts perceptually scaled lightness instead, so black text on a mid-bright color gains far less, and white text gains more. Neither answer is the "true" one. The first is the method the law cites; the second is a model built to track readability.
The rows at the bottom show a second kind of disagreement: the cliff. #777777 fails WCAG and #767676 passes, though they are one step apart on each channel, with ratios of 4.47:1 and 4.54:1. APCA has thresholds too, but it does not pretend the cliff is between these two grays - it puts both below its body-text minimum.
Size and weight
WCAG 2 has two classes of text. Normal text needs 4.5:1 (7:1 for AAA); large text - at least 18 point, or 14 point bold, which browsers render as about 24px and 18.66px - needs 3:1 (4.5:1 for AAA). Success criterion 1.4.11 adds 3:1 for the boundaries of controls, focus indicators and meaningful graphics. That is the whole model: a 12px caption and a 23px subheading need the same ratio, and so do a 24px heading and a 96px display line.
APCA ties the Lc a text needs to its size and weight, which is closer to how vision works: the contrast you need depends on the size of the detail you are looking at, as Contrast Sensitivity explains. The published guidance, as this site's tools apply it:
- Lc 90 - preferred for body text, and required for text smaller than 18px regular or 14px bold.
- Lc 75 - the minimum for body text at 18px regular (weight 400) or 14px bold (weight 700) and up.
- Lc 60 - the minimum for other content text, the words people must read that are not running paragraphs, at 24px regular or 16px bold.
- Lc 45 - the minimum for large, heavy text such as headlines: 36px regular or 24px bold.
- Lc 30 - the absolute minimum for "spot-readable" text: placeholders, disabled labels, a copyright line.
- Lc 15 - the minimum for non-text elements that must be discernible, such as dividers. Below it, treat an element as invisible to many readers.
The simple table the site's tools use is written for regular (400) and bold (700) text. The tools read 500 and 600 as 400 and 800 and 900 as 700, and hold anything lighter than 400 one level stricter - a house rule, labeled as one in the tools. It lands on APCA's own figures for light type: 24px at weight 300 needs Lc 75, and 18px at weight 300 needs Lc 90.
How big does this pair have to be?
Set a pair, a font size and a weight. The sample is drawn at that exact size. Below it, WCAG's two classes and APCA's requirement are checked side by side, and the table marks every size and weight this pair's Lc can carry.
What laws and standards use today
Every accessibility law and procurement standard that names a contrast method names WCAG 2. The success criteria behind it - 1.4.3 Contrast (Minimum), 1.4.6 Contrast (Enhanced) and 1.4.11 Non-text Contrast - read the same in WCAG 2.1 and 2.2. As of September 2026:
- European Union. EN 301 549 is the standard behind the Web Accessibility Directive and the European Accessibility Act. The version currently cited, v3.2.1, incorporates WCAG 2.1 Level AA. Version 4.1.1, published in September 2026, moves to WCAG 2.2 Level AA and takes over once it is formally cited.
- United States, federal. The Revised Section 508 Standards incorporate WCAG 2.0 Level AA.
- United States, state and local government. The Department of Justice's 2024 rule under Title II of the ADA adopts WCAG 2.1 Level AA.
- United States, businesses. The ADA Title III regulations name no technical standard; settlements and court decisions typically point to WCAG 2.x Level AA.
None of them mentions APCA. A design that passes APCA and fails WCAG 2 AA fails the standard these documents cite.
And WCAG 3?
WCAG 3 is a W3C Working Draft, not a standard. APCA was developed as a candidate contrast method for it, and early drafts included an APCA-based guideline. The current draft, dated 10 September 2026, says the contrast algorithm for WCAG 3 is yet to be determined and marks its contrast requirements as still developing. Nothing in WCAG 3 is normative yet. If someone tells you that WCAG 3 "uses APCA", they are ahead of the text.
A workflow that passes both
- Clear WCAG 2 AA first. 4.5:1 for text, 3:1 for large text, 3:1 for control boundaries, focus indicators and meaningful graphics. In a regulated market this part is not optional.
- Score the same pairs with APCA at the sizes and weights you actually ship. Treat Lc 75 as the comfort target for body text and Lc 60 for secondary text. The Accessibility Color Pair Library lists pairs already scored both ways.
- Look hardest where the methods disagree: grays on near-black in dark themes, thin or small type, text on saturated mid-bright colors, and very large display type.
- Fix by moving lightness, not hue. Walking a color's lightness away from its background raises both scores at once. How to make your brand color accessible shows the method step by step.
- Write both numbers down next to each color token, so the next person knows which pairing each value was tested against.
The orange from earlier shows how little it can take. Walk #FF6600 darker in OKLCH, keeping its hue, and the first shade where white text reaches 4.5:1 is #CB4F00. The same shade gives white text Lc −75.8, so it clears WCAG AA for body text and APCA's Lc 75 for 18px text at once. The demo below runs that search for any pair, size and weight.
Nudge one color until both methods agree
Start from a failing pair, choose the size and weight it will be used at, and pick which color is allowed to move. The search walks that color's OKLCH lightness away from the other, one step of 0.005 at a time with the hue kept, and stops at the first shade that meets WCAG's ratio for that text class and APCA's Lc for that size.
The terms, defined
Test your understanding
Six questions on the two methods. Instant feedback, no scores recorded; a wrong answer comes with a short explanation.
Quick check
Continue your journey
Contrast is where color meets reading. These pick up the threads this comparison left loose: the WCAG foundations, brand colors, dark themes and the vision science underneath.
Accessible Color Design and WCAG Contrast
The WCAG 2 foundations this comparison builds on.
Design · 115How to make your brand color accessible
Keep the hue, move the lightness: text, UI and dark-mode shades from one brand color.
Design · 63Color in Typography and Text
Applying contrast to the hardest case - text you read for minutes at a time.
Design · 31Dark Mode and Adaptive Color
The same contrast rules, now applied across a second, dark theme.
Foundations · 84Simultaneous Contrast: Why a Color Depends on Its Neighbors
The broader truth that color appearance is built from context.
Vision · 06Color Blindness and Color Vision Deficiency
Inherited and acquired forms, screening tests, and the design implications of CVD.