/* fx-stagger: cards rise in one after another when the set scrolls in. The delay restarts every row, so a long grid
   never makes the last card wait. Opacity + transform only. */
.fx-js [data-fx~="stagger"]>*{opacity:0;transform:translateY(var(--sg-y,24px))}
.fx-js [data-fx~="stagger"].sg-in>*{opacity:1;transform:none;transition:opacity .6s ease calc(var(--i,0) * var(--sg-step,.08s)),transform .8s cubic-bezier(.2,.7,.1,1) calc(var(--i,0) * var(--sg-step,.08s))}
@media (prefers-reduced-motion:reduce){.fx-js [data-fx~="stagger"]>*{opacity:1!important;transform:none!important;transition:none!important}}
