Focus on high-impact moments: one well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/pbakaus/impeccable/llms.txt
Use this file to discover all available pages before exploring further.
Duration: The 100/300/500 Rule
Timing matters more than easing. These durations feel right for most UI:| Duration | Use Case | Examples |
|---|---|---|
| 100-150ms | Instant feedback | Button press, toggle, color change |
| 200-300ms | State changes | Menu open, tooltip, hover states |
| 300-500ms | Layout changes | Accordion, modal, drawer |
| 500-800ms | Entrance animations | Page load, hero reveals |
Easing: Pick the Right Curve
Instead:| Curve | Use For | CSS |
|---|---|---|
| ease-out | Elements entering | cubic-bezier(0.16, 1, 0.3, 1) |
| ease-in | Elements leaving | cubic-bezier(0.7, 0, 0.84, 0) |
| ease-in-out | State toggles (there → back) | cubic-bezier(0.65, 0, 0.35, 1) |
The Only Two Properties You Should Animate
transform and opacity only—everything else causes layout recalculation.grid-template-rows: 0fr → 1fr instead of animating height directly:
Staggered Animations
Use CSS custom properties for cleaner stagger:Reduced Motion
This is not optional. Vestibular disorders affect ~35% of adults over 40.Perceived Performance
Nobody cares how fast your site is—just how fast it feels. Perception can be as effective as actual performance.The 80ms Threshold
Our brains buffer sensory input for ~80ms to synchronize perception. Anything under 80ms feels instant and simultaneous. This is your target for micro-interactions.Active vs Passive Time
Passive waiting (staring at a spinner) feels longer than active engagement. Strategies to shift the balance:- Preemptive start: Begin transitions immediately while loading (iOS app zoom, skeleton UI). Users perceive work happening.
- Early completion: Show content progressively—don’t wait for everything. Video buffering, progressive images, streaming HTML.
- Optimistic UI: Update the interface immediately, handle failures gracefully. Instagram likes work offline—the UI updates instantly, syncs later. Use for low-stakes actions; avoid for payments or destructive operations.
Easing Affects Perceived Duration
Ease-in (accelerating toward completion) makes tasks feel shorter because the peak-end effect weights final moments heavily. Ease-out feels satisfying for entrances, but ease-in toward a task’s end compresses perceived time.Caution: Too-fast responses can decrease perceived value. Users may distrust instant results for complex operations (search, analysis). Sometimes a brief delay signals “real work” is happening.
Performance
Don’t usewill-change preemptively—only when animation is imminent (:hover, .animating):
Guidelines
DO
- Use motion to convey state changes—entrances, exits, feedback
- Use exponential easing (ease-out-quart/quint/expo) for natural deceleration
- For height animations, use grid-template-rows transitions instead of animating height directly
- Always respect
prefers-reduced-motion - Use staggered animations with capped total duration
DON’T
- Animate layout properties (width, height, padding, margin)—use transform and opacity only
- Use bounce or elastic easing—they feel dated and tacky; real objects decelerate smoothly
- Animate everything (animation fatigue is real)
- Use >500ms for UI feedback
- Ignore
prefers-reduced-motion - Use animation to hide slow loading
