accessibility-planning

Plan accessibility compliance - WCAG 2.2, Section 508, EN 301 549, inclusive design principles, audit planning, and remediation strategies.

16 stars

Best use case

accessibility-planning is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Plan accessibility compliance - WCAG 2.2, Section 508, EN 301 549, inclusive design principles, audit planning, and remediation strategies.

Teams using accessibility-planning should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/accessibility-planning/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/design/accessibility-planning/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/accessibility-planning/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How accessibility-planning Compares

Feature / Agentaccessibility-planningStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Plan accessibility compliance - WCAG 2.2, Section 508, EN 301 549, inclusive design principles, audit planning, and remediation strategies.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Accessibility Planning

Plan for inclusive design and WCAG compliance before development begins.

## When to Use This Skill

Use this skill when:

- **Accessibility Planning tasks** - Working on plan accessibility compliance - wcag 2.2, section 508, en 301 549, inclusive design principles, audit planning, and remediation strategies
- **Planning or design** - Need guidance on Accessibility Planning approaches
- **Best practices** - Want to follow established patterns and standards

## MANDATORY: Skill Loading First

Before answering ANY accessibility question:

2. Use official WCAG and accessibility standards
3. Base all guidance on validated accessibility practices

## Accessibility Standards

### WCAG 2.2 Overview

| Level | Description | Typical Requirement |
|-------|-------------|---------------------|
| **A** | Minimum | Basic accessibility barriers removed |
| **AA** | Standard | Most common barriers addressed |
| **AAA** | Enhanced | Highest level of accessibility |

**Target:** Most organizations target **WCAG 2.2 Level AA**.

### Compliance Frameworks

| Standard | Region | Applies To |
|----------|--------|------------|
| **WCAG 2.2** | Global | Web content |
| **Section 508** | USA | Federal agencies, contractors |
| **EN 301 549** | Europe | Public sector, ICT products |
| **ADA** | USA | Public accommodations |
| **AODA** | Ontario, Canada | Businesses, organizations |

## WCAG 2.2 Principles (POUR)

### 1. Perceivable

Users must be able to perceive content.

| Guideline | Key Requirements |
|-----------|-----------------|
| **1.1 Text Alternatives** | Alt text for images, captions for audio |
| **1.2 Time-based Media** | Captions, audio descriptions, transcripts |
| **1.3 Adaptable** | Structure via semantic HTML, meaningful sequence |
| **1.4 Distinguishable** | Color contrast, resize text, audio control |

### 2. Operable

Users must be able to operate the interface.

| Guideline | Key Requirements |
|-----------|-----------------|
| **2.1 Keyboard Accessible** | All functionality via keyboard |
| **2.2 Enough Time** | Adjustable timing, pause/stop content |
| **2.3 Seizures** | No flashing content >3 times/second |
| **2.4 Navigable** | Skip links, page titles, focus order |
| **2.5 Input Modalities** | Pointer gestures, target size, motion |

### 3. Understandable

Content and operation must be understandable.

| Guideline | Key Requirements |
|-----------|-----------------|
| **3.1 Readable** | Language identification, abbreviations |
| **3.2 Predictable** | Consistent navigation, no unexpected changes |
| **3.3 Input Assistance** | Error identification, labels, suggestions |

### 4. Robust

Content must work with assistive technologies.

| Guideline | Key Requirements |
|-----------|-----------------|
| **4.1 Compatible** | Valid markup, name/role/value for components |

## WCAG 2.2 New Success Criteria

| Criterion | Level | Description |
|-----------|-------|-------------|
| **2.4.11 Focus Not Obscured (Min)** | AA | Focused element not entirely hidden |
| **2.4.12 Focus Not Obscured (Enhanced)** | AAA | Focused element not partially hidden |
| **2.4.13 Focus Appearance** | AAA | Visible focus indicator requirements |
| **2.5.7 Dragging Movements** | AA | Single-pointer alternative to dragging |
| **2.5.8 Target Size (Minimum)** | AA | 24x24 CSS pixels minimum |
| **3.2.6 Consistent Help** | A | Help mechanisms in consistent location |
| **3.3.7 Redundant Entry** | A | Don't require re-entering same info |
| **3.3.8 Accessible Authentication (Min)** | AA | No cognitive function tests for auth |
| **3.3.9 Accessible Authentication (Enhanced)** | AAA | Extended auth requirements |

