Duration & asymmetric timing

Slower entrances, faster exits, and the exceptions to both

## Duration by component type | Component | Enter duration | Exit duration | Notes | | ----------------------------- | -------------- | ------------- | ---------------------------------- | | Button press / micro-feedback | 50-100ms | 50-80ms | Must feel instant | | Tooltip | 100-150ms | 75-100ms | Fast in, faster out | | Popover / dropdown | 150-200ms | 100-150ms | Emerges from trigger | | Toast / notification | 200-250ms | 150-200ms | Slides from edge | | Modal / dialog | 200-350ms | 150-200ms | Scale + opacity | | Drawer / sheet | 250-350ms | 200-250ms | Slides across significant distance | | Page transition | 150-250ms | 100-150ms | Keep it tight | Nothing exceeds 400ms. } /> ## Enter slow, exit fast **1.5:1 to 2:1**. Enter at 250ms, exit at 150ms. A drawer enters at 300ms, exits at 180ms. ## The 300ms budget Total animation time for any single interaction: 300ms max. 5 items staggered at 50ms = 250ms total. An 800ms stagger looks like a broken loader. ## Duration and distance More distance needs more time, but not linearly. A drawer sliding 300px: ~300ms. A tooltip appearing 8px below its trigger: 100ms. A panel sliding 600px: ~350ms, not 600ms. Double the distance, add 30-50% more duration. ## When to skip duration entirely Toggle states, checkbox fills, colour transitions on hover, focus-visible outlines.