/* =========================================================================
   Тема «Журнал» (сделана для cafetheatre-chartrons.fr)
   =========================================================================
   Файл написан руками и лежит по тому пути, который знает команда
   classes:randomize (public/assets/dist/css/style.min.css). Собирать его
   через npm run production нельзя: исходники в assets/src не соответствуют
   текущему dist и затрут тему.

   Цвета берутся из CSS-переменных, которые макет получает из таблицы
   projects. Никаких зашитых значений: палитра у каждого сайта своя.

   Состояния держим на data-атрибутах, а не на классах — classes:randomize
   переименовывает классы, атрибуты не трогает.

   Домен нигде не зашит: он приходит из $project->domain. Это важно —
   поддомен панель делает полным клоном каталога (cp -a) и потом sed-ом
   переписывает вхождения //домен по всем файлам. Тема переезжает
   на новый поддомен сама и ничего не тянет за собой.
   ========================================================================= */

:root {
  /* запасные значения на случай пустых полей в базе */
  --bg: #161320;
  --ink: #221a2b;
  --ink-2: #1d1424;
  --main: #eecf7f;
  --second: #8f26f2;
  --mute: #bca293;

  --tx: #f4f1ea;
  --tx-2: rgba(244, 241, 234, .74);
  --line: rgba(244, 241, 234, .14);
  --rule: rgba(244, 241, 234, .28);

  --shell: 1220px;
  --serif: "Playfair Display", Georgia, serif;
  --sans: "Rubik", system-ui, sans-serif;
  --mono: ui-monospace, "SF Mono", Menlo, monospace;
  --ease: cubic-bezier(.22, .61, .36, 1);
}

*, *::before, *::after { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--tx);
  font-family: var(--sans);
  font-size: 16px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
}
/* overflow-x: hidden здесь нет намеренно: он прячет переполнение вместо
   того, чтобы его чинить, и ломает position: sticky у потомков. */

img { max-width: 100%; height: auto; }

a { color: inherit; text-decoration: none; }
a:hover { text-decoration: underline; }

.shell { width: 100%; max-width: var(--shell); margin-inline: auto; padding-inline: 22px; }
.mono { font-family: var(--mono); letter-spacing: .06em; }

.skip {
  position: absolute; left: -9999px; top: 0; z-index: 200;
  padding: 12px 18px; background: var(--main); color: var(--bg);
}
.skip:focus { left: 12px; top: 12px; }

/* =========================================================================
   Кнопки
   ========================================================================= */

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 12px 22px; border: 1px solid transparent; border-radius: 2px;
  font-weight: 600; font-size: 14.5px; line-height: 1; letter-spacing: .02em;
  text-transform: uppercase; white-space: nowrap; cursor: pointer;
  transition: transform .16s var(--ease), background .16s var(--ease);
}
.btn:hover { text-decoration: none; transform: translateY(-1px); }
.btn--main { background: var(--main); color: var(--bg); }
.btn--ghost { border-color: var(--rule); color: var(--tx); }
.btn--ghost:hover { border-color: var(--main); color: var(--main); }
.btn--sm { padding: 10px 16px; font-size: 13px; }
.btn--full { width: 100%; }

/* =========================================================================
   Шапка-колонтитул
   =========================================================================
   Две строки: выходные данные и под линейкой навигация. Ровно этим строй
   шапки отличается от соседних сайтов сетки.
   ========================================================================= */

.mast { position: sticky; top: 0; z-index: 90; background: var(--bg); border-bottom: 1px solid var(--line); }

.mast__top { background: var(--ink-2); border-bottom: 1px solid var(--line); }
.mast__top-in { display: flex; align-items: center; gap: 10px; min-height: 34px; font-size: 11.5px; color: var(--tx-2); text-transform: uppercase; }
.mast__dot { color: var(--rule); }
.mast__lang { margin-inline-start: auto; }

.mast__bar { display: flex; align-items: center; gap: 20px; min-height: 72px; }
.mast__brand { flex: none; display: flex; margin-inline-end: auto; }
.mast__brand img { width: auto; height: 40px; }
.mast__cta { flex: none; }