## Accessibility Audit Planning

### Audit Types

| Type | Scope | When |
|------|-------|------|
| **Quick Audit** | High-traffic pages, key flows | Sprint review |
| **Comprehensive Audit** | Full WCAG checklist | Before launch |
| **Continuous Monitoring** | Automated scans | Ongoing |
| **User Testing** | With assistive technology users | Periodically |

### Audit Checklist Template

```markdown
# Accessibility Audit Plan

## Scope
- **Product/Site:** [Name]
- **Pages/Components:** [List or "All"]
- **Standard:** WCAG 2.2 Level AA
- **Timeline:** [Dates]

## Testing Matrix

### Automated Testing
- [ ] axe DevTools scan
- [ ] WAVE evaluation
- [ ] Lighthouse accessibility audit
- [ ] Pa11y CI integration

### Manual Testing
- [ ] Keyboard-only navigation
- [ ] Screen reader testing (NVDA, VoiceOver, JAWS)
- [ ] High contrast mode
- [ ] Browser zoom (200%)
- [ ] Color blindness simulation

### Assistive Technology Matrix

| AT | Browser | OS | Tester |
|----|---------|----|----|
| NVDA | Chrome | Windows | [Name] |
| JAWS | Chrome | Windows | [Name] |
| VoiceOver | Safari | macOS | [Name] |
| VoiceOver | Safari | iOS | [Name] |
| TalkBack | Chrome | Android | [Name] |

## Pages/Components to Test

| Priority | Page/Component | URL/Location | Status |
|----------|----------------|--------------|--------|
| High | Homepage | / | Pending |
| High | Login | /login | Pending |
| High | Checkout | /checkout | Pending |
| Medium | Product listing | /products | Pending |
| Medium | Forms | /contact | Pending |

## Issue Tracking
- **Tool:** [Jira/GitHub Issues/etc.]
- **Label:** accessibility
- **Severity Levels:** Critical, Major, Minor, Enhancement

## Deliverables
- [ ] Issue log with WCAG mapping
- [ ] Prioritized remediation plan
- [ ] VPAT/ACR (if required)
- [ ] Executive summary
```

## Common Accessibility Issues

### Critical (Level A failures)

| Issue | WCAG | Fix |
|-------|------|-----|
| **Missing alt text** | 1.1.1 | Add descriptive alt attributes |
| **No keyboard access** | 2.1.1 | Ensure all interactive elements focusable |
| **Missing form labels** | 1.3.1 | Associate labels with inputs |
| **Empty buttons/links** | 4.1.2 | Add accessible names |
| **Auto-playing media** | 1.4.2 | Provide pause/stop controls |

### Major (Level AA failures)

| Issue | WCAG | Fix |
|-------|------|-----|
| **Low color contrast** | 1.4.3 | 4.5:1 for text, 3:1 for large text |
| **No skip navigation** | 2.4.1 | Add skip link to main content |
| **Missing page titles** | 2.4.2 | Unique, descriptive titles |
| **Focus not visible** | 2.4.7 | Visible focus indicator |
| **Reflow issues** | 1.4.10 | Responsive at 400% zoom |

### .NET/Blazor Accessibility Patterns

```csharp
// Accessible button component
@code {
    [Parameter] public string AriaLabel { get; set; } = "";
    [Parameter] public bool IsDisabled { get; set; }
    [Parameter] public RenderFragment? ChildContent { get; set; }
    [Parameter] public EventCallback OnClick { get; set; }
}

<button
    type="button"
    aria-label="@AriaLabel"
    aria-disabled="@IsDisabled.ToString().ToLower()"
    disabled="@IsDisabled"
    @onclick="HandleClick"
    class="btn">
    @ChildContent
</button>

@code {
    private async Task HandleClick()
    {
        if (!IsDisabled)
        {
            await OnClick.InvokeAsync();
        }
    }
}
```

