/* ===== Animations ===== */
@keyframes floatY{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
@keyframes fadeUp{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}
@keyframes zoomFade{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}

.reveal-up{animation:fadeUp .8s var(--ease-lux) both}
.zoom-fade{animation:zoomFade .8s var(--ease-lux) both}
.float{animation:floatY 4s ease-in-out infinite}

.shine{
  position:relative;background:linear-gradient(120deg,transparent 30%,rgba(255,255,255,.4) 50%,transparent 70%);
  background-size:200% 100%;animation:shimmer 3s linear infinite;
}

/* Parallax helper — applied via JS with translate3d */
.parallax{will-change:transform}

/* Hover lift */
.hover-lift{transition:.35s var(--ease-lux)}
.hover-lift:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}

/* Glass hover */
.glass-hover{position:relative;overflow:hidden}
.glass-hover::after{
  content:"";position:absolute;inset:0;background:linear-gradient(120deg,transparent 40%,rgba(255,255,255,.35) 50%,transparent 60%);
  transform:translateX(-100%);transition:transform .8s var(--ease-lux);pointer-events:none;
}
.glass-hover:hover::after{transform:translateX(100%)}

/* Reduced motion */
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
}
