/*
 * 99 by CleanWhale — польская главная (front-page.php) + доработки виджета агента.
 * Грузится ПОСЛЕ канонического style.css дочерней темы, версия по filemtime.
 *
 * Дизайн-система CleanWhale (проверяется scripts/check-unified-design.mjs):
 *   плоский #2457c6 без градиентов · futura-pt · тени только 0 0 Nvw rgba(0,0,0,a)
 *   · вёрстка во vw · текст #000, приглушение через opacity · без letter-spacing,
 *   uppercase, backdrop-filter и авто-тёмной темы.
 *
 * ⚠️ ГЛАВНАЯ — СВЕТЛАЯ (макет владельца 2026-08-22, «вот какой дизайн я
 * ожидаю»): синего полотна hero больше НЕТ, фон страницы белый, текст тёмный,
 * вторая строка H1 синяя, поверхности — белые карточки с ореолами. Все
 * прежние правила «белое на синем» в этом файле переписаны под белый фон;
 * волны G7 и водяной знак «99» удалены вместе с синим полотном.
 *
 * Правило про контраст, оплаченное четырьмя провалами AA:
 * НЕ ПРИГЛУШАТЬ ЧЕРЕЗ opacity КОНТЕЙНЕР, ВНУТРИ КОТОРОГО ЕСТЬ ССЫЛКА.
 * opacity родителя нельзя отменить правилом на потомке — она композитится
 * поверх любого его color. Так «Polityka prywatności» и «regulaminie» (обе
 * обязательны по AI Act / RODO) оказались на 2.85:1, а плашки «Brak zdjęcia» —
 * на 2.65:1, причём замер дочернего узла этого НЕ показывает: opacity стоит
 * на родителе. Приглушать текстом — сплошным цветом, ссылку оставлять полной.
 */

:root {
  --cw99-blue: #2457c6;
  --cw99-blue-hover: #1c47a6;
  --cw99-yellow: #ffc73b;
  --cw99-yellow-soft: #ffea84;
  --cw99-green: #59b78b;
  /* Тёмно-зелёный вместо брендового #59b78b везде, где он становится ТЕКСТОМ на
     белом: #59b78b даёт там 2.45:1, #1f7a57 — 5.28:1. Брендовый остаётся для
     заливок. Та же логика, что у --cw99-muted ниже. */
  --cw99-green-dark: #1f7a57;
  /* Пятый и шестой цвета — РЕШЕНИЕ ВЛАДЕЛЬЦА, макет светлой главной
     2026-08-22 (рельс категорий: «Motoryzacja — фиолетовый», «Usługi —
     зелёно-бирюзовый»). Оттенки подобраны под белую иконку на заливке:
     #6d3fc4 — 6.65:1, #128a80 — 4.22:1 (порог нетекстового контраста 3:1;
     замер — формула WCAG, см. DESIGN.md). Вне квадратов рельса и бейджей
     категорий эти цвета НЕ ИСПОЛЬЗОВАТЬ — они существуют ровно для
     различения категорий, узаконенного макетом. */
  --cw99-purple: #6d3fc4;
  --cw99-teal: #128a80;
  --cw99-card: #fafafa;
  --cw99-line: #e9e9e9;
  --cw99-dark: #242424;
  /* Скругление. Было .3vw — прямая калька `.rounded` с cleanwhale.se, но на
     1280 это 3.8px, то есть практически прямой угол, а в макете главной
     карточки заметно скруглены. Пол в пикселях нужен из-за телефона: на 390
     .3vw давало 1.2px, и панель агента стояла с острыми углами вплотную к
     скруглённым карточкам. Панель агента крупнее остальных поверхностей,
     поэтому у неё свой радиус. */
  --cw99-r: clamp(10px, 1.05vw, 16px);
  --cw99-r-lg: clamp(14px, 1.5vw, 20px);
  /* Приглушённый текст сплошным цветом вместо opacity — там, где рядом ссылка.
     #5b6472 на #fafafa = 5.7:1, на #fff = 6.0:1. */
  --cw99-muted: #5b6472;
}

/* Фокус с клавиатуры. Тема гасит outline, а единственной реакцией на :focus у
   карточек было изменение размытия тени на полвиэйча — с клавиатуры страница
   выглядела мёртвой.
   Со светлой главной (2026-08-22) кольцо ВЕЗДЕ синее: жёлтые обводки
   существовали ровно потому, что синее кольцо было невидимо на синем hero —
   полотна больше нет, на белом синий даёт 6.45:1. */
.cw99-reference-home a:focus-visible,
.cw99-reference-home button:focus-visible,
.cw99-reference-home input:focus-visible,
.cw99-agent-box .agent-chip:focus-visible,
.cw99-agent-box .agent-btn:focus-visible,
.cw99-agent-box .agent-inp:focus-visible {
  outline: 3px solid var(--cw99-blue);
  outline-offset: 2px;
}

/* Общая геометрия инлайн-иконок: наследуют цвет и кегль текста. */
.cw99-i {
  display: block;
  width: 1em;
  height: 1em;
  flex: 0 0 auto;
}

/* ── Шапка ──────────────────────────────────────────────────────────────────
   С 2026-08-22 шапка БЕЛАЯ на всех страницах (макет светлой главной): бирка
   лого синяя с белыми «99», пункты меню тёмные. Полный слой белой шапки —
   skin.css, секция P (там же перекраска канонных белых ссылок style.css:36-41
   и пилюля региона «Cała Polska»); здесь остаётся только геометрия.
   Мёртвые правила старого текстового wordmark'а .cw99-pl-brand удалены —
   шапку с этапа E печатает инлайн-SVG .cw99-pl-tag (skin.css E). */
.header-navbar {
  position: relative;
  z-index: 20;
  background: #fff;
}
.header-navbar__menu .menu-item > a {
  font-size: clamp(15px, 1vw, 18px);
}
.header-navbar__menu .menu-item > a[href*="submit-listing"] {
  padding: .82vw 1.45vw;
  /* CTA «Dodaj ogłoszenie» — БРЕНД-СИНЯЯ (макет владельца 2026-08-30, НЕ
     жёлтая): плоский #2457c6, белый текст, radius канона 6. Вес 700, не
     подделываемый 600. background-image — страховка от глянцевой плёнки темы. */
  background: var(--cw99-blue, #2457c6);
  background-image: none;
  border-radius: 6px;
  color: #fff !important;
  font-weight: 700;
}

/* ── Виджет: шапка-персонаж УДАЛЕНА (2026-08-21, круг 3) ────────────────────
   Тёмная навы-шапка .agent-topbar (робот cw99_robot_svg, бейдж «99», имя
   «Agent 99», подпись, зелёная точка, блики) снята целиком вместе с
   персонажем — решение владельца: «забываем про нашего агента, он просто
   не нужен». Аватар реплик .agent-ava тоже мёртв (agent.js рисует дымки без
   аватара). Все правила блока удалены; история — в git. Нейтральная строка
   режима черновика .agent-drafthead живёт в skin.css, секция O. */

.cw99-agent-box .agent-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border-width: 1px;
  /* Было 2px сплошного #2457c6: пять жирных синих обводок перетягивали
     внимание с приветствия агента на ряд чипов. */
  border-color: rgba(36, 87, 198, .4);
}
.cw99-agent-box .agent-chip .cw99-i {
  width: 14px;
  height: 14px;
  color: var(--cw99-blue);
  opacity: 1;
}
.cw99-agent-box .agent-chip:hover .cw99-i {
  color: #fff;
}
.cw99-agent-box .agent-natural-hint {
  display: flex;
  align-items: center;
  gap: 9px;
  margin: 6px 16px 8px 58px;
  padding: 8px 11px;
  border-radius: var(--cw99-r);
  background: rgba(255, 234, 132, .42);
  color: #000;
  font-size: .82em;
}
.cw99-agent-box .agent-natural-hint .cw99-i {
  width: 16px;
  height: 16px;
  color: #a97b00;
}
/* Второе предложение подсказки — перечень языков, МЕЛКО (свод с макетом
   2026-08-20: первая строка — макетная «Porozmawiaj naturalnie…», а языки не
   выброшены, потому что для украино- и русскоязычной аудитории это обещание,
   ради которого агент и определяет язык). Ссылок внутри нет — приглушение
   opacity безопасно (прецедент: .cw99-reference-rail__text small). */
.cw99-agent-box .agent-natural-hint small {
  display: block;
  margin-top: 2px;
  font-size: .88em;
  opacity: .72;
}
.cw99-agent-box .agent-capabilities {
  display: flex;
  align-items: center;
  padding: 0 16px 8px 58px;
}
/* Три кружка внахлёст — та же фигура, что «+156 osób» в макете, но честная:
   пользователей у доски пока трое (все служебные), поэтому в кружках не аватары
   людей, а то, что агент умеет. Нахлёст заметный (-8), иначе читается не как
   группа, а как ряд отдельных иконок. */
.cw99-agent-box .agent-capabilities > span {
  display: inline-flex;
  width: 28px;
  height: 28px;
  align-items: center;
  justify-content: center;
  margin-left: -8px;
  border: 2px solid #fafafa;
  border-radius: 50%;
  background: #eef2fc;
  color: var(--cw99-blue);
}
.cw99-agent-box .agent-capabilities > span:first-child {
  margin-left: 0;
}
.cw99-agent-box .agent-capabilities .cw99-i {
  width: 13px;
  height: 13px;
}
.cw99-agent-box .agent-capabilities p {
  margin: 0 0 0 9px;
  color: var(--cw99-muted);
  font-size: .8em;
}
/* Здесь стояла opacity:.62 на контейнере — и ссылка «Polityka prywatności»
   выходила 2.85:1 при обязательности этой ссылки по RODO. Приглушение цветом. */
.cw99-agent-box .agent-security {
  display: flex;
  align-items: flex-start;
  gap: 7px;
  padding: 5px 18px 9px;
  color: var(--cw99-muted);
  font-size: .74em;
}
.cw99-agent-box .agent-security .cw99-i {
  width: 14px;
  height: 14px;
  margin-top: 1px;
  color: var(--cw99-blue);
  opacity: 1;
}
.cw99-agent-box .agent-security a {
  color: var(--cw99-blue);
  text-decoration: underline;
}
/* Кнопка вложения наследовала currentColor (чёрный), а соседний микрофон был
   синим — две одинаковые кнопки рядом разного цвета. */
