/* РАСКЛАДКИ ПОДВАЛА САЙТА - ЗЕРКАЛО, А НЕ СВОЯ ВЕРСИЯ.

   Источник: design/v4/site-footer/kit/ (1 файл). Собирает tools/adopt-footer.php;
   правка руками теряется при следующем срезе и теряется молча.

   Отступления от побайтовой копии объявлены В КОДЕ ИНСТРУМЕНТА и печатаются отчётом
   прогона. Их 8. */

/* ===== ls-set.css ===== */
/* ============================================================================
   Раскладки подвала сайта. Девять наборов.

   Префикс новых классов: ls-set-*  (проверен грепом против занятого списка:
   ls-a1..ls-b5, ls-st-*, ls-te-*, ls-hero*, ls-off*, ls-bar, ls-foot,
   ls-link, ls-page, ls-w, sc-se__edit)
   Корневой .ls-foot в этот список входит и НЕ является новым: его печатает
   рендерер sc_site_v2_footer(). Кит цепляется к нему, а не переобъявляет.
   Контейнер ls объявляет тема; здесь он не объявляется.

   ТРИ ПРАВИЛА ЭТОГО ФАЙЛА, каждое проверяется грепом:

   1. У каждого var() есть запасное значение, и у одного имени оно ОДНО на весь
      файл. Запасное - не копия объявления набора: разница между наборами живёт
      только в объявлении. Три разных запасных у одного имени расходятся с
      объявлениями молча, потому что обе стороны остаются валидными.
   2. У каждой переменной есть ПИСАТЕЛЬ, и он назван в таблице ниже. Потребитель
      без писателя не отличим глазами от работающего - так --ls-vp простояла
      мёртвой. Число, у которого писателя нет и не будет, пишется числом.
   3. Условия контейнерных запросов не оставляют щелей. Ширина бумаги ДРОБНАЯ
      (в замерах 374.8, 636.8, 960.8, 1376.8), поэтому пары max-width: 700px и
      min-width: 701px недостаточно: бумага 700.5 не попадает ни в одну ветку.
      Используется диапазонная форма: (width <= 700px) и (width > 700px).

   ПИСАТЕЛИ ПЕРЕМЕННЫХ

   | переменная                 | кто пишет                                    |
   | -------------------------- | -------------------------------------------- |
   | --ls-page-gut              | тема (поле сайта, общее с шапкой)            |
   | --ls-radius                | тема (окно настроек вида)                    |
   | --ls-dur-fast              | тема (длительности)                          |
   | --ls-foot-bg               | PHP (роль палитры, sc_foot.bg)               |
   | --ls-foot-ink              | PHP (считано от фона подвала)                |
   | --ls-foot-muted            | PHP (выведено из чернила, проверено 4.5)     |
   | --ls-foot-line             | PHP                                          |
   | --ls-foot-plate            | PHP (коробка снимка)                         |
   | --ls-foot-card-bg          | PHP (плоскость карточки C2, проверена ΔE76)  |
   | --ls-foot-head-font        | тема (гарнитура пары)                        |
   | --ls-foot-head-weight      | тема                                         |
   | --ls-foot-em-weight        | тема (вес выделенного, если он в паре есть)  |
   | --ls-foot-item             | тема (анкер шкалы)                           |
   | --ls-foot-pad              | НАБОР                                        |
   | --ls-foot-gap              | НАБОР                                        |
   | --ls-foot-gap-tight        | НАБОР                                        |
   | --ls-foot-head-gap         | НАБОР                                        |
   | --ls-foot-cols             | НАБОР + узкая ветка + второй порог           |
   | --ls-foot-legal-cols       | НАБОР + узкая ветка                          |
   | --ls-foot-align            | НАБОР + узкая ветка                          |
   | --ls-foot-items            | НАБОР + узкая ветка                          |
   | --ls-foot-justify          | НАБОР + узкая ветка                          |
   | --ls-foot-legal-justify    | НАБОР + узкая ветка                          |
   | --ls-foot-mark             | НАБОР + узкая ветка                          |
   | --ls-foot-mark-lh          | НАБОР                                        |
   | --ls-foot-mark-img         | НАБОР                                        |
   | --ls-foot-mark-box         | НАБОР (C2)                                   |
   | --ls-foot-hours-cols       | НАБОР (B3)                                   |
   | --ls-foot-area-pad-block   | НАБОР (D1)                                   |
   | --ls-foot-area-pad-inline  | НАБОР (D1)                                   |
   | --ls-foot-img-ratio        | НАБОР + узкая ветка                          |
   | --ls-foot-img-radius       | кит (.ls-set-band, явный ноль с причиной)    |
   | --ls-foot-bleed            | кит (ветка «бумага шире предела содержимого»)|
   | --ls-foot-nav-cols         | PHP печатает потребителя с запасным + ветка  |
   | --ls-foot-group-cols       | PHP печатает потребителя с запасным + ветка  |
   | --ls-foot-nav-gap          | никто: одно число на продукт, замер 48       |
   | --ls-foot-legal-gap        | никто: одно число на продукт                 |
   | --ls-foot-hit-gap          | никто: одно число на продукт, пол 8          |
   | --ls-foot-hit              | никто: правило проекта, 44 - и оно греппится |

   «Никто» означает: писателя нет и не планируется, значение живёт в запасном,
   имя оставлено ради грепа и единственности числа. Числа, у которых нет ни
   писателя, ни причины быть найденными грепом, стоят числами - зазор знак и
   ссылки (замер 24.39 - 36), мера описания (44ch), поле цели соцсети (11px).
   ============================================================================ */

