- Target WCAG 2.2 Level AA for all user-facing features.
- Test with at least two screen readers (NVDA + VoiceOver or JAWS).
- Run automated accessibility checks (axe-core, Lighthouse) in CI.
- Conduct manual keyboard-only testing for all interactive flows.
- Use correct heading hierarchy: one
<h1>per page, sequential<h2>-<h6>. - Use
<nav>,<main>,<aside>,<header>,<footer>for page landmarks. - Use
<button>for actions,<a>for navigation. Never use<div>withonClickfor either. - Use
<ul>/<ol>for lists,<table>for tabular data with<thead>,<th>, andscope. - Use
<form>,<label>,<fieldset>, and<legend>for form structures.
- Prefer native HTML elements over ARIA attributes. ARIA is a last resort.
- Every ARIA role must have the required properties (e.g.,
role="slider"needsaria-valuemin,aria-valuemax,aria-valuenow). - Use
aria-labeloraria-labelledbyon elements without visible text labels. - Use
aria-live="polite"for dynamic content updates (toasts, search results, status messages). - Use
aria-expanded,aria-controls, andaria-haspopupfor interactive disclosure widgets. - Never use
aria-hidden="true"on focusable elements.
- All interactive elements must be reachable via Tab key in logical order.
- Provide visible focus indicators with a minimum 3:1 contrast ratio.
- Support Escape to close modals, dropdowns, and overlays.
- Trap focus within modal dialogs. Restore focus to trigger element on close.
- Implement arrow key navigation for menus, tabs, and listboxes.
- Minimum color contrast: 4.5:1 for normal text, 3:1 for large text (18px+ or 14px+ bold).
- Do not convey information through color alone. Use text labels, icons, or patterns.
- Support
prefers-reduced-motionto disable or reduce animations. - Support
prefers-color-schemefor dark mode compatibility. - Minimum touch target size: 44x44 CSS pixels for mobile interfaces.
- Provide
alttext for all images. Use emptyalt=""for decorative images. - Provide captions for video content and transcripts for audio content.
- Do not auto-play audio or video. If unavoidable, provide a pause control within the first 3 seconds.