/* Scroll reveal, keyframes and reduced-motion overrides. Must load last. */

.reveal {
  opacity: 0;
  transform: translateY(32px);
  transition:
    opacity 0.9s var(--ease),
    transform 0.9s var(--ease);
}

.reveal.is-visible {
  opacity: 1;
  transform: none;
}

.reveal[data-delay="1"] {
  transition-delay: 0.08s;
}

.reveal[data-delay="2"] {
  transition-delay: 0.16s;
}

.reveal[data-delay="3"] {
  transition-delay: 0.24s;
}

.reveal[data-delay="4"] {
  transition-delay: 0.32s;
}

.service-card.reveal.is-visible:hover,
.why-card.reveal.is-visible:hover {
  transform: translateY(-6px);
  transition-delay: 0s;
}

.i18n-swap {
  animation: swap 0.45s var(--ease);
}

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

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

@keyframes breathe {
  0%,
  100% {
    opacity: 0.75;
  }
  50% {
    opacity: 1;
  }
}

@keyframes pulse {
  0%,
  100% {
    box-shadow: 0 0 0 4px var(--lime-15);
  }
  50% {
    box-shadow: 0 0 0 7px rgba(215, 243, 0, 0.05);
  }
}

@keyframes ping {
  0% {
    box-shadow: 0 0 0 0 rgba(215, 243, 0, 0.55);
  }
  80%,
  100% {
    box-shadow: 0 0 0 10px rgba(215, 243, 0, 0);
  }
}

@keyframes scan {
  0% {
    background-position: 0 100%;
  }
  100% {
    background-position: 0 0%;
  }
}

@keyframes grow {
  from {
    transform: scaleY(0.55);
  }
  to {
    transform: scaleY(1);
  }
}

@keyframes drip {
  0% {
    top: -40%;
  }
  100% {
    top: 100%;
  }
}

@keyframes dash {
  to {
    stroke-dashoffset: -34;
  }
}

@keyframes projIn {
  from {
    opacity: 0;
    transform: translateY(24px) scale(0.98);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

@keyframes swap {
  0% {
    opacity: 0.2;
    filter: blur(4px);
  }
  100% {
    opacity: 1;
    filter: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
  html {
    scroll-behavior: auto;
  }
  .reveal {
    opacity: 1;
    transform: none;
  }
}
