본문으로 건너뛰기
cccskills
무료GitHub에 공개

accessibility-auditor

Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(5)

  • SKILL.md10.8 KB
  • data/aria-patterns.csv5.3 KB
  • data/manifest.json1.1 KB
  • evals/evals.json1.1 KB
  • evals/triggers.json3.6 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

accessibility-auditor

Audit a UI surface against WCAG 2.2 AA, keyboard-only operation, and screen-reader semantics. Output is a verdict with cited failures, not a vibes check. Pair with tailwind-engineer for token-level contrast fixes and ui-component-architect for structural fixes (landmarks, heading order).

When to use

  • A new screen, component, or form lands and a11y has not been reviewed yet.
  • A bug report mentions keyboard, screen reader, focus order, contrast, or "user can't reach the X button".
  • A modal, dropdown, popover, tab strip, or tree view is being introduced — these are the highest-yield bug zones.
  • German triggers: "barrierefrei prüfen", "Tastatur-Bedienung", "Screenreader testen".

Do NOT use when:

  • The visual design itself is the question (palette, type scale) — route to fe-design.
  • The diff has no UI surface — accessibility audits without a UI are speculation.
  • A specific component spec is missing entirely — get the component built first via the stack-specific skill, then audit.

Procedure

1. Identify the interaction surfaces

List every interactive element on the screen: links, buttons, inputs, custom widgets (combobox, tab, dialog, tree). Each row gets a verdict in step 5; missing one is a coverage failure.

2. Walk the four checklists

Perceivable — text alternatives for non-text (alt, aria-label), contrast ≥ 4.5:1 for body / 3:1 for large or UI components, no colour-only state ("error in red" must also be iconic or text). Grounded reference for palette + chart verdicts: the adopted corpus's WCAG-adjusted token sets (--domain color), chart a11y grades + colorblind fallbacks (--domain chart), and mobile touch/a11y rules (--domain web, 44pt targets) via design-intelligence — cite the corpus row; the WCAG 2.2 AA method stays this skill's own checklists. Widget-pattern selection (dialog, combobox, tabs, toast, table, form errors, drag-reorder …) grounds in the ARIA-APG corpus: node <skills-root>/corpus-grounding/scripts/ground.mjs search --manifest <skills-root>/accessibility-auditor/data/manifest.json "<component>" → pattern, implementation, WCAG refs, anti-patterns (data/aria-patterns.csv).

Operable — every interactive element reachable by Tab, focus order matches visual order, focus indicator visible (≥ 3:1 against adjacent), Esc closes overlays, no keyboard traps.

Understandable — labels associated (label[for] or wrapping), errors named in text (not just border colour), language attribute on <html>, predictable navigation across pages.

Robust — landmarks present (<header>, <nav>, <main>, <footer>), heading order without skips, ARIA only when no native element exists, custom widgets follow ARIA-APG patterns.

Reduced motion — audit the PRESENTATION, not the presence of the query. A prefers-reduced-motion block is easy to grep and proves nothing: animation: none on a scroll-revealed section leaves the content invisible, and a scrubbed sequence with its motion removed leaves the story untold. So the finding is about what the surface shows instead:

Motion carriesReduced-motion presentationFailure
A reveal (content fades/slides in)The content at its final state, visible from the startopacity: 0 left standing — the content never appears
A scrubbed sequence (scroll drives progress)Each beat at its resting state, reachable by ordinary scrollingMotion disabled and the beats collapse onto each other
A transition between statesAn instant state change, still announcedThe state changes with no perceivable feedback
Decoration (parallax, drift, ambient)Nothing — removal is the correct presentation—

Decoration is the only case where removal is the answer, which is why animation: none reads as correct so often and is wrong so often. Ask per block: if the motion never plays, is the content still there and still understandable? Record the answer, not the query.

WCAG 2.2 additions — the six criteria 2.1 did not have. An AA claim is cumulative: AA conformance means every level-A criterion and every level-AA one, so the two level-A rows below sit inside the claim, not beneath it. Each is audited on its own; a surface that skips one is not AA under 2.2.

SCLevelTestable conditionFailure
2.4.11 Focus Not Obscured (Min.)AATab through every focusable element with sticky headers / footers / cookie bars present — the focused element stays at least partially visible, never fully coveredA sticky bar hides the focused row; the keyboard user cannot see where they are
2.5.7 Dragging MovementsAAEvery drag interaction (reorder, slider, map pan, kanban) has a single-pointer alternative that is not a drag — buttons, a menu, or arrow keysReorder is drag-only, so a user who cannot drag cannot reorder
2.5.8 Target Size (Min.)AAEvery pointer target is ≥ 24×24 CSS px, or carries ≥ 24 px spacing to its neighbours, or is one of the stated exceptions (inline text, user-agent-controlled, essential)16 px icon buttons packed edge-to-edge in a toolbar
3.3.8 Accessible Authentication (Min.)AANo login step requires a cognitive function test (remembering, transcribing, puzzle-solving) without an alternative — a password manager can paste, and paste is not blockedAn OTP field that blocks paste, or "type the 3rd character of your memorable word"
3.2.6 Consistent HelpAWhere a help mechanism (contact link, chat, self-help) repeats across pages, it appears in the same relative order on eachSupport link in the header on one page, buried in the footer on the next
3.3.7 Redundant EntryAInformation already entered in the same process is auto-populated or selectable, unless re-entry is essential (confirming a password is essential)A 4-step checkout asking for the same address twice

