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

/* Иконки в строках данных (набор «Преимущества» главной, поле svc_icon страницы услуги): значения MIGX и TV
   экранируются, SVG туда нельзя. В данных — ключ icon() макета: <i data-ic="<ключ>" style="width:24px;height:24px">;
   форма — маской из того же SVG (правила i[data-ic="<ключ>"]{--ic:url("data:…")} дописывает сид страниц), цвет —
   currentColor кружка (.service-tile__icon, .advantage-item__icon, .price-card__icon — var(--color-accent)), как
   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}

/* Необязательные значения: пусто — элемента нет (у макета все заполнены, пустыми их делает только админка).
   Надзаголовок и лид первого экрана (page-hero.php выводит .lead только при $heroLead), тексты карточек,
   заголовок и текст баннера-призыва */
.eyebrow:empty,.lead:empty,.service-tile__text:empty,.portfolio-card__text:empty,.price-card__text:empty,
.price-card__duration:empty,.support-card__text:empty,.stat-card__text:empty,.cta-banner p:empty{display:none}
/* Набор «фактов» первого экрана главной пуст — сетки нет (иначе пустой grid с отступом сверху) */
.hero-stats:empty{display:none}
/* Баннер-призыв без заголовка — секции нет (кнопка без текста бессмысленна; так у brifing.php и «Контактов» макета,
   где cta-banner.php не подключён) */
.section:has(.cta-banner h2:empty){display:none}
/* Подвал: строка «Текущий раздел» — только у страниц меню (is_active_page() макета). У остальных подпись пуста */
.site-footer__crumb:has(> span:empty){display:none}
/* Тариф поддержки: пункт без текста — пункта нет (у макета 3 и 4 пункта, колонок в наборе четыре) */
.support-card__list li:has(> span:empty){display:none}
/* «Контакты»: карта не задана в «Настройках» — блока карты нет (иначе пустая рамка iframe и ссылка «Открыть карту»
   в никуда) */
.map-block:has(iframe[src=""]){display:none}
/* «Состав услуги» без фото: аккордеон занимает всю ширину, а не половину сетки 1fr 1fr (фото выводится строкой
   pdoResources по @self и при пустом acc_img блока .accordion-block__aside в DOM нет) */
.accordion-block:not(:has(> .accordion-block__aside)){grid-template-columns:minmax(0,1fr)}
/* FAQ в две колонки: вторая колонка — свой набор строк со сдвигом. Вопросов на неё не хватило — колонки в DOM нет
   (обёртка пустого набора не выводится), и первая занимает всю ширину, а не половину сетки 1fr 1fr */
.faq-columns:has(> .accordion:only-child){grid-template-columns:minmax(0,1fr)}

/* «Текст» страницы ([[*content]] вплотную к тегам: пустой «Текст» — пустой .prose). Своей секцией на главной,
   услуге, ценах, брифе, поддержке и контактах; у текстовой страницы, ленты и записи — тем же блоком под шапкой.
   Пустой — ни секции, ни отступов */
.section:has(> .container.prose:empty){display:none}
.container.prose:empty{display:none}

/* Тексты из админки (перенос с живого сайта, генерация воркфлоу) в .prose: у макета оформлены только h2, p и a —
   сброс style.css обнуляет поля заголовков и снимает маркеры списков. Возвращаем в тоне макета: h3/h4 шрифтами
   макета, маркеры и черта цитаты — акцентом, таблица — линиями border с подписями колонок капсом, как .eyebrow */
.prose > :first-child{margin-top:0}
.prose p{margin-bottom:14px}
.prose > :is(ul,ol,table,blockquote,figure,img,iframe){margin:0 0 18px}
.prose > :is(h3,h4){margin:28px 0 10px}
.prose :is(ul,ol){padding-left:1.3em;color:var(--color-text-muted)}
.prose ul{list-style:disc}
.prose ol{list-style:decimal}
.prose li + li{margin-top:6px}
.prose li::marker{color:var(--color-accent)}
.prose :is(strong,b){font-weight:600;color:var(--color-text)}
.prose img{height:auto;border-radius:var(--radius-md)}
.prose iframe{display:block;width:100%;height:auto;aspect-ratio:16/9;border:0;border-radius:var(--radius-md)}
.prose table{width:100%;border-collapse:collapse;font-size:0.9rem}
.prose :is(th,td){padding:12px 14px;text-align:left;vertical-align:top;border-bottom:1px solid var(--color-border)}
.prose th{font-size:var(--fs-small);font-weight:600;letter-spacing:0.06em;text-transform:uppercase;color:var(--color-text-muted)}
.prose blockquote{margin-left:0;padding-left:20px;border-left:2px solid var(--color-accent);color:var(--color-text-muted)}
@media (max-width: 700px){.prose table{display:block;overflow-x:auto}}

/* Листание движка (&paginate у ленты записей; кнопки встают после сетки карточек) — в тоне .btn--ghost.btn--pill
   макета: капсула с рамкой border, наведённая и активная — акцентом. !important — поверх инлайн-стилей кнопок
   движка; display панели не трогаем: его выставляет скрипт листания */
