/* Баскетбольные блоки V5: структура и РОЛИ цвета.
   Собран из clubs/scripts/basketball/theme_layer/blocks — правится ТАМ.
   ⚠ Подключается ПЕРВЫМ, bb-paint.css — вторым. Порядок обязателен. */

/* Единственное, что честно общее у четырёх тем: герб-заглушка и правило
   про числа в зеркальной вёрстке. Всё остальное — своё у каждой темы, потому
   что темы различаются не краской, а тем, как они складывают блок. */

.bb-crest {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  object-fit: contain;
  border-radius: 50%;
}

/* Заглушка, когда герб недоступен: первая буква названия в кружке.
   Цвета кружка задаёт тема — здесь только форма. */
.bb-crest--mono {
  font-weight: 800;
  line-height: 1;
  text-transform: uppercase;
}

/* Числа не зеркалим никогда: счёт, проценты и минуты читаются слева направо
   и в арабской вёрстке тоже. */
[dir="rtl"] .v5-table td:not(.v5-l),
[dir="rtl"] .v1-table td:not(.c-team),
[dir="rtl"] .v2-table td:not(.v2-l),
[dir="rtl"] .v4-table td:not(.v4-l),
[dir="rtl"] .v5-bignum, [dir="rtl"] .v5-tnum, [dir="rtl"] .v5-feat__score,
[dir="rtl"] .v1-card__num, [dir="rtl"] .v1-rcard__score,
[dir="rtl"] .v2-snum, [dir="rtl"] .v2-rscore,
[dir="rtl"] .v4-ldr__num, [dir="rtl"] .v4-mscore {
  direction: ltr;
  unicode-bidi: isolate;
}

/* ═══════════════════════════════════════════════════════════════════════════
   ЗЕРКАЛЬНАЯ ВЁРСТКА (арабский)

   Что зеркалим, а что нет. Зеркалим то, что несёт НАПРАВЛЕНИЕ ЧТЕНИЯ:
   выключку текста, рамку-разделитель слева/справа, полоску-указатель своего
   клуба, номер игрока в углу карточки. Не зеркалим числа (правило выше),
   стрелки календаря (их зеркалит сам браузер вместе с порядком плиток) и углы
   скруглений.

   ⛔ Селекторы с `.bb-vN` внутри нужны там, где то же свойство задаёт слой
   краски: у `.bb-v5 .v5-row__date` вес 0,2,0 — ровно как у `[dir="rtl"]
   .v5-row__date`, и при равном весе побеждает тот, кто ПОЗЖЕ, а краска
   подключается после структуры. Поэтому там вес поднят до 0,3,0.

   ⛔ Ленту (штаб, награды, лидеры на мобильной) CSS не зеркалит: сдвиг
   считает скрипт в пикселях. Знак сдвига он берёт из вычисленного
   `direction` — см. bb-blocks.js, функция показать().
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── выключка в таблицах: колонка команды ── */
[dir="rtl"] .v1-table .c-team,
[dir="rtl"] .v2-table .v2-l,
[dir="rtl"] .v4-table .v4-l,
[dir="rtl"] .v5-table .v5-l,
[dir="rtl"] .v2-shead span:nth-child(2),
[dir="rtl"] .v2-sname,
[dir="rtl"] .v2-srow--st span,
[dir="rtl"] .v1-card--player {
  text-align: right;
}

/* ── выключка «второй команды» в паре ── */
[dir="rtl"] .v2-rteam--away,
[dir="rtl"] .v5-feat__team--r,
[dir="rtl"] .v5-row__t--r,
[dir="rtl"] .v2-live__r,
[dir="rtl"] .v4-live__r {
  text-align: left;
}

/* ── номер игрока в углу карточки ── */
[dir="rtl"] .v1-card__no {
  right: auto;
  left: 12px;
}

[dir="rtl"] .v1-card__name {
  padding-right: 0;
  padding-left: 34px;
}

[dir="rtl"] .v5-player__bg {
  right: auto;
  left: -8px;
}

/* ── рамка-разделитель даты в строке матча ── */
[dir="rtl"] .bb-v5 .v5-row__date {
  border-right: 0;
  border-left: 1px solid var(--bb-line);
}

/* ── полоска-указатель «это мой клуб» и её родня ── */
[dir="rtl"] .v1-me,
[dir="rtl"] .v4-me,
[dir="rtl"] .bb-v5 .v5-me,
[dir="rtl"] .v4-pair--me {
  box-shadow: inset -3px 0 0 var(--bb-accent);
}

[dir="rtl"] .bb-v5 .v5-pair--me {
  box-shadow: inset -4px 0 0 var(--fnwv5-secondary, var(--bb-accent));
}

/* ── боковая рамка строк и пар у V2 и V4 ── */
[dir="rtl"] .v2-rrow,
[dir="rtl"] .v2-live,
[dir="rtl"] .v2-pair,
[dir="rtl"] .bb-v4 .v4-kv > div {
  border-left: 0;
  border-right: 3px solid transparent;
}

[dir="rtl"] .v2-rrow.is-w:hover {
  border-right-color: var(--bb-win-ink);
}

[dir="rtl"] .v2-rrow.is-l:hover {
  border-right-color: var(--bb-loss-ink);
}

[dir="rtl"] .v2-pair--me,
[dir="rtl"] .v2-rrow--fx:hover {
  border-right-color: var(--bb-accent);
}

/* ── стрелка у ссылки «весь список» показывает В СТОРОНУ ЧТЕНИЯ ── */
[dir="rtl"] .bb-alllink::after {
  content: ' \2190';
}

/* ═══════════════════════════════════════════════════════════════════════════
   МЕСТО ПОД ПОРТРЕТ: сам снимок
   ═══════════════════════════════════════════════════════════════════════════
   Разметку места печатает общее ядро (`fnwbb_figure` в bb-blocks-core.php) —
   одно на все четыре баскетбольные темы. Поэтому правило КАРТИНКИ стоит здесь,
   в общей части: в css2-v5.css оно было только у V5, и в темах 1/2/4 настоящий
   снимок вывелся бы своим натуральным размером, разломав карточку.

   Снимок ожидается ВЫРЕЗАННЫМ — фон убран, кадр «голова, плечи, грудь». Готовит
   его при заливке `clubs/scripts/basketball/theme_layer/bb_photo_bust.py`,
   адреса складывает в опцию `fnw_bb_photos` заливщик `bb_photo_to_wp.py`, а
   тема берёт адрес через `fnwbb_photo_url()`. Нет снимка — рисуется силуэт.

   ⛔ Показываем ЦЕЛИКОМ (`contain`) и садим на нижнюю кромку. `cover` подрезал
   плечи: место под портрет у карточки игрока 46 % ширины, у лидеров 42 %, на
   телефоне своя пропорция — под каждую `cover` резал по-своему. У вырезки фона
   нет, обрезать нечего; прозрачные поля по бокам закрывает заливка карточки.

   Геометрию САМОГО места (`.bb-fig`) задаёт тема: у каждой свои пропорции. */
