Web Design Guidelines
WCAG accessibility, semantic HTML, keyboard navigation, forms, and performance patterns for inclusive web interfaces. Contains 23 rules across 4 categories. Supports both coding reference and audit mode.
Metadata
- Version: 2.1.0
- Rule Count: 23 rules across 4 categories
- License: MIT
How to Audit
When the user asks to "audit accessibility", "check WCAG compliance", or "review accessibility" — run the checklist below against their codebase.
Step 1: Determine Scope
- If arguments provided (
$ARGUMENTS): audit only those files or components - If no arguments: audit all UI components and pages in the codebase
Step 2: Detect Stack
Check the project for:
.tsx/.jsxfiles → React.vuefiles → Vue.blade.phpfiles → Laravel Blade.htmlfiles → Static HTML
Step 3: Run Accessibility Checklist
Work through every item below. For each, output:
- PASS — brief confirmation of what was verified
- FAIL — exact
file:line, description of the issue, and fix recommendation - N/A — if the check does not apply to this project
Semantic HTML & Structure
- [ ] Pages use semantic elements (
<header>,<main>,<nav>,<footer>,<article>,<section>) — not<div>soup - [ ] Heading hierarchy is sequential (
h1→h2→h3) — no skipped levels - [ ] One
<h1>per page - [ ] Skip link exists to bypass navigation (
<a href="#main-content">Skip to content</a>) - [ ] Landmark regions are labelled when duplicated (
aria-labelon multiple<nav>elements)
Keyboard Navigation
- [ ] All interactive elements are reachable via Tab key
- [ ] Focus order follows visual order (no positive
tabindexvalues) - [ ] Focus indicator is visible on all focusable elements (not removed with
outline: nonewithout replacement) - [ ] Modal dialogs trap focus and return focus on close
- [ ] Custom components (dropdowns, tabs, accordions) support expected keyboard patterns (Arrow keys, Escape, Enter)
Images & Media
- [ ] All
<img>elements havealtattributes — descriptive for content images, empty (alt="") for decorative - [ ] Complex images (charts, diagrams) have extended descriptions
- [ ] Video content has captions or transcripts
Color & Contrast
- [ ] Text meets WCAG AA contrast ratio (4.5:1 for normal text, 3:1 for large text)
- [ ] Information is not conveyed by color alone (e.g., error states use icons + text, not just red)
- [ ] UI components and focus indicators meet 3:1 contrast ratio against background
Forms
- [ ] Every input has an associated
<label>(not just placeholder text) - [ ] Required fields indicated with both visual cue and
aria-required="true" - [ ] Error messages linked to inputs via
aria-describedby - [ ] Error messages use
role="alert"oraria-live="assertive"for screen reader announcement - [ ] Correct
typeattributes on inputs (email,tel,url,number) - [ ]
autocompleteattributes present on common fields (name, email, address, credit card)
ARIA & Screen Readers
- [ ] ARIA labels on icon-only buttons (
aria-label="Close") - [ ] Dynamic content updates use
aria-liveregions - [ ] Loading states announced to screen readers (
aria-busy="true", status messages) - [ ] Decorative elements hidden from screen readers (
aria-hidden="true")
Motion & Animation
- [ ]
prefers-reduced-motionrespected — animations disabled or reduced - [ ] No auto-playing video or audio without user control
- [ ] No content that flashes more than 3 times per second
Step 4: Summary
End the audit with:
## Accessibility Audit Summary
- **PASS**: X checks
- **FAIL**: X checks
- **N/A**: X checks
- **WCAG Level**: AA / Partial AA / Below AA
- **Top Priority Fixes**: (list the 3 most impactful FAIL items)
When to Apply
Reference these guidelines when:
- Running an accessibility audit on a codebase
- Reviewing UI code for accessibility (WCAG compliance)
- Implementing forms and interactions
- Ensuring keyboard navigation works
- Adding ARIA labels and live regions
- Optimizing image loading and layout stability
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|----------|----------|--------|--------|
| 1 | Accessibility | CRITICAL | a11y- |
| 2 | Forms | HIGH | form- |
| 3 | Animation & Motion | CRITICAL | motion- |
| 4 | Performance & UX | MEDIUM | perf- |
Quick Reference
1. Accessibility (CRITICAL)
a11y-semantic-html- Use semantic HTML elementsa11y-heading-hierarchy- Maintain proper heading hierarchya11y-screen-reader- Optimize for screen reader compatibilitya11y-skip-links- Provide skip links for navigationa11y-keyboard-nav- Ensure full keyboard navigationa11y-focus-management- Manage keyboard focus properlya11y-aria-labels- Add ARIA labels to interactive elementsa11y-color-contrast- Ensure sufficient color contrast (WCAG AA)a11y-alt-text- Provide meaningful alt text for imagesa11y-error-messages- Make error messages accessiblea11y-form-labels- Associate labels with form inputsa11y-live-regions- Announce dynamic content to screen readers
2. Forms (HIGH)
form-autocomplete- Use autocomplete attributesform-input-types- Use correct input typesform-error-display- Display form errors clearlyform-validation-ux- Design user-friendly validationform-inline-validation- Implement smart inline validationform-multi-step- Design effective multi-step formsform-placeholder-usage- Use placeholders appropriatelyform-submit-feedback- Provide clear submission feedback
3. Animation & Motion (CRITICAL)
motion-reduced- Respect prefers-reduced-motion (WCAG AAA)
4. Performance & UX (MEDIUM)
perf-image-loading- Optimize image loading for UXperf-layout-stability- Prevent cumulative layout shift
Essential Guidelines
Semantic HTML
// ❌ Div soup
<div className="header"><div className="nav"><div onClick={handleClick}>Home</div></div></div>
// ✅ Semantic HTML
<header><nav aria-label="Main"><a href="/">Home</a></nav></header>
<main><article><h1>Title</h1><p>Content</p></article></main>
Form Accessibility
<label htmlFor="email">Email <span aria-hidden="true">*</span></label>
<input id="email" type="email" required aria-required="true" aria-describedby="email-error" autoComplete="email" />
{error && <p id="email-error" role="alert">{error}</p>}
Reduced Motion
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
How to Use
Read individual rule files for detailed explanations:
rules/a11y-semantic-html.md
rules/form-autocomplete.md
rules/motion-reduced.md
rules/perf-image-loading.md
References
- WCAG 2.2 Quick Reference
- WAI-ARIA Authoring Practices
- web.dev Accessibility
- MDN Accessibility
- The A11Y Project
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md