/* Навигация отдельной строкой под линейкой — журнальный приём и заодно
   защита от длинных подписей: строка с логотипом от них не зависит.
   Сама строка при нужде прокручивается вбок внутри себя, поэтому даже
   очень длинный набор пунктов не толкает страницу. */
.mast__navrow { border-top: 1px solid var(--line); }
.nav {
  display: flex; gap: 2px; overflow-x: auto; scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.nav::-webkit-scrollbar { display: none; }
/* nowrap — страховка: подписи приходят из базы и у сайтов разные.
   Перенос внутри пункта делал бы фон вдвое выше соседей. */
.nav a {
  flex: none; padding: 11px 13px; color: var(--tx-2);
  font-size: 13.5px; font-weight: 500; letter-spacing: .01em;
  white-space: nowrap; border-bottom: 2px solid transparent;
}
.nav a:hover { color: var(--tx); text-decoration: none; }
.nav a[aria-current] { color: var(--main); border-bottom-color: var(--main); }

.burger { display: none; flex-direction: column; gap: 5px; padding: 10px; border: 0; background: none; cursor: pointer; }
.burger span { display: block; width: 22px; height: 2px; background: var(--tx); }

/* =========================================================================
   Предложения
   ========================================================================= */

.offers { display: grid; gap: 14px; margin: 30px 0 40px; }
.offers__pair { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }

.offer {
  position: relative; display: flex; flex-direction: column; gap: 8px;
  padding: 26px; overflow: hidden;
  background: var(--ink) center/cover no-repeat;
  border: 1px solid var(--line); border-radius: 3px;
  color: var(--tx);
}
/* Затемнение под текстом. Направление горизонтальное только там, где карточка
   шире текста; на узком экране текст ложится на самую яркую часть картинки
   и без вертикального затемнения не читается — проверено на 390px. */
.offer::after {
  content: ""; position: absolute; inset: 0;
  background:
    linear-gradient(180deg, rgba(0, 0, 0, .72), rgba(0, 0, 0, .58) 60%, rgba(0, 0, 0, .72)),
    linear-gradient(90deg, var(--ink) 6%, rgba(0, 0, 0, .35) 70%, transparent);
}
@media (min-width: 701px) {
  .offer::after {
    background: linear-gradient(90deg, var(--ink) 12%, rgba(0, 0, 0, .62) 58%, rgba(0, 0, 0, .28));
  }
}
.offer > * { position: relative; z-index: 1; }
.offer:hover { text-decoration: none; border-color: var(--main); }

.offer__kick { font-size: 11px; color: var(--main); }
.offer__t { font-family: var(--serif); font-size: 26px; line-height: 1.15; font-weight: 800; }
.offer__sub { max-width: 46ch; color: var(--tx-2); font-size: 14.5px; }
.offer__go {
  align-self: flex-start; margin-top: 8px; padding: 10px 18px;
  background: var(--main); color: var(--bg);
  font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: .03em;
}
/* На служебных страницах остаётся одно предложение, и крупным оно там
   перевешивало сам текст страницы — делаем его полосой. */
.offers[data-quiet="yes"] .offer--lead { min-height: 0; padding: 20px 24px; }
.offers[data-quiet="yes"] .offer--lead .offer__t { font-size: 22px; }
.offers[data-quiet="yes"] { margin-bottom: 28px; }

.offer--lead { min-height: 220px; }
.offer--lead .offer__t { font-size: 34px; }
.offer--sm { min-height: 160px; }
.offer--sm .offer__t { font-size: 21px; }

/* =========================================================================
   Журнальная сетка
   =========================================================================
   Полоса статьи и рельс на полях. data-rail="no" — рельса нет и статья
   занимает всю ширину: на юридических страницах ни оглавления, ни паспорта.
   ========================================================================= */

.page { padding-bottom: 60px; }

.mag { display: grid; gap: 44px; align-items: start; }
.mag[data-rail="yes"] { grid-template-columns: minmax(0, 1fr) 320px; }

/* Без рельса — читальная колонка по центру. Прижатая влево, она оставляла
   на десктопе больше половины экрана пустой: страница выглядела недоделанной.
   Юридические страницы и «О нас» попадают сюда всегда: ни оглавления,
   ни таблицы фактов у них нет. */
.mag[data-rail="no"] .mag__body { max-width: 760px; margin-inline: auto; }

.rail { position: sticky; top: 96px; display: grid; gap: 16px; }

.card { padding: 20px; background: var(--ink); border: 1px solid var(--line); border-radius: 3px; }
.card__t {
  margin: 0 0 14px; padding-bottom: 10px; border-bottom: 1px solid var(--line);
  font-family: var(--sans); font-size: 12px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .12em; color: var(--main);
}

/* Паспорт строками «подпись сверху, значение снизу», а не двумя колонками.
   В колонках длинная подпись вроде «Méthodes de paiement» рвалась на три
   строки против двухстрочного значения, и строка выглядела сломанной.
   Здесь ширина достаётся значению целиком при любой длине подписи. */
.pass { margin: 0 0 16px; }
.pass__row { padding: 10px 0; border-bottom: 1px dashed var(--line); }
.pass__row:last-child { border-bottom: 0; }
.pass dt { color: var(--tx-2); font-size: 11.5px; text-transform: uppercase; letter-spacing: .07em; }
.pass dd { margin: 3px 0 0; font-size: 14px; font-weight: 600; line-height: 1.35; }

.toc { margin: 0; padding: 0; list-style: none; counter-reset: none; }
.toc li + li { margin-top: 2px; }
.toc a { display: flex; gap: 10px; padding: 7px 8px; color: var(--tx-2); font-size: 13.5px; line-height: 1.35; border-inline-start: 2px solid transparent; }
.toc a:hover { color: var(--tx); background: rgba(255, 255, 255, .04); text-decoration: none; }
.toc a .mono { flex: none; color: var(--main); font-size: 11px; padding-top: 2px; }
/* Активный пункт метит JS через data-атрибут — класс переименует рандомизатор. */
.toc a[data-on="yes"] { color: var(--tx); border-inline-start-color: var(--main); background: rgba(255, 255, 255, .05); }

/* =========================================================================
   Статья
   ========================================================================= */

.mag__body { min-width: 0; }

/* Крошки. Живут внутри колонки статьи, поэтому оформляются раньше её
   списочных правил и не подхватывают тире перед пунктами. */
.crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 18px; font-size: 13px; color: var(--tx-2); }
.crumbs a { color: var(--tx-2); }
.crumbs a:hover { color: var(--main); }
.crumbs__sep { color: var(--rule); }
.crumbs__here { color: var(--main); }

