/* ok-ceny.css — страница цен /ceny/. Пакет W3-P04.
 *
 * ПОДКЛЮЧЕНИЕ: functions.php, приоритет 170, гейт `is_page_template('page-templates/tpl-ceny.php')`.
 * СКОУП правил: `body.page-template-tpl-ceny` — как предписано Allowed.
 *
 * ★ ПОЧЕМУ СКОУП ИМЕННО ПО КЛАССУ ТЕЛА, А НЕ ПО ОБЁРТКЕ.
 * Страница цен обёрнута в `<div class="okna-usluga">` — тот же класс живёт на
 * 754 посадочных, 13 услугах и хабе услуг. Правило, начатое с него, уехало бы
 * на сотни страниц молча. Класс тела `page-template-tpl-ceny` подтверждён
 * замером живой страницы и покрывает ровно её.
 *
 * ══ ЧТО ЭТОТ ЛИСТ ДЕЛАЕТ И ЧЕГО НЕ ДЕЛАЕТ ═══════════════════════════════
 *
 * Делает: оформляет таблицу прайса, которую шаблон читает из поля страницы
 * `price_table`.
 *
 * ★★ НЕ ДЕЛАЕТ И НЕ МОЖЕТ: ПОЛЯ `price_table` В АДМИНКЕ ПОКА НЕТ.
 * Первая редакция этой шапки утверждала, что «владелец правит таблицу полем
 * страницы». Это было неверно, и найдено рецензией до коммита. Поле нигде не
 * зарегистрировано: `inc/acf-fields.php` держит соседние `why_no_price` и
 * `price_directions`, а `price_table` — нет; запасной путь закрыт, ACF снимает
 * панель «Произвольные поля» (`remove_wp_meta_box => true`).
 *
 * То есть шаблон читать умеет, а вписать владельцу СЕГОДНЯ некуда. Заведение
 * поля требует `inc/acf-fields.php`, которого в Allowed пакета нет, — и пакет
 * этот случай предусмотрел: «вносить некуда — эскалация, а не хардкод».
 * Позиция заведена, эскалация вынесена.
 *
 * НЕ содержит ни одной цифры цены. Цифры — данные владельца, источник у них
 * свой, и в лист они не попадают ни при каком раскладе.
 *
 * ══ ВЕЛИЧИНЫ — С МАКЕТА 19, ПОИМЁННО ════════════════════════════════════
 *
 * Макет проверен на подмену перед снятием: `19 Цены.dc.html` содержит именно
 * «Цены — десктоп» и «Цены — мобайл». (Три соседних макета в той же папке
 * названы одними страницами, а содержат другие, поэтому проверка не лишняя.)
 *
 *   контейнер     radius 14px · border 1px #e3e9f2 · тень 0 10px 30px rgba(20,40,80,.05)
 *   таблица       font-size 14.5px · border-collapse collapse · min-width 660px
 *   ячейка        padding 14px 18px · border-bottom 1px #e8ecf2 · border-right 1px #dbe4f0
 *   шапка         background #eef3f9 · border-bottom 2px #d8e2f0
 *   название      font-weight 700 · color #123d87
 *   цена          font-weight 800 · color #123d87
 *   зебра         чётные #f5f8fd, нечётные #ffffff
 *   подсветка     background #eef3fc · рамки #d9e6fb / #cfe0f6
 *   ховер         background #eef3fc
 *   колонки       40% работа · 18% цена · третья без ширины
 *   мобильная     карточка radius 12px · border 1px #e8ecf2 · padding 14px 15px · gap 10px
 *                 имя 14px/800 · цена 15px/800 · «что входит» 12.5px #8a94a6 lh 1.45
 *
 * ★ ЧЕГО В МАКЕТЕ НЕТ — и потому нет здесь:
 *   `text-align` у ячеек данных вообще (все 12 совпадений `left` приходятся
 *   ровно на 12 `<th>`); `text-align:right` у цены; собственный кегль у `td`;
 *   зебра, разделитель, радиус контейнера, тень, скролл и ховер на мобайле;
 *   `margin` у строк. Всё перечисленное остаётся как есть.
 *
 * ══ ★ МОБАЙЛ В МАКЕТЕ — НЕ АДАПТИВ, А ОТДЕЛЬНАЯ ВЁРСТКА ═════════════════
 *
 * На узкой ширине макет не сохраняет таблицу: четыре десктопные таблицы
 * заменены четырьмя табами-чипами, строка из трёх колонок — карточкой из двух
 * уровней. Брейкпоинтов в файле нет вовсе — это два независимо свёрстанных
 * экрана.
 *
 * Здесь взят промежуточный путь, и он назван прямо: **таблица превращается в
 * карточки теми же величинами, но БЕЗ табов**. Причина — табы требуют
 * переключателя, то есть механики, а не оформления; заводить её листом нельзя,
 * а разметку табов в `tpl-ceny.php` пришлось бы придумывать вместе с делением
 * позиций на четыре группы, которого в данных владельца может не быть вовсе.
 *
 * Позиция заведена. Решение о табах — за пределами листа.
 *
 * ══ ГРАНИЦЫ ═════════════════════════════════════════════════════════════
 *
 * `!important` — ни одного. Ценообразование каталога не затрагивается: этот
 * лист не знает ни об одной функции расчёта и работает только с разметкой
 * таблицы внутри своего скоупа.
 */

/* ── контейнер прайса ─────────────────────────────────────────────────── */

body.page-template-tpl-ceny .ok-ceny__wrap{
	border: 1px solid #e3e9f2;
	border-radius: 14px;
	box-shadow: 0 10px 30px rgba(20, 40, 80, .05);
	background: #fff;
	overflow-x: auto;              /* узость десктопа решается скроллом — как в макете */
}

body.page-template-tpl-ceny .ok-ceny__wrap + .ok-ceny__wrap{ margin-top: 28px; }

/* ── таблица ──────────────────────────────────────────────────────────── */

body.page-template-tpl-ceny .ok-ceny__wrap table{
	width: 100%;
	min-width: 660px;
	border-collapse: collapse;
	font-size: 14.5px;
}

body.page-template-tpl-ceny .ok-ceny__wrap th,
body.page-template-tpl-ceny .ok-ceny__wrap td{
	padding: 14px 18px;
	border-bottom: 1px solid #e8ecf2;
	border-right: 1px solid #dbe4f0;
}

body.page-template-tpl-ceny .ok-ceny__wrap th:last-child,
body.page-template-tpl-ceny .ok-ceny__wrap td:last-child{ border-right: 0; }

body.page-template-tpl-ceny .ok-ceny__wrap tr:last-child td{ border-bottom: 0; }

/* шапка */
body.page-template-tpl-ceny .ok-ceny__wrap thead th{
	background: #eef3f9;
	border-bottom: 2px solid #d8e2f0;
	text-align: left;              /* единственное место, где выравнивание задано макетом */
	font-weight: 800;
	color: #123d87;
}