```csharp
// Accessible form field
<div class="form-group">
    <label for="@Id" class="@(IsRequired ? "required" : "")">
        @Label
        @if (IsRequired)
        {
            <span aria-hidden="true">*</span>
            <span class="visually-hidden">(required)</span>
        }
    </label>

    <input
        id="@Id"
        name="@Name"
        type="@Type"
        @bind="Value"
        aria-required="@IsRequired.ToString().ToLower()"
        aria-invalid="@(!string.IsNullOrEmpty(ErrorMessage)).ToString().ToLower()"
        aria-describedby="@(HasError ? $"{Id}-error" : HintId)"
        class="@(HasError ? "input-error" : "")" />

    @if (!string.IsNullOrEmpty(Hint))
    {
        <span id="@HintId" class="hint">@Hint</span>
    }

    @if (HasError)
    {
        <span id="@($"{Id}-error")" class="error" role="alert">
            @ErrorMessage
        </span>
    }
</div>
```

```csharp
// Skip link component
<a href="#main-content" class="skip-link">
    Skip to main content
</a>

<style>
    .skip-link {
        position: absolute;
        top: -40px;
        left: 0;
        background: #000;
        color: #fff;
        padding: 8px;
        z-index: 100;
    }

    .skip-link:focus {
        top: 0;
    }
</style>
```

## Color Contrast Requirements

### Contrast Ratios

| Element Type | WCAG AA | WCAG AAA |
|--------------|---------|----------|
| Normal text (<18pt) | 4.5:1 | 7:1 |
| Large text (≥18pt or ≥14pt bold) | 3:1 | 4.5:1 |
| UI components & graphics | 3:1 | 3:1 |

### Contrast Checker

```csharp
public class ContrastChecker
{
    public record ContrastResult(
        double Ratio,
        bool PassesAA,
        bool PassesAAA,
        bool PassesLargeTextAA,
        bool PassesLargeTextAAA
    );

    public ContrastResult Calculate(string foreground, string background)
    {
        var fgLuminance = GetRelativeLuminance(foreground);
        var bgLuminance = GetRelativeLuminance(background);

        var lighter = Math.Max(fgLuminance, bgLuminance);
        var darker = Math.Min(fgLuminance, bgLuminance);

        var ratio = (lighter + 0.05) / (darker + 0.05);
        ratio = Math.Round(ratio, 2);

        return new ContrastResult(
            Ratio: ratio,
            PassesAA: ratio >= 4.5,
            PassesAAA: ratio >= 7,
            PassesLargeTextAA: ratio >= 3,
            PassesLargeTextAAA: ratio >= 4.5
        );
    }

    private static double GetRelativeLuminance(string hex)
    {
        var rgb = ParseHex(hex);
        var r = GetLuminanceComponent(rgb.R);
        var g = GetLuminanceComponent(rgb.G);
        var b = GetLuminanceComponent(rgb.B);

        return 0.2126 * r + 0.7152 * g + 0.0722 * b;
    }

    private static double GetLuminanceComponent(byte value)
    {
        var sRGB = value / 255.0;
        return sRGB <= 0.03928
            ? sRGB / 12.92
            : Math.Pow((sRGB + 0.055) / 1.055, 2.4);
    }

    private static (byte R, byte G, byte B) ParseHex(string hex)
    {
        hex = hex.TrimStart('#');
        return (
            Convert.ToByte(hex[..2], 16),
            Convert.ToByte(hex[2..4], 16),
            Convert.ToByte(hex[4..6], 16)
        );
    }
}
```

## Keyboard Navigation Requirements

### Focus Order

```csharp
// Tab order management
public class FocusManager
{
    private readonly IJSRuntime _js;

    public async Task SetFocusTo(string elementId)
    {
        await _js.InvokeVoidAsync("focusElement", elementId);
    }

    public async Task TrapFocusInModal(string modalId)
    {
        await _js.InvokeVoidAsync("trapFocus", modalId);
    }

    public async Task RestoreFocus(string previousElementId)
    {
        await _js.InvokeVoidAsync("focusElement", previousElementId);
    }
}
```

