skills.by true||false
LibraryHow to run

A product of true||false

Every item lists its source, license and what we changed.

library
skilluitrueorfalse

accessibility

Checks and fixes semantics, keyboard, focus, contrast, labels and motion against WCAG 2.2 AA.

looks for

  • div or span used as a button
  • custom controls (switch, tabs, menu, dialog, combobox)
  • icon-only buttons
  • low-contrast text or status shown by colour alone
  • animations without a reduced-motion path

outputs

  • → findings mapped to WCAG success criteria
  • → code fixes (native element, label, role, focus management)
  • → a manual test script (keyboard + screen reader)
drawing flowchart…
flow.mmd

SKILL.md

Accessibility (WCAG 2.2 AA)

1. Native first

Use the real element: <button>, <a href>, <input type="checkbox">, <select>, <dialog>, <details>. ARIA is for when no element exists, and "no ARIA is better than bad ARIA".

2. Keyboard

  • Everything clickable is reachable with Tab and works with Enter/Space.
  • Logical tab order follows reading order; no positive tabindex.
  • Composite widgets (tabs, menus, listboxes) use arrow keys inside, one tab stop.
  • Esc closes overlays. No keyboard traps.
  • A visible "Skip to content" link on pages with navigation.

3. Focus

  • :focus-visible ring with ≥ 3:1 contrast; never outline: none without a replacement.
  • Dialogs: move focus in on open, trap it, return it to the trigger on close.
  • After route changes or async content, move focus or announce it.
  • Focused items are not hidden behind sticky headers (2.4.11).

4. Names, roles, states

  • Icon-only buttons get aria-label.
  • Inputs have a visible <label>; placeholders are not labels.
  • Custom switch: role="switch" + aria-checked. Toggle button: aria-pressed. Disclosure: aria-expanded + aria-controls.
  • Live updates (toasts, async results) use role="status" or aria-live="polite".

5. Contrast and colour

  • Text ≥ 4.5:1; large text (≥ 24 px, or 18.66 px bold) ≥ 3:1.
  • UI components and focus indicators ≥ 3:1 against neighbours.
  • Never convey state by colour alone: add an icon, label or pattern.
  • Check both light and dark themes.

6. Motion

  • Respect prefers-reduced-motion: remove parallax, auto-play, large movement.
  • Nothing flashes more than 3 times per second.
  • Auto-moving content longer than 5 s has pause/stop.

7. Forms and errors

  • Errors are text, next to the field, linked with aria-describedby, and say how to fix.
  • Don't block paste; support autocomplete attributes.
  • Don't require re-entering info already given (3.3.7); allow non-puzzle auth (3.3.8).

8. Targets and zoom

  • Pointer targets ≥ 24×24 CSS px (2.5.8); 44 px recommended.
  • Works at 200% zoom and 320 px width without horizontal scroll.
  • Drag actions have a single-pointer alternative (2.5.7).

9. Media and images

  • Meaningful images have alt; decorative images use alt="".
  • Video has captions; audio has transcripts.

Manual test script

  1. Unplug the mouse; complete the main flow with keyboard only.
  2. Run a screen reader (VoiceOver / NVDA / TalkBack) over the main flow.
  3. Zoom to 200%; set the viewport to 320 px.
  4. Turn on reduced motion; reload.
  5. Run an automated checker (axe, Lighthouse) and fix everything it finds; it catches ~30–40% of issues.

Customize for your project

Target level ({{WCAG_LEVEL}}, default AA), supported screen readers, and the automated checker wired into CI.

audit trail

source
original
author
trueorfalse.dev
license
MIT
imported
2026-11-13
verified
2026-11-13
changes
Written new for the catalog.
privacy scan
pass
scripts
none
in the zip
1 file

works with

Claude, Codex, ChatGPT

pairs with

  • skilltrueorfalse

    ui-hig

    Checks a screen against platform guidelines and the Laws of UX and names the specific rule each problem breaks.

    • a new screen or flow being designed
    • small or crowded tap targets
    • too many choices on one screen
    Claude · Codex · ChatGPT
  • skilltrueorfalse

    design-system

    Gives implementers a working checklist so every screen uses primitives and tokens instead of one-off styles.

    • raw hex colours, px spacing or font sizes in a component
    • a new UI library or icon set being added
    • a component duplicated across two screens
    Claude · Codex · ChatGPT
  • skilltrueorfalse

    motion

    Sets the rules for presets, wrappers, reduced motion and performance so animation is consistent and 60 fps.

    • library animation calls scattered through pages
    • animating width, height, top, left or box-shadow
    • no prefers-reduced-motion handling
    Claude · Codex · ChatGPT
  • agenttrueorfalse

    ui-review

    Reviews only the changed lines of a UI diff and reports blocking vs. should-fix findings with quoted code and fixes.

    • a diff under pages, components or theme
    • hex colours, px values or font sizes added in a change
    • a new data surface without loading/empty/error states
    Claude · Codex · ChatGPT