home / skills / aj-geddes / useful-ai-prompts / color-accessibility

color-accessibility skill

/skills/color-accessibility

This skill helps you design accessible color palettes and contrast checks to ensure color-blind friendly visuals across interfaces and charts.

npx playbooks add skill aj-geddes/useful-ai-prompts --skill color-accessibility

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
7.3 KB
---
name: color-accessibility
description: Design color palettes that are accessible to all users including those with color blindness. Ensure sufficient contrast, meaningful use of color, and inclusive design.
---

# Color Accessibility

## Overview

Accessible color design ensures all users, including those with color vision deficiency, can access and understand information.

## When to Use

- Creating color palettes
- Designing data visualizations
- Testing interface designs
- Status indicators and alerts
- Form validation states
- Charts and graphs

## Instructions

### 1. **Color Contrast Standards**

```yaml
WCAG Contrast Ratios:

WCAG AA (Minimum):
  - Normal text: 4.5:1
  - Large text (18pt+): 3:1
  - UI components & graphical elements: 3:1
  - Focus indicators: 3:1

WCAG AAA (Enhanced):
  - Normal text: 7:1
  - Large text: 4.5:1
  - Better for accessibility

---

Testing Contrast:

Tools:
  - WebAIM Contrast Checker
  - Color Contrast Analyzer
  - Figma plugins
  - Browser DevTools

Formula (WCAG):
  Contrast = (L1 + 0.05) / (L2 + 0.05)
  Where L = relative luminance

Example Pairs:

Good (Pass AA):
  - Black (#000000) on White (#FFFFFF) = 21:1 ✓
  - White on Dark Blue (#003366) = 12.6:1 ✓
  - Dark Gray (#333333) on Light Gray (#EEEEEE) = 10:1 ✓

Poor (Fail):
  - Light Gray (#CCCCCC) on White (#FFFFFF) = 1.3:1 ✗
  - Yellow (#FFFF00) on White (#FFFFFF) = 1.07:1 ✗
```

### 2. **Color Vision Deficiency Simulation**

```python
# Design for color vision deficiency

class ColorAccessibility:
    COLOR_DEFICIENCY_TYPES = {
        'Protanopia': 'Red-blind (1% male)',
        'Deuteranopia': 'Green-blind (1% male)',
        'Tritanopia': 'Blue-yellow blind (very rare)',
        'Monochromacy': 'Complete color blindness (very rare)'
    }

    def simulate_vision_deficiency(self, color, deficiency_type):
        """Simulate how color appears to different eyes"""
        # Color blind simulation
        simulated_colors = {
            'normal': color,
            'protanopia': self.apply_protanopia_filter(color),
            'deuteranopia': self.apply_deuteranopia_filter(color),
            'tritanopia': self.apply_tritanopia_filter(color)
        }
        return simulated_colors

    def check_palette_accessibility(self, color_palette):
        """Validate entire palette for accessibility"""
        issues = []

        # Check contrast ratios
        for color_pair in self.generate_pairs(color_palette):
            contrast = self.calculate_contrast(color_pair[0], color_pair[1])
            if contrast < 4.5:
                issues.append({
                    'type': 'Low contrast',
                    'colors': color_pair,
                    'ratio': contrast,
                    'severity': 'Critical'
                })

        # Check color blind differentiation
        for deficiency in self.COLOR_DEFICIENCY_TYPES:
            simulated = self.simulate_for_deficiency(color_palette, deficiency)
            if not self.are_colors_distinguishable(simulated):
                issues.append({
                    'type': 'Color blindness',
                    'deficiency': deficiency,
                    'severity': 'High'
                })

        return {
            'palette': color_palette,
            'issues': issues,
            'is_accessible': len(issues) == 0,
            'recommendations': self.generate_recommendations(issues)
        }

    def generate_recommendations(self, issues):
        """Suggest palette improvements"""
        return [
            'Use patterns or icons to differentiate (not just color)',
            'Increase contrast ratios',
            'Use tested accessible color combinations',
            'Test with color blindness simulator before launch'
        ]
```

### 3. **Accessible Color Usage**

```yaml
Color Usage Guidelines:

Status Indicators:

Error:
  Color: #D32F2F (red)
  Contrast: 4.5:1 minimum
  Additional: Error icon, text "Error"
  Don't: Use ONLY red, no other indication

Success:
  Color: #388E3C (green)
  Contrast: 4.5:1 minimum
  Additional: Checkmark icon, text "Success"
  Don't: Use ONLY green

Warning:
  Color: #F57C00 (orange)
  Contrast: 4.5:1 minimum
  Additional: Warning icon, text "Warning"
  Don't: Use ONLY orange

Info:
  Color: #1976D2 (blue)
  Contrast: 4.5:1 minimum
  Additional: Info icon, text "Info"
  Don't: Use ONLY blue

---

Data Visualization:

Charts & Graphs:
  - Use 8+ color combinations for color blindness
  - Include patterns or textures
  - Label elements directly (not legend only)
  - Use colorblind-friendly palettes

Recommended Palettes:
  - ColorBrewer (designed for accessibility)
  - Okabe-Ito palette
  - Paul Tol colors

Heat Maps:
  - Sequential palettes only
  - Avoid red-green combinations
  - Test with simulator

---

UI Component States:

Button States:
  - Default: Primary color
  - Hover: Slightly darker
  - Disabled: Gray with reduced contrast
  - Focus: Outline indicator (not color alone)
  - Active: Darker shade

Form Validation:
  - Invalid: Red + error icon + message
  - Valid: Green + checkmark icon (optional)
  - Required: No special color, use text label

Interactive Elements:
  - Focus: Visible outline or ring
  - Selected: Checkmark or checkmark icon + color
  - Hover: Underline + color change
  - Don't: Use color alone to indicate state
```