/* --- 1. Корень подвала ---------------------------------------------------- */

.ls-foot {
  padding-block: var(--ls-foot-pad, clamp(48px, 6.67cqi, 96px));
  /* боковое поле принадлежит САЙТУ: шапка равна содержимому равна подвалу.
     Узкое значение приходит из темы вместе с --ls-page-gut - подвал его не
     переопределяет, иначе у одного имени стало бы два запасных. */
  padding-inline: var(--ls-page-gut, 24px);
  padding-block-end: calc(var(--ls-foot-pad, clamp(48px, 6.67cqi, 96px))
                        + env(safe-area-inset-bottom, 0px));
  background: var(--ls-foot-bg, transparent);
  color: var(--ls-foot-ink, inherit);
  /* clip, а не hidden: hidden создаёт прокручиваемый контейнер и ломает
     position: sticky у соседей. Нужен для вылета полосы у D2. */
  overflow-x: clip;
}

.ls-set-wrap {
  max-inline-size: var(--ls-foot-max, 1536px);
  margin-inline: auto;
  display: flex;
  flex-direction: column;
  row-gap: var(--ls-foot-gap, clamp(48px, 5cqi, 72px));
}

/* --- 2. Общие части ------------------------------------------------------- */

.ls-set-row {
  display: grid;
  grid-template-columns: var(--ls-foot-cols, 1fr);
  /* зазор знак и ссылки: замер 24.39 / 28.44 / - / 36. Не меняется ни веткой,
     ни набором, писателя нет - поэтому числом, а не именем. */
  column-gap: clamp(24px, 2.5cqi, 36px);
  row-gap: var(--ls-foot-gap, clamp(48px, 5cqi, 72px));
}

.ls-set-stack {
  display: flex;
  flex-direction: column;
  row-gap: var(--ls-foot-gap-tight, clamp(20px, 2.2cqi, 32px));
  align-items: var(--ls-foot-items, flex-start);
}

/* ОТСТУПЛЕНИЕ: сброс полей у текстовых узлов. Кит рассчитывает на сброс
   документа, а в редакторе его нет: замерено 25/25 у знака и 16/16 у строки
   прав, то есть подвал там выше, чем у посетителя. Соседние зеркала
   сбрасывают поля у себя - это же делает и подвал. */
.ls-set-mark, .ls-set-about, .ls-set-head, .ls-set-rights { margin: 0; }

.ls-set-mark {
  font-family: var(--ls-foot-head-font, inherit);
  font-weight: var(--ls-foot-head-weight, 500);
  font-size: var(--ls-foot-mark, 20px);
  /* 1.11 - минимум кириллицы: подъём прописных Ё и Й 0.906 при высоте
     прописных 0.719 требует 1.109. Ниже не идём ни у одной роли. */
  line-height: var(--ls-foot-mark-lh, 1.2);
  letter-spacing: -0.005em;
  text-align: var(--ls-foot-align, start);
  text-wrap: pretty;
  /* имя дела приходит любым, в том числе одним словом в 40 знаков */
  overflow-wrap: anywhere;
}

