/* ============================================
   Система секций (ТЗ 25, B-053, D-064). Этап B1 — фоны и цвета; B2a — одна левая линия.
   Токены --ng-sec-*: база — здесь (:root, главная и Симфония);
   значения ЖК — в flagman.css / vremya-zhit.css (.flagman-page, .ng-zhk--flagman).
   Существующие правила берут токены на месте, с запасным значением = прежнему.
   ============================================ */

:root {
    --ng-sec-accent:    var(--primary-color, #0d3c63); /* рамки, иконки, точки, линии */
    --ng-sec-heading:   var(--text-color, #0d3c63);    /* заголовки секций */
    --ng-sec-text:      var(--text-color, #0d3c63);    /* текст */
    --ng-sec-surface:   var(--light-gray, #f7fafc);    /* подложка секций */
    --ng-sec-cta:       #ec6830;                       /* кнопки CTA: у базы — общий оранжевый */
    --ng-sec-cta-hover: #d55a29;
}

/* Страницы системы: главная, страницы ЖК (дети страницы 13 «Квартиры в новостройках»),
   позиции (дети страниц ЖК 15, 19, 21), карточки квартир. Только здесь секции получают подложку:
   на остальных страницах --ng-sec-bg не задан, и правила секций берут прежний фон */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) {
    --ng-sec-bg: var(--ng-sec-surface);
    /* Этап B2a — одна левая линия: всё в секции начинается от края контента .container.
       Правила секций берут эти токены на месте, запасное значение = прежнее (вне системы ничего не меняется) */
    --ng-sec-gutter: calc(var(--bs-gutter-x, 1.5rem) * .5); /* поле контейнера секции = поле .container (12px) */
    --ng-sec-inset: 0px;     /* собственный боковой отступ заголовка / лида / абзаца секции */
    --ng-sec-align: left;    /* выравнивание заголовка / лида / текста секции */
    --ng-sec-measure: none;  /* ширина лида не ограничивается (решение Евгения 01.10.2026) */
}

/* Блок самой карточки квартиры (ТЗ 24) — вне B2a: токены сброшены, правила берут прежние значения
   («Похожие планировки» — h2.section-title) */
.apartment-container {
    --ng-sec-gutter: initial;
    --ng-sec-inset: initial;
    --ng-sec-align: initial;
    --ng-sec-measure: initial;
    /* B2b: блок карточки вне этапа — отступы прежние */
    --ng-sec-pt: initial;
    --ng-sec-pb: initial;
    --ng-sec-flush: initial;
    --ng-sec-title-gap: initial;
    --ng-sec-lead-gap: initial;
    --ng-card-pad: initial;
}

/* B2a: заголовки секций с Bootstrap .text-center (паттерны 705, 708) — по левому краю.
   .text-center — !important, поэтому и здесь !important, но только в роли заголовка секции */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .section-title.text-center {
    text-align: left !important;
}

/* B2a: «О проекте» на мобиле — текст колонки по левому краю (custom.css, .about-content), но виджет
   Яндекс.Отзывов внутри — карточка, его внутренняя раскладка прежняя (по центру) */
@media (max-width: 991px) {
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .about-content .reviews-widget {
        text-align: center;
    }
}

/* B2a: «Акции» — .banners-container (тоже .container) вложен в .container: поле удваивалось (24px) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .banners-section .container > .banners-container {
    padding-left: 0;
    padding-right: 0;
}

/* B2a: SEO-текст — у части заголовков и абзацев в редакторе стоит класс container (+12px) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .seo-text-section :is(h2, h3, p, ul, ol).container {
    padding-left: 0;
    padding-right: 0;
}

/* B2a: «Документы не найдены» (template-parts/documents-list.php) выводится без контейнера — текст у края окна */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .no-documents {
    padding-left: var(--ng-sec-gutter);
    padding-right: var(--ng-sec-gutter);
    /* B2b: «Документы» без документов — секция S, поля даёт сам абзац (обёртка #documents без полей) */
    margin: 0;
    padding-top: var(--ng-sec-pt);
    padding-bottom: var(--ng-sec-pb);
}

/* Подложка под всей колонкой контента: белые зазоры между секциями (margin каталога, галерей)
   и прозрачные блоки (галереи, голые h1 / p) не дают полос. Hero и карточки внутри секций — свой фон */
.site-main {
    background: var(--ng-sec-bg, transparent);
}

/* Точки слайдера «Новостей» (мобила): акцент ЖК. Глобальное .swiper-pagination-bullet (custom.css) не трогаем */
.vk-news-section .swiper-pagination-bullet {
    background: var(--ng-sec-accent);
}

/* Точки инлайн-галерей: акцент ЖК (было #2c5282, swiper-modal-gallery.css).
   body — чтобы перебить равную специфичность: swiper-modal-gallery.css подключается позже */
body .swiper-inline-gallery .swiper-pagination-bullet,
body .swiper-inline-gallery .swiper-pagination-bullet-active {
    background: var(--ng-sec-accent);
}

/* ============================================
   Этап B2b — отступы (D-064). Решения Евгения 01.10.2026, шкала 375 → 1920 (линейно на всём отрезке,
   выше 1920 — значения 1920): зазор между блоками M 48 → 96, S 32 → 56; заголовок секции → содержимое
   24 → 40; лид → содержимое 24 → 32; поля белых карточек с текстом 24 → 32.
   Механизм — половинный: у секции padding сверху и снизу = половина зазора, margin между секциями — 0.
   Существующие правила берут токены на месте (запасное значение = прежнее); здесь — токены и правила по роли.
   ============================================ */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) {
    /* clamp(min, a + b*vw, max): b = (max - min) / (1920 - 375) * 100, a = min - b * 375 / 100 */
    --ng-sec-gap:       clamp(4rem, 3.0291rem + 4.1424vw, 8rem);      /* M: 64 → 128 (1366 ≈ 105); B2b-fix 02.10.2026, было 48 → 96 */
    --ng-sec-gap-s:     clamp(2.5rem, 2.0146rem + 2.0712vw, 4.5rem);  /* S: 40 → 72; B2b-fix, было 32 → 56 */
    --ng-sec-title-gap: clamp(1.5rem, 1.2573rem + 1.0356vw, 2.5rem);  /* заголовок секции → содержимое: 24 → 40 */
    --ng-sec-subtitle-gap: clamp(0.75rem, 0.6893rem + 0.2589vw, 1rem); /* заголовок → лид: 12 → 16 (B2b-fix) */
    --ng-sec-lead-gap:  clamp(1.5rem, 1.3786rem + 0.5178vw, 2rem);    /* лид → содержимое: 24 → 32 */
    --ng-sec-para-gap:  clamp(1rem, 0.9393rem + 0.2589vw, 1.25rem);   /* абзац → абзац: 16 → 20 (B2b-fix) */
    --ng-card-pad:      clamp(1.5rem, 1.3786rem + 0.5178vw, 2rem);    /* поля белой карточки с текстом: 24 → 32 */
    --ng-sec-pt: calc(var(--ng-sec-gap) / 2);   /* padding-top секции */
    --ng-sec-pb: calc(var(--ng-sec-gap) / 2);   /* padding-bottom секции */
    --ng-sec-flush: 0px;                        /* внешние отступы секций и обёрток, margin-top заголовка — 0 */
}

/* Компактные секции (S): «Хотите здесь жить?», баннер позиции ВЖ, «Документы» (обёртка паттерна #documents) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.contact-section, .vzh-position-banner, #documents) {
    --ng-sec-pt: calc(var(--ng-sec-gap-s) / 2);
    --ng-sec-pb: calc(var(--ng-sec-gap-s) / 2);
}

/* Границы смены фона: у секции сразу после элемента не из системы (hero, блок карточки квартиры) сверху —
   полный зазор, а не половина. Между ними бывают невидимые служебные элементы (script, источник модальной
   галереи .swiper-gallery-source и т. п.) — до двух пропускаются */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.hero-section, .vzh-hero, .apartment-container) + *,
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.hero-section, .vzh-hero, .apartment-container) + :is(script, style, link, template, .swiper-gallery-source, .details-gallery-modal) + *,
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.hero-section, .vzh-hero, .apartment-container) + :is(script, style, link, template, .swiper-gallery-source, .details-gallery-modal) + :is(script, style, link, template, .swiper-gallery-source, .details-gallery-modal) + * {
    --ng-sec-pt: var(--ng-sec-gap);
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.hero-section, .vzh-hero, .apartment-container) + :is(.contact-section, .vzh-position-banner, #documents),
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.hero-section, .vzh-hero, .apartment-container) + :is(script, style, link, template, .swiper-gallery-source, .details-gallery-modal) + :is(.contact-section, .vzh-position-banner, #documents),
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.hero-section, .vzh-hero, .apartment-container) + :is(script, style, link, template, .swiper-gallery-source, .details-gallery-modal) + :is(script, style, link, template, .swiper-gallery-source, .details-gallery-modal) + :is(.contact-section, .vzh-position-banner, #documents) {
    --ng-sec-pt: var(--ng-sec-gap-s);
}
/* «Контакты» футера — последняя секция перед тёмным футером: снизу полный зазор */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .footer-contacts-section {
    --ng-sec-pb: var(--ng-sec-gap);
}

