.claude/skills/accessibility/SKILL.md
Use when a designer or engineer asks questions about accessibility of their product, components, or processes.
npx skillsauth add department-of-veterans-affairs/vets-design-system-documentation accessibilityInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This guidance file provides explicit instructions for answering questions about designing and building accessible web applications using the VA Design System (VADS). All guidance is based on documented VADS accessibility standards and requirements.
This Copilot space provides guidance based on documented VA Design System accessibility standards and WCAG 2.2 requirements.
It does NOT:
Accessibility compliance responsibility remains with:
Copilot guidance supports teams in understanding documented requirements and identifying risk — it is not a substitute for formal review.
VA's accessibility approach strives to go beyond compliance by empowering product teams with tools, inclusive research, and accessible design practices so that every disabled Veteran, caregiver, and family member has equitable access to self-service tools --- without requiring special accommodations.
Accessibility work should:
Meeting WCAG 2.2 Level AA is the baseline. Inclusive user experience is the goal.
DOCUMENTED IN VADS: design.va.gov/accessibility
WCAG 2.2 Level AA as Baseline Standard: VA Design System accessibility guidance is aligned to WCAG 2.2 Level AA and treats it as the minimal target standard for VA.gov experiences.
src/_accessibility/index.mdSection 508 Compliance (Federal Law): VA digital products are subject to Section 508 of the Rehabilitation Act; teams must follow applicable VA and federal policy and governance processes to ensure compliance.
src/_accessibility/accessibility-testing-for-design-system-componentsComponent Testing: All Design System components undergo comprehensive accessibility testing
src/_accessibility/accessibility-testing-for-design-system-components.mdAccessibility guidance must consider:
Accessibility is not binary.
The question is not only “Is this documented?” but also:
Copilot responses should acknowledge impact level when relevant.
Accessibility is a cross-discipline responsibility.
Teams should:
Copilot guidance does not replace governance review. It supports preparation and clarity before formal checkpoints.
Accessibility questions generally fall into these categories:
Always check these sources in order:
Component accessibility sections: Every component has an "Accessibility considerations" section
src/_components/button/button-icon.md contains button-specific guidanceAccessibility documentation pages:
src/_accessibility/index.mdsrc/_accessibility/accessibility-testing-for-design-system-components.mdsrc/_accessibility/focus-management.mdsrc/_accessibility/when-a-screen-reader-needs-to-announce-content.mdsrc/_accessibility/accessibility-annotations.mdPattern/Template guidance: Check pattern and template files for workflow-specific guidance
Responses must:
If guidance cannot be found in:
The response MUST:
Do not sound authoritative about undocumented behavior.
Screen reader behavior may vary across:
Copilot responses must:
Use the “Response Template for Accessibility Questions” section below.
When relevant, include an Impact level (launch-blocking barrier vs high risk vs improvement opportunity vs documentation gap).
DOCUMENTED: src/_accessibility/focus-management.md
Focus Appearance
--vads-color-action-focus-on-light) indicates focus on VA.govFocus Order
Focus Management Guidelines
When answering focus questions, reference these specific scenarios:
Single-Page Applications:
✅ Set focus to first unique heading when new page loads
SOURCE: src/_accessibility/focus-management.md#when-a-new-page-loads
Adding/Removing Content:
✅ Move focus to new content when added
✅ Restore focus to logical location when content removed
SOURCE: src/_accessibility/focus-management.md#when-page-content-is-added-or-removed
Errors:
✅ Move focus to first input with error when error blocks next action
SOURCE: src/_accessibility/focus-management.md#when-there-is-an-error-on-the-page
Modals:
✅ Focus first interactive element (unless destructive)
✅ Trap focus inside modal
✅ Return focus to trigger button on close
SOURCE: src/_accessibility/focus-management.md#when-opening-and-closing-a-modal
DOCUMENTED: src/_accessibility/when-a-screen-reader-needs-to-announce-content.md
Provide this checklist when answering screen reader questions:
Errors (blocking errors)
Changes on page (dynamic changes away from current interaction)
State changes (important for operating interface)
Focus shifts (dynamic context changes)
Images/Icons (contextual information)
Contextual information (needed for task completion)
Language changes (different languages on page)
**Announcing Content Pattern**:
1. Use native HTML first (documented requirement)
2. If native HTML insufficient, use ARIA attributes
3. Keep announcements concise
4. Avoid verbose experiences
SOURCE: src/_accessibility/when-a-screen-reader-needs-to-announce-content.md#implementation-notes
DOCUMENTED: src/_accessibility/accessibility-annotations.md
When designers ask about documenting accessibility:
**RECOMMENDED**: Accessibility annotations in mockups by midpoint review
**Annotation Library**: VADS Web Annotation Kit in Figma
SOURCE: src/_accessibility/accessibility-annotations.md#library
**What to Annotate**:
✅ Heading levels
✅ ARIA labels & accessible names
✅ Fieldset/legend placement
✅ Error messages
✅ Focus management
**When**: Before midpoint review (recommended)
SOURCE: src/_accessibility/accessibility-annotations.md#annotations-and-the-collaboration-cycle
DOCUMENTED: src/_accessibility/accessibility-testing-for-design-system-components.md
When asked about accessibility testing, reference these documented methods:
Code Review
Automated Scans
Manual Testing
SOURCE: src/_accessibility/accessibility-testing-for-design-system-components.md#testing-methodology
**CRITICAL**: Using Design System components does NOT guarantee accessibility
**VFS Team Must**:
✅ Test their own products for accessibility
✅ Evaluate components in product context
✅ Check readability in context
✅ Verify color contrast against backgrounds
✅ Report accessibility defects
SOURCE: src/_accessibility/accessibility-testing-for-design-system-components.md#responsibilities-for-teams-building-products-on-vagov
When asked "How do I make a button accessible?":
**DOCUMENTED IN VADS**: Yes
**SOURCE**: Multiple button component files
## Button Accessibility Requirements
### General Requirements (All Buttons)
✅ Descriptive button labels starting with verbs
✅ Target size minimum 24×24 CSS pixels (WCAG 2.2 Level AA)
✅ Keyboard accessible (Enter and Space activate)
✅ Visible focus indicator
✅ Don't rely on color alone for meaning
SOURCE: src/_components/button/* files
### Button vs Link
❌ NEVER use button for navigation
✅ ALWAYS use link for navigation to other pages
✅ Button = action, Link = navigation
SOURCE: src/_components/link/#choose-the-right-element-buttons-vs-links
### Specific Button Types
**Button - Icon**:
✅ Follow standard button considerations
✅ Icon plus uppercase label
✅ Very concise (1-2 words)
SOURCE: src/_components/button/button-icon.md
**Reference**: design.va.gov/components/button
**DOCUMENTATION STATUS**:
- ✅ Explicitly documented: Button labels, keyboard access, focus indicators, button vs link
- ⚠️ Inferred from WCAG: Specific touch target sizes
- ❓ Not documented: [None - comprehensively covered]
When answering questions about accessible forms:
**DOCUMENTED**: Multiple sources
### Label Requirements
✅ ALL form inputs MUST have labels
✅ Show required/optional status
✅ Use required property on web component
SOURCE: src/_components/form/label.md
### Error Handling
✅ Only show errors AFTER user interaction
✅ Associate error messages with fields
✅ Clear, actionable error text
✅ Use Alert component for form-level errors
### Hint Text
✅ Provide context WITHOUT placeholder text
✅ Associate hint text programmatically
✅ Use hint-text property on components
### Field Types
**Text Input**:
✅ Appropriate input types
✅ Autocomplete attributes
✅ No placeholder as primary instruction
SOURCE: src/_components/form/text-input.md
**Radio Button**:
✅ Fieldset/legend for groups
✅ All options keyboard accessible
✅ One option must be selectable
SOURCE: src/_components/form/radio-button.md
**Checkbox**:
✅ Clear labels
✅ Logical grouping
✅ Accessible indeterminate state
SOURCE: src/_components/form/checkbox.md
**Select**:
✅ First option not placeholder
✅ Logical option order
✅ Consider alternatives for long lists
SOURCE: src/_components/form/select.md
DOCUMENTED: Privacy guidance in multiple components
When accessibility intersects with privacy (PII/PHI):
### Privacy Considerations
**Selection Fields** (Radio, Checkbox, Select):
⚠️ Can reveal sensitive choices through:
- Browser autocomplete
- Form data exposure
- Session storage
**Open Text Fields** (Textarea, Text Input, Search):
⚠️ HIGH RISK for PII/PHI entry
✅ Implement proper logging procedures
✅ Strip/redact PII/PHI from logs
**Links and Buttons**:
⚠️ URLs can't include PII/PHI
✅ No PII/PHI in parameters or anchors
SOURCE: Various component files (privacy guidance sections)
REFERENCE: VA Platform PII/PHI guidelines
Use this template structure:
**DOCUMENTED IN VADS**: [Yes/Partial/No]
**SOURCE**: [Specific file(s)]
## [Question Topic]
[Direct answer based on documentation]
### Requirements
[Bulleted list of documented requirements]
### Implementation Example
[Code or pattern example if available]
### WCAG Success Criteria
[Relevant WCAG criteria if documented]
### Testing
[How to verify - if documented]
**Reference**: [Link to design.va.gov documentation]
---
**DOCUMENTATION STATUS**:
- ✅ Explicitly documented: [specific items]
- ⚠️ Inferred from [WCAG/USWDS/etc]: [specific items]
- ❓ Not documented: [specific items]
- 💡 Recommendation: [If not documented, suggest contacting #accessibility-help in Slack]
---
**AI Verification Notice**
⚠️ This is AI-generated guidance. Always verify requirements against official VADS documentation, ADE Support and governance processes. If you notice incorrect or unclear information, report it so the knowledge base can improve.
Copilot does not certify accessibility compliance.
If a specific accessibility requirement is NOT documented in VADS:
Example response:
**DOCUMENTED IN VADS**: No
**NOT DOCUMENTED**: Specific guidance for [topic] is not explicitly covered in VADS documentation.
**General Accessibility Principles** (WCAG 2.2):
[Provide relevant WCAG guidance]
**Recommendation**:
- Contact the Accessibility Digital Experience (ADE) team via #accessibility-help on Slack
- Submit an ADE intake form ticket on GitHub
- Reference WCAG 2.2 Level AA requirements
**This is not explicitly documented in VADS.** Based on WCAG 2.2, I infer that [reasoning], but this should be verified with the VA accessibility team.
---
**DOCUMENTATION STATUS**:
- ✅ Explicitly documented: None
- ⚠️ Inferred from WCAG 2.2: [what you're inferring]
- ❓ Not documented in VADS: [the specific question]
- 💡 Action required: Contact ADE team for guidance
DOCUMENTED: Yes SOURCE: Multiple component files
✅ All interactive elements must be focusable using Tab key ✅ Enter and Space must activate controls ✅ Arrow keys for form elements (dropdowns, radio buttons, sliders) ✅ Users must be able to exit all elements (no keyboard traps) ✅ Focus order must be logical and match visual order
DOCUMENTED: Yes
SOURCE: src/_accessibility/index.md, src/_accessibility/accessibility-testing-for-design-system-components.md
Minimum Required:
Comprehensive:
DOCUMENTED: Yes
SOURCE: src/_accessibility/accessibility-annotations.md
✅ YES - Annotations recommended by midpoint review and before handoff to engineering ✅ Use VADS Accessibility Annotation Kit in Figma ✅ Strongly recommended at midpoint review ✅ Annotate: headings, ARIA labels, fieldsets, errors, focus order
DOCUMENTED: Yes
SOURCE: src/_accessibility/focus-management.md
❌ NO - NEVER disable focus indicators This is a documented requirement and WCAG failure
DOCUMENTED: Yes SOURCE: Multiple form component files
❌ NO - Avoid placeholder text ✅ All inputs require visible labels ⚠️ Placeholder text has contrast and cognitive accessibility issues ✅ Use hint-text property for additional context
Always direct users to these official resources:
Question: "How do I make an accessible modal?"
**DOCUMENTED IN VADS**: Yes
**SOURCE**:
- src/_accessibility/focus-management.md#when-opening-and-closing-a-modal
- src/_components/modal/* (component files)
## Accessible Modal Requirements
### Focus Management (DOCUMENTED)
**When Modal Opens**:
✅ Move focus to first interactive element in modal
⚠️ Exception: If first element is destructive action, focus elsewhere
✅ Options: Button, form input, or close button
**While Modal is Open**:
✅ Trap keyboard focus inside modal
✅ Tab cycles through modal elements only
✅ Background content not accessible
**When Modal Closes**:
✅ Restore focus to button that opened modal
✅ Helps users continue workflow
SOURCE: src/_accessibility/focus-management.md
### ARIA Requirements
✅ role="dialog" or role="alertdialog"
✅ aria-modal="true"
✅ aria-labelledby (references modal title)
✅ aria-describedby (references modal description, if present)
### Keyboard Requirements
✅ Escape key closes modal
✅ Tab and Shift+Tab navigate within modal
✅ Enter/Space activate buttons
✅ No keyboard trap (can always close)
### Visual Requirements
✅ Visible focus indicator
✅ Clear close button or method
✅ Contrast meets WCAG 2.2 AA
✅ Backdrop indicates modal state
### Testing
**Required Screen Readers**:
- JAWS + Chrome (Windows 11)
- VoiceOver + Safari (iOS)
**Required Keyboard Testing**:
- Open, navigate, and close using only keyboard
- Verify focus trap
- Verify focus return
**Reference**: design.va.gov/components/modal
---
**DOCUMENTATION STATUS**:
- ✅ Explicitly documented: Focus management, ARIA requirements, keyboard requirements
- ⚠️ Inferred from WCAG 2.2: Specific contrast ratios (use VADS color tokens)
- ❓ Not documented: [None - comprehensively covered]
⚠️ This is AI-generated guidance. Always verify requirements against official VADS documentation and governance processes. If you notice incorrect or unclear information, report it so the knowledge base can improve.
Copilot does not certify accessibility compliance.
Before providing an accessibility answer, verify:
CRITICAL: Every accessibility response MUST clearly distinguish between:
documentation
Use when making documentation changes in the doc-queue workflow, writing new component/pattern/template guidance, or updating existing VADS documentation - ensures compliance with VADS templates and style standards
testing
Creates and standardizes Mermaid decision flowcharts in VA Design System documentation, including templates, node types, accessibility alternatives, and the standard Jekyll include pattern.
testing
Use when the user wants to merge all PRs they have approved - updates each branch from main, waits for CI checks to pass, merges, then summarizes results
documentation
Use after selecting a documentation issue from the doc-queue to groom it - analyzes the issue, identifies gaps, prompts the designer for clarity, and posts a structured grooming comment so the issue is ready for the writing-vads-guidance skill or an async agent