### 4. **Testing & Validation**

```javascript
// Test color accessibility

class ColorAccessibilityTesting {
  testColorPalette(palette) {
    return {
      contrast_test: this.validateContrast(palette),
      colorblind_test: this.simulateColorBlindness(palette),
      usage_test: this.testColorUsage(palette),
      tools_used: [
        'WebAIM Contrast Checker',
        'Color Oracle simulator',
        'WAVE accessibility checker'
      ]
    };
  }

  validateContrast(palette) {
    const results = [];

    for (let color of palette) {
      const contrast = this.calculateLuminance(color);
      results.push({
        color: color,
        luminance: contrast,
        passes_aa: contrast >= 4.5,
        passes_aaa: contrast >= 7.0
      });
    }

    return results;
  }

  simulateColorBlindness(palette) {
    return {
      protanopia: this.convertToProtanopia(palette),
      deuteranopia: this.convertToDeuteranopia(palette),
      tritanopia: this.convertToTritanopia(palette),
      all_distinguishable: this.checkDistinguishability(palette)
    };
  }
}
```

## Best Practices

### ✅ DO
- Ensure 4.5:1 contrast minimum (WCAG AA)
- Test with color blindness simulator
- Use patterns or icons with color
- Label states with text, not color alone
- Test with real users with color blindness
- Document color usage in design system
- Choose accessible color palettes
- Use sequential colors for ordered data
- Validate all color combinations
- Include focus indicators

### ❌ DON'T
- Use color alone to convey information
- Create low-contrast text
- Assume users see colors correctly
- Use red-green combinations
- Forget about focus states
- Mix too many colors (>5-8)
- Use pure red and pure green together
- Skip contrast testing
- Assume AA is sufficient (AAA better)
- Ignore color blindness in testing

## Color Accessibility Tips

- 8% of males have red-green color blindness
- Deuteranopia and protanopia are most common
- Always test with simulator (Color Oracle, Coblis)
- Use patterns to differentiate, not just color
- Test colors in context (not in isolation)

Overview

This skill helps designers and developers create color palettes and UI states that are accessible to all users, including those with color vision deficiencies. It focuses on sufficient contrast, meaningful use of color, and practical testing workflows to validate palettes in real interfaces. The guidance includes standards, simulation checks, and actionable recommendations for inclusive visual design.

How this skill works

The skill inspects color pairs and full palettes for WCAG contrast ratios and flags low-contrast combinations. It simulates common color vision deficiencies (protanopia, deuteranopia, tritanopia) to detect indistinguishable colors and verifies that states and data visualizations remain readable. It returns issues, severity levels, and concrete recommendations such as adding icons, patterns, or adjusting luminance values.

When to use it

  • Creating or refining a site or app color palette
  • Designing charts, graphs, and data visualizations
  • Defining status indicators, form validation states, or alerts
  • Building or updating a design system or style guide
  • Before QA release to catch accessibility regressions

Best practices

  • Meet WCAG AA contrast minimum (4.5:1 for normal text) and prefer AAA where feasible
  • Test palettes with color blindness simulators and with real users where possible
  • Use redundant cues: labels, icons, patterns, or text in addition to color
  • Avoid relying on red/green differences alone; use colorblind-friendly palettes (Okabe-Ito, ColorBrewer)
  • Provide visible focus indicators and do not use color alone to indicate state
  • Document color usage and validated combinations in the design system

Example use cases

  • Selecting an accessible primary/secondary palette for a web app
  • Designing multi-series charts that remain distinguishable for colorblind users
  • Creating status badges (error, success, warning, info) with icons and sufficient contrast
  • Auditing an existing UI for contrast and color-differentiation issues before launch
  • Building a form validation system that uses icons and messages in addition to color

FAQ

What contrast ratios should I aim for?

Aim for at least 4.5:1 for normal text (WCAG AA). For larger text and UI components, 3:1 is acceptable; target 7:1 where possible for enhanced accessibility (AAA).

How many distinct colors can I safely use in charts?

Limit simultaneous distinct colors to a manageable number (preferably under 8) and combine color with patterns, direct labels, or textures to ensure distinguishability for colorblind viewers.