.pdo-pagenav{gap:10px!important;margin:44px 0 0!important;justify-content:center}
.pdo-pagenav .pdo-pagebtn{display:inline-flex;align-items:center;justify-content:center;min-width:40px;height:40px;padding:0 16px!important;border:1px solid var(--color-border)!important;border-radius:var(--radius-pill)!important;background:transparent!important;color:var(--color-text)!important;font-weight:500;font-size:var(--fs-small);cursor:pointer;transition:background-color var(--transition),color var(--transition),border-color var(--transition)}
.pdo-pagenav .pdo-pagebtn:not([disabled]):hover,.pdo-pagenav .pdo-pagebtn.active{background:var(--color-accent)!important;border-color:var(--color-accent)!important;color:#fff!important}
.pdo-pagenav .pdo-pagebtn[disabled]{opacity:.35;cursor:default}

/* Ответ формы ([[+msg]] движка после кнопки «Отправить»; демо-обработчика «успеха» в main.js макета нет —
   initForms() только подсвечивает незаполненные поля и не мешает отправке): строка на тёмном блоке .form-dark —
   белым, ошибка — красным. Скрытое состояние держит [hidden]{display:none!important} из style.css */
.form-dark .bf-msg{margin-top:12px;font-size:var(--fs-small);font-weight:500;color:#fff}
.form-dark .bf-msg.bf-err{color:#FF8A80}

/* Маски иконок i[data-ic="<ключ>"] по icon() макета — дописывает bin/pbn/allseo24_2_pages.php
   при каждом прогоне. Файл перезаписывается целиком: статичную часть правьте в
   bin/pbn/data/allseo24/pbn-enhance.css */
i[data-ic="code"]{--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%3Cpolyline%20points%3D%229%208%204.5%2012%209%2016%22%2F%3E%3Cpolyline%20points%3D%2215%208%2019.5%2012%2015%2016%22%2F%3E%3Cline%20x1%3D%2213.5%22%20y1%3D%226%22%20x2%3D%2210.5%22%20y2%3D%2218%22%2F%3E%3C%2Fsvg%3E")}
i[data-ic="megaphone"]{--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%22M4%2010v4a1%201%200%200%200%201%201h1.5l1%204h2l-.8-4H12l6%203V6l-6%203H6a1%201%200%200%200-1%201z%22%2F%3E%3C%2Fsvg%3E")}
i[data-ic="search"]{--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%2210.5%22%20cy%3D%2210.5%22%20r%3D%226.5%22%2F%3E%3Cline%20x1%3D%2215.3%22%20y1%3D%2215.3%22%20x2%3D%2220.5%22%20y2%3D%2220.5%22%2F%3E%3C%2Fsvg%3E")}
i[data-ic="shield"]{--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%22M12%203.5%2019%206v5.5c0%205-3%208.2-7%209-4-.8-7-4-7-9V6z%22%2F%3E%3Cpolyline%20points%3D%229%2012%2011%2014%2015%209.5%22%2F%3E%3C%2Fsvg%3E")}
i[data-ic="speed"]{--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%2213%22%20r%3D%228%22%2F%3E%3Cline%20x1%3D%2212%22%20y1%3D%2213%22%20x2%3D%2215.5%22%20y2%3D%229%22%2F%3E%3Cline%20x1%3D%228%22%20y1%3D%226%22%20x2%3D%229.3%22%20y2%3D%227.1%22%2F%3E%3C%2Fsvg%3E")}
i[data-ic="target"]{--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%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%225%22%2F%3E%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%221.5%22%2F%3E%3C%2Fsvg%3E")}
i[data-ic="users"]{--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%229%22%20cy%3D%229%22%20r%3D%223%22%2F%3E%3Cpath%20d%3D%22M3.5%2019c0-3%202.5-5%205.5-5s5.5%202%205.5%205%22%2F%3E%3Ccircle%20cx%3D%2217%22%20cy%3D%229%22%20r%3D%222.4%22%2F%3E%3Cpath%20d%3D%22M15.5%2014.2c2.4.3%204%202.1%204%204.8%22%2F%3E%3C%2Fsvg%3E")}


/* Модалка заявки */
.modal{position:fixed;inset:0;z-index:300;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(10,15,20,.58)}
.modal[hidden]{display:none!important}
.modal__overlay{position:absolute;inset:0}
.modal__dialog{position:relative;z-index:1;width:min(520px,100%);max-height:90vh;overflow:auto;padding:30px;background:#fff;border-radius:16px;box-shadow:0 24px 70px rgba(0,0,0,.3)}
.modal__close{position:absolute;top:10px;right:12px;width:36px;height:36px;border:0;background:transparent;font-size:28px;line-height:1;color:#555;cursor:pointer}
.modal__dialog h2{margin:0 0 18px;font-size:26px}
.modal__form{display:grid;gap:12px}
.modal__field{display:grid;gap:6px;font-size:14px}
.modal__field input,.modal__field textarea{width:100%;padding:12px 14px;border:1px solid #d8d4cb;border-radius:8px;font:inherit;background:#fff}
.modal__consent{display:flex;align-items:flex-start;gap:8px;font-size:13px;color:#666}
.modal__consent input{margin-top:3px}
body.no-scroll{overflow:hidden}
