/* ATC v2 • слой движения (#993, Daryn 20.10). Только движение: цвета, радиусы, тени и размеры живут в
   v2-tokens.css и v2-components.css и здесь не меняются. Длительности и кривые — токены ниже; в правилах
   ниже и в шаблонах голых ms и cubic-bezier нет (страж test_motion_993.py).
   Токены на :root, а не на .atc-v2: их читают псевдоэлементы перехода страниц (::view-transition-*),
   а они растут от <html>. */
:root {
  --v2-dur-instant: 100ms;  /* нажатие */
  --v2-dur-fast: 120ms;     /* наведение, смена цвета, уход */
  --v2-dur-base: 180ms;     /* меню, всплывающее окно, вкладка, боковая панель */
  --v2-dur-reveal: 240ms;   /* раскрытие блока */
  --v2-dur-update: 360ms;   /* подсветка обновлённого числа */
  --v2-dur-page: 280ms;     /* переход между страницами */
  --v2-dur-enter: 240ms;    /* появление карточки и строки — не дольше 0,3 с (решение Daryn 20.10, п. 9) */
  --v2-dur-chart: 300ms;    /* рост столбца, полосы, графика */
  --v2-dur-theme: 640ms;    /* круговая шторка темы */
  --v2-stagger: 24ms;       /* шаг каскада — только при первом заходе за день */
  --v2-tip-delay: 400ms;    /* задержка подсказки значка: мимолётный курсор её не открывает */
  --v2-ease-out: cubic-bezier(.16, 1, .3, 1);      /* приход: быстрый старт, мягкая остановка */
  --v2-ease-in-out: cubic-bezier(.65, 0, .35, 1);  /* смена состояния на месте */
  --v2-ease-in: cubic-bezier(.55, 0, 1, .45);      /* уход */
  --v2-ease-standard: cubic-bezier(.2, .8, .2, 1); /* прежняя кривая кита */
  --v2-enter-y: 12px;       /* сдвиг появления */
  --v2-lift-card: -4px;     /* подъём карточки-ссылки под мышью */
  --v2-lift-button: -1px;   /* подъём кнопки под мышью */
  --v2-press: .97;          /* сжатие при нажатии */
  --v2-d: 0;                /* шаг каскада элемента — ставит скрипт в <head> */
  --v2-theme-x: 50%;        /* центр и радиус шторки темы — ставит themeSwap */
  --v2-theme-y: 0px;
  --v2-theme-r: 150vmax;
  --v2-spin: 1000ms;        /* оборот значка «идёт» (сбор лотов) — бесконечный признак работы, не появление */
}
/* Прежние имена кита — из того же источника и с теми же значениями. */
.atc-v2 {
  --v2-fast: var(--v2-dur-fast);
  --v2-normal: var(--v2-dur-base);
  --v2-reveal: var(--v2-dur-reveal);
  --v2-update: var(--v2-dur-update);
  --v2-ease: var(--v2-ease-standard);
}

/* ── Появление при заходе на страницу ──
   Класс v2-enter и метки data-v2-enter ставит скрипт в <head> (_v2_assets.html) до первой отрисовки, в порядке
   документа: первые 12 панелей и до 10 строк в списке, шаг --v2-d. Без скрипта меток нет — всё видно сразу.
   Решение Daryn 20.10 (п. 9): каскад с шагом — только при первом заходе за день; на остальных переходах панели
   появляются разом (v2-enter-quick: шаг 0, строки не метятся), не дольше --v2-dur-enter. Повторный заход на ту же
   страницу (быстрый просмотр, фильтр, отправка формы) движения не включает. */
@keyframes v2-enter { from { opacity: 0; transform: translateY(var(--v2-enter-y)); } }
@keyframes v2-enter-row { from { opacity: 0; transform: translateY(calc(var(--v2-enter-y) / 2)); } }
html.v2-enter [data-v2-enter] {
  animation: v2-enter var(--v2-dur-enter) var(--v2-ease-out) backwards;
  animation-delay: calc(var(--v2-d, 0) * var(--v2-stagger));
}
html.v2-enter [data-v2-enter="row"] { animation-name: v2-enter-row; }
html.v2-enter-quick { --v2-stagger: 0ms; }

