# Motion

> Springs replace fixed easing curves. Two schemes ship: standard and expressive.

- Interactive page: https://m3e.ljzapps.app/#foundations/motion

Springs replace fixed easing curves. Two schemes ship: `MotionScheme.standard()` and `MotionScheme.expressive()`. The expressive spring overshoots and settles with more energy.

Spatial specs animate position, size and shape and may overshoot in the expressive scheme. Effects specs animate color and opacity and never overshoot. Each scheme offers fast, default and slow variants of both.

```kotlin
val motion = MaterialTheme.motionScheme
val offset by animateDpAsState(if (expanded) 200.dp else 0.dp, animationSpec = motion.defaultSpatialSpec())
val alpha by animateFloatAsState(if (visible) 1f else 0f, animationSpec = motion.defaultEffectsSpec())
```

Screen transitions still use easing and duration tokens: emphasized 500 ms, emphasized decelerate 400 ms (enter), emphasized accelerate 200 ms (exit), standard 300 ms.
