Why it matters
Nothing in the physical world appears from zero size; scale(0) entrances look like a pop and draw the eye too hard. Starting from ~0.95 with opacity reads as the element arriving.
How to fix it
Start from scale: 0.95 (0.9 for small popovers) combined with opacity: 0, using an ease-out curve.
Example
<m.div initial={{ opacity: 0, scale: 0.95 }} animate={{ opacity: 1, scale: 1 }} transition={{ duration: 0.18, ease: [0.16, 1, 0.3, 1] }} />References
More lint rules
void lint reports 67 rules in this category. Static source checks with no browser: Tailwind v4 silent failures, Next.js 16 API traps, React render-body bugs, accessibility markup, SEO files and motion hygiene.
dangerously-set-jsonld-unescapedJSON-LD injected with `JSON.stringify` without escaping `<`transition-all`transition: all` / `transition-all`animate-layout-propAnimation of layout properties (width/height/top/left/margin/padding)outline-none-no-replacementFocus outline removed without a visible replacementscroll-timeline-no-fallbackBase rule hides an element; only an `@supports (animation-timeline: …)` block undoes itease-in-enter`ease-in` used for an entrance or hoverlong-ui-durationUI feedback transition longer than 500msno-reduced-motionAnimations present but no `prefers-reduced-motion` handling anywhere