Skip to main content

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).

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

14.571421#767676white textblack text (dashed)background #000000#FFFFFF
The lines cross at #767676: on lighter grays black text gets the higher WCAG 2 ratio.

APCA, size of Lc

03045607590#A4A4A4white textblack text (dashed)background #000000#FFFFFF
The lines cross at #A4A4A4. In the shaded band, from #767676 to #A3A3A3, the two methods recommend opposite text colors.

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:

LcNameWhat it is for
Lc 90Preferred Body TextThe preferred level for columns and paragraphs of body text.
Lc 75Minimum Body TextThe lowest level for body text, and for any larger text where readability is important.
Lc 60Minimum Fluent textText people should read that is not body, column or block text.
Lc 45Minimum Large textLarge, heavier text such as headlines; icons with fine detail.
Lc 30Minimum Any textNon-content text only: placeholders, disabled text, solid icons.
Lc 15Invisibility pointCertain 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):

LcWeight 300Weight 400Weight 700
Lc 9021px16px14px
Lc 7524px18px14px
Lc 6042px24px16px
Lc 4572px42px24px

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