/* A weighted panel settles softly; only the layout-independent inner layer moves. */
:root { --reveal-distance:18px; --reveal-overshoot:-1.5px; --reveal-duration:820ms; --reveal-easing:cubic-bezier(.25,.1,.16,1); }
@keyframes fs-entrance {
  0% { transform:translateY(var(--reveal-distance));opacity:.99; }
  78% { transform:translateY(var(--reveal-overshoot));opacity:1; }
  100% { transform:translateY(0);opacity:1; }
}
[data-reveal-state="running"] > .reveal-layer { animation:fs-entrance var(--reveal-duration) var(--reveal-easing) var(--reveal-delay,0ms) both; will-change:transform,opacity; }
/* Only offscreen cards become pending; initially visible content stays visible.
   Match the first keyframe before observation so entering cards never jump back. */
@media(min-width:768px){ [data-reveal-state="pending"] > .reveal-layer { transform:translateY(var(--reveal-distance));opacity:.99; } }
@keyframes fs-entrance-mobile { from { opacity:.96; } to { opacity:1; } }
@media(max-width:767px){
 [data-reveal-state="pending"] > .reveal-layer { opacity:.96; }
 [data-reveal-state="running"] > .reveal-layer { animation:fs-entrance-mobile 360ms ease-out 0ms both;will-change:opacity;transform:none; }
}
@media(prefers-reduced-motion:reduce){ [data-reveal] > .reveal-layer { animation:none!important;transform:none!important;opacity:1!important; } }
