/* ====================================================================
   ANIMATIONS.CSS — Keyframes, scroll reveals, transitions, effects
   ==================================================================== */


/* ---- Keyframe Definitions ---------------------------------------- */

/* Fade up from below (hero initial load) */
@keyframes fade-up {
  from {
    opacity: 0;
    transform: translateY(32px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Fade in */
@keyframes fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* Spin (button loader) */
@keyframes spin {
  to { transform: rotate(360deg); }
}

/* Pulsing dot (badge) */
@keyframes pulse-dot {
  0%, 100% { transform: scale(1);   opacity: 1; }
  50%       { transform: scale(1.5); opacity: 0.5; }
}

/* Mouse scroll wheel indicator */
@keyframes scroll-wheel {
  0%   { transform: translateY(0);  opacity: 1; }
  75%  { transform: translateY(10px); opacity: 0; }
  76%  { transform: translateY(0);  opacity: 0; }
  100% { transform: translateY(0);  opacity: 1; }
}

/* Reveal from bottom (scroll triggered) */
@keyframes reveal-up {
  from {
    opacity: 0;
    transform: translateY(40px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Reveal from left */
@keyframes reveal-left {
  from {
    opacity: 0;
    transform: translateX(-40px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* Scale in */
@keyframes scale-in {
  from {
    opacity: 0;
    transform: scale(0.88);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* Form success appear */
@keyframes success-appear {
  from {
    opacity: 0;
    transform: translateY(20px) scale(0.96);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

/* Form success icon pop */
@keyframes success-pop {
  from { transform: scale(0.4); opacity: 0; }
  60%  { transform: scale(1.15); }
  to   { transform: scale(1);   opacity: 1; }
}

/* Urgency bar shimmer */
@keyframes shimmer {
  0%   { background-position: -200% center; }
  100% { background-position:  200% center; }
}

/* Slow float for decorative elements */
@keyframes float {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-10px); }
}

/* Subtle hero title glow pulse */
@keyframes glow-pulse {
  0%, 100% { text-shadow: 0 0 80px rgba(232,100,26,0.4), 0 0 120px rgba(212,165,64,0.15); }
  50%       { text-shadow: 0 0 120px rgba(232,100,26,0.6), 0 0 160px rgba(212,165,64,0.25); }
}

/* Urgency bar fill animation */
@keyframes bar-fill {
  from { width: 0; }
}

/* Number count up (applied via JS class) */
@keyframes number-appear {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}


/* ---- Hero Initial Animations ------------------------------------- */

/* Elements with animate-fade-up and --delay CSS var animate in on load */
.animate-fade-up {
  opacity: 0;
  animation: fade-up 0.75s var(--ease-out) both;
  animation-delay: var(--delay, 0ms);
}

/* Hero title accent line glows */
.hero__title-line--accent {
  animation: glow-pulse 3.5s ease-in-out infinite;
  animation-delay: 1.2s;
}

/* Cactus gentle float */
.hero__cactus {
  animation: float 6s ease-in-out infinite;
}
.hero__cactus--right {
  animation-delay: -3s;
}


/* ---- Scroll Reveal (class toggled by IntersectionObserver in JS) -- */

.reveal-up {
  opacity: 0;
  transform: translateY(36px);
  transition:
    opacity 0.65s var(--ease-out),
    transform 0.65s var(--ease-out);
  transition-delay: var(--delay, 0ms);
  will-change: opacity, transform;
}

.reveal-up.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* Left-slide variant */
.reveal-left {
  opacity: 0;
  transform: translateX(-36px);
  transition:
    opacity 0.65s var(--ease-out),
    transform 0.65s var(--ease-out);
  transition-delay: var(--delay, 0ms);
  will-change: opacity, transform;
}
.reveal-left.is-visible {
  opacity: 1;
  transform: translateX(0);
}

/* Scale variant */
.reveal-scale {
  opacity: 0;
  transform: scale(0.90);
  transition:
    opacity 0.55s var(--ease-out),
    transform 0.55s var(--ease-spring);
  transition-delay: var(--delay, 0ms);
  will-change: opacity, transform;
}
.reveal-scale.is-visible {
  opacity: 1;
  transform: scale(1);
}


/* ---- Best Seller badge pulse ------------------------------------ */
@keyframes pulse-badge {
  0%, 100% { box-shadow: 0 2px 12px rgba(212,165,64,0.40); }
  50%       { box-shadow: 0 4px 24px rgba(212,165,64,0.65); }
}

/* ---- Urgency / Progress Bar -------------------------------------- */
.urgency-bar__fill {
  animation: bar-fill 1.4s var(--ease-out) both;
  animation-play-state: paused;
}
.urgency-bar.is-visible .urgency-bar__fill {
  animation-play-state: running;
}


/* ---- Artist Card Hover Glow Effects ------------------------------ */
.artist-card__visual--santos:hover {
  box-shadow: 0 20px 60px rgba(184,78,18,0.35);
}
.artist-card__visual--saint:hover {
  box-shadow: 0 20px 60px rgba(58,120,153,0.35);
}
.artist-card__visual--dave:hover {
  box-shadow: 0 20px 60px rgba(107,90,26,0.35);
}
.artist-card__visual--qubix:hover {
  box-shadow: 0 20px 60px rgba(106,31,160,0.35);
}


/* ---- Pillar Card Hover ------------------------------------------ */
.pillar-card::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: radial-gradient(circle at 50% 100%, rgba(232,100,26,0.06) 0%, transparent 70%);
  opacity: 0;
  transition: opacity var(--t-base);
}
.pillar-card:hover::after { opacity: 1; }


/* ---- Shimmer on Urgency Bar -------------------------------------- */
.urgency-bar__fill {
  background: linear-gradient(
    90deg,
    var(--clr-orange-dark) 0%,
    var(--clr-gold) 50%,
    var(--clr-orange-dark) 100%
  );
  background-size: 200% auto;
  animation: shimmer 2.5s linear infinite, bar-fill 1.4s var(--ease-out) both;
}


/* ---- Form Input Focus Ring --------------------------------------- */
.form-input {
  transition:
    border-color 0.2s,
    box-shadow   0.2s,
    background   0.2s;
}


/* ---- Counter number pop ----------------------------------------- */
.counter__num.is-counted {
  animation: number-appear 0.4s var(--ease-spring) both;
}


/* ---- Section fade-in (page is ready) ----------------------------- */
.no-js .animate-fade-up,
.no-js .reveal-up {
  opacity: 1;
  transform: none;
  animation: none;
}


/* ---- Reduce motion overrides ------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .animate-fade-up,
  .reveal-up,
  .reveal-left,
  .reveal-scale {
    transition: none;
    animation: none;
    opacity: 1;
    transform: none;
  }

  .hero__cactus,
  .hero__title-line--accent,
  .badge__dot {
    animation: none;
  }

  .urgency-bar__fill {
    animation: none;
    width: 68%;
  }

  .counter__bar-fill {
    transition: none;
  }
}
