/* ==========================================================================
   ANIMATIONS — Scroll reveals, transitions, keyframes
   ========================================================================== */

/* Reveal base states */
.reveal {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity .8s var(--ease-out), transform .8s var(--ease-out);
  will-change: opacity, transform;
}
.reveal.in-view { opacity: 1; transform: translateY(0); }

.reveal-scale {
  opacity: 0;
  transform: scale(0.92);
  transition: opacity .7s var(--ease-out), transform .7s var(--ease-out);
}
.reveal-scale.in-view { opacity: 1; transform: scale(1); }

.reveal-left {
  opacity: 0;
  transform: translateX(-40px);
  transition: opacity .8s var(--ease-out), transform .8s var(--ease-out);
}
.reveal-left.in-view { opacity: 1; transform: translateX(0); }

.reveal-right {
  opacity: 0;
  transform: translateX(40px);
  transition: opacity .8s var(--ease-out), transform .8s var(--ease-out);
}
.reveal-right.in-view { opacity: 1; transform: translateX(0); }

.stagger > * { transition-delay: 0s; }
.stagger.in-view > *:nth-child(1) { transition-delay: 0.05s; }
.stagger.in-view > *:nth-child(2) { transition-delay: 0.12s; }
.stagger.in-view > *:nth-child(3) { transition-delay: 0.19s; }
.stagger.in-view > *:nth-child(4) { transition-delay: 0.26s; }
.stagger.in-view > *:nth-child(5) { transition-delay: 0.33s; }
.stagger.in-view > *:nth-child(6) { transition-delay: 0.40s; }
.stagger.in-view > *:nth-child(7) { transition-delay: 0.47s; }
.stagger.in-view > *:nth-child(8) { transition-delay: 0.54s; }

/* Hero gold accent drift */
@keyframes drift {
  0%, 100% { transform: translateX(-10%) translateY(0); opacity: 0.12; }
  50% { transform: translateX(10%) translateY(-20px); opacity: 0.18; }
}
.hero-accent {
  position: absolute;
  width: 200%;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent);
  transform-origin: center;
  opacity: 0.15;
  pointer-events: none;
}
.hero-accent.line-1 { top: 25%; transform: rotate(45deg); animation: drift 14s var(--ease) infinite; }
.hero-accent.line-2 { top: 55%; transform: rotate(45deg); animation: drift 18s var(--ease) infinite reverse; }
.hero-accent.line-3 { top: 80%; transform: rotate(45deg); animation: drift 22s var(--ease) infinite; }

/* Scroll indicator bounce */
@keyframes bounce-down {
  0%, 100% { transform: translateX(-50%) translateY(0); opacity: 0.7; }
  50% { transform: translateX(-50%) translateY(8px); opacity: 1; }
}
.scroll-indicator {
  position: absolute;
  left: 50%; bottom: 30px;
  color: var(--white-2);
  transform: translateX(-50%);
  animation: bounce-down 2s ease-in-out infinite;
  font-size: 12px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  font-family: var(--font-mono);
  display: flex; flex-direction: column; align-items: center; gap: var(--s2);
}
.scroll-indicator svg { width: 18px; height: 18px; }

/* Fade in */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
.fade-in { animation: fadeIn .6s var(--ease) both; }

/* Slide up */
@keyframes slideUp {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
.slide-up { animation: slideUp .5s var(--ease) both; }

/* Pulse glow */
@keyframes pulseGlow {
  0%, 100% { box-shadow: 0 0 0 0 rgba(201,168,76,0.4); }
  50% { box-shadow: 0 0 0 12px rgba(201,168,76,0); }
}
.pulse-glow { animation: pulseGlow 2.5s ease-out infinite; }

/* Shimmer (loading skeleton) */
@keyframes shimmer {
  0% { background-position: -1000px 0; }
  100% { background-position: 1000px 0; }
}
.shimmer {
  background: linear-gradient(90deg, var(--surface-2) 25%, var(--surface-3) 50%, var(--surface-2) 75%);
  background-size: 1000px 100%;
  animation: shimmer 2s linear infinite;
  border-radius: var(--r1);
}

/* Confetti */
@keyframes confettiFall {
  0% { transform: translateY(-10vh) rotate(0deg); opacity: 1; }
  100% { transform: translateY(110vh) rotate(720deg); opacity: 0; }
}
.confetti-piece {
  position: fixed;
  top: -10vh;
  width: 10px; height: 14px;
  background: var(--gold);
  z-index: 500;
  pointer-events: none;
  animation: confettiFall linear forwards;
}

/* Spin */
@keyframes spin { to { transform: rotate(360deg); } }
.spin { animation: spin 1s linear infinite; }

/* Hover lift */
.hover-lift { transition: transform .3s var(--spring), box-shadow .3s; }
.hover-lift:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); }

/* Counter pop */
@keyframes counterPop {
  0% { transform: scale(0.9); }
  50% { transform: scale(1.05); }
  100% { transform: scale(1); }
}
.counter.pop { animation: counterPop .4s var(--spring); }

/* Testimonial fade */
.testimonial-slide {
  position: absolute; inset: 0;
  opacity: 0;
  transform: translateY(20px);
  transition: opacity .6s var(--ease), transform .6s var(--ease);
  pointer-events: none;
}
.testimonial-slide.active {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
  position: relative;
}

/* Image hover zoom */
.zoom-on-hover { overflow: hidden; }
.zoom-on-hover img {
  transition: transform .6s var(--ease), filter .3s;
}
.zoom-on-hover:hover img {
  transform: scale(1.05);
  filter: brightness(1.08);
}

/* Progress bar (register) */
@keyframes progressFill {
  from { width: 0; }
}
.progress-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--gold-dark), var(--gold));
  border-radius: var(--r-full);
  transition: width .5s var(--ease);
}