```javascript
// Focus trap for modals
window.trapFocus = function(modalId) {
    const modal = document.getElementById(modalId);
    const focusableElements = modal.querySelectorAll(
        'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
    );

    const firstElement = focusableElements[0];
    const lastElement = focusableElements[focusableElements.length - 1];

    modal.addEventListener('keydown', function(e) {
        if (e.key === 'Tab') {
            if (e.shiftKey && document.activeElement === firstElement) {
                lastElement.focus();
                e.preventDefault();
            } else if (!e.shiftKey && document.activeElement === lastElement) {
                firstElement.focus();
                e.preventDefault();
            }
        }
    });

    firstElement.focus();
};
```

### Required Keyboard Interactions

| Component | Keys | Action |
|-----------|------|--------|
| Button | Enter, Space | Activate |
| Link | Enter | Navigate |
| Checkbox | Space | Toggle |
| Radio | Arrow keys | Navigate options |
| Select | Arrow keys, Enter | Navigate, select |
| Tab panel | Arrow keys | Switch tabs |
| Menu | Arrow keys, Enter, Esc | Navigate, select, close |
| Modal | Esc | Close |

## VPAT (Voluntary Product Accessibility Template)

### VPAT Structure

```markdown
# [Product Name] Accessibility Conformance Report
## WCAG 2.2 Edition

**Report Date:** [Date]
**Product Version:** [Version]
**Contact:** [Email]

### Table 1: Success Criteria, Level A

| Criteria | Conformance Level | Remarks |
|----------|-------------------|---------|
| 1.1.1 Non-text Content | Supports | All images have alt text |
| 1.2.1 Audio-only and Video-only | Not Applicable | No pre-recorded media |
| 1.3.1 Info and Relationships | Partially Supports | [Explanation] |
| ... | ... | ... |

### Table 2: Success Criteria, Level AA
[Continue pattern]

### Conformance Levels
- **Supports:** Fully meets criterion
- **Partially Supports:** Some aspects don't meet criterion
- **Does Not Support:** Majority doesn't meet criterion
- **Not Applicable:** Criterion doesn't apply
```

## Remediation Planning

### Priority Matrix

| Priority | Criteria | Timeline |
|----------|----------|----------|
| **P0 - Critical** | Level A failures, blocks functionality | Immediate |
| **P1 - High** | Level AA failures, significant barriers | Sprint 1 |
| **P2 - Medium** | Level AA improvements, minor barriers | Sprint 2-3 |
| **P3 - Low** | Best practices, enhancements | Backlog |

### Remediation Tracking

```csharp
public class AccessibilityIssue
{
    public Guid Id { get; init; }
    public required string Title { get; init; }
    public required string Description { get; init; }
    public required WcagCriterion Criterion { get; init; }
    public required WcagLevel Level { get; init; }
    public required IssueStatus Status { get; init; }
    public required Priority Priority { get; init; }
    public required string AffectedComponent { get; init; }
    public string? Remediation { get; init; }
    public string? AssignedTo { get; init; }
    public DateOnly? TargetDate { get; init; }
}

public record WcagCriterion(string Number, string Name);

public enum WcagLevel { A, AA, AAA }

public enum Priority { Critical, High, Medium, Low }

public enum IssueStatus
{
    Open,
    InProgress,
    InReview,
    Closed,
    WontFix
}
```

## Inclusive Design Principles

### Microsoft Inclusive Design

1. **Recognize exclusion** - Understand how exclusion happens
2. **Solve for one, extend to many** - Design for edge cases first
3. **Learn from diversity** - Include diverse perspectives

### Permanent, Temporary, Situational

| Sense | Permanent | Temporary | Situational |
|-------|-----------|-----------|-------------|
| Touch | One arm | Arm injury | Holding a baby |
| See | Blind | Cataract | Bright sunlight |
| Hear | Deaf | Ear infection | Noisy environment |
| Speak | Nonverbal | Laryngitis | Heavy accent |

