/* ============================================================
   Движение. Философия: контент появляется спокойно,
   ничего не движется само по себе и не зацикливается.
   Все правила обёрнуты в guard от prefers-reduced-motion,
   а режим «Без анимаций» панели (a11y-nomotion) перекрывает
   их через !important в a11y.css.
   ============================================================ */
/* Токены движения: единые длительности и easing для всего сайта.
   Никакого bounce/elastic/spring — только спокойное затухание */
:root {
  --motion-fast: .15s;    /* цвет, рамка, мелкие отклики */
  --motion-base: .25s;    /* панель, дропдаун, алерты */
  --motion-reveal: .45s;  /* появление секций при прокрутке */
  --motion-ease: cubic-bezier(.2, 0, 0, 1);
}
@media (prefers-reduced-motion: no-preference) {
  /* ----- 1. Плавный скролл к якорям (#contact, skip-link и т.п.) ----- */
  html {
    scroll-behavior: smooth;
  }
  /* ----- 2. Появление при прокрутке ----- */
  /* Класс .reveal ставит скрипт; .reveal-in — когда элемент вошёл в экран.
     Смещение маленькое (12px) — движение едва заметное, «дыхание»,
     а не полёт. Никаких bounce и масштабирований. */
  .reveal {
    opacity: 0;
    transform: translateY(12px);
    transition:
      opacity var(--motion-reveal) var(--motion-ease),
      transform var(--motion-reveal) var(--motion-ease);
  }
  .reveal-in {
    opacity: 1;
    transform: none;
  }
  /* Лёгкий каскад для карточек в сетке: каждая следующая чуть позже.
     Задержки маленькие и конечные — ждать никому не приходится */
  .reveal-d1 { transition-delay: .07s; }
  .reveal-d2 { transition-delay: .14s; }
  .reveal-d3 { transition-delay: .21s; }
  /* ----- 3. Микропереходы интерактива ----- */
  .btn {
    transition:
      background-color var(--motion-fast) var(--motion-ease),
      border-color var(--motion-fast) var(--motion-ease),
      color var(--motion-fast) var(--motion-ease),
      transform .1s ease;
  }
  .btn:not(:disabled):active {
    transform: translateY(1px);        /* тактильное «нажатие» */
    transition-duration: 0s, 0s, 0s, 0s;
    /* Мгновенное потемнение фона на нажатии: обратная связь материалом,
       а не амплитудой. На отпускании переход возвращается плавно */
  }
  .navbar .nav-link,
  a {
    transition: color var(--motion-fast) var(--motion-ease);
  }
  /* Карточка: рамка и лёгкая заливка фона при наведении (фон задаёт theme.css) */
  .card {
    transition:
      border-color var(--motion-fast) var(--motion-ease),
      background-color var(--motion-fast) var(--motion-ease);
  }
  /* Фото в карточках: едва заметное затемнение при наведении на ссылку */
  .card a img {
    transition: opacity .2s ease;
  }
  .card a:hover img {
    opacity: .92;
  }
  /* Подтверждение успеха: короткое спокойное проявление.
     Анимируется только opacity — макет не прыгает */
  @keyframes alert-in {
    from { opacity: 0; }
    to   { opacity: 1; }
  }
  .alert-success {
    animation: alert-in var(--motion-base) var(--motion-ease);
  }
  /* ----- 4. Переходы между страницами (View Transitions API) -----
     Кросс-документный кросс-фейд: Chrome/Edge/Safari/Opera, остальные
     браузеры (Firefox) просто мгновенно листают страницу — деградация
     идеальная. Только opacity, никаких перелистов и смещений
     (вестибюльная безопасность). Оптин объявлен ВНУТРИ этого media:
     пользователи с prefers-reduced-motion не подписываются на переходы
     вовсе. Режим «Без анимаций» панели гасит переход в motion.js —
     kill-switch a11y.css не накрывает псевдоэлементы ::view-transition-*,
     они живут вне потока потомков <html>. */
  @view-transition {
    navigation: auto;
  }
  ::view-transition-old(root),
  ::view-transition-new(root) {
    animation-duration: var(--motion-base);
    animation-timing-function: var(--motion-ease);
  }
  /* Панель доступности и выпадашки Bootstrap анимирует сам Bootstrap —
     ничего не добавляем, чтобы не задваивать движение */
}
/* Вне media-query ничего анимационного быть не должно:
   так пользователи с включённым «уменьшить движение»
   получают полностью статичный сайт без единого перехода */