/* ok-landing.css — посадочные каталога. Пакет W2-P03B.
 *
 * ПОДКЛЮЧЕНИЕ: functions.php, приоритет 160, гейт is_singular('seo_filter').
 *
 * ══ ДВА КОНТУРА ОТБОРА, И ОНИ РАЗНЫЕ ═════════════════════════════════════
 *
 *   1. `body.single-seo_filter` — покрывает ВСЕ 754 посадочные. Это гейт
 *      подключения: лист не должен доехать до услуги, каталога, главной.
 *   2. `.okna-usluga:not(.okna-sf)` — отделяет ПРЕДМЕТ пакета (728 страниц
 *      видов `model` и `brand`) от 26 страниц видов `glasstype`, `country`,
 *      `type`, `heating`, которые пакет назначил контролем регресса.
 *
 * Второй контур обязателен: без него правка меняла бы размеры на контрольных
 * поверхностях, а критерий 7 это запрещает прямо.
 *
 * ★ ОТКУДА ВЗЯЛСЯ `.okna-sf` И ПОЧЕМУ ЭТО НЕ ПРОТИВОРЕЧИТ ПАКЕТУ.
 * Пакет (§2) отверг `.okna-sf` — но именно как ГЕЙТ ПОДКЛЮЧЕНИЯ: класс висит
 * на 26 страницах из 754, и лист под ним не доехал бы до предмета вовсе.
 * Здесь он работает наоборот — через `:not()`, как разделитель ВНУТРИ листа.
 * Разметка это позволяет, проверено в шаблоне и живьём:
 *
 *     single-seo_filter.php:27   <div class="okna-usluga">           ← 728
 *     single-seo_filter.php:61   <div class="okna-usluga okna-sf">   ← 26
 *
 *     /katalog/stekla-ankai/            class="okna-usluga"
 *     /katalog/stekla-ankai-hff6100g/   class="okna-usluga"
 *     /katalog/stekla-belarus/          class="okna-usluga okna-sf"
 *     /katalog/bokovye-levye-stekla/    class="okna-usluga okna-sf"
 *
 * Все три узла ниже лежат ВНУТРИ этой обёртки: шаблон открывает её на строке
 * 27 и печатает внутрь и подбор, и чипы, и SEO-текст. Порядок в живом HTML:
 * `okna-usluga` → `okna-qp` → `okna-tags-group` → `okna-seo-text`.
 *
 * ══ ПОЧЕМУ ПРАВИЛА ВНУТРИ ТАЧ-МЕДИАЗАПРОСА ═══════════════════════════════
 *
 * Пакет ограничивает объём тач-конфигурациями (§1, D-32), и все замеры сняты
 * на 375, 600 и 768. Голое правило подняло бы чип и на десктопе — с 34,1px до
 * 44px, то есть +29% на 728 страницах, при том что на десктопе замера «до»
 * не существует и норма 44 там не требуется.
 *
 * ┌─ ★ АБЗАЦ НИЖЕ ОТМЕНЁН ПАКЕТОМ W2-FIX-04, 30.07.2026 ────────────────────
 * │ Оставлен зачёркнутым намеренно: без него читающий не поймёт, почему в
 * │ соседних листах ещё встречается граница 768 и откуда она взялась.
 * │ Действующее обоснование — в блоке прямо над медиазапросом.
 * │
 * │   «Граница 768px взята не на глаз: это тач-граница проекта, тем же
 * │    значением пользуется слой главной (`glavnaya.css:2412`).»
 * │
 * │ Что в нём оказалось неверным: 768 — граница РАСКЛАДКИ, а не тача.
 * │ Тач-границы у ширины нет вовсе, потому что тач — свойство устройства.
 * └─────────────────────────────────────────────────────────────────────────
 *
 * ══ ★ ЛИСТ БЫЛ ЕДИНСТВЕННЫМ ОТСТАВШИМ, А НЕ ПЕРВОПРОХОДЦЕМ ═══════════════
 *
 * Проверено грепом по `assets/*.css` в момент правки. Указательный гейт уже
 * стоял в ПЯТИ листах дорожки, и лишь этот держал ширину:
 *
 *   ok-catalog.css:74        (hover: none) and (pointer: coarse)
 *   ok-cart.css:69 и :288    то же
 *   ok-product.css:70        то же
 *   ok-search-results.css:37 то же
 *   ok-modal.css:279         то же
 *   ok-landing.css:161       ← был `max-width: 768px`, приведён к общему
 *
 * Значит правка не заводит новый порядок, а достраивает принятый. Тому, кто
 * усомнится в условии: спор идёт не с одним листом, а с шестью.
 *
 * ★ W5-P02 п.6 (D-209): формула шапки сведена к канону «И» —
 *   `ok-header.css:1511` был голый `@media (hover:none)` (БЕЗ `pointer`), переведён
 *   на `(hover:none) and (pointer:coarse)`. Единственное НЕ-канон место осталось:
 *   `header.php:100`  `matchMedia('(hover:none),(pointer:coarse)')` — ИЛИ,
 *   вне allowed-списка (§2, два файла: header.php и usluga.css). Позиция заведена.
 *   На устройстве с `hover:none` + `pointer:fine` (стилус, часть Android) шапка всё
 *   ещё уходит в тап-режим без нормы 44 — это задокументированное известное ограничение.
 *
 * ══ ★ РЕЕСТР ПЕРЕБИВАЕМОГО — ЧЕСТНЫЙ, ВКЛЮЧАЯ ФУНДАМЕНТ ══════════════════
 *
 * ★ АДРЕСА ПЕРЕСЧИТАНЫ 30.07.2026. Девять ссылок в `glavnaya.css` промахивались
 * на 38-40 строк: коммит `14c299e` удалил оттуда 61 строку мёртвых `.gv-guar__*`,
 * и номера съехали, а реестр — нет. Урок общий: номер строки в чужом файле
 * живёт до первой правки этого файла, селектор живёт дольше.
 *
 * Специфичность: у первых двух правил (0,4,1); у правил `.okna-tags-more` и
 * `.okna-st-btn` — (0,6,1), в них по шесть классов вместе с двумя `:not()`.
 * Кто соберётся перебивать — считать надо по (0,6,1), иначе контр-правило
 * проиграет и толкнёт в `!important`, запрещённый стоп-условием.
 *
 *   `.okna-tag`                     (0,1,0)  glavnaya.css:1139   базовая геометрия
 *   `.okna-catalog-nav .okna-tag`   (0,2,0)  glavnaya.css:1645   отступы в навигаторе
 *   `.okna-top-tags .okna-tag`      (0,2,0)  okna-mobile.css:287 ★ ТАЧ-МИНИМУМ 40px
 *   `.okna-qp .okna-qp__field`      (0,2,0)  mu-plugins/okna-tree-nav.php:638
 *   `.okna-st-btn`                  (0,1,0)  glavnaya.css:1165
 *   `.okna-tags-more`               (0,1,0)  glavnaya.css:1145
 *
 * ★ ТРЕТЬЕ МЕСТО, ГДЕ ЖИВЁТ ГЕОМЕТРИЯ `.okna-st-btn`. Ровно те же три
 * объявления для того же узла уже стоят в `usluga-view.css:429-432` — под
 * гейтом `body.page-template-tpl-usluga`. Настоящий лист делает третью
 * прописку одного разделяемого компонента: кнопка печатается ещё и из
 * `inc/org-blocks.php` (B2B), и из `inc/seo-text.php` для товаров и страниц.
 * После пакета она 44px на услугах и на 728 посадочных — и 21,7px на всём
 * остальном. Общего канона у неё нет, и этот пакет его не заводит: §2
 * разрешает два файла. Кандидат на переезд — `design.css`, где уже живёт
 * родственный `.okna-faq-morebtn`. Позиция заведена.
 *
 * ★ ТРЕТЬЯ СТРОКА — НАРУШЕНИЕ ОБЪЯВЛЕННОЙ ГРАНИЦЫ СЛОЁВ, И ЭТО СКАЗАНО ПРЯМО.
 * `glavnaya.css:2408-2411` объявляет: «тач-минимум даёт ОН (фундамент D0,
 * okna-mobile.css) — здесь НЕ дублируем и НЕ перебиваем». Настоящий лист
 * перебивает `min-height:40px` из D0 на 728 страницах.
 *
 * Сделано так не по выбору: §2 пакета разрешает ровно два файла — этот лист и
 * строку подключения. Править владельца тач-минимума нельзя. Поэтому правка
 * идёт здесь, а конфликт вынесен позицией в реестр, а не замолчан.
 *
 * ★ ПРАКТИЧЕСКОЕ СЛЕДСТВИЕ ДЛЯ ТОГО, КТО ПРИДЁТ ПОЗЖЕ: если понадобится
 * поднять тач-минимум чипов (скажем, до 48px), правки одного
 * `okna-mobile.css:287` НЕ ХВАТИТ — на посадочных выиграет правило отсюда.
 * Менять надо оба места, либо сначала снести это.
 *
 * ★ НА МЫШИ ВЛАДЕЛЕЦ ВЫСОТЫ ЧИПА МЕНЯЕТСЯ НА 600px, И ЭТО НЕ ОПЕЧАТКА.
 * Сказать «на мыши чип 34,1» было бы неполно. Замер 30.07.2026, шесть ширин:
 *
 *     мышь 375 · 500 · 600   min-height 40px   владелец — okna-mobile.css:287
 *     мышь 601 · 615 · 616   min-height auto   владельца нет, высота 34,14px
 *
 * Граница — **600px включительно**, ровно край `@media (max-width:600px)`.
 * Полоса прокрутки на неё не влияет: проверено парой 615/616, где
 * `clientWidth` равен 600 и 601, а медиазапрос уже `false` — то есть он идёт
 * по `innerWidth`, полосу включая.
 *
 * ★ НА ВЫВОД ПАКЕТА ЭТО НЕ ВЛИЯЕТ: 40px тоже ниже 44. Счёт «ниже нормы»
 * одинаков на всех шести мышиных ширинах — 24 чипа, 30 узлов всего. Разница
 * между 34,14 и 40 — это разница между двумя нарушениями нормы, а не между
 * нарушением и соответствием.
 *
 * ══ ЧТО СЮДА НАМЕРЕННО НЕ ВОШЛО ══════════════════════════════════════════
 *
 * Замер нашёл 27 целей ниже нормы на `model` и 36 на `brand`. Закрыты три.
 * Остальные названы поимённо, с причиной и адресатом — молчаливых исключений
 * нет:
 *
 *   оболочка `button.ok-city` 90×36, `a.ok-mail` 108×36        → W5-P02, §2 пакета
 *   крошки `nav.okna-crumbs` 51×22, 49×22, 34×22               → W5-P02, §2 пакета
 *   `a.okna-services__all` 96×23                               → W5-P02, §2 пакета
 *   `button.okna-geo-req__more` 254×30                         → W5-P02, §2 пакета
 *   4 × `label` полей формы ГЕО 20,9 и `label.okna-geo-req__consent`
 *        → тот же блок ГЕО, что и кнопка выше. Чинить блок наполовину
 *          бессмысленно: через полгода не восстановить, почему подписи
 *          остались, а кнопка ушла. Позиция заведена.
 *   `label.okna-faq-morebtn` 159×21,7
 *        → у FAQ единый канон проекта, его CSS живёт ТОЛЬКО в `design.css`
 *          (там же `.okna-faq-morebtn`, строки 1457-1461). Поднять высоту
 *          отсюда — одна строка, и именно поэтому нельзя: канон переживёт
 *          пакет, а исключение из него — нет. Позиция заведена.
 *   `label` согласия CF7 305×37,7
 *        → форма сквозная, живёт далеко за посадочными. Правка под гейтом
 *          посадочных сделала бы её разной на разных страницах. Позиция.
 *   3 × `button.okna-qp__field` 317×43,7 НА 26 СТРАНИЦАХ `.okna-sf`
 *        → тот же узел, что закрыт здесь на 728 страницах, но на видах
 *          `glasstype`, `country`, `type`, `heating` он остаётся 43,7.
 *          Тронуть их нельзя: критерий 7 назначил эти виды контролем
 *          регресса. Пакет называет `glasstype` «закрытой в W2-P03» — это
 *          неточность, узел там открыт. → W5-P02. Позиция.
 *   ★ `a.okna-qp__go` «Подобрать» — СОСЕД ЗАКРЫТОГО УЗЛА ПО ТОЙ ЖЕ СТРОКЕ
 *        → пол 42px объявлен в `mu-plugins/okna-tree-nav.php:645`, а норму
 *          48px ей даёт фундамент под ШИРИНОЙ: `okna-mobile.css:57`
 *          `@media (max-width:768px)` … `:70-75` `.okna-btn{min-height:48px}`.
 *          Следствие правки, названное честно: на таче ШИРЕ 768 поле рядом
 *          поднялось до 44 по оси указателя, а кнопка осталась 42 по оси
 *          ширины — в одной строке одного виджета две разные оси гейта.
 *          Ухудшения нет (кнопка была 42 и там же осталась), но согласованность
 *          виджета сломана до тех пор, пока фундамент не переедет на указатель.
 *          Правка отсюда запрещена: §2 разрешает два файла. Позиция.
 *
 * ★ СВЕРКА ЭТОГО СПИСКА СО СПЛОШНЫМ СКАНОМ, 30.07.2026. Список называет 14
 * узлов; скан на тач@375 нашёл 12, на тач@700 — 13. Расхождение объяснено, а
 * не списано: третья крошка на 375 не печатается ссылкой (текущая страница —
 * простой текст), а `label.okna-geo-req__consent` 565×37,7 виден только от 700
 * (на 375 форма ГЕО переносит согласие иначе). Сходится: 12 + consent = 13.
 *
 * ══ ГРАНИЦЫ ОБЪЁМА, КОТОРЫЕ НАДО НАЗВАТЬ ВСЛУХ ═══════════════════════════
 *
 * ★ ЯРУС 769-1024px ТЕПЕРЬ ПОКРЫТ — НА ТАЧЕ. Прежняя запись здесь гласила
 * «ярус не покрыт, чип остаётся 34,1px, поля 43,7px, кнопка 21,7px»; после
 * W2-FIX-04 это неправда, и оставить её было бы хуже, чем не писать вовсе.
 * Замерено 30.07.2026 на `/katalog/stekla-paz/`:
 *
 *     тач  900 и 1024   все четыре узла 44px, ниже нормы 0 из 30 видимых
 *     мышь 900          34,1 / 43,7 / 20,1 / 21,7, ниже нормы 30 из 30
 *
 * ★ Решает не пара «375 против 1024», а пара «тач 900 против мыши 900»:
 * ширина одна, база одна (885px), разница только в указателе — 0 против 30.
 * Это прямое доказательство, сравнение разных ширин таким не является.
 * iPad 834 в портрете попадает в тач-ветку и норму получает.
 *
 * ★ ЯРУС ВСЁ ЖЕ ЧУЖОЙ, И ЭТО СКАЗАНО ПРЯМО. `okna-mobile.css:52` объявляет
 * `@media (max-width:1024px)` планшетным ярусом, отданным фазе M5. Настоящий
 * лист входит туда по оси указателя, то есть мимо чужой оси, а не поверх неё.
 * Тому, кто будет наполнять ярус 1024: естественное правило вида
 * `.okna-top-tags .okna-tag{min-height:48px}` (0,2,0) на 728 посадочных НЕ
 * СРАБОТАЕТ — его перебьёт правило отсюда весом (0,4,1). Позиция заведена.
 *
 * ★ ДВА ИЗ ЧЕТЫРЁХ ПРАВИЛ МЕНЯЮТ НЕ ТОЛЬКО ВЫСОТУ. `.okna-tags-more` и
 * `.okna-st-btn` получают `display:inline-flex` вместо `inline-block`
 * (`glavnaya.css:1145` и `:1165`). На планшете это впервые применяется к
 * десктопной раскладке, поэтому ярус снят отдельным кадром, а не только
 * числами.
 *
 * ══ ОГОВОРКА О ЧИПАХ ═════════════════════════════════════════════════════
 *
 * ★ ПРЕЖНЯЯ ЗАПИСЬ БЫЛА ЛОЖНОЙ и вводила в заблуждение до этого пакета:
 * «`a.okna-tag` на замере 29.07.2026 не встретился ни на одной из 18
 * контрольных конфигураций». Живая проверка: на `/katalog/stekla-paz/`
 * ссылок-чипов `<a class="okna-tag` — 48 штук, печатает `inc/top-tags.php:152`.
 * Правило действует и на ссылках, и на span-ах; состояния ссылки (`:hover`,
 * `:visited`, фокус) наследуют высоту от того же `min-height`.
 *
 * ★ Посадочная с ПУСТЫМ `_okna_kind` этим правилом НЕ покрывается, хотя чипы
 * на ней быть могут: `single-seo_filter.php:15` отдаёт ветвь `.okna-usluga`
 * только видам `brand` и `model`, всё остальное — включая пустой вид — уходит
 * в ветвь `.okna-usluga.okna-sf`, которую `:not()` исключает. Сегодня таких
 * записей в базе нет (672+56+9+8+8+1 = 754, без остатка), но если появятся —
 * чипы там останутся 34-40px, и это будет не регресс, а непокрытый случай.
 *
 * Ширина проверена отдельно, потому что `min-height` её не трогает, а норма
 * 44 — по обеим осям: самое короткое название марки или модели в базе — 3
 * символа, самый узкий чип в замере 51px.
 *
 * ЧТО НЕ МЕНЯЕТСЯ: ширина, просвет `gap:8px`, цвета, рамка, радиус, порядок и
 * состав ссылок, десктоп. Чужие файлы `inc/catalog-nav.php` и
 * `inc/top-tags.php` не тронуты — правка идёт своим листом по селектору.
 * `!important` не добавлен ни одного: стоп-условие пакета.
 */

