Accessibility engineering skill for web products with JAWS and NVDA testing plus Spain/EU compliance guidance. Use when the task involves WCAG 2.2 implementation, ARIA behavior, keyboard/focus issues, screen-reader regressions, accessibility audits, remediation plans, or legal scope checks for Ley 11/2023, RD 1112/2018, EAA, and EN 301 549.
Install
npx skillscat add ambitos-1995/jaws-accessibility-skill Install via the SkillsCat registry.
JAWS Accessibility Skill
Provide practical, implementation-first support for accessible web interfaces and accessibility audits.
Use progressive disclosure. Load only the reference file needed for the current task.
Reference routing
| Situation | File to load |
|---|---|
| Legal scope, obligations, timelines, exemptions | references/spanish-eu-legislation.md |
| WCAG 2.2 criteria mapping and coding patterns | references/wcag-22-criteria.md |
| JAWS/NVDA behavior differences, ARIA compatibility, anti-patterns | references/jaws-nvda-compatibility.md |
| End-to-end audit execution and reporting | references/jaws-audit-methodology.md |
| WCAG 3.0 monitoring and future planning (non-normative) | references/future-standards.md |
Operating rules
- Prioritize native HTML semantics before ARIA.
- Treat WCAG 3.0 as non-normative draft guidance, not a compliance baseline.
- If legal/compliance is requested, state exact dates and legal scope explicitly.
- Distinguish mandatory requirements from recommended best practices.
- Validate with at least:
- JAWS + Chrome
- NVDA + Firefox
- For SPA flows, always verify:
- focus placement after route changes
- meaningful page title updates
- announcement behavior for status changes
- When uncertain about AT/browser version behavior, request or document exact versions.
Delivery format
For implementation tasks:
- Explain the user impact.
- Identify the root cause (markup, state management, ARIA, focus, timing).
- Provide a minimal fix.
- Add a quick manual test script for keyboard + JAWS + NVDA.
For audit tasks:
- Use the 8-phase flow in
references/jaws-audit-methodology.md. - Return findings grouped by severity: Critical, High, Medium, Low.
- Map each finding to WCAG SC, technical evidence, reproduction steps, remediation recommendation.
For legal/compliance scope questions:
- Start with
references/spanish-eu-legislation.md. - Clarify whether the question is private-sector (Ley 11/2023 / EAA) or public-sector (RD 1112/2018).
- Mark any legal interpretation as operational guidance, not legal advice.
Known bugs by JAWS version
Screen readers have frequent regressions. See references/jaws-nvda-compatibility.md section 9 for full context.
JAWS 2025
aria-currentsilenced in grids:role="row"inside agrid— JAWS may ignorearia-current.aria-descriptionignored in grid rows: same context causesaria-descriptionnot to be exposed.aria-roledescriptionregressions: fixed 2024 excessive repetition, but now may silence state metadata in grid rows.
JAWS 2026 betas
- Conditional silencing in
role="row"+grid: ongoing inconsistencies vs JAWS 2024 and NVDA.
Mitigation
- Do not rely solely on
aria-currentoraria-descriptionfor critical information in grids. - Provide visual and textual redundancy.
- Use NVDA as the strict standards-compliance reference.
Most frequent critical errors
| Error | Impact | Solution |
|---|---|---|
aria-hidden="true" on container with focusable elements |
Silent "ghost elements" in JAWS | Use display:none or visibility:hidden, or remove tabindex from children |
Nesting interactive elements (<a><button>) |
JAWS reads the name 3 times | Single interactive element with correct role |
Data table without role="table" or role="grid" |
JAWS classifies as "layout table", silences <th> |
Declare role="table" or role="grid" explicitly |
Injecting aria-live with content simultaneously |
JAWS ignores the live region | Empty container with aria-live in initial HTML |
| SPA without focus management after navigation | Focus trapped on originating link | Move focus to <h1> with tabindex="-1" + .focus() |
*:focus { outline: none } |
Keyboard users lose visual reference | Always define visible focus styles |
aria-live + aria-describedby on same element |
Double announcement in JAWS and NVDA | Separate into distinct DOM nodes |
Quick checklist
Before delivering any web component:
- Is all functionality operable with keyboard only?
- Do interactive elements have clear accessible names?
- Is text contrast >= 4.5:1 and UI element contrast >= 3:1?
- Are touch targets at least 24x24px CSS?
- Do images have descriptive
alt(oralt=""if decorative)? - Does the page have
<html lang="...">and use<h1>-<h6>in logical order? - Do forms have associated
<label>elements and appropriateautocomplete? - Do modals trap focus and return it to the trigger on close?
- Do live regions exist empty in the initial HTML?
- Has it been tested with JAWS + Chrome and NVDA + Firefox?
Common implementation priorities
- Keyboard operability and visible focus.
- Name/Role/Value integrity for interactive controls.
- Robust form labels, errors, and instructions.
- Focus management in dialogs, menus, and SPAs.
- Accessible tables, status messages, and live regions.
- Touch target size and alternative input methods.
Escalation points
Escalate risk when:
- A component works in one reader but fails in the other.
- Compliance claims rely only on automated tools.
- Focus is lost, trapped, or visually hidden.
aria-liveis used without deterministic announcement behavior.- A legal answer depends on sector-specific enforcement details.