Outside an AA claim, and stated here rather than left silent: 2.4.12 Focus Not Obscured (Enhanced) and 2.4.13 Focus Appearance are level AAA. Audit them on request; their absence is not an AA failure.

3. Run the keyboard pass

Tab from page start: every interactive element receives focus, in visual order, with a visible indicator. Shift-Tab reverses cleanly. Enter / Space activate per role. Arrow keys work in composite widgets (tab strip, listbox, menu). Esc dismisses the top-most overlay only.

4. Run the screen-reader pass

Use VoiceOver (macOS), NVDA (Windows), or aria-live log inspection. Each surface announces: role, name, state, value, description (in that order). State changes (loading, expanded, selected, error) announce. Decorative images are silent.

5. Score and report

For each surface from step 1:

SurfaceWCAG SCPass / FailEvidence
Submit button1.4.3Failcontrast 3.1:1, expected 4.5:1
Modal2.1.2FailTab leaves modal — focus trap missing

Verdict at the bottom: AA-pass (zero fails), AA-pass-with-risk (non-blocking gaps + plan), or AA-fail (blocking — fix before ship).

Output format

Scope:        <screen / component / route>
Surfaces:     <count from step 1>
Tools used:   <axe-core | manual | VoiceOver | NVDA — pick at least 2>

Findings:
  1. <SC>  <Pass/Fail>  <Evidence + file:line if known>
  2. ...

Verdict:      <AA-pass | AA-pass-with-risk | AA-fail>
Top 3 fixes:  <ordered by user impact>

Same-ramp contrast + dark-mode self-test (procedures, not a palette)

Two deterministic procedures — they reference the consumer's tokens / an upstream color ramp, they never vendor a hex table:

  • Same-ramp contrast. Text on a colored fill uses a darker stop of the same color family, never plain black/gray dropped on top — same-ramp keeps the contrast on-brand and predictable. Title and subtitle are two different stops of that ramp (hierarchy from the ramp, not from an off-ramp gray).
  • Mandatory dark-mode self-test. Before finalizing, ask: "if the background were near-black, would every text element still meet 4.5:1 (body) / 3:1 (large/UI)?" A ramp that only works on light is a fail. Run the test even when the brief is light-only — dark mode arrives later.

The ramp itself is authoritative in design-tokens (token derivation) and the consumer's tokens (brand-source-of-truth § Iron Law 2) — this procedure sits beside that authority, it does not duplicate the values.

Gotcha

  • aria-label on a <button> overrides its text content for screen readers — only use when the visible text is not descriptive (icon-only buttons).
  • tabindex="-1" removes from tab order and allows programmatic focus; tabindex="0" adds to tab order. tabindex >= 1 is almost always wrong — fix the source order.
  • Native <button> and <a> come with role + keyboard for free; reaching for role="button" on a <div> is a regression.
  • Contrast on disabled state has no WCAG threshold — but if the user cannot tell it is disabled, that is a 1.4.1 failure on state cue.

Do NOT

  • Do NOT declare AA-pass without a keyboard-only pass; an axe-core green is necessary, not sufficient.
  • Do NOT add ARIA "to be safe" — wrong ARIA is worse than no ARIA. Native semantics first.
  • Do NOT silence the audit on "internal-only tool" or "small user base"; legal exposure does not scale with audience size in most jurisdictions.
  • Do NOT close a finding by adjusting the test instead of the UI; the user's experience is the ground truth, not the test report.

Why this skill is rich

WCAG 2.2 AA compliance is non-negotiable detail — each success criterion has a specific testable condition, failure mode, and remediation path. The skill carries the WCAG 2.2 additions with concrete test procedures per criterion (not just "check contrast"), keyboard-navigation patterns (roving tabindex, trap management, escape-key handling), ARIA role/ property/state tables, and screen-reader-specific edge cases per assistive technology. Condensing to "check contrast and add aria-labels" loses the test procedures that turn a vague finding into a reproducible failure with a specific remedy. Accessibility bugs that are described vaguely cannot be verified as fixed.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config122026년 10월 18일 업데이트

Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config122026년 10월 18일 업데이트

Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config122026년 10월 18일 업데이트

Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config122026년 10월 18일 업데이트

Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config122026년 10월 18일 업데이트

Use when editing AGENTS.md (package root) or templates/AGENTS.md (consumer) — enforces Thin-Root contract: hard char ceilings, ≥40% pointer ratio, mandatory emergency-triage block.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

event4u-app/agent-config122026년 10월 18일 업데이트

event4u-app의 스킬 모두 보기

이 스킬의 문제 신고