/* ★ W2-FIX-04: ГЕЙТ ПО ТИПУ УКАЗАТЕЛЯ, А НЕ ПО ШИРИНЕ.
 *
 * Было `@media (max-width: 768px)`. Ширина — свойство раскладки, а норма 44×44
 * защищает ПАЛЕЦ. Это разные вопросы, и совпадали они только по привычке:
 * мышиный монитор на 700px получал раздутые цели, а планшет на 900px — нет.
 *
 * ★ ИЗВЕСТНОЕ ОГРАНИЧЕНИЕ, ПРИНЯТОЕ СОЗНАТЕЛЬНО, ПЕРЕОТКРЫТИЮ НЕ ПОДЛЕЖИТ.
 * `pointer: coarse` не покрывает гибриды: планшет с трекпадом и часть
 * Android-браузеров сообщают `pointer: fine`, и норма 44 к ним не применится.
 * Ограничение принято ценой однородности метрик — одинаково для всех пяти
 * листов дорожки. Пересматривается в мобильном проходе, не раньше и не по
 * частям.
 *
 * ★ ВОЗВРАЩАТЬ ШИРИНУ В УСЛОВИЕ НЕЛЬЗЯ. Добавление `(max-width: …)` обратно
 * вернёт ровно ту разнородность, ради устранения которой пакет заведён: часть
 * листов гейтована по указателю, часть по ширине, и сравнивать их замеры
 * станет нельзя.
 *
 * Меняется ТОЛЬКО условие медиазапроса. Объявления внутри, скоуп
 * `body.single-seo_filter .okna-usluga:not(.okna-sf)` и правила раскладки под
 * шириной не тронуты. */
