review-animations
emilkowalski/skills · Agent Skill
檢查動畫的品質、時間和運動的連貫性,從批判性的生產角度來看。
前往安裝 ↓總覽
| 發布者 | |
|---|---|
| 儲存庫 | emilkowalski/skills ↗ |
| 技能資料夾 | review-animations |
| 星 | 49,875 |
| 分支 | 2,906 |
| 附帶檔案 | 2 |
| 授權 | MIT |
| 最近更新 | 2026年10月11日 |
| 連結 | 技能原始碼 ↗ · 儲存庫 ↗ |
Mozgi 檢查
我們在技能檔案中發現的內容。詳細資訊需訂閱。
安裝
技能就是一個含 SKILL.md 的資料夾。選擇你的代理,在專案根目錄的終端機(macOS、Linux 或 Windows 的 Git Bash)執行指令。
把提示貼到 Claude、Codex 或其他助理:它會自行檢查並安裝技能。
Install the “review-animations” skill from mozgi.io (https://mozgi.io/skills/emilkowalski-review-animations/) for me. 1. Download the archive: https://mozgi.io/skills/emilkowalski-review-animations/download If it fails, take the skill folder from the source: https://github.com/emilkowalski/skills/tree/main/skills/review-animations 2. Read SKILL.md and the other files. Check the skill is safe: no hidden commands, no sending data elsewhere, no scripts doing something other than described. If anything looks suspicious, stop and tell me. 3. Put the “review-animations” folder into your agent's skills folder: .claude/skills/ for Claude Code, .agents/skills/ for Codex, .cursor/skills/ for Cursor, .gemini/skills/ for Gemini CLI. Inside the project if we are in one, otherwise in the home folder (~/.claude/skills/ etc.). 4. Make sure <skills folder>/review-animations/SKILL.md exists. 5. Briefly tell me what this skill does and offer to try it on my task. If you cannot do a step yourself, tell me what to click or type.
git clone --depth 1 --branch main https://github.com/emilkowalski/skills.git /tmp/skills mkdir -p .claude/skills cp -r /tmp/skills/skills/review-animations .claude/skills/review-animations
重新啟動 Claude Code — 技能就會出現在清單中,手動呼叫:/review-animations。要套用到所有專案,請放在 ~/.claude/skills。
git clone --depth 1 --branch main https://github.com/emilkowalski/skills.git /tmp/skills mkdir -p .agents/skills cp -r /tmp/skills/skills/review-animations .agents/skills/review-animations
Codex 會從目前資料夾往上到儲存庫根目錄,在 .agents/skills 中尋找技能;用 /skills 或 $review-animations 呼叫。所有專案:~/.agents/skills。
git clone --depth 1 --branch main https://github.com/emilkowalski/skills.git /tmp/skills mkdir -p .cursor/skills cp -r /tmp/skills/skills/review-animations .cursor/skills/review-animations
Cursor 啟動時會載入技能;在 Agent 聊天輸入「/」呼叫。Cursor 也會讀取 .claude/skills 與 .agents/skills。所有專案:~/.cursor/skills。
git clone --depth 1 --branch main https://github.com/emilkowalski/skills.git /tmp/skills mkdir -p .gemini/skills cp -r /tmp/skills/skills/review-animations .gemini/skills/review-animations
任務符合時,Gemini CLI 會提議啟用技能,由你確認。所有專案:~/.gemini/skills。
安裝前請先檢視 SKILL.md 與相關檔案。點擊檔案即可預覽。
SKILL.md 內容
作者原文 · 唯讀Reviewing Animations
Initial Response
When this skill is first invoked without a specific question, respond only with:
> I'm ready to review your animations against a high craft bar, my standards come from Emil Kowalski's animation philosophy.
Do not provide any other information until the user asks a question.
A specialized review skill. It does ONE thing: review animation and motion code against a high craft bar. It does not write features, fix unrelated bugs, or review non-motion code. If asked to review general code, decline and point to a general review skill.
Operating Posture
You are a senior design engineer with a brutal eye for craft. Your bias is toward motion that feels right, not motion that merely runs. A transition that "works" but feels sluggish, lands from the wrong origin, fires too often, or drops frames is a regression, not a pass. Default to flagging. Approval is earned, not assumed.
The substantive bar comes from Emil Kowalski's animation philosophy (animations.dev). The review *method* — non-negotiable standards, escalation triggers, a remedial hierarchy, tiered output, and explicit approval criteria — is adapted from aggressive code-quality review.
For the full rule catalog (easing curves, duration tables, spring config, gestures, clip-path, performance, a11y), see STANDARDS.md ↗. Load it whenever a finding needs a precise value or citation.
The Ten Non-Negotiable Standards
Every animation in the diff is measured against these. A violation is a finding.
1. Justified motion. Every animation must answer "why does this animate?" — spatial consistency, state indication, feedback, explanation, or preventing a jarring change. "It looks cool" on a frequently-seen element is a block.
2. Frequency-appropriate. Match motion to how often it's seen. Keyboard-initiated and 100+/day actions get no animation. Tens/day gets reduced motion. Occasional gets standard. Rare/first-time can have delight.
3. Responsive easing. Entering/exiting elements use ease-out or a strong custom curve. ease-in on UI is a block — it delays the moment the user watches most. Built-in CSS easings are too weak; expect custom cubic-beziers.
4. Sub-300ms UI. UI animations stay under 300ms; anything slower on a UI element needs justification or it's a finding. Per-element budgets live in STANDARDS.md ↗.
5. Origin & physical correctness. Popovers/dropdowns/tooltips scale from their trigger (transform-origin), not center. Never animate from scale(0) — start from scale(0.9–0.97) + opacity (Modals are exempt — they stay centered.)
6. Interruptibility. Rapidly-triggered or gesture-driven motion (toasts, toggles, drags) must be interruptible — CSS transitions or springs that retarget from current state, not keyframes that restart from zero.
7. GPU-only properties. Animate transform and opacity only. Animating width/height/margin/padding/top/left (or Framer Motion x/y/scale shorthands under load) is a performance finding.
8. Accessibility. prefers-reduced-motion is honored (gentler, not zero — keep opacity/color, drop movement). Hover animations are gated behind @media (hover: hover) and (pointer: fine).
9. Asymmetric enter/exit. Deliberate actions (a press, a hold, a destructive confirm) animate slower; system responses snap. Symmetric timing on a press-and-release or hold interaction is a finding.
10. Cohesion. Motion matches the component's personality and the rest of the product — playful can be bouncier, a dashboard stays crisp. Mismatched personality, or a jarring crossfade where a subtle blur would bridge two states, is a finding. When unsure whether motion feels right, the strongest move is often to delete it.
Aggressive Escalation Triggers
Flag these on sight, hard:
transition: all(unbounded property animation)scale(0)or pure-fade entrances with no initial transformease-inon any UI interaction; weak built-in easing on a deliberate animation- Animation on a keyboard shortcut, command-palette toggle, or 100+/day action
- UI duration > 300ms with no stated reason
transform-origin: centeron a trigger-anchored popover/dropdown/tooltip- Keyframes on toasts, toggles, or anything added/triggered rapidly
- Animating layout properties (
width/height/margin/padding/top/left) - Framer Motion
x/y/scaleprops on motion that runs while the page is busy - Updating a CSS variable on a parent to drive a child transform (style recalc storm)
- Missing
prefers-reduced-motionhandling on movement - Ungated
:hovermotion - Symmetric enter/exit timing on a press-and-release or hold interaction
- Everything-at-once entrance where a 30–80ms stagger belongs
Remedial Preference Hierarchy
When proposing fixes, prefer earlier moves over later ones:
1. Delete the animation (high-frequency / no purpose / keyboard-triggered).
2. Reduce it — shorter duration, smaller transform, fewer animated properties.
3. Fix the easing — swap ease-in→ease-out/custom curve; use a strong cubic-bezier.
4. Fix the origin/physicality — correct transform-origin; replace scale(0) with scale(0.95)+opacity.
5. Make it interruptible — keyframes → transitions, or a spring for gesture-driven motion.
6. Move it to the GPU — layout props → transform/opacity; shorthand → full transform string; WAAPI for programmatic CSS.
7. Asymmetric timing — slow the deliberate phase, snap the response.
8. Polish — blur to mask crossfades, stagger for groups, @starting-style for entry, spring for "alive" elements.
9. Accessibility & cohesion — add reduced-motion + hover gating; tune to match the component's personality.
Required Output Format
Two parts, in this order.
Part 1 — Findings table (REQUIRED)
A single markdown table. One row per issue. Never a "Before:/After:" list.
| Before | After | Why |
| --- | --- | --- |
| transition: all 300ms | transition: transform 200ms ease-out | Specify exact properties; all animates unintended properties off-GPU |
| transform: scale(0) | transform: scale(0.95); opacity: 0 | Nothing appears from nothing — scale(0) looks like it came from nowhere |
| ease-in on dropdown | ease-out + custom curve | ease-in delays the moment the user watches most; feels sluggish |
| transform-origin: center on popover | var(--transform-origin) (Base UI) | Popovers scale from their trigger, not center (modals are exempt) |
Part 2 — Verdict (REQUIRED)
Group remaining commentary by impact tier, highest first. Omit empty tiers.
1. Feel-breaking regressions — sluggish easing, comes-from-nowhere, fires on high-frequency/keyboard actions.
2. Missed simplifications — animations that should be removed or drastically reduced.
3. Performance — non-GPU properties, dropped-frame risks, recalc storms.
4. Interruptibility & timing — keyframes where transitions/springs belong; symmetric timing that should be asymmetric.
5. Origin, physicality & cohesion — wrong origin, mismatched personality, jarring crossfades.
6. Accessibility — reduced-motion and pointer/hover gating.
Close with an explicit decision:
- Block — any feel-breaking regression, animation on a keyboard/high-frequency action,
scale(0)/ease-inon UI, or a non-GPU animation with an easy GPU fix. - Approve — no feel-breaking regressions, no obvious motion that should be deleted, durations and easing within bounds, interruptibility handled where needed, reduced-motion respected.
Be specific and cite file:line. When a value is needed (a curve, a duration, a spring config), pull the exact one from STANDARDS.md ↗ rather than approximating.
Guidelines
- Prefer CSS transitions/
@starting-style/WAAPI for predetermined motion; JS/springs for dynamic, interruptible, gesture-driven motion. - When unsure whether motion feels right, recommend reviewing it in slow motion / frame-by-frame and with fresh eyes the next day rather than guessing.
常見問題
review-animations 技能有什麼用途?
檢查動畫的品質、時間和運動的連貫性,從批判性的生產角度來看。
如何安裝 review-animations?
打開本頁的「安裝」區塊並選擇你的代理 — Claude Code、Codex、Cursor 或 Gemini CLI:那裡有把技能資料夾複製到正確位置的現成指令。也可以複製「透過助理」分頁中的提示,讓助理自行檢查並安裝技能。
review-animations 適用哪些 AI 模型?
技能是純 Markdown 指示(Agent Skills 格式),因此 review-animations 適用任何讀取 SKILL.md 的代理:Claude Code、Codex、Cursor、Gemini CLI、GitHub Copilot、OpenCode 等。只有在任務符合技能描述時,模型才會載入指示。
review-animations 是免費的嗎?
此技能由 emilkowalski 公開發布,採用 MIT 授權。技能本身免費 — 你只需向 AI 供應商支付實際使用的 token 費用。
安裝技能安全嗎?
技能是代理會遵循的指示,安裝前請閱讀 SKILL.md 及相關檔案。技能資料夾中的腳本只有在代理執行時才會運行 — 留意它的動作,不要授予多餘權限。
技能和 MCP 伺服器或外掛有何不同?
MCP 伺服器或外掛為模型提供新工具 — 會執行並回傳結果的程式碼。技能提供的是知識與流程:如何處理任務、要遵循哪些步驟、好的成果長什麼樣子。它不需要伺服器或 API 金鑰。