# BMAD Method Accessibility Guide
This guide ensures that all BMAD Method documentation and visual elements are accessible to users with diverse abilities and needs.
## Accessibility Principles
### 1. Perceivable
Information and user interface components must be presentable to users in ways they can perceive.
### 2. Operable
User interface components and navigation must be operable by all users.
### 3. Understandable
Information and the operation of user interface must be understandable.
### 4. Robust
Content must be robust enough to be interpreted reliably by a wide variety of user agents, including assistive technologies.
## Color and Contrast Standards
### WCAG AA Compliance
All text and interactive elements meet or exceed WCAG AA standards:
\```css
/* High contrast color combinations */
.high-contrast-text {
color: #000000; /* Black text */
background: #ffffff; /* White background */
/* Contrast ratio: 21:1 */
}
.primary-text {
color: #1a365d; /* Dark blue text */
background: #ffffff; /* White background */
/* Contrast ratio: 12.6:1 */
}
.secondary-text {
color: #4a5568; /* Gray text */
background: #ffffff; /* White background */
/* Contrast ratio: 7.2:1 */
}
/* Interactive elements */
.interactive-element {
color: #ffffff; /* White text */
background: #2563eb; /* Blue background */
/* Contrast ratio: 8.6:1 */
}
.interactive-element:focus {
outline: 2px solid #1d4ed8;
outline-offset: 2px;
/* Focus indicator clearly visible */
}
\```
### Color-Blind Friendly Palette
Our color system works for users with various types of color vision deficiency:
\```css
/* Color-blind friendly palette */
:root {
--accessible-blue: #0066cc; /* Distinguishable blue */
--accessible-green: #228b22; /* Forest green */
--accessible-red: #cc0000; /* Clear red */
--accessible-orange: #ff8c00; /* Dark orange */
--accessible-purple: #6a0dad; /* Blue violet */
--accessible-gray: #666666; /* Medium gray */
}
/* Never rely on color alone */
.status-indicator {
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.status-success {
color: var(--accessible-green);
}
.status-success::before {
content: "✓";
font-weight: bold;
}
.status-error {
color: var(--accessible-red);
}
.status-error::before {
content: "✗";
font-weight: bold;
}
.status-warning {
color: var(--accessible-orange);
}
.status-warning::before {
content: "âš ";
font-weight: bold;
}
\```
## Typography and Readability
### Font Selection and Sizing
\```css
/* Accessible typography */
body {
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
font-size: 16px; /* Minimum 16px for body text */
line-height: 1.6; /* Adequate line spacing */
letter-spacing: 0.01em; /* Slight letter spacing for clarity */
}
h1, h2, h3, h4, h5, h6 {
font-weight: 600;
line-height: 1.3;
margin-bottom: 0.5em;
}
/* Large text for better readability */
.large-text {
font-size: 18px;
line-height: 1.7;
}
/* Ensure text can be zoomed to 200% */
@media (min-resolution: 2dppx) {
body {
font-size: 18px;
}
}
\```
### Reading Flow and Structure
\```html
\```
### Screen Reader Announcements
\```javascript
// Live region for dynamic content updates
class AccessibleNotifications {
constructor() {
this.createLiveRegion();
}
createLiveRegion() {
const liveRegion = document.createElement('div');
liveRegion.setAttribute('aria-live', 'polite');
liveRegion.setAttribute('aria-atomic', 'true');
liveRegion.className = 'sr-only';
liveRegion.id = 'live-region';
document.body.appendChild(liveRegion);
}
announce(message, priority = 'polite') {
const liveRegion = document.getElementById('live-region');
liveRegion.setAttribute('aria-live', priority);
liveRegion.textContent = message;
// Clear after announcement
setTimeout(() => {
liveRegion.textContent = '';
}, 1000);
}
}
// Usage examples
const notifications = new AccessibleNotifications();
// Announce progress updates
notifications.announce('Step 1 of 4 completed');
// Announce errors with assertive priority
notifications.announce('Error: Please fill in all required fields', 'assertive');
// Announce success
notifications.announce('Project created successfully');
\```
## Image and Media Accessibility
### Alternative Text Guidelines
\```html
The system architecture shows three main layers:
Presentation layer with web and mobile interfaces,
Application layer with orchestrator and persona management,
and Data layer with knowledge base and templates.
\```
### Video and Audio Accessibility
\```html
Video Description
This video introduces the BMAD Method, showing how different personas collaborate...
Full Transcript
Welcome to the BMAD Method introduction...
\```
## Testing and Validation
### Accessibility Testing Checklist
- [ ] **Keyboard Navigation**
- [ ] All interactive elements are keyboard accessible
- [ ] Tab order is logical and intuitive
- [ ] Focus indicators are clearly visible
- [ ] No keyboard traps exist
- [ ] **Screen Reader Compatibility**
- [ ] Content is properly structured with headings
- [ ] Images have appropriate alt text
- [ ] Form labels are properly associated
- [ ] ARIA attributes are used correctly
- [ ] **Color and Contrast**
- [ ] Text meets WCAG AA contrast requirements
- [ ] Color is not the only means of conveying information
- [ ] Interactive elements have sufficient contrast
- [ ] **Responsive Design**
- [ ] Content is readable at 200% zoom
- [ ] No horizontal scrolling at standard zoom levels
- [ ] Touch targets are at least 44px
- [ ] **Motion and Animation**
- [ ] Animations can be disabled via prefers-reduced-motion
- [ ] No content flashes more than 3 times per second
- [ ] Auto-playing media can be paused
### Automated Testing Tools
\```javascript
// Example accessibility testing with axe-core
import { axe, toHaveNoViolations } from 'jest-axe';
expect.extend(toHaveNoViolations);
test('BMAD documentation should be accessible', async () => {
const { container } = render();
const results = await axe(container);
expect(results).toHaveNoViolations();
});
// Manual testing helpers
function announceToScreenReader(message) {
const announcement = document.createElement('div');
announcement.setAttribute('aria-live', 'polite');
announcement.setAttribute('aria-atomic', 'true');
announcement.className = 'sr-only';
announcement.textContent = message;
document.body.appendChild(announcement);
setTimeout(() => {
document.body.removeChild(announcement);
}, 1000);
}
\```
---
*Following these accessibility guidelines ensures that BMAD Method documentation is usable by everyone, regardless of their abilities or the assistive technologies they use.*