Accessibility
Fidus is built for everyone. We follow WCAG 2.1 Level AA standards to ensure our application is usable by people with disabilities, including those using screen readers, keyboard navigation, and assistive technologies.
WCAG 2.1 Level AA Compliance
We commit to meeting Web Content Accessibility Guidelines (WCAG) 2.1 Level AA. This includes:
Perceivable
Information presented in ways users can perceive (text alternatives, captions, color contrast)
Operable
Interface components operable by everyone (keyboard navigation, sufficient time, no seizures)
Understandable
Information and operation understandable (readable, predictable, input assistance)
Robust
Content robust enough to work with assistive technologies (valid HTML, ARIA)
Color Contrast
All text meets WCAG 2.1 AA contrast requirements:
Normal Text (14px+)
Minimum contrast ratio
4.5:1Large Text (18px+ or 14px+ bold)
Minimum contrast ratio
3:1UI Components & Graphics
Icons, borders, focus indicators
3:1Testing Contrast
Tools:
- • WebAIM Contrast Checker
- • Chrome DevTools Accessibility panel
- • Figma Contrast plugin
Keyboard Navigation
All interactive elements must be keyboard accessible:
TabNavigate forwardMove focus to next interactive element
Shift + TabNavigate backwardMove focus to previous interactive element
Enter / SpaceActivateActivate buttons, links, toggles
EscapeClose/CancelClose modals, dismiss cards
Arrow KeysNavigate withinNavigate within radio groups, tabs, menus
Interactive Keyboard Navigation Demo
Try navigating through these buttons using Tab, Shift+Tab, and Enter:
Focus Indicators
All focusable elements have visible focus indicators:
/* Global focus styles */
*:focus-visible {
outline: 2px solid var(--color-primary);
outline-offset: 2px;
}Screen Reader Support
Semantic HTML
Use proper HTML elements for their intended purpose:
✓ Good
<button onClick={...}>
Submit
</button>
<nav>
<a href="/dashboard">
Dashboard
</a>
</nav>✗ Bad
<div onClick={...}>
Submit
</div>
<div>
<div onClick={...}>
Dashboard
</div>
</div>ARIA Labels
Provide labels for elements when visual text isn't sufficient:
// Icon-only button
<button aria-label="Close card">
<X className="h-4 w-4" />
</button>
// Decorative image
<img src="banner.jpg" alt="" role="presentation" />
// Form input
<label htmlFor="email">Email</label>
<input id="email" type="email" aria-required="true" />ARIA Roles & States
Use ARIA attributes to communicate state changes:
aria-expanded="true|false"Indicates whether collapsible content is expanded
aria-selected="true|false"Indicates selection state (tabs, options)
aria-disabled="true|false"Indicates disabled state
aria-live="polite|assertive"Announces dynamic content changes
Screen Reader Testing Guide
Testing with screen readers is essential for ensuring your application is truly accessible. Here's how to test with the most common screen readers:
VoiceOver (macOS/iOS)
Enable: System Preferences → Accessibility → VoiceOver
Keyboard Shortcut: Cmd + F5
Common Commands:
- •
VO + Right Arrow- Navigate to next item - •
VO + Left Arrow- Navigate to previous item - •
VO + Space- Activate item (click) - •
VO + A- Read entire page - •
VO + H- Next heading - •
VO + U- Open rotor (navigation menu)
NVDA (Windows - Free)
Download: nvaccess.org
Start: Ctrl + Alt + N
Common Commands:
- •
Down Arrow- Next item - •
Up Arrow- Previous item - •
Enter- Activate link/button - •
H- Next heading - •
Shift + H- Previous heading - •
B- Next button - •
Insert + Down Arrow- Read all from cursor
JAWS (Windows - Commercial)
Download: freedomscientific.com
Note: Most widely used professional screen reader, similar commands to NVDA
Common Commands:
- •
Down Arrow- Next line - •
H- Next heading - •
T- Next table - •
F- Next form field - •
Insert + F5- List form fields - •
Insert + F6- List headings
Testing Checklist for Screen Readers
- ✓ All interactive elements are announced with their role (button, link, etc.)
- ✓ Form inputs have clear labels that are read before the input
- ✓ Error messages are announced when validation fails
- ✓ Dynamic content changes are announced (use aria-live)
- ✓ Headings create a logical document outline
- ✓ Images have descriptive alt text (or alt="" if decorative)
- ✓ Navigation can be done using heading/landmark shortcuts
- ✓ Modal dialogs trap focus and announce their role
Touch Targets
All interactive elements meet minimum touch target size:
Minimum Size: 44x44 pixels
Applies to:
- • Buttons (primary, secondary, icon buttons)
- • Links (when standalone)
- • Form inputs (checkboxes, radio buttons)
- • Toggle switches
- • Close buttons (X)
- • Swipeable areas on cards
Forms & Input
Labels & Descriptions
<label htmlFor="username">Username</label>
<input
id="username"
type="text"
aria-describedby="username-hint"
aria-required="true"
/>
<span id="username-hint">
Must be 3-20 characters
</span>Error Messages
<input
id="email"
type="email"
aria-invalid="true"
aria-describedby="email-error"
/>
<span id="email-error" role="alert">
Please enter a valid email address
</span>Reduced Motion
Respect user preferences for reduced motion. Users who enable this setting should see instant state changes:
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
// In Tailwind
<div className="transition-all motion-reduce:transition-none">Accessibility Testing Checklist
Use this comprehensive checklist to ensure your features meet accessibility standards before deployment:
Automated Testing Tools
Automated tools catch 30-50% of accessibility issues. Use them as a first pass, then perform manual testing:
axe DevTools (Browser Extension)
Industry-standard accessibility testing tool available for Chrome, Firefox, and Edge
Install: Available in Chrome Web Store and Firefox Add-ons
Usage: Open DevTools → Axe DevTools tab → "Scan All of My Page"
Features:
- • Automated full-page scans
- • Detailed issue descriptions with remediation guidance
- • WCAG 2.1 Level A, AA, and AAA compliance checks
- • Highlight issues directly on page
WAVE (Web Accessibility Evaluation Tool)
Visual accessibility testing tool by WebAIM
Access: wave.webaim.org or Browser Extension
Usage: Enter URL or use extension to scan current page
Features:
- • Visual feedback with icons on page
- • Color-coded issues (errors, alerts, features)
- • Contrast checker
- • Works on live and local sites
Lighthouse (Chrome DevTools)
Built-in accessibility auditing in Chrome DevTools
Access: Chrome DevTools → Lighthouse tab
Usage: Select "Accessibility" category → Generate report
Features:
- • Comprehensive accessibility score (0-100)
- • Performance impact analysis
- • Mobile and desktop testing
- • CI/CD integration available
Pa11y CI (Automated Testing)
Command-line tool for accessibility testing in CI/CD pipelines
Install: npm install -g pa11y-ci
Usage: pa11y-ci --sitemap https://your-site.com/sitemap.xml
Features:
- • Test multiple URLs automatically
- • Configurable WCAG levels
- • CI/CD integration (GitHub Actions, Jenkins)
- • JSON/HTML reports
Related Components
Text Input
Accessible form inputs with labels and validation
Checkbox
Keyboard-accessible checkboxes with proper ARIA
Radio Button
Radio groups with arrow key navigation
Modal
Focus trap and keyboard navigation for dialogs
Alert
Screen reader announcements with role="alert"
Button
Focus indicators and touch target sizing
Resources
- WCAG 2.1 Quick Reference - Complete accessibility guidelines
- WebAIM - Web accessibility resources and training
- The A11Y Project - Community-driven accessibility resources
- MDN: Accessibility - Comprehensive accessibility documentation
- axe DevTools - Download browser extension
- WAVE Tool - Online accessibility checker
- NVDA Screen Reader - Free screen reader for Windows
- Motion & Animation - Reduced motion guidelines
- Installation guide - How to install Fidus Design System
Key Takeaways
- ✅ WCAG 2.1 Level AA compliance required for all features
- ✅ 4.5:1 contrast ratio for normal text, 3:1 for large text and UI components
- ✅ All features must be fully keyboard accessible with visible focus indicators
- ✅ 44x44px minimum touch target size for all interactive elements
- ✅ Use semantic HTML and proper ARIA attributes for screen reader support
- ✅ Test with screen readers (VoiceOver, NVDA, JAWS) before release
- ✅ Run automated tools (axe DevTools, WAVE, Lighthouse) and fix critical issues
- ✅ Respect prefers-reduced-motion for all animations and transitions
- ✅ Provide clear labels, error messages, and form validation feedback
- ✅ Maintain logical heading hierarchy and document structure