/*
 * qarap — марка D2 V1 «Q-ядро».
 * Канон формы: docs/brand/06-mark.md (правила Ф1–Ф10, геометрия §5).
 * Канон движения: docs/brand/07-motion.md §5 (аккомодация), §7 (имя keyframes).
 *
 * Знак живёт ВНЕ .lens-scene (шапки, лоадер, лендинг), поэтому токены сцены
 * ему не наследуются напрямую — он маппит их с фолбэком на тёмную тему.
 * Внутри .lens-scene фолбэк не срабатывает и знак берёт токены сцены,
 * включая светлую через .lens-scene[data-theme="light"].
 *
 * Тема НЕ привязана к prefers-color-scheme: прод сейчас жёстко тёмный
 * (<html class="dark">), и системная светлая тема у пользователя перекрасила
 * бы знак в тёмно-серый на тёмном фоне. Светлая включается тем же явным
 * сигналом, что и в tokens-d3.css. Исключение — favicon.svg: он живёт в хроме
 * браузера, а не на странице, поэтому у него prefers-color-scheme на месте.
 */

.qarap-mark {
  /* Ф7: ничего третьего — только silver-линия и teal-ядро */
  --mk-line: var(--structure, #C7CDD6);
  --mk-core: var(--teal, #3FE0D0);
  --mk-dur: var(--dur-ambient, 3400ms);
  --mk-ease: var(--ease-ambient, ease-in-out);

  display: block;
  width: 100%;
  height: auto;
  /* Ф8: ни градиентов, ни фильтров — drop-shadow тотема умер здесь */
}

/* Моно живёт в строке текста и садится на базовую линию; цвет — currentColor.

   Размер НЕ привязан к кеглю (1em): при 12px подписи полный знак вырождается
   в мутное колечко — страты сливаются, хвост Q пропадает, то есть отваливается
   ровно то, чем V5 опознаётся. Это тот же порог, что описан в 06-mark.md §12 O3
   для фавикона, только там его закрывает редукция flat-round, а §6 отправляет
   mono в текстовый контекст без оговорки о нижней границе. 20px — измеренный
   минимум, на котором страты ещё считаются (проверено рендером 16/24/36).
   Переопределяется точечно через --mk-mono-size. */
.qarap-mark-mono {
  display: inline-block;
  width: var(--mk-mono-size, 20px);
  height: var(--mk-mono-size, 20px);
  vertical-align: -0.3em;
  flex-shrink: 0;
}

[data-theme="light"] .qarap-mark,
.qarap-mark[data-theme="light"] {
  --mk-line: var(--structure, #4E5765);
  --mk-core: var(--teal, #0C877A);
}

/* Аккомодация — 07-motion.md §5: transform:scale зрачка ±.06 + opacity
   катч-лайта, 3400ms ease-in-out. Единственная симметричная кривая в системе:
   только амбиент возвращается туда, откуда вышел.

   06-mark.md §7: transform-box/transform-origin обязательны — без них
   масштабирование пойдёт от угла холста, а не от центра зрачка.
   Ноды адресуются классами, а не каноническими id #mark-pupil /
   #mark-catchlight: знак существует на странице дважды (лоадер layout.html
   поверх собственного знака boot.html / страницы персонажа), а id обязан быть
   уникальным. Ф6 требует именованных адресуемых нод — требование выполнено,
   носитель имени сменён с id на класс. Уникальный id остался на маске. */
.qarap-mark .mark-pupil {
  transform-box: fill-box;
  transform-origin: center;
  animation: mark-accommodate var(--mk-dur) var(--mk-ease) infinite;
}

.qarap-mark .mark-catchlight {
  transform-box: fill-box;
  transform-origin: center;
  animation: mark-catch var(--mk-dur) var(--mk-ease) infinite;
}

@keyframes mark-accommodate {
  0%, 100% { transform: scale(0.94); }
  50%      { transform: scale(1.06); }
}

/* Катч-лайт — узел ВНУТРИ маски: снижение непрозрачности ослабляет выбивку,
   то есть свет гаснет (06-mark.md §7). Идёт в фазе со зрачком: шире зрачок —
   больше света. */
@keyframes mark-catch {
  0%, 100% { opacity: 0.72; }
  50%      { opacity: 1; }
}

/* =========================================================================
   Тотемный прелоадер — «Каскад знания» (D7 V1, вариант V2, принят 2026-08-25).
   Опрос слоев памяти: волновой импульс от ядра через 3 страты к горизонту.
   Стаггер 90 мс на страту (канонический эталон Т3).
   ========================================================================= */
.qarap-totem .qarap-mark .mark-strata-1 {
  animation: mark-strata-wave 1350ms cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
  animation-delay: 0ms;
}

.qarap-totem .qarap-mark .mark-strata-2 {
  animation: mark-strata-wave 1350ms cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
  animation-delay: 90ms;
}

.qarap-totem .qarap-mark .mark-strata-3 {
  animation: mark-strata-wave 1350ms cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
  animation-delay: 180ms;
}

.qarap-totem .qarap-mark .mark-horizon {
  animation: mark-horizon-wave 1350ms cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
  animation-delay: 270ms;
}

.qarap-totem .qarap-mark .mark-tail {
  animation: mark-tail-pulse 1350ms ease-out infinite;
  animation-delay: 270ms;
}

.qarap-totem .qarap-mark .mark-pupil {
  animation: mark-pupil-cascade 1350ms ease-out infinite;
}

.qarap-totem .qarap-mark .mark-catchlight {
  animation: mark-catch-cascade 1350ms ease-out infinite;
}

@keyframes mark-strata-wave {
  0%   { opacity: 0.35; stroke-width: 3; }
  25%  { opacity: 1;    stroke-width: 4.2; }
  60%  { opacity: 0.45; stroke-width: 3; }
  100% { opacity: 0.35; stroke-width: 3; }
}

@keyframes mark-horizon-wave {
  0%   { opacity: 0.4; }
  30%  { opacity: 1; stroke-width: 5; }
  70%  { opacity: 0.5; stroke-width: 4; }
  100% { opacity: 0.4; }
}

@keyframes mark-tail-pulse {
  0%, 100% { opacity: 0.4; }
  35%      { opacity: 1; stroke-width: 6.5; }
  70%      { opacity: 0.5; stroke-width: 5; }
}

@keyframes mark-pupil-cascade {
  0%   { transform: scale(0.9); }
  20%  { transform: scale(1.22); }
  50%  { transform: scale(0.95); }
  100% { transform: scale(0.9); }
}

@keyframes mark-catch-cascade {
  0%   { opacity: 0.5; }
  20%  { opacity: 1; }
  60%  { opacity: 0.65; }
  100% { opacity: 0.5; }
}

/* М11: при отвале соединения аккомодация ОСТАНАВЛИВАЕТСЯ, а не ускоряется.
   Хук для будущего индикатора живости; в лоадере не используется. */
.qarap-mark--still .mark-pupil,
.qarap-mark--still .mark-catchlight {
  animation: none;
}

/* М9 / 07-motion.md §8: reduced-motion гасит движение, но не информацию.
   Базовое состояние знака — осевшее и читаемое, поэтому обнуления достаточно. */
@media (prefers-reduced-motion: reduce) {
  .qarap-mark .mark-pupil,
  .qarap-mark .mark-catchlight,
  .qarap-mark .mark-strata-1,
  .qarap-mark .mark-strata-2,
  .qarap-mark .mark-strata-3,
  .qarap-mark .mark-horizon,
  .qarap-mark .mark-tail {
    animation: none;
  }
}
