You're in the Library

Accessibility

All 304 contrast checks pass across 2 brands and 2 themes. How we check

Open in Studio

Contrast checks

Brand
Theme

AAA: text at 7:1 or moreAA: meets the pair's minimumFails: below the minimum

Text on surfaces

20 pairs, all pass

Buttons and controls

14 pairs, all pass

UI and borders

6 pairs, all pass

Focus

4 pairs, all pass

Feedback and status

18 pairs, all pass

Charts

14 pairs, all pass

What every component guarantees

  • Keyboard and screen readers. Every interactive component is keyboard operable, with the right role, name and state. Behavior comes from native elements or Base UI parts.
  • Visible focus. A 2px ring in the focus color, offset by 2px, on :focus-visible only. Inputs draw it inside the field.
  • Color is never the only signal. Status has text and an icon; an invalid field has a message.
  • Targets of at least 24 by 24 px in both densities.
  • Reduced motion. With prefers-reduced-motion: reduce, every motion duration drops to 0.
  • Checked in CI. Storybook runs the accessibility addon in error mode, and component tests run axe-core.

How we check

Thresholds

Bridge targets WCAG 2.2 AA. Text needs 4.5:1 against its background, and reaches AAA at 7:1. Control edges, icons and focus rings need 3:1 (WCAG 1.4.11), which has no AAA level. Ratios are rounded down, so 4.496 never shows as a passing 4.50.

Text or UI

Each pair carries its own minimum. A pair gated at 4.5:1 is text: body copy, labels, links, button text, chart axis labels. A pair gated at 3:1 is a UI part: borders, control tracks, icons, focus rings, chart series. Text samples show "Aa"; UI samples show a stroke.

The build gate

The pairs live in packages/tokens/src/contrast.checks.json. The token build resolves each one in every brand and theme and fails below its minimum, so a token change that breaks a pair never reaches the library. To gate a new combination, add ["<fg token>", "<bg token>", <min>] to that file.

When a pair fails

  • Fix it with a token change, never locally in a screen or a component. A local fix hides the problem and the next team hits it again.
  • Open an issue, or start an exploration in Studio and send it for review, with the pair, the ratio and where it shows up. A new token value needs the design owner's approval, then ships once the automatic checks pass.
  • Until the fix is in the library, avoid that pair in new places.

See every check in Studio Quality