一键导入
audit-motion
Check new CSS / JSX for animation that runs by default — the project default is `motion: reduced` and any motion must gate on prefers-reduced-motion.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Check new CSS / JSX for animation that runs by default — the project default is `motion: reduced` and any motion must gate on prefers-reduced-motion.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Motor-aware pacing — decomposes a goal, shows each estimate padded by the profile buffer, names why.
Motor-aware pacing — decomposes a goal, shows each estimate padded by the profile buffer, names why.
Morning brief — what changed overnight, what matters today, one next-action per project.
Transcript → four-section brief (my asks, others' asks, decisions, ambiguous items with verbatim quotes). Records decisions into the cognitive graph.
/resume command — reconstruct yesterday's mental state from the cognitive graph, without inventing facts.
Reformats responses to Answer-First when sessions run long; surfaces the user's own prior intent if past their break threshold. Also activates on design-critique contexts (Figma reviews, comp reviews, prototype walk-throughs, spec reviews) so the verdict lands before the reasoning.
| name | audit-motion |
| description | Check new CSS / JSX for animation that runs by default — the project default is `motion: reduced` and any motion must gate on prefers-reduced-motion. |
Pre-flight check for any UI change that adds animation. The profile
default per ADR 0004 is motion: reduced — i.e. no animation runs
unless the user has explicitly opted in. The prefers-reduced-motion
CSS media query is the floor; the profile preference is the ceiling.
Authoritative references:
docs/decisions/0004-profile-schema-design.md — "no
animation by default" is one of the lived-experience-led defaults.packages/core/schemas/profile.schema.json
(preferences.motion: reduced | system | full)..css, .scss, .tsx, or .jsx
in packages/extension-browser/ or any docs site source.git diff origin/main...HEAD --name-only and filters to
.css, .scss, .tsx, .jsx, .ts, .js under
packages/extension-browser/, docs/, and any other site source.transition: / transition- (Tailwind)animation: / animation- (Tailwind)@keyframesframer-motion importsgsap / ScrollTrigger importsanimate() / <motion. JSX usage@media (prefers-reduced-motion: no-preference) block (CSS)
or the component reads useReducedMotion() / the profile's
preferences.motion before triggering motion (JSX).There is no scripted runner yet. Suggested invocation:
git diff origin/main...HEAD --name-only \
| grep -E '\.(css|scss|tsx|jsx|ts|js)$' \
| xargs -I{} grep -nHE \
'transition[:-]|animation[:-]|@keyframes|framer-motion|from .gsap|<motion\.|animate\(' \
{}
Then for each hit, confirm guard:
@media (prefers-reduced-motion: no-preference) { ... }useReducedMotion() or the profile preference.card {
/* Static styles always run */
opacity: 1;
}
@media (prefers-reduced-motion: no-preference) {
.card {
transition: opacity var(--duration-normal) var(--ease-out-expo);
}
}
const reduced = useReducedMotion();
// ...
<div style={{ transition: reduced ? "none" : "opacity 300ms" }}>
Or, when honouring the profile preference (skill-side):
const { motion } = useProfilePreferences();
if (motion === "reduced") return <Static />;
return <Animated />;
packages/extension-browser/src/popup/Welcome.tsx:42: <motion.div> — no useReducedMotion / profile guard
packages/extension-browser/src/styles/card.css:18: transition: opacity 200ms — no prefers-reduced-motion media query
Exit non-zero on any unguarded hit.
transition outside CSS context.@neurodock/skill-sdk / neurodock-skill).When flagging an unguarded animation, name the user impact in one line: "this animates on first load for every ND user with the default profile." Do not lecture about vestibular sensitivity; the contributor either already knows or will look it up.