/*
 * Слой bloki.css — задача 3.6 очереди 3: карточки статей. Вторая попытка.
 *
 * Подключается ПОСЛЕДНИМ (rc_enqueue_styles(), functions.php:
 * reboot-style -> slovar.css -> style.css -> baza.css -> bloki.css),
 * поэтому побеждает по порядку в каскаде, а не весом селектора.
 * Ни одного !important ниже нет и не нужно.
 *
 * РАЗБОР ПЕРВОЙ ПОПЫТКИ (откачена). Карточка была перенесена сюда
 * почти полностью, но в style.css остались ДВА правила-заплатки на
 * ту же плашку рубрики через переменную --rc-gc-badge-bg с !important
 * («Бейджи рубрик» и «Контрастность категорий WCAG AA»). Они и раньше
 * матчили .post-card--vertical (селекторы вида
 * .post-card:not(.post-card--small) .post-card__category и голое
 * .post-card__category), но проигрывали более специфичному правилу
 * VCARDV8 (специфичность 0,4,1, тоже !important, переменная
 * --rc-cv-cat-bg = #ff5e52 красный). Задача убрала VCARDV8 и перенесла
 * его сюда, а эти два правила — не тронула: важность в каскаде сильнее
 * веса селектора, и следующим по специфичности среди !important-правил
 * стал патч на --rc-gc-badge-bg (#303030 тёмный) — плашка перекрасилась.
 * Найдено не поиском по файлу (он и пропустил эти два правила, потому
 * что в их селекторах нет слова «vertical»), а разбором через CDP
 * CSS.getMatchedStylesForNode — snimki/inventar/kartochki-pravila.json.
 *
 * ИСПРАВЛЕНИЕ. Оба правила в style.css сужены через :not(.post-card--
 * vertical ...), чтобы они больше не матчили плашку вертикальной
 * карточки вообще — тогда бороться с их !important не с чем, и это
 * правило ниже побеждает по порядку подключения, как и задумано. Для
 * grid/horizontal/standard-карточек (их на четырёх проверяемых страницах
 * нет, но они есть на сайте — слайдер, другие разделы) оба правила
 * работают как прежде, ничего не потеряно.
 *
 * ОПИСЬ (полная — snimki/inventar/kartochki-pravila.json, таблица — audit/11-vid.md,
 * раздел 3.6). На четырёх проверяемых страницах (главная, статья, рубрика,
 * автор) реально выводятся два вида карточки статьи:
 *
 *   1. .post-card--vertical — карточка ленты (главная, рубрика, страница
 *      автора): обложка сверху, плашка рубрики поверх обложки, заголовок,
 *      мета (комментарии/просмотры/дата). Лид скрыт, пока обложка есть —
 *      так было и до этой задачи, не наше решение, не трогаем.
 *   2. .post-card--small.post-card--compact-text — строка в виджете
 *      «Статьи» боковой колонки (главная, рубрика, статья): заголовок
 *      и мета, без обложки и лида по замыслу виджета (это не тот случай
 *      «дыры на месте фото» — обложки в разметке этого вида нет вообще,
 *      искать признак пустой миниатюры тут незачем).
 *
 * Другие виды карточки (.post-card--grid/--horizontal/--standard,
 * .post-card--small без --compact-text) в разметке этих четырёх страниц
 * не встречаются ни разу — их стили остаются в style.css нетронутыми,
 * переносить непроверенное было бы наслоением вслепую, а не переносом.
 * Так же остаются нетронутыми и сугубо контекстные обёртки сайдбара,
 * которые задают вид #2 в контексте, отличном от подтверждённого
 * (.widget-area .post-card--compact-text без .rc-sidebar-left/right —
 * на четырёх страницах такого DOM нет), и правила, общие сразу для
 * нескольких видов карточек в одном селекторе через запятую (например
 * .post-card--vertical, .post-card--grid, .post-card--horizontal
 * { … } на hover-анимацию) — расщеплять такой селектор ради переноса
 * только вертикальной карточки рискованно и не даёт выигрыша.
 *
 * ПРИЗНАК ОТСУТСТВИЯ ОБЛОЖКИ. Класс post-card--thumbnail-no ставит сама
 * родительская тема: template-parts/post-card/*.php (стандартные шаблоны
 * wpshop) проверяют get_the_post_thumbnail() и, если строка пустая,
 * добавляют этот класс в $post_card_classes. Свой фильтр в functions.php
 * не понадобился — родитель уже отдаёт нужный признак.
 *
 * ЗНАЧЕНИЯ. Только переменные словаря (css/slovar.css):
 *   - кегли — var(--rc-kegl-N) (десять ступеней) там, где размер новый
 *     (второе состояние карточки без обложки); для унаследованных
 *     размеров, управляемых кастомайзером (--rc-cv-fs и т.п.), ступень
 *     не переназначается — это не роль, а отдельная настройка человека,
 *     переменная просто переносится вместе с правилом;
 *   - отступы — var(--rc-otstup-N) (семь ступеней, шаг 4px). Голые
 *     значения из style.css, не привязанные ни к какому кастомайзер-
 *     контролу, при переносе округлены до ближайшей ступени (при
 *     равном расстоянии — меньшая, то же правило, что и в задаче 3.5
 *     для кеглей). Таблица округлений — audit/11-vid.md, раздел 3.6;
 *   - цвета — переменные (--rc-cv-*, --rc-gc-*, --rc-border и т.п.),
 *     все уже объявлены в slovar.css, поэтому var() ниже без hex-
 *     запасного значения (сам словарь и есть запасное значение);
 *   - радиусы — var(--rc-cv-r) (customizer-переменная, её дефолт в
 *     slovar.css — 12px, это ровно --rc-radius-bazovy).
 *
 * ИСКЛЮЧЕНИЯ (честно, как требует задание, вместо подгонки):
 *   - плашка рубрики поверх обложки: border-radius 4px и padding 3px 7px —
 *     мелкая деталь (пилюля бейджа), меньше нижней ступени радиуса (8px)
 *     и вне шага отступов (4px), перенесена как есть, без переосмысления;
 *   - толщина рамок 1px («волосок») — не размер по шкале кеглей/отступов,
 *     общепринятая единица на весь сайт, тем же кегл/отступ не является;
 *   - max-width: calc(100% - 28px) у той же плашки рубрики — запас, чтобы
 *     длинное название рубрики не доходило до правого края обложки;
 *     число перенесено из style.css как есть (было там же, с тем же
 *     смыслом, до задачи 3.6), это не отступ и не кегль, а геометрический
 *     зазор одной конкретной детали;
 *   - высоты обложки/карточки (--rc-cv-th*, --rc-cv-nh*) и время
 *     transition — не входят ни в шкалу кеглей, ни в шкалу отступов
 *     (это не шрифт и не расстояние между блоками, а размер картинки и
 *     скорость анимации), перенесены как кастомайзер-переменные без
 *     изменений.
 */

