Skip to content
PantoneTools
Accessibility

Color Accessibility (WCAG 2.1)

The contrast ratios, success criteria, and design patterns you actually need to know to ship accessible interfaces.

Reviewed by Aiko Tanaka10 min read ·

TL;DR

WCAG 2.1 sets the contrast math for accessible interfaces — 4.5:1 for body text (AA), 3:1 for large text and UI components. Build the math into your design system so every brand color ships with its safe pairs pre-validated, and pair color with non-color signifiers so the 8% of users with color vision deficiency aren't excluded.

Color contrast is the single accessibility requirement designers encounter most. Get it right and you ship inclusive interfaces; get it wrong and a non-trivial fraction of users cannot read your product.

WCAG 2.1 contrast — the numbers you need

  • SC 1.4.3 Contrast (Minimum) — AA
    • Normal text: 4.5:1 against background
    • Large text (18pt regular or 14pt bold+): 3:1
  • SC 1.4.6 Contrast (Enhanced) — AAA
    • Normal text: 7:1
    • Large text: 4.5:1
  • SC 1.4.11 Non-text Contrast — AA — UI components, meaningful icons, focus rings: 3:1.

How contrast is calculated

For each color, compute relative luminance (a weighted linear-RGB sum using sRGB gamma). The ratio is (L_lighter + 0.05) / (L_darker + 0.05). Ratios go from 1:1 (same color) to 21:1 (pure white on pure black).

Use our contrast checker or check any color from our color directory— every page reports AA/AAA results for normal and large text.

Where APCA fits

APCA (Accessible Perceptual Contrast Algorithm) is useful because it models perceived lightness contrast more realistically than the WCAG 2 ratio, especially for dark themes, very bold type, and low-luminance UI. It is not a replacement pass/fail gate for WCAG 2.1 today. Treat it as a second review signal: WCAG AA answers "can this ship under the current standard?", while APCA helps answer "will this actually feel readable in the UI context?".

  • Use WCAG AA as the minimum compliance gate for body text and controls.
  • Use APCA to compare candidate pairs that all technically pass WCAG.
  • Recheck APCA when changing font weight, size, background elevation, or dark-mode surface.
  • Do not let an APCA-friendly pair override a WCAG failure without an accessibility review decision.

Accessibility workflow for brand colors

Brand color accessibility works best as a release workflow, not an after-the-fact audit. Each brand color should ship with approved text pairings, UI-only limits, and a documented failure path for combinations that look on-brand but fail contrast.

  • Classify the color: background, text, border, icon, focus ring, chart, status, or decorative.
  • Test intended pairs: run the actual foreground and background through the contrast checker, not a nearby palette approximation.
  • Record approved usage: normal text, large text, non-text UI, decorative only, or rejected.
  • Attach a fallback: if brand red fails on white for small text, define the darker accessible red or use the red only as an accent with black body text.
  • Review color-blind states: confirm status colors remain distinguishable with icons, text labels, or shape.

Patterns that work

1. Lock in a contrast-safe text color from the start

Pick a single dark text color and a single light text color at the beginning of a project. Verify each backgrounds you use those on hit 4.5:1 minimum. Avoid mid-tones for body text.

2. Don't rely on color alone

SC 1.4.1 — never use color as the only carrier of meaning. Pair red with an X icon, green with a check, blue links with underlines. ~8% of men have some form of color vision deficiency; relying on hue alone excludes them.

3. Test against simulated color blindness

Use a color blindness simulator (we have one in tools) to view your interface in protanopia, deuteranopia, and tritanopia. If anything becomes unreadable, the design needs another signifier.

4. Focus states above 3:1

Focus rings must be visible. A 3:1 contrast against the focused component's background is the minimum. Brand-blue focus rings on light gray inputs often fail this — verify with your color picker.

5. Pair text contrast with size

Large text gets a lower threshold (3:1) because it is more legible at lower contrast. If your design system has a "small" 12px gray secondary text, it needs to clear 4.5:1 — and probably should not exist as a permanent style.

Design-system acceptance criteria

The fastest way to keep color accessible is to put acceptance criteria directly into the design-token review. A token should not be marked "ready for production" until the team knows where it can and cannot be used.

  • Text tokens list at least one approved surface pairing at AA normal size.
  • Surface tokens list approved foreground text and icon colors.
  • Border and focus tokens clear 3:1 against adjacent surfaces.
  • Status tokens include a non-color signifier: text, icon, shape, or pattern.
  • Dark-mode values are tested independently; passing in light mode does not imply passing in dark mode.
  • Token documentation records WCAG result, APCA review note, intended text size, and allowed component contexts.

Example: fixing an inaccessible brand button

Suppose a brand uses a vivid yellow button with white text. It may look energetic in a marketing deck but fail WCAG for product UI. The production fix is not "make everything darker" by instinct. Test three options:

  • Keep the yellow background and switch the label to black text.
  • Use a darker shade of the brand yellow for interactive controls.
  • Keep yellow as an accent and use a neutral high-contrast button for primary actions.

The approved decision should be recorded in Figma Variables and code tokens so the inaccessible pair does not reappear in a future feature.

Tools and audits

  • Design-time: Figma plugins (Stark, Able), our contrast checker.
  • Code-time: ESLint plugin eslint-plugin-jsx-a11y, axe-core in tests.
  • Runtime: Chrome DevTools Lighthouse, axe browser extension, screen reader QA pass.
  • Org-level: regular accessibility audits, user research with assistive-tech users.

The bottom line

Accessible color is not extra polish — it is a baseline requirement. Build the math into your design system so every brand color comes with its safe-pair partners pre-validated, and you'll never ship an inaccessible interface by accident.

FAQ

Try the related tools

Apply what you just read with our free converters and color tools.

Continue Reading

Color Accessibility (WCAG 2.1) — A Practical... | PantoneTools