/* ==========================================================================
   animations.css — Intersection Observer helpers & keyframes
   ========================================================================== */

@keyframes twinkle {
  from { opacity: 0.55; }
  to { opacity: 1; }
}

@keyframes blink {
  0%, 92%, 100% { transform: scaleY(1); }
  96% { transform: scaleY(0.1); }
}

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

@keyframes pulseSoft {
  0%, 100% { box-shadow: 0 0 0 0 rgba(91, 168, 160, 0.35); }
  50% { box-shadow: 0 0 0 12px rgba(91, 168, 160, 0); }
}

.robot {
  animation: floatY 4s ease-in-out infinite;
}

.social-float__ai {
  animation: pulseSoft 2.8s ease-in-out infinite;
}

/* Reveal system */
.reveal {
  opacity: 0;
  transform: translateY(16px);
  transition:
    opacity 700ms cubic-bezier(0.22, 1, 0.36, 1),
    transform 700ms cubic-bezier(0.22, 1, 0.36, 1);
  transition-delay: var(--reveal-delay, 0ms);
  will-change: opacity, transform;
}

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

.reveal[data-reveal-style="fade"] {
  transform: none;
}

.reveal[data-reveal-style="scale"] {
  transform: scale(0.94);
}

.reveal[data-reveal-style="scale"].is-visible {
  transform: scale(1);
}

.reveal[data-reveal-style="slide-left"] {
  transform: translateX(-32px);
}

.reveal[data-reveal-style="slide-left"].is-visible {
  transform: translateX(0);
}

.reveal[data-reveal-style="slide-right"] {
  transform: translateX(32px);
}

.reveal[data-reveal-style="slide-right"].is-visible {
  transform: translateX(0);
}

/* Parallax helper */
[data-parallax] {
  will-change: transform;
  transition: transform 80ms linear;
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  .reveal,
  .robot,
  .social-float__ai,
  .hero__stars,
  .progress__bar,
  .btn,
  .service-card,
  .expert-card {
    animation: none !important;
    transition: none !important;
  }

  .reveal {
    opacity: 1;
    transform: none;
  }
}