/* колонки: первая — работа, вторая — цена, третья без ширины */
body.page-template-tpl-ceny .ok-ceny__wrap td:first-child,
body.page-template-tpl-ceny .ok-ceny__wrap th:first-child{ width: 40%; font-weight: 700; color: #123d87; }

body.page-template-tpl-ceny .ok-ceny__wrap td:nth-child(2),
body.page-template-tpl-ceny .ok-ceny__wrap th:nth-child(2){ width: 18%; font-weight: 800; color: #123d87; white-space: nowrap; }

body.page-template-tpl-ceny .ok-ceny__wrap td:nth-child(3){ color: #526173; }

/* зебра и отклик */
body.page-template-tpl-ceny .ok-ceny__wrap tbody tr:nth-child(even){ background: #f5f8fd; }
body.page-template-tpl-ceny .ok-ceny__wrap tbody tr:nth-child(odd){ background: #fff; }

@media (hover: hover){
	body.page-template-tpl-ceny .ok-ceny__wrap tbody tr:hover{ background: #eef3fc; }
}

/* ── мобильная раскладка: карточки вместо таблицы ─────────────────────── */

/* ★ ГРАНИЦА 600, А НЕ 768 — ПО СОСЕДЯМ, А НЕ ПО ПРИВЫЧКЕ.
   Первая редакция брала 768 «как обычно». Но контейнер, в котором живёт этот
   блок, переключается на 600: `design.css:442` меняет кегль заголовка секции
   внутри `.okna-usluga`, `design.css:784` — отступ заголовка. При границе 768
   на полосе 601-768px получалась бы нелепица: заголовок «Прайс на работы» ещё
   десктопный, а таблица под ним уже разобрана в карточки — блок выглядел бы
   иначе, чем все его соседи по странице.
   Совпадение с соседями важнее круглого числа. */
@media (max-width: 600px){

	/* контейнер перестаёт быть рамкой: рамку несёт каждая карточка */
	body.page-template-tpl-ceny .ok-ceny__wrap{
		border: 0;
		border-radius: 0;
		box-shadow: none;
		background: none;
		overflow-x: visible;
	}

	body.page-template-tpl-ceny .ok-ceny__wrap table,
	body.page-template-tpl-ceny .ok-ceny__wrap tbody{ display: block; min-width: 0; }

	/* шапка на мобайле не нужна — в макете её нет */
	body.page-template-tpl-ceny .ok-ceny__wrap thead{ display: none; }

	/* ★ СТРОКА — ФЛЕКС С ПЕРЕНОСОМ, БЕЗ ПОДГОНКИ КООРДИНАТ.
	   Первая редакция поднимала цену на строку имени отрицательным
	   `margin-top:-25px`. Такое число верно ровно при одной длине имени: при
	   переносе в две строки цена уезжает поверх текста, и виновник не виден.
	   Флекс с `flex-wrap` даёт ту же раскладку без единой подогнанной
	   величины: имя и цена делят первую строку, «что входит» занимает всю
	   ширину и переносится само. */
	body.page-template-tpl-ceny .ok-ceny__wrap tbody tr{
		display: flex;
		flex-wrap: wrap;
		align-items: baseline;
		column-gap: 10px;
		border: 1px solid #e8ecf2;
		border-radius: 12px;
		padding: 14px 15px;
		margin-bottom: 10px;
		background: #fff;
	}

	/* зебры на мобайле в макете нет — снимаем её явно */
	body.page-template-tpl-ceny .ok-ceny__wrap tbody tr:nth-child(even),
	body.page-template-tpl-ceny .ok-ceny__wrap tbody tr:nth-child(odd){ background: #fff; }

	body.page-template-tpl-ceny .ok-ceny__wrap td{
		display: block;
		padding: 0;
		border: 0;
		width: auto;
	}

	/* имя — занимает остаток строки и толкает цену к правому краю */
	body.page-template-tpl-ceny .ok-ceny__wrap td:first-child{
		flex: 1 1 auto;
		min-width: 0;
		width: auto;
		font-size: 14px;
		font-weight: 800;
	}

	/* ★ ЦЕНА: `nowrap` СНИМАЕТСЯ, И ЭТО НЕ МЕЛОЧЬ.
	   На десктопе колонка цены объявлена `white-space:nowrap` — там это верно,
	   «от 9 500 ₽» рвать по словам незачем. На мобайле правило продолжало
	   действовать, а ячейка была объявлена несжимаемой (`flex:0 0 auto`).
	   Пока в цене короткая сумма, всё сходится. Но приёмка пакета ТРЕБУЕТ
	   писать в эту же колонку «рассчитывается индивидуально» вместо суммы
	   выезда — такая строка не переносится и не сжимается, а места в карточке
	   на 375 остаётся 265px. Страницу увело бы вбок, причём критерий про
	   формулировку и критерий про отсутствие горизонтальной прокрутки
	   противоречили бы друг другу.
	   Здесь цена переносится и сжимается — форматирование теряется, вёрстка нет. */
	body.page-template-tpl-ceny .ok-ceny__wrap td:nth-child(2){
		flex: 0 1 auto;
		width: auto;
		min-width: 0;
		margin-left: auto;
		white-space: normal;
		font-size: 15px;
	}

	/* «что входит» — на всю ширину, следующей строкой */
	body.page-template-tpl-ceny .ok-ceny__wrap td:nth-child(3){
		flex: 1 0 100%;
		margin-top: 5px;
		font-size: 12.5px;
		line-height: 1.45;
		color: #8a94a6;
	}
}

/* ══ CENY-REBUILD-01: НОВЫЙ КАРКАС СТРАНИЦЫ ЦЕН (по макету 19) ═══════════
   Страница больше не обёрнута в `.okna-usluga`. Свой wrapper `.ok-ceny-page`,
   свои блоки `.ok-ceny-hero`, `.ok-ceny-b2b`. Все правила scoped классом тела. */

body.page-template-tpl-ceny .ok-ceny-page{ display:block; overflow-x:clip; }

/* ==== СКВОЗНЫЕ БЛОКИ ГЛАВНОЙ на /ceny/ (отзывы/кейсы) — контейнер как на главной ==== */
.ok-ceny-page .okna-wrap{ max-width:calc(var(--okna-cw) + 80px); margin:0 auto; padding:0 40px; }


/* ★ СИСТЕМНЫЕ КРОШКИ (.okna-crumbs из header.php) на странице цен скрыты:
   они дублируют крошки «Главная / Цены» внутри тёмного hero (ceny-hero__crumbs)
   и на 390 режутся длинным заголовком страницы. Прецедент — tpl-usluga,
   у которого системные крошки так же скрыты (header.php:197). */
body.page-template-tpl-ceny .okna-crumbs{ display:none; }

/* ── HERO цен (макет 19, блок 1) ─────────────────────────────────────────── */
body.page-template-tpl-ceny .ok-ceny-hero{
	position: relative;
	background: #0b1f3f url('img/catalog-hero-bg.webp') center right/cover no-repeat;
}
body.page-template-tpl-ceny .ok-ceny-hero__shade{
	position: absolute; inset: 0;
	background: linear-gradient(95deg, rgba(9,17,33,.97) 0%, rgba(9,17,33,.9) 44%, rgba(9,17,33,.5) 74%, rgba(9,17,33,.12) 100%);
}
body.page-template-tpl-ceny .ok-ceny-hero__wrap{
	position: relative;
	max-width: 1280px; margin: 0 auto; padding: 22px 32px 54px;
}
body.page-template-tpl-ceny .ok-ceny-hero__crumbs{
	display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
	font-size: 13px; margin-bottom: 28px;
	max-width: 100%; box-sizing: border-box; white-space: normal;
}
body.page-template-tpl-ceny .ok-ceny-hero__crumbs a{ color: rgba(255,255,255,.78); }
body.page-template-tpl-ceny .ok-ceny-hero__crumbs a:hover{ color: #fff; }
body.page-template-tpl-ceny .ok-ceny-hero__sep{ color: rgba(255,255,255,.4); }
body.page-template-tpl-ceny .ok-ceny-hero__crumbs > span:last-child{ color: rgba(255,255,255,.92); }
body.page-template-tpl-ceny .ok-ceny-hero__main{ max-width: 680px; box-sizing: border-box; }
body.page-template-tpl-ceny .ok-ceny-hero__title{
	margin: 0 0 14px;
	font-size: 40px; font-weight: 800; color: #fff;
	line-height: 1.12; letter-spacing: -.015em; text-wrap: balance;
	max-width: 100%; box-sizing: border-box; white-space: normal;
	overflow-wrap: break-word; word-wrap: break-word;
}
body.page-template-tpl-ceny .ok-ceny-hero__lead{
	margin: 0 0 24px; font-size: 16.5px; color: #cfd6e2;
	line-height: 1.55; max-width: 600px;
	max-width: 100%; box-sizing: border-box; white-space: normal;
	overflow-wrap: break-word;
}
body.page-template-tpl-ceny .ok-ceny-hero__benefits{
	list-style: none; margin: 0 0 26px; padding: 0;
	display: flex; flex-wrap: wrap; gap: 10px; max-width: 640px;
}
body.page-template-tpl-ceny .ok-ceny-hero__benefit{
	display: flex; align-items: center; gap: 10px;
	background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.14);
	border-radius: 8px; padding: 11px 14px;
}
body.page-template-tpl-ceny .ok-ceny-hero__benefit span{
	font-size: 13.5px; font-weight: 600; color: #dbe2ee; line-height: 1.3;
}
body.page-template-tpl-ceny .ok-ceny-hero__actions{
	display: flex; flex-wrap: wrap; gap: 12px;
}
body.page-template-tpl-ceny .ok-ceny-hero__cta{
	display: inline-flex; align-items: center; gap: 9px;
	height: 48px; padding: 0 26px; border-radius: 8px;
	font-size: 15.5px; font-weight: 700; cursor: pointer; text-decoration: none;
}
body.page-template-tpl-ceny .ok-ceny-hero__cta--primary{
	background: #e0223a; color: #fff; border: none;
}
body.page-template-tpl-ceny .ok-ceny-hero__cta--primary:hover{ background: #c81a30; }
body.page-template-tpl-ceny .ok-ceny-hero__cta--ghost{
	background: transparent; color: #fff; border: 2px solid rgba(255,255,255,.55);
}
body.page-template-tpl-ceny .ok-ceny-hero__cta--ghost:hover{ border-color: #fff; background: rgba(255,255,255,.08); }

/* ★ АНТИ-TT1: родительская тема Twenty Twenty-One красит <button> в свой тёмный
   rgb(40,48,61) с зелёным текстом (замер computed). Проект уже обходит это
   !important в glavnaya.css (gv-pickdark, «анти-TT1»), иначе TT1 грузится ПОСЛЕ
   нашего листа и перебивает его при равной специфичности. Без !important CTA
   останется графитовой. Прецедент — glavnaya.css:476-482. */
body.page-template-tpl-ceny .ok-ceny-hero__cta--primary{ background:#e0223a !important; color:#fff !important; border:none !important; }
body.page-template-tpl-ceny .ok-ceny-hero__cta--primary:hover,
body.page-template-tpl-ceny .ok-ceny-hero__cta--primary:focus{ background:#c81a30 !important; color:#fff !important; }
body.page-template-tpl-ceny .ok-ceny-hero__cta--ghost{ background:transparent !important; border-color:rgba(255,255,255,.55) !important; color:#fff !important; }
body.page-template-tpl-ceny .ok-ceny-hero__cta--ghost:hover,
body.page-template-tpl-ceny .ok-ceny-hero__cta--ghost:focus{ background:rgba(255,255,255,.08) !important; border-color:#fff !important; color:#fff !important; }

/* ── B2B тёмный (макет 19, блок 7) ──────────────────────────────────────── */
body.page-template-tpl-ceny .ok-ceny-b2b{ background: #123d87; padding: 64px 0; }
body.page-template-tpl-ceny .ok-ceny-b2b__wrap{
	max-width: 1280px; margin: 0 auto; padding: 0 32px;
	display: grid; grid-template-columns: minmax(0,1.15fr) minmax(0,1fr);
	gap: 48px; align-items: center;
}
body.page-template-tpl-ceny .ok-ceny-b2b__title{
	margin: 0 0 6px; font-size: 32px; font-weight: 800; color: #fff;
	line-height: 1.2; letter-spacing: -.01em;
}
body.page-template-tpl-ceny .ok-ceny-b2b__accent{
	display: block; width: 44px; height: 3px; background: #e0223a; border-radius: 2px;
	margin-bottom: 18px;
}
body.page-template-tpl-ceny .ok-ceny-b2b__text{
	margin: 0 0 26px; font-size: 16.5px; color: #cdd9f0; line-height: 1.55; max-width: 520px;
}
body.page-template-tpl-ceny .ok-ceny-b2b__cta{
	display: inline-flex; align-items: center; gap: 9px;
	height: 48px; padding: 0 26px; background: transparent; color: #fff;
	border: 2px solid rgba(255,255,255,.6); border-radius: 8px;
	font-size: 15.5px; font-weight: 700; text-decoration: none;
}
body.page-template-tpl-ceny .ok-ceny-b2b__cta:hover{ border-color: #fff; background: rgba(255,255,255,.1); }
body.page-template-tpl-ceny .ok-ceny-b2b__right{
	display: grid; grid-template-columns: 1fr 1fr; gap: 14px;
}
body.page-template-tpl-ceny .ok-ceny-b2b__stat{
	background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.12);
	border-radius: 14px; padding: 20px 22px;
}
body.page-template-tpl-ceny .ok-ceny-b2b__num{ font-size: 30px; font-weight: 800; color: #fff; line-height: 1; }
body.page-template-tpl-ceny .ok-ceny-b2b__label{ margin-top: 6px; font-size: 13.5px; color: #aebbd0; line-height: 1.4; }

/* ══ ПРАЙС-ТАБЛИЦЫ (макет 19, блок 2) — CENY_TABLES_PIXEL_REWORK_09 ══════
   Полный CSS-компонент, namespace ok-ceny-price__*. Секция белая, padding 72px 0,
   контейнер 1280/32px. Таблица — дизайнерская карточка: мягкая рамка, тень,
   чистые углы (wrapper+scroll), уверенная шапка, цельная зебра, popular-акцент. */

body.page-template-tpl-ceny .ok-ceny-price{ background:#ffffff; padding:72px 0; }
body.page-template-tpl-ceny .ok-ceny-price__container{ max-width:1280px; margin:0 auto; padding:0 32px; }

/* Заголовок + intro + строка даты/PDF */
body.page-template-tpl-ceny .ok-ceny-price__title{
	margin:0 0 12px; font-size:34px; font-weight:800; color:#123d87; line-height:1.2; letter-spacing:-.01em;
	background:linear-gradient(#e0223a,#e0223a) left bottom/44px 3px no-repeat; padding-bottom:14px;
}
body.page-template-tpl-ceny .ok-ceny-price__intro{
	margin:0 0 24px; font-size:16.5px; color:#526173; line-height:1.55; max-width:820px;
}
body.page-template-tpl-ceny .ok-ceny-price__meta{
	display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:14px; margin-bottom:22px;
}
body.page-template-tpl-ceny .ok-ceny-price__date{
	display:inline-flex; align-items:center; gap:9px; background:#eef3fc; color:#1c5bd6;
	font-size:13.5px; font-weight:700; padding:9px 15px; border-radius:999px;
}
body.page-template-tpl-ceny .ok-ceny-price__date svg{ flex:0 0 auto; }
body.page-template-tpl-ceny .ok-ceny-price__pdf{
	display:inline-flex; align-items:center; gap:9px; height:44px; padding:0 20px;
	background:#ffffff; color:#123d87; border:1.5px solid #cfd9ea; border-radius:8px;
	font-size:14.5px; font-weight:700; cursor:pointer; text-decoration:none;
}
body.page-template-tpl-ceny .ok-ceny-price__pdf:hover{ border-color:#1c5bd6; color:#1c5bd6; }

/* Группы */
body.page-template-tpl-ceny .ok-ceny-price__groups{ display:flex; flex-direction:column; gap:32px; }
body.page-template-tpl-ceny .ok-ceny-price__group-title{
	margin:0 0 12px; font-size:20px; font-weight:800; color:#123d87; line-height:1.25;
}

/* Чипы-табы: только ≤600px */
body.page-template-tpl-ceny .ok-ceny-price__chips{ display:none; }
/* ★ №21 §1.1: канон-противовес TT1 :not(.has-background):not(.has-text-color) (см. ok-header.css:279)
   поднимает вес до (0,4,1) > TT1 (0,3,1) СРАЗУ по background И color — иначе TT1 (грузится позже)
   красит текст #d1e4dd (контраст 1,17). Литералы те же. Четырёхзвенная цепочка ниже снята как ненужная. */
body.page-template-tpl-ceny .ok-ceny-price__chip:not(.has-background):not(.has-text-color){
	flex:0 0 auto; height:38px; padding:0 16px; border-radius:999px; border:none;
	font-size:13px; font-weight:700; white-space:nowrap; cursor:pointer;
	background:#eef1f6; color:#1d2433; line-height:1;
}
body.page-template-tpl-ceny .ok-ceny-price__chip.is-active:not(.has-background):not(.has-text-color){ background:#1c5bd6; color:#ffffff; }

/* Wrapper таблицы: внешний слой режет углы/рамку/тень, внутренний — скролл */
body.page-template-tpl-ceny .ok-ceny-price__table-wrap{
	overflow:hidden; border:1px solid #e3e9f2; border-radius:14px; background:#ffffff;
	box-shadow:0 10px 30px rgba(20,40,80,.05);
}
body.page-template-tpl-ceny .ok-ceny-price__table-scroll{ overflow-x:auto; max-width:100%; }

/* Таблица */
body.page-template-tpl-ceny .ok-ceny-price__table{
	width:100%; min-width:660px; border-collapse:collapse; font-size:14.5px; line-height:1.45;
}

/* Шапка */
body.page-template-tpl-ceny .ok-ceny-price__table thead tr{ background:#eef3f9; }
body.page-template-tpl-ceny .ok-ceny-price__table th{
	text-align:left; padding:14px 18px; font-weight:800; color:#123d87;
	border-bottom:2px solid #d8e2f0; border-right:1px solid #dbe4f0;
}
body.page-template-tpl-ceny .ok-ceny-price__table th.ok-ceny-price__cell--work{ width:40%; }
body.page-template-tpl-ceny .ok-ceny-price__table th.ok-ceny-price__cell--price{ width:18%; }
body.page-template-tpl-ceny .ok-ceny-price__table th.ok-ceny-price__cell--includes{ border-right:0; }

/* Строки и зебра */
body.page-template-tpl-ceny .ok-ceny-price__row{ background:#ffffff; border-bottom:1px solid #e8ecf2; }
body.page-template-tpl-ceny .ok-ceny-price__row:nth-child(even){ background:#f5f8fd; }
body.page-template-tpl-ceny .ok-ceny-price__row--popular{ background:#eef3fc; border-bottom:1px solid #d9e6fb; }
body.page-template-tpl-ceny .ok-ceny-price__row:last-child{ border-bottom:0; }

/* Ячейки */
body.page-template-tpl-ceny .ok-ceny-price__cell{
	padding:14px 18px; vertical-align:middle; border-right:1px solid #dbe4f0;
}
body.page-template-tpl-ceny .ok-ceny-price__cell:last-child{ border-right:0; }
body.page-template-tpl-ceny .ok-ceny-price__cell--work{ color:#123d87; font-weight:700; }
body.page-template-tpl-ceny .ok-ceny-price__row--popular .ok-ceny-price__cell--work{ color:#123d87; font-weight:800; }
body.page-template-tpl-ceny .ok-ceny-price__row--popular .ok-ceny-price__cell{ border-right-color:#cfe0f6; }
body.page-template-tpl-ceny .ok-ceny-price__cell--price{ color:#123d87; font-weight:800; white-space:nowrap; }
body.page-template-tpl-ceny .ok-ceny-price__cell--includes{ color:#526173; font-weight:400; }

/* Цены: free / muted */
body.page-template-tpl-ceny .ok-ceny-price__price--free{ color:#1f9d55; font-weight:800; }
body.page-template-tpl-ceny .ok-ceny-price__price--muted{ color:#8a94a6; font-weight:700; }

/* Бейдж «★ Популярное» */
body.page-template-tpl-ceny .ok-ceny-price__badge{
	display:inline-block; background:#e0223a; color:#ffffff;
	font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.04em;
	padding:2px 8px 3px; border-radius:999px; margin-left:8px;
	line-height:1.4; vertical-align:2px; white-space:nowrap;
}

/* Сноска */
body.page-template-tpl-ceny .ok-ceny-price__note{
	display:flex; gap:12px; align-items:flex-start; background:#f7faff; border:1px solid #e8ecf2;
	border-radius:12px; padding:14px 18px; margin-top:22px; max-width:900px;
	font-size:13.5px; color:#526173; line-height:1.55;
}
body.page-template-tpl-ceny .ok-ceny-price__note-icon{ flex:0 0 auto; display:flex; margin-top:1px; }

/* Mobile ≤600px */
@media (max-width: 600px){
	body.page-template-tpl-ceny .ok-ceny-price{ padding:40px 0; }
	body.page-template-tpl-ceny .ok-ceny-price__container{ padding:0 14px; }
	body.page-template-tpl-ceny .ok-ceny-price__title{ font-size:23px; line-height:1.25; }
	body.page-template-tpl-ceny .ok-ceny-price__intro{ font-size:14px; }
	body.page-template-tpl-ceny .ok-ceny-price__chips{ display:flex; gap:8px; overflow-x:auto; padding:0 0 10px; margin-bottom:16px; }
	body.page-template-tpl-ceny .ok-ceny-price__table{ min-width:660px; font-size:13px; }
	body.page-template-tpl-ceny .ok-ceny-price__table th,
	body.page-template-tpl-ceny .ok-ceny-price__table td{ padding:12px 14px; }
}

/* ── Мобильный hero (макет 19) ──────────────────────────────────────────── */
@media (max-width: 600px){
	body.page-template-tpl-ceny .ok-ceny-hero__wrap{ padding: 16px 16px 40px; }
	/* MOBM-09 (критик): H1 на мобилке рендерится 28px глобальным каноном
	   okna-mobile.css:248 body h1{28px!important}. Прежнее правило 26px было МЁРТВЫМ
	   (перебивалось !important) — снято вместе с ложным комментарием про «26px/запас 89px».
	   Макет #19 хочет 21px, но это new !important (Forbidden §8) — позиция. Принят канон 28. */
	body.page-template-tpl-ceny .ok-ceny-hero__actions .ok-ceny-hero__cta{ width: 100%; justify-content: center; }
	/* правило CTA из CLAUDE.md: на мобилке все красные CTA — radius 4px */
	body.page-template-tpl-ceny .ok-ceny-hero__cta--primary{ border-radius: 4px; }
	body.page-template-tpl-ceny .ok-ceny-b2b__wrap{ grid-template-columns: 1fr; gap: 28px; padding: 0 16px; }
	body.page-template-tpl-ceny .ok-ceny-b2b__title{ font-size: 24px; }
	/* CENY-POLISH-03: нижние блоки макета 19 на мобилке.
	   220px repeat(4,1fr) и 1fr/1.1fr на 390 физически шире контейнера → body скроллится.
	   SEO-блок теперь .okna-seo-text--ceny (общая система) — его мобильный padding задан ниже. */
	body.page-template-tpl-ceny .ok-ceny-faq > div{ padding: 0 16px; }
	body.page-template-tpl-ceny .ok-ceny-faq .ok-ceny-faq__list{ max-width: 100%; }
}


/* ══ КАЛЬКУЛЯТОР «Рассчитайте стоимость стекла» (макет 19, блок 4) ════════
   Пересобран в OKNA_BUILDER_CENY_URGENT_FIX_06: белая секция, H2+intro,
   большая тёмная карточка 2 колонки (форма слева шире, результат справа).
   Все стили scoped классом тела, инлайн не используется. */

body.page-template-tpl-ceny .ok-ceny-calc{ background:#ffffff; padding:72px 0; }
body.page-template-tpl-ceny .ok-ceny-calc .ok-ceny-container{ max-width:1280px; margin:0 auto; padding:0 32px; }
body.page-template-tpl-ceny .ok-ceny-h2{
	margin:0 0 12px; font-size:34px; font-weight:800; color:#123d87;
	letter-spacing:-.01em;
	background:linear-gradient(#e0223a,#e0223a) left bottom/44px 3px no-repeat; padding-bottom:14px;
}
body.page-template-tpl-ceny .ok-ceny-calc__intro{
	margin:0 0 26px; font-size:16.5px; color:#526173; line-height:1.55; max-width:760px;
}

body.page-template-tpl-ceny .ok-ceny-calc__card{
	display:grid; grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);
	gap:0; border-radius:18px; overflow:hidden;
	box-shadow:0 20px 50px rgba(20,40,80,.12);
	background:#0b1f3f;
}

/* Левая колонка — форма */
body.page-template-tpl-ceny .ok-ceny-calc__form-col{
	background:linear-gradient(160deg,#16233f 0%,#0b1f3f 100%);
	padding:32px 36px;
}
body.page-template-tpl-ceny .ok-ceny-calc__head{ display:flex; align-items:center; gap:14px; margin-bottom:24px; }
body.page-template-tpl-ceny .ok-ceny-calc__head-ic{
	flex:0 0 auto; display:flex; align-items:center; justify-content:center;
	width:48px; height:48px; border-radius:12px; background:rgba(255,255,255,.1);
}
body.page-template-tpl-ceny .ok-ceny-calc__head-title{ margin:0; font-size:20px; font-weight:800; color:#ffffff; }
body.page-template-tpl-ceny .ok-ceny-calc__head-sub{ margin:3px 0 0; font-size:13.5px; color:#9fb4d8; }

body.page-template-tpl-ceny .ok-ceny-calc__form{ display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:22px; }
body.page-template-tpl-ceny .ok-ceny-calc__field{ display:flex; flex-direction:column; gap:6px; }
body.page-template-tpl-ceny .ok-ceny-calc__field--half{ grid-column:auto; }
body.page-template-tpl-ceny .ok-ceny-calc__field:not(.ok-ceny-calc__field--half){ grid-column:1/-1; }
body.page-template-tpl-ceny .ok-ceny-calc__label{ font-size:13px; font-weight:700; color:#dbe2ee; }
body.page-template-tpl-ceny .ok-ceny-calc__field select{
	width:100%; height:48px; background:#ffffff; border:1.5px solid #dfe5ee; border-radius:8px;
	padding:0 14px; font-size:16px; color:#1d2433; outline:none; cursor:pointer;
}
/* ★ №21 §1.1: канон TT1 на CTA калькулятора — иначе текст #d1e4dd мятный (контраст 3,55). :hover не нужен (TT1 исключает :hover). */
body.page-template-tpl-ceny .ok-ceny-calc__cta:not(.has-background):not(.has-text-color){
	grid-column:1/-1; height:48px; background:#e0223a; color:#ffffff; border:none; border-radius:8px;
	font-size:15.5px; font-weight:700; cursor:pointer;
}
body.page-template-tpl-ceny .ok-ceny-calc__cta:hover{ background:#c81a30; }
body.page-template-tpl-ceny .ok-ceny-calc__cta--done:not(.has-background):not(.has-text-color){ background:#178048; } /* ★№21 §1.1 (критик): #1f9d55 давал белый текст 3,49:1 <4.5; #178048 → ~4,98 (белый читаем) */
body.page-template-tpl-ceny .ok-ceny-calc__note{ margin:0; font-size:13px; color:#9fb4d8; line-height:1.55; }
body.page-template-tpl-ceny .ok-ceny-calc__note a{ color:#ffffff; font-weight:700; }

/* Правая колонка — результат/подсказка */
body.page-template-tpl-ceny .ok-ceny-calc__result{
	position:relative; background:#0b1f3f; padding:32px 36px; display:flex; flex-direction:column;
}
body.page-template-tpl-ceny .ok-ceny-calc__result-label{ font-size:14px; color:#9fb4d8; }
body.page-template-tpl-ceny .ok-ceny-calc__result-title{ margin:12px 0 8px; font-size:24px; font-weight:800; color:#ffffff; line-height:1.3; }
body.page-template-tpl-ceny .ok-ceny-calc__result-sub{ margin:0; color:#cfd6e2; font-size:14.5px; line-height:1.6; }
body.page-template-tpl-ceny .ok-ceny-calc__result-list{ list-style:none; margin:20px 0 0; padding:0; display:flex; flex-direction:column; gap:12px; }
body.page-template-tpl-ceny .ok-ceny-calc__result-item{ display:flex; gap:12px; align-items:flex-start; font-size:14px; color:#e6ecf7; line-height:1.5; }
body.page-template-tpl-ceny .ok-ceny-calc__result-item b{ color:#ffffff; font-weight:800; }
body.page-template-tpl-ceny .ok-ceny-calc__result-d{ color:#aebbd0; font-size:12.5px; }
body.page-template-tpl-ceny .ok-ceny-calc__result-check{
	flex:0 0 auto; width:20px; height:20px; border-radius:999px; background:rgba(63,208,122,.18);
	color:#3fd07a; font-size:12px; font-weight:800; display:flex; align-items:center; justify-content:center; margin-top:1px;
}
body.page-template-tpl-ceny .ok-ceny-calc__result-trust{
	margin-top:auto; display:flex; gap:11px; align-items:flex-start;
	background:rgba(255,255,255,.07); border:1px solid rgba(255,255,255,.14); border-radius:10px;
	padding:14px 16px; color:#cfd6e2; font-size:13px; line-height:1.55;
}

/* Mobile 390: карточка 1 колонка — форма сверху, результат ниже */
@media (max-width: 600px){
	body.page-template-tpl-ceny .ok-ceny-calc{ padding:44px 0 48px; }
	body.page-template-tpl-ceny .ok-ceny-calc .ok-ceny-container{ padding:0 16px; }
	body.page-template-tpl-ceny .ok-ceny-h2{ font-size:23px; }
	body.page-template-tpl-ceny .ok-ceny-calc__card{ grid-template-columns:1fr; }
	body.page-template-tpl-ceny .ok-ceny-calc__form-col,
	body.page-template-tpl-ceny .ok-ceny-calc__result{ padding:24px 20px; }
	body.page-template-tpl-ceny .ok-ceny-calc__form{ grid-template-columns:1fr; }
	body.page-template-tpl-ceny .ok-ceny-calc__field:not(.ok-ceny-calc__field--half){ grid-column:auto; }
	body.page-template-tpl-ceny .ok-ceny-calc__cta{ width:100%; }
}

/* ══ ФИНАЛЬНАЯ ФОРМА «Рассчитаем стоимость по фото» (макет 19, блок 11) ════
   Адаптер общей CF7-формы (id final_form_id / 4525) в макетной обёртке:
   тёмная панель слева + форма справа (1fr / 1.1fr). Стили scoped. */

body.page-template-tpl-ceny .ok-ceny-final{ background:#ffffff; padding:72px 0 84px; }
body.page-template-tpl-ceny .ok-ceny-final .ok-ceny-container{ max-width:1280px; margin:0 auto; padding:0 32px; }
body.page-template-tpl-ceny .ok-ceny-final__card{
	display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.1fr); gap:0;
	border-radius:16px; overflow:hidden; box-shadow:0 20px 50px rgba(20,40,80,.10);
}
body.page-template-tpl-ceny .ok-ceny-final__panel{ background:#1d2330; padding:40px 42px; }
body.page-template-tpl-ceny .ok-ceny-final__title{
	margin:0 0 14px; font-size:29px; font-weight:800; color:#ffffff; line-height:1.25; letter-spacing:-.01em;
	background:linear-gradient(#e0223a,#e0223a) left bottom/44px 3px no-repeat; padding-bottom:14px;
}
body.page-template-tpl-ceny .ok-ceny-final__sub{ margin:0 0 22px; font-size:15px; color:#cfd6e2; line-height:1.6; }
body.page-template-tpl-ceny .ok-ceny-final__points{ display:flex; flex-direction:column; gap:10px; margin-bottom:26px; }
body.page-template-tpl-ceny .ok-ceny-final__point{ display:flex; gap:10px; align-items:center; font-size:14.5px; color:#e6ecf7; }
body.page-template-tpl-ceny .ok-ceny-final__check{ color:#3fd07a; font-weight:800; }
body.page-template-tpl-ceny .ok-ceny-final__phone{ display:block; color:#ffffff; font-size:20px; font-weight:800; text-decoration:none; }
body.page-template-tpl-ceny .ok-ceny-final__phone + .ok-ceny-final__phone{ margin-top:4px; }
body.page-template-tpl-ceny .ok-ceny-final__phone:hover{ color:#7fa6ef; }
body.page-template-tpl-ceny .ok-ceny-final__formwrap{ background:#ffffff; padding:36px 40px; }

@media (max-width: 600px){
	body.page-template-tpl-ceny .ok-ceny-final{ padding:44px 0 48px; }
	body.page-template-tpl-ceny .ok-ceny-final .ok-ceny-container{ padding:0 16px; }
	body.page-template-tpl-ceny .ok-ceny-final__card{ grid-template-columns:1fr; }
	body.page-template-tpl-ceny .ok-ceny-final__panel,
	body.page-template-tpl-ceny .ok-ceny-final__formwrap{ padding:28px 20px; }
	/* MOBM-09 (критик-паттерн MOBM-08): тач-цель телефонов финальной формы до 44 (было 31h).
	   Блочные <a> стекаются — наложения нет. Без !important. */
	body.page-template-tpl-ceny .ok-ceny-final__phone{ min-height:44px; display:flex; align-items:center; }
}

body.page-template-tpl-ceny .ok-ceny-faq__list{
	max-width:none;
	width:100%;
}
@media (max-width:600px){
	body.page-template-tpl-ceny .ok-ceny-faq__container{ padding:0 16px; }
}

/* CENY-CODEX-REPAIR · 2026-08-01
   Исправление после ручной визуальной приёмки: таблицы как на зелёном скрине, FAQ без inline и без битой кодировки. */
body.page-template-tpl-ceny .ok-ceny-price__table-wrap{
	border:1px solid #dfe6f0;
	border-radius:12px;
	box-shadow:0 14px 36px rgba(20,40,80,.06);
	background:#fff;
	overflow:hidden;
}
body.page-template-tpl-ceny .ok-ceny-price__table{
	border-collapse:collapse;
	font-size:14.5px;
	line-height:1.45;
}
body.page-template-tpl-ceny .ok-ceny-price__table thead tr,
body.page-template-tpl-ceny .ok-ceny-price__table th{
	background:#eef3f9;
}
body.page-template-tpl-ceny .ok-ceny-price__table th{
	padding:15px 18px;
	border-bottom:1px solid #d8e2f0;
	border-right:1px solid #dbe4f0;
	color:#123d87;
	font-weight:800;
}
body.page-template-tpl-ceny .ok-ceny-price__table th:last-child{ border-right:0; }
body.page-template-tpl-ceny .ok-ceny-price__row{
	background:#fff;
	border-bottom:1px solid #e1e8f2;
}
body.page-template-tpl-ceny .ok-ceny-price__row:nth-child(even){ background:#f5f8fd; }
body.page-template-tpl-ceny .ok-ceny-price__row--popular{
	background:#eef3fc;
	border-bottom:1px solid #d8e2f0;
}
body.page-template-tpl-ceny .ok-ceny-price__row:last-child{ border-bottom:0; }
body.page-template-tpl-ceny .ok-ceny-price__cell{
	padding:15px 18px;
	border-right:1px solid #dbe4f0;
	border-bottom:0;
}
body.page-template-tpl-ceny .ok-ceny-price__cell:last-child{ border-right:0; }
body.page-template-tpl-ceny .ok-ceny-price__cell--work{
	color:#123d87;
	font-weight:700;
}
body.page-template-tpl-ceny .ok-ceny-price__row--popular .ok-ceny-price__cell--work{ font-weight:800; }
body.page-template-tpl-ceny .ok-ceny-price__cell--price{
	color:#123d87;
	font-weight:800;
	white-space:nowrap;
}
body.page-template-tpl-ceny .ok-ceny-price__cell--includes{
	color:#526173;
	font-weight:400;
}
body.page-template-tpl-ceny .ok-ceny-price__badge{
	display:inline-flex;
	align-items:center;
	vertical-align:middle;
	margin-left:8px;
	padding:3px 8px;
	border-radius:999px;
	background:#e0223a;
	color:#fff;
	font-size:10px;
	font-weight:800;
	line-height:1;
	letter-spacing:.04em;
	text-transform:uppercase;
	white-space:nowrap;
}

body.page-template-tpl-ceny .ok-ceny-faq{
	background:#f5f8fd;
	padding:72px 0;
}
body.page-template-tpl-ceny .ok-ceny-faq__container{
	max-width:1280px;
	margin:0 auto;
	padding:0 32px;
	box-sizing:border-box;
}
body.page-template-tpl-ceny .ok-ceny-faq__title{
	margin:0 0 30px;
	font-size:34px;
	font-weight:800;
	color:#123d87;
	line-height:1.2;
	letter-spacing:-.01em;
	background:linear-gradient(#e0223a,#e0223a) left bottom/44px 3px no-repeat;
	padding-bottom:14px;
}
body.page-template-tpl-ceny .ok-ceny-faq__list{
	width:100%;
	max-width:none;
}
body.page-template-tpl-ceny .ok-ceny-faq__item{
	background:#fff;
	border:1px solid #e8ecf2;
	border-radius:10px;
	padding:0 22px;
	margin-bottom:10px;
}
body.page-template-tpl-ceny .ok-ceny-faq__item:last-child{ margin-bottom:0; }
body.page-template-tpl-ceny .ok-ceny-faq__question{
	display:flex;
	flex-direction:row;
	justify-content:flex-start;
	align-items:center;
	gap:14px;
	padding:18px 0;
	cursor:pointer;
	list-style:none;
}
body.page-template-tpl-ceny .ok-ceny-faq__question::-webkit-details-marker{ display:none; }
body.page-template-tpl-ceny .ok-ceny-faq__icon{
	flex:0 0 auto;
	display:flex;
	align-items:center;
	justify-content:center;
	width:28px;
	height:28px;
	border-radius:999px;
	background:#eef3fc;
	color:#1c5bd6;
	font-size:18px;
	font-weight:800;
	line-height:1;
}
body.page-template-tpl-ceny .ok-ceny-faq__question-text{
	flex:1;
	min-width:0;
	font-size:16.5px;
	font-weight:700;
	color:#123d87;
}
body.page-template-tpl-ceny .ok-ceny-faq__answer{
	margin:0;
	padding:0 0 18px;
	font-size:15px;
	color:#526173;
	line-height:1.6;
}
@media (max-width:600px){
	body.page-template-tpl-ceny .ok-ceny-price__table-wrap{ border-radius:12px; }
	body.page-template-tpl-ceny .ok-ceny-price__table{ min-width:660px; font-size:13px; }
	body.page-template-tpl-ceny .ok-ceny-price__table th,
	body.page-template-tpl-ceny .ok-ceny-price__cell{ padding:12px 14px; }
	body.page-template-tpl-ceny .ok-ceny-faq{ padding:44px 0 48px; }
	body.page-template-tpl-ceny .ok-ceny-faq__container{ padding:0 16px; }
	body.page-template-tpl-ceny .ok-ceny-faq__title{ font-size:23px; margin-bottom:14px; }
	body.page-template-tpl-ceny .ok-ceny-faq__item{ margin-bottom:8px; padding:0 16px; }
	body.page-template-tpl-ceny .ok-ceny-faq__question{ justify-content:space-between; gap:12px; padding:15px 0; }
	body.page-template-tpl-ceny .ok-ceny-faq__icon{ order:2; width:24px; height:24px; font-size:16px; }
	body.page-template-tpl-ceny .ok-ceny-faq__question-text{ font-size:14.5px; }
	body.page-template-tpl-ceny .ok-ceny-faq__answer{ padding:0 0 15px; font-size:13.5px; }
}

/* CENY-CODEX-TABLE-VISUAL-REPAIR-2 · 2026-08-01
   Убираем синюю spreadsheet-сетку: как на визуальном эталоне владельца, не как в слепом HTML-замере. */
body.page-template-tpl-ceny .ok-ceny-price__table{
	border-collapse:separate;
	border-spacing:0;
}
body.page-template-tpl-ceny .ok-ceny-price__table-wrap{
	border-color:#dfe6f0;
	border-radius:12px;
	box-shadow:0 14px 36px rgba(20,40,80,.06);
}
body.page-template-tpl-ceny .ok-ceny-price__table th,
body.page-template-tpl-ceny .ok-ceny-price__cell{
	border-color:#dbe4f0;
}
body.page-template-tpl-ceny .ok-ceny-price__table th{
	border-bottom:1px solid #d8e2f0;
}
body.page-template-tpl-ceny .ok-ceny-price__row{
	border-bottom:0;
}
body.page-template-tpl-ceny .ok-ceny-price__cell{
	border-bottom:1px solid #e1e8f2;
}
body.page-template-tpl-ceny .ok-ceny-price__row:last-child .ok-ceny-price__cell{
	border-bottom:0;
}
body.page-template-tpl-ceny .ok-ceny-price__row--popular{
	border-bottom:0;
}
body.page-template-tpl-ceny .ok-ceny-price__row--popular .ok-ceny-price__cell{
	border-right-color:#dbe4f0;
	border-bottom-color:#d8e2f0;
}
body.page-template-tpl-ceny .ok-ceny-price__row--popular .ok-ceny-price__cell--work{
	border-right-color:#dbe4f0;
}
body.page-template-tpl-ceny .ok-ceny-price__table th:first-child{ border-top-left-radius:11px; }
body.page-template-tpl-ceny .ok-ceny-price__table th:last-child{ border-top-right-radius:11px; }
body.page-template-tpl-ceny .ok-ceny-price__row:last-child .ok-ceny-price__cell:first-child{ border-bottom-left-radius:11px; }
body.page-template-tpl-ceny .ok-ceny-price__row:last-child .ok-ceny-price__cell:last-child{ border-bottom-right-radius:11px; }

/* ★ FIX-SEO-TYPO · 2026-08-02 · SEO-текст /ceny/ переведён на ОБЩУЮ систему rich-text сайта:
   секция .okna-seo-text + тело .okna-st-body (glavnaya.css). Локальная типографика .ok-ceny-seo__content
   (таблицы/цитата/список с зелёной галкой) УДАЛЕНА — гайд «05 Гайд по вёрстке» источник правды.
   Ниже — только scoped-layout секции цен (отступы/контейнер), без переопределения типографики. */
body.page-template-tpl-ceny .okna-seo-text--ceny{
	background:#ffffff;
	padding:72px 0;
	margin:0;
}
body.page-template-tpl-ceny .okna-seo-text--ceny .okna-wrap{
	max-width:1280px;
	margin:0 auto;
	padding:0 32px;
	box-sizing:border-box;
}
/* Заголовок секции — по макету 19 (H2 секции 34/800 #123d87, красная линия 44×3) */
body.page-template-tpl-ceny .okna-seo-text--ceny h2{
	margin:0 0 18px;
	font-size:34px;
	font-weight:800;
	color:#123d87;
	line-height:1.2;
	letter-spacing:-.01em;
	background:linear-gradient(#e0223a,#e0223a) left bottom/44px 3px no-repeat;
	padding-bottom:14px;
}
body.page-template-tpl-ceny .okna-seo-text--ceny h2::after{ display:none; }
@media (max-width:768px){
	body.page-template-tpl-ceny .okna-seo-text--ceny{ padding:44px 0 48px; }
	body.page-template-tpl-ceny .okna-seo-text--ceny .okna-wrap{ padding:0 16px; }
	body.page-template-tpl-ceny .okna-seo-text--ceny h2{ font-size:23px; margin-bottom:16px; }
}

/* ══ CENY-STYLES-01 · РАСКЛАДКА ТРЁХ БЛОКОВ СТРАНИЦЫ ЦЕН ═══════════════════
   ГДЕ ПРАВИЛ ДЕЙСТВИТЕЛЬНО НЕ БЫЛО. Перебор по всем 212 листам wp-content
   (селекторы, не файлы; и подстрокой, и целым идентификатором) дал ноль
   только у `.ok-ceny-scope`, `.ok-ceny-factors` и `.ok-ceny-b2b__left`.
   У остальных десяти классов b2b правила в этом же листе уже были: сама
   секция, `__wrap`, `__right`, `__title`, `__accent`, `__text`, `__cta`,
   `__stat`, `__num`, `__label`. Значит для b2b это дополнение к готовой
   раскладке, а не написание с нуля, и прежний заголовок «правил не было
   вовсе» был неверен для этого блока.

   ★ ЧТО НА САМОМ ДЕЛЕ ДЕРЖИТ РАСКЛАДКУ ЭТИХ ДВУХ БЛОКОВ — ИНЛАЙН.
   `blocks/ceny-work-scope.php` и `blocks/ceny-price-factors.php` печатают
   `style="display:grid; grid-template-columns:repeat(5,1fr); gap:16px"` и
   `repeat(4,1fr)` прямо в атрибуте. Атрибут стиля перебивает ЛЮБОЙ селектор
   без флага, поэтому счётчик колонок из листа недостижим в принципе, а
   разметка этому пакету запрещена. Отсюда — способ ниже: трогаем только те
   свойства, которых в атрибуте НЕТ (`min-width`, `grid-column`,
   `overflow-wrap`), и ни одного нового `!important`.

   ПОЧЕМУ СОДЕРЖИМОЕ БЫЛО НЕДОСТИЖИМО. `1fr` = `minmax(auto,1fr)`, то есть у
   трека минимум по содержимому. Пять таких минимумов дают 983,6px, что не
   влезает в контейнер 311px при 375, и треки замирают на min-content —
   одинаковые до знака на 375, 390, 414 и 768 (замер «до»). Карточки уезжают
   вправо до 1015,6px (вынос 640,6), а `.ok-ceny-page{overflow-x:clip}` их
   срезает. Прокручиваемого предка нет: 31 узел не виден и не достижим ничем.

   ВЕЛИЧИНЫ — ПОИМЁННО, С УРОВНЕМ СИСТЕМЫ. Своего вида здесь не изобретено:
   · `min-width:0` детям сетки — уровень дизайн-системы, профилактика
     распирания: glavnaya.css `.glavnaya-v4 .okna-pf2__factors > *{min-width:0}`
     и usluga-view.css §5.7 `.okna-pf2__factor,.okna-pf2__step{min-width:0}`.
     Там же канон трека — `repeat(N, minmax(0,1fr))` (usluga-view.css §5.7,
     ok-about.css `.ok-about-tl`, и сам `.ok-ceny-b2b__wrap` ниже по файлу).
     Инлайн-треки править нельзя, но `min-width:0` на детях даёт ровно тот же
     минимум трека — это тот же канон, внесённый со стороны, где он достижим.
   · `overflow-wrap:anywhere` — ТОЛЬКО В ПРОЗЕ, НЕ В ЗАГОЛОВКАХ. Уровень
     дизайн-системы: glavnaya.css `.glavnaya-v4 .gv-card p …` и
     `.gv-proc2__title`. У заголовков карточек он был и СНЯТ: на пяти в ряд
     до 1205 он резал слова посреди себя — «Гермети/зация» при 1025
     (содержимое 77px против слова 111,3px), «Подготов/ка» и «Демонта/ж».
     Недостижимость менялась на нечитаемость. Заголовкам оставлена только
     `min-width:0`, а сама полоса закрыта ступенью лестницы (ниже).
   · Контрольная точка 768px — уровень сетки дизайн-системы; в теме 104
     правила; для `.ok-ceny-factors` это ровно ступень близнеца.
   · Контрольная точка 1024px — уровень токенов: ok-tokens.css
     `--ok-container-pad-tablet:24px` (брейкпоинт ≤1024); в теме 75 правил.
     Оставлена только у `.ok-ceny-factors`, где совпадает с близнецом.
   · Счётчики колонок 2 и 1 — ступени лестницы дизайн-системы у прямых
     близнецов: `.okna-pf2__steps` (4 карточки) 4→2 при ≤1024 → 1 при ≤768;
     `.gv-proc` (5 карточек, gap 16 — тот же блок «этапы») 5→2 при ≤1024 →
     1 при ≤600. Оговорка: `.gv-proc` в glavnaya.css помечен как
     неиспользуемый, поэтому он взят как образец лестницы, а не как живой
     эталон.

   ★ ПРО ПРОМЕЖУТОЧНЫЕ СТУПЕНИ — ПО ЗАМЕРУ, А НЕ ПО РАССУЖДЕНИЮ.
   Прежняя формулировка «3-up и 2-up недостижимы» была неверна и снята.
   · 2-up ДОСТИЖИМА: `grid-column` в инлайн-атрибуте отсутствует, поэтому
     `span 2` + `:last-child{grid-column:1/-1}` встают без флага. Замер
     подтверждает: при 1025 карточки 368,8 (два трека и промежуток), пятая
     945,98 на всю ширину. НЕ ВЗЯТА по числу: пять треков на два в ряд не
     делятся, пятый трек в полных рядах остаётся пустым — дыра справа
     192,4px при 1025 и 223,4px при 1180, то есть 20,3% ширины сетки на
     каждом полном ряду. Ровного ряда `span 2` здесь не даёт.
   · 3-up НЕДОСТИЖИМА в буквальном смысле: `span` принимает только целое
     число треков, а пять треков на три равные колонки не делятся.
   Поэтому взята 1-up — единственная ступень, дающая ровный ряд. Ступени
   3-up и 2-up без дыры требуют правки счётчика треков в
   `blocks/ceny-work-scope.php`, то есть отдельного пакета на разметку.

   ★ ТОЧКА ВКЛЮЧЕНИЯ 1-up ДЛЯ «ЧТО ВХОДИТ» — 1205, И ЭТО ЗАМЕР, А НЕ ТОКЕН.
   Прежняя точка ≤1024 была взята «из системы», но система тут ни при чём:
   ни один близнец не переключается на 1-up при 1024. Число выведено из
   геометрии самого блока. Карточке нужно 44px бейджа + 13px промежутка +
   40px внутренних полей + 2px рамки = 99px обвязки, значит заголовку
   остаётся `трек − 101,6`. Самое длинное слово блока — «Герметизация»,
   111,3px при 15,5/800. Отсюда минимум трека 212,9px, а доля `1fr`
   догоняет его только при контейнере 1128,5px, то есть при окне 1206.
   Замер по шагам: трек 176,4 при 1025 · 191,4 при 1100 · 199,4 при 1140 ·
   207,4 при 1180 · 212,6 при 1206. До 1206 пять в ряд физически не держат
   свой же заголовок, поэтому там один в ряд.
   ★ ЗАВИСИМОСТЬ, КОТОРУЮ НАДО ЗНАТЬ: 1205 держится на длине слова
   «Герметизация» из массива `$steps` в `blocks/ceny-work-scope.php`. Более
   длинный заголовок сдвигает точку вверх. Отказ мягкий: `overflow-wrap`
   у заголовков снят (см. ниже), поэтому слово не рвётся посреди себя, а
   выступает на считанные пиксели внутрь собственных полей карточки.

   ★ ЧЕГО ЗДЕСЬ НЕТ И ПОЧЕМУ. Кегли, цвета, радиусы, отступы секций и padding
   контейнера этих двух блоков тоже заданы инлайном и от дизайн-системы
   отклоняются (H2 34px без мобильной ступени `--ok-fs-h2-mobile:23px`;
   padding контейнера 32px на всех ширинах вместо
   `--ok-container-pad-mobile:16px`; секция 72px вместо
   `--ok-section-space-mobile:44px`). Из листа они недостижимы по той же
   причине. Вынесено вопросом, не изобретено.

   Отдельный лист не заведён намеренно: `ok-ceny.css` уже обслуживает эту
   страницу, уже подключён (functions.php, приоритет 170, версия по filemtime),
   и предмет тот же. Новый файл дал бы лишний запрос и вторую точку в каскаде
   без выигрыша, поэтому `functions.php` не тронут.
   ────────────────────────────────────────────────────────────────────────── */

/* 1 · Профилактика распирания: ребёнок сетки не задаёт треку минимум по
      содержимому. Свойство `min-width` в атрибутах стиля блоков отсутствует —
      правило применяется без флага.
      ★ ЭТО СТРАХОВКА, А НЕ РАБОТАЮЩЕЕ СЕЙЧАС ПРАВИЛО. При нынешнем составе
      блоков лестница ниже уже держит сетку без него: замер даёт одинаковые
      треки на всех четырнадцати проверенных ширинах и с ним, и без него.
      Оно оставлено, потому что задаёт мягкий отказ при более длинном тексте:
      трек не растёт за контейнер, слово выступает внутрь полей карточки, а
      не уносит карточку под `overflow-x:clip` страницы.
      ★ `.ok-ceny-b2b__left` и `.ok-ceny-b2b__right` из списка УБРАНЫ: их
      родитель `.ok-ceny-b2b__wrap` объявлен как
      `minmax(0,1.15fr) minmax(0,1fr)`, минимум трека там уже ноль, и эти
      два объявления были мёртвыми. `.ok-ceny-b2b__stat` оставлен: его
      родитель `.ok-ceny-b2b__right` объявлен как `1fr 1fr` — без `minmax`. */
body.page-template-tpl-ceny .ok-ceny-scope article,
body.page-template-tpl-ceny .ok-ceny-factors article,
body.page-template-tpl-ceny .ok-ceny-b2b__stat{
	min-width: 0;
}

/* 1b · Внутренний ряд «бейдж + заголовок»: бейдж жёсткий (flex:0 0 auto из
       атрибута), заголовок обязан сжиматься, иначе он распирает карточку.
       `overflow-wrap` здесь НЕТ намеренно — см. разбор выше. */
body.page-template-tpl-ceny .ok-ceny-scope article h4,
body.page-template-tpl-ceny .ok-ceny-factors article h4{
	min-width: 0;
	/* P-ОСЬ (08.08): перенос инлайна заголовков шагов/факторов В ЛИСТ — значения ТЕ ЖЕ (вид не меняется). Кегль/вес 15.5px/800 вынуты из разметки, чтобы лист туда достал; приведение к канону — предмет P-КЕГЛЬ. */
	margin: 0; font-size: 15.5px; font-weight: 800; color: #123d87;
}
body.page-template-tpl-ceny .ok-ceny-scope article h4{ line-height: 1.2; }
body.page-template-tpl-ceny .ok-ceny-factors article h4{ line-height: 1.25; }

/* 1c · Длинные неразрывные строки переносятся ВНУТРИ карточки, а не наружу. */
body.page-template-tpl-ceny .ok-ceny-scope article p,
body.page-template-tpl-ceny .ok-ceny-factors article p,
body.page-template-tpl-ceny .ok-ceny-b2b__title,
body.page-template-tpl-ceny .ok-ceny-b2b__text,
body.page-template-tpl-ceny .ok-ceny-b2b__num,
body.page-template-tpl-ceny .ok-ceny-b2b__label{
	overflow-wrap: anywhere;
}

/* 2 · Лестница колонок. Счётчик треков задан инлайном и недостижим, поэтому
      ступень набирается через `grid-column` у карточки — свойства, которого в
      атрибуте нет. `1 / -1` = карточка на всю ширину сетки вместе с
      промежутками; `span 2` на четырёх треках = ровно два в ряд. */

/* 2a · «Что входит», пять карточек. Один в ряд до 1205 включительно —
        разбор точки и отвергнутая 2-up описаны выше. */
@media (max-width: 1205px){
	body.page-template-tpl-ceny .ok-ceny-scope article{ grid-column: 1 / -1; }
}

/* 2b · «От чего зависит цена», четыре карточки: 4 → 2 при ≤1024 → 1 при ≤768,
        ровно лестница близнеца `.okna-pf2__steps`.
        ★ ЯВНАЯ ЗАВИСИМОСТЬ ОТ СОСТАВА: `span 2` даёт ровный ряд только при
        ЧЁТНОМ числе карточек, а состав задаётся массивом `$factors` в
        `blocks/ceny-price-factors.php` и в CSS ничем не закреплён. Пятая
        карточка сделала бы ряд рваным, поэтому нечётный хвост страхуется
        отдельной строкой: последняя карточка, если она нечётная по счёту,
        занимает ряд целиком. */
@media (max-width: 1024px){
	body.page-template-tpl-ceny .ok-ceny-factors article{ grid-column: span 2; }
	body.page-template-tpl-ceny .ok-ceny-factors article:last-child:nth-child(odd){ grid-column: 1 / -1; }
}
@media (max-width: 768px){
	body.page-template-tpl-ceny .ok-ceny-factors article{ grid-column: 1 / -1; }
}

/* 3 · SEO-таблица страницы цен: восстановление замысла глобального правила.
      glavnaya.css:1229 включает таблице `display:block; overflow-x:auto` при
      ≤600, но `min-width:480px` из glavnaya.css:1201 остаётся в силе. Коробка
      таблицы 480px в контейнере 343px — прокрутка не работает, потому что
      прокручивать нечего: за край уезжает сама коробка, а прокручиваемого
      предка нет, `.ok-ceny-page{overflow-x:clip}` режет выше. Замер «до»:
      11 узлов таблицы за краем на 375, 390 и 414, ни у одного нет
      прокручиваемого предка.
      Снимаем ТОЛЬКО минимальную ширину и только в скоупе страницы цен —
      прецедент такого скоупа лежит двадцатью строками выше, где эта же
      секция `.okna-seo-text--ceny` уже переопределена. Прокрутка из
      глобального правила остаётся нетронутой и работает как страховка.
      ★ ТОТ ЖЕ ДЕФЕКТ ЕСТЬ У ВСЕХ СТРАНИЦ С ЭТИМ БЛОКОМ — правка `min-width`
      в glavnaya.css сняла бы его разом, но у того листа свой владелец и свой
      пакет, поэтому здесь только страница цен. Вынесено предложением. */
@media (max-width: 600px){
	body.page-template-tpl-ceny .okna-seo-text--ceny .okna-st-body table{ min-width: 0; }
}

/* MOBM-09 (критик ★★): ПРАЙС на мобилке = карточки-стек по макету #19 (не h-scroll таблица).
   «Управление таблицей в админке» — про данные/источник, не про мобильную ПОДАЧУ; на 360px
   min-width:660 (:474/:776) прятал «Цену» и «Что входит» за правым краем (деньги — плохо).
   Перенос готового паттерна .ok-ceny__wrap (:148-232, мёртвый класс) на ЖИВОЙ .ok-ceny-price__*.
   Данные/суммы/содержимое НЕ трогаются — правка чисто презентационная. Блок в конце → перебивает
   min-width:660 порядком. Без нового !important. */
@media (max-width: 600px){
	body.page-template-tpl-ceny .ok-ceny-price__table-scroll{ overflow-x: visible; }
	body.page-template-tpl-ceny .ok-ceny-price__table,
	body.page-template-tpl-ceny .ok-ceny-price__table tbody{ display: block; min-width: 0; }
	body.page-template-tpl-ceny .ok-ceny-price__table thead{ display: none; }
	/* grid детерминированнее flex-wrap: имя | цена на строке 1, «что входит» спанит обе (строка 2).
	   Базовый width ячеек-таблицы grid-раскладке не мешает (grid-column задаёт трек). */
	body.page-template-tpl-ceny .ok-ceny-price__row{
		display: grid; grid-template-columns: 1fr auto; column-gap: 10px; row-gap: 5px; align-items: baseline;
		border: 1px solid #e8ecf2; border-radius: 12px; padding: 14px 15px; margin-bottom: 10px; background: #fff;
	}
	body.page-template-tpl-ceny .ok-ceny-price__row:nth-child(even),
	body.page-template-tpl-ceny .ok-ceny-price__row:nth-child(odd){ background: #fff; }
	body.page-template-tpl-ceny .ok-ceny-price__cell{ display: block; padding: 0; border: 0; width: auto; }
	body.page-template-tpl-ceny .ok-ceny-price__cell--work{ grid-column: 1; min-width: 0; font-size: 14px; font-weight: 800; color: #123d87; }
	body.page-template-tpl-ceny .ok-ceny-price__cell--price{ grid-column: 2; justify-self: end; white-space: nowrap; font-size: 15px; font-weight: 800; color: #123d87; }
	body.page-template-tpl-ceny .ok-ceny-price__cell--includes{ grid-column: 1 / -1; font-size: 12.5px; line-height: 1.45; color: #8a94a6; }
}
/* [HEAD-00] Перенос inline-стиля H3 «От чего зависит цена работ» (ceny-price-factors) в лист.
   Набор ≠ калькулятора (нет черты/разрядки, кегль 22, отступ 24) → своё правило, контекстом (класса у H3 нет).
   Мобильная ступень — общий кап (h3 19), НЕ дублируется. Вид не меняется. */
body.page-template-tpl-ceny .ok-ceny-factors h3{ margin:0 0 24px; font-size:22px; font-weight:800; color:#123d87; }

/* ============================================================================
   ★ §3 (26.08, ночной пакет №2): ЦВЕТА КНОПОК ЦЕН — КОРЕНЬ = СПЕЦИФИЧНОСТЬ, не переменная.
   Родительская tt1 style.css держит: utton:not(:hover):not(:active):not(.has-background){
   background:var(--global--color-primary)} — специфичность (0,3,1). Наши литералы
   .ok-ceny-calc__cta (#e0223a) и .ok-ceny-price__chip (#eef1f6) объявлены при (0,2,1) и
   ПРОИГРЫВАЛИ → браузер отдавал графит родителя. Гипотеза «переменная не разрешается» неверна:
   литерал верен, вопрос был в весе селектора. Поднимаем ЧЕРЕЗ КОНТЕЙНЕР до (0,4,1) > (0,3,1) —
   без !important, без перекраски новым литералом (значения те же, что уже объявлены выше). */
/* ★ №21 §1.1: 4-цепочка через контейнер СНЯТА — поднимала только background, текст оставался
   мятным TT1 (регресс, чип 1,17 / CTA 3,55). Заменена каноном :not(.has-background):not(.has-text-color)
   на базовых правилах выше (бьёт TT1 по фону И цвету сразу). Комментарий §3 выше — исторический. */
/* ★ §3.1 (26.08): «Заполните поля слева/выше» — по факту раскладки калькулятора.
   Десктоп: форма слева → «слева» (база). ≤768: форма сверху → «выше». Десктоп не тронут. */
body.page-template-tpl-ceny .ok-ceny-calc__where--mob{ display:none; }
@media (max-width:768px){
  body.page-template-tpl-ceny .ok-ceny-calc__where--desk{ display:none; }
  body.page-template-tpl-ceny .ok-ceny-calc__where--mob{ display:inline; }
}