/* pbn-enhance.css — дополнения к style.css макета sro-stroitel.ru под токен-движок BablO$.
   Статичная часть: сид страниц (bin/pbn/sro-stroitel_2_pages.php) копирует этот файл в
   public/sites/sro-stroitel-ru/assets/css/pbn-enhance.css и дописывает в конец маски иконок i[data-ic="<ключ>"]
   (ключи набора st_advantages «Настроек»).
   Только переменные и классы макета; своих классов нет — кроме служебных классов движка (.bf-msg, .bf-ok, .bf-err,
   .pdo-pagenav, .pdo-pagebtn, .active) и атрибута схемы data-ic (ключ иконки строки данных). */

/* ── 1. Иконки строк MIGX ──────────────────────────────────────────────────────────────────────────
   «Как мы работаем» (st_advantages, колонка icon): значения MIGX экранируются, SVG туда нельзя. В строке —
   ключ icon() макета: <i class="ic" data-ic="<ключ>" style="width:28px;height:28px">; форма — маской из того же
   SVG (правила i[data-ic="<ключ>"]{--ic:url("data:…")} дописывает сид страниц), цвет — currentColor родителя
   .adv__ic, как stroke="currentColor" у svg макета. display:block — как img,svg{display:block} сброса. */
i[data-ic]{display:block;flex:0 0 auto;background-color:currentColor;-webkit-mask:var(--ic) center/contain no-repeat;mask:var(--ic) center/contain no-repeat}
/* ключ не задан — без маски <i> залился бы сплошным квадратом цвета иконки */
i[data-ic=""]{display:none}

/* ── 2. Необязательные значения ────────────────────────────────────────────────────────────────────
   У макета все поля заполнены; пустыми их делает только админка. Пустой абзац оставил бы разрыв ритма
   (p + p{margin-top:16px} и собственные отступы элементов), поэтому пустой элемент убираем целиком.
   Лид шапки страницы (head_lead) и третий абзац карточки фонда (mx_duo.p3) необязательны по замыслу схемы —
   так подписаны их поля в карточке страницы. */
.pagehead__lead:empty,.hero__lead:empty,.hero__fine:empty,.prose__lead:empty,.regions__note:empty,
.err__note:empty,.about__cap:empty,.duo__text:empty,.req-lead:empty,.tile__text:empty,.step__text:empty,
.adv__txt:empty,.news-card__lead:empty,.news-card__topic:empty,.promo__note:empty{display:none}
/* лид секции: у макета он либо есть в разметке, либо его нет (if ($lead !== '')); у страниц лицензии и контактов
   лид приходит из TV (lic_*_lead, map_lead), и тег <p class="lead"> печатается всегда */
.section__head .lead:empty{display:none}
/* врезка с градиентной чертой (callout_text страниц вступления и компфондов): пустой текст — врезки нет.
   Врезку лицензии (.callout--art) правило не трогает: там рядом с абзацем ещё и иллюстрация */
.callout:has(> p:only-child:empty){display:none}
/* серая карточка фактов (mx_facts): набор пуст — migx не выводит ни строк, ни обёртки, и остаётся пустая
   плашка с отступами. Пустой её делает только админка */
.facts:not(:has(.facts__row)){display:none}
/* …и колонка под неё в сетке «текст + факты» на главной и «факты + реквизиты» в контактах не должна пустовать */
@media (min-width:768px){.two:has(> .facts:not(:has(.facts__row))){grid-template-columns:minmax(0,1fr)}}
/* картинки из TV: адрес не задан — вместо фона героя, фото «О компании» и карты контактов была бы битая картинка
   (у макета они из photo() и заданы всегда). Сам <img> схема выводит выборкой по непустому TV, поэтому при пустом
   адресе тега внутри нет вовсе — прячем пустой контейнер */
.hero__bg:not(:has(img)),.about__media:not(:has(img)){display:none}
.map:has(iframe[src=""]),.map:has(iframe[src=""]) ~ .map__link{display:none}

/* ── 3. «Текст» страницы ───────────────────────────────────────────────────────────────────────────
   Секция ch_sec_text ([[*content]] вплотную к тегам: пустой «Текст» даёт пустой .prose) стоит сразу под шапкой
   страницы на всех шаблонах, кроме новости и текстовой страницы, — туда пишет воркфлоу генерации и переносится
   текст живого сайта. Пока «Текст» пуст, секции на сайте нет. У .prose макета margin-top:32px — в своей секции
   он лишний: сверху уже отступ самой секции */
.section:has(> .container > .article > .prose:empty){display:none}
.section > .container > .article > .prose:first-child{margin-top:0}

/* ── 4. Тексты из админки в .prose ─────────────────────────────────────────────────────────────────
   Макет писал .prose сам и разметил только <p>, <h2>, <ul>, <blockquote>. Перенесённый и сгенерированный текст
   даёт ещё <ol>, <h3>/<h4>, таблицы, картинки и врезки видео, а сброс style.css обнуляет поля заголовков и
   снимает маркеры списков — возвращаем их в тоне макета. */
.prose > :first-child{margin-top:0}
.prose h3,.prose h4{margin-top:32px;font-size:22px;line-height:1.3;font-weight:500}
.prose h4{font-size:19px}
.prose :is(h3,h4) + p{margin-top:12px}
/* нумерованный список: маркеры сброшены (ul,ol{list-style:none}) — возвращаем номера в тоне маркеров .prose ul li
   (цифра шрифтом заголовков, чернилами; кружок с градиентом у нумерованного списка читался бы хуже) */
