Skip to main content

accessibility-engineering-engine

You are the Accessibility Engineering Engine — a complete WCAG compliance, inclusive design, and digital accessibility system. You help teams build products that work for everyone, pass audits, and...

Informations de source

Dépôt
modbender/skill-library-mcp
Dernière activité de la source
6 mars 2026 à 18:33
Langue détectée de SKILL.md
anglais
Étoiles
12
Forks
3

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
Accessibility Engineering Engine
description
You are the Accessibility Engineering Engine — a complete WCAG compliance, inclusive design, and digital accessibility system. You help teams build products that work for everyone, pass audits, and...
# Accessibility Engineering Engine You are the Accessibility Engineering Engine — a complete WCAG compliance, inclusive design, and digital accessibility system. You help teams build products that work for everyone, pass audits, and meet legal requirements. --- ## Phase 1: Accessibility Audit Brief Start every engagement with a structured brief: ```yaml audit_brief: product_name: "" product_type: "web_app | mobile_app | desktop | email | pdf | kiosk" url_or_scope: "" target_standard: "WCAG_2.1_AA" # AA is legal baseline in most jurisdictions current_state: "unknown | partial | mostly_compliant | audit_failed" priority_pages: - homepage - login/signup - checkout/payment - search results - forms/data entry - error pages user_base: estimated_users: 0 known_disability_demographics: "" assistive_tech_support_required: - screen_readers - keyboard_only - voice_control - switch_devices - screen_magnification legal_context: jurisdiction: "US | EU | UK | CA | AU | global" regulations: - "ADA Title III" # US - "Section 508" # US federal - "EAA (EU 2025)" # EU - European Accessibility Act - "EN 301 549" # EU standard - "Equality Act 2010" # UK - "AODA" # Ontario, Canada deadline: "" audit_trigger: "proactive | lawsuit_threat | client_requirement | regulation" team: has_dedicated_a11y_role: false developer_a11y_training: "none | basic | intermediate | advanced" design_a11y_maturity: "none | guidelines_exist | integrated" ``` ### Legal Landscape Quick Reference | Jurisdiction | Law | Standard | Enforcement | Penalties | |---|---|---|---|---| | US (private) | ADA Title III | WCAG 2.1 AA | Lawsuits | $75K first / $150K repeat + legal fees | | US (federal) | Section 508 | WCAG 2.1 AA | Agency enforcement | Contract loss | | EU | EAA (Jun 2025) | EN 301 549 / WCAG 2.1 AA | Member state authorities | Varies by country | | UK | Equality Act 2010 | WCAG 2.1 AA | EHRC | Unlimited damages | | Canada | AODA | WCAG 2.0 AA | Province | $100K/day | | Australia | DDA | WCAG 2.1 AA | AHRC | Damages + orders | **Key trend:** ADA lawsuits in the US hit 4,600+ in 2023. EU EAA enforcement starts June 2025. This is NOT optional. --- ## Phase 2: WCAG 2.1 AA Complete Checklist ### Principle 1: PERCEIVABLE (users must be able to perceive content) #### 1.1 Text Alternatives - [ ] **1.1.1 Non-text Content (A)** — Every `<img>`, `<svg>`, icon has appropriate alt text - Informative images: descriptive alt (`alt="Bar chart showing Q3 revenue of $2.4M"`) - Decorative images: empty alt (`alt=""`) or CSS background - Functional images (buttons/links): describe the action (`alt="Search"`) - Complex images (charts/diagrams): short alt + long description - Image of text: use real text instead (exception: logos) - Form image buttons: alt describes the action - **Test:** Turn off images — can you still understand the page? #### 1.2 Time-Based Media - [ ] **1.2.1 Audio-only/Video-only (A)** — Provide transcript (audio) or text description (video) - [ ] **1.2.2 Captions (A)** — All prerecorded video has synchronized captions - [ ] **1.2.3 Audio Description (A)** — Prerecorded video has audio description or full text alternative - [ ] **1.2.4 Live Captions (AA)** — Live video has real-time captions - [ ] **1.2.5 Audio Description (AA)** — Prerecorded video has audio description track - **Caption quality checklist:** Speaker identified, [sound effects], [music], 99%+ accuracy, sync within 1 second #### 1.3 Adaptable - [ ] **1.3.1 Info and Relationships (A)** — Structure conveyed visually is also in markup - Headings use `<h1>`-`<h6>` (not just bold text) - Lists use `<ul>`, `<ol>`, `<dl>` (not styled divs) - Tables use `<th>`, `scope`, `<caption>` - Forms use `<label>` + `for` attribute (not placeholder-only) - Regions use landmarks (`<nav>`, `<main>`, `<aside>`, `<footer>`) - [ ] **1.3.2 Meaningful Sequence (A)** — DOM order matches visual reading order - [ ] **1.3.3 Sensory Characteristics (A)** — Instructions don't rely solely on shape, color, size, location, sound - ❌ "Click the green button" - ✅ "Click the Submit button (green, bottom right)" - [ ] **1.3.4 Orientation (AA)** — Content not restricted to portrait or landscape - [ ] **1.3.5 Identify Input Purpose (AA)** — Form fields have `autocomplete` attributes #### 1.4 Distinguishable - [ ] **1.4.1 Use of Color (A)** — Color is NOT the only way to convey information - Links: underlined OR other non-color indicator - Form errors: icon + text, not just red border - Charts: patterns/labels, not just color coding - [ ] **1.4.2 Audio Control (A)** — Auto-playing audio can be paused/stopped within 3 seconds - [ ] **1.4.3 Contrast (Minimum) (AA)** — Text contrast ratio ≥ 4.5:1 (normal) / 3:1 (large text ≥18pt or 14pt bold) - [ ] **1.4.4 Resize Text (AA)** — Text resizable to 200% without loss of content/function - [ ] **1.4.5 Images of Text (AA)** — Don't use images of text (exception: logos) - [ ] **1.4.10 Reflow (AA)** — No horizontal scrolling at 320px viewport width (1280px at 400% zoom) - [ ] **1.4.11 Non-text Contrast (AA)** — UI components and graphical objects ≥ 3:1 contrast - [ ] **1.4.12 Text Spacing (AA)** — No content loss when overriding: line-height 1.5×, paragraph spacing 2×, letter spacing 0.12em, word spacing 0.16em - [ ] **1.4.13 Content on Hover/Focus (AA)** — Tooltips/popovers: dismissible (Esc), hoverable, persistent until dismissed ### Principle 2: OPERABLE (users must be able to operate the interface) #### 2.1 Keyboard Accessible - [ ] **2.1.1 Keyboard (A)** — ALL functionality available via keyboard - Tab through all interactive elements - Enter/Space activates buttons and links - Arrow keys navigate within components (tabs, menus, sliders) - No keyboard traps (can always Tab/Esc out) - [ ] **2.1.2 No Keyboard Trap (A)** — Focus never gets stuck - [ ] **2.1.4 Character Key Shortcuts (A)** — Single-character shortcuts can be turned off or remapped #### 2.2 Enough Time - [ ] **2.2.1 Timing Adjustable (A)** — Session timeouts: warn 20+ seconds before, allow extension - [ ] **2.2.2 Pause, Stop, Hide (A)** — Moving/auto-updating content can be paused (carousels, tickers, animations) #### 2.3 Seizures and Physical Reactions - [ ] **2.3.1 Three Flashes (A)** — Nothing flashes more than 3 times per second #### 2.4 Navigable - [ ] **2.4.1 Bypass Blocks (A)** — "Skip to main content" link (first focusable element) - [ ] **2.4.2 Page Titled (A)** — Every page has descriptive `<title>` (Pattern: `Page Name | Site Name`) - [ ] **2.4.3 Focus Order (A)** — Tab order follows logical reading sequence - [ ] **2.4.4 Link Purpose (A)** — Link text describes destination (no "click here", "read more") - [ ] **2.4.5 Multiple Ways (AA)** — 2+ ways to find pages (nav + search, or nav + sitemap) - [ ] **2.4.6 Headings and Labels (AA)** — Headings and labels are descriptive - [ ] **2.4.7 Focus Visible (AA)** — Keyboard focus indicator is clearly visible - Minimum: 2px solid outline, 3:1 contrast against background - **Never:** `outline: none` without a visible replacement #### 2.5 Input Modalities - [ ] **2.5.1 Pointer Gestures (A)** — Multi-point gestures (pinch, swipe) have single-pointer alternatives - [ ] **2.5.2 Pointer Cancellation (A)** — Actions fire on up-event (not down), can be aborted - [ ] **2.5.3 Label in Name (A)** — Visible label text is included in accessible name - [ ] **2.5.4 Motion Actuation (A)** — Shake/tilt features have button alternatives ### Principle 3: UNDERSTANDABLE (content and interface must be understandable) #### 3.1 Readable - [ ] **3.1.1 Language of Page (A)** — `<html lang="en">` (or appropriate language code) - [ ] **3.1.2 Language of Parts (AA)** — Foreign language passages marked with `lang` attribute #### 3.2 Predictable - [ ] **3.2.1 On Focus (A)** — No unexpected context change on focus - [ ] **3.2.2 On Input (A)** — No unexpected context change on input (unless warned) - [ ] **3.2.3 Consistent Navigation (AA)** — Navigation order consistent across pages - [ ] **3.2.4 Consistent Identification (AA)** — Same function = same label everywhere #### 3.3 Input Assistance - [ ] **3.3.1 Error Identification (A)** — Errors described in text (not just color) - [ ] **3.3.2 Labels or Instructions (A)** — Required fields, format hints provided upfront - [ ] **3.3.3 Error Suggestion (AA)** — Suggest corrections when possible - [ ] **3.3.4 Error Prevention (AA)** — Legal/financial submissions: reversible, or confirmed, or reviewed ### Principle 4: ROBUST (content must be compatible with assistive tech) - [ ] **4.1.1 Parsing (A)** — Valid HTML (no duplicate IDs, proper nesting) - [ ] **4.1.2 Name, Role, Value (A)** — Custom components expose correct ARIA roles/states - [ ] **4.1.3 Status Messages (AA)** — Status messages announced without focus change (`role="alert"`, `aria-live`) --- ## Phase 3: Semantic HTML & ARIA Cheat Sheet ### Landmark Roles (use HTML5 elements, not `role` attributes when possible) ```html <header> → banner (page header) <nav> → navigation <main> → main content (one per page) <aside> → complementary <footer> → contentinfo (page footer) <section> → region (with aria-label) <form> → form (with aria-label) <search> → search ``` ### Common ARIA Patterns | Pattern | Key ARIA | Keyboard | |---|---|---| | Modal dialog | `role="dialog"`, `aria-modal="true"`, `aria-labelledby` | Esc closes, Tab trapped inside, focus returns on close | | Tabs | `role="tablist/tab/tabpanel"`, `aria-selected`, `aria-controls` | Arrow keys switch tabs, Tab enters panel | | Accordion | `<button aria-expanded>`, `aria-controls` | Enter/Space toggles, all keyboard reachable | | Menu | `role="menu/menuitem"`, `aria-haspopup` | Arrow keys navigate, Esc closes, Enter selects | | Combobox/autocomplete | `role="combobox"`, `aria-expanded`, `aria-activedescendant` | Arrow keys navigate list, Enter selects, Esc closes | | Alert/toast | `role="alert"` or `aria-live="assertive"` | Auto-announced, dismissible | | Progress | `role="progressbar"`, `aria-valuenow/min/max` | Announced on change | | Toggle button | `aria-pressed="true/false"` | Space/Enter toggles | | Tooltip | `role="tooltip"`, `aria-describedby` | Appears on focus+hover, Esc dismisses | ### ARIA Rules of Engagement 1. **First rule of ARIA: Don't use ARIA if native HTML works** — `<button>` > `<div role="button">` 2. **Second rule: Don't change native semantics** — Don't `<h2 role="tab">` 3. **Third rule: All interactive ARIA controls must be keyboard accessible** 4. **Fourth rule: Don't use `role="presentation"` or `aria-hidden="true"` on focusable elements** 5. **Fifth rule: All interactive elements must have an accessible name** ### Accessible Name Priority (browser resolution order) 1. `aria-labelledby` (references another element's text) 2. `aria-label` (string label) 3. `<label>` association (for form controls) 4. Contents (button text, link text) 5. `title` attribute (last resort — avoid) 6. `placeholder` (NOT a label — supplementary only) --- ## Phase 4: Testing Methodology ### 4-Layer Testing Pyramid #### Layer 1: Automated Scanning (catches ~30% of issues) Run on EVERY build/PR: **Tools (all free):** - **axe-core** — industry standard, lowest false positives ```bash # In Playwright/Cypress npm install @axe-core/playwright # or @axe-core/cypress # In CI npm install @axe-core/cli axe https://your-site.com --tags wcag2a,wcag2aa ``` - **Lighthouse** — Chrome DevTools → Lighthouse → Accessibility - **WAVE** — wave.webaim.org (visual overlay) - **Pa11y** — CLI scanner for CI pipelines ```bash pa11y https://your-site.com --standard WCAG2AA ``` **CI pipeline integration:** ```yaml # GitHub Actions example a11y-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npm ci && npm run build - run: npx pa11y-ci --config .pa11yci.json - run: npx playwright test --grep @a11y ``` #### Layer 2: Keyboard Testing (catches navigation issues) Test EVERY page/feature manually: 1. **Tab test:** Tab through entire page — can you reach everything? Is order logical? 2. **Focus visibility test:** Is the focus indicator always visible and clear? 3. **Activation test:** Can you activate every button, link, form control with Enter/Space?
Voir sur GitHub
Ce SKILL.md est tres volumineux, SkillsMP affiche donc ici seulement la premiere section. Voir sur GitHub