Accessibility
We protect the people most vulnerable to exposure. That starts with making the product usable for them — every surface, every state, every input.
WCAG 2.2 AA, always. AAA where we can.
Every component in this library is tested with keyboard-only navigation, screen readers (VoiceOver + TalkBack), and 200% zoom. If it fails, it doesn't ship.
The four things we check, always
Can they see it?
Contrast passes AA. Icon-only controls have a visible or aria label. Every image has alt text or is marked decorative.
Can they use it?
Everything works with keyboard alone. Focus order follows visual order. Nothing relies on hover.
Does it make sense?
Labels are plain English. Errors explain what to fix. Forms don't punish correction — the error message persists until resolved.
Does it work everywhere?
Semantic HTML, not divs-with-roles. ARIA only when HTML can't say it. Tested against VoiceOver, TalkBack, and JAWS.
Our palette, measured
Ratios for every foreground / background pair in the system. Anything less than 4.5 : 1 is flagged and can't be used for text.
Visible, always
Every focusable element has a 2px accent ring with 3px offset. Never remove it — keyboard users rely on it.
Ship-ready audit
Run through this list on every component before it lands in the library. If any item fails, it stays in draft.
prefers-reduced-motion: no translates, no springs, crossfade only.