.mag__body h1 {
  margin: 0 0 18px;
  font-family: var(--serif); font-weight: 800;
  font-size: clamp(30px, 4.2vw, 46px); line-height: 1.1;
}
.mag__body h2 {
  margin: 42px 0 14px; padding-top: 18px; border-top: 1px solid var(--line);
  font-family: var(--serif); font-weight: 700;
  font-size: clamp(22px, 2.6vw, 30px); line-height: 1.2;
}
.mag__body h3 { margin: 28px 0 10px; font-size: 19px; font-weight: 700; }
.mag__body h4 { margin: 22px 0 8px; font-size: 16.5px; font-weight: 700; color: var(--main); }

/* Мера набора ограничена у текста везде, а не только на планшете: без
   ограничения строка доходила до 99 символов на широком экране и до 110
   на 1024, где рельс уже уехал вниз. Значение подобрано замером, а не на
   глаз: ch — это ширина нуля, а он шире среднего символа, поэтому 58ch
   дают около 75 символов. Таблицы и картинки остаются во всю ширину,
   им она нужна. */
.mag__body p,
.mag__body ul,
.mag__body ol { max-width: 58ch; }

.mag__body p { margin: 0 0 16px; color: var(--tx-2); }
/* Первый абзац статьи — вводка: крупнее и светлее остального текста. */
.mag__body h1 + p { color: var(--tx); font-size: clamp(17px, 1.7vw, 19.5px); line-height: 1.55; }

