What you're seeing
These cards — including this one — fade and slide upward as they enter the viewport, and fade out as
they leave. Scroll up and back down to see it repeat.
How it works
Two separate @keyframes handle entry and exit. Each card has its own anonymous
view() timeline. The animation-range: entry, exit declaration maps the first
animation to the entry phase and the second to the exit phase.
animation:
card-in auto linear backwards,
card-out auto linear forwards;
animation-timeline: view();
animation-range: entry, exit;
Why the skill mattered
The dual-animation pattern — one keyframe per phase, each with a complementary
fill-mode (backwards for entry, forwards for exit) — is
non-obvious. Without the guide, the natural instinct would be a single animation or a JavaScript-based
IntersectionObserver toggle. The guide also confirmed the same declaration-order gotcha as the
header: animation-range must follow the animation
shorthand to avoid being silently reset.