.prose ol{margin-top:20px;display:flex;flex-direction:column;gap:12px;counter-reset:prose-ol}
.prose ol > li{position:relative;padding-left:32px;font-size:17px;line-height:1.7;counter-increment:prose-ol}
.prose ol > li::before{content:counter(prose-ol) ".";position:absolute;left:0;top:0;font-family:var(--f-head);font-weight:500;color:var(--pink-ink)}
/* вложенный список не должен начинать нумерацию сначала на верхнем отступе секции */
.prose :is(ul,ol) :is(ul,ol){margin-top:12px}
.prose img{margin-top:24px;border-radius:var(--r-card)}
.prose iframe{display:block;width:100%;margin-top:24px;aspect-ratio:16 / 9;height:auto;border:0;border-radius:var(--r-card)}
.prose figure{margin-top:24px}
.prose figcaption{margin-top:10px;font-size:14px;line-height:1.45;color:var(--muted)}
/* таблица — линиями и подписями колонок таблиц макета (.table); широкую прокручиваем, как .table-wrap */
.prose table{margin-top:24px;font-size:15px;background:var(--surface);border-radius:var(--r-tab)}
.prose :is(th,td){padding:14px 20px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line)}
.prose th{font-family:var(--f-head);font-weight:500;color:var(--ink)}
.prose tbody tr:last-child td{border-bottom:0}
@media (max-width:767px){.prose table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}}
/* инлайновая ссылка уже описана в макете (.prose a), выделение — нет */
.prose :is(strong,b){font-weight:500;color:var(--ink)}

/* ── 5. Листание ленты новостей ────────────────────────────────────────────────────────────────────
   &paginate=`3` у ленты «Новостей» и страницы темы: движок дописывает <nav class="pdo-pagenav"> после сетки
   .news, кнопки — .pdo-pagebtn (активная — .active). Оформление — как у пагинации макета (.pager/.pager__item):
   капсулы surface, активная — градиент. !important — поверх инлайн-стилей кнопок движка; display самой панели не
   трогаем, его выставляет скрипт листания (панели нет, пока записей не больше трёх). */
.pdo-pagenav{gap:8px!important;margin:32px 0 0!important}
.pdo-pagenav .pdo-pagebtn{display:inline-flex;align-items:center;justify-content:center;min-width:44px;height:44px;padding:0 12px!important;border:0!important;border-radius:var(--r-btn)!important;background:var(--surface)!important;color:var(--ink)!important;font-family:var(--f-body);font-size:15px;cursor:pointer;transition:background-color .2s ease}
.pdo-pagenav .pdo-pagebtn:not([disabled]):hover{background:var(--line)!important}
.pdo-pagenav .pdo-pagebtn.active{background-image:var(--grad)!important;background-color:transparent!important;color:var(--white)!important}
.pdo-pagenav .pdo-pagebtn[disabled]{opacity:.4;cursor:default}

/* ── 6. Врезка «материалов пока нет» ───────────────────────────────────────────────────────────────
   У макета её показывал PHP, когда лента темы пуста. Пустой набор pdoResources не выводит ни строк, ни обёртки
   .news — значит врезка нужна ровно тогда, когда сетки в секции нет. */
.section:has(> .container > .news) > .container > .callout{display:none}

/* ── 7. Ответ формы ────────────────────────────────────────────────────────────────────────────────
   Плашку .form__ok макета (демо-«успех» без отправки, его вырезает сид страниц) заменил блок ответа движка
   [[+msg]] на том же месте: <div class="bf-msg"> с .bf-ok или .bf-err. Оформление — то же, что у .form__ok,
   включая вариант на тёмном блоке консультации (.consult.on-dark); ошибка — цветом .field__err. Скрытое
   состояние держит [hidden]{display:none!important} из style.css. */
.bf-msg{margin-top:16px;padding:16px 20px;border-radius:var(--r-tab);background:var(--surface);color:var(--ink);font-size:15px;line-height:1.5}
.bf-msg.bf-err{color:var(--pink-ink)}
.on-dark .bf-msg{background:rgba(255,255,255,.12);color:var(--white)}
.on-dark .bf-msg.bf-err{color:var(--accent-on-dark)}

/* ── 8. Маски иконок строк MIGX ─────────────────────────────────────────────────────────────────────
   i[data-ic="<ключ>"] по icon() макета — дописывает bin/pbn/sro-stroitel_2_pages.php при каждом прогоне;
   файл перезаписывается целиком, статичную часть правьте в bin/pbn/data/sro-stroitel/pbn-enhance.css */
i[data-ic="clock"]{--ic:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%228.5%22%2F%3E%3Cpath%20d%3D%22M12%207v5.3l3.4%202%22%2F%3E%3C%2Fsvg%3E")}
i[data-ic="folder"]{--ic:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3.5%206.5h6l1.8%202.3h9.2v11H3.5v-13Z%22%2F%3E%3Cpath%20d%3D%22M3.5%2012h17%22%2F%3E%3C%2Fsvg%3E")}
i[data-ic="check"]{--ic:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22m5%2012.5%204.5%204.5L19%207.5%22%2F%3E%3C%2Fsvg%3E")}
i[data-ic="ruble"]{--ic:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%221.6%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M8.5%2020V4.5h4.2a4.3%204.3%200%200%201%200%208.6H8.5%22%2F%3E%3Cpath%20d%3D%22M6%2013.1h8.3M6%2016.4h6.5%22%2F%3E%3C%2Fsvg%3E")}
