Motion design rules for the Agenta mobile app (web/mobile) — the shared presets in src/lib/motion, when to animate, and reduced-motion requirements. Use when adding any animation or transition under web/mobile, animating navigation, sheets, skeletons, or list/chat surfaces.
68
82%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
All animation in web/mobile uses the motion package through the shared
presets module src/lib/motion/presets.ts. Components never define their own
durations, easings, or springs.
Consume via the hook (reduced-motion aware — this is mandatory):
import {useMotionPresets} from "@/lib/motion/presets"
const {sharedAxisPush, sheetSlideUp, crossfade, reduced} = useMotionPresets()sharedAxisPush — list → chat navigation (and any parent → child screen
push). Forward uses custom={1}, back uses custom={-1}; the back
gesture/button reverses the same preset. Wrap sibling screens in
<AnimatePresence custom={direction} initial={false}>.sheetSlideUp — spring-based bottom sheets (project drawer). Pair with a
crossfade scrim.crossfade — skeleton → content swaps. Skeleton and content must occupy
identical geometry so the fade causes zero layout shift.transform/opacity only).useMotionPresets() returns instant
variants when prefers-reduced-motion is set; any animation built outside
the presets module must justify itself in review AND handle reduced motion
itself (prefer extending the presets module instead).presets.ts (one exported preset + doc comment),
not into a component file.e4008fa
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.