/* =====================================================================
   ЛЕВША — анимации публичного сайта.

   Единственное место, где живёт движение: кадры анимаций, начальные
   состояния появления и отключение анимаций по системной настройке.
   Оформление (цвета, шрифты, размеры) — в style.css, этот файл
   подключается сразу после него.
===================================================================== */

/* ---------------------------------------------------------------------
   Состояния появления
   Начальное положение элементов, которые проявляются при прокрутке.
   Дальше их доводит скрипт (initBatchReveal и GSAP в assets/js/main.js).
--------------------------------------------------------------------- */
.reveal{ opacity:0; transform:translateY(50px); }

/* reveal helper for JS */
.gsap-reveal{ opacity:0; transform:translateY(60px); }

/* ---------------------------------------------------------------------
   Кадры анимаций
   Все @keyframes сайта. Сами правила animation: остаются при своих
   компонентах в style.css — здесь только описания движения.
--------------------------------------------------------------------- */
@keyframes scrollDot{ 0%{ opacity:.15; transform:translateY(-4px);} 50%{opacity:1;} 100%{opacity:.15; transform:translateY(4px);} }

@keyframes marqueeMove{ from{ transform:translateX(0);} to{ transform:translateX(-50%);} }

@keyframes pulseDot{
  0%,100%{ box-shadow:0 0 0 0 rgba(216,30,44,.45); }
  50%{ box-shadow:0 0 0 7px rgba(216,30,44,0); }
}

@keyframes slChartGlow{
  0%, 100%{ transform:scale(1) translate(0,0); opacity:.65; }
  50%{ transform:scale(1.3) translate(-18px, 14px); opacity:1; }
}

@keyframes slChartPing{
  0%{ transform:scale(1); opacity:.7; }
  75%, 100%{ transform:scale(2.8); opacity:0; }
}

@keyframes okSparkFly{
  0%{ opacity:0; transform:translateZ(34px) translate(0,0) scale(1); }
  10%{ opacity:1; }
  100%{ opacity:0; transform:translateZ(34px) translate(var(--ox),var(--oy)) scale(.25); }
}

@keyframes okTlNowPulse{ 0%,100%{ box-shadow:0 0 0 6px rgba(255,59,59,.18); } 50%{ box-shadow:0 0 0 10px rgba(255,59,59,.05); } }

@keyframes il-road-draw{ to{ stroke-dashoffset:0; } }

@keyframes il-b-in{ to{ opacity:1; transform:scale(1); } }

@keyframes il-item-in{ to{ opacity:1; transform:none; } }

@keyframes il-win-flicker{
  0%, 100%{ opacity:0; }
  8%, 60%{ opacity:1; }
  74%{ opacity:.4; }
  82%{ opacity:.9; }
}

/* ---------------------------------------------------------------------
   Уважение к системной настройке «меньше движения»
   Если пользователь просил ограничить анимацию, гасим её. Файл
   подключается после style.css, поэтому эти правила перебивают
   объявления компонентов.
--------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce){
  .sl-ba-row{ opacity:1; transform:none; transition:none; }
}

@media (prefers-reduced-motion: reduce){
  .sl-chart-card::before, .sl-chart-card::after{ animation:none; }
  .sl-chart-line-ping.pinging{ animation:none; opacity:0; }
  .sl-chart-bar{ transition:none; }
}

/* Наклон — только там, где есть курсор; при «уменьшить движение»
   карточка просто появляется без въезда и не реагирует на мышь. */
@media (prefers-reduced-motion: reduce){
  .sl-card{ transform:none; transition:opacity .3s ease; }
  .sl-card::after{ display:none; }
}

@media (prefers-reduced-motion: reduce){
  .kc-card{ opacity:1; transform:none; transition:none; }
  .kc-card::before{ display:none; }
  .kc-media img{ transition:none; }
}

@media (prefers-reduced-motion: reduce){
  .tm-card{ opacity:1; transform:none; transition:none; }
  .tm-shine{ display:none; }
  .ok-founder-card, .ok-dir-card, .ok-ba-row{ opacity:1; transform:none; transition:none; }
}

@media (prefers-reduced-motion: reduce){
  .sv-row{ opacity:1; transform:none; transition:none; }
}

@media (prefers-reduced-motion: reduce){
  .in-panel{ opacity:1; transform:none; transition:none; }
  .in-strip:hover .in-panel:hover{ flex-grow:1; }
  .in-title-v{ opacity:0; }
  .in-body{ opacity:1; transform:none; }
}

@media (prefers-reduced-motion: reduce){
  .ar-featured, .ar-card{ opacity:1; transform:none; transition:none; }
  .ar-featured::before, .ar-card::before{ display:none; }
  .ar-f-media img, .ar-media img{ transition:none; }
}

@media(prefers-reduced-motion:reduce){
  .ok-spark{ animation:none; opacity:0; }
  .ok-mark-3d{ transition:none; }
}

@media (prefers-reduced-motion: reduce){
  .ok-title .line span{ transform:none !important; }
  .ok-tl-item-now .ok-tl-dot{ animation:none; }
  .ok-mission-em{ transition:none; background-position:0% 0; }
  .ok-value-ico, .ok-dir-ico{ opacity:1; transform:none; transition:none; }
  .ok-founder-photo{ filter:none; transition:none; }
  .ok-gallery-item, .ok-gallery-caption{ transition:none; }
  .ok-step{ opacity:1; transform:none; transition:none; }
}

@media(prefers-reduced-motion:reduce){
  .il-hv-road, .il-hv-b, .il-hv-win, .il-item, .il-hub-card, .il-hub-card::after, .il-roadmap-card{ animation:none !important; opacity:1 !important; transform:none !important; stroke-dashoffset:0 !important; }
}
