Gentle
- 1050ms
- no overshoot
- ζ 1.10
Overdamped — never overshoots. Panels, drawers.
Tune motion by feel. Leave with the code.
Drop in your icon, logo or SVG and watch it move on your curve. It stays in this browser.
Bring your own motion
Paste an easing out of your codebase, or a whole stylesheet. Nothing is uploaded \u2014 the parsing happens in this tab.
The snippet reads the motion off whatever page you have open — including localhost and pages behind a login, which a URL fetcher could never reach. Paste it into DevTools, then paste the result back here.
Nothing inspected yet.
The library
Each on its own clock, with its real numbers on the card. Steal one, or open it and make it yours.
Overdamped — never overshoots. Panels, drawers.
Quick, barely a wobble. Buttons, toggles.
Two passes, 22% past the target. Playful, use sparingly.
Three passes, 37% past the target. Toys and games.
Fast and flat. Tooltips, menus.
Weight behind it. Large surfaces, sheets.
The workhorse. Tailwind ships this as ease-in-out.
Enters fast, lands soft. Things arriving on screen.
Leaves in a hurry. Things being dismissed.
Pulls back before it moves. Dips below zero.
Overshoots once. The only bézier that can.
Defined by the CSS specification.
Defined by the CSS specification.
Defined by the CSS specification.
Defined by the CSS specification.
Defined by the CSS specification.
How it works
Then the one idea worth knowing, and the questions people ask.
Pull stiffness, damping and mass until the card moves the way you mean.
Two lanes, one start gun. The gap between them is the argument.
Throw the card on the Fling stage. Your release speed becomes the initial velocity.
CSS, Tailwind, Framer Motion or a Base44 prompt. Save curves, export the lot as tokens.
A cubic-bezier() has four control values, so it can reach its target but never pass it. A spring that crosses, comes back and crosses again cannot be written as one, and tools round it off into something that feels wrong. linear() carries a list of sampled points instead, so the whole shape survives. Overshoot samples the solved spring, thins the list, and prints what is left.
The studio itself runs anywhere. linear() easing ships in current Chrome, Safari and Firefox; where it is missing the stage falls back to ease-out and says so, and the exported code stays correct.
No. Every curve is solved in this browser tab, there is no account and nothing is sent to a server. Curves you save live in this browser’s IndexedDB, so clearing site data clears them.
There is no file to import, but the numbers carry: type the stiffness, damping and mass readouts into Figma’s custom spring easing, or paste the four control points for a bézier. Check it by eye afterwards.
It is ζ = c / (2√(km)) — damping measured against stiffness and mass. Below 1 the spring passes its target before settling; at 1 or above it arrives without ever crossing.