/* ==========================================================================
   10th Planet Mount Pleasant — Animation Styles
   Scroll-triggered reveals, hover effects, and micro-interactions
   ========================================================================== */

/* ==========================================================================
   Scroll Reveal — Base States (hidden before IntersectionObserver triggers)
   ========================================================================== */

/* Fade Up: element fades in + rises 30px */
.fade-up {
  opacity: 0;
  transform: translateY(30px);
  transition:
    opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
}

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

/* Fade In: element fades in only */
.fade-in {
  opacity: 0;
  transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1);
}

.fade-in.visible {
  opacity: 1;
}

/* Fade Left: element fades in from left */
.fade-left {
  opacity: 0;
  transform: translateX(-30px);
  transition:
    opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
}

.fade-left.visible {
  opacity: 1;
  transform: translateX(0);
}

/* Fade Right: element fades in from right */
.fade-right {
  opacity: 0;
  transform: translateX(30px);
  transition:
    opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
}

.fade-right.visible {
  opacity: 1;
  transform: translateX(0);
}

/* Scale Up: fades in with scale */
.scale-up {
  opacity: 0;
  transform: scale(0.95);
  transition:
    opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
}

.scale-up.visible {
  opacity: 1;
  transform: scale(1);
}

/* ==========================================================================
   Stagger Children — parent applies delay to direct children
   ========================================================================== */
.stagger-children > * {
  opacity: 0;
  transform: translateY(30px);
  transition:
    opacity 0.6s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
}

.stagger-children.visible > *:nth-child(1) { transition-delay: 0s; }
.stagger-children.visible > *:nth-child(2) { transition-delay: 0.1s; }
.stagger-children.visible > *:nth-child(3) { transition-delay: 0.2s; }
.stagger-children.visible > *:nth-child(4) { transition-delay: 0.3s; }
.stagger-children.visible > *:nth-child(5) { transition-delay: 0.4s; }
.stagger-children.visible > *:nth-child(6) { transition-delay: 0.5s; }

.stagger-children.visible > * {
  opacity: 1;
  transform: translateY(0);
}

/* ==========================================================================
   Parallax Background Text — moves at 0.3x scroll speed via JS
   ========================================================================== */
.parallax-text {
  will-change: transform;
  transition: none; /* JS handles movement directly */
}

/* ==========================================================================
   Hero Headline Stagger — words animate in sequentially
   ========================================================================== */
.hero-word {
  display: inline-block;
  opacity: 0;
  transform: translateY(20px);
  animation: heroWordIn 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}

@keyframes heroWordIn {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Stagger delays applied via inline style or nth-child */
.hero-stagger .hero-word:nth-child(1) { animation-delay: 0.1s; }
.hero-stagger .hero-word:nth-child(2) { animation-delay: 0.2s; }
.hero-stagger .hero-word:nth-child(3) { animation-delay: 0.3s; }
.hero-stagger .hero-word:nth-child(4) { animation-delay: 0.4s; }
.hero-stagger .hero-word:nth-child(5) { animation-delay: 0.5s; }
.hero-stagger .hero-word:nth-child(6) { animation-delay: 0.6s; }

/* Hero eyebrow fade */
.hero-eyebrow-anim {
  opacity: 0;
  transform: translateY(10px);
  animation: heroWordIn 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.05s forwards;
}

/* Hero subheadline fade */
.hero-sub-anim {
  opacity: 0;
  animation: heroWordIn 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.6s forwards;
}

/* Hero CTA fade */
.hero-cta-anim {
  opacity: 0;
  animation: heroWordIn 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.75s forwards;
}

/* Hero image fade */
.hero-image-anim {
  opacity: 0;
  transform: translateX(30px);
  animation: heroImageIn 0.8s cubic-bezier(0.16, 1, 0.3, 1) 0.4s forwards;
}

@keyframes heroImageIn {
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* ==========================================================================
   Hover Micro-Interactions
   ========================================================================== */

/* Card lift on hover */
.hover-lift {
  transition: transform var(--transition-base), box-shadow var(--transition-base);
}

.hover-lift:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-hover);
}

/* Card glow on hover (red accent) */
.hover-glow {
  transition: box-shadow var(--transition-base);
}

.hover-glow:hover {
  box-shadow: 0 4px 30px rgba(211, 47, 47, 0.15);
}

/* ==========================================================================
   Red Underline Draw Animation
   ========================================================================== */
.underline-draw {
  position: relative;
  display: inline;
}

.underline-draw::after {
  content: '';
  position: absolute;
  bottom: -4px;
  left: 0;
  width: 0;
  height: 3px;
  background: var(--red);
  transition: width 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}

.underline-draw.visible::after {
  width: 100%;
}

/* ==========================================================================
   Counter / Number Animation Helper
   ========================================================================== */
.count-up {
  display: inline-block;
}

/* ==========================================================================
   Scroll indicator bounce
   ========================================================================== */
.scroll-indicator {
  animation: fadeInUp 1s ease 1.2s forwards;
  opacity: 0;
}

@keyframes fadeInUp {
  to {
    opacity: 1;
  }
}

/* ==========================================================================
   Reduced Motion — Respect user preferences
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }

  .fade-up,
  .fade-in,
  .fade-left,
  .fade-right,
  .scale-up,
  .stagger-children > * {
    opacity: 1;
    transform: none;
  }

  .hero-word {
    opacity: 1;
    transform: none;
  }

  .hero-eyebrow-anim,
  .hero-sub-anim,
  .hero-cta-anim,
  .hero-image-anim {
    opacity: 1;
    transform: none;
  }
}
