CSS only, zero runtime
97 classic presets, atoms that actually stack, scroll reveals that degrade honestly, glass, and 530 effects in total. Nothing to hydrate. 22.8 KB for all of it, or about 4 after tree-shaking.
Two effects that both write transform will always fight: the last one declared wins and the other silently does nothing. Animatio's atoms each own a single registered channel, so stacking them composes. Click either box — the count is read off the live element, not written into the caption.
an-fadean-up
--an-o + --an-y Opacity and vertical travel, each on its own channel.
an-fadean-upan-spin
--an-o + --an-y + --an-rz A third atom joins without touching what the other two wrote.
Entrances, exits and attention seekers, all 121 of them. Click any tile to run it: nothing on this site autoplays.
Browse all 534, or read about the atoms that stack.
Glass, text treatments, borders, loaders, backgrounds. These are surfaces rather than animations, so they simply are: nothing to press play on.
Tune them live in the surfaces studio.
Three tiers, from native animation-trigger down to plain visible content. No scroll listener, no observer, no library.
The scroll lab runs the whole ladder and tells you which tier your browser resolved to.
@property channelanimation-trigger down to plain visible contentEvery number above is asserted by a CI gate or a test, so none of them can rot.
Published up front rather than discovered in production.
Scroll reveals resolve through three tiers and never hide what they cannot show again. In Firefox stable, which still has scroll-driven animations behind a flag, content simply renders finished and readable. Check what your browser does.
backdrop-filter: url() is broken, not merely unsupported: WebKit parses it and renders nothing, so @supports returns true and would switch the broken path on. Refraction is opt-in behind an attribute you set after your own probe.
Cursor tracking, text scramble and particles are not possible in CSS. They are on the limits page with the nearest honest substitute for each, rather than shipped as options that quietly do nothing.
Loaders keep running under reduced motion. WCAG 2.3.3 exempts essential motion, and a frozen spinner reads as a hung page. Ambient loops pause, flashing effects are removed outright.