.mag__body strong { color: var(--tx); font-weight: 600; }
/* Подчёркивание — только настоящим ссылкам в тексте. Блок предложений
   движок кладёт внутрь контента, и без этого исключения его кнопки
   приезжали подчёркнутыми вместе с подписями. */
.mag__body a:not([data-cta]) { color: var(--main); text-decoration: underline; text-underline-offset: 3px; }

.mag__body ul, .mag__body ol { margin: 0 0 18px; padding-inline-start: 20px; color: var(--tx-2); }
.mag__body li { margin-bottom: 7px; }
.mag__body ul { list-style: none; padding-inline-start: 0; }
.mag__body ul li { position: relative; padding-inline-start: 20px; }
.mag__body ul li::before { content: ""; position: absolute; inset-inline-start: 2px; top: 11px; width: 7px; height: 1px; background: var(--main); }

/* Якоря от движка: пустые div перед заголовками. Отступ под липкую шапку,
   иначе переход по оглавлению прячет заголовок под ней. */
.mag__body div[id] { scroll-margin-top: 96px; }

/* Таблицы. Прокрутка внутри своей обёртки, чтобы страница не ехала вбок. */
.mag__body table {
  width: 100%; margin: 0 0 22px; border-collapse: collapse;
  font-size: 14.5px; display: block; overflow-x: auto;
}
.mag__body table thead { background: var(--ink); }
.mag__body table th {
  padding: 11px 14px; text-align: start; color: var(--main);
  font-size: 12px; text-transform: uppercase; letter-spacing: .08em;
  border-bottom: 1px solid var(--rule); white-space: nowrap;
}
.mag__body table td { padding: 11px 14px; color: var(--tx-2); border-bottom: 1px solid var(--line); vertical-align: top; }
.mag__body table tr:hover td { background: rgba(255, 255, 255, .03); }

.mag__body img { display: block; margin: 22px 0; border: 1px solid var(--line); border-radius: 3px; }

/* =========================================================================
   Подвал
   ========================================================================= */

.foot { border-top: 1px solid var(--line); background: var(--ink-2); }
.foot__in { display: grid; grid-template-columns: 1.2fr 1fr 1fr; gap: 34px; padding-top: 42px; padding-bottom: 30px; }
.foot__brand img { width: auto; height: 40px; margin-bottom: 14px; }
.foot__note { margin: 0 0 10px; max-width: 42ch; color: var(--tx-2); font-size: 13px; }
.foot__age { color: var(--main); font-size: 12px; }

.foot__nav { display: grid; gap: 9px; align-content: start; }
.foot__nav a { color: var(--tx-2); font-size: 14px; }
.foot__nav a:hover { color: var(--main); }

.foot__meta { display: grid; gap: 14px; align-content: start; }
.foot__mail { color: var(--main); font-size: 14px; }
.foot__marks { display: flex; flex-wrap: wrap; align-items: center; gap: 14px; opacity: .75; }
.foot__marks img { height: 24px; width: auto; }

.foot__bar { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding-top: 16px; padding-bottom: 22px; border-top: 1px solid var(--line); color: var(--tx-2); font-size: 12.5px; }

/* =========================================================================
   Липкая полоса
   =========================================================================
   Показана по умолчанию, прячется на широком экране — именно в таком
   порядке. Обратная схема означает, что любая неожиданная ширина вьюпорта
   оставляет единственную кнопку невидимой; здесь худший случай мягкий.
   ========================================================================= */

.dock {
  position: fixed; inset: auto 0 0; z-index: 95; display: flex;
  align-items: center; justify-content: space-between; gap: 12px;
  padding: 10px 22px calc(10px + env(safe-area-inset-bottom, 0px));
  background: var(--ink); border-top: 1px solid var(--main);
}
/* Название бренда в базе записано строчными («cresus casino») — приводим
   к виду заголовка здесь, а не правим данные: их пишет панель. */
.dock__t { font-family: var(--serif); font-size: 16px; font-weight: 700; text-transform: capitalize; }
@media (min-width: 1081px) { .dock { display: none; } }

/* =========================================================================
   Адаптив
   =========================================================================
   Порог компактной шапки — 1080px. Содержимое шапки требует около 900px,
   и полоса 801–1023, куда попадают все айпады, при меньшем пороге рисовала
   бы горизонтальное меню там, где для него нет места.
   ========================================================================= */