## Checklist: Accessibility Planning

### Strategy

- [ ] Target compliance level defined (AA recommended)
- [ ] Legal requirements identified
- [ ] Timeline established
- [ ] Resources allocated

### Design Phase

- [ ] Color contrast verified
- [ ] Touch targets sized (44x44px minimum)
- [ ] Focus states designed
- [ ] Error states accessible
- [ ] Motion preferences considered

### Development Phase

- [ ] Semantic HTML used
- [ ] ARIA used correctly (sparingly)
- [ ] Keyboard navigation works
- [ ] Focus management implemented
- [ ] Skip links added

### Testing Phase

- [ ] Automated testing integrated
- [ ] Manual testing completed
- [ ] Screen reader testing done
- [ ] Keyboard-only testing done
- [ ] Zoom/reflow tested

### Documentation

- [ ] Accessibility statement published
- [ ] VPAT completed (if required)
- [ ] Known issues documented
- [ ] Contact for feedback provided

## Related Skills

- `usability-testing` - Inclusive usability testing
- `design-system-planning` - Accessible components
- `heuristic-evaluation` - Accessibility heuristics
- `service-blueprinting` - Accessible service touchpoints

Related Skills

accessibility-testing

16
from diegosouzapw/awesome-omni-skill

Guide for conducting comprehensive accessibility audits of code to identify WCAG compliance issues and barriers to inclusive design. This skill should be used when reviewing accessibility, ARIA implementation, keyboard navigation, or screen reader compatibility.

accessibility

16
from diegosouzapw/awesome-omni-skill

Quality assurance for web accessibility and usability, particularly for users with disabilities. Use when involved in any web project.

accessibility-ux-audit

16
from diegosouzapw/awesome-omni-skill

Audit and enhance accessibility and UX across all pages and components.

accessibility-rules

16
from diegosouzapw/awesome-omni-skill

Concise accessibility checklist and practices for components in the repository. Use when implementing UI to ensure keyboard, screen reader, and focus semantics.

accessibility-design

16
from diegosouzapw/awesome-omni-skill

WCAG 2.1 AA compliance patterns, screen reader compatibility, keyboard navigation, and ARIA best practices. Use when implementing accessible interfaces, reviewing UI components, or auditing accessibility compliance. Covers semantic HTML, focus management, color contrast, and assistive technology testing.

accessibility-design-checklist

16
from diegosouzapw/awesome-omni-skill

Эксперт по accessibility дизайну. Используй для WCAG, a11y чеклистов и inclusive design.

accessibility-design-checker

16
from diegosouzapw/awesome-omni-skill

Ensures designs meet accessibility requirements including WCAG compliance, color contrast, keyboard navigation, screen reader support, and focus management. Reviews designs for accessibility issues and provides recommendations.

accessibility-contrast-audit

16
from diegosouzapw/awesome-omni-skill

[Design System] Quantitative accessibility audit for UI - contrast ratios, font sizes, tap targets, heading hierarchy. Use when (1) checking WCAG color contrast compliance, (2) auditing text sizes for readability, (3) validating touch/click target sizes, (4) reviewing heading structure and landmarks, (5) user asks to 'check accessibility', 'audit contrast', 'WCAG compliance', or 'a11y check'.

accessibility-compliance

16
from diegosouzapw/awesome-omni-skill

Implement WCAG 2.2 compliant interfaces with mobile accessibility, inclusive design patterns, and assistive technology support. Use when auditing accessibility, implementing ARIA patterns, building for screen readers, or ensuring inclusive user experiences.

accessibility-by-default

16
from diegosouzapw/awesome-omni-skill

Treats accessibility as a baseline requirement, not a feature. WCAG 2.1/2.2 AA principles embedded into every decision.

accessibility-basic-check

16
from diegosouzapw/awesome-omni-skill

Run a basic accessibility checklist for UI changes. Use when a junior developer needs quick a11y guidance.

accessibility-advocate

16
from diegosouzapw/awesome-omni-skill

Use when designing inclusive animations, addressing vestibular disorders and motion sensitivity, or ensuring animation accessibility compliance.