.ls-set-mark-img {
  display: block;
  block-size: var(--ls-foot-mark-img, min(48px, calc(var(--ls-foot-mark, 20px) * 1.6)));
  inline-size: auto;
  max-inline-size: 50%;
  border-radius: var(--ls-radius, 16px);
}

.ls-set-about {
  font-size: var(--ls-foot-item, 16px);
  line-height: 1.5;
  /* мера абзаца: 120 знаков в три строки. Писателя нет - числом. */
  max-inline-size: 44ch;
  text-wrap: pretty;
}

.ls-set-nav {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  /* число колонок решает КОД по числу пунктов и длине самого длинного: PHP
     печатает потребителя, а число подставляет в его запасное значение.
     Объявленная переменная бьёт запасное, поэтому узкая ветка побеждает. */
  grid-template-columns: var(--ls-foot-nav-cols, repeat(2, minmax(0, 1fr)));
  column-gap: var(--ls-foot-nav-gap, clamp(16px, 3.33cqi, 48px));
  row-gap: var(--ls-foot-hit-gap, clamp(8px, 1cqi, 16px));
}

.ls-set-nav > li { display: flex; }

/* ОТСТУПЛЕНИЕ: у семьи A навигация - РЯД С ПЕРЕНОСОМ, а не сетка.
   Кит объявляет grid одним правилом на девять наборов; листы A1, A2, C1 и C2
   говорят `flex` с переносом (у C - по центру). Замерено: сетка
   растягивает шесть пунктов на всю правую половину бумаги.
   Вторая половина починки - ширина: узел ссылок стоит внутри колонки-флекса
   с `align-items:flex-start` и потому ужимается ПО СОДЕРЖИМОМУ. Замерено на
   бумаге 1120: у B1 сетка занимала 120 точек из 615, и треть подвала стояла
   пустой; у A1 ряду было нечего распределять, и ссылки липли к знаку. */
.ls-set-nav, .ls-set-groups { inline-size: 100%; }
.ls-set-a1 .ls-set-nav, .ls-set-a2 .ls-set-nav,
.ls-set-c1 .ls-set-nav, .ls-set-c2 .ls-set-nav {
  display: flex;
  flex-wrap: wrap;
  column-gap: var(--ls-foot-nav-gap, clamp(16px, 3.33cqi, 48px));
  row-gap: var(--ls-foot-hit-gap, clamp(8px, 1cqi, 16px));
  justify-content: var(--ls-foot-justify, flex-start);
}

.ls-set-groups {
  display: grid;
  grid-template-columns: var(--ls-foot-group-cols, repeat(1, minmax(0, 1fr)));
  column-gap: var(--ls-foot-nav-gap, clamp(16px, 3.33cqi, 48px));
  row-gap: var(--ls-foot-gap, clamp(48px, 5cqi, 72px));
  align-items: start;
}

.ls-set-group {
  display: flex;
  flex-direction: column;
  row-gap: var(--ls-foot-head-gap, clamp(8px, 1.1cqi, 16px));
}

/* Заголовок группы: различие с пунктом несут РЕГИСТР и РАЗРЯДКА, а не вес -
   у половины пар розыгрыша единственный текстовый вес 400. Плюс два различия,
   не зависящих ни от гарнитуры, ни от цвета: заголовок не ссылка (ни цели, ни
   наведения) и зазор до списка вдвое теснее зазора между группами.
   На иврите прописных нет вовсе - остаются три из четырёх. */
.ls-set-head {
  font-weight: var(--ls-foot-em-weight, 600);
  font-size: var(--ls-foot-item, 16px);
  line-height: 1.4;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-align: var(--ls-foot-align, start);
  text-wrap: pretty;
}

.ls-set-line {
  block-size: 1px;
  background: var(--ls-foot-line, currentColor);
}

.ls-set-soc {
  display: flex;
  flex-wrap: wrap;
  justify-content: var(--ls-foot-justify, flex-start);
  gap: var(--ls-foot-hit-gap, clamp(8px, 1cqi, 16px));
}

.ls-set-soc-mark {
  /* контур постоянный: постоянная - самый монотонный вид функции. У эталонного конструктора
     20 / 14 / 16 / 18, то есть на планшете меньше, чем на телефоне. */
  inline-size: 22px;
  block-size: 22px;
  border-radius: calc(var(--ls-radius, 16px) * 0.5);
}

