Tool Empathy Audit
See your site through the eyes of someone with a disability.
empathy_audit goes beyond WCAG compliance checks. It simulates real people with motor tremors, vision loss, ADHD, and other conditions. You see where they struggle and where they quit. Each issue includes specific fix guidance.
Quick Start
{
"url": "https://example.com/checkout",
"personas": ["motor-tremor", "low-vision", "cognitive-adhd"],
"task": "Complete a purchase"
}
What happens:
- Each disability persona attempts the task.
- Their impairments change how they interact. Tremor causes missed clicks. Low vision makes small text unreadable.
- WCAG violations are detected and mapped to real user impact.
- You get step-by-step fixes for each issue.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
url |
string | Yes | — | Page to audit |
personas |
array | No | All | Disability personas to simulate |
task |
string | No | General exploration | Specific task to attempt |
wcagLevel |
string | No | AA |
WCAG level: A, AA, AAA |
depth |
number | No | 1 | Pages to crawl |
Disability Personas
motor-tremor
Simulates: Essential tremor, Parkinson's, cerebral palsy, repetitive strain injury.
How this persona behaves:
- Mouse movement is imprecise with jitter
- Small click targets fail repeatedly
- Hover menus close before the cursor arrives
- Double-clicks happen by accident
- Keyboard navigation is strongly preferred
Common barriers found:
| Barrier | WCAG | User Experience |
|---|---|---|
| Small click targets | 2.5.5 | 8 attempts to click a 24px button |
| Hover-dependent menus | 2.1.1 | Menu closes before cursor reaches it |
| Time-limited forms | 2.2.3 | Session expired during slow typing |
| No keyboard shortcuts | 2.1.1 | Forced to use mouse for everything |
low-vision
Simulates: Macular degeneration, glaucoma, cataracts, partial sight.
How this persona behaves:
- Uses 200-400% browser zoom
- Relies on high contrast
- Loses page context when zoomed in
- Cannot read small text or icons
- Needs clear visual hierarchy
Common barriers found:
| Barrier | WCAG | User Experience |
|---|---|---|
| Fixed-width containers | 1.4.10 | Content cut off at 200% zoom |
| Low contrast text | 1.4.3 | Cannot read gray-on-white body text |
| Icon-only buttons | 1.1.1 | No idea what the hamburger menu does |
| Tiny form labels | 1.4.4 | Cannot tell which field is which |
cognitive-adhd
Simulates: ADHD, executive function challenges, attention difficulties.
How this persona behaves:
- Scans rapidly without reading fully
- Clicks impulsively, sometimes hitting wrong targets
- Abandons long forms or multi-step flows
- Gets distracted by movement and animation
- Loses track of progress in multi-step flows
Common barriers found:
| Barrier | WCAG | User Experience |
|---|---|---|
| Wall of text | 3.1.5 | Glazed over and missed key info |
| Auto-playing video | 2.2.2 | Could not focus on the form |
| No progress indicator | 3.3.4 | Did not know how many steps remained |
| Long forms | 3.3.2 | Abandoned at field 12 of 20 |
dyslexia
Simulates: Reading difficulties, letter reversal, word recognition challenges.
How this persona behaves:
- Reads slowly
- Misreads similar words (their/there, form/from)
- Struggles with justified text
- Benefits from icons next to text
- Needs generous line spacing
Common barriers found:
| Barrier | WCAG | User Experience |
|---|---|---|
| Justified text | Best practice | Letters swim, lost place |
| Dense paragraphs | 1.4.12 | Could not parse the content |
| Ambiguous labels | 3.3.2 | Confused "Email" for "E-mail" link |
| Poor font choice | Best practice | Letters hard to tell apart |
deaf
Simulates: Deaf, hard of hearing, auditory processing disorder.
How this persona behaves:
- Cannot hear audio content
- Misses audio alerts and notifications
- Depends entirely on visual information
- Needs captions or transcripts
- May need sign language
Common barriers found:
| Barrier | WCAG | User Experience |
|---|---|---|
| Video without captions | 1.2.2 | Missed entire product demo |
| Audio-only alerts | 1.4.2 | Did not know an error occurred |
| Phone-only support | Best practice | No way to get help |
color-blind
Simulates: Protanopia, deuteranopia, tritanopia, and other color vision gaps.
How this persona behaves:
- Cannot distinguish red from green (most common)
- May confuse blue and yellow (less common)
- Depends on patterns, labels, and position
- Struggles with color-coded status indicators
Common barriers found:
| Barrier | WCAG | User Experience |
|---|---|---|
| Red/green validation | 1.4.1 | Cannot tell which fields have errors |
| Color-only charts | 1.4.1 | Graphs are meaningless |
| Status indicators | 1.4.1 | All traffic lights look the same |
Output
{
"url": "https://example.com/checkout",
"wcagLevel": "AA",
"personas": {
"motor-tremor": {
"taskSuccess": false,
"abandonmentPoint": "Payment form - credit card expiry dropdown",
"timeToAbandon": 142,
"attempts": {
"clicks": 47,
"missedClicks": 23,
"successfulClicks": 24
},
"barriers": [
{
"type": "small-target",
"element": "#expiry-month",
"wcag": "2.5.5",
"severity": "critical",
"targetSize": "32x24",
"requiredSize": "44x44",
"userImpact": "Required 8 attempts to click, user patience exhausted",
"remediation": {
"summary": "Increase dropdown trigger to 44x44px minimum",
"code": "<select style='min-width: 44px; min-height: 44px;'>",
"effort": "low"
}
}
]
},
"low-vision": {
"taskSuccess": true,
"timeToComplete": 287,
"zoomLevel": "200%",
"barriers": [
{
"type": "low-contrast",
"element": ".help-text",
"wcag": "1.4.3",
"severity": "moderate",
"contrastRatio": "3.2:1",
"requiredRatio": "4.5:1",
"userImpact": "Couldn't read CVV help text, had to guess format",
"remediation": {
"summary": "Increase text contrast to 4.5:1",
"code": "color: #595959; /* was #999999 */",
"effort": "low"
}
}
]
}
},
"summary": {
"totalBarriers": 7,
"critical": 2,
"serious": 3,
"moderate": 2,
"wcagViolations": {
"A": 1,
"AA": 4
},
"recommendations": [
"Increase all interactive targets to 44px minimum",
"Add keyboard navigation to dropdown menus",
"Improve contrast ratio on help text",
"Add visible focus indicators"
]
}
}
Use Cases
1. Pre-Launch Accessibility Review
Before launching a new feature, run empathy audits on all disability personas.
{
"url": "https://staging.example.com/new-feature",
"personas": ["motor-tremor", "low-vision", "cognitive-adhd", "deaf", "color-blind"],
"task": "Complete the new onboarding flow"
}
2. Prioritizing Accessibility Fixes
You have 100 WCAG violations. Which ones matter most?
{
"url": "https://example.com",
"depth": 5
}
The audit shows which violations caused users to leave. It also shows which ones were minor. Fix the critical ones first.
3. Compliance Documentation
Need evidence for a VPAT or accessibility statement? Use this.
{
"url": "https://example.com",
"wcagLevel": "AA",
"depth": 10
}
This generates detailed barrier reports with WCAG mappings.
Perceptual Transport Analysis (v18.26.0)
The empathy audit now includes Wasserstein-based perceptual transport analysis. It is the first tool that measures how much visual information each persona loses.
How It Works
- Screenshot Capture -- Takes a screenshot during the audit.
- Persona Visual Filter -- Applies the persona's visual filter:
- Low vision: Blur plus contrast reduction
- Color blind: Color channel changes (simulates deuteranopia)
- Elderly: Yellowing lens, mild blur, and contrast loss
- Wasserstein Distance -- Measures the gap between the original and filtered images.
- Metrics -- Reports information loss, motor cost, cognitive load, and attention mismatch.
Perceptual Metrics
| Metric | What It Measures | Example |
|---|---|---|
| Information Loss | Visual content the persona cannot see (0-100%) | 1.1% on good sites. 15%+ on color-dependent ones. |
| Motor Cost | How hard interactive elements are to reach (0-100%) | 100% for motor-impaired (3x effort). 0% for cognitive. |
| Cognitive Load | How overwhelming the visual layout is (0-100%) | 70% for ADHD. 20% for color-blind. |
| Attention Mismatch | How far focus strays from design intent (0-100%) | 60% for ADHD (drawn to motion). 10% for deaf. |
| Transport Distance | Raw Wasserstein distance: original vs. filtered | Higher values = more visual information lost. |
Why Scores Differ Per Persona
Each persona has different barrier severity multipliers. The same page produces different scores.
| Barrier Type | Motor | ADHD | Low Vision | Color Blind | Dyslexic | Deaf | Elderly |
|---|---|---|---|---|---|---|---|
| Touch targets | 3.0x | 0.5x | 1.5x | 0.5x | 0.5x | 0.5x | 2.0x |
| Cognitive load | 0.8x | 3.0x | 1.0x | 0.8x | 2.5x | 0.8x | 2.0x |
| Low contrast | 0.5x | 0.8x | 3.0x | 2.0x | 1.5x | 0.5x | 2.5x |
| Color-only info | 0.3x | 0.5x | 2.0x | 3.0x | 0.8x | 0.5x | 1.5x |
| Timing | 2.0x | 2.5x | 1.5x | 0.5x | 1.5x | 1.5x | 2.0x |
| Missing labels | 1.5x | 1.5x | 2.0x | 1.0x | 2.0x | 1.0x | 2.0x |
The final score blends barrier-weighted scoring (70%) with perceptual transport analysis (30%).
Example Response
{
"persona": "color-blind-deuteranopia",
"empathyScore": 57,
"empathyScoreBarrierOnly": 42,
"perceptualTransport": {
"informationLoss": 0.011,
"attentionMismatch": 0.1,
"motorCost": 0,
"cognitiveLoad": 0.2,
"perceptualScore": 93,
"transportDistance": 0.0038,
"computeTimeMs": 450
}
}
Mathematical Foundation
This uses Sliced Wasserstein Distance from optimal transport theory. It measures the minimum cost of transforming one visual distribution into another.
A persona's visual filter simulates their impairment. The Wasserstein distance from the original measures information loss. This goes beyond "does it pass WCAG." It answers: "how different does this page look through their eyes?"
Based on Agueh & Carlier (SIAM 2011) and Multiscale Sliced Wasserstein as Perceptual Color Difference (ECCV 2024).
Why This Is Different
| WCAG Checker | Empathy Audit | Empathy Audit + Perceptual Transport |
|---|---|---|
| "Button has no accessible name" | "Blind user could not proceed -- 'Next' button had no label" | Same, plus: "persona loses 12% of visual info" |
| "Contrast ratio is 3.2:1" | "Low-vision user at 200% zoom could not read the error" | Same, plus: "Wasserstein distance 0.045" |
| "Target size is 32px" | "Tremor user failed 8 click attempts, then quit" | Same, plus: "motor cost 100% (3x effort)" |
| Counts violations | Predicts when users leave | Predicts abandonment + measures info loss |
| Compliance-focused | User-experience-focused | User-perception-focused |
CI/CD Integration
# Fail build if critical accessibility barriers found
npx cbrowser empathy-audit https://staging.example.com \
--task "Complete checkout" \
--fail-on critical \
--output accessibility-report.html
Related Tools
cognitive_journey_autonomous-- Full journey simulationagent_ready_audit-- AI agent friendliness- UX Analysis Suite -- Full UX analysis capabilities
Last updated: v18.9.0