@media (max-width: 1180px) {
  .mag[data-rail="yes"] { grid-template-columns: minmax(0, 1fr) 280px; gap: 30px; }
}

@media (max-width: 1080px) {
  /* Строка навигации сворачивается в выпадающее меню. Прячем саму строку,
     а не только .nav — иначе от неё остаётся пустая линейка под шапкой. */
  .mast__navrow {
    position: absolute; top: 100%; inset-inline: 0; z-index: 80;
    background: var(--ink); border-bottom: 1px solid var(--line);
    opacity: 0; visibility: hidden; transform: translateY(-8px);
    transition: opacity .2s var(--ease), transform .2s var(--ease), visibility .2s;
  }
  .mast[data-open="yes"] .mast__navrow { opacity: 1; visibility: visible; transform: none; }
  .nav { flex-direction: column; gap: 0; padding-block: 8px 16px; overflow: visible; }
  .nav a { padding: 12px 4px; font-size: 16px; border-bottom: 0; border-inline-start: 2px solid transparent; }
  .nav a[aria-current] { border-inline-start-color: var(--main); padding-inline-start: 10px; }
  .burger { display: flex; }
  .mast__cta { display: none; }
  .mast { position: sticky; }
  .mast__bar { position: static; }

  /* Рельс уходит под статью: липким он на планшете уже бесполезен. */
  .mag[data-rail="yes"] { grid-template-columns: minmax(0, 1fr); gap: 26px; }
  .rail { position: static; grid-template-columns: 1fr 1fr; }


  body { padding-bottom: calc(66px + env(safe-area-inset-bottom, 0px)); }
}

@media (max-width: 820px) {
  .foot__in { grid-template-columns: 1fr 1fr; gap: 26px; }
}

@media (max-width: 700px) {
  .offers__pair { grid-template-columns: 1fr; }
  .rail { grid-template-columns: 1fr; }
  /* На телефоне три крупные карточки отодвигали заголовок статьи за экран.
     Ведущее предложение остаётся заметным, два других ужимаются. */
  .offer--lead { min-height: 190px; }
  .offer--lead .offer__t { font-size: 25px; }
  .offer--sm { min-height: 0; padding: 18px 20px; }
  .offer--sm .offer__t { font-size: 19px; }
  .offers { margin-bottom: 30px; }
  .mag__body h2 { margin-top: 32px; }
}

@media (max-width: 560px) {
  .shell { padding-inline: 16px; }
  .foot__in { grid-template-columns: 1fr; }
  .offer { padding: 20px; }
  .dock { padding-inline: 16px; }
  .dock__t { font-size: 14px; }
  .mast__top-in { font-size: 10.5px; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { transition: none !important; animation: none !important; }
}

/* Кнопка «наверх» — только стрелка, подпись живёт в aria-label. */
.foot__up {
  display: inline-flex; align-items: center; justify-content: center;
  width: 34px; height: 34px; border: 1px solid var(--line); border-radius: 50%;
  color: var(--tx-2); font-size: 15px; line-height: 1;
}
.foot__up:hover { color: var(--main); border-color: var(--main); text-decoration: none; }

/* =========================================================================
   Модули аффилиат-сайта
   =========================================================================
   Собираются из настоящих данных страницы: паспорт из двухколоночной
   таблицы, витрина игр — из таблицы, где есть колонка процентов, карточки —
   из прочих трёхколоночных. Нет структуры — модуль не рисуется.
   ========================================================================= */

/* --- паспорт --- */
.facts { margin: 26px 0 30px; border: 1px solid var(--line); border-radius: 4px; background: var(--ink); }
.facts__head {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 14px;
  padding: 16px 20px; border-bottom: 1px solid var(--line);
}
.facts__t { margin: 0; font-family: var(--sans); font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .12em; color: var(--main); }
.facts__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; margin: 0; background: var(--line); }
.facts__i { padding: 13px 20px; background: var(--ink); }
.facts__i dt { color: var(--tx-2); font-size: 11.5px; text-transform: uppercase; letter-spacing: .06em; }
.facts__i dd { margin: 3px 0 0; font-size: 14.5px; font-weight: 600; line-height: 1.35; }