.cw99-agent-box .agent-photobtn {
  color: var(--cw99-blue-hover);
}
/* Скругление и прижатые к низу реплики — не только на главной: панель агента
   стоит ещё на /agent/, и она должна быть тем же продуктом, а не его вариантом.
   Про margin-top:auto вместо justify-content:flex-end см. подробный комментарий
   в блоке правой колонки ниже. */
.cw99-agent-box .agent-shell {
  border-radius: var(--cw99-r-lg);
}
.cw99-agent-box .agent-chat {
  display: flex;
  flex-direction: column;
}
/* Мессенджерное поведение (реплики прижаты к низу ленты) включается ТОЛЬКО
   когда переписка началась — класс has-history ставит agent.js при первой
   отправке. В стартовом состоянии прижимать нечего: приветствие и чипы — весь
   контент, и auto-margin превращался в пустую белую полосу на первом экране
   продукта (замер на /agent/ при 1280: 141px = 48% высоты ленты). */
.cw99-agent-box .agent-chat.has-history > :first-child {
  margin-top: auto;
}

/* ══════════════════════════════════════════════════════════════════════════
   ГЛАВНАЯ
   ══════════════════════════════════════════════════════════════════════════ */

/* Тема заворачивает контент в .site-content > .container с фиксированной
   шириной и полями. Главной нужен полноэкранный синий hero, поэтому на ней
   обёртка распускается; на остальных страницах она работает как раньше. */
body.cw99-home .site-content {
  padding: 0;
}
body.cw99-home .site-content > .container {
  width: 100%;
  max-width: none;
  margin: 0;
  padding: 0;
}

.cw99-reference-home {
  overflow: hidden;
  background: #fff;
  color: #000;
}
.cw99-reference-home *,
.cw99-reference-home *::before,
.cw99-reference-home *::after {
  box-sizing: border-box;
}
.cw99-reference-wrap {
  width: 94vw;
  /* Без потолка на 2560 контейнер разъезжается до 2406px, а кегли давно упёрлись
     в свои максимумы — композиция превращается в тонкую ленту через весь экран. */
  max-width: 1680px;
  margin-right: auto;
  margin-left: auto;
}

/* ── A. Hero — СВЕТЛЫЙ (макет владельца 2026-08-22) ─────────────────────────
   Синее полотно, блоб ::before, водяной знак «99» ::after и волны (skin.css
   G7, удалена) сняты ВМЕСТЕ с решением владельца о светлой главной: фон
   страницы белый, текст тёмный, вторая строка H1 синяя. */
.cw99-reference-hero {
  position: relative;
  overflow: hidden;
  padding: 2.6vw 0 2.9vw;
  background: #fff;
  color: #000;
}
.cw99-reference-layout {
  position: relative;
  z-index: 1;
  display: grid;
  /* Круг 5 (2026-08-22): панель агента снесена («мы убираем белый чат наш
     совсем»), правая колонка = один рельс. Прежняя пропорция 40fr/54fr
     существовала ради панели; освободившиеся 54fr отданы левой колонке —
     рельс держит свою прежнюю расчётную ширину (та же формула, что была у
     колонки рельса внутри .cw99-reference-product: название до 16px/700
     ≈ 105px + квадрат иконки 46 + зазоры), всё остальное — тексту и ряду
     карточек: карточки при четырёх в ряд заметно крупнее (было 134px на
     1440 — панель съедала треть ширины). */
  grid-template-columns: minmax(0, 1fr) clamp(172px, 13.4vw, 210px);
  gap: 2vw;
  /* stretch, а не start: правая колонка тянется до высоты левой. С фиксированной
     высотой правой колонки под рельсом оставалась дыра — на 1920 почти сотня
     пикселей, потому что левая выросла на ряд карточек с фото и плитку
     статистики. На телефоне раскладка становится flex-колонкой, и там stretch
     растянул бы пилюлю региона во всю ширину — поэтому в мобильном блоке
     align-items возвращается к flex-start. */
  align-items: stretch;
}
.cw99-reference-copy {
  display: flex;
  min-width: 0;
  flex-direction: column;
  align-items: flex-start;
  gap: 1.1vw;
}

/* A1. Пилюля региона ПЕРЕЕХАЛА В ШАПКУ (макет 2026-08-22) — правила
   .cw99-reference-location удалены вместе с разметкой, пилюля «Cała Polska»
   живёт в header.php и стилизуется skin.css, секция P. */

/* A2. Заголовок: первая строка тёмная, вторая смысловая — СИНЯЯ (макет
   светлой главной; жёлтая строка существовала для контраста на синем). */
.cw99-reference-copy h1 {
  display: flex;
  flex-direction: column;
  margin: 0;
  color: #000;
  /* Было clamp(28px, 2.7vw, 50px): на 1280 заголовок укладывался в ДВЕ строки,
     акцентная часть — в одну. В макете он крупный; перенос делает не <br>,
     а кегль. */
  font-size: clamp(30px, 3.5vw, 56px);
  font-weight: 700;
  line-height: 1.05;
}
.cw99-reference-copy h1 span,
.cw99-reference-copy h1 strong {
  display: block;
  color: inherit;
  font-weight: inherit;
}
.cw99-reference-copy h1 strong {
  color: var(--cw99-blue);
}

/* A3. Лид: серый по макету — канонное приглушение чёрного через opacity
   (ссылок внутри нет, композитить нечему; .68 на белом ≈ 7.9:1). */
.cw99-reference-lead {
  max-width: 34vw;
  margin: 0;
  color: #000;
  font-size: clamp(15px, 1.02vw, 20px);
  line-height: 1.45;
  opacity: .68;
}
.cw99-reference-lead strong {
  color: #000;
  font-weight: 700;
}

/* A4. Полоса доверия под карточкой подключения (макет 2026-08-22): БЕЛАЯ
   полоса, три пункта «иконка в голубом кружке + заголовок + подпись»,
   разделители — тонкие линии между колонками. Каждое утверждение проверяемо:
   премодерация реально работает, число городов берётся из таксономии,
   регламент опубликован. */
.cw99-reference-trust-chips {
  display: grid;
  width: 100%;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  padding: .9vw 0;
  border-radius: var(--cw99-r);
  background: #fff;
  box-shadow: 0 0 max(9px, 1vw) rgba(0, 0, 0, .07);
  color: #000;
}
.cw99-reference-trust-chips > span,
.cw99-reference-trust-chips > a {
  display: grid;
  grid-template-columns: 2.1vw minmax(0, 1fr);
  grid-template-rows: auto auto;
  column-gap: .55vw;
  align-items: center;
  /* align-content:start — иначе свободная высота плашки раздаётся ПОРОВНУ
     между двумя авто-строками, и плашка с однострочным заголовком («Jasne
     zasady») уезжает вниз относительно соседок с двухстрочными: замерено
     8.1px разницы по верху заголовка и 8.2px по подписи внутри одного ряда
     одинаковых по высоте плашек. Теперь строки держат натуральную высоту и
     заголовки всех трёх стоят на одной линии. */
  align-content: start;
  min-height: 3.2vw;
  padding: .3vw .9vw;
  /* Разделитель колонок — тонкая линия токеном, как у плитки статистики. */
  border-left: 1px solid var(--cw99-line);
  color: #000;
  text-decoration: none;
}
.cw99-reference-trust-chips > :first-child {
  border-left: 0;
}
.cw99-reference-trust-chips > a:hover b {
  color: var(--cw99-blue);
}
.cw99-reference-trust-chips .cw99-i {
  grid-row: 1 / 3;
  width: 2.1vw;
  min-width: 22px;
  height: 2.1vw;
  min-height: 22px;
  padding: .5vw;
  border-radius: 50%;
  /* Голубой кружок + синяя иконка — та же пара, что у нижней ленты доверия
     (skin.css G6) и строк /ai: 5.76:1. */
  background: #eef2fc;
  color: var(--cw99-blue);
}
/* Переносим, а не обрезаем: после подъёма кеглей «Moderacja przed publikacją»
   перестала влезать в 140px колонки на 1280, и ellipsis съедал бы ровно то
   утверждение, ради которого бейдж существует. */
.cw99-reference-trust-chips b,
.cw99-reference-trust-chips small {
  min-width: 0;
  line-height: 1.25;
}
/* Кегли: коэффициент vw поднят вместе с полом. Со старым (.74vw/.66vw) всё до
   ~1900px сидело на минимуме, то есть на 1280 и 1512 — самых частых ширинах —
   бейджи набирались 10-11 пунктом, а прилично выглядели только на 1920. */
.cw99-reference-trust-chips b {
  align-self: end;
  color: #000;
  font-size: clamp(13px, .95vw, 16px);
  font-weight: 700;
}
/* Подпись — сплошной muted, не opacity: третий пункт целиком ссылка, а
   opacity контейнера гасила бы и её (грабля из шапки файла). */
.cw99-reference-trust-chips small {
  align-self: start;
  color: var(--cw99-muted);
  font-size: clamp(11px, .8vw, 14px);
}

/* A5. «Najnowsze ogłoszenia» — заголовок секции над рядом (макет 2026-08-22).
   База .cw99-reference-section-head живёт ниже (секция discovery); здесь
   только посадка внутрь флекс-колонки hero: свои внешние поля не нужны,
   ритм задаёт gap колонки. */
.cw99-reference-section-head--hero {
  width: 100%;
  margin: .6vw 0 0;
}

/* A5. Ряд карточек: настоящие объявления + приглашения в категории на остаток. */
.cw99-reference-cards {
  display: grid;
  width: 100%;
  /* ЧЕТЫРЕ карточки — макетная плотность, решение владельца 2026-08-19
     (PHP отдаёт четыре — см. front-page.php). Прежний спуск до трёх
     (2026-08-12) лечил симптом узкой карточки: длинные настоящие заголовки
     ломались на четыре строки и карточка превращалась в полоску. Теперь
     пропорцию держит кламп заголовка в ДВЕ строки с многоточием (см.
     .cw99-reference-card__body strong) — как набраны подписи в макете. */
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: .6vw;
}
.cw99-reference-card {
  /* position:relative — под кнопку «в избранное» в правом нижнем углу.
     Ореол — карточный .07→.12 (язык каталога): плотный .16 существовал для
     читаемости на синем полотне, на белой странице он давил. */
  position: relative;
  display: flex;
  min-width: 0;
  flex-direction: column;
  overflow: hidden;
  border-radius: var(--cw99-r);
  background: #fff;
  box-shadow: 0 0 max(9px, 1vw) rgba(0, 0, 0, .07);
  color: #000 !important;
  text-decoration: none;
  transition: box-shadow .2s ease, transform .2s ease;
}
.cw99-reference-card:hover,
.cw99-reference-card:focus-within {
  box-shadow: 0 0 max(12px, 1.4vw) rgba(0, 0, 0, .12);
  color: #000 !important;
  transform: translateY(-.12vw);
}
/* Ссылка на объявление — отдельный элемент внутри карточки, а не сама карточка:
   кнопку «в избранное» нельзя вкладывать в <a> (невалидно и ломает клавиатуру),
   поэтому у них общий родитель. */