/* «Документы»: обёртка паттерна #documents без полей (на позициях Флагмана у неё класс .infrastructure-section
   с мобильными полями — получилось бы двойное поле). Поля даёт .documents-section внутри или .no-documents */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) #documents {
    padding-top: 0;
    padding-bottom: 0;
}

/* Заголовок с лидом: заголовок → лид — --ng-sec-subtitle-gap (B2b-fix, одно значение для всех), лид → содержимое —
   --ng-sec-lead-gap. У .section-title зазор берётся из --ng-sec-title-gap (в т. ч. в !important для .mb-5) — здесь он
   подменяется; заголовки ВЖ / Флагмана / каталога берут --ng-sec-subtitle-gap на месте */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .section-title:has(+ :is(.section-subtitle, .infrastructure-subtitle)) {
    --ng-sec-title-gap: var(--ng-sec-subtitle-gap);
}
/* Лид — сразу под заголовком: margin-top 0 у всех ролей лида */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.section-subtitle, .infrastructure-subtitle, .flg-position-info__subtitle, .vzh-position-info__subtitle, .vzh-composition__count, .catalog-header__meta) {
    margin-top: 0;
}
/* Два лида / лид и абзац подряд (два абзаца в «Дворовом пространстве», «Расположении» Флагмана):
   между ними — абзац → абзац, лид → содержимое — только у последнего */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.section-subtitle, .infrastructure-subtitle):has(+ :is(.section-subtitle, .infrastructure-subtitle, p)) {
    margin-bottom: var(--ng-sec-para-gap);
}

