1. Does it carry meaning?
Motion should explain a relationship: this panel came from that button, this list is still loading, this card is the one under your pointer. Decoration that carries no meaning is the first thing to cut when a page feels slow.
2. Does it stay on the compositor?
Transform and opacity can usually be handled without re-running layout. Animating width, height, top or box-shadow invites layout and paint work on every frame, which is where dropped frames come from on mid-range hardware.
3. Is the duration honest?
Micro-interactions read best around 120–200ms, component transitions around 200–320ms, and full-page or hero sequences up to roughly 600ms. Anything longer needs to be interruptible or it becomes a wait.
4. Does it degrade politely?
Content must be readable with animation switched off. Every pattern here assumes a prefers-reduced-motion branch and a no-JavaScript fallback in which elements are simply visible.