WCAG 2.1 AA — release blocker
Web (React DOM)
- Desktop renders as
<aside aria-label="Main Sidebar">so it lands in the landmark roles. - Mobile renders as
<nav aria-label="Main Sidebar">with a bottom rail and menu trigger. - In
mobilemode the built-in hamburger carriesaria-haspopup="menu",aria-expanded, and anaria-label("Open menu" by default). In controlled mode (mobileOpen), the built-in hamburger is suppressed — the consumer trigger (e.g.TopBarMenuButton) must carry the same attributes;TopBarMenuButtondoes this out of the box. - Each item is a real
<button>or<a>— the choice depends on whetherhrefwas passed. - Each item carries both
aria-label={label}andtitle={label}so:- Screen readers get an accessible name despite the icon-only visual.
- Sighted users get a hover tooltip.
- The active item gets
aria-current="page". - The expand/collapse trigger exposes
aria-expanded. - Disabled items set
disabledandaria-disabled. - Focus rings use semantic ring tokens and remain visible on the primary rail and panel.
- The collapsed panel is not rendered, so hidden drilldown links are not left in the tab order.
Keyboard navigation
Tabmoves between items.Enter/Spaceactivates the focused item.- The expanded drilldown panel keeps normal document tab order. Back and collapse controls are explicit buttons.
- For
href-mode items, the browser's link semantics apply (cmd-click opens in a new tab, etc.).
Reduced motion
- Expansion and drilldown transitions use short transform/opacity animations. User agents honour
prefers-reduced-motion.
Color is never the only signal
- The active item is a full accent surface change, not just a colour shift.
- Expanded panel rows include visible text labels and optional descriptions.
- Mobile rail rows include visible text labels below the icon.
Audit checklist
- Every item has both
aria-labelandtitlematching the visible meaning. - Active item has
aria-current="page". - Focus ring visible against the rail and panel.
- Expanded trigger has the correct
aria-expandedvalue. -
Taborder matches visual order.