.cw99-reference-card__link {
  display: flex;
  min-width: 0;
  flex: 1;
  flex-direction: column;
  color: #000 !important;
  text-decoration: none;
}
.cw99-reference-card__media {
  position: relative;
  display: flex;
  aspect-ratio: 4 / 3;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  background: #eef2fc;
  color: var(--cw99-blue);
}
/* Плашка «нет фото» держит ТОТ ЖЕ силуэт 4:3, что фотография.
   Раньше 4:3 здесь снимали: миниатюр в инсталляции ноль, и ряд состоял из одних
   пустых серых прямоугольников. Теперь рядом всегда стоят подложки категорий
   того же размера, поэтому карточка без фото читается как «у этого объявления
   нет фото», а не как сломанная вёрстка. */
.cw99-reference-card__media--empty {
  background: #eef2fc;
}
.cw99-reference-card__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
/* opacity:.62 на этом контейнере давала 2.65:1 на подложке #eef2fc. Убрана:
   синий на #eef2fc — 5.76:1. */
.cw99-reference-card__empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .3vw;
  color: var(--cw99-blue);
  text-align: center;
}
.cw99-reference-card__empty .cw99-i {
  width: 1.9vw;
  min-width: 22px;
  height: 1.9vw;
  min-height: 22px;
}
.cw99-reference-card__empty small {
  font-size: clamp(11px, .78vw, 13px);
}
.cw99-reference-card__tag {
  position: absolute;
  top: .42vw;
  left: .42vw;
  /* Потолок ширины — только собственные поля карточки: с 2026-08-19 кнопка
     «в избранное» переехала с фотографии в нижнюю строку (как в макете
     владельца — сердечко там стоит у строки города), верхний правый угол
     снимка снова свободен, и бейдж получает всю ширину. Это закрыло минорку
     критика: «Nieruchomości» (~90px) обрезалось многоточием при прежнем
     потолке 86px на карточке 134px в четырёхколоночном ряду. */
  max-width: calc(100% - .84vw);
  overflow: hidden;
  padding: .18vw .45vw;
  border-radius: 10vw;
  background: var(--cw99-blue);
  color: #fff;
  font-size: clamp(11px, .75vw, 13px);
  font-weight: 700;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Цвет бейджа по корневой категории — язык цвета тот же, что у квадратов
   рельса (макет светлой главной 2026-08-22: владелец узаконил фиолетовый для
   Motoryzacja и зелёно-бирюзовый для Usługi — токены --cw99-purple/--cw99-teal
   в :root). Контраст текста замерен: жёлтый берёт ЧЁРНЫЙ (белый на нём
   1.56:1), зелёный — тёмный вариант (#59b78b под белым 2.45:1), белый на
   фиолетовом 6.65:1, на бирюзовом 4.22:1. */
/* ЦВЕТОВОГО КОДА РУБРИК БОЛЬШЕ НЕТ (2026-09-03, обе критики независимо).
   Замер до правки: на одном экране каталога плашка жила в ПЯТИ заливках —
   синей, #242424 (тёмная нейтраль футера), #59B78B (вне палитры доски),
   жёлтой и белой. Кода из этого не получалось: «Sprzątanie» показывалось и
   чёрным, и жёлтым (рубрика решается корнем, а один лист висит под разными
   корнями), Motoryzacja и Dostawa делили белый. Осталась одна плашка —
   синяя пилюля канона; различие рубрик несёт ТЕКСТ. Модификаторы остаются в
   разметке (её печатает шаблон) и просто ничего не переопределяют.
   Парное правило каталога — skin.css, секция W3. */
.cw99-reference-card__tag--jobs,
.cw99-reference-card__tag--realty,
.cw99-reference-card__tag--services,
.cw99-reference-card__tag--motoryzacja,
.cw99-reference-card__tag--delivery,
.cw99-reference-card__tag--farm {
  background: var(--cw99-blue);
  color: #fff;
}
.cw99-reference-card__body {
  display: flex;
  min-width: 0;
  flex: 1;
  flex-direction: column;
  gap: .18vw;
  padding: .55vw .6vw .65vw;
  color: #000;
}
.cw99-reference-card__body strong {
  /* РОВНО ДВЕ строки с многоточием — макетная плотность, решение владельца
     2026-08-19. История: 2026-08-12 кламп поднимали до четырёх, чтобы длинные
     настоящие заголовки не обрывались посреди фразы («Sofa rozkładana
     trzyosobowa,…»), и из-за высоких карточек ряд ужимали до трёх. Владелец
     выбрал макет: четыре карточки в ряд, заголовок в две строки, хвост — в
     многоточие. Обрыв длинного заголовка теперь ОЖИДАЕМ (полное название —
     на странице объявления); min-height 2.4em держит две строки и у коротких
     заголовков, чтобы ряд не плясал по высоте. */
  display: -webkit-box;
  overflow: hidden;
  min-height: 2.4em;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  color: #000;
  font-size: clamp(13px, 1.05vw, 16px);
  font-weight: 700;
  line-height: 1.2;
}
.cw99-reference-card__body b {
  color: var(--cw99-blue);
  font-size: clamp(13px, 1.05vw, 16px);
  font-weight: 700;
}
/* ⚠️ РЕЗЕРВА ПОД СЕРДЕЧКО ЗДЕСЬ БОЛЬШЕ НЕТ — и это не потеря починки, а её
   отмена вместе с причиной (второй круг критики, 2026-08-12).

   Как было. Кнопка «в избранное» висела в правом НИЖНЕМ углу карточки, то
   есть поверх строки города, и три круга правок отвоёвывали ей место в тексте:
   padding-right под зону нажатия 44px, потом ещё min-height 30px, чтобы кнопка
   не переползала на строку цены, потом пересчёт того же в vw для планшета и
   телефона. Цена решения — 44px из 135px тела карточки, и это ровно треть
   строки: «Warszawa, Mokotów» обрывалось как «Warszawa, M…» НА ВСЕХ вьюпортах,
   то есть район — единственная географическая подробность карточки —
   не читался нигде.

   Как стало. Кнопка переехала в правый ВЕРХНИЙ угол — на фотографию, где
   свободного места сколько угодно, а бейдж категории стоит слева и с ней не
   встречается (замер: самый длинный бейдж «Nieruchomości» 91.4px на карточке
   152.5px при 1440, до кнопки остаётся 19px; на 1280 — 6px). Текстовым строкам
   резерв больше не нужен вовсе: они получают всю ширину тела. */
.cw99-reference-card__body small {
  display: flex;
  align-items: center;
  gap: .25vw;
  overflow: hidden;
  margin-top: auto;
  /* Резерв под сердечко: оно снова в нижней строке (макет), и без паддинга
     длинное гео уезжало бы под иконку — грабля 2026-08-07 ровно об этом.
     44px, а не 30: у кнопки есть невидимая тап-зона до 44px (рост вверх-влево),
     и при 32px она съедала клики по последним ~8px текста — замер
     elementFromPoint на 1280/1440. Резерв обязан покрывать ЗОНУ, не иконку. */
  padding-right: 44px;
  color: #000;
  opacity: .55; /* приглушение альфой на чёрном; ссылок внутри нет */
  font-size: clamp(11px, .82vw, 13px);
  /* Длинное гео переносится на вторую строку, а не обрывается многоточием.
     После снятия резерва под сердечко в строку перестало влезать ровно одно
     сочетание из четырёх — «Warszawa, Praga-Południe» (126px в 119px при
     1440). Кегль здесь уменьшать нельзя: 11px — нижняя граница читаемости,
     которую держит вся страница, — поэтому лишнее слово уезжает строкой ниже.
     Перенос только между словами: сам район не рвём (см. правило span ниже). */
  white-space: normal;
}
/* Текст гео — в отдельном span (а не анонимным flex-элементом): min-width:0
   разрешает ему сжиматься и переноситься внутри строки. Многоточие здесь
   стояло, пока строка была однострочной; теперь длинное гео переносится
   целиком (см. white-space:normal выше), и обрезать нечего.
   ⚠️ Историческая грабля, если однострочность когда-нибудь вернут:
   text-overflow не применяется к анонимному flex-элементу — правило на самом
   small стояло и не работало, «Warszawa, Praga-» рвалось по букве без «…». */
.cw99-reference-card__body small > span {
  overflow: hidden;
  min-width: 0;
}
.cw99-reference-card__body small .cw99-i {
  width: 1.05em;
  height: 1.05em;
  flex: 0 0 auto;
}

/* «В избранное». Разметка родная для hivepress-favorites, поэтому клик
   обрабатывает сам плагин, а гостя уводит в модалку входа.
   Из Font Awesome на доске подключён ТОЛЬКО solid-набор (проверено на живой
   странице: regular.min.css в очереди нет), контурного сердца в нём не
   существует — поэтому видимая иконка своя, а <i class="fas fa-heart"> скрыт и
   нужен обработчику плагина, который читает у него класс. */
/* Кнопка стоит в правом НИЖНЕМ углу карточки, у строки города — как в макете
   владельца (2026-08-19; до этого жила на фотографии, что вынуждало резать
   бейдж категории потолком ширины). Кружка и ореола больше нет: на белом теле
   карточки они не нужны, в макете сердечко — голая контурная иконка. Строке
   города под неё зарезервирован паддинг (см. .cw99-reference-card__body small),
   поэтому исторического наезда на текст (2026-08-07) не повторится. */
.cw99-reference-card__fav {
  position: absolute;
  right: .5vw;
  bottom: .45vw;
  display: inline-flex;
  width: 30px;
  height: 30px;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  color: #000; /* контур сердца — чёрный, как весь текст; серого нет */
  text-decoration: none;
}
/* Зона нажатия. Видимый кружок 30×30 при норме 44×44, увеличивать его нельзя —
   это дизайн. Расширяем невидимым псевдоэлементом (раскладка не меняется).
   Расти можно ТОЛЬКО ВНУТРЬ карточки: у неё overflow:hidden, а кружок стоит
   в .3vw от правого и ВЕРХНЕГО краёв, то есть наружу помещается лишь .3vw, и
   всё, что больше, обрезается. Прошлый вариант (-10px -4px -4px -10px) на
   1280 давал ровно 44, но на 320, где .3vw = 0.96px, зона обрезалась до
   41.2×41.2 — норма пропадала ровно там, где она нужнее всего.
   Формула, а не константа: 30px кружка добираются до 44 внутрь. Направление
   добора перевёрнуто вместе с кнопкой: вниз и влево, а не вверх и влево. */
.cw99-reference-card__fav::before {
  content: '';
  position: absolute;
  /* Кнопка в НИЖНЕМ правом углу — добор до 44px идёт вверх и влево. */
  inset: calc(30px - 44px) 0 0 calc(30px - 44px);
}
.cw99-reference-card__fav .hp-icon {
  display: none;
}
.cw99-reference-card__fav .cw99-i {
  width: 17px;
  height: 17px;
}
.cw99-reference-card__fav:hover {
  background: #fff;
  color: var(--cw99-blue);
}
.cw99-reference-card__fav[data-state="active"] {
  color: var(--cw99-blue);
}
.cw99-reference-card__fav[data-state="active"] .cw99-i {
  fill: currentColor;
}

/* Приглашение в категорию. Оно ОБЯЗАНО отличаться от объявления с одного
   взгляда, иначе читается как «на доске четыре объявления» — выдуманное
   наполнение. Отличий четыре: синий дуотон вместо фотографии вещи, нейтральный
   бейдж «Kategoria», подсказка вместо цены и отсутствие «в избранное».
   Дуотон здесь тот же, что в секции «Kategorie»: grayscale + brightness(.55)
   под opacity .5 над синим — даже полностью белый кадр даёт белой иконке 4.8:1
   (порог нетекстового контраста 3:1). */
.cw99-reference-card__media--cat {
  background: var(--cw99-blue);
  color: #fff;
}
.cw99-reference-card__media--cat img {
  position: absolute;
  inset: 0;
  filter: grayscale(1) brightness(.55);
  opacity: .5;
}
.cw99-reference-card__media--cat .cw99-i {
  position: relative;
  width: clamp(26px, 2.2vw, 40px);
  height: clamp(26px, 2.2vw, 40px);
  color: #fff;
}
.cw99-reference-card__tag--kind {
  background: #fff;
  color: var(--cw99-dark);
}
.cw99-reference-card--cat .cw99-reference-card__body em {
  display: -webkit-box;
  overflow: hidden;
  min-height: 2.4em;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  color: var(--cw99-muted);
  font-size: clamp(12px, .84vw, 14px);
  font-style: normal;
  line-height: 1.2;
}
.cw99-reference-card--cat .cw99-reference-card__body small {
  color: var(--cw99-blue);
  font-weight: 700;
}

/* A6. Плитка статистики: одна белая карточка во всю ширину, четыре колонки,
   разделённые тонкими линиями — как в макете. Числа приходят из базы; колонка
   «пользователи» из макета не воспроизводится (3 аккаунта, все служебные), на
   её месте число городов из таксономии. */
.cw99-reference-kpis {
  display: grid;
  width: 100%;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  padding: 1vw 0;
  border-radius: var(--cw99-r);
  background: #fff;
  /* Ореол карточного языка (.07): плотный .14 был калиброван под синий hero. */
  box-shadow: 0 0 max(9px, 1vw) rgba(0, 0, 0, .07);
  color: #000;
}
.cw99-reference-kpis > span {
  display: flex;
  min-width: 0;
  flex-direction: column;
  align-items: center;
  gap: .16vw;
  padding: .3vw 1vw;
  border-left: 1px solid var(--cw99-line);
  text-align: center;
}
.cw99-reference-kpis > span:first-child {
  border-left: 0;
}
/* Иконки колонок — маленькие, ЦВЕТНЫЕ, заливочные (макет владельца,
   2026-08-19; разметка даёт cw99_icon_fill). Палитра только брендовая и
   только та, что видна на белом: жёлтый исключён (#ffc73b на белом 1.56:1 —
   исчезает), поэтому пары синих и зелёных. Иконка декоративная — смысл
   колонки несут число и подпись, — но 3:1 у всех четырёх цветов есть,
   кроме светло-зелёного, который поэтому не используется тоже. */
.cw99-reference-kpis .cw99-i {
  width: clamp(16px, 1.35vw, 22px);
  height: clamp(16px, 1.35vw, 22px);
  color: var(--cw99-blue);
}
.cw99-reference-kpis > span:nth-child(2) .cw99-i {
  color: var(--cw99-green-dark);
}
.cw99-reference-kpis > span:nth-child(3) .cw99-i {
  /* Был --cw99-blue-hover: hover-токен в статике запрещён (минорка критика
     2026-08-22) — третья колонка живёт на том же --cw99-blue, что и первая. */
  color: var(--cw99-blue);
}
.cw99-reference-kpis > span:nth-child(4) .cw99-i {
  color: var(--cw99-green-dark);
}
.cw99-reference-kpis b {
  color: #000;
  font-size: clamp(22px, 1.95vw, 36px);
  font-weight: 700;
  line-height: 1.05;
}
/* Четвёртая колонка: с 2026-08-21 (смерть персонажа «Agent 99») там снова
   короткое значение «0 zł» — особый кегль, нужный длинному имени, снят,
   колонка живёт по общему правилу чисел выше. */
.cw99-reference-kpis small {
  /* Канон: приглушение — чёрный с прозрачностью; сплошной --cw99-muted
     разрешён только рядом со ссылкой (минорка критика 2026-08-19). Ссылок
     в плитке нет. */
  color: #000;
  opacity: .55;
  font-size: clamp(11px, .78vw, 14px);
  line-height: 1.3;
}
/* Дельта «+N dziś». Печатается только при N > 0 — сегодня ноль, поэтому её на
   странице нет; появится сама, как только за сутки добавят объявление.
   Зелёный тёмный: брендовый #59b78b на белом даёт 2.45:1, ниже AA. */
.cw99-reference-kpis i {
  color: var(--cw99-green-dark);
  font-size: clamp(11px, .75vw, 13px);
  font-style: normal;
  font-weight: 700;
}

/* ── C. Правая колонка: рельс категорий ─────────────────────────────────────
   Круг 5 (2026-08-22): панель агента и её обёртка .cw99-reference-product
   СНЕСЕНЫ («мы убираем белый чат наш совсем») — рельс стал прямым ребёнком
   грида hero. Вместе с панелью удалены её правила: absolute-вынос из потока,
   потолок при открытом баннере согласия (--cw99-agent-top, публиковал
   agent.js — тоже удалено, v2.2.0-pl) и переопределения ленты чата. Баннер
   согласия на главной теперь компенсируется ТОЛЬКО штатной
   body{padding-bottom} из cw99-consent.php — как на всех прочих страницах.
   min-height:0 рельсу обязателен: по умолчанию у grid-элемента
   min-height:auto, и высота строки для него — пожелание, а не ограничение
   (рельс выпускал последние плитки за край hero c overflow:hidden). */
.cw99-reference-rail {
  display: flex;
  min-height: 0;
  min-width: 0;
  flex-direction: column;
  /* Плотная стопка СВЕРХУ, как в макете (свод 2026-08-20): раньше
     space-between размазывал плитки по высоте колонки, и между ними зияли
     стыки в сотни пикселей (замер на 1440: Praca ~420, Nieruchomości ~650).
     Стык фиксированный ~10px, остаток высоты честно остаётся ПОД стопкой. */
  justify-content: flex-start;
  gap: clamp(6px, .5vw, 9px);
  /* Светлая главная (макет 2026-08-22): рельс — белая КАРТОЧКА-колонка с
     ореолом; полупрозрачные плитки на синем умерли вместе с полотном. */
  padding: clamp(8px, .7vw, 12px);
  border-radius: var(--cw99-r);
  background: #fff;
  box-shadow: 0 0 max(9px, 1vw) rgba(0, 0, 0, .07);
}
/* Плитка рельса КОМПАКТНАЯ и однострочная — Ж2, макет владельца (2026-08-18):
   цветной скруглённый квадрат с иконкой + жирное название, ничего больше.
   Прежние вытянутые плитки (flex:1 без потолка) с подсказкой, обрезанной
   многоточием, владелец забраковал («рельс кривовато»). С 2026-08-20 плитка
   НЕ растягивается по высоте вовсе (flex: 0 0 auto — стопка прижата к верху,
   см. комментарий у .cw99-reference-rail): min-height держит её в макетных
   ~58-70px, max-height остаётся страховкой на случай разросшегося текста. */
.cw99-reference-rail__item {
  display: flex;
  min-height: clamp(52px, 4.1vw, 64px);
  flex: 0 0 auto;
  max-height: clamp(68px, 5.9vw, 86px);
  align-items: center;
  gap: .6vw;
  overflow: hidden;
  padding: .4vw .55vw;
  border-radius: calc(var(--cw99-r) * .8);
  /* Плитка на белой карточке рельса ПРОЗРАЧНАЯ (макет 2026-08-22): цвет несёт
     квадрат иконки, текст тёмный; ховер — лёгкая канонная подложка панелей. */
  background: transparent;
  color: #000 !important;
  text-decoration: none;
  transition: background .2s ease;
}
.cw99-reference-rail__item:hover {
  background: var(--cw99-card);
  color: #000 !important;
}
/* Подсветка is-lead удалена вместе с синим полотном (2026-08-22): белая
   «выделенная» плитка существовала, чтобы читаться на синем; на белой
   карточке рельса выделять нечем — и PHP её больше не печатает. */
.cw99-reference-rail__icon {
  display: inline-flex;
  width: clamp(38px, 3.15vw, 46px);
  height: clamp(38px, 3.15vw, 46px);
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  border-radius: calc(var(--cw99-r) * .72);
  /* Фоллбек для категории вне карты цветов: канонный синий. */
  background: var(--cw99-blue);
  color: #fff;
}
/* Цвета квадратов — ПО МАКЕТУ владельца (2026-08-22): Rzeczy — синий,
   Praca — жёлтый, Nieruchomości — зелёный, Usługi — зелёно-бирюзовый,
   Motoryzacja — ФИОЛЕТОВЫЙ (--cw99-purple, пятый цвет узаконен этим макетом;
   --cw99-teal — той же датой, см. :root). Иконки белые с замером ≥3:1:
   синий 6.45, зелёный #1f7a57 5.28, бирюзовый 4.22, фиолетовый 6.65.
   На жёлтом белая иконка физически невозможна (1.56:1) — там чёрная (13.5:1),
   тот же выбор, что у текста жёлтых бейджей. */
.cw99-reference-rail__item--items .cw99-reference-rail__icon,
.cw99-reference-rail__item--delivery .cw99-reference-rail__icon,
.cw99-reference-rail__item--farm .cw99-reference-rail__icon {
  background: var(--cw99-blue);
  color: #fff;
}
.cw99-reference-rail__item--jobs .cw99-reference-rail__icon {
  background: var(--cw99-yellow);
  color: #000;
}
.cw99-reference-rail__item--realty .cw99-reference-rail__icon {
  background: var(--cw99-green-dark);
  color: #fff;
}
.cw99-reference-rail__item--services .cw99-reference-rail__icon {
  background: var(--cw99-teal);
  color: #fff;
}
.cw99-reference-rail__item--motoryzacja .cw99-reference-rail__icon {
  background: var(--cw99-purple);
  color: #fff;
}
.cw99-reference-rail__icon .cw99-i {
  width: 54%;
  height: 54%;
}
.cw99-reference-rail__text {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: .12vw;
}
.cw99-reference-rail b {
  overflow: visible;
  color: inherit;
  font-size: clamp(14px, 1.05vw, 16px);
  font-weight: 700;
  /* Ж2 (2026-08-18): переносы по слогам в названиях ВЫКЛЮЧЕНЫ — «Zobacz
     wszyst-kie» с экрана владельца больше невозможен. Названия обязаны
     помещаться целиком: под это рельсу дана ширина (см. --product выше) и
     срезан кегль-потолок 17→16. Перенос разрешён только ПО СЛОВАМ — нужен
     единственной трёхсловной подписи «Zobacz wszystkie kategorie». */
  hyphens: none;
  overflow-wrap: normal;
  word-break: normal;
  line-height: 1.2;
}
/* Счётчик наполнения — вторая строка плитки, МЕЛКО (решение владельца
   2026-08-19, поверх Ж2: тогда подзаголовки-подсказки с многоточием сняли
   целиком и счётчику места не оставляли; владелец вернул числа в рельс по
   макету). Печатается только настоящее число и только при N > 0
   (front-page.php): «0 ogłoszeń» не пишем — плитка без объявлений остаётся
   однострочной. Однострочная раскладка плитки не меняется: потолок высоты
   86px вмещает название (≈19px) + счётчик (≈16px) с запасом.
   Цвет наследуется (белый на полупрозрачной плитке, чёрный на белой is-lead);
   приглушение — opacity по тому же прецеденту, что у .cw99-reference-trust-chips
   small (внутри <a> нет вложенных ссылок, композитить нечему). */
.cw99-reference-rail__text small {
  overflow: hidden;
  font-size: clamp(11px, .8vw, 13px);
  line-height: 1.25;
  /* Серый счётчик по макету: .6 на чёрном ≈ 6.6:1 (на синем полотне стояло
     .85 — там белый терял контраст быстрее). */
  opacity: .6;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Шестая плитка — вход в остальные 78 категорий. Пунктир отличает её от пяти
   настоящих: это не категория, а ссылка на список. */
/* Шестая плитка — та же плитка рельса (класс .cw99-reference-rail__item в
   разметке), поэтому здесь остаётся ровно одно отличие: она не растягивается
   по высоте. Всё остальное — подложка, радиус, паддинг, квадратная иконка,
   кегль названия — общее с пятью соседними.
   Раньше плитка жила по своим правилам: пунктирная рамка (рамок в системе нет
   вовсе, DESIGN.md), прозрачный фон, свой кегль и иконка без подложки — при
   том что стоит она в одном столбце с пятью одинаковыми соседями. */
.cw99-reference-rail__all {
  flex: 0 0 auto;
}

/* ── Белая полоса под hero ──────────────────────────────────────────────── */
.cw99-reference-discovery {
  padding: 3vw 0 3.6vw;
  color: #000;
}
/* H2 секции наследовал 600 от заголовочного правила канона (style.css:30) —
   в ките futura-pt веса 600 нет, браузер подделывал. Честный 700, как у
   остальных секционных заголовков (.cw99-reference-section-head). Нашёл
   критик цикла №2 — единственный видимый faux-600, уцелевший после зачистки. */
.cw99-reference-discovery h2 {
  font-weight: 700;
}
.cw99-reference-search-panel {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1.2vw;
  padding: 1.6vw 1.8vw;
  border-radius: var(--cw99-r);
  background: var(--cw99-card);
  box-shadow: 0 0 max(9px, 1vw) rgba(0, 0, 0, .07);
  color: #000;
}
.cw99-reference-eyebrow {
  display: block;
  margin-bottom: .3vw;
  color: var(--cw99-blue);
  font-size: clamp(12px, .8vw, 15px);
  font-weight: 700;
}
.cw99-reference-search-panel h2 {
  margin: 0;
  color: #000;
  font-size: clamp(19px, 1.5vw, 30px);
  line-height: 1.1;
}
.cw99-reference-search-panel form {
  display: flex;
  min-width: 0;
  flex: 1 1 26vw;
  gap: .6vw;
}
.cw99-reference-search-panel label {
  position: relative;
  display: flex;
  min-width: 0;
  flex: 1;
  align-items: center;
  padding: 0 .8vw;
  border-radius: 10vw;
  background: #fff;
  box-shadow: 0 0 .7vw rgba(0, 0, 0, .08);
  color: #000;
}
.cw99-reference-search-panel label .cw99-i {
  width: 1.15vw;
  min-width: 15px;
  height: 1.15vw;
  min-height: 15px;
  color: var(--cw99-blue);
}
.cw99-reference-search-panel input[type="search"] {
  width: 100%;
  min-width: 0;
  padding: .75vw .6vw;
  border: 0;
  background: transparent;
  color: #000;
  font-size: clamp(14px, .95vw, 18px);
  outline: none;
}
/* Плейсхолдеры — единственная контрастная дыра на главной. Родительская тема
   даёт им rgba(15,23,39,.45), это 2.94:1 на белом при пороге 4.5:1 (весь
   остальной текст страницы проверен и укладывается). Меняется только альфа:
   .62 даёт ≈4.6:1, цвет остаётся тем же нейтральным, шрифт и рамки не тронуты.
   В канонический style.css не лезем — он общий со шведской доской. */
.cw99-reference-search-panel input::placeholder,
.cw99-agent-box .agent-inp::placeholder {
  color: rgba(0, 0, 0, .62); /* чёрный с альфой (внутри ссылка — альфа у цвета, не у элемента) */
  opacity: 1;
}
.cw99-reference-search-panel button {
  flex: 0 0 auto;
  padding: .75vw 1.6vw;
  border: 0;
  border-radius: 10vw;
  background: var(--cw99-blue);
  color: #fff;
  cursor: pointer;
  font-size: clamp(14px, .95vw, 18px);
  font-weight: 700;
}
.cw99-reference-search-panel button:hover {
  background: var(--cw99-blue-hover);
}

.cw99-reference-section-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: .8vw;
  margin: 3vw 0 1.2vw;
}
/* Кегль заголовка секции — ОДНА непрерывная шкала на весь диапазон ширин.
   Было: десктопный clamp(21px, 1.65vw, 33px) + отдельные 6vw в телефонном
   медиазапросе ниже. Раскладка по vw без пола ломалась дважды: 6vw росли до
   45.6px на 760 (крупнее H1 главной — иерархия переворачивалась), а на 761
   десктопный clamp падал на свой пол 21px, то есть кегль обрывался вдвое на
   соседних ширинах. Формула ниже проходит через 22px на 390 и 26px на 1440
   и непрерывна везде между. Телефонное переопределение кегля снято. */
.cw99-reference-section-head h2 {
  margin: 0;
  color: #000;
  font-size: clamp(22px, 20.5px + .38vw, 26px);
  /* Замер живого: 600 приезжал от заголовочных стилей темы — в ките
     futura-pt веса 600 нет, браузер подделывал. Честный 700 явно. */
  font-weight: 700;
}
/* Та же непрерывная шкала для ссылки «Zobacz wszystkie…»: было
   clamp(13px, .9vw, 17px) на десктопе и 3.7vw на телефоне (28.1px при 760,
   13px при 761). */
.cw99-reference-section-head a {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: .35vw;
  color: var(--cw99-blue);
  font-size: clamp(13.5px, 12.9px + .19vw, 15px);
  font-weight: 700;
  text-decoration: none;
}
/* Зона нажатия ≥44px. Сама ссылка — строка текста высотой 20-22px, увеличивать
   её нельзя (это дизайн: подпись, а не кнопка), поэтому зону добираем
   невидимым псевдоэлементом ровно тем же приёмом, что у «в избранное»
   (.cw99-reference-card__fav::before). Раскладка не меняется. */
.cw99-reference-section-head a::before {
  content: '';
  position: absolute;
  top: 50%;
  left: -8px;
  width: calc(100% + 16px);
  height: 44px;
  transform: translateY(-50%);
}
.cw99-reference-section-head a .cw99-i {
  width: 1.1em;
  height: 1.1em;
}

.cw99-reference-categories {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: .8vw;
}
.cw99-reference-categories > a {
  display: flex;
  min-width: 0;
  align-items: center;
  gap: .8vw;
  padding: 1vw 1.1vw;
  border-radius: var(--cw99-r);
  background: var(--cw99-card);
  box-shadow: 0 0 .9vw rgba(0, 0, 0, .06);
  color: #000 !important;
  text-decoration: none;
  transition: box-shadow .2s ease, transform .2s ease;
}
.cw99-reference-categories > a:hover {
  box-shadow: 0 0 max(12px, 1.4vw) rgba(0, 0, 0, .12);
  color: #000 !important;
  transform: translateY(-.12vw);
}
/* Медиа-подложка плитки категории.
   Геометрия одна на все восемь плиток (иначе восьмая с кружком ломала бы ряд),
   различает их цвет: синяя у предметных, жёлтая у «Wszystkie kategorie». */
.cw99-reference-categories__icon {
  position: relative;
  display: inline-flex;
  overflow: hidden;
  /* clamp, а не min-width: контейнер упирается в max-width 1680px, а vw растёт
     дальше — на 2560 подложка иначе разъезжается до 143px внутри неподвижной
     плитки. */
  width: clamp(76px, 5.6vw, 104px);
  height: clamp(57px, 4.2vw, 78px);
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  border-radius: var(--cw99-r);
  background: var(--cw99-blue);
  color: #fff;
}
.cw99-reference-categories__icon .cw99-i {
  position: relative;
  width: clamp(23px, 1.9vw, 32px);
  height: clamp(23px, 1.9vw, 32px);
}
/* Фотография категории (Unsplash, см. assets/discovery/SOURCES.md) — именно
   ПОДЛОЖКА, а не снимок объявления. Дуотон делает две вещи сразу:
   1) снимает «товарность» кадра (services.webp — дрель на белом, items.webp —
      диван: в полном цвете рядом с карточками «Brak zdjęcia» они читались бы как
      единственные настоящие фото на доске, то есть как выдуманное наполнение);
   2) даёт белой иконке гарантированный контраст независимо от снимка. Именно
      поэтому здесь brightness, а не только opacity: у светлого кадра
      (motoryzacja — рука на почти белом фоне) подложка при одной прозрачности
      выходила СВЕТЛЕЕ синего и белая иконка проваливалась. При
      grayscale+brightness(.55) под opacity .5 даже полностью белый пиксель даёт
      4.8:1. Замерено на всех семи файлах в обеих геометриях (76×57 и 78×58,
      object-fit: cover): худшая точка ВСЕЙ подложки 4.83:1 (services.webp —
      дрель на белом), в зоне иконки минимум 4.83:1. Порог нетекстового
      контраста — 3:1.
   Градиента здесь нет и быть не может: плоский #2457c6 — правило дизайн-системы,
   его же стережёт scripts/check-unified-design.mjs. */
.cw99-reference-categories__icon--photo img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  filter: grayscale(1) brightness(.55);
  opacity: .5;
}
/* Восьмая плитка «Wszystkie kategorie»: закрывает дыру 4+3 в сетке и служит
   входом в остальные 78 — жёлтая подложка отличает её от семи предметных.
   Фотографии у неё нет намеренно: это не категория, а вход в список. */
.cw99-reference-categories__all .cw99-reference-categories__icon {
  background: var(--cw99-yellow);
  color: #000;
}
.cw99-reference-categories > a > span:last-child {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: .1vw;
}
.cw99-reference-categories strong {
  overflow: hidden;
  color: #000;
  font-size: clamp(14px, .98vw, 19px);
  text-overflow: ellipsis;
  white-space: nowrap;
}
.cw99-reference-categories small {
  overflow: hidden;
  color: #000;
  opacity: .6; /* приглушение альфой на чёрном (свип цветов 2026-09-03) */
  font-size: clamp(12px, .8vw, 14px);
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Стили легаси-секции «Najnowsze ogłoszenia» (.cw99-reference-latest*)
   УДАЛЕНЫ вместе с разметкой (светлая главная, 2026-08-22): единственный
   ряд карточек главной — hero-ряд A5. История — в git. */

/* D. Нижняя лента доверия — последняя строка hero во всю ширину (Bez
   prowizji / Sprawdzone ogłoszenia / KRS). Со светлой главной (2026-08-22)
   база сразу белая карточка — прежняя пара «полупрозрачная плашка на синем
   здесь + белый слой в skin.css G6» схлопнута в одно место, G6 удалена. */
.cw99-reference-trust {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1vw;
  margin-top: 1.4vw;
  padding: 1.1vw 1.4vw;
  border-radius: var(--cw99-r);
  background: #fff;
  box-shadow: 0 0 max(9px, 1vw) rgba(0, 0, 0, .07);
  color: #000;
}
.cw99-reference-trust > span {
  display: grid;
  grid-template-columns: 2.6vw minmax(0, 1fr);
  grid-template-rows: auto auto;
  column-gap: .9vw;
  min-width: 0;
}
.cw99-reference-trust .cw99-i {
  grid-row: 1 / 3;
  width: 2.6vw;
  min-width: 30px;
  height: 2.6vw;
  min-height: 30px;
  align-self: start;
  padding: .55vw;
  border-radius: 50%;
  background: #eef2fc;
  color: var(--cw99-blue);
}
.cw99-reference-trust b {
  color: #000;
  /* Пол 14 → 15px (круг 2026-08-30-тер): это правило стало ЕДИНСТВЕННЫМ на
     весь диапазон вместо трёх ступеней, и на телефоне прежние 4vw давали
     15.6px. 15 — пол, который держит и телефон (−4% от 15.6, незаметно), и
     десктоп (+0.9px к прежним 14.11: заголовок факта не должен печататься
     кеглем подписи под ним). */
  font-size: clamp(15px, .98vw, 19px);
  font-weight: 700;
  line-height: 1.25;
}
/* Приглушение СПЛОШНЫМ цветом, не opacity: внутри обязательная ссылка
   «regulaminie», а opacity родителя на потомке не отменить — этой ловушкой
   уже четыре раза роняли контраст. #5b6472 на белом = 6.0:1. */
.cw99-reference-trust small {
  color: rgba(0, 0, 0, .62); /* чёрный с альфой У ЦВЕТА (не opacity элемента) — ссылка внутри остаётся синей */
  font-size: clamp(13px, .85vw, 15px);
  line-height: 1.45;
}
.cw99-reference-trust small a {
  color: var(--cw99-blue);
  text-decoration: underline;
}

/* Стили блока .cw99-reference-newsletter удалены вместе с самим блоком:
   он обещал письма, а на сервере нет MTA (wp_mail() = false), и адрес нигде
   не сохранялся. Вернуть вместе с SES SMTP. */

.screen-reader-text {
  position: absolute !important;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(1px, 1px, 1px, 1px);
  white-space: nowrap;
}

/* ══════════════════════════════════════════════════════════════════════════
   Планшет 761–1025
   ══════════════════════════════════════════════════════════════════════════ */
@media (max-width: 1025px) {
  .cw99-reference-layout {
    grid-template-columns: minmax(0, 1fr);
    gap: 3vw;
  }
  .cw99-reference-copy {
    gap: 2vw;
  }
  .cw99-reference-lead {
    max-width: 62vw;
  }
  .cw99-reference-copy h1 {
    font-size: clamp(30px, 5vw, 50px);
  }
  .cw99-reference-trust-chips > span,
  .cw99-reference-trust-chips > a {
    grid-template-columns: 4vw minmax(0, 1fr);
    min-height: 6vw;
    column-gap: 1vw;
    padding: 1vw 1.2vw;
  }
  .cw99-reference-trust-chips .cw99-i {
    width: 4vw;
    height: 4vw;
    padding: 1vw;
  }
  .cw99-reference-trust-chips b {
    font-size: clamp(12px, 1.5vw, 17px);
  }
  .cw99-reference-trust-chips small {
    font-size: clamp(11px, 1.3vw, 15px);
  }
  /* Ряд карточек держит ЧЕТЫРЕ колонки до самого телефона: при трёх четвёртая
     карточка сваливалась во второй ряд и оставляла дыру на три четверти строки. */
  .cw99-reference-cards {
    gap: 1.2vw;
  }
  /* ⚠️ КЕГЛИ ИЗ ЭТОГО МЕДИАЗАПРОСА УБРАНЫ (круг 2026-08-30-тер).
     Здесь стояла ВТОРАЯ шкала — свои clamp'ы с крутым vw, которые к 1025
     упирались в потолок и на границе 1026 обрывались вниз на базовое
     правило: замер на живом давал бейдж рубрики 12.3px при 1025 и 10px при
     1280 (−23%), заголовок карточки 15.4→13.4 (−15%), строку города
     14.35→11 (−30%). Кегль теперь один на весь диапазон и живёт в базовом
     правиле; медиазапросы задают только геометрию (поля, зазоры). */
  .cw99-reference-card__tag {
    top: 1vw;
    left: 1vw;
    padding: .5vw 1.2vw;
  }
  .cw99-reference-card__body {
    gap: .5vw;
    padding: 1.4vw 1.6vw 1.6vw;
  }
  .cw99-reference-card__empty .cw99-i {
    width: 4vw;
    max-width: 40px;
    height: 4vw;
    max-height: 40px;
  }
  /* Карточка на планшете вдвое шире, чем на 1280, — иконка категории должна
     расти вместе с подложкой, иначе на 231x174 она теряется в синем поле. */
  .cw99-reference-card__media--cat .cw99-i {
    width: 5vw;
    max-width: 58px;
    height: 5vw;
    max-height: 58px;
  }
  .cw99-reference-kpis > span {
    padding: .8vw 1vw;
  }
  /* Круг 5: панели и обёртки .cw99-reference-product больше нет. Рельс в
     одноколонной раскладке ложится РЯДАМИ с переносом: шесть плиток во всю
     ширину столбиком съедали бы весь экран, а горизонтальный скроллер
     оставлен телефону (там он привычен). Ширина плитки ⅓ ряда минус зазор —
     два ряда по три. */
  .cw99-reference-rail {
    flex-direction: row;
    flex-wrap: wrap;
    gap: 1vw;
  }
  .cw99-reference-rail__item,
  .cw99-reference-rail__all {
    flex: 1 1 calc(33.333% - 1vw);
    min-width: 0;
  }
  /* Лента доверия на планшете (восстановлено с be16b52 вместе с блоком D). */
  .cw99-reference-trust {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1.6vw;
    margin-top: 3vw;
    padding: 2.6vw 2.8vw;
  }
  .cw99-reference-trust > span {
    grid-template-columns: 4.4vw minmax(0, 1fr);
    column-gap: 1.2vw;
  }
  .cw99-reference-trust .cw99-i {
    width: 4.4vw;
    height: 4.4vw;
    padding: 1vw;
  }
  /* Кегли ленты доверия отданы базовым правилам (см. пометку выше): вторая
     шкала давала 20px при 1025 и 14px при 1280 — обрыв на 43%. */
  .cw99-reference-rail__icon {
    width: 4.6vw;
    max-width: 44px;
    height: 4.6vw;
    max-height: 44px;
  }
  .cw99-reference-rail b {
    font-size: clamp(12px, 1.35vw, 15px);
  }
  .cw99-reference-rail__all {
    padding: 1.2vw 1.4vw;
    font-size: clamp(11px, 1.15vw, 14px);
  }
  .cw99-reference-categories {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.8vw;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   Планшет и узкий ноутбук 761–1025 — диапазон, который раньше проваливался
   в телефонную раскладку десктопным масштабом: карточки в две колонки по
   473px, из них 355px пустой серой плашки «нет фото», и документ вдвое длиннее
   чем на 1280. Три колонки + снятый 4:3 у пустых плашек лечат это.
   ══════════════════════════════════════════════════════════════════════════ */
@media (min-width: 761px) and (max-width: 1025px) {
  .cw99-reference-categories {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  /* Третья шкала заголовка и цены карточки убрана (круг 2026-08-30-тер):
     полоса 761–1025 держала свою clamp(14px, 1.5vw, 17px), из-за чего на
     границе 1026 кегль падал с 15.4 до 13.4px. Кегль один — в базовом
     правиле; здесь остаётся только число колонок. */
}

/* ══════════════════════════════════════════════════════════════════════════
   Телефон ≤760
   Порядок на телефоне важен: агент — это продукт, он обязан быть выше ряда
   карточек. Реализовано через display:contents + order, а не переносом
   разметки, чтобы у страницы был один источник правды по структуре.
   ══════════════════════════════════════════════════════════════════════════ */
@media (max-width: 760px) {
  .cw99-reference-wrap {
    width: 92vw;
  }
  .cw99-reference-hero {
    padding: min(6vw, 25.8px) 0 min(8vw, 34.4px);
  }
  /* Мобильные правила ::before/::after удалены вместе с блобом и водяным
     знаком синего hero (светлая главная 2026-08-22). */
  /* Порядок блоков на телефоне = порядку в DOM (макет: H1 → лид → карточка
     подключения → полоса доверия → «Najnowsze» → статистика): order-правила
     умерли вместе с пилюлей региона, ради которой сетка держала
     align-items:flex-start — теперь колонка тянется (stretch), и точечные
     align-self не нужны. */
  .cw99-reference-layout {
    display: flex;
    align-items: stretch;
    flex-direction: column;
    gap: min(5vw, 21.5px);
  }
  .cw99-reference-copy {
    display: contents;
  }
  .cw99-reference-copy h1 {
    font-size: 8.6vw;
    line-height: 1.06;
  }
  .cw99-reference-lead {
    max-width: none;
    font-size: 4vw;
  }
  .cw99-reference-cards {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: min(3vw, 12.9px);
  }
  /* PHP отдаёт ТРИ карточки (см. front-page.php), а сетка здесь двухколонная —
     нечётная последняя стояла сиротой слева с дырой размером с карточку справа.
     Нечётный хвост растягиваем на весь ряд; :nth-child(odd):last-child не
     сработает при чётном числе карточек, а в одноколоннике ≤379px безвреден. */
  .cw99-reference-cards > .cw99-reference-card:nth-child(odd):last-child {
    grid-column: 1 / -1;
  }
  .cw99-reference-card__fav {
    /* Кнопка в нижнем углу и на телефоне (перенос 2026-08-19, как в макете);
       top:auto обязателен — перебивает десктопное правило. */
    top: auto;
    bottom: min(1.5vw, 6.5px);
    right: min(1.5vw, 6.5px);
    width: min(9vw, 38.7px);
    height: min(9vw, 38.7px);
  }
  /* Зона нажатия. Сам кружок на 390 всего 35×35, на 320 — 28.8×28.8 при норме
     44×44, а это единственный способ добавить объявление в избранное.
     Расширяем невидимым полем через ::before: вид кружка не меняется.
     Формула вместо константы: на телефоне кружок задан в vw, поэтому фикс
     -6px давал 47×47 на 390, но всего 40.8×40.8 на 320 — то есть ровно там,
     где норма важнее всего, её и не было. Теперь добор считается от текущего
     размера и даёт РОВНО 44 на любой ширине; min(0px, …) — предохранитель на
     верхнем краю диапазона (при 9vw > 44px, то есть от ~490px, добор стал бы
     положительным и ужал зону вместо расширения). */
  /* Тот же перевод «наружу нельзя» в формулу, что и на десктопе: симметричный
     добор /2 уводил зону за правый и нижний край карточки, где overflow:hidden
     её срезал (замер на 320: 41.2×41.2 вместо 44). Добираем целиком внутрь. */
  .cw99-reference-card__fav::before {
    content: '';
    position: absolute;
    /* Кнопка теперь в НИЖНЕМ углу — добор зоны идёт вверх и влево. */
    inset: min(0px, calc(min(9vw, 38.7px) - 44px)) 0 0 min(0px, calc(min(9vw, 38.7px) - 44px));
  }
  .cw99-reference-card__fav .cw99-i {
    width: min(5vw, 21.5px);
    height: min(5vw, 21.5px);
  }
  /* ⚠️ КЕГЛИ ИЗ ТЕЛЕФОННОГО МЕДИАЗАПРОСА УБРАНЫ ЦЕЛИКОМ
     (круг 2026-08-30-тер, сплошной свип).
     Голый vw растёт линейно и ОБРЫВАЕТСЯ на границе полосы: 3.6vw — это
     14px при 390 (норма) и 27.4px при 760, а на 761 базовое правило роняет
     кегль обратно на 14px. Замер скриптом design/fluid-type-audit.mjs нашёл
     53 таких узла на главной со скачками до 120.4% на стыке 760/761.
     Здесь остаётся только ГЕОМЕТРИЯ (поля, зазоры, радиусы); кегль во всех
     этих правилах один и живёт в базовом clamp'е, непрерывном на всём
     диапазоне. Разница на 390 против прежних vw — 6-8%, ниже порога
     заметности; на 760 разрыв исчезает вовсе. */
  .cw99-reference-card__tag {
    top: min(2vw, 8.6px);
    left: min(2vw, 8.6px);
    /* На телефоне кнопка «в избранное» задана в vw (9vw + отступ 1.5vw),
       поэтому и потолок бейджа считается в vw. */
    max-width: calc(100% - min(4vw, 17.2px) - min(10.5vw, 45.2px));
    padding: min(1vw, 4.3px) min(2.6vw, 11.2px);
    border-radius: min(10vw, 43px);
  }
  .cw99-reference-card__body {
    gap: min(1vw, 4.3px);
    padding: min(3vw, 12.9px) min(3.2vw, 13.8px) min(3.4vw, 14.6px);
  }
  /* Резерв под сердечко снят вместе с его переездом на фотографию (см.
     базовое правило): строка города получает всю ширину тела карточки. */
  .cw99-reference-card__body small {
    gap: min(1vw, 4.3px);
  }
  .cw99-reference-card__empty {
    gap: min(1.5vw, 6.5px);
  }
  .cw99-reference-card__empty .cw99-i {
    width: min(8vw, 34.4px);
    height: min(8vw, 34.4px);
  }
  .cw99-reference-card__media--cat .cw99-i {
    width: min(9vw, 38.7px);
    max-width: none;
    height: min(9vw, 38.7px);
    max-height: none;
  }
  /* Кегль плашки «Brak zdjęcia» — базовый clamp (см. свип выше). */

  /* Рельс категорий на телефоне — горизонтальный скроллер: вертикальный
     съедал бы весь первый экран. */
  .cw99-reference-rail {
    /* Без align-self:stretch элемент вырастает до ширины СОДЕРЖИМОГО (7 плиток
       = 908px при экране 390), overflow-x не срабатывает, и хвост рельса
       просто обрезается родительским overflow:hidden — плитки становятся
       недостижимыми. Поймано замером scrollWidth, а не на глаз.
       flex-wrap:nowrap обязателен: планшетный блок выше включает wrap-ряды,
       а здесь рельс — горизонтальный скроллер, перенос сломал бы его. */
    align-self: stretch;
    flex-direction: row;
    flex-wrap: nowrap;
    gap: min(2.5vw, 10.8px);
    margin: 0 -4vw;
    padding: 0 min(4vw, 17.2px) min(1vw, 4.3px);
    overflow-x: auto;
    /* Первая плитка должна вставать на ту же вертикаль, что карточки выше,
       и после прокрутки к началу тоже. */
    scroll-padding-inline: 4vw;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
  }
  /* Плитка на телефоне остаётся горизонтальной (иконка слева, текст справа) —
     как на десктопе и в макете, — поэтому она шире прежних 30vw. */
  .cw99-reference-rail__item,
  .cw99-reference-rail__all {
    flex: 0 0 44vw;
    gap: min(2.5vw, 10.8px);
    padding: min(3vw, 12.9px) min(3vw, 12.9px);
    scroll-snap-align: start;
  }
  .cw99-reference-rail__icon {
    width: min(11vw, 47.3px);
    max-width: none;
    height: min(11vw, 47.3px);
    max-height: none;
  }
  .cw99-reference-rail b {
    font-size: 3.4vw;
  }
  .cw99-reference-rail__text small {
    font-size: 2.9vw;
  }
  .cw99-reference-rail__all {
    font-size: 3.2vw;
  }
  .cw99-reference-rail__all .cw99-i {
    width: min(5.5vw, 23.7px);
    height: min(5.5vw, 23.7px);
  }

  /* Полоса доверия на телефоне — та же белая карточка одной колонкой;
     разделители переезжают с левого бока на верх строк. */
  .cw99-reference-trust-chips {
    grid-template-columns: minmax(0, 1fr);
    padding: min(1vw, 4.3px) 0;
  }
  .cw99-reference-trust-chips > span,
  .cw99-reference-trust-chips > a {
    grid-template-columns: min(11vw, 47.3px) minmax(0, 1fr);
    min-height: 0;
    column-gap: min(3vw, 12.9px);
    padding: min(3vw, 12.9px) min(3.5vw, 15.1px);
    border-left: 0;
  }
  .cw99-reference-trust-chips > :nth-child(n+2) {
    border-top: 1px solid var(--cw99-line);
  }
  .cw99-reference-trust-chips .cw99-i {
    width: min(11vw, 47.3px);
    height: min(11vw, 47.3px);
    padding: min(2.8vw, 12px);
  }
  .cw99-reference-trust-chips b {
    font-size: 4vw;
  }
  .cw99-reference-trust-chips small {
    font-size: 3.3vw;
  }
  /* Плитка статистики на телефоне — 2x2 внутри той же белой карточки, поэтому
     разделители нужны и вертикальные, и горизонтальные. */
  .cw99-reference-kpis {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    padding: min(4vw, 17.2px) 0;
  }
  .cw99-reference-kpis > span {
    gap: min(1vw, 4.3px);
    padding: min(3vw, 12.9px) min(3vw, 12.9px);
  }
  .cw99-reference-kpis > span:nth-child(odd) {
    border-left: 0;
  }
  .cw99-reference-kpis > span:nth-child(n+3) {
    border-top: 1px solid var(--cw99-line);
    padding-top: min(4.5vw, 19.4px);
  }
  .cw99-reference-kpis .cw99-i {
    width: min(5.4vw, 23.2px);
    height: min(5.4vw, 23.2px);
  }
  .cw99-reference-kpis b {
    font-size: 8vw;
  }
  /* Особый кегль четвёртой колонки снят вместе с именем «Agent 99»
     (2026-08-21): «0 zł» живёт на общих 8vw. */
  .cw99-reference-kpis small {
    font-size: 3.2vw;
  }
  .cw99-reference-kpis i {
    font-size: 3.2vw;
  }

  /* Лента доверия на телефоне — одна колонка (восстановлено с be16b52). */
  .cw99-reference-trust {
    grid-template-columns: minmax(0, 1fr);
    gap: min(5vw, 21.5px);
    margin-top: min(6vw, 25.8px);
    padding: min(6vw, 25.8px) min(5vw, 21.5px);
  }
  .cw99-reference-trust > span {
    grid-template-columns: min(12vw, 51.6px) minmax(0, 1fr);
    column-gap: min(4vw, 17.2px);
  }
  .cw99-reference-trust .cw99-i {
    width: min(12vw, 51.6px);
    height: min(12vw, 51.6px);
    padding: min(3vw, 12.9px);
  }
  /* Кегли ленты доверия — базовые clamp'ы (см. свип выше): 4.4vw давали
     33.4px при 760 против 15.2px при 761, обрыв на 120%. */
  /* .cw99-agent тут не для красоты: это страница /agent/, и починку мобильной
     высоты сделали только для главной. На /agent/ панель считалась по
     height:70vh из канонического style.css — 590px, из которых обвязка
     (шапка, полоса про ИИ, подсказка, «Jedna rozmowa», ввод, подпись) съедает
     376px, ленте оставалось 201px при 352px контента, и agent.js на старте
     звал scrollDown(): первый экран открывался уже прокрученным на 151px —
     приветствие целиком за кадром, верхний чип разрезан пополам. Панель
     продукта обязана быть тем же продуктом, что в hero. */
  /* ⚠️ Здесь стояла ФИКСИРОВАННАЯ высота панели (160vw / 540..690px), и это
     была ошибка того же класса, что и остальные: одна константа на все ширины.
     Обвязка панели (шапка, полоса про ИИ, жёлтая подсказка, «Jedna rozmowa»,
     строка ввода, подпись) на узком экране переносится и РАСТЁТ, а высота
     панели при этом не менялась — значит весь прирост вычитался из ленты чата.
     Замер /agent/ при 320: обвязка 441px из 540, ленте оставалось 87px при
     436px содержимого. Два стартовых чипа из пяти были не видны вовсе, третий
     разрезан кромкой — то есть подсказки, ради которых они и сделаны, нажать
     было нельзя.
     Теперь высоту задаёт содержимое, а ограничение перенесено туда, где оно
     осмысленно, — на саму ЛЕНТУ: min-height гарантирует ей рабочее окно на
     любом экране, max-height не даёт панели разрастись вслед за перепиской
     (ради чего фиксированная высота и вводилась — см. стресс-тест на 25 реплик
     в комментарии к абсолютному позиционированию выше). */
  .cw99-agent .cw99-agent-box .agent-shell {
    height: auto;
    min-height: 0;
    max-height: none;
  }
  /* min-height ленте НЕ задаём. Высота панели теперь идёт от содержимого, то
     есть лента и так всегда показывает всё, что в ней есть; любой min-height
     сверх этого — просто белая полоса под последним чипом (замер на 360:
     44vh = 334px при 273px содержимого, 61px пустоты). Ровно эту пустоту
     прошлый заход уже вычищал из стартового экрана, и вернуть её было бы
     обидно. Ограничение нужно только сверху. */
  .cw99-agent .cw99-agent-box .agent-chat {
    max-height: 62vh;
  }
  /* Мобильные правила шапки виджета (.agent-topbar__status/__identity/__name)
     удалены 2026-08-21 вместе с самой шапкой и персонажем «Agent 99». */
  /* ОТКУДА БРАЛАСЬ ШИРИНА 224px НА /agent/. Панель считалась так:
     320 − 32 − 32 (поля .container родительской темы) − 16 − 16 (собственные
     поля .cw99-agent из style.css) = 224. То есть 30% экрана уходило в поля,
     лента чата получала 224px при 436px содержимого, а строке ввода после трёх
     кнопок по 42px оставалось 50px — в поле было видно «Nc».
     Свои поля на телефоне снимаем совсем, а часть чужих отыгрываем
     отрицательным полем: −1.2rem с каждой стороны оставляет 12.8px воздуха у
     края экрана — РОВНО столько же, сколько у панели в hero главной (она
     сидит в обёртке 92vw). Панель на /agent/ обязана быть тем же продуктом,
     что в hero, вплоть до ширины: при −1rem она выходила на 6px уже, и этих
     6px не хватало плейсхолдеру поля ввода.
     Отрицательное поле безопасно ровно потому, что оно меньше отступа
     контейнера (19.2 < 32): горизонтальной прокрутки оно создать не может. */
  .cw99-agent {
    margin-right: -1.2rem;
    margin-left: -1.2rem;
    padding-right: 0;
    padding-left: 0;
  }
  .cw99-agent-box .agent-natural-hint,
  .cw99-agent-box .agent-capabilities {
    margin-left: 3.5vw;
    padding-left: 0;
  }
  .cw99-agent-box .agent-natural-hint {
    margin-right: 3.5vw;
    border-radius: min(2vw, 8.6px);
  }
  /* Поле ввода на телефоне получает остаток строки после трёх кнопок по 42px:
     154.8px при 390 и 90.4px при 320. Плейсхолдер укорочен в шорткоде, но при
     320 и короткому нужен запас — отдаём кегль вниз до 13px.
     ⚠️ Селектор с input[type=text]: правило кегля так и НЕ работало. В
     каноническом style.css стоит
     `.cw99-agent-box .agent-inputbar input[type=text] { font-size: .98em }`
     со специфичностью 0-2-1, и оно перебивало здешние 0-2-0 — по
     getComputedStyle при 320 приходило 15.68px вместо заявленных 13px, то есть
     полю не хватало ещё 20px, и это НЕ было видно по самому файлу. */
  .cw99-agent-box .agent-inputbar input[type=text].agent-inp {
    min-width: 0;
    font-size: clamp(13px, 3.4vw, 15.7px);
  }

  .cw99-reference-discovery {
    padding: min(9vw, 38.7px) 0 min(11vw, 47.3px);
  }
  .cw99-reference-search-panel {
    align-items: stretch;
    flex-direction: column;
    gap: min(3.5vw, 15.1px);
    padding: min(5vw, 21.5px);
    border-radius: min(3vw, 12.9px);
  }
  .cw99-reference-eyebrow {
    margin-bottom: min(1vw, 4.3px);
    font-size: 3.2vw;
  }
  .cw99-reference-search-panel h2 {
    font-size: 5.6vw;
  }
  .cw99-reference-search-panel form {
    flex: 1 1 auto;
    gap: min(2.5vw, 10.8px);
  }
  .cw99-reference-search-panel label {
    padding: 0 min(3.5vw, 15.1px);
  }
  .cw99-reference-search-panel label .cw99-i {
    width: min(4.4vw, 18.9px);
    height: min(4.4vw, 18.9px);
  }
  .cw99-reference-search-panel input[type="search"] {
    padding: min(3.2vw, 13.8px) min(2.5vw, 10.8px);
    font-size: 4vw;
  }
  .cw99-reference-search-panel button {
    padding: min(3.2vw, 13.8px) min(5vw, 21.5px);
    font-size: 4vw;
  }
  .cw99-reference-section-head {
    margin: min(9vw, 38.7px) 0 min(4vw, 17.2px);
  }
  /* Кегли h2 и ссылки отданы непрерывной шкале выше (см. комментарий там):
     сырые 6vw / 3.7vw давали обрыв вдвое на границе 760/761. Здесь остаётся
     только зазор между заголовком и ссылкой. */
  .cw99-reference-section-head a {
    gap: min(1.5vw, 6.5px);
  }
  .cw99-reference-categories {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: min(3vw, 12.9px);
  }
  .cw99-reference-categories > a {
    align-items: flex-start;
    flex-direction: column;
    gap: min(2.5vw, 10.8px);
    padding: min(4vw, 17.2px);
    border-radius: min(2.5vw, 10.8px);
  }
  /* Плитка на телефоне — колонка, подложка сверху. Ширину держим заметно уже
     плитки (не во всю её ширину): полоса «фото сверху, текст снизу» во всю
     ширину — это ровно силуэт карточки объявления, а он тут запрещён. */
  .cw99-reference-categories__icon {
    width: min(20vw, 86px);
    height: min(15vw, 64.5px);
    border-radius: min(2vw, 8.6px);
  }
  .cw99-reference-categories__icon .cw99-i {
    width: min(6.6vw, 28.4px);
    height: min(6.6vw, 28.4px);
  }
  /* Кегли плиток «Kategorie» — базовые clamp'ы (см. свип выше): 3.9vw давали
     29.6px при 760 против 14px при 761. Перенос строки остаётся телефонным. */
  .cw99-reference-categories strong {
    white-space: normal;
  }
  .cw99-reference-categories small {
    white-space: normal;
  }
}

/* Узкий телефон: две колонки КАРТОЧЕК (фото сверху, текст снизу) становятся
   нечитаемыми — их и схлопываем.
   .cw99-reference-categories отсюда убрана намеренно: у плитки категории
   содержимое остаётся колонкой в левом углу (flex-direction:column;
   align-items:flex-start), поэтому в одной колонке 74% ширины плитки
   пустовало — восемь плиток шли вертикальной лентой с пустой правой
   половиной каждая. В двух колонках, как на 390, плитка выглядит так, как
   уже одобрено. */
@media (max-width: 379px) {
  .cw99-reference-cards {
    grid-template-columns: minmax(0, 1fr);
  }
  /* Правило подписи шапки (.agent-topbar__subtitle) удалено 2026-08-21
     вместе с шапкой и персонажем «Agent 99». */
  /* Ещё 10px под плейсхолдер: боковой паддинг поля с 15 до 10. На 320 это
     разница между «помещается» и «не помещается» (94px текста при 96px
     доступных вместо 86). Высота поля и кнопок не меняется. */
  .cw99-agent-box .agent-inputbar input[type=text].agent-inp {
    padding-right: 10px;
    padding-left: 10px;
  }
}

/* Низкий экран в альбомной ориентации: панель черновика /agent/ не должна
   съедать всё. Ограничиваем ленту, а не панель: высоту панели задаёт
   содержимое (см. блок ≤760), и фиксированная высота здесь снова оторвала бы
   обвязку от ленты. Селектор главной (.cw99-reference-agent) снят кругом 5 —
   панели на главной больше нет. */
@media (max-width: 760px) and (min-aspect-ratio: 7/10) {
  .cw99-agent .cw99-agent-box .agent-chat {
    max-height: 46vh;
  }
}