@media (hover: none) and (pointer: coarse){

	/* Чипы марок и моделей. Высота видимая, а не невидимый добор: макета для
	   посадочных нет (§6 пакета отменяет критерий соответствия макету для
	   волн 3-5), а `.okna-tags-list` — flex с `gap:8px` ПО ОБЕИМ ОСЯМ. Чип
	   34,1px, дорощенный невидимо до 44, съел бы просвет между рядами
	   целиком, и нажатие у края уходило бы в соседний ряд: норма формально
	   выполнена, промах создан. */
	body.single-seo_filter .okna-usluga:not(.okna-sf) .okna-tag{
		min-height: 44px;
	}

	/* Поля подбора. Недобор был ровно 0,3px и держался на всех трёх ширинах —
	   значит он не от переноса текста, а от геометрии. Норма для этого узла
	   уже применена в проекте, но только на главной: `glavnaya.css:2419`
	   `.gv-podbor .okna-qp__field{min-height:44px}`. Здесь то же значение тем
	   же способом — это докатка старого решения, а не новое требование.
	   `!important` не нужен: чужое правило закрывает им фон, рамку, цвет,
	   тень и `transform`, но не высоту. */
	body.single-seo_filter .okna-usluga:not(.okna-sf) .okna-qp__field{
		min-height: 44px;
	}

	/* ★ «Показать ещё» у чипов. Найдено ВТОРОЙ рецензией: узел печатается
	   только когда чипов в группе больше двенадцати (`inc/top-tags.php:157`),
	   а у обоих представителей замера их меньше — поэтому в первые шесть
	   замеров он не попал вовсе. Живьём это 87,8×20,1 на `/katalog/stekla-paz/`
	   и `/katalog/stekla-higer/`. Своей тач-нормы у него нет нигде:
	   `glavnaya.css:1145` объявляет только `display:inline-block` и кегль.

	   ★ УСЛОВИЕ `:not(:checked)` ОБЯЗАТЕЛЬНО, И ВОТ ПОЧЕМУ. У узла есть своё
	   правило скрытия — `glavnaya.css:1144`
	   `.okna-tags-toggle:checked ~ .okna-tags-more{ display:none }` (0,2,0).
	   Правило отсюда объявляет `display` и по специфичности выигрывает, то
	   есть БЕЗ этого условия надпись «Показать ещё» осталась бы висеть после
	   раскрытия списка. Условие возвращает управление владельцу: в раскрытом
	   состоянии правило просто не применяется. */
	body.single-seo_filter .okna-usluga:not(.okna-sf) .okna-tags-toggle:not(:checked) ~ .okna-tags-more{
		display: inline-flex;
		align-items: center;
		min-height: 44px;
	}

	/* Кнопка разворота SEO-текста. `min-height` в одиночку не годится: узел
	   объявлен `display:inline-block` (`glavnaya.css:1165`), и высокая коробка
	   оставила бы текст прижатым к верху с пустотой под ним. `inline-flex` с
	   центрированием даёт ту же высоту и держит текст в середине.

	   ★ УСЛОВИЕ `:not(.is-short)` ОБЯЗАТЕЛЬНО — та же ловушка, что выше.
	   `glavnaya.css:1171` `.okna-seo-text.is-short .okna-st-btn{display:none}`
	   (0,3,0) прячет кнопку, когда текст короче высоты свёртки; класс ставит
	   `catalog.js:9`. Правило отсюда (0,5,1) перебило бы скрытие, и под
	   полностью видимым текстом висела бы мёртвая надпись «Читать полностью».
	   Сегодня не выстрелило бы — у всех 728 текст длиннее свёртки, — но это
	   мина, а не безопасность: владелец укорачивает текст и получает дефект. */
	body.single-seo_filter .okna-usluga:not(.okna-sf) .okna-seo-text:not(.is-short) .okna-st-btn{
		display: inline-flex;
		align-items: center;
		min-height: 44px;
	}

}