/* --- витрина игр --- */
.slots { margin: 26px 0 30px; }
.slots__t { margin: 0 0 14px; font-family: var(--serif); font-size: clamp(21px, 2.4vw, 27px); font-weight: 700; }
.slots__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(215px, 1fr)); gap: 12px; }
.slot { display: flex; flex-direction: column; gap: 7px; padding: 16px; background: var(--ink); border: 1px solid var(--line); border-radius: 4px; }
.slot__n { margin: 0; font-size: 15.5px; font-weight: 700; }
.slot__d { margin: 0; color: var(--tx-2); font-size: 13px; line-height: 1.45; }
.slot__rtp { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-top: auto; }
.slot__lab { color: var(--tx-2); font-size: 10.5px; text-transform: uppercase; }
.slot__val { color: var(--main); font-size: 14px; font-weight: 700; }
.slot__bar { height: 3px; background: rgba(255, 255, 255, .1); border-radius: 2px; overflow: hidden; }
.slot__bar i { display: block; height: 100%; background: var(--main); }

/* --- карточки из таблицы --- */
.cards { margin: 26px 0 30px; }
.cards__t { margin: 0 0 14px; font-family: var(--serif); font-size: clamp(21px, 2.4vw, 27px); font-weight: 700; }
.cards__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
.card { padding: 16px 18px; background: var(--ink); border: 1px solid var(--line); border-radius: 4px; }
.cards .card__n { margin: 0 0 10px; padding-bottom: 9px; border-bottom: 1px solid var(--line); font-size: 15.5px; font-weight: 700; color: var(--main); }
.card__list { margin: 0; display: grid; gap: 9px; }
.card__list dt { color: var(--tx-2); font-size: 11px; text-transform: uppercase; letter-spacing: .06em; }
.card__list dd { margin: 2px 0 0; font-size: 14px; line-height: 1.4; }

/* --- призыв внутри текста --- */
.ctabox {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px;
  margin: 30px 0; padding: 22px 24px; border-radius: 4px;
  background: linear-gradient(120deg, var(--ink), var(--ink-2));
  border: 1px solid var(--rule);
}
.ctabox[data-tone="quiet"] { background: var(--ink); border-color: var(--line); }
.ctabox__txt { display: grid; gap: 4px; }
.ctabox__t { margin: 0; font-family: var(--serif); font-size: clamp(19px, 2.2vw, 25px); font-weight: 800; text-transform: capitalize; }
.ctabox__s { margin: 0; color: var(--tx-2); font-size: 14px; }
.ctabox__promo { margin: 4px 0 0; padding: 5px 12px; justify-self: start; border: 1px dashed var(--main); border-radius: 3px; color: var(--main); font-size: 13px; }
.btn--lg { padding: 15px 30px; font-size: 15px; }

/* --- списки преимуществ --- */
.checks { margin: 22px 0; }
.checks__t { margin: 0 0 12px; font-family: var(--serif); font-size: 21px; font-weight: 700; }
.checks__list { display: grid; gap: 9px; margin: 0; padding: 0; list-style: none; }
.checks__list li { position: relative; padding-inline-start: 26px; color: var(--tx-2); }
.checks__list li::before { content: "✓"; position: absolute; inset-inline-start: 0; color: var(--main); font-weight: 700; }

.part { margin-bottom: 8px; }

@media (max-width: 700px) {
  .facts__grid { grid-template-columns: 1fr; }
  .ctabox { padding: 18px; }
  .ctabox .btn { width: 100%; }
}

/* Заголовки модулей перебивают правило .mag__body h2.

   Модули живут внутри статьи, и её правило (антиква, до 30px, линейка
   сверху, отступ 42px) делало из подписи паспорта огромный заголовок
   с чужой линейкой. Селекторы ниже намеренно длиннее, чтобы выиграть
   по весу, а не через !important. */