.ls-set-legal {
  display: grid;
  grid-template-columns: var(--ls-foot-legal-cols, 1fr);
  column-gap: var(--ls-foot-nav-gap, clamp(16px, 3.33cqi, 48px));
  row-gap: var(--ls-foot-legal-gap, clamp(16px, 1.67cqi, 24px));
  align-items: center;
}

.ls-set-rights {
  font-size: var(--ls-foot-item, 16px);
  line-height: 1.5;
  color: var(--ls-foot-muted, inherit);
  text-align: var(--ls-foot-align, start);
  text-wrap: pretty;
}

.ls-set-legal-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: var(--ls-foot-legal-justify, flex-end);
  column-gap: var(--ls-foot-legal-gap, clamp(16px, 1.67cqi, 24px));
  row-gap: var(--ls-foot-hit-gap, clamp(8px, 1cqi, 16px));
}

/* --- 3. Цели нажатия ------------------------------------------------------ */

/* min-* стоит на самой ссылке, а не псевдоэлементом: невидимое поле цели
   обрезается собственным overflow элемента, а чтение стиля у псевдоэлемента
   в этом случае врёт. Проверяется ПОПАДАНИЕМ. */
.ls-set-hit {
  min-block-size: var(--ls-foot-hit, 44px);
  display: inline-flex;
  align-items: center;
  color: inherit;
  font-size: var(--ls-foot-item, 16px);
  line-height: 1.5;
  text-decoration: none;
  text-wrap: pretty;
  transition: text-decoration-color var(--ls-dur-fast, 120ms) linear;
}

.ls-set-hit-box {
  min-inline-size: var(--ls-foot-hit, 44px);
  justify-content: center;
  column-gap: 8px;
  padding-inline: 11px;
  border-radius: var(--ls-radius, 16px);
}

/* Наведение подчёркиванием, а не цветом: второго чернила в палитре нет,
   а подчёркивание видно во всех 24 палитрах. */
.ls-set-hit:hover { text-decoration: underline; text-underline-offset: 3px; }

.ls-set-hit--legal { text-decoration: underline; text-underline-offset: 3px; }
.ls-set-hit--legal:hover { text-decoration-thickness: 2px; }

/* Последняя часть - голый :focus-visible, поэтому обязателен :not(.sc-se__edit):
   иначе рамка слоя красит правимый текст вместо системной голубой. */
.ls-foot .ls-set-hit:not(.sc-se__edit):focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 2px;
}

/* Латинский остров: без изоляции 09:00-19:00 и +7 495 ... в ивритской строке
   переворачиваются и выглядят настоящими, а не поломанными. */
.ls-set-lat { unicode-bidi: isolate; }

/* --- 4. Часы работы ------------------------------------------------------- */

/* Колонка дня auto: диапазон - четыре знака (Вс-Чт), одиночный день - два.
   Диапазон склеивается по КОЛЬЦУ недели от start_of_week (04-DATA-CONTRACT). */
.ls-set-hours {
  display: grid;
  grid-template-columns: var(--ls-foot-hours-cols, auto minmax(0, 1fr));
  column-gap: var(--ls-foot-gap-tight, clamp(20px, 2.2cqi, 32px));
  row-gap: var(--ls-foot-hit-gap, clamp(8px, 1cqi, 16px));
}

.ls-set-hours > * { white-space: nowrap; }

/* --- 5. Снимок ------------------------------------------------------------ */

/* Коробку задаёт раскладка, вписывание cover. Постоянной высоты нет ни при
   одной ширине: соотношение приходит переменной.
   Пустой источник не печатает тег ВОВСЕ - пустой адрес браузер разрешает в
   адрес текущей страницы: битая рамка и второй полный запрос страницы.
   Коробка при этом остаётся: место занято всегда. */
.ls-set-shot {
  inline-size: 100%;
  aspect-ratio: var(--ls-foot-img-ratio, 16 / 9);
  border-radius: var(--ls-foot-img-radius, var(--ls-radius, 16px));
  background: var(--ls-foot-plate, transparent);
  overflow: hidden;
}

.ls-set-shot > img {
  inline-size: 100%;
  block-size: 100%;
  object-fit: cover;
  display: block;
}

/* Полоса D2. Вылет за край - единственный в проекте.
   Основная запись: отрицательное поле, равное боковому полю сайта.
   Если бумага ШИРЕ предела содержимого, поля не хватит - остаётся белая рамка
   в половину разницы; тогда работает вторая запись (§8). */
