Guides

Accessibility

Accessibility is built into Flint's tokens, not added at the end. The build enforces most of it; the rest is up to each screen.

What Flint guarantees

AreaGuaranteeWCAG
Text contrastEvery semantic text pairing clears 7:1 in light and dark. The build fails otherwise.1.4.3, 1.4.6
Non-text contrastControl edges, focus rings and chart marks clear 3:1.1.4.11
FocusA solid 2px ring, offset 2px, in the focus color. Never removed, never transparent.2.4.7, 2.4.11
Target size24px minimum as a token. Density can't shrink it. 44pt on iOS.2.5.8
MotionEvery animation has a reduced-motion version; Swift's helper returns none when Reduce Motion is on.2.3.3
Text sizeNothing below 12px. Swift type styles scale with Dynamic Type.1.4.4

Flint holds text to AAA internally. Its published claim stays WCAG 2.2 AA. An AAA token pass is not a AAA conformance claim.

Annotate every screen

Every new screen or component ships with notes engineering can build from without guessing:

  • Landmarks: header, nav with a label, main, footer.
  • Accessible names for icon-only controls.
  • States: aria-current="page" for nav, aria-selected for tabs and options, aria-pressed for toggles, aria-expanded for anything that opens.
  • Live regions: role="status" for progress and counts, role="alert" for errors. Keep them in the page, empty when unused.
  • Focus order, and where focus goes when something opens or closes.
  • What each animation becomes under reduced motion.

Focus

  • Skip links and same-page links move focus to the destination heading, not just the scroll position.
  • On a field error, focus moves to the first field with an error.
  • Dialogs trap focus inside and return it to the control that opened them.
  • Icons inside a labeled control are aria-hidden, so they aren't read twice.

How to test

  1. Run the build. Contrast, usage and parity checks must pass.
  2. Walk the component in the workbench: every state, light and dark, both densities.
  3. Use it with a keyboard only.
  4. Use it with VoiceOver or NVDA only. If someone can't finish the task that way, it isn't done.