/* Motion layer — replicates the framer-motion behaviour of the original build. */
[data-reveal]{
  opacity:0;
  will-change:opacity,transform;
  transition:opacity var(--rv-dur,.9s) cubic-bezier(.22,1,.36,1) var(--rv-delay,0s),
             transform var(--rv-dur,.9s) cubic-bezier(.22,1,.36,1) var(--rv-delay,0s);
}
[data-reveal="up"]{transform:translateY(28px)}
[data-reveal="up-sm"]{transform:translateY(24px)}
[data-reveal="up-xs"]{transform:translateY(20px)}
[data-reveal="down"]{transform:translateY(-30px)}
[data-reveal="zoom"]{transform:scale(1.05)}
[data-reveal].is-visible{opacity:1;transform:none}

/* Menu overlay */
#menu-overlay{opacity:0;visibility:hidden;transition:opacity .5s cubic-bezier(.76,0,.24,1),visibility .5s}
#menu-overlay.is-open{opacity:1;visibility:visible}

/* LQIP blur placeholder, faded out once the full image decodes */
.lqip{transition:opacity .4s ease}
.lqip.is-loaded{opacity:0}

@media (prefers-reduced-motion:reduce){
  [data-reveal]{opacity:1!important;transform:none!important;transition:none}
  .animate-scroll-hint,.animate-ping,.animate-wipe-in{animation:none!important}
}

/* `hidden` must win over Tailwind display utilities */
[hidden]{display:none!important}
