/* ────────────────────────────────────────────────────────────────────────
   КАСТОМНЫЕ ИКОНКИ SOMNIUM  (.sb-i / .sb-i-file)

   Набор: app/static/icon (сборка — dependencies/scripts/build_icons.py).
   Вставка: Jinja `{% from '_icon.html' import icon %}`, ES-модуль `icons.js`
   либо глобал `SomniumIcons` из `icons-core.js`.

   .sb-i      — интерфейсная, ОДНОЦВЕТНАЯ: цвет наследуется (stroke=currentColor),
                поэтому её можно красить как текст (`color: var(--warm)`).
   .sb-i-file — иконка ТИПА ФАЙЛА, многоцветная: используется как есть, НЕ красим.

   ОТДЕЛЬНЫЙ файл, а не часть somnium-ui.css: иконки есть на КАЖДОЙ странице,
   включая те, что не наследуют base.html и канон-слой компонентов не грузят
   (лендинг, вход, гостевая комната звонка, редактор и просмотрщик Drive).
   Без этих правил у <svg> нет размера и иконка рисуется во весь дефолт.
   Подключать сразу после main.css.
   ──────────────────────────────────────────────────────────────────────── */
.sb-i {
  display: inline-block; vertical-align: -0.15em; flex-shrink: 0;
  color: inherit; fill: none; stroke: currentColor;
  pointer-events: none;
}
/* Без явного width иконка масштабируется от font-size родителя — как раньше
   шрифтовая. Благодаря этому правила вида `.btn i { font-size: 1.1rem }`
   продолжают управлять размером после замены на кастомный набор. */
.sb-i:not([width]) { width: 1em; height: 1em; }
.sb-i-file { display: inline-block; vertical-align: middle; flex-shrink: 0; object-fit: contain; }
/* Тот же приём, что и у .sb-i: без явного width иконка типа файла тянется от
   font-size контейнера, поэтому её можно подставить вместо одноцветного глифа,
   не трогая CSS вокруг. Коэффициент больше единицы — рисунок типа детальнее
   интерфейсного глифа и на 1em читается хуже. */
.sb-i-file:not([width]) { width: 1.55em; height: 1.55em; }

/* Иконка как CSS-маска — для ::before/::after, куда SVG-элемент не вставить
   (стрелка селекта и т.п.). Красится через `background: currentColor`. */
:root {
  --sb-chevron-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
}

/* Анимации — замена спиннера/подпрыгивания, что были у шрифтовых иконок */
.sb-i--spin   { animation: sb-i-spin 1s linear infinite; }
.sb-i--bounce { animation: sb-i-bounce .9s ease infinite alternate; }
@keyframes sb-i-spin   { to { transform: rotate(360deg); } }
@keyframes sb-i-bounce { from { transform: translateY(0); } to { transform: translateY(-4px); } }
@media (prefers-reduced-motion: reduce) {
  .sb-i--spin, .sb-i--bounce { animation: none; }
}
