/* Voxidub — движение. Быстро и без пружин: интерфейс работает через SignalR
   при пинге 40–70 мс, любая длинная анимация читается как лаг.
   Исключение — «живые» индикаторы (запись, обработка), они пульсируют бесконечно. */
:root{
  --dur-instant:90ms; /* @kind other */
  --dur-fast:140ms; /* @kind other */
  --dur-base:200ms; /* @kind other */
  --dur-slow:320ms; /* @kind other */
  --ease-out:cubic-bezier(.22,.68,.28,1); /* @kind other */
  --ease-in-out:cubic-bezier(.5,.05,.35,1); /* @kind other */
  --ease-soft:cubic-bezier(.34,1.2,.64,1); /* @kind other */ /* лёгкий доводчик, только для появления карточек */
  --transition-control:background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out), transform var(--dur-instant) var(--ease-out);
}
@keyframes vx-pulse{0%,100%{opacity:1}50%{opacity:.45}}
@keyframes vx-rec{0%{box-shadow:0 0 0 0 var(--record-ring)}70%{box-shadow:0 0 0 12px rgba(255,92,72,0)}100%{box-shadow:0 0 0 0 rgba(255,92,72,0)}}
@keyframes vx-shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
@keyframes vx-spin{to{transform:rotate(360deg)}}
@keyframes vx-rise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