.ls-set-band {
  margin-inline: var(--ls-foot-bleed, calc(-1 * var(--ls-page-gut, 24px)));
  /* ОТСТУПЛЕНИЕ: собственного поля у полосы нет - зазор ей даёт колонка
     `.ls-set-wrap`, и второе объявление складывалось с ним. Замерено 149.4
     против 74.7 таблицы на бумаге 1120, и так на всех пяти ширинах. */
  inline-size: auto;
  /* Скругление снято ЯВНО: углы уезжают за край бумаги и не видны ни при
     какой ширине. Число, которое ничего не делает, хуже отсутствующего. */
  --ls-foot-img-radius: 0;
}

/* --- 6. Значения по наборам ---------------------------------------------- */

/* Имя переменной одно на продукт, значение объявляет набор. Запасное значение
   потребителя при этом остаётся одним и базовым - оно не копия ни одного из
   объявлений ниже. */

.ls-set-a1 {
  --ls-foot-cols: auto minmax(0, 1fr);
  --ls-foot-legal-cols: minmax(0, 1fr) auto;
  --ls-foot-mark: 25px;
  --ls-foot-mark-img: min(48px, calc(var(--ls-foot-mark, 20px) * 1.6));
  --ls-foot-align: start;
  --ls-foot-justify: flex-end;
}

.ls-set-a2 {
  --ls-foot-cols: 1fr;
  --ls-foot-legal-cols: 1fr;
  --ls-foot-mark: 31.25px;
  --ls-foot-mark-img: min(56px, calc(var(--ls-foot-mark, 20px) * 1.6));
  --ls-foot-align: center;
  --ls-foot-justify: center;
  --ls-foot-legal-justify: center;
  --ls-foot-items: center;
}

.ls-set-b1 {
  --ls-foot-cols: repeat(2, minmax(0, 1fr));
  --ls-foot-legal-cols: minmax(0, 1fr) auto;
  --ls-foot-mark: 25px;
}

.ls-set-b2 {
  --ls-foot-cols: 1fr;
  --ls-foot-legal-cols: minmax(0, 1fr) auto;
  --ls-foot-mark: 25px;
}

.ls-set-b3 {
  --ls-foot-cols: repeat(2, minmax(0, 1fr));
  --ls-foot-legal-cols: minmax(0, 1fr) auto;
  /* знак на втором плане - единственная величина пакета без узкой ветки */
  --ls-foot-mark: 20px;
  --ls-foot-hours-cols: auto minmax(0, 1fr);
  --ls-foot-justify: flex-start;
}

.ls-set-c1 {
  --ls-foot-pad: clamp(32px, 4.17cqi, 60px);
  --ls-foot-gap: clamp(24px, 5cqi, 72px);
  --ls-foot-cols: 1fr;
  --ls-foot-mark: 48.83px;
  --ls-foot-mark-lh: 1.11;
  --ls-foot-mark-img: min(64px, calc(var(--ls-foot-mark, 20px) * 1.31));
  --ls-foot-align: center;
  --ls-foot-justify: center;
  --ls-foot-legal-justify: center;
  --ls-foot-items: center;
}

.ls-set-c2 {
  /* поле вокруг карточки; подложки у самого подвала нет вовсе */
  --ls-foot-pad: clamp(16px, 1.67cqi, 24px);
  --ls-foot-bg: transparent;
  --ls-foot-gap: clamp(24px, 5cqi, 72px);
  --ls-foot-mark: 48.83px;
  --ls-foot-mark-lh: 1.11;
  --ls-foot-mark-img: min(64px, calc(var(--ls-foot-mark, 20px) * 1.31));
  --ls-foot-mark-box: max(96px, calc(var(--ls-foot-mark, 20px) * 2));
  --ls-foot-align: center;
  --ls-foot-justify: center;
  --ls-foot-legal-justify: center;
  --ls-foot-items: center;
}

/* Карточка C2. Отличие от бумаги проверяется ΔE76 по CIE Lab, порог 6:
   пороги WCAG отвечают на вопрос о читаемости знаков, а между двумя
   плоскостями знаков нет. Тени нет - отделение держат фон и поле. */
.ls-set-card {
  background: var(--ls-foot-card-bg, transparent);
  border-radius: var(--ls-radius, 16px);
  padding: clamp(32px, 4.17cqi, 60px);
  display: flex;
  flex-direction: column;
  row-gap: var(--ls-foot-gap, clamp(48px, 5cqi, 72px));
}

