/* ==========================================================================
   Animations — scroll reveal states + shared motion
   ========================================================================== */
.reveal{
  opacity:0;
  transform:translateY(22px);
  transition:opacity .7s ease, transform .7s ease;
}
.reveal.in{
  opacity:1;
  transform:translateY(0);
}

/* Stagger helper — apply alongside .reveal on grid children */
.reveal[data-d="1"]{transition-delay:.08s;}
.reveal[data-d="2"]{transition-delay:.16s;}
.reveal[data-d="3"]{transition-delay:.24s;}
.reveal[data-d="4"]{transition-delay:.32s;}
.reveal[data-d="5"]{transition-delay:.4s;}
.reveal[data-d="6"]{transition-delay:.48s;}

@keyframes float-y{
  0%,100%{transform:translateY(0);}
  50%{transform:translateY(-14px);}
}
@keyframes spin-slow{
  from{transform:rotate(0deg);}
  to{transform:rotate(360deg);}
}
@keyframes pulse-ring{
  0%{transform:scale(0.94);opacity:.55;}
  70%{transform:scale(1.06);opacity:.12;}
  100%{transform:scale(0.94);opacity:.55;}
}
@keyframes spin-reverse-slow{
  from{transform:rotate(360deg);}
  to{transform:rotate(0deg);}
}

@media(prefers-reduced-motion: reduce){
  .reveal{opacity:1;transform:none;transition:none;}
  *{animation-duration:0.001ms !important;animation-iteration-count:1 !important;}
}
