frontend-a11y
Skill3 starsChanged 9 days agoMITView on GitHub
Use when judging accessibility on a RENDERED surface — screenshots or a live page, in light, dark, forced-colors and reduced-motion, at real zoom — as the a11y lens of a design review. Owns what only the render shows: contrast measured on the composited pixel rather than the token, focus rings that survive forced-colors and are not covered by sticky chrome (SC 2.4.11), hit areas measured as laid out including the 2.5.8 spacing exception, meaning carried by colour / gradient / shadow, and motion that actually plays. Thresholds are NOT restated here — contrast belongs to apca-contrast and wcag-contrast, target size to component-sizing-principles. Cite when a review calls contrast "low" with no measured pair, checks light mode only, reports an AAA criterion as an AA failure, or infers accessibility from source alone.
11 other projects use a version of this.
Adopted by
Most recently taken up by
- renepf/claude-skillstheir own version, first seen Oct 25, 2026
- ankitluthra/frontend-quality-graphtheir own version, first seen Oct 20, 2026
- davidanthonyn/claude-skillstheir own version, first seen Oct 20, 2026
- Ronnasayd/aipptheir own version, first seen Oct 20, 2026
- gongyijie85/dsh-ecctheir own version, first seen Oct 13, 2026
- NISTALTALSON/essential-claude-skillstheir own version, first seen Oct 11, 2026
Other versions11 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 11
- mikemai2awesome/agent-skills★ 14same name
- pekral/cursor-rules★ 10same name
- gongyijie85/dsh-ecc★ 8same name
- bestdeejay-design/agent-skills★ 6same name
- NISTALTALSON/essential-claude-skills★ 1same name
- Ronnasayd/aipp★ 1same name
- SamuelNDCE/claude-super-skill-library★ 1same name
- ankitluthra/frontend-quality-graph★ 0same name
- davidanthonyn/claude-skills★ 0same name
- renepf/claude-skills★ 0same name
1 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository66 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- clud-bug-collaborationSkill
- critical-issues-onlySkill
- evidence-based-reviewSkill
- respect-existing-conventionsSkill
- skill-frontmatter-qualitySkill
- apca-contrastSkill
- api-contract-enforcementSkill
- brand-voice-reviewSkill
- chroma-harmonizationSkill
- clud-bug-collaborationSkill
- component-sizing-principlesSkill
- component-sizingSkill
- composing-a-screenSkill
- consuming-a-design-systemSkill
- conventions-templateSkill
- critical-issues-onlySkill
- curating-a-skill-catalogSkill
- designing-a-design-systemSkill
- designing-elite-uiSkill
- design-system-consistencySkill
- design-token-namingSkill
- dtcg-formatSkill
- empirical-design-principlesSkill
- evidence-based-reviewSkill
- finding-a-catalog-skillSkill
- guarding-a-regressionSkill
- ios-safari-surfacesSkill
- line-height-gridSkill
- logmindSkill
- motion-continuitySkill
- oklch-color-spaceSkill
- orchestrating-agent-delegationSkill
- orchestrating-a-multi-agent-runSkill
- orchestrating-elite-agent-qaSkill
- palette-relationshipsSkill
- pii-and-complianceSkill
- proving-an-absenceSkill
- respect-existing-conventionsSkill
- retiring-a-superseded-decisionSkill
- reviewing-design-workSkill
- semver-design-tokensSkill
- session-heartbeatSkill
- skillforgeSkill
- skill-frontmatter-qualitySkill
- spacing-systemSkill
- technical-writingSkill
- test-disciplineSkill
- thrill-designSkill
- token-frugal-toolingSkill
- token-naming-conventionsSkill
- type-scaleSkill
- udts-component-sizing-laddersSkill
- udts-dtcg-extensionsSkill
- udts-linter-rulesSkill
- udts-naming-conventionSkill
- udts-reviewSkill
- udts-semver-defaultsSkill
- udts-spacing-defaultsSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 2 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 11 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 115
Every finding names element + mode + measured value + the SC with its level, or the skill owning it.
- Very specific: line 120
No AAA criterion (2.4.13, 2.3.3) is reported as an AA failure, and focus was exercised by tabbing rather than inferred from a …
- Distinctive: line 122
Every mode in the table is reported as checked or as not captured, including a clean pass, which must name the modes checked or it is not …
“Common” is measured: kept by at least 6 in 10 of the 11 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Frontend accessibility
The a11y lens on the rendered surface. The code lens already read the source, so a finding here should be one a source read could not produce — naming the element, the mode, the measured value, the fix.
Measure the composited pixel, not the token. Opacity, overlays, backdrop-filter, a
photo behind text and antialiasing on thin weights all change the pair the eye receives,
so a token that passes in the palette can fail where it landed. House convention, and the
commonest false pass here.
When to use
- Judging a screenshot set or live page for accessibility inside a design review.
- A visual surface changed and renders exist in more than one mode.
- Auditing a shipped surface for failures that appear only once composited.
When NOT to use
- No render. Labels, input types, tab order and
aria-*read off the diff belong to web-interface-guidelines-review. - Setting a threshold. apca-contrast and wcag-contrast own contrast; component-sizing-principles owns the height ladder. Cite them, never re-derive them — this lens measures what the render gives the pointer.
- Non-visual diffs — routing, state wiring, backend. Nothing renders; stay silent.
What only the render shows
- Composited contrast. Report the sampled pair and value, then cite the owner: apca-contrast for Lc targets and the primary-model policy, wcag-contrast for the 2.2 thresholds and the points-not-pixels rule. Obey the system's declared primary model and name it; absent one, the pairing fails if either model fails.
- Focus rings, in place. Source shows a ring exists; only the render shows it
survives — clipped by an ancestor
overflow: hidden, drowned against the actual adjacent surface, or gone in forced-colors. SC 2.4.11 Focus Not Obscured (Minimum), AA in 2.2 is separate: sticky chrome hiding the focused control entirely fails even with a perfect ring, so capture the row scrolling under it. Partial occlusion is 2.4.12, AAA. Ring contrast is SC 1.4.11; SC 2.4.13 Focus Appearance is AAA — an enhancement, never an AA failure. Tooltips and hover cards have their own rule: hoverable, dismissible without moving the pointer, persistent (SC 1.4.13, AA). - Hit area, as laid out. SC 2.5.8, AA — 24 by 24 CSS px, exceptions: Inline — a target inline in text, or sized by non-target line-height — never flag an inline link; Spacing — a 24 px circle on each undersized target must miss another target, not its circle, and another undersized target's circle, so a 20 px button 1 px from a 40 px one fails; also Equivalent, User Agent Control, Essential. Icon toolbars fail on spacing more than size; measure the gap. Touch surfaces have a higher platform floor; read that platform's HIG. The ladder behind the height is component-sizing-principles.
- Meaning that can vanish. SC 1.4.1 Use of Color, A — status as red/green with no icon, text or shape; and on a render, meaning carried by a gradient or a shadow, which forced-colors removes outright.
- Names, as exposed. A control that renders as a bare glyph must still expose a
name, so read the accessibility tree rather than
aria-*in the source —aria-labelon a role-less element is never exposed (SC 4.1.2, A), and visual structure the markup does not carry is SC 1.3.1, A.
The modes you must actually look at
A mode not captured is not checked — name the ones you saw.
| Mode | What fails first |
| Light and dark, both primary | Borders, disabled text, shadow-drawn separators |
forced-colors: active | box-shadow and text-shadow compute to none, background-image to none without a url() — anything drawn as a shadow or gradient is gone. System colours come from native semantics, not ARIA roles |
prefers-contrast: more | Deliberately subtle borders; placeholder text already near the floor |
prefers-reduced-motion | CSS transitions usually honour it; JS/WAAPI animation, autoplaying video and carousels usually do not |
| Reflow — SC 1.4.10, AA | 320 CSS px wide (≈ 400% zoom at 1280), no two-dimensional scrolling; 256 CSS px tall when scrolling horizontally |
| Text spacing — SC 1.4.12, AA | No loss of content at line-height 1.5×, paragraph 2×, letter-spacing 0.12em, word-spacing 0.16em: fixed-height buttons, single-line chips |
Motion has two obligations: auto-starting motion over five seconds must be pausable
(SC 2.2.2, A); disabling interaction-triggered motion is SC 2.3.3, AAA.
prefers-reduced-motion is the mechanism, not the criterion; reduced-path rules: motion-continuity.
Silent failures
- A
box-shadowfocus ring. Passes source review and both theme screenshots, gone in forced-colors. Fix:outline+outline-offset(only its colour is forced), or a@media (forced-colors: active)rule. - Reduced motion honoured in CSS only. The
@mediablock exists, the JS animation ignores it, and static screenshots never show it. Check the JS/WAAPI path,<video autoplay>, library defaults. - A clean automated run read as a pass. A checker reports what it can compute — not a ring lost under sticky chrome, meaning in a gradient, or text over a photo.
Verification
- Every finding names element + mode + measured value + the SC with its level, or the skill owning it. No bare "low contrast".
- Contrast findings cite apca-contrast / wcag-contrast, name the system's primary model, and quote a value sampled from the composited render rather than read off a token.
- No AAA criterion (2.4.13, 2.3.3) is reported as an AA failure, and focus was exercised
by tabbing rather than inferred from a
:focus-visiblerule. - Every mode in the table is reported as checked or as not captured, including a clean pass, which must name the modes checked or it is not evidence.
Cross-references
- REQUIRED BACKGROUND: apca-contrast — Lc targets and which model is primary; wcag-contrast — the 2.2 thresholds and the points-not-pixels rule. This lens measures; they own the numbers.
- Target size: component-sizing-principles and spacing-system. Code side: web-interface-guidelines-review — a finding makeable from the diff alone is theirs.
- Siblings: design-system-consistency (off-system, not inaccessible) · visual-polish (passes but reads dull) · designing-elite-ui (the bar). reviewing-design-work orders all four, and orchestrating-elite-agent-qa drives the browser pass producing these renders.
Sources
- WCAG 2.2 — every SC above carries its published level (2.5.8, 2.4.11). 2.4.13 and 2.4.12 are AAA there, not AA.
- CSS Color Adjust 1 is normative for
the forced-colors
box-shadow/text-shadow/background-imagebehaviour; MDN supports the native-semantics point above. Media Queries 5 defines the preference queries. - House convention, not a standard: the composited-pixel and per-mode rules above.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

