Scroll-Driven Reveal
Utilizing @view-timeline for viewport-relative interpolation. Cards enter with a 3D rotation synced to scroll progress.
/* Zero-JS scroll-driven reveal with @view-timeline */
@keyframes card-enter {
from { opacity: 0; transform: translateY(24px) rotateX(10deg); }
to { opacity: 1; transform: none; }
}
.card {
animation: card-enter linear both;
animation-timeline: view();
animation-range: entry 10% cover 40%;
}
No JavaScript. No IntersectionObserver. Driven entirely by the browser scroll timeline.