/* ══════════════════════════════════════════
   ANIMATIONS — Mixteco Tree Service & Lawn Care
   ══════════════════════════════════════════ */

/* ── Scroll Reveal ── */
.reveal-fade {
  opacity: 0;
  transition: opacity 0.8s var(--ease-out);
}

.reveal-fade.is-visible {
  opacity: 1;
}

.reveal-up {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out);
}

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

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

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

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

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

/* ── Stagger children ── */
.reveal-up:nth-child(2) { transition-delay: 0.1s; }
.reveal-up:nth-child(3) { transition-delay: 0.2s; }
.reveal-up:nth-child(4) { transition-delay: 0.3s; }
.reveal-up:nth-child(5) { transition-delay: 0.4s; }

/* ── Particle animation ── */
.hero-particles::before,
.hero-particles::after {
  content: '';
  position: absolute;
  width: 4px;
  height: 4px;
  background: var(--color-accent);
  border-radius: 50%;
  opacity: 0.3;
  animation: floatParticle 12s ease-in-out infinite;
}

.hero-particles::before {
  top: 20%;
  left: 10%;
  animation-delay: 0s;
}

.hero-particles::after {
  top: 60%;
  right: 15%;
  width: 6px;
  height: 6px;
  animation-delay: -4s;
  opacity: 0.2;
}

@keyframes floatParticle {
  0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.3; }
  25% { transform: translate(30px, -20px) scale(1.2); opacity: 0.5; }
  50% { transform: translate(-10px, -40px) scale(0.8); opacity: 0.2; }
  75% { transform: translate(20px, -10px) scale(1.1); opacity: 0.4; }
}

/* ── Gallery transition ── */
.gallery-track {
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}

/* ── Tab panel transition ── */
.tab-panel {
  animation: panelFadeIn 0.5s cubic-bezier(0.22, 1, 0.36, 1);
}

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