/* ═══════════════════════════════════════════════════════
   SUMADHURA ELYSIUM — ENTRY ANIMATIONS (FIXED)
   ═══════════════════════════════════════════════════════ */


/* ─── KEYFRAMES ─── */

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(32px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeDown {
  from { opacity: 0; transform: translateY(-20px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeLeft {
  from { opacity: 0; transform: translateX(44px); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes fadeRight {
  from { opacity: 0; transform: translateX(-44px); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.93); }
  to   { opacity: 1; transform: scale(1); }
}

@keyframes popIn {
  from { opacity: 0; transform: scale(0.7) translateY(12px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}

@keyframes floatUpLoop {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-7px); }
}

@keyframes borderPulse {
  0%, 100% { border-color: rgba(201,162,74,0.3); }
  50%       { border-color: rgba(201,162,74,0.7); }
}


/* ─── REDUCED MOTION — always first ─── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
  }
}


/* ═══════════════════════════════════════════════════════
   1. NAV — slides down on load
   ═══════════════════════════════════════════════════════ */

nav.main-nav {
  animation: fadeDown 0.65s cubic-bezier(0.4,0,0.2,1) 0.1s both;
}


/* ═══════════════════════════════════════════════════════
   2. HERO — plays on page load, no observer needed
   ═══════════════════════════════════════════════════════ */

.hero-bg {
  animation: scaleIn 2.6s cubic-bezier(0.4,0,0.2,1) both;
}

.hero-eyebrow {
  opacity: 0;
  animation: fadeDown 0.7s ease 0.4s forwards;
}

.hero-title {
  opacity: 0;
  animation: fadeUp 0.9s cubic-bezier(0.4,0,0.2,1) 0.6s forwards;
}

.hero-script {
  opacity: 0;
  animation: fadeUp 0.9s cubic-bezier(0.4,0,0.2,1) 0.78s forwards;
}

.hero-subtitle {
  opacity: 0;
  animation: fadeUp 0.9s cubic-bezier(0.4,0,0.2,1) 0.94s forwards;
}

.hero-desc {
  opacity: 0;
  animation: fadeUp 0.75s ease 1.15s forwards;
}

.hero-ctas {
  opacity: 0;
  animation: fadeUp 0.7s ease 1.35s forwards;
}


/* ═══════════════════════════════════════════════════════
   3. SCROLL-TRIGGERED — base hidden state
   Only applied when JS confirms observer support.
   The .js-anim class is added to <html> by the script.
   ═══════════════════════════════════════════════════════ */

/* Without JS or observer, everything is visible */
.anim { opacity: 1; transform: none; }

/* With JS: elements start hidden */
.js-anim .anim {
  opacity: 0;
  will-change: opacity, transform;
  transition: opacity 0.75s ease, transform 0.75s cubic-bezier(0.4,0,0.2,1);
}

.js-anim .anim.anim--up     { transform: translateY(30px); }
.js-anim .anim.anim--left   { transform: translateX(44px); }
.js-anim .anim.anim--right  { transform: translateX(-44px); }
.js-anim .anim.anim--scale  { transform: scale(0.93); }

/* Revealed state */
.js-anim .anim.in {
  opacity: 1;
  transform: none;
}

/* Delay utilities — set via data-delay attribute in JS */
.js-anim .anim[data-delay="1"].in { transition-delay: 0.08s; }
.js-anim .anim[data-delay="2"].in { transition-delay: 0.16s; }
.js-anim .anim[data-delay="3"].in { transition-delay: 0.24s; }
.js-anim .anim[data-delay="4"].in { transition-delay: 0.32s; }
.js-anim .anim[data-delay="5"].in { transition-delay: 0.40s; }
.js-anim .anim[data-delay="6"].in { transition-delay: 0.48s; }
.js-anim .anim[data-delay="7"].in { transition-delay: 0.56s; }
.js-anim .anim[data-delay="8"].in { transition-delay: 0.64s; }


/* ═══════════════════════════════════════════════════════
   4. SECTION-SPECIFIC EXTRAS (non-visibility — safe always)
   ═══════════════════════════════════════════════════════ */

/* Play button floats after video card appears */
.video-thumb.in .play-btn {
  animation: floatUpLoop 3s ease-in-out 0.8s infinite;
}

/* Form border pulses gently once visible */
.contact-form-wrap.in {
  animation: borderPulse 4s ease-in-out 1s infinite;
}

/* Map pins spring in — handled via JS popIn animation class */
.map-pin.pin-animate {
  animation: popIn 0.4s cubic-bezier(0.34,1.56,0.64,1) both;
}

/* Stat accent line sweeps out */
.js-anim .stat-accent {
  width: 0 !important;
  display: inline-block;
  transition: width 0.5s ease 0.5s;
}
.js-anim .anim.in ~ .stat-accent,
.js-anim .stat-card.in .stat-accent {
  width: 12px !important;
}