.mag__body .facts .facts__t {
  margin: 0; padding: 0; border-top: 0;
  font-family: var(--sans); font-size: 12px; font-weight: 700;
  line-height: 1.4; text-transform: uppercase; letter-spacing: .12em; color: var(--main);
}
.mag__body .slots .slots__t,
.mag__body .cards .cards__t,
.mag__body .checks .checks__t {
  margin: 0 0 14px; padding-top: 0; border-top: 0;
  font-size: clamp(20px, 2.2vw, 26px);
}
.mag__body .slots .slot__n,
.mag__body .cards .card__n { margin-top: 0; }

/* Нечётная последняя строка паспорта занимала половину, оставляя рядом
   пустую ячейку. Растягиваем её на обе колонки. */
.facts__grid > .facts__i:last-child:nth-child(odd) { grid-column: 1 / -1; }

/* --- вклад в отыгрыш --- */
.wager { margin: 26px 0 30px; }
.mag__body .wager .wager__t { margin: 0 0 14px; padding-top: 0; border-top: 0; font-size: clamp(20px, 2.2vw, 26px); }
.wager__list { display: grid; gap: 10px; padding: 16px 18px; background: var(--ink); border: 1px solid var(--line); border-radius: 4px; }
.wager__row { display: grid; grid-template-columns: minmax(0, 1fr) 44% auto; align-items: center; gap: 14px; }
.wager__k { color: var(--tx-2); font-size: 14px; }
.wager__track { position: relative; height: 8px; background: rgba(255, 255, 255, .08); border-radius: 4px; }
.wager__track i { position: absolute; top: 0; height: 100%; background: var(--main); border-radius: 4px; }
.wager__v { color: var(--main); font-size: 13px; font-weight: 700; white-space: nowrap; }

@media (max-width: 700px) {
  /* На телефоне три колонки не помещаются: подпись сверху, шкала под ней. */
  .wager__row { grid-template-columns: minmax(0, 1fr) auto; }
  .wager__track { grid-column: 1 / -1; }
}

/* =========================================================================
   Оживающая строка ключевых цифр
   =========================================================================
   Числа настоящие, из паспорта страницы. Анимация только уточняет акцент:
   разметка сразу содержит итоговое значение, и без скрипта строка просто
   стоит на месте. Ничего не появляется и не прячется по скриптам.
   ========================================================================= */

.kpi {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1px;
  margin: 24px 0 26px; background: var(--line);
  border: 1px solid var(--line); border-radius: 4px; overflow: hidden;
}
.kpi__i { display: grid; gap: 4px; padding: 18px 20px; background: var(--ink); }
.kpi__v {
  font-family: var(--serif); font-size: clamp(26px, 3.4vw, 38px); font-weight: 800;
  line-height: 1; color: var(--main); font-variant-numeric: tabular-nums;
}
.kpi__k { color: var(--tx-2); font-size: 11px; text-transform: uppercase; letter-spacing: .07em; line-height: 1.35; }

/* Подчёркивание, растущее под цифрой при появлении блока. */
.kpi__i { position: relative; }
.kpi__i::after {
  content: ""; position: absolute; inset-inline-start: 20px; bottom: 12px;
  width: 0; height: 2px; background: var(--main); opacity: .5;
  transition: width .9s var(--ease);
}
.kpi[data-on="yes"] .kpi__i::after { width: 34px; }

/* Шкалы витрины и отыгрыша заполняются при появлении. Стартовая ширина
   задаётся только когда скрипт жив (флаг на html), иначе при отвалившемся
   JS полоски остались бы пустыми навсегда. */
html[data-js] .slot__bar i,
html[data-js] .wager__track i { transform: scaleX(0); transform-origin: left; transition: transform .8s var(--ease); }
html[data-js] .slots[data-on="yes"] .slot__bar i,
html[data-js] .wager[data-on="yes"] .wager__track i { transform: scaleX(1); }

@media (prefers-reduced-motion: reduce) {
  .kpi__i::after { transition: none; width: 34px; }
  html[data-js] .slot__bar i,
  html[data-js] .wager__track i { transform: none; transition: none; }
}

@media (max-width: 560px) {
  .kpi { grid-template-columns: 1fr 1fr; }
  .kpi__i { padding: 14px 16px; }
}
