/* ШРИФТ ПРОЕКТА.

   До этого своего шрифта у сайта не было: Bootstrap перечисляет системные, и
   браузер берёт первый попавшийся. На Windows выходил Segoe UI, на Маке другой,
   а на сервере при печати отчёта не находилось ни одного из списка, и Chromium
   брал запасной DejaVu Sans. Из-за этого PDF выглядел иначе, чем экран.

   Теперь шрифт свой и локальный: одинаково на любой машине и в печати.

   Кириллица и латиница объявлены отдельными наборами с указанием диапазонов -
   браузер скачивает только то, что реально встретилось на странице. Русскому
   интерфейсу латинский файл почти не нужен, и наоборот.

   font-display: swap - текст показывается сразу запасным шрифтом и
   переключается, когда файл доедет. Без этого страница на мгновение пустая, а
   при печати это означало бы документ без единой буквы. */

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/inter-cyr-400.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/inter-lat-400.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+2000-206F,
                 U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/inter-cyr-600.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/inter-lat-600.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+2000-206F,
                 U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215;
}

/* Задаём через переменную Bootstrap, а не поверх его правил: так шрифт
   подхватывают ВСЕ его компоненты разом - кнопки, поля, таблицы, всплывашки,
   где Bootstrap задаёт шрифт сам и перебил бы простое правило для body.

   Системный список оставлен запасным: если файл не отдастся (сеть, ошибка
   сборки статики), страница не останется без букв, а вернётся к прежнему виду.

   Полужирного начертания только два (400 и 600), поэтому 700 и 800 браузер
   дорисует синтетически - для интерфейса это нормально. */
:root {
  --bs-font-sans-serif: "Inter", system-ui, -apple-system, "Segoe UI", Roboto,
    "Helvetica Neue", Arial, sans-serif;
}
body {
  font-family: var(--bs-font-sans-serif);
}

/* ЕДИНЫЙ РАЗМЕР ТЕКСТА В ТАБЛИЦАХ.

   Таблиц в проекте больше сорока, и часть из них помечена классом small, а
   часть нет: одни и те же по смыслу списки выглядели по-разному, а таблица
   событий на Сводке казалась вдвое крупнее соседнего рейтинга URL.

   Задаём размер один раз здесь, а не правкой сорока файлов: так новая таблица
   получит его сама, и разъехаться заново уже не сможет.

   0.875rem это ровно то, что даёт класс small у Bootstrap, поэтому таблицы,
   где он уже стоял, не изменятся вовсе. */
.table { font-size: .875rem; }

/* Плотные таблицы (распределение, сниппеты) задают свой размер сами и остаются
   как были: там колонок много и каждый пиксель на счету. */

/* ШАПКИ ТАБЛИЦ: ЕДИНОЕ ПОВЕДЕНИЕ ВО ВСЁМ ПРОЕКТЕ.

   Что было не так после смены шрифта. У Inter другая ширина знаков, и в
   заголовках перестали помещаться стрелка сортировки и знак вопроса: где-то
   он прижимался вплотную, где-то уезжал за границу, где-то соседняя колонка
   наезжала сверху. А там, где заголовок всё же переносился, строки шапки
   получались разной высоты, и колонки «скакали».

   Правило одно на все таблицы, а не правка 86 мест в семи файлах:

   1. Заголовок переносится ПО СЛОВАМ. Не рвём слово посередине: длинное слово
      само раздвинет колонку, и это правильнее, чем «Часто-та».
   2. Знак вопроса и стрелка не отрываются от текста и не сжимаются.
   3. Все ячейки шапки выровнены по вертикали посередине - тогда разное число
      строк в соседних заголовках не создаёт ступенек.
   4. Подписи второй строкой (регион, устройство, даты съёма) везде одного
      размера: раньше в одних таблицах они были мельче, в других крупнее. */
.table thead th {
  white-space: normal;          /* перенос разрешён */
  word-break: normal;           /* но НЕ посреди слова */
  overflow-wrap: normal;
  vertical-align: middle;
  padding-right: .5rem;
}
.table thead th .metric-help,
.table thead th [data-bs-toggle="popover"] {
  white-space: nowrap;
  display: inline-block;
  margin-left: .15rem;
}
/* вторая строка заголовка: регион, устройство, даты - один размер везде */
.table thead th .small,
.table thead th > div:not(.d-flex) { font-size: .72rem; line-height: 1.25; }

/* Ячейки данных тоже по центру: иначе строка с переносом визуально «скачет»
   относительно соседних. */
.table td { vertical-align: middle; }

/* Числовые заголовки (они по центру) НЕ переносим: там короткие подписи вроде
   «Запросов», «% ТОП-10», «Ср. поз.», и перенос только рвал их и отрывал знак
   вопроса. Перенос остаётся у текстовых заголовков слева, где он и нужен. */
.table thead th.text-center { white-space: nowrap; }

/* Числовые колонки: содержимое переносить нельзя, иначе «1 234» и «5 -12»
   разваливаются на две строки. */
.table td.rep-num, .table td.dstz-c-num, .table th.dstz-c-num,
.table td.text-nowrap { white-space: nowrap; }
