Back to docs

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:

  1. Each disability persona attempts the task.
  2. Their impairments change how they interact. Tremor causes missed clicks. Low vision makes small text unreadable.
  3. WCAG violations are detected and mapped to real user impact.
  4. 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

  1. Screenshot Capture -- Takes a screenshot during the audit.
  2. 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
  3. Wasserstein Distance -- Measures the gap between the original and filtered images.
  4. 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


Last updated: v18.9.0

From the Blog