/*
 * 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 / lab.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; }
}

/* М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 {
    animation: none;
  }
}
