Frontend5-point gate · Next.js / React · Mobile · Any stack
The accessibility floor
Keyboard, contrast, semantics, reduced motion — the floor nobody ships below.
Use this when
Clickable divs
Icon buttons with no accessible name
outline: none with no replacement
The quality gate
- Keyboard-only pass: everything reachable, focus visible, Escape closes overlays
- Real semantics: buttons are <button>, links are <a>, inputs have labels
- Icon-only controls carry aria-labels; informative images carry real alt text
- Contrast ≥ 4.5:1 for body text, ≥ 3:1 for large text and UI chrome
- prefers-reduced-motion honored globally and per animated component
Prove it: Complete the money path keyboard-only, then once with a screen reader.
Install or copy
Save the download as accessibility-floor/SKILL.md in your agent's supported skills directory, or copy the complete package below. Load it only when its description matches the work.
Portable SKILL.md
--- name: accessibility-floor description: "Applies “The accessibility floor” as a repeatable product-quality gate. Use during frontend work when keyboard, contrast, semantics, reduced motion — the floor nobody ships below." --- # The accessibility floor Apply this skill during **Frontend** work. It supports Next.js / React, Mobile, Any stack. Keyboard, contrast, semantics, reduced motion — the floor nobody ships below. ## Instructions Hold an accessibility floor on every surface: complete keyboard operability (tab order sane, focus always visible, Escape closes any overlay, a skip link exists), real semantics (native button/a/label elements — no clickable divs), aria-labels on icon-only controls, alt text that describes informative images and empty alt on decorative ones, contrast of at least 4.5:1 for body text and 3:1 for large text and UI chrome, and prefers-reduced-motion honored both globally and inside every JS-driven animation. Run the keyboard pass on every new interactive element before it merges, and run a screen-reader pass on the money path once per release. Accessibility issues are bugs, not enhancements. ## Detect the problem - Clickable divs - Icon buttons with no accessible name - outline: none with no replacement ## Hold the gate Do not declare this phase complete until every item passes: - [ ] Keyboard-only pass: everything reachable, focus visible, Escape closes overlays - [ ] Real semantics: buttons are <button>, links are <a>, inputs have labels - [ ] Icon-only controls carry aria-labels; informative images carry real alt text - [ ] Contrast ≥ 4.5:1 for body text, ≥ 3:1 for large text and UI chrome - [ ] prefers-reduced-motion honored globally and per animated component ## Verify the result Complete the money path keyboard-only, then once with a screen reader.
More frontend skills
Hand-made over generated
Tokens, motion discipline, and the 100ms rule — the anti-slop frontend bar.
Performance is a budget, not a hope
Numbers written down, measured on the production build, enforced at the gate.
Components with honest APIs
Props speak the domain; variants are unions; composition beats configuration.
Want this quality gate applied to a real product decision?
Start a First Loop