.bb-fig__ph {
  width: 100%; height: 100%; display: block;
  object-fit: contain; object-position: bottom center;
}
/* ═══════════════════════════════════════════════════════════════════════════
   ВТОРОЙ КЛУБНЫЙ ЦВЕТ — НА :root

   ⛔ Чистый цвет и подложка объявлены здесь, а не внутри `.bb-vN`, потому что
   ими красятся элементы САМОЙ ТЕМЫ: подчёркивание заголовка секции, стык
   блоков, кнопка протокола в карточке. Переменная, объявленная только внутри
   обёртки блока, за её пределами не существует, и правило целиком становится
   недействительным — подчёркивания заголовков просто не появлялось, и причина
   была не в цвете, а в области действия переменной.

   `--bb-brand2-ink` остаётся у обёрток: он зависит от чернил ПОВЕРХНОСТИ.
   ═══════════════════════════════════════════════════════════════════════════ */
:root {
  --bb-brand2-base: var(--fnwv5-secondary, var(--secondary, var(--club-secondary, #a50301)));
  --bb-brand2: var(--bb-brand2-base);
  --bb-brand2-soft: color-mix(in srgb, var(--bb-brand2-base) 18%, transparent);
}

/* ═══ РОЛИ ЦВЕТА В БАСКЕТБОЛЬНЫХ БЛОКАХ ═══
   Блоки НЕ задают ни одного цвета сами. Они пользуются ролями, а роли берут
   значения из токенов темы, которые тема уже вывела из клубных цветов.
   Отсюда правило: поменялся клуб — блок перекрасился, и ничего в нём не правится.

   Ролей девять, и делятся они на три группы.

   ── Поверхности ──────────────────────────────────────────────────────────
   --bb-ground    на чём лежит блок (фон страницы или панель темы)
   --bb-surface   карточка, строка, плитка — на шаг в сторону от фона
   --bb-ink       основной текст
   --bb-muted     подписи
   --bb-line      разделители

   ── Бренд ────────────────────────────────────────────────────────────────
   --bb-brand         клубный цвет для ЗАЛИВОК (шапка плитки, полоса, чип)
   --bb-on-brand      текст поверх такой заливки
   --bb-mine          подсветка строки своего клуба
   --bb-accent        клубный цвет для ПОДПИСЕЙ на текущей поверхности
   --bb-accent-data   он же для ЦИФР — порог контраста ВЫШЕ

   Почему акцентов два. Так решил владелец на V5: колонку очков при контрасте
   2.6 назвал нечитаемой, а подпись лиги при 2.7 — нормальной. Цифру читают
   глазами по одной, подпись — узнают целиком. Порог для данных 4.0, для
   подписей 3.0, и оба считает тема, а не блок.

   Почему акцент привязан к поверхности. Один и тот же клубный цвет на белом
   фоне и на тёмной клубной карточке читается по-разному. Тема даёт три пары
   токенов — под фон страницы, под карточку из primary и под карточку из theme.
   Блок переключает роль классом, а не подбирает цвет.

   ── Семантика ────────────────────────────────────────────────────────────
   --bb-win --bb-loss --bb-live

   ЭТИ ТРИ НИКОГДА НЕ БЕРУТСЯ ИЗ БРЕНДА. У клуба с красным primary поражение,
   покрашенное брендом, читается как фирменный элемент, а победа — как чужой.
   Зелёный, красный и янтарный держим отдельно; тема их уже объявила
   (`--result-win` / `--result-loss` в V1), где нет — задаём нейтральные.

   ── Градиенты ────────────────────────────────────────────────────────────
   --bb-grad-a --bb-grad-b   концы клубного градиента

   Градиент ставим ТОЛЬКО под элементы «геройского» веса: крупные плитки
   сводки, выделенный матч, блок идущего матча. Под таблицу и строки — нет:
   цифры на переливе читаются хуже, а на длинной странице это ещё и лишняя
   перерисовка при прокрутке.

   Анимированный градиент — ровно одно место: идущий матч. Там движение
   означает «прямо сейчас меняется», то есть несёт смысл. Везде ещё оно было
   бы украшением. Выключается по prefers-reduced-motion. */


/* ─────────── V5: полный набор токенов с рампами ─────────── */
.bb-v5 {
  --bb-ground: var(--fnwv5-bg, #fff);
  --bb-surface: var(--fnwv5-surface, #f7fafc);
  --bb-surface-2: color-mix(in srgb, var(--fnwv5-surface, #f7fafc) 88%, var(--fnwv5-ink, #111));
  --bb-ink: var(--fnwv5-ink, #111);
  --bb-muted: var(--fnwv5-muted, rgba(17, 17, 17, .64));
  --bb-line: var(--fnwv5-line, rgba(17, 17, 17, .14));

  --bb-brand: var(--fnwv5-primary, #1b4332);
  --bb-on-brand: var(--fnwv5-on-primary, #fff);
  --bb-mine: var(--fnwv5-theme-soft, rgba(27, 67, 50, .12));
  --bb-accent: var(--fnwv5-acc-bg, var(--fnwv5-primary, #1b4332));
  --bb-accent-data: var(--fnwv5-acc-bg, var(--fnwv5-primary, #1b4332));

  --bb-grad-a: var(--fnwv5-primary-dark, #12291f);
  --bb-grad-b: var(--fnwv5-primary-deep, #081511);
  --bb-on-grad: var(--fnwv5-on-primary, #fff);
}

/* Внутри карточки, залитой primary, у темы своя пара акцентов. */
.bb-v5 .bb-brandcard {
  --bb-accent: var(--fnwv5-acc-brandcard, var(--fnwv5-primary, #1b4332));
  --bb-accent-data: var(--fnwv5-acc-brandcard-data, var(--fnwv5-acc-brandcard, #fff));
  --bb-ink: var(--fnwv5-on-primary, #fff);
  /* ⛔ ОТ ЧЕРНИЛ, А НЕ ОТ БЕЛОГО. Строкой выше `--bb-ink` уже считается темой
     (`--fnwv5-on-primary`): на светлом клубном цвете он ЧЁРНЫЙ. А подписи и
     разделители были прибиты к белому — на золотой карточке они пропадали
     совсем, хотя имя рядом читалось. Это тот же дефект, что «--bb-ink: #fff
     двенадцать раз», только на два шага ниже. Всё, что выводится из чернил,
     обязано выводиться ИЗ ПЕРЕМЕННОЙ ЧЕРНИЛ. */
  --bb-muted: color-mix(in srgb, var(--bb-ink) 74%, transparent);
  --bb-line: color-mix(in srgb, var(--bb-ink) 18%, transparent);
}

/* Внутри карточки, залитой theme, — вторая пара. */
.bb-v5 .bb-themecard {
  --bb-accent: var(--fnwv5-acc-themecard, var(--fnwv5-primary, #1b4332));
  --bb-accent-data: var(--fnwv5-acc-themecard-data, var(--fnwv5-acc-themecard, #fff));
  --bb-ink: var(--fnwv5-on-theme, #fff);
  /* ⛔ ОТ ЧЕРНИЛ, А НЕ ОТ БЕЛОГО. Строкой выше `--bb-ink` уже считается темой
     (`--fnwv5-on-primary`): на светлом клубном цвете он ЧЁРНЫЙ. А подписи и
     разделители были прибиты к белому — на золотой карточке они пропадали
     совсем, хотя имя рядом читалось. Это тот же дефект, что «--bb-ink: #fff
     двенадцать раз», только на два шага ниже. Всё, что выводится из чернил,
     обязано выводиться ИЗ ПЕРЕМЕННОЙ ЧЕРНИЛ. */
  --bb-muted: color-mix(in srgb, var(--bb-ink) 74%, transparent);
  --bb-line: color-mix(in srgb, var(--bb-ink) 18%, transparent);
}

/* ─────────── V4: свой полный набор ─────────── */
.bb-v4 {
  --bb-ground: var(--fnwv4-bg, #091625);
  --bb-surface: var(--fnwv4-surface, #0f2136);
  --bb-surface-2: color-mix(in srgb, var(--fnwv4-surface, #0f2136) 86%, var(--fnwv4-text, #dfe8f2));
  --bb-ink: var(--fnwv4-text, #dfe8f2);
  --bb-muted: var(--fnwv4-muted, #7f93aa);
  --bb-line: var(--fnwv4-line, rgba(223, 232, 242, .10));

  --bb-brand: var(--fnwv4-primary, #4da3ff);
  --bb-on-brand: var(--fnwv4-on-primary, #fff);
  --bb-mine: var(--fnwv4-accent-soft, rgba(77, 163, 255, .14));
  --bb-accent: var(--fnwv4-accent, #4da3ff);
  --bb-accent-data: var(--fnwv4-accent, #4da3ff);

  --bb-grad-a: var(--fnwv4-nav, #0f2136);
  --bb-grad-b: var(--fnwv4-nav-deep, #071120);
  --bb-on-grad: var(--fnwv4-on-surface, #dfe8f2);
}

/* ─────────── V2: тема даёт primary тремя ступенями и класс схемы ─────────── */
.bb-v2 {
  --bb-ground: var(--navy, #0a1628);

  /* ⛔ КЛУБНАЯ ПЛАШКА — НА ОБЕИХ ОБОЛОЧКАХ, а не только на светлой.
     Раскладка ядра флота (спец клиента 2026-06-24): земля = theme_color,
     КАРТОЧКИ и шапка с подвалом = ВТОРОЙ ЦВЕТ клуба (`--navy2`), праймари =
     акцент. Ядро считает `--navy2` и чернила `--text-on-secondary` ДО всякой
     проверки светлоты земли — значит от оболочки они не зависят.

     Пока эти две переменные объявлялись только под `body.theme-light`, стенд с
     ТЁМНЫМ theme_color (#4d4c4d, яркость 0,073) не получал их вовсе: правила
     клубных плашек не применялись, а заливка, взятая базовым набором из
     `--navy2`, оставалась с чернилами ЗЕМЛИ — белый текст на светлом лососевом.
     Проба читаемости дала 77 мест ниже порога, фон rgb(231,141,109), текст
     rgb(255,255,255). Замер, не догадка. */
  --bb-club-fill: var(--navy2, var(--club-secondary, var(--navy, #0a1628)));
  --bb-club-ink: var(--text-on-secondary, #fff);

  /* ⛔ ПОВЕРХНОСТИ — СТУПЕНИ ЗЕМЛИ, А НЕ ВТОРОЙ ЦВЕТ. Второй цвет живёт в
     клубной плашке (выше) и раздаётся правилами клубного слоя вместе со своими
     чернилами. Базовые поверхности — то, на чём лежат заголовки разделов,
     клетки календаря и тело таблицы, и чернила у них от земли (`--text`).
     Пока `--bb-surface` был `var(--navy2)`, а `--bb-surface-2` —
     `var(--navy3)`, на тёмной оболочке две соседние поверхности одного блока
     оказывались из разных зон: одна лососевая, другая почти чёрная (так их
     кладёт ядро: `--navy3` на тёмной оболочке считается от ЗЕМЛИ).

     Подмес идёт К ЧЕРНИЛАМ, поэтому работает в обе стороны: на тёмной земле
     ступень светлее, на светлой — темнее. */
  --bb-surface: color-mix(in srgb, var(--navy, #0a1628) 94%, var(--text, #fff));
  --bb-surface-2: color-mix(in srgb, var(--navy, #0a1628) 88%, var(--text, #fff));
  --bb-ink: var(--text, #e8eef7);
  --bb-muted: color-mix(in srgb, var(--text, #fff) 70%, transparent);
  --bb-line: color-mix(in srgb, var(--text, #fff) 20%, transparent);

  --bb-brand: var(--primary, #1565c0);
  /* ⛔ Не литерал: общий расчёт чернил (`fnwbb_ink_css()`) кладёт на :root
     посчитанный `--bb-on-primary` для ЛЮБОЙ темы — на светлом клубном цвете
     он тёмный. Белый здесь угадывал, пока клубный цвет был тёмным. */
  --bb-on-brand: var(--bb-on-primary, #fff);
  --bb-mine: color-mix(in srgb, var(--primary, #1565c0) 22%, transparent);
  /* На тёмной оболочке читается светлая ступень бренда, на светлой — тёмная.
     Ступени объявляет сама тема, мы только выбираем нужную. */
  --bb-accent: var(--primary-light, #42a5f5);
  --bb-accent-data: var(--primary-light, #42a5f5);

  --bb-grad-a: var(--primary, #1565c0);
  --bb-grad-b: var(--primary-dark, #0d47a1);
  --bb-on-grad: var(--bb-on-primary, #fff);
}

body.theme-light .bb-v2 {
  /* От оболочки зависит ровно одно: КАКАЯ СТУПЕНЬ БРЕНДА читается. На тёмной
     земле — светлая (объявлена в `.bb-v2`), на светлой — тёмная. Всё остальное
     (клубная плашка, поверхности, чернила) считается одинаково для обеих
     оболочек и живёт в `.bb-v2`.

     ⛔ Здесь лежал весь клубный слой, и стенд с тёмным theme_color оставался
     без него. Проверку на это добавил `bb_color_roles_test.py`: правило,
     красящее `var(--bb-club-fill)` из-под одной оболочки, теперь считается
     ошибкой. */
  --bb-accent: var(--primary-dark, #0d47a1);
  --bb-accent-data: var(--primary-dark, #0d47a1);
}

/* ─────────── V1: тема уже свела схему в один набор ─────────── */
.bb-v1 {
  --bb-ground: var(--page-bg, #f0f4fa);
  --bb-surface: var(--surface, #fff);
  --bb-surface-2: var(--page-bg, #f0f4fa);
  --bb-ink: var(--text-main, #0f172a);
  --bb-muted: var(--text-soft, #5b6478);
  --bb-line: var(--card-border, rgba(15, 23, 42, .12));

  /* --club-accent тема выбирает сама: primary или secondary, смотря что
     читается на текущей схеме и включён ли brand-fill. Не подменяем. */
  --bb-brand: var(--club-accent, var(--club-primary, #1d4ed8));
  /* ⛔ Не литерал: общий расчёт чернил (`fnwbb_ink_css()`) кладёт на :root
     посчитанный `--bb-on-primary` для ЛЮБОЙ темы — на светлом клубном цвете
     он тёмный. Белый здесь угадывал, пока клубный цвет был тёмным. */
  --bb-on-brand: var(--bb-on-primary, #fff);
  --bb-mine: color-mix(in srgb, var(--club-accent, #1d4ed8) 12%, transparent);
  --bb-accent: var(--club-accent, var(--club-primary, #1d4ed8));
  --bb-accent-data: var(--club-accent, var(--club-primary, #1d4ed8));

  --bb-grad-a: var(--club-primary, #1d4ed8);
  --bb-grad-b: color-mix(in srgb, var(--club-primary, #1d4ed8) 55%, #000);
  --bb-on-grad: var(--bb-on-primary, #fff);
  --bb-shadow: var(--shadow-card, 0 2px 12px rgba(15, 23, 42, .10));
}

/* ─────────── Семантика: одна на все темы, из бренда НЕ выводится ───────────
   Победа, поражение и «идёт сейчас» должны читаться одинаково на любом сайте
   сети. Если клуб красный, покрашенное брендом поражение выглядит фирменным. */
.bb-v1, .bb-v2, .bb-v4, .bb-v5 {
  /* Базовые значения семантики, а затем подмес к цвету текста поверхности:
     на тёмной оболочке он светлый и осветляет метку, на светлой — тёмный и
     притемняет. Так «В» не тускнеет на тёмно-красной строке V4 и не выцветает
     на белом листе V5, притом что сам цвет остаётся зелёным, а не клубным. */
  /* ── ВТОРОЙ КЛУБНЫЙ ЦВЕТ КАК АКЦЕНТ ──────────────────────────────────────
     Секондари до сих пор красил только полоску «мой клуб». Владелец попросил
     задействовать его как украшение по всем блокам — но у него та же беда, что
     у любого цвета: сам по себе он ни на чём не читается.

       --bb-brand2       чистый цвет: для линий, уголков, кромок, точек.
                         Ими ничего не читают, поэтому подмешивать нечего.
       --bb-brand2-ink   ТЕКСТ этим цветом: 40% цвета и 60% чернил поверхности.
                         На золоте чистый секондари даёт ΔL* около 47 и годится,
                         а на тёмной странице — 19, и надпись пропадает. Уводим
                         к чернилам ТОЙ поверхности, где надпись лежит.
       --bb-brand2-soft  подложка-таблетка: 18% цвета.
     ⛔ Как и у тройки «победа/поражение», -ink посчитан от var(--bb-ink) и
     потому ОБЯЗАН переобъявляться в каждом правиле, которое меняет чернила. */
  --bb-brand2-ink: color-mix(in srgb, var(--bb-brand2-base) 40%, var(--bb-ink));
  --bb-win-base: var(--result-win, #1ea672);
  --bb-loss-base: var(--result-loss, #c54c4c);
  --bb-live-base: #e0973c;
  /* ЗАЛИВКА: насыщенный цвет как есть. Подмешивать сюда чернила нельзя —
     этим цветом закрашены точки формы и плашки V1, и уведённый к чернилам он
     сливается с их собственным текстом. */
  --bb-win: var(--bb-win-base);
  --bb-loss: var(--bb-loss-base);
  --bb-live: var(--bb-live-base);
  /* ТЕКСТ на бледной таблетке: 30% цвета, 70% чернил ПОВЕРХНОСТИ. Оттенок
     ещё узнаётся, а светлота уходит к чернилам — иначе буква стоит в середине
     светлоты, подложка светлая, и разница выходит ΔL* 17…21 при цели 35
     (замер по пикселям страницы, 07.09.2026). */
  --bb-win-ink: color-mix(in srgb, var(--bb-win-base) 30%, var(--bb-ink));
  --bb-loss-ink: color-mix(in srgb, var(--bb-loss-base) 30%, var(--bb-ink));
  --bb-live-ink: color-mix(in srgb, var(--bb-live-base) 30%, var(--bb-ink));
  --bb-win-soft: color-mix(in srgb, var(--bb-win-base) 18%, transparent);
  --bb-loss-soft: color-mix(in srgb, var(--bb-loss-base) 18%, transparent);
  --bb-live-soft: color-mix(in srgb, var(--bb-live-base) 20%, transparent);
}
/* V5 — «журнал». Белый лист, Inter, волосяные границы, крупные скругления,
   единственный акцент — клубный цвет. Композиция: надзаголовок капсом, крупные
   плитки впереди таблицы, месячный разделитель, выделенный матч, лента строк. */

/* Ни одного собственного цвета: всё через роли (tokens.css), а роли берут
   значения из токенов темы, выведенных из клубных primary/secondary/theme. */
.bb-v5 {
  --v5-r: 16px;
  /* Обёртка блока НЕ красит фон страницы: это дело темы. Иначе каждый блок
     рисует свой прямоугольник фона, между блоками остаются зазоры, и на стыках
     видны тёмные полосы и уголки — ровно то, что владелец увидел 04.09.2026.
     Здесь только цвет текста, чтобы роли достались потомкам. */
  color: var(--bb-ink);
  font-family: var(--fnwv5-font-body, 'Inter', system-ui, sans-serif);
}

.v5-sec { margin: 0 0 46px; }

/* Надзаголовок капсом над заголовком — фирменный приём темы. */
.v5-sechead { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin: 0 0 18px; }
.v5-kicker { font-size: 11px; letter-spacing: .18em; text-transform: uppercase; color: var(--bb-accent); font-weight: 600; }
.v5-h2 { margin: 4px 0 0; font-size: 30px; font-weight: 800; letter-spacing: -.02em; line-height: 1.1; }
.v5-more { font-size: 13px; color: var(--bb-accent); font-weight: 600; text-decoration: none; white-space: nowrap; }
.v5-more:hover { text-decoration: underline; }

.bb-crest--mono { background: var(--bb-surface); color: var(--bb-ink); border: 1px solid var(--bb-line); }
/* ⛔ Буква в кружке — ЧЕРНИЛАМИ, не приглушённым цветом. Приглушённый —
   это 74% чернил, и на маленьком кружке внутри клубной панели буква
   уходила почти в фон: замер по пикселям дал ΔL* 4.7 при цели 35
   (скан демо-сайта 07.09.2026). Это единственная надпись в блоке,
   которая несёт название клуба целиком, приглушать её нечем. */

/* ─── сводка: две крупные плитки, под ними четыре мелкие ─── */
.v5-standing__big { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 14px; }
.v5-bigtile { background: var(--bb-surface); border-radius: var(--v5-r); padding: 26px 24px; }
.v5-biglbl { font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--bb-muted); }
.v5-bignum { font-size: 54px; font-weight: 800; line-height: 1.05; letter-spacing: -.03em;
  margin-top: 6px; font-variant-numeric: tabular-nums; }
.v5-bignum span { color: var(--bb-muted); font-weight: 400; margin: 0 2px; }
.v5-tiles { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.v5-tile { border: 1px solid var(--bb-line); border-radius: 12px; padding: 16px 14px; background: var(--bb-surface); }
.v5-tlbl { font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--bb-muted); }
.v5-tnum { font-size: 24px; font-weight: 700; margin-top: 4px; font-variant-numeric: tabular-nums; }

/* ─── таблица «листом» ─── */
.v5-sheet { border: 1px solid var(--bb-line); border-radius: var(--v5-r); overflow: hidden; }
.v5-table { width: 100%; border-collapse: collapse; font-variant-numeric: tabular-nums; }
.v5-table th, .v5-table td { padding: 13px 12px; text-align: center; white-space: nowrap; }
.v5-table th { font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--bb-muted); font-weight: 600; }
.v5-table td { border-top: 1px solid var(--bb-line); font-size: 14px; }
.v5-table .v5-l { text-align: left; white-space: normal; }
.v5-table td.v5-l { display: flex; align-items: center; gap: 9px; }
.v5-table tbody tr:hover { background: var(--bb-surface); }
.v5-me { background: var(--bb-mine); font-weight: 700; }
.v5-tcards { display: none; }

/* ─── результаты: месяц, выделенный матч, лента строк ─── */
.v5-monthhead { display: flex; align-items: center; gap: 14px; margin: 0 0 16px; }
.v5-monthhead span { font-size: 12px; letter-spacing: .16em; text-transform: uppercase; color: var(--bb-muted); }
.v5-monthhead i { flex: 1; height: 1px; background: var(--bb-line); }

.v5-feat { border: 1px solid var(--bb-line); border-radius: var(--v5-r); padding: 26px 24px; margin-bottom: 14px;
}
.v5-feat__comp { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--bb-accent);
  text-align: center; font-weight: 600; }
.v5-feat__teams { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 20px; margin: 18px 0; }
.v5-feat__team { display: flex; align-items: center; gap: 12px; font-weight: 600; font-size: 16px; }
.v5-feat__team--r { flex-direction: row-reverse; text-align: right; }
.v5-feat__score { font-size: 44px; font-weight: 800; letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.v5-feat__meta { display: flex; justify-content: space-between; align-items: center;
  border-top: 1px solid var(--bb-line); padding-top: 14px; font-size: 13px; color: var(--bb-muted); }

.v5-rows { display: grid; }
/* Дата отдельной колонкой слева — так тема верстает матч-центр в футболе. */
/* Колонка с командами РАСТЁТ, а правая жмётся к содержимому. Было наоборот:
   команды упирались в 250 пикселей, а всю свободную ширину забирала колонка с
   пометкой «дома/в гостях». На названии в 42 знака («Biñan Tatak Gel Beast
   Motorcycle MEGA WAGI») имя рвалось посреди слова, а справа стояла пустота —
   найдено рендером ближайших матчей. */
.v5-row { display: grid; grid-template-columns: auto minmax(260px, 1fr) max-content; align-items: center;
  border-top: 1px solid var(--bb-line); }
.v5-row__date { display: flex; flex-direction: column; align-items: center; justify-content: center;
  min-width: 74px; padding: 16px 14px; border-right: 1px solid var(--bb-line); }
.v5-row__date b { font-size: 20px; font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; }
.v5-row__date span { font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--bb-muted); margin-top: 3px; }
.v5-row__fx { display: flex; align-items: center; gap: 12px; padding: 16px 18px; }
/* ⛔ Строка команды — САМА флексом, а не просто текстом. В неё добавился герб,
   и без своего flex он налезал на название: «Ilagan Isabela Cowboys» и герб
   стояли друг на друге. Зазор и запрет сжатия герба — обязательны. */
.v5-row__t { font-size: 13px; font-weight: 600; flex: 1 1 0; min-width: 0;
  display: flex; align-items: center; gap: 9px; }
.v5-row__t > .bb-crest { flex: 0 0 auto; }
.v5-row__t--r { text-align: right; justify-content: flex-end; }
.v5-row__vs { font-size: 17px; font-weight: 800; font-variant-numeric: tabular-nums; white-space: nowrap; }
.v5-row__info { display: flex; align-items: center; justify-content: flex-end; gap: 14px; padding: 16px 18px; }
.v5-badge { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; font-weight: 700; padding: 4px 10px; border-radius: 999px; }
.v5-badge--w { background: var(--bb-win-soft); color: var(--bb-win-ink); }
.v5-badge--l { background: var(--bb-loss-soft); color: var(--bb-loss-ink); }
.v5-boxbtn { font-size: 12px; color: var(--bb-accent); font-weight: 600; text-decoration: none;
  border-bottom: 1px solid transparent; white-space: nowrap; }
.v5-boxbtn:hover { border-bottom-color: currentColor; }

/* ─── лидеры ─── */
.v5-ldrs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.v5-ldr { background: var(--bb-surface); border-radius: var(--v5-r); padding: 22px 20px; }
.v5-ldr .v5-bignum { font-size: 40px; }
.v5-ldr__who { font-weight: 600; font-size: 15px; margin-top: 6px; }
.v5-ldr__sub { font-size: 12px; color: var(--bb-muted); }

/* ─── состав: чипы-фильтры и карточка с номером-подложкой ─── */
.v5-filter { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.v5-chip { font-size: 12px; font-weight: 600; padding: 6px 16px; border-radius: 999px;
  border: 1px solid var(--bb-line); color: var(--bb-muted); }
.v5-chip--on { background: var(--bb-brand); border-color: var(--bb-brand); color: var(--bb-on-brand); }
.v5-squad { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.v5-player { position: relative; overflow: hidden; border: 1px solid var(--bb-line);
  border-radius: var(--v5-r); padding: 20px; }
.v5-player__bg { position: absolute; right: -8px; bottom: -26px; font-size: 92px; font-weight: 800;
  line-height: 1; color: color-mix(in srgb, var(--bb-ink) 5%, transparent); pointer-events: none; }
.v5-player__jersey { font-size: 12px; font-weight: 700; color: var(--bb-accent); letter-spacing: .1em; }
.v5-player__name { font-size: 17px; font-weight: 700; margin-top: 6px; position: relative; }
.v5-player__role { font-size: 12px; color: var(--bb-muted); margin-top: 4px; position: relative; }

/* ═══ узкий экран ═══ */

/* Колонка клуба не ужимается ниже смыслового минимума, а таблица целиком
   при нехватке места прокручивается вбок — вместо того, чтобы крошить имена. */
.v5-tscroll { overflow-x: auto; }
.v5-table th.v5-l, .v5-table td.v5-l { min-width: 260px; }
/* 260, а не 200: при 200 сорокадвухзначное «Biñan Tatak Gel Beast Motorcycle
   MEGA WAGI» разворачивается в ТРИ строки, и строка таблицы становится выше
   соседних — то самое «блок изменился». При 260 самое длинное имя MPBL
   укладывается ровно в две зарезервированные строки, и все строки равны.
   Если у лиги найдётся имя длиннее, строка вырастет до трёх — это ухудшение
   плавное, в отличие от обрезки имени. */

@media (max-width: 640px) {
  .v5-h2 { font-size: 24px; }
  .v5-standing__big { grid-template-columns: 1fr 1fr; gap: 10px; }
  .v5-bigtile { padding: 18px 16px; }
  .v5-bignum { font-size: 38px; }
  .v5-tiles { grid-template-columns: repeat(2, 1fr); gap: 10px; }

  /* Скрываем таблицу на телефоне ТОЛЬКО там, где ей есть замена карточками.
     Правило писалось под турнирную таблицу, а применялось ко всем таблицам —
     и статистика игроков с бокс-скором пропадали на телефоне совсем. Нашлось
     осмотром блоков по одному 04.09.2026. Остальные таблицы просто
     прокручиваются вбок: это лучше, чем исчезнуть. */
  .v5-sheet--dual .v5-tscroll { display: none; }
  .v5-tcards { display: grid; gap: 8px; }
  .v5-tcard { display: grid; grid-template-columns: 26px auto 1fr auto; align-items: center; gap: 9px;
    border: 1px solid var(--bb-line); border-radius: 14px; padding: 12px 14px; }
  .v5-tcard__pos { font-weight: 800; font-variant-numeric: tabular-nums; }
  .v5-tcard__name { font-weight: 600; font-size: 14px; min-width: 0; }
  .v5-tcard__key { font-size: 18px; font-weight: 800; color: var(--bb-accent); font-variant-numeric: tabular-nums; }
  .v5-tcard__st { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(3, 1fr);
    gap: 4px 10px; margin: 6px 0 0; font-size: 13px; }
  .v5-tcard__st > div { display: flex; gap: 5px; align-items: baseline; }
  .v5-tcard__st dt { font-size: 11px; color: var(--bb-muted); }
  .v5-tcard__st dd { margin: 0; font-variant-numeric: tabular-nums; }

  .v5-feat { padding: 18px 16px; }
  .v5-feat__teams { grid-template-columns: 1fr auto; gap: 10px; }
  .v5-feat__team { font-size: 14px; }
  .v5-feat__team--r { grid-column: 1; flex-direction: row; text-align: left; }
  .v5-feat__score { grid-column: 2; grid-row: 1 / span 2; font-size: 34px; }

  /* Строка распадается: дата остаётся колонкой слева, названия клубов встают
     друг под другом на всю ширину, счёт справа. Иначе «Ilagan Isabela Cowboys»
     ломается на три строки в узкой колонке. */
  .v5-row { grid-template-columns: auto 1fr; }
  .v5-row__date { min-width: 58px; padding: 12px 10px; }
  .v5-row__fx { display: grid; grid-template-columns: 1fr auto; gap: 2px 10px; padding: 12px 14px 6px; }
  .v5-row__t { flex: none; }
  .v5-row__t--r { grid-column: 1; text-align: left; }
  .v5-row__vs { grid-column: 2; grid-row: 1 / span 2; align-self: center; }
  .v5-row__info { grid-column: 2; padding: 0 14px 12px; justify-content: flex-start; }

  .v5-ldrs { grid-template-columns: 1fr; }
  .v5-ldr { padding: 16px 18px; }
  .v5-squad { grid-template-columns: 1fr; }
}

/* ─────────── Плитки командной статистики: вид по размеру ───────────
   Крупная и средняя — без рамки и с крупным скруглением, как «bigtile» в
   футбольном V5; мелкая — в рамке, как обычная плитка. Иерархия та же, что
   была, но теперь размер выбирает ядро по числу плиток, а не разметка. */
.v5-tilegrid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 14px; }
/* Подпись сверху, число снизу. «Points per game» переносится на две строки, а
   «Rebounds» нет — без этого числа в одном ряду стоят на разной высоте. */
.v5-tilegrid .v5-tile { display: flex; flex-direction: column; justify-content: space-between; }

.v5-tile.bb-t-dtall,
.v5-tile.bb-t-dmid { border: 0; border-radius: var(--v5-r); }

.v5-tile.bb-t-dtall { padding: 26px 24px; }
.v5-tile.bb-t-dtall .v5-tlbl { font-size: 11px; }
.v5-tile.bb-t-dtall .v5-tnum { font-size: 54px; font-weight: 800; line-height: 1.05; letter-spacing: -.03em; }
.v5-tile.bb-t-dmid { padding: 20px 18px; }
.v5-tile.bb-t-dmid .v5-tnum { font-size: 38px; font-weight: 800; line-height: 1.1; }
.v5-tile.bb-t-dflat { padding: 16px 14px; }

/* ─────────── Календарь: заголовок со стрелками и сцена месяцев ─────────── */
.v5-monthhead--nav { gap: 8px; }
.v5-monthhead--nav span { flex: 0 0 auto; }

/* ─────────── Состав партиями ─────────── */
.v5-more--blk { display: block; width: fit-content; margin: 12px auto 0; }
.v5-more--blk::after { content: ' \2192'; }
.v5-player--link:hover { box-shadow: 0 18px 40px rgba(0, 0, 0, .32); }
/* V5 — остальные тринадцать блоков. Словарь тот же: лист, плитка, лента, чип. */

.v5-table--mini th, .v5-table--mini td { padding: 11px 12px; }
.v5-strong { font-weight: 700; color: var(--bb-accent); }
.v5-total td { border-top: 2px solid var(--bb-accent); font-weight: 700; }

.v5-row__arena { font-size: 12px; color: var(--bb-muted); white-space: nowrap; }
.v5-badge--n { background: var(--bb-surface); color: var(--bb-muted); }
.v5-badge--in { background: var(--bb-win-soft); color: var(--bb-win-ink); }
.v5-badge--out { background: var(--bb-loss-soft); color: var(--bb-loss-ink); }
.v5-badge--dr { background: var(--bb-live-soft); color: var(--bb-live-ink); }

/* ─── идёт матч ─── */
.v5-feat--live { border-color: var(--bb-accent); }
.v5-live__top { display: flex; align-items: center; justify-content: center; gap: 9px;
  font-size: 11px; letter-spacing: .13em; text-transform: uppercase; font-weight: 600; color: var(--bb-accent); }
.v5-pulse { width: 8px; height: 8px; border-radius: 50%; background: var(--bb-accent);
  animation: v5pulse 1.6s ease-in-out infinite; }
@keyframes v5pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: .35; transform: scale(.75); } }
@media (prefers-reduced-motion: reduce) { .v5-pulse { animation: none; } }
.v5-qline { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;
  border-top: 1px solid var(--bb-line); padding-top: 14px; }
.v5-q { display: flex; flex-direction: column; align-items: center; gap: 2px;
  background: var(--bb-surface); border-radius: 10px; padding: 8px 16px; min-width: 74px; }
.v5-q span { font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--bb-muted); }
.v5-q b { font-size: 15px; font-variant-numeric: tabular-nums; }

/* ─── дивизионы ─── */
.v5-divs { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.v5-divhead { font-size: 11px; letter-spacing: .13em; text-transform: uppercase; color: var(--bb-accent);
  font-weight: 600; padding: 16px 14px 4px; }

/* ─── сетка плей-офф ─── */
.v5-brwrap { overflow-x: auto; }
.v5-br { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(220px, 1fr); gap: 14px; min-width: 680px; }
.v5-brcol { display: flex; flex-direction: column; gap: 12px; justify-content: space-around; }
.v5-brhead { font-size: 11px; letter-spacing: .13em; text-transform: uppercase; color: var(--bb-muted);
  font-weight: 600; text-align: center; }
.v5-pair { border: 1px solid var(--bb-line); border-radius: 12px; overflow: hidden; }
.v5-pair--me { border-color: var(--bb-accent); }
.v5-pair__r { display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 11px 14px; font-size: 13px; font-weight: 600; }
.v5-pair__r + .v5-pair__r { border-top: 1px solid var(--bb-line); }
.v5-pair__r b { font-variant-numeric: tabular-nums; font-size: 15px; }

/* ─── календарь ─── */
.v5-calsheet { padding-bottom: 14px; }
.v5-monthhead--in { margin: 16px 16px 12px; }
.v5-cal { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; padding: 0 14px; }
.v5-caldn { font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--bb-muted);
  text-align: center; padding-bottom: 4px; }
.v5-calday { min-height: 62px; border-radius: 10px; padding: 7px 8px; background: var(--bb-surface);
  display: flex; flex-direction: column; gap: 2px; }
.v5-calday--out { background: transparent; }
.v5-calday--has { background: color-mix(in srgb, var(--bb-accent) 8%, var(--bb-surface)); }
.v5-caln { font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--bb-muted); }
.v5-calday--has .v5-caln { color: var(--bb-accent); }
.v5-calm { font-size: 10px; line-height: 1.25; color: var(--bb-muted); }
.v5-cals { font-size: 13px; font-variant-numeric: tabular-nums; margin-top: auto; }

/* ─── бокс-скор ─── */
.v5-boxhead { font-size: 15px; font-weight: 700; margin-bottom: 12px; }

/* ─── плитки статистики и наград ─── */
.v5-tiles--6 { grid-template-columns: repeat(3, 1fr); }
.v5-ldrs--4 { grid-template-columns: repeat(4, 1fr); }
.v5-ldr--aw { padding: 20px 18px; }
.v5-ldr__who--big { font-size: 19px; font-weight: 700; margin-top: 8px; }

/* ─── переходы и история ─── */
.v5-row__fx--mv { flex-direction: column; align-items: flex-start; gap: 2px; }
.v5-mv__who { font-size: 15px; font-weight: 700; }
.v5-mv__where { font-size: 12px; color: var(--bb-muted); }

@media (max-width: 640px) {
  .v5-divs { grid-template-columns: 1fr; }
  .v5-tiles--6 { grid-template-columns: repeat(2, 1fr); }
  .v5-ldrs--4 { grid-template-columns: 1fr; }
  .v5-cal { gap: 3px; padding: 0 10px; }
  .v5-calday { min-height: 46px; padding: 4px 5px; border-radius: 7px; }
  .v5-calm { display: none; }          /* в клетке 44 пикселя названию не место */
  .v5-cals { font-size: 11px; }
  .v5-q { min-width: 62px; padding: 6px 10px; }
  .v5-row--mv .v5-row__info, .v5-row--hs .v5-row__info { padding-bottom: 12px; }
}

/* Штаб бывает и из четырёх человек, и из семи: фиксированные три колонки
   оставляют одиночку во втором ряду. Пусть ряд заполняется сам. */
.v5-squad--staff { grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }

/* ─────────── Время матча в клетке календаря ───────────
   У отыгранного матча в клетке счёт, у предстоящего — время начала: клетка
   не должна быть пустой только потому, что матч ещё не состоялся. */
.v5-calt { font-size: 10px; font-weight: 700; color: var(--bb-accent);
  margin-top: auto; font-variant-numeric: tabular-nums; }

@media (max-width: 640px) {
  /* Плитки команды на мобильной: размер снова выбирает ядро, а здесь только
     вид. Правила идут ПОСЛЕ десктопных и с той же специфичностью — поэтому
     плитка, крупная на десктопе и мелкая на мобильной, слушается мобильных. */
  .v5-tilegrid { gap: 10px; }
  .v5-tile.bb-t-mtall,
  .v5-tile.bb-t-mmid { border: 0; border-radius: var(--v5-r); }
  .v5-tile.bb-t-mflat { border: 1px solid var(--bb-line); border-radius: 12px; }
  .v5-tile.bb-t-mtall { padding: 18px 16px; }
  .v5-tile.bb-t-mtall .v5-tnum { font-size: 38px; font-weight: 800; line-height: 1.06; }
  .v5-tile.bb-t-mmid { padding: 15px 14px; }
  .v5-tile.bb-t-mmid .v5-tnum { font-size: 30px; font-weight: 800; }
  .v5-tile.bb-t-mflat { padding: 12px 11px; }
  .v5-tile.bb-t-mflat .v5-tnum { font-size: 21px; font-weight: 700; }
  /* «Одна огромная» в нижнем ряду: она занимает всю ширину, и на этой ширине
     число обязано быть крупнее парных — иначе ряд читается как ошибка. */
  .v5-tile.bb-t-m1.bb-t-mtall { padding: 22px 18px; }
  .v5-tile.bb-t-m1.bb-t-mtall .v5-tnum { font-size: 46px; }

  /* Время в клетке 46 пикселей не помещается рядом с числом — как и название
     соперника, которое здесь уже скрыто. */
  .v5-calt { display: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   ИНТЕРВАЛЫ МЕЖДУ БЛОКАМИ НА СТРАНИЦАХ ТЕМЫ

   ⛔ Отступ секции у темы — clamp(48px, 7vw, 120px) СВЕРХУ И СНИЗУ. У соседних
   секций они складываются: до 240 точек пустоты между блоками. Для футбольной
   главной с шестью секциями это дыхание, для баскетбольной с пятнадцатью —
   бесконечная прокрутка. Замечание владельца 07.09.2026.

   Правим не сам `.fnwv5-section` (он общий с футбольной темой), а только
   секции с блоками — у них класс `bb-sec`. И снимаем удвоение: у идущей
   следом секции верхнего отступа нет вовсе.
   ═══════════════════════════════════════════════════════════════════════════ */
.fnwv5-section.bb-sec { padding-block: clamp(26px, 3.2vw, 54px); }
.fnwv5-section.bb-sec + .fnwv5-section.bb-sec { padding-top: 0; }

/* Разделы внутри страницы матч-центра — тот же шаг. Селектор без обёртки:
   этот лист подключается ТОЛЬКО баскетбольной темой, футбольную он не
   достанет, а класса-обёртки у разделов страницы нет. */
.fnwv5-mc-secgap { margin-top: clamp(30px, 3.6vw, 58px); }

/* ═══════════════════════════════════════════════════════════════════════════
   ПЛИТКИ ПЛАШКИ ПОЛОЖЕНИЯ: число колонок считает PHP

   ⛔ В теме стоит `repeat(7, 1fr)` — ровно под семь футбольных показателей. У
   баскетбола их девять, и семь колонок дают 7 + 2: два одиноких квадрата во
   втором ряду. Колонки выбирает fnwbb_plate_cols() так, чтобы последний ряд
   не был обрубком, и присылает класс.
   ═══════════════════════════════════════════════════════════════════════════ */
/* Классы без привязки к блоку: их ставит PHP на ЛЮБУЮ сетку плиток —
   и на плашку положения, и на сводку сезона, и на командную статистику.
   Число колонок всегда такое, чтобы последний ряд не был обрубком: у сводки
   было четыре колонки под три показателя, и справа висела дырка. */
.bb-pl-c1 { grid-template-columns: minmax(0, 1fr); }
.bb-pl-c2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.bb-pl-c3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.bb-pl-c4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.bb-pl-c5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.bb-pl-c6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.bb-pl-c7 { grid-template-columns: repeat(7, minmax(0, 1fr)); }

@media (max-width: 900px) {
  .bb-pl-m1 { grid-template-columns: minmax(0, 1fr); }
  .bb-pl-m2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .bb-pl-m3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   НАГРАДЫ В ФОРМЕ ТЕМЫ

   Сетка `fnwv5-grid--4` у темы переносится сама, но когда наград больше
   четырёх, на главной они листаются лентой — и тогда сетку надо распустить,
   иначе плитки встанут в столбик внутри ленты.
   ═══════════════════════════════════════════════════════════════════════════ */
.bb-slide--js.bb-awgrid { display: flex; grid-template-columns: none; }

/* ═══════════════════════════════════════════════════════════════════════════
   КАРТОЧКА ЧЕЛОВЕКА: место под портрет справа, подписи слева
   ═══════════════════════════════════════════════════════════════════════════
   ⛔ Кружка с инициалами здесь больше нет. Владелец назвал его лишним прямо:
   место под фотографию должно выглядеть местом под фотографию, а две буквы
   читались как вторая подпись. Силуэт занимает ровно ту площадь, которую
   займёт вырезанный снимок, — значит сетка не поедет, когда снимки появятся.

   Раскладка: слева колонка подписей (не шире 58% — иначе имя налезает на
   силуэт), справа фигура во всю высоту карточки. Фигура позиционирована
   абсолютно и обрезается рамкой карточки: так же обрезается настоящее фото. */
.bb-pers { position: relative; overflow: hidden; }
.bb-pers__txt { position: relative; z-index: 2; max-width: 58%; }
/* ⛔ Место под портрет — БЮСТ, посаженный на нижнюю кромку. Не фигура в
   полный рост: рост в поле 140×196 даёт голову в сорок пикселей, и человек
   читается схемой. Бюст — та же посадка, что у вырезанного портрета в клубной
   карточке, и заменить силуэт снимком можно будет один в один. */
.bb-fig {
  position: absolute; inset-inline-end: 0; bottom: 0; top: 0;
  width: 46%; display: flex; align-items: flex-end; justify-content: center;
  pointer-events: none; z-index: 1; overflow: hidden;
}
/* ⛔ Ровно 100%, не больше. При большем рамка срезает ГОЛОВУ — самое
   узнаваемое место. Обрезка «как у настоящего снимка» заложена в сам обвод:
   бюст кончается по грудь на нижней кромке кадра. */
.bb-fig .bb-sil { width: 100%; height: 100%; display: block; }
/* Правило самой картинки портрета живёт в common.css: место под портрет
   печатает ОБЩЕЕ ядро (fnwbb_figure), одно на четыре темы, и правило должно
   быть там же — иначе в темах 1/2/4 снимок выведется без правил вовсе. */

/* Номер игрока — В УГЛУ ПОВЕРХ фигуры. Раньше он был подложкой в пять
   процентов чернил и не читался вовсе; владелец потребовал, чтобы цифра
   виднелась и на силуэте, и на настоящем снимке. Держит её не яркость, а
   ТЕНЬ: на светлом силуэте работает цвет, на тёмном снимке — тень. */
.v5-player__bg {
  position: absolute; inset-inline-end: 14px; bottom: 6px; top: auto; z-index: 3;
  font-size: 54px; font-weight: 800; line-height: .88; letter-spacing: -.05em;
  font-variant-numeric: tabular-nums; pointer-events: none;
}
/* Ярлык номера/должности обнимает надпись, а не тянется на всю карточку.
   Раньше это был блок во всю ширину, и обод второго цвета рисовал длинную
   капсулу через полкарточки — владелец показал её отдельным замечанием. */
.v5-player__jersey { display: inline-block; width: fit-content; max-width: 100%; }

/* Карточке нужна высота под фигуру: без неё силуэт сжимается в полоску.
   196 — при меньшем взрослые пропорции (рост в семь с половиной голов) дают
   голову мельче подписи, и фигура снова читается значком. */
.v5-player.bb-pers { min-height: 196px; }
.v5-ldr.bb-pers { min-height: 210px; }
.v5-ldr.bb-pers .bb-fig { width: 42%; }
.v5-player__name .bb-nm { display: block; }
.v5-player__name .bb-nm--last { font-weight: 800; }
.v5-ldr__who .bb-nm { display: block; }

@media (max-width: 640px) {
  .v5-player.bb-pers, .v5-ldr.bb-pers { min-height: 176px; }
  .bb-pers__txt { max-width: 60%; }
  .v5-player__bg { font-size: 44px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   СТРОКА МАТЧА И КАРТОЧКА МАТЧА: гербы крупные, всё к середине
   ═══════════════════════════════════════════════════════════════════════════
   ⛔ Было: гербы 26 пикселей по внешним краям строки, счёт между двумя
   разъехавшимися названиями. Владелец сравнил с футбольной V5 — «там всё
   аккуратно под линеечку, логотипы крупные» — и был прав: там герб стоит
   ВНУТРИ, у счёта, названия тянутся к середине, логотип 69 пикселей.
   Повторяем ту же геометрию. Размер здесь, а не в разметке: встроенный style
   сильнее листа и не даёт теме управлять размером. */
/* ⛔ display ОБЪЯВЛЕН ЗАНОВО НАРОЧНО — как страховка. Причина сбоя была
   структурной: класс `bb-name` (он объявляет `display: block` и резерв в две
   строки) стоял на САМОМ контейнере строки, а краска подключается позже
   структуры и перебивала `display: flex`. Класс переехал на элемент имени
   (см. fnwbb_blk_match_row), но объявление здесь оставлено: если такой класс
   снова окажется на контейнере, строка не рассыплется молча. */
.v5-row__t {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: flex-end;
  text-align: end;
  /* Название крупнее и заголовочным шрифтом — как в футбольной V5, где строка
     результата читается «под линеечку». */
  font-size: clamp(.95rem, 1.1vw, 1.15rem);
  font-weight: 700;
  text-transform: uppercase;
  line-height: 1.12;
}
.v5-row__t--r { justify-content: flex-start; text-align: start; }
.v5-row__t .bb-crest { width: 60px; height: 60px; object-fit: contain; }
.v5-row__t .bb-crest--mono { font-size: 20px; }
.v5-row__nm { min-width: 0; overflow-wrap: break-word; }
.v5-row__fx { gap: clamp(12px, 2vw, 34px); }

/* Своя карточка матча (результаты, идущий матч) — та же логика середины. */
.v5-feat__team { flex-direction: row-reverse; justify-content: flex-end; text-align: end; }
.v5-feat__team--r { flex-direction: row; justify-content: flex-start; text-align: start; }
.v5-feat__team .bb-crest { width: clamp(64px, 7vw, 92px); height: clamp(64px, 7vw, 92px); object-fit: contain; }
.v5-feat__team .bb-crest--mono { font-size: 26px; }

@media (max-width: 900px) {
  .v5-row__t .bb-crest { width: 46px; height: 46px; }
  .v5-row__t .bb-crest--mono { font-size: 16px; }
}
@media (max-width: 640px) {
  .v5-row__t .bb-crest { width: 34px; height: 34px; }
  .v5-row__t .bb-crest--mono { font-size: 13px; }
  /* На узком строка уже перестроена в две линии; середина там не нужна. */
  .v5-row__t, .v5-row__t--r { justify-content: flex-start; text-align: start; }
  .v5-feat__team, .v5-feat__team--r { flex-direction: row; justify-content: flex-start; text-align: start; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   КАЛЕНДАРЬ НА ТЕЛЕФОНЕ: соперник виден
   ═══════════════════════════════════════════════════════════════════════════
   ⛔ Было: на узком экране название соперника скрыто (в клетку не встаёт), и
   в клетке остались только число и счёт — по календарю нельзя было понять, с
   кем играли. Теперь на широком видно название, на узком — герб соперника
   (или короткий код, если герба нет). Он встаёт в клетку целиком. */
.v5-calo { display: none; }
.v5-calo .bb-crest { width: 20px; height: 20px; object-fit: contain; }
.v5-calab { font-size: 9px; font-weight: 800; letter-spacing: .04em; font-style: normal; }

@media (max-width: 640px) {
  .v5-calday { min-height: 58px; }
  .v5-calo { display: flex; align-items: center; justify-content: center; margin: 1px 0; }
  /* Время встаёт обратно: клетка выросла, и «во сколько» — половина смысла
     будущего матча. Раньше пряталось вместе с названием. */
  .v5-calt { display: block; font-size: 9px; }
}
