Fade-Up Scroll Reveal with view()
A reveal that needs no observer and no scroll listener. animation-timeline: view() hands an ordinary @keyframes block a timeline built from the element's own visibility, so each card fades and rises as it enters the scrollport. animation-range: entry ends that timeline once the card is in, and `both` keeps the finished state instead of playing it backwards on the way out.