/* Доля высоты в блочном направлении НЕ работает: процент считается от заданной
   высоты родителя, у карточки её нет, доля разрешается в auto и запись молча
   сводится к полу. Выражаем через вычислимое: два кегля крупной роли дают
   97.66 против замеренного пола 96. */
.ls-set-mark-box {
  min-block-size: var(--ls-foot-mark-box, max(96px, calc(var(--ls-foot-mark, 20px) * 2)));
  display: flex;
  align-items: center;
  justify-content: center;
}

.ls-set-d1 {
  /* вертикального поля у контейнера нет вовсе - его носят области */
  --ls-foot-pad: 0px;
  --ls-foot-cols: 1fr;
  --ls-foot-gap: clamp(24px, 5cqi, 72px);
  --ls-foot-gap-tight: clamp(16px, 1.67cqi, 24px);
  --ls-foot-mark: 25px;
  --ls-foot-area-pad-block: clamp(32px, 4.17cqi, 60px);
  --ls-foot-area-pad-inline: clamp(20px, 2.5cqi, 36px);
  --ls-foot-img-ratio: 16 / 9;
}

/* Область D1. Линии вертикальные - по началу области. На узком становятся
   горизонтальными: вертикальная линия между блоками друг под другом не значит
   ничего. Ось одной переменной не выражается (разные свойства), поэтому пара
   имён; сумма толщин ВСЕГДА равна 1 - это и есть проверка.
   Системная полоса складывается с полем ПОСЛЕДНЕЙ области: у контейнера
   вертикального поля нет вовсе, складывать нечем. */
.ls-set-area {
  border-inline-start: var(--ls-foot-rule-inline, 0px) solid var(--ls-foot-line, currentColor);
  border-block-start: var(--ls-foot-rule-block, 1px) solid var(--ls-foot-line, currentColor);
  padding-block: var(--ls-foot-area-pad-block, clamp(32px, 4.17cqi, 60px));
  padding-inline: var(--ls-foot-area-pad-inline, clamp(20px, 2.5cqi, 36px));
  padding-block-end: calc(var(--ls-foot-area-pad-block, clamp(32px, 4.17cqi, 60px))
                        + env(safe-area-inset-bottom, 0px));
  display: flex;
  flex-direction: column;
  row-gap: var(--ls-foot-gap, clamp(48px, 5cqi, 72px));
}

/* ОТСТУПЛЕНИЕ: кит объявил хвосту области только положение, но не раскладку
   детей. У второй области D1 их трое - контакты и соцсети, - а `.ls-set-hit`
   это `inline-flex`: телефон и почта вставали ОДНОЙ строкой без пробела.
   Колонка и тесный зазор взяты у листа D1 дословно. */
.ls-set-area-tail {
  margin-block-start: auto;
  display: flex;
  flex-direction: column;
  align-items: var(--ls-foot-items, flex-start);
  row-gap: var(--ls-foot-hit-gap, clamp(8px, 1cqi, 16px));
}

.ls-set-d2 {
  --ls-foot-cols: 1fr;
  --ls-foot-gap: clamp(64px, 6.67cqi, 96px);
  --ls-foot-mark: 25px;
  --ls-foot-img-ratio: 16 / 9;
}

/* --- 7. Узкая ветка. Порог 700 ВКЛЮЧИТЕЛЬНО ------------------------------ */

/* Контейнерный запрос к ширине БУМАГИ. Медиазапросов к ширине ОКНА нет ни
   одного: сайт живёт внутри редактора, где бумага 390 стоит в окне 1440.
   Диапазонная форма, а не max-width: ширина бумаги дробная. */
