Accessibility
The floor, not a cleanup pass.
- WCAG 2.0 AA (AODA) is the baseline: semantic landmarks (
header/main/footer/nav/section), oneh1per page, disclosures and nav keyboard-operable with correct ARIA, focus trapped in any modal overlay while open, visibleringfocus states, decorative artaria-hidden. - Respect
prefers-reduced-motion: ambient and entrance animations pause or reduce; every motion moment has a static equivalent, and nothing is readable only through motion. - Contrast is checked in every theme scope: AA contrast for text tokens (
muted-foregroundonbackgroundincluded) in the base theme and inside any inverse-color section. - Self-starting motion carries a control: anything that begins moving on its own and runs past a few seconds (a marquee drift, a carousel) pairs with a keyboard-operable pause. A hover pause is not one: it reaches neither keyboard nor touch, and the reduced-motion path only serves the readers who set the preference.
- Each landmark of a kind is named: a page with more than one
navlabels each (Primary,Footer,Menu), since an unnamed pair is indistinguishable to the reader listing them. The name is passed at the call site, never baked into the component.