/* Абзац → абзац (B2b-fix): текстовые потоки секций вне карточек — SEO-тексты, «О проекте», голые абзацы контента.
   Было: 20 (SEO), 16 (Bootstrap p), 24–32 (два лида). Внутри карточек абзацы не трогаются (раскладка карточек) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.seo-text-section, .about-text) p:has(+ p),
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > p:has(+ p) {
    margin-bottom: var(--ng-sec-para-gap);
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.seo-text-section, .about-text) p + p,
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > p + p {
    margin-top: 0;   /* SEO-текст на мобиле: margin 20px сверху и снизу */
}

/* Текстовые потоки (B2b-fix2): заголовок → первый абзац = заголовок → лид (было 40 — заголовок → содержимое).
   SEO-тексты (h2 + p) и «О проекте» (h2.section-title + колонка .about-text). Заголовки берут --ng-sec-title-gap — он подменяется */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .seo-text-section h2:has(+ p),
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .about-project-section .section-title:has(+ .about-content-col) {
    --ng-sec-title-gap: var(--ng-sec-subtitle-gap);
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .seo-text-section h2 + p,
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .about-project-section .about-text > p:first-child {
    margin-top: 0;   /* SEO-текст на мобиле: margin-top 20px схлопывался с зазором заголовка */
}

/* Bootstrap-утилиты в разметке паттернов (.mb-5 / .mb-4 — !important): перебиваются !important строго в роли */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .section-title.mb-5 {                       /* «Акции», «Новости», «Способы покупки», «Ход строительства», «Контакты» */
    margin-bottom: var(--ng-sec-title-gap) !important;
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .section-header.mb-5,                       /* шапка «заголовок + лид»: «Наши ЖК», «Лучшие предложения» */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .row:has(> .col-12 > :is(.section-title, h2)) {   /* шапка в ряду .row.mb-5 / .mb-4: «Инфраструктура», «Генплан», «Видеоотзывы»
                                                         (в паттернах ВЖ заголовок — h2.vzh-location__title, ряд иногда обнимает всю секцию) */
    margin-bottom: 0 !important;
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .catalog-header.mb-4 {                      /* каталог: заголовок + счётчик / сортировка (лид) → фильтр комнат */
    margin-bottom: var(--ng-sec-lead-gap) !important;
}

/* SEO-текст: первый элемент — без margin сверху, последний — без margin снизу (отступ даёт секция) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .seo-text-section > :first-child,
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .seo-text-section > :is(.container, .wp-block-group__inner-container) > :first-child {
    margin-top: 0;
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .seo-text-section > :last-child,
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .seo-text-section > :is(.container, .wp-block-group__inner-container) > :last-child {
    margin-bottom: 0;
}

/* «О проекте»: поля колонок у краёв секции — 0 (между колонками на мобиле — прежние) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .about-project-section .about-content-col {
    padding-top: 0;
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .about-project-section .about-video-col {
    padding-bottom: 0;
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .about-project-section .about-content > :last-child {   /* .about-text { margin-bottom: 40px } */
    margin-bottom: 0;
}
@media (min-width: 992px) {
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .about-project-section .about-content-col {
        padding-bottom: 0;
    }
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .about-project-section .about-video-col {
        padding-top: 0;
    }
}

/* Хвосты сеток: нижний margin колонок / карточек последнего ряда уходил в низ секции.
   Отрицательный margin последнего ряда гасит ровно его — промежутки между рядами прежние */
/* «Инфраструктура», «Особенности», «Подъезды», «Рендеры» до lg: у колонок Bootstrap .mb-3 (1rem), у карточек —
   margin-bottom из custom.css (до 991: clamp(1rem, 3vw, 1.5rem); до 480: clamp(0.75rem, 2vw, 1rem)) */
@media (max-width: 991.98px) {
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .infrastructure-section .row:has(> [class*="col"] .infrastructure-card):last-child {
        margin-bottom: calc(-1rem - clamp(1rem, 3vw, 1.5rem));
    }
}
@media (max-width: 480px) {
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .infrastructure-section .row:has(> [class*="col"] .infrastructure-card):last-child {
        margin-bottom: calc(-1rem - clamp(0.75rem, 2vw, 1rem));
    }
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .flagman-features-section .container > .row:last-child {   /* .col-md-6 { margin-bottom: 32px } — flagman.css */
    margin-bottom: -32px;
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) :is(.flagman-tours-section, .flagman-yard-section, .flagman-location-section) .container > .row:last-child,
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .pozicii-grid-section .pozicii-grid:last-child,   /* «Позиции жилого комплекса» (B2b-fix) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .construction-progress-grid {               /* колонки .mb-4 (1.5rem) */
    margin-bottom: -1.5rem;
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .documents-section .documents-grid:last-child {
    margin-bottom: 0;
}
@media (max-width: 768px) {
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .genplan-section .genplan-image-container:last-child {
        margin-bottom: 0;
    }
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .shortcode-apartments-catalog > .container > .apartments-grid:last-child:has(> .mb-4) {   /* колонки карточек .mb-4; у сообщения «нет квартир» (.col-12) его нет */
    margin-bottom: -1.5rem;
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .shortcode-apartments-catalog .alert:last-child {
    margin-bottom: 0;
}
/* «Акции»: точки слайдера (position: relative) поднимал bottom Swiper (8px) — место под ними пустовало.
   bottom: 0 — как на мобиле, где его задаёт .swiper-pagination { bottom: 0 !important } (custom.css, до 767) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .banners-section .banners-pagination {
    bottom: 0;
}

/* Инлайн-галереи (figure.wp-block-gallery → .swiper-inline-gallery) — секция по роли. Под слайдами — место
   под точки (50px, как было на мобиле), точки стоят на половине зазора от низа; margin фигуры — 0 */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .swiper-inline-gallery {
    padding-top: var(--ng-sec-pt);
    padding-bottom: calc(var(--ng-sec-pb) + 50px);
    margin-bottom: 0;
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .swiper-inline-gallery .swiper-pagination {
    bottom: calc(var(--ng-sec-pb) + 2px) !important;   /* на мобиле custom.css ставит всем .swiper-pagination bottom: 0 !important;
                                                          + 2px — активная точка увеличена scale(1.3) и выходит вниз */
    font-size: 0;                          /* без строки текста: низ контейнера = низ точек */
}
/* Активный слайд увеличен (scale(1.05), swiper-modal-gallery.css) и выходит в верхнее поле на 2,5 % высоты
   картинки: 80vh → 2vh (от 992), 60vh → 1,5vh (768–991), на мобиле scale(1). Поле сверху больше ровно на столько */
@media (min-width: 992px) {
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .swiper-inline-gallery {
        padding-top: calc(var(--ng-sec-pt) + 2vh);
    }
}
@media (min-width: 768px) and (max-width: 991.98px) {
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .swiper-inline-gallery {
        padding-top: calc(var(--ng-sec-pt) + 1.5vh);
    }
}

/* Голые блоки верхнего уровня (позиции: h1 + абзац + галерея на 2.3 / 2.4 / 2.5, «Кладовые» на 2.25):
   заголовок открывает секцию (сверху половина зазора; первым в контенте, под шапкой, — полный),
   абзац сразу после заголовка — лид, группа с картинкой закрывает секцию (снизу половина зазора) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > .wp-block-heading {
    margin-top: var(--ng-sec-pt);
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > .wp-block-heading:first-child {
    margin-top: var(--ng-sec-gap);
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > .wp-block-heading:not(:has(+ p)) {
    margin-bottom: var(--ng-sec-title-gap);
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > .wp-block-heading:has(+ p) {   /* заголовок → лид (B2b-fix) */
    margin-bottom: var(--ng-sec-subtitle-gap);
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > .wp-block-heading + p {
    margin-top: 0;
    margin-bottom: var(--ng-sec-lead-gap);
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > .wp-block-heading + p + .swiper-inline-gallery {
    padding-top: 0;
}
@media (min-width: 992px) {
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > .wp-block-heading + p + .swiper-inline-gallery {
        padding-top: 2vh;
    }
}
@media (min-width: 768px) and (max-width: 991.98px) {
    body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > .wp-block-heading + p + .swiper-inline-gallery {
        padding-top: 1.5vh;
    }
}
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > .wp-block-group:not(.seo-text-section) {
    margin-bottom: var(--ng-sec-pb);
}

/* Пустой абзац редактора верхнего уровня (<p class="wp-block-paragraph"></p>, например после шорткода «Новостей»
   на позициях ВЖ): его margin-bottom добавлялся к зазору перед «Контактами» */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content > p:empty {
    margin: 0;
}
/* B2b-fix: пустой абзац внутри секций контента — без высоты и отступов. Абзац из одного &nbsp; или <br>
   CSS не отличить от абзаца с текстом — такие убираются в редакторе (B-062) */
body:is(.home, .parent-pageid-13, .parent-pageid-15, .parent-pageid-19, .parent-pageid-21, .single-apartments) .entry-content p:empty:not(.apartment-container p) {
    display: none;
}
