Atelier perf a11y
Atelier suite — the performance & accessibility gate. The cross-cutting quality bar every Atelier build passes before it ships: animate only compositor-safe properties, hit Core Web Vitals (LCP ≤2.5s, CLS ≤0.1, INP ≤200ms), respect prefers-reduced-motion, meet WCAG 2.2 AA (contrast, focus, keyboard, target size, semantics, screen readers), give canvas/WebGL accessible fallbacks, and run the anti-slop "AI Tells" design-integrity check. Use whenever finishing or reviewing a frontend, optimizing performance / Core Web Vitals / Lighthouse, fixing jank or layout shift, doing an accessibility/a11y audit, handling reduced motion, running a pre-ship check, or checking whether a build reads as AI-generated/templated. This is the canonical home for the perf/a11y rules the other Atelier skills reference. Part of the Atelier suite.From its SKILL.md
npx -y skills add luminary19/atelier --skill atelier-perf-a11yAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
9.1 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it
Atelier — Performance & Accessibility Gate
The line between an amateur "beautiful" build and a professional one. A beautiful site is not done until it passes these gates. This skill is both a reviewer (run it over finished work) and the reference the rest of the suite points to for its perf/a11y rules — when those skills say "respect reduced motion" or "animate only transform/opacity," the full how lives here.
Project memory: if
ATELIER.mdexists, read its accessibility commitments + register first (set up via/atelier init— theatelierrouter).Applies to everything from
atelier-motion,atelier-scroll,atelier-webgl,atelier-dataviz,atelier-components, andatelier-copy— and runs just after the production-resilience passatelier-harden(overflow, i18n, error/edge states), which this gate then verifies. Deep reference:references/fundamentals-deepdive.md(§13, §16). Numbers below are current (mid-2026).
How to use this skill
Two modes:
- As you build — the other skills cite the relevant rule; pull the matching detail from the references here (don't re-derive it).
- Before you ship — work The quality ladder (below): the two self-checklists (perf+a11y, then
anti-slop), and for substantial builds escalate to the adversarial
atelier-review. Fix every miss.
Performance (the mental model)
Browser pipeline: Style → Layout → Paint → Composite. The property you animate decides how far back
the browser rewinds each frame — this one fact governs animation perf. Full detail in
references/performance.md:
- Animate only
transformandopacity(composite-only, GPU, off main thread). Animatingwidth/height/top/left/marginforces Layout every frame;box-shadow/backgroundforces Paint. - No layout thrashing — batch DOM reads before writes; rAF-throttle scroll/resize/mousemove + use
{ passive: true }. will-changesparingly — only on frequently-animated elements; layers cost GPU memory.- Prefer CSS/WAAPI/Motion animation (off main thread) over JS rAF tweening of layout props.
- Loading: lazy-load below-fold (never the LCP image — eager +
fetchpriority="high"); code-split + tree-shake; AVIF/WebP +srcset+ dimensions; fonts preload + subset +font-display: optional;content-visibility: autofor heavy offscreen sections; CDN/Brotli; honorprefers-reduced-data; SRI + CSP on third-party scripts.
Core Web Vitals (p75 field — the targets)
- LCP ≤ 2.5s — render time of the largest in-viewport element. Preload/eager it; fast TTFB; no render-blocking CSS/JS.
- CLS ≤ 0.1 — unexpected layout shift. Set image/video dimensions or
aspect-ratio; reserve ad/embed space;font-display: optional; animate only transform/opacity. - INP ≤ 200ms — interaction latency (replaced FID; most-failed). Break long tasks >50ms
(
scheduler.yield()— Chrome + Firefox 142, not Safari → keep thesetTimeoutfallback); yield after the visible update; avoid thrashing; shrink the DOM. Heavy continuous JS animation directly inflates INP — move it to the compositor or gate it. (LCP + INP both Baseline / all browsers Dec 2025.) Measure with CrUX/RUM (field) for decisions; Lighthouse/PSI (lab) for debugging.
Accessibility (WCAG 2.2 AA)
Full detail in references/accessibility.md. The essentials:
prefers-reduced-motion— default-safe: ship static, add motion inside@media (prefers-reduced- motion: no-preference); in JS branch onmatchMedia(...)/useReducedMotion(). Reduce, don't blanket-nuke — keep opacity fades, remove large movement/parallax/scroll-jack/spin. Provide non-motion signifiers.- Other OS prefs —
prefers-reduced-transparency(glass → solid fills, the real glassmorphism fix);prefers-contrast: more(thicken borders, drop low-contrast greys);forced-colors: active(Windows HCM, ~93% reach — usesystem-color, keep focusoutline, don't drop meaningful icons). Honoring the OS is a premium signal. - Semantic HTML first — native
<button>/<a href>/<nav>/<dialog>over ARIA (first rule of ARIA: don't use it if HTML does the job). Landmarks, logical heading order (oneh1), accessible names on every interactive element. - Focus & keyboard — never bare
outline: none; use:focus-visiblewith a thick high-contrast ring; logical tab order; modals trap focus +Esc+ restore (prefer native<dialog>+showModal(), addclosedby="any"for light-dismiss; no-JS overlays via the Popover API + Invoker Commands; hand-rolled focus-trap +inertrecipe inreferences/accessibility.md); skip link. - WCAG 2.2 new — target size ≥ 24×24px; focus not obscured by sticky UI; dragging has a single- pointer alternative; auth allows paste/password managers.
- Resize / reflow & i18n — content reflows at 320px / 400% zoom with no 2-D scroll (1.4.10), survives
text-spacing overrides (1.4.12), and mirrors for RTL via logical properties. Details in
references/accessibility.md. - Color — text ≥ 4.5:1, large/UI/icons/focus ≥ 3:1; never color alone. (Design with APCA, certify with 2.x — APCA isn't a conformance standard yet.)
- Screen readers — correct
alt(alt=""decorative);aria-live/role=status|alertfor async updates; canvas/WebGL is invisible to AT → provide a DOM/table/text alternative (charts → the data-table fallback inatelier-dataviz). - Motion a11y — auto-motion >5s needs pause/stop/hide; never flash >3×/sec.
The quality ladder
Four layers, escalating rigor — same rubrics throughout (nothing is duplicate work, just re-checked
with more independence). Production resilience (overflow, i18n, error/edge states) is hardened before
this gate by atelier-harden.
- deterministic detector —
scripts/detect.py(seereferences/detector.md). A fast, regex-tier pre-pass that mechanizes the source-detectable tells + numeric thresholds (a11y / layout / drift / cliché). Fix every BLOCK; weigh WARN/SUGGEST against the Direction Doc (a committed concept device is not a tell). It can't see rendered geometry or real contrast — it's the cheap first net, not a replacement for the checks below. Every build (seconds). - perf-a11y self-checklist —
references/preflight-checklist.md. Core Web Vitals + WCAG 2.2 AA. Every build. - anti-slop self-checklist —
references/anti-slop-preflight.md. The "AI Tells" pass on the rendered output (eyebrow overuse, split-header, duplicate-CTA, div-faked screenshots, marquee/zigzag repetition, fake-precise numbers, copy audit, accent/theme locks). Every build. (The plan-stage version of the same Tells — checked against the Direction Doc, not the build — lives inatelier-direction/references/anti-slop.md. Same Tells, different artifact; the overlap is intentional — catch one that slipped from plan to pixels.) atelier-review— adversarial. Independent reviewers per dimension + refutation of each finding + live in-browser verification, then fixes. Substantial / redesign / award builds. Uses ordinary subagents (no ultracode/Workflow needed).
Layers 0–2 are you checking your own work; layer 3 is independent reviewers trying to break it.
How to test (all layers): keyboard only; a screen reader; DevTools (Rendering → emulate reduced motion; Performance/Lighthouse); an automated scan (axe); field data (CrUX/RUM) to confirm the perf numbers at p75.
Operating principles
- It's not done until it passes. Beauty that janks or excludes users is unfinished work, not a trade-off.
transform/opacityonly is the single highest-leverage perf rule.- Reduce motion, don't remove meaning — keep the information, drop the movement.
- Semantic HTML + visible focus + real contrast cover most of accessibility before ARIA ever enters.
- Canvas/WebGL always needs a DOM alternative — it's opaque to assistive tech.
What ships with it: 8 files
185.8 KB alongside SKILL.md, 2 of them executable
references/
- accessibility.md8.5 KB
- anti-slop-preflight.md8.5 KB
- detector.md5.2 KB
- fundamentals-deepdive.md135.5 KB
- performance.md5.7 KB
- preflight-checklist.md4.8 KB
scripts/
- detect_hook.pyruns3.0 KB
- detect.pyruns14.6 KB