Drag Bézier control points, feel the curve, compare easings in a race, and explore steps() and linear().
X handles stay in [0, 1]; Y can overshoot for spring/bounce. The curve maps time → progress.
Press Play to animate a ball along the track using the current easing.
steps(n, end) jumps progress in discrete jumps — ideal for sprite sheets and typewriter effects.
The modern linear() function approximates complex curves with piecewise linear stops — no JavaScript required.
Two runners, same duration, different timing functions. Who reaches the finish first?
Both runners travel the same distance in the same wall-clock time — the timing function only changes when progress happens.