motion
Skill0 starsChanged 45 days agoMITView on GitHub
Rules for animation, transitions and 3D on the web. Use when asked for animation, motion, a 3D effect, a hero that moves, scroll effects or micro-interactions, or when a page feels static.
38 other projects use a version of this.
Adopted by
Most recently taken up by
- sanmidable/skillstheir own version, first seen Nov 8, 2026
- podo/design-agent-skillstheir own version, first seen Nov 8, 2026
- RuneStone-Tech/optimize-anythingtheir own version, first seen Nov 8, 2026
- lalulali/vespyrtheir own version, first seen Nov 6, 2026
- theexperiencecompany/gaiatheir own version, first seen Nov 3, 2026
- seanx10m/skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use defaults, viewports and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
sanmidableSkilldefaults
Also in 3 projects that use this
sanmidableSkillviewports
Also in 3 projects that use this
miovragSkillkeyboard
Load this skill for every project containing interactive UI elements — buttons, links, modals, dropdowns, sliders, tabs, carousels, or any custom widget. Under no circumstances create an interactive component that cannot be fully operated by keyboard alone. Absolutely always ensure visible focus indicators, logical tab order, and no keyboard traps. Apply these rules to every interactive element without exception.
Also in 3 projects that use this
soilmassSkillcolor
Color animations including hue shifts, saturation changes, brightness transitions, and contrast adjustments. Use when implementing color morphing, theme transitions, mood effects, or attention-grabbing color pulses. Provides tokens for all color property animations.
Also in 4 projects that use this
owshq-mecSkilllayout
Improve layout, spacing, and visual rhythm. Fixes monotonous grids, inconsistent spacing, and weak visual hierarchy. Use when the user mentions layout feeling off, spacing issues, visual hierarchy, crowded UI, alignment problems, or wanting better composition.
Also in 3 projects that use this
GoogleSkillcritique
Expertise in auditing and fixing repository scripts and GitHub Actions workflows to ensure technical robustness and security.
Also in 4 projects that use this
Other versions38 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 38
- theexperiencecompany/gaia★ 325same name
- Mindrally/skills★ 275same name
- raphaelsalaja/skills★ 62same name
- podo/design-agent-skills★ 32same name
- muzimu217/ui-design-agent-kit★ 23same name
- imMamdouhaboammar/linkedin-animated-infographics★ 14same name
- icons8/agent-skills★ 12same name
- lalulali/vespyr★ 11same name
- sukirman1901/frontend-expert★ 9same name
- app-builders-club/design-builder★ 4same name
28 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 repository4 other files it gives its agents.
- awesome-designSkill
- image-to-codeSkill
- tasteSkill
- web-design-guidelinesSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. 0 are common, 14 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 32 edited versions we read keep these.
14
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
Read the motion tokens in the design system variant.
- Distinctive: line 32
Use 3D when depth explains something: layers of a document, the front and back of a card, a stack being dealt.
- Very specific: line 35
Put transform-style: preserve-3d on the element whose children sit at different depths.
- Distinctive: line 40
After it rests, it may breathe: a slow float of a few pixels or a degree or two, with still periods, that stops under reduced motion.
- Distinctive: line 45
Leave a gap. Something resting on a surface sits at least 4px above it in Z.
- Distinctive: line 46
Keep parts on their object.
- Distinctive: line 48
Prefer CSS transforms. Reach for WebGL or a 3D library only when the product is itself three-dimensional.
- Very specific: line 53
Never animate width, height, top, left, margin or box-shadow.
- Very specific: line 54
Never write transition: all.
- Very specific: line 55
Add will-change just before an animation and remove it after.
- Distinctive: line 57
If it drops below 60 frames per second on a mid-range laptop, simplify it.
- Distinctive: line 62
Never change the speed or direction of scrolling.
- Very specific: line 67
Every animation has an answer for prefers-reduced-motion: reduce.
- Distinctive: line 74
Write the reduced-motion rule next to the animation, in the same block.
- Distinctive: line 88
Look for these: something that disappears and comes back, something passing through a surface, a part outside its parent, text or parts …
- Distinctive: line 89
Do the same for the idle loop at its furthest point, and for the pointer tilt at each corner.
- Distinctive: line 92
If you could not do this, say so in the report in plain words: "I did not see this animation in motion." Do not write "passed".
- Distinctive: line 96
Run this on your own output.
- Distinctive: line 101
Do more than two things move at once, outside the signature?
- Very specific: line 112
Add these lines to the report from taste:
“Common” is measured: kept by at least 6 in 10 of the 32 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
Motion
Motion is part of the design, not a coat of paint on top. Apply these rules with the taste skill, not in place of it.
Before you animate
- Say what the motion is for, in one sentence. Good reasons: it shows how the product works, it shows where something came from, it confirms an action, it directs the eye to the one thing that matters. "It looks cool" is not a reason, but "it makes the first five seconds memorable" is, once per page.
- Read the motion tokens in the design system variant. Use the token names for durations and easing.
- Decide the still frame first. The page must look finished with every animation at its end state. Then add the movement.
One signature, many whispers
- A page gets one signature animation. It is the thing someone would describe to a friend. Put it where the product is, usually the hero.
- Everything else is a whisper: 100 to 240ms, small distance, there to confirm or to orient.
- Build the signature from the product. An invoicing tool animates an invoice. A map tool animates a map. Floating abstract blobs, spinning cubes and particle fields belong to no product, so they belong on no page.
Timing
- Whispers:
fast(100ms) for hover and press,base(160ms) for small reveals,slow(240ms) for panels. - Signature: up to 1200ms per beat, and no more than three beats before it rests.
- Things that enter ease out. Things that leave ease in. Things that move between two places ease both ways.
- Stagger a group by 40 to 80ms per item, and cap the total at 400ms. Past that, people wait.
- Nothing blocks input. The person can click, scroll and type while anything is moving.
3D
Use 3D when depth explains something: layers of a document, the front and back of a card, a stack being dealt. Do not use it to tilt a screenshot for no reason.
- Set
perspectiveon the parent, between 800 and 1600px. Lower values distort. - Put
transform-style: preserve-3don the element whose children sit at different depths. - Be bold with the object, careful with the words. Text a person must read (headline, body, buttons) stays flat and never rotates. Text inside a depicted object, such as the lines of an invoice in the hero, is illustration and may sit at any angle.
- Rest in depth. When the signature ends, the object holds a pose that still reads as 3D: 15 to 35 degrees on at least two axes, layers visibly separated, shadows under each. If the rest pose is flat, the 3D exists for two seconds of a two-minute visit.
- Make it big. The signature object fills at least 40% of the hero's width on a desktop screen.
- Ground it. Give the object a surface to sit on or float above: a cast shadow, a floor line, a faint grid. An object with nothing under it has no depth to read.
- After it rests, it may breathe: a slow float of a few pixels or a degree or two, with still periods, that stops under reduced motion.
- Show the readable version too. If the object's contents matter, show them flat and legible elsewhere on the page.
- Give depth with
translateZand with shadow tokens that grow with height. A raised layer with no shadow looks pasted on. - Hide the back of anything that flips:
backface-visibility: hidden. - Overshoot and spring easing go past the end value before settling. Use them on rotation and scale, where that reads as a bounce. Never use them on movement towards a surface, such as a stamp landing on paper: the object passes through the surface and vanishes for a moment. Never use them on opacity. To land something, use
settle. - Leave a gap. Something resting on a surface sits at least 4px above it in Z. Smaller gaps flicker when anything tilts.
- Keep parts on their object. A stamp, label or badge stays inside the edges of the thing it is on, unless hanging off is the point.
- Pointer-driven tilt is capped at 8 degrees, eased, and returns to rest when the pointer leaves. It does nothing on touch screens, so the design cannot depend on it.
- Prefer CSS transforms. Reach for WebGL or a 3D library only when the product is itself three-dimensional.
Performance
- Animate
transformandopacity. Nothing else, unless you have measured it. - Never animate
width,height,top,left,marginorbox-shadow. To animate a shadow, cross-fade a pseudo-element that already has it. - Never write
transition: all. List the properties. - Add
will-changejust before an animation and remove it after. Left on, it costs memory. - Pause anything that is off screen. Use
IntersectionObserveroranimation-play-state. - If it drops below 60 frames per second on a mid-range laptop, simplify it.
Scroll
- Reveal on scroll once. Content that has appeared stays.
- Never change the speed or direction of scrolling. Never pin a section for more than one screen height.
- Content is in the document and visible without JavaScript. Motion is added on top.
Reduced motion
Every animation has an answer for prefers-reduced-motion: reduce.
- The signature shows its end state, or cross-fades to it.
- Whispers become instant.
- Loops stop on a good frame.
- Parallax, tilt and auto-play are off.
Write the reduced-motion rule next to the animation, in the same block. Do not leave it for a clean-up pass.
Loops
- A loop longer than five seconds has a visible pause control.
- A loop rests. Build in a still period at least as long as the movement.
- Nothing flashes more than three times a second.
Watch it before you report
The last frame tells you nothing about the frames before it. Most animation bugs live in the middle. If you cannot watch the page run, freeze it and look:
- For each beat of the signature, freeze the animation at 0, 25, 50, 75 and 100 percent. With CSS animations, set
animation-play-state: pausedand a negativeanimation-delayequal to the moment you want. With script-driven motion, add a way to set the clock. - Take a screenshot at each point and look at every one.
- Look for these: something that disappears and comes back, something passing through a surface, a part outside its parent, text or parts overlapping, a jump between two frames that should be close.
- Do the same for the idle loop at its furthest point, and for the pointer tilt at each corner.
- Fix what you find and freeze it again.
If you could not do this, say so in the report in plain words: "I did not see this animation in motion." Do not write "passed".
Smell test
Run this on your own output. A "yes" means rework.
- Could this animation sit on any other product's page unchanged?
- Does anything move that the person did not cause and cannot stop?
- Is text moving while someone is meant to read it?
- Do more than two things move at once, outside the signature?
- Does the page look broken or empty with animations off?
- Is anything animating a layout property?
- Is there an animation with no reduced-motion rule?
- Does everything fade up by 20px on scroll, section after section?
- Take a screenshot ten seconds after load. Can you tell from the still that the page has 3D in it? If not, the rest pose is too flat.
- Is the signature timid? If someone asked for something striking, would they say this is it?
- Did you look at the middle of every beat, or only at the end?
Report
Add these lines to the report from taste:
- Signature: what it is, and what it shows about the product.
- Reduced motion: what the person sees in place of it.
- Motion smell test: "passed", or what failed and what you changed.
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.