/* ══════════════════════════════════════════════════════════════════
   ОБЩИЙ ПРИЁМ — обрезка заголовка/лида по числу строк (line-clamp).
   Описан один раз для обоих видов; сколько строк — решает каждый вид
   отдельно ниже (var(--rc-cv-lines*) у вертикальной, число 2 у
   компактной и у лида карточки без обложки).
   ══════════════════════════════════════════════════════════════════ */
.post-card--vertical .post-card__title a,
.post-card--vertical.post-card--thumbnail-no .post-card__description,
.post-card--compact-text .post-card__title a {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* ══════════════════════════════════════════════════════════════════
   ВИД 1 — .post-card--vertical (лента: главная, рубрика, автор)
   ══════════════════════════════════════════════════════════════════ */

/* Контейнер: спецслучаи на 1 и 2 карточки в ленте */
.post-cards--vertical:has(> .post-card--vertical:only-child) {
    grid-template-columns: 1fr;
}
.post-cards--vertical:has(> .post-card--vertical:nth-child(2):last-child) {
    grid-template-columns: 1fr 1fr;
}
@media (max-width: 599px) {
    .post-cards--vertical:has(> .post-card--vertical:nth-child(2):last-child) {
        grid-template-columns: repeat(var(--rc-cv-cols-m, 1), 1fr);
    }
}

/* Карточка — фон, форма. Толщину/цвет рамки не дублируем: их для
   вертикальной карточки наравне с grid/horizontal/standard уже
   держит общее правило style.css («FIX: card border from customizer
   vars», один и тот же var(--rc-card-border-w)/var(--rc-card-border-col),
   значения совпадают — второе объявление здесь было бы мёртвым кодом). */
.post-card--vertical {
    min-width: 0;
    max-width: none;
    margin: 0;
    padding: 0;
    height: 100%;
    background: var(--rc-cv-bg);
    border-radius: var(--rc-cv-r);
    overflow: hidden;
    display: flex;
    flex-direction: column;
    position: relative;
}

/* Обложка */
.post-card--vertical .post-card__thumbnail {
    flex: 0 0 var(--rc-cv-th);
    width: 100%;
    height: var(--rc-cv-th);
    min-height: var(--rc-cv-th);
    max-height: var(--rc-cv-th);
    margin: 0;
    padding: 0;
    position: relative;
    overflow: hidden;
}
.post-card--vertical .post-card__thumbnail a {
    display: block;
    width: 100%;
    height: 100%;
    overflow: hidden;
    padding: 0;
    margin: 0;
}
.post-card--vertical .post-card__thumbnail a::before,
.post-card--vertical .post-card__thumbnail a::after {
    display: none;
}
.post-card--vertical .post-card__thumbnail img {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    max-width: none;
    min-width: unset;
    min-height: unset;
    max-height: unset;
    margin: 0;
    padding: 0;
}
@media (min-width: 600px) and (max-width: 991px) {
    .post-card--vertical .post-card__thumbnail {
        flex-basis: var(--rc-cv-th-t);
        height: var(--rc-cv-th-t);
        min-height: var(--rc-cv-th-t);
        max-height: var(--rc-cv-th-t);
    }
}
@media (max-width: 599px) {
    .post-card--vertical .post-card__thumbnail {
        flex-basis: var(--rc-cv-th-m);
        height: var(--rc-cv-th-m);
        min-height: var(--rc-cv-th-m);
        max-height: var(--rc-cv-th-m);
    }
}

/* Плашка рубрики поверх обложки (радиус и внутренний паддинг —
   исключение из шкалы, см. шапку файла).
   Специфичность селектора взята выше обычной (0,3,0 -> 0,4,1,
   добавлены body и .post-cards--vertical): родительская тема сама
   печатает инлайновый <style> без id — акцентный цвет кастомайзера
   применён одним общим правилом сразу к ::selection, кнопкам,
   разделителям и заодно к .post-card:not(.post-card--small)
   .post-card__category (специфичность тоже 0,3,0). Это чужой код, не
   style.css, !important в нём нет — но печатается он в <head> позже
   ссылки на bloki.css, поэтому при равной специфичности выигрывал бы
   порядком. Выше — тот же приём, что был в исходном VCARDV8 (там
   тоже был body-префикс), не изобретение задачи 3.6. */
body .post-cards--vertical .post-card--vertical .post-card__thumbnail .post-card__category {
    display: inline-block;
    position: absolute;
    bottom: var(--rc-otstup-2, 8px);
    left: var(--rc-cv-pad);
    top: auto;
    transform: none;
    background: var(--rc-cv-cat-bg);
    color: var(--rc-cv-cat-color);
    border-radius: 4px;
    padding: 3px 7px;
    text-transform: uppercase;
    letter-spacing: .06em;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: calc(100% - 28px);
    z-index: 2;
    line-height: var(--rc-interlinyage-bazovy, 1.4);
    margin: 0;
}
.post-card--vertical .post-card__thumbnail .post-card__category a {
    text-decoration: none;
    padding: 0;
    margin: 0;
}
/* Дублирующая рубрика вне обложки (родитель печатает её только когда
   обложки нет — см. standard.php) у вертикальной карточки не нужна,
   свою плашку показывает состояние «без обложки» ниже. */
.post-card--vertical > .post-card__category {
    display: none;
}

/* Заголовок */
.post-card--vertical .post-card__title {
    flex: 1;
    font-size: var(--rc-cv-fs);
    line-height: var(--rc-cv-lh-title);
    /* Нижний паддинг на шкале (--rc-otstup-1, 4px). До задачи 3.6 был
       хардкодом 5px, вне шкалы; такой ступени в otstup нет, округлено
       до ближайшей меньшей (4px). Отсюда остаточный 1px на шаге плашки
       рубрики (эталон 307/336/336/336, сейчас 306/335/335/335,
       snimki/do-ochered-3). Проверено прямым замером: возврат 5px даёт
       ровно эталонный шаг, но 5px не лежит ни на одной ступени otstup
       (4/8/12/16/24/32/48). Магическое число мимо шкалы сюда не
       возвращаем, 1px оставлен как цена перехода на общую шкалу. */
    padding: var(--rc-cv-title-gap) var(--rc-cv-pad) var(--rc-otstup-1, 4px);
    margin: 0;
    color: var(--rc-cv-title-color);
    min-height: 0;
}
.post-card--vertical .post-card__title a {
    color: var(--rc-cv-title-color);
    text-decoration: none;
    -webkit-line-clamp: var(--rc-cv-lines);
    padding: 0;
    margin: 0;
}
.post-card--vertical:hover .post-card__title a {
    color: var(--rc-gc-card-title-hover, var(--rc-link-hover));
    transition: color .15s ease;
}
@media (min-width: 600px) and (max-width: 991px) {
    .post-card--vertical .post-card__title { font-size: var(--rc-cv-fs-t); }
    .post-card--vertical .post-card__title a { -webkit-line-clamp: var(--rc-cv-lines-t); }
}
@media (max-width: 599px) {
    .post-card--vertical .post-card__title { font-size: var(--rc-cv-fs-m); }
    .post-card--vertical .post-card__title a { -webkit-line-clamp: var(--rc-cv-lines-m); }
}

/* Лид — скрыт, пока есть обложка (так было и до задачи 3.6, показываем
   его только во втором состоянии карточки, см. ниже) */
.post-card--vertical .post-card__description {
    display: none;
}

/* Мета (комментарии/просмотры/дата). Величину зазора (gap) и обнуление
   margin-right у детей сюда не переносим — их держит узкий заслон в
   style.css (задача 3.6, комментарий «Заслон от чужого !important»):
   на них есть чужие общие !important-правила без !important здесь их
   не перебить, а расставлять свой !important в bloki.css запрещено
   условием задачи. */
.post-card--vertical .post-card__meta {
    margin: 0;
    margin-top: auto;
    padding: var(--rc-cv-meta-top) var(--rc-cv-pad) var(--rc-otstup-3, 12px);
    border-top: none;
    font-size: var(--rc-cv-meta-fs);
    color: var(--rc-cv-meta-color);
    display: flex;
    align-items: center;
    flex-wrap: wrap;
}
.post-card--vertical .post-card__date,
.post-card--vertical .post-card__views,
.post-card--vertical .post-card__comments,
.post-card--vertical .post-card__author {
    padding: 0;
    margin: 0;
    color: var(--rc-cv-meta-color);
    font-size: var(--rc-cv-meta-fs);
}
.post-card--vertical .post-card__date::before,
.post-card--vertical .post-card__views::before,
.post-card--vertical .post-card__comments::before,
.post-card--vertical .post-card__author::before {
    position: static;
    transform: none;
    color: var(--rc-cv-meta-color);
}

/* ══════════════════════════════════════════════════════════════════
   ВИД 1, ВТОРОЕ СОСТОЯНИЕ — .post-card--vertical.post-card--thumbnail-no
   Задача 3.6. Раньше без обложки на её месте оставалась пустая
   область (высота карточки не менялась, лид был display:none, как и
   у карточки с фото, — правило выше). Так до этой задачи выглядела
   заметная часть novostidny.ru: 6906 записей, ни одной обложки.
   Теперь это второе законное состояние: обложки нет вовсе (сама плитка
   не резервирует под неё место), заголовок на одну ступень крупнее,
   лид виден и ограничен двумя строками, снизу — разделитель линией
   вместо фото.
   ══════════════════════════════════════════════════════════════════ */
/* Решение Ивана 16.08: без обложки карточка держит ту же левую линию,
   что и карточка с фото. Центр разбивал ленту на две разные линии взгляда,
   а на novostidny без обложек все 6906 записей. */
.post-card--vertical.post-card--thumbnail-no {
    min-height: var(--rc-cv-nh);
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    padding: var(--rc-otstup-4, 16px) var(--rc-cv-pad);
    gap: var(--rc-otstup-1, 4px);
    text-align: left;
    border-bottom: 1px solid var(--rc-border);
}
@media (min-width: 600px) and (max-width: 991px) {
    .post-card--vertical.post-card--thumbnail-no { min-height: var(--rc-cv-nh-t); }
}
@media (max-width: 599px) {
    .post-card--vertical.post-card--thumbnail-no {
        min-height: var(--rc-cv-nh-m);
        padding: var(--rc-otstup-4, 16px) var(--rc-cv-pad);
    }
}
.post-card--vertical.post-card--thumbnail-no .post-card__category {
    align-self: flex-start;
}
.post-card--vertical.post-card--thumbnail-no .post-card__meta {
    justify-content: flex-start;
    padding: 0;
    border-top: none;
    width: 100%;
}
.post-card--vertical.post-card--thumbnail-no .post-card__title {
    flex: 0 0 auto;
    padding: 0;
    text-align: left;
    width: 100%;
    /* на одну ступень крупнее обычного (var(--rc-cv-fs) = kegl-5 = 14px) */
    font-size: var(--rc-kegl-6, 16px);
}
.post-card--vertical.post-card--thumbnail-no .post-card__title span,
.post-card--vertical.post-card--thumbnail-no .post-card__title a {
    display: block;
    text-align: left;
}
@media (max-width: 991px) {
    /* обычный заголовок на этих ширинах на ступень ниже (kegl-4 = 13px),
       здесь тоже на ступень крупнее — kegl-5 = 14px */
    .post-card--vertical.post-card--thumbnail-no .post-card__title {
        font-size: var(--rc-kegl-5, 14px);
    }
}
.post-card--vertical.post-card--thumbnail-no .post-card__description {
    -webkit-line-clamp: 2;
    text-align: left;
    padding: 0;
    width: 100%;
    color: var(--rc-cv-meta-color);
    font-size: var(--rc-kegl-4, 13px);
    line-height: var(--rc-interlinyage-bazovy, 1.4);
}

/* ══════════════════════════════════════════════════════════════════
   ВИД 2 — .post-card--small.post-card--compact-text (виджет «Статьи»
   боковой колонки: главная, рубрика, статья). Подтверждённый на
   четырёх страницах контекст — только внутри .rc-sidebar-left/right
   .widget; вне этого контекста (иной сайдбар/виджет-обёртка) вид
   не проверялся, соответствующие запасные правила остаются в
   style.css нетронутыми.
   ══════════════════════════════════════════════════════════════════ */
.rc-sidebar-left .widget .post-card--compact-text,
.rc-sidebar-right .widget .post-card--compact-text {
    display: block;
    position: static;
    width: 100%;
    max-width: 100%;
    background: transparent;
    border-radius: 0;
    box-shadow: none;
    border: none;
    border-bottom: 1px solid var(--rc-border);
    padding: var(--rc-otstup-2, 8px) var(--rc-otstup-3, 12px);
    margin: 0;
    float: none;
    overflow: visible;
    box-sizing: border-box;
}
.rc-sidebar-left .widget .post-card--compact-text:last-of-type,
.rc-sidebar-right .widget .post-card--compact-text:last-of-type {
    border-bottom: none;
}
.rc-sidebar-left .widget .post-card--compact-text .post-card__thumbnail,
.rc-sidebar-right .widget .post-card--compact-text .post-card__thumbnail {
    display: none;
}
.rc-sidebar-left .widget .post-card--compact-text .post-card__description,
.rc-sidebar-right .widget .post-card--compact-text .post-card__description,
.rc-sidebar-left .widget .post-card--compact-text .post-card__category,
.rc-sidebar-right .widget .post-card--compact-text .post-card__category {
    display: none;
}
.rc-sidebar-left .widget .post-card--compact-text .post-card__title,
.rc-sidebar-right .widget .post-card--compact-text .post-card__title {
    line-height: var(--rc-interlinyage-bazovy, 1.4);
    margin: 0 0 var(--rc-otstup-1, 4px);
    padding: 0;
    color: var(--rc-gc-card-title);
    display: block;
}
.rc-sidebar-left .widget .post-card--compact-text .post-card__title a,
.rc-sidebar-right .widget .post-card--compact-text .post-card__title a {
    color: inherit;
    text-decoration: none;
    -webkit-line-clamp: 2;
}
.rc-sidebar-left .widget .post-card--compact-text .post-card__meta,
.rc-sidebar-right .widget .post-card--compact-text .post-card__meta {
    padding: 0;
    margin: 0;
    border: none;
    background: none;
    display: flex;
    align-items: center;
    gap: var(--rc-otstup-2, 8px);
}

/* ══════════════════════════════════════════════════════════════════
   Задача 3.8 очереди 3 — кликабельные зоны на телефоне/планшете.
   Норма 44x44 по короткой стороне (аудит 04-dizayn-audit.md, 5.5).
   Бургер и поиск — родительская тема, у неё в этих правилах нет
   !important, поэтому здесь тоже без него: только порядок подключения.
   Приём — padding внутрь + такой же отрицательный margin наружу:
   область нажатия растёт, а место в раскладке и позиция иконки
   не меняются (примерено CSS.getMatchedStylesForNode на живом стенде).
   ══════════════════════════════════════════════════════════════════ */
@media (max-width: 991px) {
    .humburger.js-humburger {
        padding: 14px;
        margin: -14px;
        box-sizing: content-box;
    }
    .header-search .search-icon {
        padding: 10px;
        margin: -10px;
        box-sizing: content-box;
    }
    /* Кнопка cookie-баннера (Clearfy) — своя область меньше нормы. */
    .clearfy-cookie-accept {
        min-width: 44px;
        min-height: 44px;
        padding: 10px 16px;
    }
}

/* ══════════════════════════════════════════════════════════════════
   Правки группы В (аудит, п.1) — видимый фокус кнопки «Поделиться».
   В style.css у .rc-share-btn стоит outline: none !important без
   замены — при обходе клавиатурой (Tab) кнопка визуально пропадает.
   Тем же outline это не перебить: !important плюс он же выигрывает
   по специфичности у любого не-!important правила. box-shadow тем
   правилом не тронут вообще, поэтому обходимся без !important —
   порядка подключения (bloki.css последний) достаточно.
   Проверено CSS.getMatchedStylesForNode + getComputedStyle на живом
   стенде: сейчас в обычном состоянии и после .focus() вычисленные
   outline и box-shadow совпадают один в один (outline: none 3px,
   box-shadow: none) — видимого отличия нет вовсе.
   ══════════════════════════════════════════════════════════════════ */
.rc-share-btn:focus-visible {
    /* Фикс-раунд: то же запасное значение, что и у остальных --rc-gc-accent. */
    box-shadow: 0 0 0 3px var(--rc-gc-accent, #303030);
}

/* ══════════════════════════════════════════════════════════════════
   Правки группы В (аудит, п.3) — зоны нажатия меньше 44px на 390.
   Приём тот же, что и в задаче 3.8 выше (padding + отрицательный
   margin), но там, где у элемента есть свой видимый фон/рамка/тень
   (кружок стрелки, точка слайдера, кнопка-стрелка рубрики, плашка
   пагинации, пилюля подрубрики), рост padding раздул бы и видимую
   форму — этим приёмом их трогать нельзя. Вместо этого — невидимая
   область на псевдоэлементе: она добавляется в зону клика элемента
   (клик по ней всплывает как клик по самому элементу), но ничего не
   рисует поверх видимого вида. Проверено CSS.getMatchedStylesForNode
   и document.elementFromPoint на живом стенде на ширине 390: точка на
   1px внутри новой границы совпадает с самим элементом, а не с фоном
   позади него.

   ::before занят в style.css с !important под три вида элементов
   (стрелка слайдера использует его для символа стрелки, тег и
   пагинация гасят его в display:none !important под тексты/иконки
   родительской темы) — там, где ::before занят, используем ::after,
   он нигде из перечисленных не тронут.

   У кнопки-стрелки рубрики и ссылки подрубрики есть граница 1px —
   отступ -5px вместо -4px, чтобы визуальная граница зоны прошла ровно
   в 4px за рамкой, а не за padding-box (browser считает inset у
   absolute-потомка от padding-box родителя, рамка съедает 1px). У
   остальных элементов рамки нет, отступ равен нужному запасу без
   поправки.

   ЧЕСТНО, БЕЗ ПОДГОНКИ (не 44x44 у всех):
   - точки слайдера — по условию задачи сам кружок расширять нельзя
     («будет выглядеть грубо»), а зазор между соседними точками
     всего 6px. Дали зону только по высоте (6 -> 44), ширину не
     трогали — не жертвуем ни видом, ни зоной соседней точки.

   Решение Ивана 16.08: без перекрытия соседей. Запас равен половине зазора,
   поэтому зоны сходятся встык и не заходят друг на друга:
   теги 18 + 6 + 6 = 30, пагинация 32 + 2 + 2 = 36. Норма 44 не достигается,
   это принятый размен: промах по соседнему тегу уводит со страницы,
   а недобор высоты только требует более точного нажатия.
   ══════════════════════════════════════════════════════════════════ */
@media (max-width: 991px) {
    /* Стрелки слайдера, 40x40 -> 44x44, без рамки */
    .swiper-button-prev,
    .swiper-button-next {
        position: relative;
    }
    .swiper-button-prev::before,
    .swiper-button-next::before {
        content: '';
        position: absolute;
        top: -2px;
        left: -2px;
        right: -2px;
        bottom: -2px;
    }

    /* Точки слайдера — «дай зону вокруг», сам кружок не трогаем */
    .swiper-pagination-bullet {
        position: relative;
    }
    .swiper-pagination-bullet::before {
        content: '';
        position: absolute;
        top: -30px;
        bottom: -8px;
        left: 0;
        right: 0;
    }

    /* Теги под статьёй, высота 18 -> 30, запас по половине зазора (12px),
       без пересечения соседней строки тегов. */
    .entry-tag {
        position: relative;
    }
    .entry-tag::after {
        content: '';
        position: absolute;
        top: -6px;
        bottom: -6px;
        left: 0;
        right: 0;
    }

    /* Кнопка сворачивания описания рубрики, 36x36 -> 44x44, рамка 1px */
    .rc-archive-header__toggle {
        position: relative;
    }
    .rc-archive-header__toggle::before {
        content: '';
        position: absolute;
        top: -5px;
        left: -5px;
        right: -5px;
        bottom: -5px;
    }

    /* Ссылки подрубрик, высота 36 -> 44, рамка 1px, ширина не трогаем */
    .rc-archive-header__subcats .child-categories a {
        position: relative;
    }
    .rc-archive-header__subcats .child-categories a::before {
        content: '';
        position: absolute;
        top: -5px;
        bottom: -5px;
        left: 0;
        right: 0;
    }

    /* Пагинация: числа 32x32 -> 36x36, «Далее» 56x32 -> 60x36, запас по
       половине зазора (4px), без пересечения соседних кружков.
       Один селектор на оба вида — у «Далее» тот же класс page-numbers. */
    .pagination .nav-links .page-numbers {
        position: relative;
    }
    .pagination .nav-links .page-numbers::after {
        content: '';
        position: absolute;
        top: -2px;
        left: -2px;
        right: -2px;
        bottom: -2px;
    }
}

/* ══════════════════════════════════════════════════════════════════
   Задача 4.4 очереди 4 — видимый фокус гамбургера и значка поиска.
   Роль, tabindex и имя ставит rc_header_controls_a11y() (functions.php),
   а Enter/пробел переводит в клик js/dostup.js — здесь только сам
   признак фокуса, тем же приёмом, что уже применён к .rc-share-btn
   выше (box-shadow, без !important: ни родитель, ни style.css не
   гасят outline у этих узлов через !important — проверено
   CSS.getMatchedStylesForNode на живом стенде, в родительском
   assets/css/style.min.css нет правил outline на .humburger/.search-icon,
   есть только [tabindex="-1"]:focus, а у наших узлов tabindex="0").
   ══════════════════════════════════════════════════════════════════ */
.js-humburger:focus-visible,
.js-search-icon:focus-visible {
    /* Фикс-раунд: запасное значение сведено к боевому #303030, как и
       везде у --rc-gc-accent (см. slovar.css, functions.php). */
    box-shadow: 0 0 0 3px var(--rc-gc-accent, #303030);
}

/* ══════════════════════════════════════════════════════════════════
   Задача 4.5 очереди 4: вид h2 и h3 внутри текста статьи.
   rc_normalize_headings() (functions.php) поднимает верхний уровень
   заголовков текста до h2 и сдвигает остальные на ту же величину, но
   вид им никто не задавал: до этой правки .entry-content h2/h3 в теме
   не было ни одного правила, заголовок получал только общий h2/h3
   родителя. Проверено CSS.getMatchedStylesForNode на живом стенде:
   у <h4> внутри .entry-content не было ни одного правила ни из style.css,
   ни из bloki.css, только родительский .h4,h4 (21.25px/700/29.75px,
   без .entry-content в селекторе). Кегль и вес берём из шкалы
   css/slovar.css (--rc-h2-*, --rc-h3-*): переменные там заведены
   заранее, но раньше их не читал ни один файл темы. Отступ сверху
   больше отступа снизу, готовая пара из словаря, для h3 отдельной пары
   там нет, переиспользуем ту же. Числа в переменных var(…, N) ниже, это
   запасные значения кода (10px и 8px), а не то, что видно на странице:
   на 16.08 в настройках (theme_mods) стоит 30px и 10px, замерено на
   живой странице статьи. Запасные и настройка разные величины намеренно,
   первые лишь на случай отсутствия настройки. У свойств без вариантов
   на планшет/телефон в словаре есть только -d (значение общее для всех
   ширин).
   Без !important: bloki.css подключается последним в каскаде (см.
   rc_enqueue_styles), а селектор .entry-content h2/h3 и так весомее
   голого h2/h3 родителя.
   ══════════════════════════════════════════════════════════════════ */
.single .entry-content h2,
.single .entry-content h3 {
    margin-top: var(--rc-sp-body-to-h2, 10px);
    margin-bottom: var(--rc-sp-h2-to-body, 8px);
    font-weight: var(--rc-h2-fw-d, 600);
}

.single .entry-content h2 {
    font-size: var(--rc-h2-m, 22px);
    line-height: var(--rc-h2-lh-d, 1.25);
    letter-spacing: var(--rc-h2-ls-d, -0.02em);
}

.single .entry-content h3 {
    font-size: var(--rc-h3-m, 18px);
    font-weight: var(--rc-h3-fw-d, 600);
    line-height: var(--rc-h3-lh-d, 1.3);
}

@media (min-width: 600px) {
    .single .entry-content h2 { font-size: var(--rc-h2-t, 26px); }
    .single .entry-content h3 { font-size: var(--rc-h3-t, 20px); }
}

@media (min-width: 992px) {
    .single .entry-content h2 { font-size: var(--rc-h2-d, 32px); }
    .single .entry-content h3 { font-size: var(--rc-h3-d, 24px); }
}

/* ══════════════════════════════════════════════════════════════════
   ШАГИ. Решение Ивана 16.08: рецепт должен читаться шагами, чтобы
   взгляд возвращался к нужному номеру, а не перечитывал абзац.
   Содержимое не трогаем: нумерованные списки уже стоят в 545 записях
   из 3093, оформления у них не было ни в одном нашем файле (bloki.css,
   baza.css, slovar.css).
   Разметку HowTo не добавляем: Google убрал её расширенные результаты
   в 2023 году. Recipe не подходит по смыслу: у нас растворы и работы
   в саду, а не приготовление еды.

   НАЙДЕНО ЧЕРЕЗ CDP (CSS.getMatchedStylesForNode, живой стенд,
   .entry-content ol > li). Наших файлов там нет, но родитель
   (reboot/assets/css/style.min.css) уже не отдаёт список браузеру
   как есть: list-style:none и counter-reset:section стоят на ol,
   а li::before рисует свой номер (counter(section) "." , position:
   absolute, left:0, вес 700, цвет #4d3bfe). ::before у .entry-content
   ol > li занят только в родителе, не в style.css/baza.css/bloki.css,
   поэтому используем его же, а не ::after: правило про освобождение
   псевдоэлемента касается своих файлов. Наше правило переопределяет
   все нужные свойства (content, color, размер, форму) явно, поэтому
   чужой counter(section) с точкой не виден: место занял counter(shag)
   внутри кружка.

   ВТОРАЯ НАХОДКА (замер после первой выкладки на стенд). У родителя
   есть ещё один инлайновый <style> без id, тот же, что уже описан в
   комментарии к ВИД 1 выше (акцентный цвет кастомайзера, печатается в
   <head> позже bloki.css): он тоже метит .entry-content
   ol.wp-block-list > li::before и .entry-content ol:not([class]) >
   li::before, но только свойством color:#ed5c50, в одном правиле на
   полсотни несвязанных селекторов. Специфичность та же (класс,
   элемент, класс :not(), элемент, псевдоэлемент), но печатается он
   позже bloki.css, здесь порядок подключения нас не спасает: побеждал
   цвет родителя, фон при этом брался наш (свойство background там не
   тронуто). Решение то же, что уже применено в ВИД 1 к плашке рубрики:
   поднять специфичность своего селектора реальным классом-предком, а
   не !important. Взят .single, тот же класс, что уже сузил правило
   h2/h3 выше: тело <body> WordPress ставит его сама на странице
   отдельной статьи.

   Значения только из словаря. Кружок и зазор до текста:
   --rc-otstup-6 (32px) на диаметр, --rc-otstup-3 (12px) на зазор,
   отступ строки от текста ставим через calc() из этих же двух
   переменных, чтобы не вводить готовое число 44px как таковое.
   Промежуток между шагами берём из --rc-otstup-5 (24px), кегль номера
   из --rc-kegl-5 (14px, на ступень ниже кегля тела 17px, чтобы
   двузначный номер не подпирал стенки кружка). Цвет кружка и текста
   в нём взят из --rc-gc-accent и --rc-cg-bg (белый, тот же приём, что
   и у плашки рубрики card__category). По нынешним значениям словаря
   (slovar.css: --rc-gc-pagination: var(--rc-gc-accent)) фон кружка
   совпадает с фоном текущей страницы пагинации, но это не гарантия на
   все случаи: запасные значения var(…, N) у переменных разные, у
   --rc-gc-accent #303030 (functions.php), у --rc-gc-pagination #0097fb
   (style.css, functions.php). Если настройки разъедутся, разъедутся и
   цвета.
   border-radius: 50%, это форма круга, не число со шкалы радиусов (шкала про скругление
   углов прямоугольных карточек, не про круг). font-weight: 600 не со
   шкалы кеглей/отступов, вес общий на сайте для акцентных цифр и букв
   (тот же, что у h2/h3 выше).
   ══════════════════════════════════════════════════════════════════ */
/* Фикс-раунд: было list-style: none на .single .entry-content ol
   (переопределяло тот же список у родителя ради своего counter-reset).
   В Safari с VoiceOver list-style-type: none снимает со <ol> роль списка,
   читалка перестаёт называть его списком и говорить число пунктов, хотя
   родной номер (counter(section) с точкой) у нас и так не виден: место
   занимает counter(shag) в кружке из ::before ниже.
   list-style-type оставлен не-none (decimal, тип по умолчанию у <ol>),
   поэтому список остаётся списком для скринридера, а сам родной маркер
   гасится через ::marker { content: '' } ниже, глазом разницы нет: и
   list-style: none, и пустой ::marker дают маркеру нулевую ширину. */
.single .entry-content ol:not(.table-of-contents__list) {
    list-style-type: decimal;
    padding-left: 0;
    counter-reset: shag;
}
.single .entry-content ol:not(.table-of-contents__list) > li::marker {
    content: '';
}
.single .entry-content ol:not(.table-of-contents__list) > li {
    counter-increment: shag;
    position: relative;
    padding-left: calc(var(--rc-otstup-6, 32px) + var(--rc-otstup-3, 12px));
    margin-bottom: var(--rc-otstup-5, 24px);
}
.single .entry-content ol:not(.table-of-contents__list) > li::before {
    content: counter(shag);
    position: absolute;
    left: 0;
    top: 0;
    width: var(--rc-otstup-6, 32px);
    height: var(--rc-otstup-6, 32px);
    border-radius: 50%;
    /* Фикс-раунд: запасное значение было синим #0097fb, при нём фон
       кружка с белой цифрой давал контраст 3,08 против нормы 4,5.
       Сведено к боевому #303030, как и везде у --rc-gc-accent. */
    background: var(--rc-gc-accent, #303030);
    color: var(--rc-cg-bg, #ffffff);
    font-size: var(--rc-kegl-5, 14px);
    font-weight: 600;
    line-height: var(--rc-otstup-6, 32px);
    text-align: center;
}
