/* ============================================================
   ANIMATIONS & SCROLL REVEALS
   ============================================================ */

@keyframes pulseSoft{ 0%,100%{opacity:.55; transform:translateY(0)} 50%{opacity:1; transform:translateY(-3px)} }
@keyframes wiggle{ 0%,100%{transform:rotate(-8deg)} 50%{transform:rotate(8deg)} }
@keyframes popIn{ from{opacity:0; transform:translateY(14px) scale(.94)} to{opacity:1; transform:none} }
@keyframes cardPop{ 0%{transform:scale(1)} 45%{transform:scale(1.035)} 100%{transform:scale(1)} }
@keyframes eq{ 0%,100%{height:5px} 50%{height:15px} }
@keyframes shimmer{ from{background-position:-320px 0} to{background-position:320px 0} }
@keyframes floatY{ 0%,100%{transform:translateY(0)} 50%{transform:translateY(-6px)} }

/* scroll reveal */
.js [data-reveal]{
  opacity:0;
  transform:translateY(22px);
  transition:opacity .7s var(--ease), transform .7s var(--ease);
  transition-delay:var(--d, 0ms);
}
.js [data-reveal].in-view{ opacity:1; transform:none; }

/* loading skeleton (used while media/fonts settle) */
.is-loading{
  background:linear-gradient(90deg,#eef5f2 25%,#f7fbf9 50%,#eef5f2 75%);
  background-size:640px 100%;
  animation:shimmer 1.3s linear infinite;
  border-radius:inherit;
}

/* gentle idle float for the hero polaroid on large screens */
@media (min-width:1024px) and (prefers-reduced-motion:no-preference){
  .polaroid{ animation:floatY 7s ease-in-out infinite; }
  .polaroid:hover{ animation-play-state:paused; }
}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  html{ scroll-behavior:auto; }
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
  }
  .js [data-reveal]{ opacity:1; transform:none; }
}

