APCA vs WCAG 2: what Lc means and where the two contrast methods disagree
Chrome DevTools can now show an “Lc” score where it used to show AA and AAA, the two pass levels of the Web Content Accessibility Guidelines (WCAG). White text on an orange button can fail one check and look fine in another. WCAG 2 gives a ratio such as 4.5:1. APCA, the Accessible Perceptual Contrast Algorithm, gives a lightness contrast value, written Lc, such as Lc 75 or Lc -60, and ties it to font size and weight. We computed both for the same colors to see where the two methods give different answers.
Short answer
- For compliance, use WCAG 2. Its 4.5:1 for normal text and 3:1 for large text (24px, or 18.66px bold) are the contrast rules that accessibility laws point to today, through WCAG 2.0, 2.1 or 2.2.
- APCA is a separate method by Andrew Somers (Myndex), published as a public beta. It is not part of WCAG 2, and the current WCAG 3 draft has not chosen a contrast method. The W3C working group still lists it as an option to research.
- The two disagree most on mid-tone colored backgrounds and on dark ones. On a medium blue, black text gets the higher WCAG 2 score and white text the higher Lc; a gray that passes AA on black sits below APCA’s minimum for any text.
- A safe route: pass WCAG 2, then use Lc as a second opinion for body text, thin fonts and dark mode. Our contrast checker shows both for one pair.
Key numbers
- Across 4,096 background colors, WCAG 2 and APCA choose a different text color (black or white) for 1,151, or 28% (our calculation, apca-w3 0.1.9).
- On gray backgrounds, black text starts to beat white at #767676 by WCAG 2 and at #A4A4A4 by APCA, so the two methods pick different text colors for 46 grays (our calculation).
- #757575 text on black passes WCAG AA at 4.55:1 but scores Lc -29.6, under APCA’s Lc 30 minimum for any text (our calculation).
- WCAG 2’s 4.5:1 is 3:1 multiplied by 1.5, the contrast loss W3C associates with 20/40 vision (W3C, Understanding SC 1.4.3).
- The WCAG 3 Editor’s Draft of 7 October 2026 says the contrast algorithm “is yet to be determined” (W3C).
Where the standards stand
WCAG 2.2 is a W3C Recommendation, and its contrast rule (success criterion 1.4.3) is the ratio. The laws that cite WCAG name a version of WCAG 2:
- United States, state and local government websites: the Justice Department’s 2024 rule adopts WCAG 2.1 level AA; after an April 2026 extension the deadlines are 26 April 2027 for governments serving 50,000 people or more and 26 April 2028 for smaller ones (ADA.gov).
- United States, federal agencies: Section 508 requires WCAG 2.0 levels A and AA (U.S. Access Board, E205.4).
- European Union: the European Accessibility Act relies on the standard EN 301 549. Version 3.2.1 uses WCAG 2.1; version 4.1.1, published on 2 September 2026, moves to WCAG 2.2, and until the Commission cites it in the Official Journal, expected on 16 December 2026, version 3.2.1 remains the standard in force (National Disability Authority, Ireland).
None of these mentions APCA. WCAG 3 is still a draft. Its Editor’s Draft of 7 October 2026 writes the text contrast requirement as “meets @@[contrast measure to be determined]” and adds: “The contrast algorithm used in WCAG 3 is yet to be determined. For this draft, the requirement assumes the algorithm will include a size/weight factor.” The published Working Draft has the same placeholder.
APCA was in earlier WCAG 3 drafts. According to Adrian Roselli’s April 2026 summary, it “was marked for removal in early 2023” under the rule that exploratory content without working-group support is dropped after six months, and the working group “pulled it from the July 2023 WCAG3 working draft”. Commenting on that post on 15 April 2026, Andrew Somers wrote that “APCA is draft guidance we are actively testing and evaluating” and that “no one should be calling it ‘WCAG 3’”. Myndex’s own compliance page asks tools to describe it this way: “APCA™ is the candidate contrast method for WCAG 3, and is currently in public beta. WCAG 3 is still in development and subject to changes prior to adoption.” The W3C draft quoted above does not name a candidate.
Browser tools moved faster than the standard. On 2 June 2026 Google wrote that the APCA calculator in Chrome DevTools “has officially left its experimental phase” and that “APCA replaces the legacy AAA/AA contrast guidelines” when the setting is on (What’s new in DevTools, Chrome 149; the setting is under Settings, Preferences, Elements, “Enable APCA contrast guidelines”). That is a choice about what DevTools displays. It does not change which test an audit or a regulation uses.
How each number is computed
WCAG 2 turns each color into relative luminance, the amount of light the screen gives off for it, weighted by how sensitive the eye is to red, green and blue, from 0 for black to 1 for white. It adds 0.05 to both and divides the lighter by the darker:
ratio = (L_lighter + 0.05) / (L_darker + 0.05)
The result runs from 1:1 to 21:1, and swapping the two colors gives the same number. W3C’s Understanding page for 1.4.3 explains the thresholds: 3:1 “is the minimum level recommended by ISO-9241-3 and ANSI-HFES-100-1988”, and people with 20/40 vision lose roughly 1.5 times in contrast sensitivity, so “3 * 1.5 = 4.5 to 1”; for 20/80 vision it gives about 7:1, the AAA level. The 0.05 “is based on Typical Viewing Flare”, light reflected off the screen. Ratios are not rounded: 4.499:1 fails.
APCA also starts from luminance, with a few differences. It decodes each channel with a plain power of 2.4, which makes dark colors come out a little darker than in WCAG 2. Instead of adding 0.05 to everything, it lifts only colors very close to black, and does so gradually. Then it raises the background and text luminance to slightly different powers, with one pair of powers for dark text on a light background and another pair for light text on a dark one, takes the difference and scales it. In apca-w3 0.1.9 (base algorithm 0.0.98G-4g):
Y = 0.2126729·(R/255)^2.4 + 0.7151522·(G/255)^2.4 + 0.0721750·(B/255)^2.4 if Y < 0.022: Y = Y + (0.022 − Y)^1.414 dark text on light: Lc = ((Ybg^0.56 − Ytext^0.57) × 1.14 − 0.027) × 100 light text on dark: Lc = ((Ybg^0.65 − Ytext^0.62) × 1.14 + 0.027) × 100 Lc = 0 if the scaled difference (before − or + 0.027) is under 0.1 in size, or if the two Y values differ by less than 0.0005
“APCA is a method for predicting text contrast on self-illuminated displays for web-based content. Some use-cases are prohibited by license, including the following: use in medical, clinical evaluation, human safety related, aerospace, transportation, automotive, military applications, are strictly prohibited without a specific license in writing granting such use.” (Myndex, required next to the formula.)
The result is positive for dark text on a light background and negative for light text on a dark one; this direction is called polarity. Black on white is Lc 106.0, white on black Lc -107.9. Because the two cases use different powers, swapping text and background changes the size of the number too, which is why a tool has to know which color is the text. Somers’s Why APCA page explains the design goal: “a contrast value of Lc 60 represents the same perceived readability contrast, across the available range of colors”, and it argues that WCAG 2 “far overstates contrast for dark colors”. Those are the author’s claims; the next section shows what they mean in numbers.
Where the two disagree
The pairs below were picked to show where the methods split; the share across all colors is further down. Each tile shows the pair in Arial, the reference font APCA’s size tables assume. Under it are the WCAG 2 ratio, the Lc value and the smallest text size APCA’s lookup table allows for that Lc at weights 400 and 700. For reading the captions: APCA’s levels are Lc 75 for body text, Lc 60 for other text people read, Lc 45 for headlines and Lc 30 for placeholder and disabled text (details in the next sections).
- Body text at 16px, weight 400Bold text at 16px, weight 700#FFFFFF text on #2196F3WCAG 2: 3.12:1 (large text only) · APCA: Lc -63.1APCA smallest size: 23px at 400, 15.5px at 700Fails WCAG for normal text (passes for large text). Its Lc is larger than black text’s on the same blue.
- Body text at 16px, weight 400Bold text at 16px, weight 700#000000 text on #2196F3WCAG 2: 6.72:1 (passes AA) · APCA: Lc 46.3APCA smallest size: 39px at 400, 23.5px at 700Passes WCAG AA. Lc 46.3 is just above the headline level, so the table wants 39px at weight 400.
- Body text at 16px, weight 400Bold text at 16px, weight 700#FFFFFF text on #E53935WCAG 2: 4.22:1 (large text only) · APCA: Lc -73.2APCA smallest size: 19px at 400, 14.5px at 700Fails WCAG AA by a little. Lc -73.2 is above Lc 60, the level for text people read.
- Body text at 16px, weight 400Bold text at 16px, weight 700#000000 text on #E53935WCAG 2: 4.96:1 (passes AA) · APCA: Lc 36.4APCA smallest size: 86px at 400, 43px at 700Passes WCAG AA. Lc 36.4 is under Lc 45, the headline level.
- Body text at 16px, weight 400Bold text at 16px, weight 700#777777 text on #000000WCAG 2: 4.68:1 (passes AA) · APCA: Lc -30.6APCA smallest size: 107px at 400, 69px at 700Passes WCAG AA. Lc -30.6 is just above Lc 30, the level for placeholder text.
- Body text at 16px, weight 400Bold text at 16px, weight 700#BBBBBB text on #222222WCAG 2: 8.28:1 (passes AAA) · APCA: Lc -63.3APCA smallest size: 23px at 400, 15.5px at 700Passes WCAG AAA. Lc -63.3 is under Lc 75, the body-text level.
- Body text at 16px, weight 400Bold text at 16px, weight 700#FFFFFF text on #FF8800WCAG 2: 2.39:1 (fails) · APCA: Lc -51.5APCA smallest size: 31px at 400, 20.5px at 700Fails WCAG 2. Its Lc (-51.5) is close to black text’s on the same orange (57.5).
- Body text at 16px, weight 400Bold text at 16px, weight 700#767676 text on #FFFFFFWCAG 2: 4.54:1 (passes AA) · APCA: Lc 71.6APCA smallest size: 19.5px at 400, 14.5px at 700The classic AA borderline gray. Lc 71.6 is just under Lc 75, the body-text level.
The pattern is easiest to see on grays. The charts below run the background from black to white and plot the score for white text (solid) and black text (dashed). Where the lines cross, the better text color changes.
WCAG 2 ratio
APCA, size of Lc
Gray is the mild case. Over 4,096 colors spread evenly through the RGB cube (every channel in steps of 17), white text scores higher by WCAG 2 on 35% of backgrounds and by APCA on 63%; they disagree on 28%. Of those 1,151 backgrounds, 855 (74%) are strongly saturated colors (HSL saturation 50% or more), such as the blue, red and orange above. That is the complaint behind Stack Overflow’s switch: its design team wrote that WCAG’s algorithm “struggles to accurately assess color contrasts when using orange” (Stack Overflow blog, August 2024).
The dark end is the other split. WCAG 2’s 0.05 is added to both colors, so near black the darker color’s luminance barely matters and fairly dim gray text reaches 4.5:1. #757575 on black passes AA at 4.55:1, while APCA gives it Lc -29.6. By APCA’s levels, that is too little for any text, so on very dark backgrounds a pass at AA is worth a second look.
Using both in practice
- Check every text and background pair against WCAG 2 first: 4.5:1 for normal text, 3:1 for large text (24px, or 18.66px bold) and for interface parts. That is what an audit will test.
- For body text, look at the Lc as well. APCA’s table asks for Lc 90 at 16px and weight 400; Lc 75 is enough from 18px. Below that, increase the size, the weight or the contrast. In dark themes this flags gray text that passes AA with a low Lc.
- When the two disagree on a colored button, pick a color that satisfies both. For white text on the orange #FF8800 (2.39:1, Lc -51.5), the nearest background of the same hue that passes both is #B66000: 4.5:1 and Lc -76.2. Our contrast checker finds such a color for any pair.
- If you choose APCA over WCAG 2 for some colors, as Stack Overflow did (target Lc 60 below 32px and Lc 45 at 32px or larger), be aware that those colors can still fail a WCAG 2 audit.
What an Lc number means
APCA has no single pass mark. Its levels depend on what the text is for. These names come from Myndex’s compliance page and the descriptions from APCA in a Nutshell:
| Lc | Name | What it is for |
|---|---|---|
| Lc 90 | Preferred Body Text | The preferred level for columns and paragraphs of body text. |
| Lc 75 | Minimum Body Text | The lowest level for body text, and for any larger text where readability is important. |
| Lc 60 | Minimum Fluent text | Text people should read that is not body, column or block text. |
| Lc 45 | Minimum Large text | Large, heavier text such as headlines; icons with fine detail. |
| Lc 30 | Minimum Any text | Non-content text only: placeholders, disabled text, solid icons. |
| Lc 15 | Invisibility point | Certain non-text only, such as dividers; below this treat as invisible. |
The same page says these levels are roughly what AA means in WCAG 2 and that for an AAA equivalent you add Lc 15 to each. There is no fixed Lc that equals 4.5:1. The classic AA gray #767676 on white is Lc 71.6, while #888888 on white fails AA at 3.54:1 and still scores Lc 63.1, above the Lc 60 level for text people read. “Lc 60 is the body-text minimum”, which some articles state, does not match APCA’s own documents: Lc 60 is for text that is not body text, and Lc 75 is the body minimum.
The finer levels use a lookup table of minimum font size by weight. These rows come from the table in the apca-w3 package (sizes in CSS pixels, reference font Helvetica or Arial):
| Lc | Weight 300 | Weight 400 | Weight 700 |
|---|---|---|---|
| Lc 90 | 21px | 16px | 14px |
| Lc 75 | 24px | 18px | 14px |
| Lc 60 | 42px | 24px | 16px |
| Lc 45 | 72px | 42px | 24px |
Myndex’s own documents do not quite agree on these sizes: APCA in a Nutshell gives 14px at weight 400 for Lc 90, the package table 16px. We use the package table, the one tools are told to implement. The table is for fonts like Helvetica with an x-height of about half the font size. A font with a smaller x-height needs a larger size: APCA in a Nutshell gives Times New Roman, with an x-height ratio of 0.45, as needing about 16% more. The full tables and the Bronze, Silver and Gold levels are in the APCA Readability Criterion draft.
Why the sign matters
A WCAG ratio has no direction: #888888 on white and white on #888888 are both 3.54:1. APCA gives Lc 63.1 for the first and Lc -68.5 for the second, and asks for 23px at weight 400 in one case and 20.25px in the other. The minus says light text on dark; the size says how strong the contrast is. A tool that shows only the absolute value, or lets you enter the two colors without saying which is the text, loses that information.
Common mistakes
- Calling APCA “the WCAG 3 contrast method”. The current W3C draft has not chosen one, and APCA’s author says not to call it WCAG 3.
- Showing Lc without its sign, or on a 0–100 scale. The scale runs from about -108 to 106 and the sign is part of the result.
- Giving an APCA pass or fail as if it were a compliance result. APCA describes levels for uses; legal checks still use WCAG 2.
- Treating Lc 60 as equal to 4.5:1 and Lc 75 as equal to 7:1. Even for gray text on white they differ: 4.5:1 is reached at #767676 (Lc 71.6), 7:1 at #595959 (Lc 84.3), while Lc 60 is already reached at #8E8E8E (3.27:1).
- Mixing up which color is the text. APCA needs to know which is text and which is background; WCAG 2 does not.
Limits of both methods
Both methods measure only lightness contrast. Neither looks at hue, so a red and a green of equal lightness score near zero in both, even though many people can tell them apart and people with red-green color blindness cannot. APCA’s levels for non-text, such as icons and dividers, are short notes; WCAG 2 has a full rule for them, success criterion 1.4.11. The size tables were built around one reference font. APCA’s author points to independent reviews of the method; the W3C working group has not adopted it and keeps an open issue, “Research APCA as an option for color contrast checking”. Questions about APCA itself go to the APCA discussion forum.
How we computed this
Every Lc value on this page comes from the published apca-w3 package, version 0.1.9, used without changes (Myndex/apca-w3); our script also recomputes every gallery pair with the formula printed above and stops if any differs by more than 0.05. WCAG 2 ratios use the WCAG 2.2 luminance formula and are cut to two decimals, as our checker shows them. The grid of 4,096 backgrounds takes every red, green and blue value in steps of 17 and compares white text with black text under each method. Computed on 10 November 2026.
Sources
- W3C. Web Content Accessibility Guidelines (WCAG) 2.2 and Understanding SC 1.4.3: Contrast (Minimum).
- W3C. WCAG 3.0, Editor’s Draft of 7 October 2026; Working Draft.
- Myndex Research. apca-w3 (code and licence), Why APCA, APCA in a Nutshell, integration compliance, APCA Readability Criterion (draft), discussion forum.
- Adrian Roselli, WCAG3 Contrast as of April 2026 (10 April 2026, with comments).
- Google, What’s new in DevTools (Chrome 149), 2 June 2026.
- Dan Cormier, Accessibility by design, Stack Overflow blog, 7 August 2024.
- U.S. Department of Justice, ADA Title II web rule; U.S. Access Board, ICT standards (Section 508); National Disability Authority (Ireland), EN 301 549 V4.1.1 published; W3C, wcag3 issue 158.