@container ls (width <= 700px) {
  .ls-set-a1 { --ls-foot-cols: 1fr; --ls-foot-legal-cols: 1fr;
               --ls-foot-mark: 20px; --ls-foot-align: center;
               --ls-foot-justify: center; --ls-foot-legal-justify: center;
               --ls-foot-items: center; }
  .ls-set-a2 { --ls-foot-mark: 25px; }
  .ls-set-b1 { --ls-foot-cols: 1fr; --ls-foot-legal-cols: 1fr;
               --ls-foot-nav-cols: repeat(2, minmax(0, 1fr));
               --ls-foot-mark: 20px; --ls-foot-align: center;
               --ls-foot-justify: center; --ls-foot-legal-justify: center;
               --ls-foot-items: center; }
  .ls-set-b2 { --ls-foot-legal-cols: 1fr;
               --ls-foot-group-cols: repeat(1, minmax(0, 1fr));
               --ls-foot-nav-cols: repeat(1, minmax(0, 1fr));
               --ls-foot-mark: 20px; --ls-foot-align: center;
               --ls-foot-justify: center; --ls-foot-legal-justify: center;
               --ls-foot-items: center; }
  .ls-set-b3 { --ls-foot-cols: 1fr; --ls-foot-legal-cols: 1fr;
               --ls-foot-nav-cols: repeat(2, minmax(0, 1fr));
               --ls-foot-align: center; --ls-foot-justify: center;
               --ls-foot-legal-justify: center; --ls-foot-items: center; }
  .ls-set-c1,
  .ls-set-c2 { --ls-foot-mark: 31.25px; --ls-foot-legal-cols: 1fr; }
  .ls-set-d1 { --ls-foot-mark: 20px; }
  .ls-set-d2 { --ls-foot-cols: 1fr;
               --ls-foot-group-cols: repeat(1, minmax(0, 1fr));
               --ls-foot-mark: 20px; }
}

/* --- 8. Широкая ветка и второй порог проекта ----------------------------- */

/* D2: ряд и полоса переключаются УЗОСТЬЮ, второй порог здесь не нужен.
   (width > 700px) без щели смыкается с (width <= 700px) выше. */
@container ls (width > 700px) {
  .ls-set-d2 { --ls-foot-cols: 1fr 1.79fr;
               --ls-foot-group-cols: repeat(3, minmax(0, 1fr));
               --ls-foot-img-ratio: 7.42 / 1; }
}

/* ОТСТУПЛЕНИЕ: средняя ветка B2. Таблица чисел даёт две колонки групп между
   700 и 1040, а кит объявляет только узкую (одна) и широкую (три из запасного
   PHP). Замерено на 1024: три колонки вместо двух. */
/* ОТСТУПЛЕНИЕ: у семьи C строка прав и правовые ссылки - соседи одной сетки
   (лист C1: repeat(1 + число правовых)), поэтому обёртка ссылок перестаёт быть
   коробкой. Признак печатает PHP, порог - тот же 700. */
@container ls (width > 700px) {
  .ls-set-legal-row--flat { display: contents; }
}

@container ls (700px < width <= 1040px) {
  .ls-set-b2 { --ls-foot-group-cols: repeat(2, minmax(0, 1fr)); }
}

@container ls (width >= 1040px) {
  /* B1, B3: равные половины становятся неравными долями. Мера в знаках имеет
     потолок в долях - ch зависит от гарнитуры, а гарнитура разыгрывается. */
  .ls-set-b1 { --ls-foot-cols: minmax(0, min(34ch, 30%)) minmax(0, 1fr); }
  .ls-set-b2 { --ls-foot-cols: minmax(0, min(34ch, 30%)) minmax(0, 1fr); }
  .ls-set-b3 { --ls-foot-cols: minmax(0, min(40ch, 36%)) minmax(0, 1fr); }
  /* D1: области из стопки в разворот, и линии меняют ось.
     Сумма толщин остаётся равной 1. */
  .ls-set-d1 { --ls-foot-cols: repeat(2, minmax(0, 1fr));
               --ls-foot-rule-inline: 1px;
               --ls-foot-rule-block: 0px;
               --ls-foot-img-ratio: 4.17 / 1; }
}

/* Вторая форма вылета: нужна, когда бумага ШИРЕ предела содержимого и
   отрицательного поля не хватает - иначе остаётся белая рамка в половину
   разницы. Требует контейнерного контекста - он уже объявлен темой под
   пороги, новых объявлений не нужно. Условие строгое и без щели. */
@container ls (width > 1536px) {
  .ls-set-band { --ls-foot-bleed: calc(50% - 50cqw); }
}

/* --- 9. Движение --------------------------------------------------------- */

/* Единственный @media в ките, и он к ПРЕДПОЧТЕНИЮ, а не к ширине окна.
   Запрет касается запросов к ширине окна: их ноль. */
@media (prefers-reduced-motion: reduce) {
  .ls-set-hit { transition-duration: 0s; }
}

