accessibility-design
Ensure WCAG 2.1 AA compliance in all frontend designs. Use this skill when building any user interface to guarantee visibility, contrast, keyboard navigation, and screen reader support.
$ 安裝
git clone https://github.com/letsgomaslow/think /tmp/think && cp -r /tmp/think/.claude/skills/accessibility-design ~/.claude/skills/think// tip: Run this command in your terminal to install the skill
name: accessibility-design description: Ensure WCAG 2.1 AA compliance in all frontend designs. Use this skill when building any user interface to guarantee visibility, contrast, keyboard navigation, and screen reader support.
Accessibility Design Skill
Color Contrast Requirements (WCAG AA)
| Element Type | Minimum Ratio | Example |
|---|---|---|
| Normal text (<18px) | 4.5:1 | Dark gray #374151 on white |
| Large text (18px+ or 14px bold) | 3:1 | Medium gray #6b7280 on white |
| UI components & graphics | 3:1 | Borders, icons, focus rings |
Testing: Use browser DevTools or webaim.org/resources/contrastchecker
Safe Dark Mode Combinations:
- Text on dark: Use #e5e7eb (gray-200) minimum, #f9fafb (gray-50) preferred
- NEVER use: #9ca3af (gray-400) or darker for body text on dark backgrounds
Maslow AI: Use
#FFFFFFon Dark Blue#121D35and Purple#401877. Use#333333on Teal#6DC4AD, Pink#EE7BB3, and Orange#F3A326. Seemaslow-brandskill for full contrast table.
Focus States
Required for ALL interactive elements:
:focus-visible {
outline: 2px solid var(--color-accent);
outline-offset: 2px;
}
/* Never do this without replacement */
/* :focus { outline: none; } ← WRONG */
Maslow AI: Use Teal
#6DC4ADfor focus rings (--state-focus-ringinmaslow-brand).
Tab order must be:
- Logical (follows visual flow)
- Complete (all interactive elements reachable)
- Indicated (visible focus ring)
Semantic HTML Structure
Required landmarks:
<header role="banner">
<nav role="navigation" aria-label="Main">
<main role="main">
<aside role="complementary">
<footer role="contentinfo">
Heading hierarchy:
- One
<h1>per page - Sequential: h1 → h2 → h3 (no skipping)
- Descriptive, not generic ("Features" not "Section 2")
ARIA Labels
Interactive elements need labels:
<!-- Icon-only buttons -->
<button aria-label="Close menu">
<svg>...</svg>
</button>
<!-- Links with non-descriptive text -->
<a href="/docs" aria-label="Read the documentation">Learn more</a>
<!-- Form inputs -->
<input type="email" aria-label="Email address" placeholder="you@example.com">
Motion Safety
Always include:
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
Animation rules:
- No auto-playing animations longer than 5 seconds
- Provide pause/stop controls for persistent motion
- Avoid flashing content (max 3 flashes/second)
Images & Icons
All images need alt text:
<!-- Informative -->
<img src="chart.png" alt="Sales increased 40% in Q4 2024">
<!-- Decorative (hide from screen readers) -->
<img src="decoration.svg" alt="" role="presentation">
<!-- SVG icons -->
<svg aria-hidden="true">...</svg>
<span class="sr-only">Menu</span>
Screen Reader Utilities
Include in CSS:
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
Checklist Before Shipping
- All text meets contrast requirements
- Focus indicators visible on all interactive elements
- Keyboard navigation works (Tab, Enter, Escape, Arrows)
- Heading hierarchy is sequential
- Images have alt text
- ARIA labels on icon-only buttons
- Reduced motion media query included
- No content relies solely on color to convey meaning
Brand Integration
For Maslow AI projects, reference the maslow-brand skill for:
| Element | Maslow Token |
|---|---|
| Focus ring | --state-focus-ring: #6DC4AD |
| Dark background | --dark-background: #121D35 |
| Text on dark | --dark-text-primary: #FFFFFF |
| Text on light | --light-text-primary: #333333 |
Verified Contrast Pairs (from maslow-brand):
- ✅ White
#FFFFFFon Purple#401877— 10.5:1 - ✅ White
#FFFFFFon Dark Blue#121D35— 15.2:1 - ✅ Dark
#333333on Teal#6DC4AD— 4.8:1 - ✅ Dark
#333333on Pink#EE7BB3— 4.5:1
Repository
