/* NEURIX ambient — тонкая жизнь фона, не мультик.
   Подключается через <link rel="stylesheet" href="/_ambient.css">
   Применяется на всех страницах кроме /. Интро его не трогает. */

/* 1. Grain drift — смещение film grain'а */
@keyframes neurix-grain-drift {
  0%   { transform: translate3d(0, 0, 0); }
  50%  { transform: translate3d(0, -2px, 0); }
  100% { transform: translate3d(0, 0, 0); }
}

body::before {
  animation: neurix-grain-drift 12s ease-in-out infinite;
}

/* 2. Vignette — очень медленное дыхание углов */
body::after {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 9;
  background:
    radial-gradient(
      ellipse at 50% 0%,
      rgba(255,255,255,0.018) 0%,
      rgba(0,0,0,0) 45%
    ),
    radial-gradient(
      ellipse at 50% 100%,
      rgba(255,255,255,0.012) 0%,
      rgba(0,0,0,0) 45%
    );
  opacity: 0.7;
  animation: neurix-vignette-breathe 14s ease-in-out infinite;
}

@keyframes neurix-vignette-breathe {
  0%   { opacity: 0.55; }
  50%  { opacity: 0.85; }
  100% { opacity: 0.55; }
}

/* 3. Shimmer на акцентных <strong> (в .lede и p > strong) */
.lede strong,
p strong,
.law-body {
  animation: neurix-shimmer 7s ease-in-out infinite;
}

@keyframes neurix-shimmer {
  0%, 100% { text-shadow: 0 0 20px rgba(255,255,255,0.18); }
  50%      { text-shadow: 0 0 28px rgba(255,255,255,0.28); }
}

/* для .lede strong — чуть сильнее */
.lede strong {
  animation: neurix-shimmer-lede 8s ease-in-out infinite;
}
@keyframes neurix-shimmer-lede {
  0%, 100% { text-shadow: 0 0 22px rgba(255,255,255,0.20); }
  50%      { text-shadow: 0 0 34px rgba(255,255,255,0.32); }
}

/* stat-num тоже слегка дышит */
.stat-num {
  animation: neurix-shimmer 9s ease-in-out infinite;
}

/* 4. Nav scroll progress — 1px линия под nav */
.nav-progress {
  position: fixed;
  top: 0;
  left: 0;
  height: 1px;
  width: 0%;
  background: linear-gradient(
    90deg,
    rgba(255,255,255,0.0) 0%,
    rgba(255,255,255,0.55) 60%,
    rgba(255,255,255,0.0) 100%
  );
  z-index: 30;
  pointer-events: none;
  transition: width 0.1s linear;
}

/* 5. Reveal переделан чуть богаче — минимальный stagger при появлении через .reveal
   (переопределяем существующий transition для большей плавности) */
.reveal {
  transition:
    opacity 1.2s cubic-bezier(0.2, 1, 0.3, 1),
    transform 1.2s cubic-bezier(0.2, 1, 0.3, 1),
    filter 1.2s cubic-bezier(0.2, 1, 0.3, 1) !important;
}

/* 6. Уважаем prefers-reduced-motion — глушим всё ambient */
@media (prefers-reduced-motion: reduce) {
  body::before,
  body::after,
  .lede strong,
  p strong,
  .law-body,
  .stat-num {
    animation: none !important;
  }
  .nav-progress { display: none; }
  .reveal { transition: none !important; }
}