/* ── Графики: столбцы растут снизу, полосы — слева, после своей карточки ── */
@keyframes v2-grow-y { from { transform: scaleY(0); } }
@keyframes v2-grow-x { from { transform: scaleX(0); } }
html.v2-enter :is(.v2-bar-fill, .v2-grow-y) {
  transform-origin: 50% 100%;
  animation: v2-grow-y var(--v2-dur-chart) var(--v2-ease-out) backwards;
  animation-delay: calc((var(--v2-d, 0) + 3) * var(--v2-stagger));
}
html.v2-enter .v2-minibar > span {
  transform-origin: 0 50%;
  animation: v2-grow-x var(--v2-dur-chart) var(--v2-ease-out) backwards;
  animation-delay: calc((var(--v2-d, 0) + 3) * var(--v2-stagger));
}

/* ── Наведение: карточка-ссылка поднимается, кнопка — на пиксель; нажатие сжимает. Только мышь;
   клавиатура получает кольцо фокуса без движения. Шапку не трогаем — она рабочий инструмент. ── */
.atc-v2 :is(a.v2-panel, a.v2-kpi, a.v2-board-item, a.co-card, a.rd-tile, a.v2-icon-tile) {
  transition: transform var(--v2-dur-base) var(--v2-ease-out), background-color var(--v2-dur-fast) var(--v2-ease-out),
              border-color var(--v2-dur-fast) var(--v2-ease-out), box-shadow var(--v2-dur-base) var(--v2-ease-out);
}
.atc-v2 :is(.v2-btn, .btn):not(.v2-header *) {
  transition-property: background-color, border-color, color, box-shadow, transform;
  transition-duration: var(--v2-dur-fast);
  transition-timing-function: var(--v2-ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .atc-v2 :is(a.v2-panel, a.v2-kpi, a.v2-board-item, a.co-card, a.rd-tile, a.v2-icon-tile):hover { transform: translateY(var(--v2-lift-card)); }
  .atc-v2 :is(.v2-btn, .btn):not(.v2-header *):hover:not(:disabled) { transform: translateY(var(--v2-lift-button)); }
}
.atc-v2 :is(a.v2-panel, a.v2-kpi, a.v2-board-item, a.co-card, a.rd-tile, a.v2-icon-tile):active { transform: translateY(0); transition-duration: var(--v2-dur-instant); }
.atc-v2 :is(.v2-btn, .btn):not(.v2-header *):active:not(:disabled) { transform: scale(var(--v2-press)); transition-duration: var(--v2-dur-instant); }

/* ── Раскрытие: меню, всплывающее окно, уведомление, вкладка, блок, мобильное меню ── */
@keyframes v2-pop-in { from { opacity: 0; transform: translateY(-4px) scale(.98); } }
@keyframes v2-rise-in { from { opacity: 0; transform: translateY(8px); } }
@keyframes v2-reveal-in { from { opacity: 0; transform: translateY(-4px); } }
@keyframes v2-tab-in { from { opacity: 0; transform: translateY(6px); } }
.atc-v2 .v2-popover.is-open { transform-origin: top left; animation: v2-pop-in var(--v2-dur-base) var(--v2-ease-out); }
.atc-v2 .v2-toast:not([hidden]) { animation: v2-rise-in var(--v2-dur-base) var(--v2-ease-out); }
.atc-v2 .v2-tabpanel.is-entering { animation: v2-tab-in var(--v2-dur-base) var(--v2-ease-out); }
.atc-v2 .v2-disclosure[open] > .v2-disclosure-content { animation: v2-reveal-in var(--v2-dur-reveal) var(--v2-ease-out); }
.atc-v2.v2-header .v2-nav.is-open { animation: v2-reveal-in var(--v2-dur-base) var(--v2-ease-out); }

/* ── Боковая панель: въезжает справа целиком при открытии, уходит быстрее, чем пришла. Закрытие ждёт
   transition-duration содержимого (v2-motion.js) — у него та же длительность, а движется сама панель. ── */
.v2-sheet[open] {
  transition: transform var(--v2-dur-base) var(--v2-ease-out), opacity var(--v2-dur-base) var(--v2-ease-out);
}
.v2-sheet[open][data-closing] {
  opacity: 0; transform: translateX(24px);
  transition-duration: var(--v2-dur-fast); transition-timing-function: var(--v2-ease-in);
}
.v2-sheet[open] .v2-sheet-content { transition-duration: var(--v2-dur-base); }
.v2-sheet[open][data-closing] .v2-sheet-content { opacity: 1; transform: none; transition-duration: var(--v2-dur-fast); }
.v2-sheet::backdrop { transition: opacity var(--v2-dur-base) var(--v2-ease-out); }
.v2-sheet[data-closing]::backdrop { opacity: 0; transition-duration: var(--v2-dur-fast); }
@starting-style {
  .v2-sheet[open] { opacity: 0; transform: translateX(32px); }
  .v2-sheet[open]::backdrop { opacity: 0; }
}

/* ── Переход между страницами (View Transitions; браузер без поддержки грузит страницу как раньше).
   Шапка стоит на месте, отметка раздела в меню переезжает к новому пункту, быстрый просмотр ленты
   сменяется сдвигом. ── */
@view-transition { navigation: auto; }
.atc-v2.v2-header { view-transition-name: v2-header; }
.atc-v2.v2-header .v2-nav > a[aria-current="page"] { view-transition-name: v2-nav-current; }
.feed-page .preview-panel { view-transition-name: v2-preview; }
::view-transition-group(*) { animation-duration: var(--v2-dur-page); animation-timing-function: var(--v2-ease-out); }
::view-transition-old(root), ::view-transition-new(root) { animation-duration: var(--v2-dur-page); animation-timing-function: var(--v2-ease-out); }
@keyframes v2-vt-out { to { opacity: 0; } }
@keyframes v2-vt-in { from { opacity: 0; transform: translateX(12px); } }
::view-transition-old(v2-preview) { animation: v2-vt-out var(--v2-dur-fast) var(--v2-ease-in) both; }
::view-transition-new(v2-preview) { animation: v2-vt-in var(--v2-dur-page) var(--v2-ease-out) both; }

/* ── Смена темы: новая тема раскрывается кругом от кнопки (v2-motion.js, themeSwap) ── */
@keyframes v2-theme-reveal {
  from { clip-path: circle(0 at var(--v2-theme-x, 50%) var(--v2-theme-y, 0)); }
  to { clip-path: circle(var(--v2-theme-r, 150vmax) at var(--v2-theme-x, 50%) var(--v2-theme-y, 0)); }
}
html.v2-theme-swap :is(.v2-header, .v2-header .v2-nav > a, .preview-panel) { view-transition-name: none !important; }
html.v2-theme-swap::view-transition-old(root), html.v2-theme-swap::view-transition-new(root) { animation: none; mix-blend-mode: normal; }
html.v2-theme-swap::view-transition-new(root) { animation: v2-theme-reveal var(--v2-dur-theme) var(--v2-ease-out); }

/* ── «Уменьшить движение»: движения нет нигде — ни каскада, ни переходов, ни шторки
   (скрипты проверяют то же условие). Печать — без анимации. ── */
@media (prefers-reduced-motion: reduce) {
  @view-transition { navigation: none; }
  :root {
    --v2-dur-instant: 0ms; --v2-dur-fast: 0ms; --v2-dur-base: 0ms; --v2-dur-reveal: 0ms; --v2-dur-update: 0ms;
    --v2-dur-page: 0ms; --v2-dur-enter: 0ms; --v2-dur-chart: 0ms; --v2-dur-theme: 0ms;
    --v2-stagger: 0ms; --v2-enter-y: 0px; --v2-lift-card: 0px; --v2-lift-button: 0px; --v2-press: 1;
  }
  [data-v2-enter], .v2-bar-fill, .v2-grow-y, .v2-minibar > span, .v2-popover, .v2-toast, .v2-tabpanel, .v2-disclosure-content, .v2-sheet, .v2-sheet-content {
    animation: none !important; transition: none !important;
  }
  ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; }
}
@media print {
  [data-v2-enter], .v2-bar-fill, .v2-grow-y, .v2-minibar > span { animation: none !important; }
}
