/* ==========================================
   Keyframes
   ========================================== */

/* Переливающийся градиент текста */
@keyframes gradshift {
  0%   { background-position: 0%; }
  100% { background-position: 100%; }
}

/* Пульс dot в eyebrow */
@keyframes pulse {
  0%, 100% { opacity: .3; transform: scale(1); }
  50%       { opacity: 1;  transform: scale(1.3); }
}

/* Плавающие теги вокруг портала */
@keyframes floattag {
  from { transform: translateY(0); }
  to   { transform: translateY(-9px); }
}

/* Свечение sticky-кнопки Telegram */
@keyframes sbg {
  0%, 100% { box-shadow: 0 0 24px rgba(124,58,255,.4); }
  50%       { box-shadow: 0 0 48px rgba(255,60,172,.6), 0 0 24px rgba(124,58,255,.4); }
}

/* ==========================================
   Scroll Animations
   ========================================== */

/* Появление при скролле */
.fade-up {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .6s ease, transform .6s ease;
}

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

/* Stagger для карточек услуг */
.sc:nth-child(1) { transition-delay: .05s; }
.sc:nth-child(2) { transition-delay: .10s; }
.sc:nth-child(3) { transition-delay: .15s; }
.sc:nth-child(4) { transition-delay: .20s; }
.sc:nth-child(5) { transition-delay: .25s; }
.sc:nth-child(6) { transition-delay: .30s; }
.sc:nth-child(7) { transition-delay: .35s; }
.sc:nth-child(8) { transition-delay: .40s; }

/* ==========================================
   Reduced Motion
   ========================================== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    transition-duration: .01ms !important;
  }
  canvas { display: none; }
  .fade-up { opacity: 1; transform: none; }
}
