/* ═══════════════════════════════════════════════════════════════════════════════════════════════
   TOTAL FILTER — раскладка. Оформление берётся из версии 7 (её классы кнопок, шрифты, радиусы),
   здесь задаётся только расстановка блоков и поведение при четырёх положениях.

   Горизонтальные положения (сверху, снизу): блоки идут группами в ряд.
   Боковые (слева, справа): блоки один под другим в порядке сужения; ширина не больше раскрытого
   левого меню; длинные названия переносятся на две строки, а не обрезаются.
   ═══════════════════════════════════════════════════════════════════════════════════════════════ */

.v7-tf-wrap { display: grid; gap: var(--v5-gap, 0.625rem); align-items: start; }
.v7-tf-wrap.dock-top { grid-template-rows: auto 1fr; }
.v7-tf-wrap.dock-bottom { grid-template-rows: 1fr auto; }
.v7-tf-wrap.dock-bottom .v7-tf { order: 2; }

/* ширина бокового фильтра = ширина раскрытого левого меню, шире он не растягивается */
.v7-tf-wrap.dock-left,
.v7-tf-wrap.dock-right { grid-template-columns: var(--v5-sidebar-expanded, 15rem) 1fr; }
.v7-tf-wrap.dock-right { grid-template-columns: 1fr var(--v5-sidebar-expanded, 15rem); }
.v7-tf-wrap.dock-right .v7-tf { order: 2; }

.v7-tf { display: grid; gap: var(--v5-gap, 0.625rem); padding: var(--em-space-2, 0.5rem) var(--em-space-3, 0.75rem); }
.v7-tf-bar { display: flex; align-items: center; gap: var(--em-space-2, 0.5rem); min-block-size: 2.5rem; }
.v7-tf-crumb { display: inline-flex; align-items: center; gap: 0.375rem; }
.v7-tf-tools { margin-inline-start: auto; display: flex; align-items: center; gap: 0.25rem; flex-wrap: wrap; }
.v7-tf-sep { inline-size: 1px; block-size: 1.25rem; background: var(--v5-border-light, #e4e0d4); margin-inline: 0.25rem; }

/* ── БЛОКИ ─────────────────────────────────────────────────────────────────────────────────── */
.v7-tf-blocks { display: flex; flex-wrap: wrap; gap: var(--v5-gap, 0.625rem); align-items: flex-start; }
.v7-tf-wrap.dock-left .v7-tf-blocks,
.v7-tf-wrap.dock-right .v7-tf-blocks { flex-direction: column; flex-wrap: nowrap; }

.v7-tf-block {
  flex: 0 1 auto; min-inline-size: 0;
  border: 1px solid var(--v5-border-light, #e4e0d4); border-radius: var(--em-radius-sm, 0.5rem);
  background: var(--v5-card, #fff);
}
.v7-tf-wrap.dock-left .v7-tf-block,
.v7-tf-wrap.dock-right .v7-tf-block { inline-size: 100%; }

.v7-tf-head {
  display: flex; align-items: center; gap: 0.375rem; inline-size: 100%;
  min-block-size: 2rem; padding: 0 0.625rem; border: 0; background: none; cursor: pointer;
  font-size: 0.78125rem; font-weight: 600; color: var(--v5-text, #244154); text-align: start;
}
.v7-tf-head:hover { background: color-mix(in srgb, var(--v5-text, #244154) 4%, transparent); border-radius: var(--em-radius-sm, 0.5rem); }
.v7-tf-title { white-space: nowrap; }
.v7-tf-count {
  margin-inline-start: auto; font-style: normal; font-size: 0.6875rem; font-weight: 600;
  min-inline-size: 1.125rem; block-size: 1.125rem; display: grid; place-items: center;
  border-radius: 0.5625rem; background: color-mix(in srgb, var(--v5-text, #244154) 10%, transparent);
}

.v7-tf-body { display: flex; flex-wrap: wrap; gap: 0.375rem; padding: 0 0.625rem 0.625rem; }
.v7-tf-wrap.dock-left .v7-tf-body,
.v7-tf-wrap.dock-right .v7-tf-body { flex-direction: column; flex-wrap: nowrap; }

/* ── ПУНКТ ВЫБОРА ──────────────────────────────────────────────────────────────────────────────
   Длинное название переносится на две строки: обрезка и многоточие не применяются. */
.v7-tf-item {
  display: inline-flex; align-items: center; text-align: start;
  min-block-size: 2rem; padding: 0.3125rem 0.625rem;
  border: 1px solid var(--v5-border-light, #e4e0d4); border-radius: var(--em-radius-sm, 0.5rem);
  background: var(--v5-card, #fff); color: var(--v5-text, #244154);
  font-size: 0.78125rem; font-weight: 400; cursor: pointer;
  white-space: normal; overflow-wrap: anywhere; line-height: 1.35;
}
.v7-tf-item:hover { border-color: var(--v5-border, #d8d3c6); }
.v7-tf-item.is-active {
  font-weight: 600;
  border-color: color-mix(in srgb, var(--v5-text, #244154) 35%, transparent);
  background: color-mix(in srgb, var(--v5-text, #244154) 6%, var(--v5-card, #fff));
}
.v7-tf-wrap.dock-left .v7-tf-item,
.v7-tf-wrap.dock-right .v7-tf-item { inline-size: 100%; }

.v7-tf-empty { margin: 0; padding: 2px 0 0.375rem; font-size: 0.71875rem; color: var(--v5-muted, #a3a099); }

/* значки управления — размеры версии 7; при мелком размере линия чуть плотнее (правило Apple) */
.v7-tf .v5-icon-button svg { inline-size: 0.875rem; block-size: 0.875rem; }

.v7-tf-area {
  display: grid; gap: 0.375rem; place-content: center; min-block-size: 40vh; text-align: center;
  color: var(--v5-secondary, #6e6b64);
}
.v7-tf-area b { font-size: 0.875rem; font-weight: 600; color: var(--v5-text, #244154); }
.v7-tf-area span { font-size: 0.78125rem; }

/* боковое положение: заголовок и контролы не втискиваются в одну строку */
.v7-tf-wrap.dock-left .v7-tf-bar,
.v7-tf-wrap.dock-right .v7-tf-bar { flex-direction: column; align-items: stretch; gap: 0.375rem; }
.v7-tf-wrap.dock-left .v7-tf-tools,
.v7-tf-wrap.dock-right .v7-tf-tools { margin-inline-start: 0; }
.v7-tf-wrap.dock-left .v7-tf-crumb,
.v7-tf-wrap.dock-right .v7-tf-crumb { justify-content: flex-start; }

/* заголовок фильтра не переносится по словам */
.v7-tf-crumb { white-space: nowrap; }

/* ── ПРАВИЛО APPLE ДЛЯ МЕЛКИХ РАЗМЕРОВ ────────────────────────────────────────────────────────
   На малых кеглях тонкий штрих и лёгкое начертание теряются: подписи 11–12,5 идут не легче 400,
   а контуры значков 14 px получают чуть большую толщину линии (это же правило задано в скрипте). */
.v7-tf-empty, .v7-tf-count { font-weight: 500; }
.v7-tf .v5-icon-button svg { stroke-width: 1.75; }

/* ── ПО БИБЛИОТЕКЕ СТИЛЕЙ §2.3 ────────────────────────────────────────────────────────────── */
/* крошка титлбара: значок 14, подпись рядом — как в фильтре пятой версии */
.v7-tf-crumb svg { inline-size: 0.875rem; block-size: 0.875rem; flex: 0 0 auto; stroke-width: 1.75; }

/* ряд разделов — карусель кнопок-значков 32×32, радиус 12, иконка 16 */
.v7-tf-sections { display: flex; align-items: center; gap: 0.375rem; min-inline-size: 0; }
.v7-tf-track { display: flex; gap: 0.375rem; overflow: hidden; scroll-behavior: smooth; }
.v7-tf-sec {
  flex: 0 0 auto; inline-size: 2rem; block-size: 2rem; padding: 0;
  display: grid; place-items: center;
  border: 1px solid var(--v5-border-light, #e4e0d4); border-radius: var(--em-radius-lg, 0.75rem);
  background: var(--v5-card, #fff); color: var(--v5-text, #244154); cursor: pointer;
}
.v7-tf-sec svg { inline-size: 1rem; block-size: 1rem; stroke-width: 1.6; }
.v7-tf-sec.is-active {
  border-color: color-mix(in srgb, var(--icon-accent, var(--v5-text, #244154)) 55%, transparent);
  background: color-mix(in srgb, var(--icon-accent, var(--v5-text, #244154)) 12%, var(--v5-card, #fff));
}
.v7-tf-arrow { flex: 0 0 auto; }

/* подразделы и отрасли — пилюли: радиус 100, 12,5/600 при выборе */
.v7-tf-item { border-radius: 6.25rem; padding: 0.3125rem 0.75rem; }

/* боковая колонка: до 280, значки в два ряда, поля столбиком (решение из истории) */
.v7-tf-wrap.dock-left, .v7-tf-wrap.dock-right { --v7-tf-side: min(17.5rem, var(--v5-sidebar-expanded, 17.5rem)); }
.v7-tf-wrap.dock-left { grid-template-columns: var(--v7-tf-side) 1fr; }
.v7-tf-wrap.dock-right { grid-template-columns: 1fr var(--v7-tf-side); }
.v7-tf-wrap.dock-left .v7-tf-track, .v7-tf-wrap.dock-right .v7-tf-track { flex-wrap: wrap; overflow: visible; }

/* если значка отрасли в сборке нет — показываем её букву тем же кеглем */
.v7-tf-code { font-size: 0.78125rem; font-weight: 600; }

/* ── РЯДЫ ПО УРОВНЯМ (устройство пятой версии) ────────────────────────────────────────────────
   Блоки идут не карточками с заголовками, а рядами: первый ряд — уровень 1, второй — уровень 2
   и так далее; рамок и подписей у рядов нет, разделяет их только зазор. */
/* CHG-0974 (решение автора 26.08): в горизонтальном положении уровни рассредоточены
   ПО ГОРИЗОНТАЛИ, не столбиком; широкие блоки (параметры/характеристики/владелец/
   классификация) занимают свою строку целиком */
.v7-tf-wrap.dock-top .v7-tf-blocks,
.v7-tf-wrap.dock-bottom .v7-tf-blocks { flex-direction: row; flex-wrap: wrap; gap: 0.5rem 1rem; align-items: flex-start; }
.v7-tf-wrap.dock-top .v7-tf-block,
.v7-tf-wrap.dock-bottom .v7-tf-block { inline-size: auto; flex: 0 1 auto; min-inline-size: 0; border: 0; background: none; }
.v7-tf-wrap.dock-top .v7-tf-block[data-block="BASE"],
.v7-tf-wrap.dock-top .v7-tf-block[data-block="TRAITS"],
.v7-tf-wrap.dock-top .v7-tf-block[data-block="OWNER"],
.v7-tf-wrap.dock-top .v7-tf-block[data-block="CLASSIFIER"],
.v7-tf-wrap.dock-bottom .v7-tf-block[data-block="BASE"],
.v7-tf-wrap.dock-bottom .v7-tf-block[data-block="TRAITS"],
.v7-tf-wrap.dock-bottom .v7-tf-block[data-block="OWNER"],
.v7-tf-wrap.dock-bottom .v7-tf-block[data-block="CLASSIFIER"] { flex: 1 1 100%; }
.v7-tf-wrap.dock-top .v7-tf-head,
.v7-tf-wrap.dock-bottom .v7-tf-head { display: none; }
.v7-tf-wrap.dock-top .v7-tf-body,
.v7-tf-wrap.dock-bottom .v7-tf-body { padding: 0; }

/* поля нижних блоков — отдельной строкой в несколько колонок, как в пятой */
.v7-tf-wrap.dock-top .v7-tf-block[data-block="BASE"] .v7-tf-body,
.v7-tf-wrap.dock-top .v7-tf-block[data-block="ATTRIBUTES"] .v7-tf-body {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(13.75rem, 1fr)); gap: 0.625rem;
}

/* пустой ряд подписан: заголовок остаётся, чтобы строка не читалась как безымянная */
.v7-tf-wrap.dock-top .v7-tf-block:has(.v7-tf-empty) .v7-tf-head,
.v7-tf-wrap.dock-bottom .v7-tf-block:has(.v7-tf-empty) .v7-tf-head {
  display: flex; min-block-size: 1.375rem; padding: 0; pointer-events: none;
  font-size: 0.71875rem; font-weight: 600; color: var(--v5-secondary, #6e6b64);
}

/* ── ПОИСК В ПЕРВОМ РЯДУ (устройство пятой версии) ────────────────────────────────────────────
   Стоит справа от карусели и забирает остаток строки; рамка, радиус и кегль — версии 7. */
.v7-tf-search {
  flex: 1 1 20rem; min-inline-size: 12.5rem;
  display: flex; align-items: center; gap: var(--em-space-2, 0.5rem);
  min-block-size: 2rem; padding: 0 0.625rem;
  border: 1px solid var(--v5-border-light, #e4e0d4); border-radius: var(--em-radius-sm, 0.5rem);
  background: var(--v5-card, #fff);
}
.v7-tf-search:focus-within { border-color: var(--v5-border, #d8d3c6); }
.v7-tf-search svg { inline-size: 1rem; block-size: 1rem; stroke-width: 1.6; color: var(--v5-secondary, #6e6b64); flex: 0 0 auto; }
.v7-tf-search input {
  inline-size: 100%; min-inline-size: 0; border: 0; outline: 0; background: transparent;
  color: var(--v5-text, #244154); font-size: 0.78125rem; font-weight: 400;
}
.v7-tf-search input::placeholder { color: var(--v5-muted, #a3a099); }
/* в боковом положении поиск встаёт отдельной строкой под каруселью */
.v7-tf-wrap.dock-left .v7-tf-search, .v7-tf-wrap.dock-right .v7-tf-search { flex-basis: 100%; }

/* ── СТРОКА ПОЛЕЙ БАЗОВОГО ВИДА ───────────────────────────────────────────────────────────────
   Четыре колонки: подпись со значком сверху, поле снизу — набор пятой версии. */
.v7-tf-fields { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--em-space-2, 0.5rem); }
.v7-tf-fields label { display: grid; gap: 0.25rem; min-inline-size: 0; font-size: 0.75rem; font-weight: 600; color: var(--v5-secondary, #6e6b64); }
.v7-tf-fields label span { display: flex; align-items: center; gap: var(--em-space-2, 0.5rem); min-inline-size: 0; white-space: nowrap; }
.v7-tf-fields label span svg { inline-size: 0.875rem; block-size: 0.875rem; stroke-width: 1.75; flex: 0 0 auto; }
.v7-tf-fields input, .v7-tf-fields select {
  inline-size: 100%; min-block-size: 2rem; padding: 0 0.625rem;
  border: 1px solid var(--v5-border, #d8d3c6); border-radius: var(--em-radius-sm, 0.5rem);
  background: var(--v5-card, #fff); color: var(--v5-text, #244154);
  font-size: 0.78125rem; font-weight: 400; outline: 0;
}
.v7-tf-fields input::placeholder { color: var(--v5-muted, #a3a099); }
.v7-tf-wrap.dock-left .v7-tf-fields, .v7-tf-wrap.dock-right .v7-tf-fields { grid-template-columns: minmax(0, 1fr); }

/* хвост крошки: выбранный раздел или отрасль подписью рядом со словом «Фильтр» */
.v7-tf-crumb-tail { font-style: normal; font-weight: 400; color: var(--v5-secondary, #6e6b64); }

/* ряды каруселей не переносятся: значки идут строкой, лишние прячет прокрутка со стрелками */
.v7-tf-wrap.dock-top .v7-tf-sections, .v7-tf-wrap.dock-bottom .v7-tf-sections { flex-wrap: nowrap; }

/* первый ряд занимает всю ширину окна: поиск добирает остаток строки, как в пятой версии */
.v7-tf-sections { inline-size: 100%; }
.v7-tf-sections > .v7-tf-track { flex: 0 1 auto; }

/* ── ЗНАЧКИ РЯДОВ БЕЗ ПЛАШЕК (правка автора) ──────────────────────────────────────────────────
   Кнопка-значок ряда живёт по правилам версии 7: рамки и белой подложки нет, размер кнопки 32,
   контур значка 14 с толщиной 1,4 — те же величины, что у кнопок действий верхней панели.
   Подложка появляется только у выбранного значка. */
.v7-tf-sec { border: 0; background: transparent; border-radius: var(--em-radius-sm, 0.5rem); }
.v7-tf-sec svg { inline-size: 0.875rem; block-size: 0.875rem; stroke-width: 1.4; }
.v7-tf-sec:hover { background: color-mix(in srgb, var(--v5-text, #244154) 5%, transparent); }
.v7-tf-sec.is-active {
  border: 0;
  background: color-mix(in srgb, var(--icon-accent, var(--v5-text, #244154)) 10%, transparent);
}

/* ── ЕДИНЫЙ СТИЛЬ ЗНАЧКОВ САЙТА 7 (сверка 2026-08-24) ─────────────────────────────────────────
   На сайте версии 7 все значки одинаковы: контур 14 при толщине 1,4. В фильтре было три набора
   величин (1,75 у титлбара и полей, 1,6 у поиска, 1,4 у рядов) — приводим к одному. */
.v7-tf svg,
.v7-tf .v5-icon-button svg,
.v7-tf-crumb svg,
.v7-tf-search svg,
.v7-tf-fields label span svg { inline-size: 0.875rem; block-size: 0.875rem; stroke-width: 1.4; }

/* Выделение выбранного значка ряда — ровно как у активной кнопки версии 7:
   подложка терракотовым 18 %, рамки нет, радиус 8. Серой плашки быть не должно. */
.v7-tf-sec.is-active {
  color: var(--v5-text, #244154);
  background: color-mix(in srgb, var(--section-accent, #d97757) 18%, transparent);
  border: 0; box-shadow: none;
}

/* ── УРОВНИ ОТКРЫВАЮТСЯ ПООДИНОЧКЕ (поручение автора 2026-08-25) ─────────────────────────────
   Планка уровня видна во всех положениях: тонкая строка с шевроном и названием; клик
   сворачивает или раскрывает только свой уровень. Прежнее скрытие планок сверху отменено. */
.v7-tf-wrap.dock-top .v7-tf-head,
.v7-tf-wrap.dock-bottom .v7-tf-head {
  display: flex; min-block-size: 1.375rem; padding: 0 0.25rem; pointer-events: auto;
  font-size: 0.71875rem; font-weight: 600; color: var(--v5-secondary, #6e6b64);
}
.v7-tf-chev {
  inline-size: 0.875rem; block-size: 0.875rem; flex: 0 0 auto; position: relative;
  transition: transform 160ms ease;
}
.v7-tf-chev::before {
  content: ""; position: absolute; inset-block-start: 0.25rem; inset-inline-start: 0.3125rem;
  inline-size: 0.3125rem; block-size: 0.3125rem;
  border-inline-end: 1.4px solid currentColor; border-block-end: 1.4px solid currentColor;
  transform: rotate(45deg);                 /* уголок вниз = уровень раскрыт */
}
.v7-tf-head[aria-expanded="false"] .v7-tf-chev { transform: rotate(-90deg); }

/* ── БОКОВОЙ СТОЛБИК: содержимое расходится равномерно ───────────────────────────────────────
   При закреплении слева или справа значки уровня выстраиваются ровной сеткой на всю ширину
   колонки (а не одной длинной лентой), пилюли и поля — во всю ширину. Стрелки карусели
   в столбике не нужны: прокрутки нет, всё видно сразу. */
.v7-tf-wrap.dock-left .v7-tf-track,
.v7-tf-wrap.dock-right .v7-tf-track {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(2rem, 1fr));
  justify-items: center; gap: 0.375rem; inline-size: 100%;
}
.v7-tf-wrap.dock-left .v7-tf-arrow,
.v7-tf-wrap.dock-right .v7-tf-arrow { display: none; }
.v7-tf-wrap.dock-left .v7-tf-sections,
.v7-tf-wrap.dock-right .v7-tf-sections { flex-direction: column; align-items: stretch; }
.v7-tf-wrap.dock-left .v7-tf-search,
.v7-tf-wrap.dock-right .v7-tf-search { inline-size: 100%; }

/* узлы классификатора: мелкие пилюли, ряд с прокруткой по высоте */
.v7-tf-nodes { max-block-size: 11.25rem; overflow-y: auto; }
.v7-tf-nodes .v7-tf-item { font-size: 0.71875rem; padding: 0.1875rem 0.625rem; min-block-size: 1.625rem; }

/* ── ГАБАРИТЫ БОКОВОГО ФИЛЬТРА (решение автора 2026-08-26) ────────────────────────────────────
   Ширина — не больше раскрытого меню сайта (--v5-sidebar-expanded, 240).
   Высота — от низа шапки с отступом до нижнего края интерфейсной части с отступом:
   фильтр прилипает и держится в экране, внутри — своя прокрутка. */
.v7-tf-wrap.dock-left .v7-tf,
.v7-tf-wrap.dock-right .v7-tf {
  position: sticky;
  top: calc(var(--v5-header-height, 3.5rem) + var(--v5-gap, 0.625rem) * 2);
  inline-size: var(--v5-sidebar-expanded, 15rem);
  /* высота ЖЁСТКАЯ — колонна всегда до низа интерфейса, даже при коротком содержимом */
  block-size: calc(100vh - var(--v5-header-height, 3.5rem) - var(--v5-gap, 0.625rem) * 3);
  overflow-y: auto;
  scrollbar-width: thin;
}

/* ── НИЖНЕЕ ПОЛОЖЕНИЕ: полоса прижата к низу интерфейса с отступом (правка автора 26.08) ─────
   Обёртка растягивается на всю высоту рабочей области, полоса липнет к нижнему краю. */
.v7-tf-wrap.dock-bottom {
  min-block-size: calc(100vh - var(--v5-header-height, 3.5rem) - var(--v5-gap, 0.625rem) * 3);
}
.v7-tf-wrap.dock-bottom .v7-tf {
  position: sticky;
  bottom: 0;                /* родительская область уже даёт нижний зазор --v5-gap */
  align-self: end;
}

/* нижняя полоса: убрать наследный margin окна, чтобы отступ снизу был ровно один --v5-gap */
.v7-tf-wrap.dock-bottom .v7-tf { margin-block-end: 0; }

/* ══ ПРОТОКОЛ ФИЛЬТРА-КОНФИГУРАТОРА V1.0 (автор, 2026-08-26) ═══════════════════════════════════
   Стрелки каруселей упразднены: переполнение решается ПЕРЕНОСОМ, высота уровня растёт.
   Внутренний зазор уровня — токен 12. Боковая чисто-иконная сетка: 5 колонок по 32, gap 12. */
.v7-tf-wrap.dock-top .v7-tf-sections,
.v7-tf-wrap.dock-bottom .v7-tf-sections { flex-wrap: wrap; }
.v7-tf-track { flex-wrap: wrap; overflow: visible; gap: 0.75rem; }
.v7-tf-arrow { display: none !important; }

/* боковая сетка ровно 5 × 32 + 4 зазора 12 = 208 ≤ 216 рабочих, по центру */
.v7-tf-wrap.dock-left .v7-tf-track,
.v7-tf-wrap.dock-right .v7-tf-track {
  /* одна линия: 7 ячеек (6 разделов + избранное) на всю ширину (автор 28.08) */
  grid-template-columns: repeat(7, 1fr);
  justify-content: stretch;
  gap: 0.125rem;
}
.v7-tf-wrap.dock-left .v7-tf-track .v7-tf-sec, .v7-tf-wrap.dock-right .v7-tf-track .v7-tf-sec,
.v7-tf-wrap.dock-left .v7-tf-track .v7-tf-fav, .v7-tf-wrap.dock-right .v7-tf-track .v7-tf-fav {
  inline-size: 1.75rem; block-size: 1.75rem; margin: 0;
}

/* строка типа объекта: чекбокс + значок + подпись (протокол: multi, подсказка на значке) */
.v7-tf-scope {
  display: flex; align-items: center; gap: 0.5rem;
  min-block-size: 2rem; padding: 0 0.625rem;
  border: 0; background: none; cursor: pointer; text-align: start;
  border-radius: var(--em-radius-sm, 0.5rem);
  font-size: 0.78125rem; font-weight: 400; color: var(--v5-text, #244154);
}
.v7-tf-scope:hover { background: color-mix(in srgb, var(--v5-text, #244154) 4%, transparent); }
.v7-tf-scope.is-active { font-weight: 600; }
.v7-tf-check {
  inline-size: 0.875rem; block-size: 0.875rem; flex: 0 0 auto; position: relative;
  border: 1.4px solid var(--v5-border, #d8d3c6); border-radius: 0.25rem; background: var(--v5-card, #fff);
}
.v7-tf-scope.is-active .v7-tf-check {
  border-color: var(--em-cta-text, #1f3a5a); background: var(--em-cta, #c3d3e8);
}
.v7-tf-scope.is-active .v7-tf-check::after {
  content: ""; position: absolute; inset-block-start: 1.5px; inset-inline-start: 0.25rem;
  inline-size: 0.25rem; block-size: 0.4375rem;
  border-inline-end: 1.6px solid var(--em-cta-text, #1f3a5a);
  border-block-end: 1.6px solid var(--em-cta-text, #1f3a5a);
  transform: rotate(40deg);
}
.v7-tf-scope-ic { display: grid; place-items: center; }
.v7-tf-scope-ic svg { inline-size: 0.875rem; block-size: 0.875rem; }

/* высота горизонтального фильтра прогрессивная: никаких фиксированных высот (377 — reference) */

/* вертикальный порядок бокового (протокол): поиск ПЕРЕД уровнями — в ряду 1 поиск поднимается
   над значками (детей ровно двое: дорожка и поиск) */
.v7-tf-wrap.dock-left [data-block="SECTION"] .v7-tf-sections,
.v7-tf-wrap.dock-right [data-block="SECTION"] .v7-tf-sections { flex-direction: column-reverse; }

/* боковой титлбар: контролы переносятся потоком, ничего не наезжает на планки уровней */
.v7-tf-wrap.dock-left .v7-tf-bar,
.v7-tf-wrap.dock-right .v7-tf-bar { min-block-size: auto; }
.v7-tf-wrap.dock-left .v7-tf-tools,
.v7-tf-wrap.dock-right .v7-tf-tools { flex-wrap: wrap; row-gap: 0.25rem; position: static; }
.v7-tf-wrap.dock-left .v7-tf-tools .v5-icon-button,
.v7-tf-wrap.dock-right .v7-tf-tools .v5-icon-button { flex: 0 0 auto; }

/* вертикаль: инструменты видимы ВСЕ и группами (решение автора 28.08, отменяет скрытие) */
.v7-tf-wrap.dock-left .v7-tf-sep,
.v7-tf-wrap.dock-right .v7-tf-sep { display: none; }
.v7-tf-wrap.dock-left .v7-tf-tools > .v7-tf-mode,
.v7-tf-wrap.dock-right .v7-tf-tools > .v7-tf-mode { flex: 0 0 auto; }

/* боковой ряд контролов: зазор 8 — пять кнопок (4 докинга + закладка) в одну строку: 192 ≤ 216 */
.v7-tf-wrap.dock-left .v7-tf-tools,
.v7-tf-wrap.dock-right .v7-tf-tools { gap: 0.5rem !important; }

/* активная система классификации — то же выделение, что у всех выборов (терракота 18%),
   а не старый серый; в боковом пилюли систем сжимаются по содержимому, не на всю ширину */
.v7-tf-item.is-active {
  border-color: transparent;
  background: color-mix(in srgb, var(--section-accent, #d97757) 18%, transparent);
}
.v7-tf-wrap.dock-left [data-block="CLASSIFIER"] .v7-tf-item,
.v7-tf-wrap.dock-right [data-block="CLASSIFIER"] .v7-tf-item { inline-size: auto; }
.v7-tf-wrap.dock-left [data-block="CLASSIFIER"] .v7-tf-body,
.v7-tf-wrap.dock-right [data-block="CLASSIFIER"] .v7-tf-body { flex-direction: row; flex-wrap: wrap; }

/* ── СКРОЛЛ ПО ПРОТОКОЛУ (CHG-0421, библиотека §2.10): тонкий светлый — ползунок --v5-border,
   скругление pill, webkit-толщина 4; тёмные широкие запрещены ────────────────────────────── */
.v7-tf, .v7-tf-nodes, .v7-tf *::-webkit-scrollbar { scrollbar-width: thin; scrollbar-color: var(--v5-border, #d3cec0) transparent; }
.v7-tf::-webkit-scrollbar, .v7-tf-nodes::-webkit-scrollbar { inline-size: 0.25rem; block-size: 0.25rem; }
.v7-tf::-webkit-scrollbar-thumb, .v7-tf-nodes::-webkit-scrollbar-thumb {
  background: var(--v5-border, #d3cec0); border-radius: 6.25rem; }
.v7-tf::-webkit-scrollbar-track, .v7-tf-nodes::-webkit-scrollbar-track { background: transparent; }

/* боковой фильтр: содержимое не шире окна — никакого горизонтального разъезда */
.v7-tf-wrap.dock-left .v7-tf, .v7-tf-wrap.dock-right .v7-tf {
  box-sizing: border-box; overflow-x: hidden;
}
.v7-tf-wrap.dock-left .v7-tf > *, .v7-tf-wrap.dock-right .v7-tf > *,
.v7-tf-wrap.dock-left .v7-tf-block, .v7-tf-wrap.dock-right .v7-tf-block {
  max-inline-size: 100%; min-inline-size: 0;
}

/* классификация раскрывающимся списком: селект системы + поиск по кодам в одну строку */
.v7-tf-cls-row { display: flex; gap: 0.5rem; flex-wrap: wrap; inline-size: 100%; }
.v7-tf-cls-select, .v7-tf-cls-search {
  min-block-size: 2rem; padding: 0 0.625rem;
  border: 1px solid var(--v5-border, #d8d3c6); border-radius: var(--em-radius-sm, 0.5rem);
  background: var(--v5-card, #fff); color: var(--v5-text, #244154);
  font-size: 0.78125rem; font-weight: 400; outline: 0;
}
.v7-tf-cls-select { flex: 0 1 auto; }
.v7-tf-cls-search { flex: 1 1 10rem; min-inline-size: 7.5rem; }

/* ХАРАКТЕРИСТИКИ: группы-раскрывашки, атрибуты сеткой, контролы по типу */
.v7-tf-group { inline-size: 100%; border: 1px solid var(--v5-border-light, #e4e0d4);
  border-radius: var(--em-radius-sm, 0.5rem); background: var(--v5-card, #fff); }
.v7-tf-group summary { cursor: pointer; min-block-size: 1.875rem; display: flex; align-items: center;
  padding: 0 0.625rem; font-size: 0.75rem; font-weight: 600; color: var(--v5-text, #244154); list-style: none; }
.v7-tf-group summary::before { content: ""; inline-size: 0.3125rem; block-size: 0.3125rem; margin-inline-end: 0.5rem;
  border-inline-end: 1.4px solid currentColor; border-block-end: 1.4px solid currentColor;
  transform: rotate(-45deg); transition: transform 140ms ease; }
.v7-tf-group[open] summary::before { transform: rotate(45deg); }
.v7-tf-attrs { display: grid; grid-template-columns: repeat(auto-fill, minmax(13.75rem, 1fr));
  gap: 0.5rem; padding: 0 0.625rem 0.625rem; }
.v7-tf-attr { display: grid; gap: 0.1875rem; font-size: 0.71875rem; font-weight: 600; color: var(--v5-secondary, #6e6b64); }
.v7-tf-attr input, .v7-tf-attr select {
  min-block-size: 1.875rem; padding: 0 0.5rem; border: 1px solid var(--v5-border, #d8d3c6);
  border-radius: var(--em-radius-sm, 0.5rem); background: var(--v5-card, #fff);
  font-size: 0.75rem; font-weight: 400; color: var(--v5-text, #244154); outline: 0; inline-size: 100%; }
.v7-tf-attr.is-bool { grid-template-columns: auto 1fr; align-items: center; }
.v7-tf-attr.is-bool input { inline-size: 0.875rem; min-block-size: 0.875rem; }
.v7-tf-attr-range { display: grid; grid-template-columns: 1fr 1fr; gap: 0.375rem; }
.v7-tf-wrap.dock-left .v7-tf-attrs, .v7-tf-wrap.dock-right .v7-tf-attrs { grid-template-columns: 1fr; }

/* правки по скрину автора (боковое положение): поле поиска категории не раздувается,
   узлы-пилюли идут колонкой и не налезают друг на друга */
.v7-tf-cls-search { block-size: 2rem; flex-grow: 0; }
.v7-tf-wrap.dock-left .v7-tf-cls-search,
.v7-tf-wrap.dock-right .v7-tf-cls-search { inline-size: 100%; flex: 0 0 auto; }
.v7-tf-wrap.dock-left .v7-tf-nodes,
.v7-tf-wrap.dock-right .v7-tf-nodes {
  display: flex; flex-direction: column; align-items: stretch; flex-wrap: nowrap;
  max-block-size: 15rem;
}
.v7-tf-wrap.dock-left .v7-tf-nodes .v7-tf-item,
.v7-tf-wrap.dock-right .v7-tf-nodes .v7-tf-item {
  inline-size: 100%; block-size: auto; min-block-size: 1.625rem;
}

/* строки списков: узкий маркер-код, имя в одну-две строки; узлы всегда колонкой */
.v7-tf-rowitem { inline-size: 100%; min-block-size: 1.875rem; }
.v7-tf-marker {
  flex: 0 0 auto; min-inline-size: 2.125rem; padding: 1px 0.375rem; text-align: center;
  font-style: normal; font-size: 0.65625rem; font-weight: 600;
  color: var(--v5-secondary, #6e6b64);
  border: 1px solid var(--v5-border-light, #e4e0d4); border-radius: 0.375rem;
  background: var(--v5-card, #fff);
}
.v7-tf-rowname { min-inline-size: 0; overflow-wrap: anywhere; text-align: start; }
.v7-tf-nodes { display: flex; flex-direction: column; align-items: stretch; flex-wrap: nowrap; }

/* главный поиск масштабируется всегда: тянется на всю доступную ширину */
.v7-tf-search, .v7-tf-search-top { inline-size: auto; flex: 1 1 auto; min-inline-size: 0; }
.v7-tf-search-top { display: flex; }

/* строки списков не сжимаются по высоте в прокручиваемой колонке — текст не налезает */
.v7-tf-nodes > * { flex-shrink: 0; }
.v7-tf-rowitem { block-size: auto; }

/* строки списков: чекбокс и маркер по первой строке текста, компактный межстрочный */
.v7-tf-rowitem { align-items: flex-start; padding-block: 0.3125rem; }
.v7-tf-rowitem .v7-tf-check, .v7-tf-rowitem .v7-tf-marker { margin-block-start: 2px; }
.v7-tf-rowname { line-height: 1.3; }

/* ── ПРАВКА АВТОРА 26.08: строка списка = окошко и надпись ОДНОЙ строкой; при переносе
   вторая строка надписи начинается РОВНО ПОД ОКОШКОМ (без висячей колонки). Инлайн-поток. */
.v7-tf-scope, .v7-tf-rowitem {
  display: block; text-align: start; inline-size: 100%;
  padding: 0.3125rem 0.5rem; line-height: 1.35;
}
.v7-tf-scope .v7-tf-check, .v7-tf-rowitem .v7-tf-check,
.v7-tf-rowitem .v7-tf-marker, .v7-tf-scope .v7-tf-scope-ic {
  display: inline-block; vertical-align: -2px; margin-inline-end: 0.5rem; margin-block-start: 0;
}
.v7-tf-scope-ic svg { vertical-align: top; }
.v7-tf-rowname, .v7-tf-scope > span:last-child { display: inline; }
/* отступ списков от края блока — ровно внутренний зазор окна, без лишней пустоты слева */
.v7-tf-nodes, .v7-tf-body { padding-inline-start: 0; }
.v7-tf-wrap.dock-left .v7-tf-body, .v7-tf-wrap.dock-right .v7-tf-body { padding-inline: 0; }

/* кнопка «показать ещё» в характеристиках */
.v7-tf-more { align-self: center; min-block-size: 1.875rem; padding: 0 0.75rem; border: 0; cursor: pointer;
  border-radius: 6.25rem; background: color-mix(in srgb, var(--v5-text, #244154) 6%, transparent);
  font-size: 0.71875rem; font-weight: 600; color: var(--v5-text, #244154); }

/* П1 (CHG-0973): итог объектного слоя — счётчик найденных объектов из среза staging */
.v7-tf-found {
  margin: 0;
  padding: 0.375rem 0.75rem;
  font-size: var(--v5-font-sm, 0.78125rem);
  color: var(--v5-text-muted, #7b8794);
  border-top: 1px solid var(--v5-hairline, rgba(148, 163, 184, 0.28));
}
.v7-tf.dock-left .v7-tf-found, .v7-tf.dock-right .v7-tf-found { flex-shrink: 0; }


/* CHG-0974: поиск сверху и в горизонтальном положении */
.v7-tf-wrap.dock-top .v7-tf-search-top,
.v7-tf-wrap.dock-bottom .v7-tf-search-top { margin: 0.5rem 0.75rem 0; flex: 0 0 auto; }

/* повторная экспертиза 26.08: в боковом доке полный путь крошки не влезает в рейку 240 —
   хвост обрезается многоточием, полный путь остаётся в подсказке (title) */
.v7-tf.dock-left .v7-tf-bar, .v7-tf.dock-right .v7-tf-bar { min-inline-size: 0; }
.v7-tf.dock-left .v7-tf-crumb, .v7-tf.dock-right .v7-tf-crumb {
  min-inline-size: 0; max-inline-size: 100%; overflow: hidden; white-space: nowrap;
}
.v7-tf.dock-left .v7-tf-crumb-tail, .v7-tf.dock-right .v7-tf-crumb-tail {
  display: inline-block; min-inline-size: 0; max-inline-size: 100%;
  overflow: hidden; text-overflow: ellipsis; vertical-align: bottom;
}

/* повторная экспертиза 26.08: селект систем классификации и пустые подписи не должны
   раздвигать узкую рейку — сжимаются в её ширину, текст переносится */
.v7-tf-cls-select { min-inline-size: 0; max-inline-size: 100%; }
.v7-tf-empty { min-inline-size: 0; overflow-wrap: anywhere; }
.v7-tf.dock-left .v7-tf-cls-row, .v7-tf.dock-right .v7-tf-cls-row { flex-direction: column; }
.v7-tf.dock-left .v7-tf-cls-select, .v7-tf.dock-right .v7-tf-cls-select,
.v7-tf.dock-left .v7-tf-cls-search, .v7-tf.dock-right .v7-tf-cls-search { inline-size: 100%; flex: 0 0 auto; }

/* CHG-0974 (доводка по скрину автора 12:38): в горизонтальном положении списки узлов
   (категории/подкатегории/виды/владельцы) рассредоточены по горизонтали в несколько колонок */
.v7-tf-wrap.dock-top .v7-tf-nodes,
.v7-tf-wrap.dock-bottom .v7-tf-nodes {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(18.75rem, 1fr));
  gap: 2px 1.125rem; align-items: start; inline-size: 100%;
}
.v7-tf-wrap.dock-top .v7-tf-block[data-block="CATEGORY"],
.v7-tf-wrap.dock-top .v7-tf-block[data-block="SUBCATEGORY"],
.v7-tf-wrap.dock-top .v7-tf-block[data-block="ARCHETYPE"],
.v7-tf-wrap.dock-bottom .v7-tf-block[data-block="CATEGORY"],
.v7-tf-wrap.dock-bottom .v7-tf-block[data-block="SUBCATEGORY"],
.v7-tf-wrap.dock-bottom .v7-tf-block[data-block="ARCHETYPE"] { flex: 1 1 100%; }

/* ── ПЕРЕМЕЩЕНИЕ КОНТЕНТА МЕЖДУ КОНФИГУРАЦИЯМИ (проблема автора 26.08, замер: при полном
   выборе горизонтальное окно росло до 252.1875rem и уходило за экран). Горизонтальные положения
   получают ту же формулу высоты, что и вертикальные: окно держится в экране, внутри —
   тонкая прокрутка (CHG-0421); рабочая область остаётся видимой под/над фильтром. */
.v7-tf-wrap.dock-top .v7-tf,
.v7-tf-wrap.dock-bottom .v7-tf {
  max-block-size: calc(100vh - var(--v5-header-height, 3.5rem) - var(--v5-gap, 0.625rem) * 3);
  overflow-y: auto;
  scrollbar-width: thin;
}

/* ── РЕЖИМ КОНФИГУРАТОРА (протокол V1.0, CFG-06/07) ─────────────────────────────────────── */
.v7-tf-mode { display: inline-flex; gap: 2px; margin-inline-end: 0.5rem; padding: 2px;
  border: 1px solid var(--v5-border-light, #e4e0d4); border-radius: var(--em-radius-sm, 0.5rem); }
.v7-tf-mode-btn { border: 0; background: none; padding: 0.25rem 0.625rem; font-size: 0.78125rem;
  border-radius: 0.375rem; color: var(--v5-secondary, #6e6b64); cursor: pointer; }
.v7-tf-mode-btn.is-active { background: color-mix(in srgb, var(--section-accent, #d97757) 16%, transparent);
  color: var(--v5-text, #244154); font-weight: 600; }
.v7-tf-services { display: flex; align-items: center; gap: 0.625rem; padding: 0.375rem 0.75rem;
  border-top: 1px solid var(--v5-hairline, rgba(148,163,184,.28)); font-size: 0.78125rem; }
.v7-tf-services b { font-size: 0.71875rem; font-weight: 600; color: var(--v5-secondary, #6e6b64); }
.v7-tf-service { inline-size: auto !important; padding: 0 0.625rem; gap: 0.375rem; display: inline-flex; align-items: center; }
.v7-tf-service span { font-size: 0.78125rem; }
.v7-tf-spec { display: flex; align-items: center; gap: 0.75rem; }
.v7-tf-save-atom { border: 1px solid var(--v5-border-light, #e4e0d4); }
.v7-tf.dock-left .v7-tf-services, .v7-tf.dock-right .v7-tf-services { flex-wrap: wrap; }

/* V1.1 полное исполнение: маркер системы в узлах классификации + строчные чекбоксы малых доменов */
.v7-tf-sysmark { flex: 0 0 auto; font-size: 0.625rem; font-weight: 700; letter-spacing: .02em;
  color: var(--v5-secondary, #6e6b64); border: 1px solid var(--v5-border-light, #e4e0d4);
  border-radius: 0.25rem; padding: 0 0.25rem; margin-inline-end: 0.25rem; font-style: normal; }
.v7-tf-enum-inline { display: inline-flex; flex-wrap: wrap; gap: 0.25rem 0.75rem; }
.v7-tf-enum-inline label { display: inline-flex; align-items: center; gap: 0.25rem; font-size: 0.75rem; }

/* ── P0 UX_RESET (мастер-протокол V2.0) ────────────────────────────────────────────────── */
/* уровни 4-5 иконками: кнопка с нейтральным глифом, имя под иконкой мелко (tooltip полный) */
.v7-tf-caticon { inline-size: auto !important; min-inline-size: 4.5rem; max-inline-size: 7.5rem;
  block-size: auto !important; padding: 0.375rem 0.375rem 0.25rem; display: inline-flex;
  flex-direction: column; align-items: center; gap: 0.25rem; }
.v7-tf-caticon-name { font-size: 0.65625rem; line-height: 1.15; text-align: center;
  color: var(--v5-secondary, #6e6b64); display: -webkit-box; -webkit-line-clamp: 2;
  -webkit-box-orient: vertical; overflow: hidden; max-block-size: 1.9em; }
.v7-tf-caticon.is-active .v7-tf-caticon-name { color: var(--v5-text, #244154); font-weight: 600; }
.v7-tf.dock-left .v7-tf-caticon, .v7-tf.dock-right .v7-tf-caticon { min-inline-size: 3.5rem; max-inline-size: 6rem; }
/* «Дополнительно»: подблоки-раскрывашки */
.v7-tf-addsub { border-top: 1px solid var(--v5-hairline, rgba(148,163,184,.28)); padding: 0.25rem 0; }
.v7-tf-addsub summary { cursor: pointer; font-size: 0.71875rem; font-weight: 600;
  color: var(--v5-secondary, #6e6b64); padding: 0.25rem 0; list-style: none; }
.v7-tf-addsub summary::before { content: "▸ "; }
.v7-tf-addsub[open] summary::before { content: "▾ "; }
/* Избранное в уровне 1 */
.v7-tf-fav { margin-inline-start: 0; }   /* зазор задаёт gap дорожки = 12 */

/* строгий iconsOnly по образцу автора (скрин 19:14 + «это ещё протокол»): имя — только
   в подсказке и для диктора, визуально одни иконки, как в эталоне */
.v7-tf-caticon-name { display: none; }
.v7-tf-caticon { min-inline-size: 2rem; max-inline-size: none; padding: 0.375rem; flex-direction: row; }

/* эталон аккуратности (скрин автора 19:14): иконки уровней ровной лентой с одинаковым шагом */
.v7-tf-wrap.dock-top .v7-tf-nodes, .v7-tf-wrap.dock-bottom .v7-tf-nodes {
  display: grid; grid-template-columns: repeat(auto-fill, 2.25rem); gap: 0.375rem;
  align-items: center; justify-content: start;
}
.v7-tf-caticon { min-inline-size: 2rem; block-size: 2rem !important; justify-content: center; }
.v7-tf.dock-left .v7-tf-nodes .v7-tf-caticon, .v7-tf.dock-right .v7-tf-nodes .v7-tf-caticon { margin: 0; }
.v7-tf-wrap.dock-left .v7-tf-nodes, .v7-tf-wrap.dock-right .v7-tf-nodes {
  display: grid; grid-template-columns: repeat(5, 2rem); gap: 0.75rem; justify-content: center;
}
/* строки-узлы (вид/владелец) в вертикали остаются списком */
.v7-tf-wrap.dock-left .v7-tf-nodes:has(.v7-tf-rowitem), .v7-tf-wrap.dock-right .v7-tf-nodes:has(.v7-tf-rowitem),
.v7-tf-wrap.dock-top .v7-tf-nodes:has(.v7-tf-rowitem), .v7-tf-wrap.dock-bottom .v7-tf-nodes:has(.v7-tf-rowitem) {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(18.75rem, 1fr)); gap: 0.125rem 1.125rem; justify-content: stretch;
}

/* P1: предпросмотр атома (валидация → предпросмотр → создание) */
.v7-tf-preview { margin: 0.5rem 0.75rem; padding: 0.625rem 0.75rem; border: 1px solid var(--v5-border-light, #e4e0d4);
  border-radius: 0.5rem; background: var(--v5-card, #fff); font-size: 0.78125rem; }
.v7-tf-preview b { display: block; margin-bottom: 0.375rem; font-size: 0.75rem; }
.v7-tf-preview ul { margin: 0 0 0.5rem 1.1rem; padding: 0; }
.v7-tf-preview-row { display: flex; gap: 0.5rem; }

/* R1 (ТЗ V1.0): HUMAN-хабы простого уровня + переключатель уровней */
.v7-tf-levels { margin-inline-start: 0; }   /* зазор задаёт gap тулбара 12 */
.v7-tf-human { display: flex; flex-wrap: wrap; gap: 0.375rem; }
.v7-tf-human-hub { border: 1px solid var(--v5-border-light, #e4e0d4); background: var(--v5-card, #fff);
  border-radius: 0.5rem; padding: 0.375rem 0.625rem; font-size: 0.78125rem; color: var(--v5-text, #244154);
  cursor: pointer; }
.v7-tf-human-hub:hover { border-color: var(--section-accent, #d97757); }
.v7-tf-human-hub.is-back { color: var(--v5-secondary, #6e6b64); }
.v7-tf-human-hub.is-sub { background: var(--v5-bg, #faf9f5); }
.v7-tf.dock-left .v7-tf-human, .v7-tf.dock-right .v7-tf-human { flex-direction: column; }
/* уровни в вертикали видимы (автор 28.08) */

/* M6: цифровой паспорт в конфигураторе (предложения PROPOSED) */
.v7-tf-passport { margin: 0.5rem 0.75rem; padding: 0.5rem 0.625rem; border: 1px dashed var(--v5-border-light, #e4e0d4);
  border-radius: 0.5rem; font-size: 0.78125rem; }
.v7-tf-passport b { display: block; font-size: 0.71875rem; color: var(--v5-secondary, #6e6b64); margin-bottom: 0.375rem; }
.v7-tf-passport-row { display: flex; gap: 0.375rem; margin-top: 0.375rem; align-items: center; flex-wrap: wrap; }
.v7-tf-passport-tags { display: flex; flex-wrap: wrap; gap: 0.25rem; }
.v7-tf-passport-tag { display: inline-flex; align-items: center; gap: 0.25rem; border: 1px solid var(--v5-border-light, #e4e0d4);
  border-radius: 0.375rem; padding: 0.125rem 0.375rem; font-size: 0.71875rem; background: var(--v5-bg, #faf9f5); }
.v7-tf-passport-tag.is-doc { border-style: dashed; }
.v7-tf-passport-tag button { border: 0; background: none; cursor: pointer; color: var(--v5-secondary, #6e6b64); }
.v7-tf-passport-hints { display: flex; flex-direction: column; gap: 0.125rem; margin-top: 0.25rem; }

/* R2: блоки реестра ТЗ */
.v7-tf-tzblock { border: 0; }
.v7-tf-tzblock > .v7-tf-head { pointer-events: none; }
.v7-tf-inner { border: 0; background: none; padding: 0; }

/* R3: человеческий каталог первым экраном (референс Ozon: колонки групп) */
.v7-tf-catalog { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: 0.875rem 1.5rem; }
.v7-tf-catalog-group { position: relative; display: flex; flex-direction: column; gap: 0.2rem; }
.v7-tf-catalog-head { appearance: none; border: 0; background: none; text-align: left; padding: 0.2rem 0; cursor: pointer;
  display: flex; align-items: center; gap: 0.5rem; }
.v7-tf-catalog-head > svg { inline-size: 1rem; block-size: 1rem; flex: 0 0 auto; }
.v7-tf-catalog-link { display: flex; align-items: center; gap: 0.4rem; }
.v7-tf-catalog-link > svg { inline-size: 0.8125rem; block-size: 0.8125rem; flex: 0 0 auto; }
.v7-tf-catalog-head { 
  font-size: 0.8125rem; font-weight: 700; color: var(--v5-text, #244154); font-family: inherit; }
.v7-tf-catalog-head:hover { color: var(--section-accent, #d97757); }
/* автор 28.08: не отдельное окошко со своим скроллом, а раскрытие В ЭТОЙ ЖЕ области, как меню:
   клик по группе — подразделы разворачиваются в потоке, прокрутка общая у окна */
.v7-tf-catalog-drop { display: none; position: static; min-inline-size: 0; max-inline-size: 100%;
  padding: 0.125rem 0 0.25rem 1.5rem; flex-direction: column; gap: 0.125rem; }
.v7-tf-catalog-group.is-open > .v7-tf-catalog-drop { display: flex; }
.v7-tf-catalog { align-items: start; }
.v7-tf-catalog-group > b { font-size: 0.8125rem; font-weight: 700; color: var(--v5-text, #244154); margin-bottom: 0.2rem; }
.v7-tf-catalog-link { border: 0; background: none; text-align: left; padding: 0.1rem 0; cursor: pointer;
  font-size: 0.78125rem; color: var(--v5-secondary, #6e6b64); }
.v7-tf-catalog-link:hover { color: var(--section-accent, #d97757); }
.v7-tf-catalog-link.is-mapped { color: var(--v5-text, #244154); }
.v7-tf-catalog-link.is-more { color: var(--section-accent, #d97757); font-size: 0.71875rem; }
.v7-tf.dock-left .v7-tf-catalog, .v7-tf.dock-right .v7-tf-catalog { grid-template-columns: 1fr; }

/* S2 «дизайн V5»: ряд корней — ровный ритм значков 32×32 шаг 12, как отраслевой ряд V5 */
.v7-tf-roots { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: center; }
.v7-tf-root { flex: 0 0 auto; }
.v7-tf.dock-left .v7-tf-roots, .v7-tf.dock-right .v7-tf-roots {
  display: grid; grid-template-columns: repeat(5, 2rem); gap: 0.75rem; justify-content: center; }

/* стабилизация 28.08: в ПРОСТОМ виде заголовки-плашки блоков не показываются — чистые ряды как V5 */
.v7-tf-tzblock > .v7-tf-head { display: none; }
.v7-tf-tzblock[data-tz="CHAR"] > .v7-tf-head, .v7-tf-tzblock[data-tz="PARTY"] > .v7-tf-head,
.v7-tf-tzblock[data-tz="PASSPORT"] > .v7-tf-head, .v7-tf-tzblock[data-tz="ADV"] > .v7-tf-head,
.v7-tf-tzblock[data-tz="DELIVERY"] > .v7-tf-head, .v7-tf-tzblock[data-tz="TRUST"] > .v7-tf-head,
.v7-tf-tzblock[data-tz="COMMERCIAL"] > .v7-tf-head { display: flex; }

/* стабилизация-2: каталог колонками 3-4 в ряд, NAV без плашки, тип объекта в строку */
.v7-tf-catalog { display: grid !important; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)) !important;
  gap: 0.875rem 1.5rem !important; align-items: start; }
.v7-tf-tzblock[data-tz="NAV"] > .v7-tf-head { display: none !important; }
.v7-tf-inner[data-block="SCOPE"] .v7-tf-body { display: flex; gap: 1rem; flex-wrap: wrap; }
/* канонический поиск категорий в простом виде не дублируется с каталогом */

/* стабилизация-3: tz-блоки в горизонтальных доках занимают всю строку — каталог расправляется в колонки */
.v7-tf-wrap.dock-top .v7-tf-tzblock, .v7-tf-wrap.dock-bottom .v7-tf-tzblock { flex: 1 1 100%; inline-size: 100%; }
.v7-tf-inner { inline-size: 100%; }
.v7-tf-catalog { flex: 1 1 100%; inline-size: 100% !important; }

/* вертикаль: поиск — компактная строка 32, без растяжения в столб (автор 28.08: отступы) */
.v7-tf-wrap.dock-left .v7-tf-search, .v7-tf-wrap.dock-right .v7-tf-search,
.v7-tf-wrap.dock-left .v7-tf-search-top, .v7-tf-wrap.dock-right .v7-tf-search-top {
  flex: 0 0 auto; block-size: 2rem; min-block-size: 2rem; max-block-size: 2rem;
}
/* вертикаль: окно — grid, авто-ряды прижаты кверху, пустоты не растягиваются (автор 28.08) */
.v7-tf-wrap.dock-left .v7-tf, .v7-tf-wrap.dock-right .v7-tf { align-content: start; row-gap: 0.5rem; }

/* вертикаль: каталог одной колонкой строго в ширину рейки; дроп — аккордеоном, не поверх (28.08) */
.v7-tf.dock-left .v7-tf-catalog, .v7-tf.dock-right .v7-tf-catalog { grid-template-columns: 1fr !important; }
.v7-tf.dock-left .v7-tf-catalog-group, .v7-tf.dock-right .v7-tf-catalog-group { max-inline-size: 100%; min-inline-size: 0; }
.v7-tf.dock-left .v7-tf-catalog-drop, .v7-tf.dock-right .v7-tf-catalog-drop {
  position: static; min-inline-size: 0; max-inline-size: 100%; box-shadow: none;
  border-color: var(--v5-border-light, #e4e0d4); }

/* буква A–U после значка в проф-каталоге (автор 28.08): приглушённая, не сливается с названием */
.v7-tf-catalog-head .v7-tf-code, .v7-tf-catalog-link .v7-tf-code {
  font-style: normal; color: var(--v5-secondary, #6e6b64); font-size: 0.71875rem; flex: 0 0 auto; }

/* иконка (и буква) — по ПЕРВОЙ строке названия при переносе, не по центру (автор 28.08) */
.v7-tf-catalog-head, .v7-tf-catalog-link { align-items: flex-start; }
.v7-tf-catalog-head > svg, .v7-tf-catalog-link > svg { margin-block-start: 0.0625rem; }
.v7-tf-catalog-head .v7-tf-code, .v7-tf-catalog-link .v7-tf-code { margin-block-start: 0.0625rem; }

/* автор 28.08: в ГОРИЗОНТАЛИ раскрытые подразделы — не один столбик, а колонками на всю область
   (как основные группы); в вертикали — одним столбиком, как сделано */
/* группа остаётся на месте; вынесенный дроп — полоса под её строкой (автор 28.08) */
.v7-tf-catalog-drop.is-row {
  grid-column: 1 / -1; display: grid; grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr));
  gap: 0.375rem 1.5rem; padding: 0.375rem 0 0.5rem 1.5rem; }

/* крошки типов раздела: между разделами и поиском, в вертикали — своей строкой (автор 28.08) */
.v7-tf-scope-inline { display: flex; align-items: center; gap: 0.75rem; flex: 0 0 auto; }   /* зазор = токен 12, как у разделов */
.v7-tf-scope-inline:empty { display: none; }
.v7-tf-wrap.dock-left .v7-tf-scope-inline, .v7-tf-wrap.dock-right .v7-tf-scope-inline { justify-content: center; }

/* крошки типов — строго кнопки 32, не наследуют строчный стиль старого SCOPE-блока */
.v7-tf-scope-inline .v7-tf-scope { inline-size: 2rem !important; block-size: 2rem !important; padding: 0 !important; flex: 0 0 auto;
  display: grid !important; place-items: center; gap: 0; }
.v7-tf-scope-inline .v7-tf-scope svg { margin: 0; }
.v7-tf-scope-inline .v7-tf-scope .v7-tf-scope-ic { display: contents; }
.v7-tf-scope-inline .v7-tf-scope .v7-tf-check { display: none; }
/* вертикаль: строки-пункты не шире рейки (grid min 18.75rem давал скрытый разъезд) */
.v7-tf-wrap.dock-left .v7-tf-nodes, .v7-tf-wrap.dock-right .v7-tf-nodes { grid-template-columns: 1fr !important; }
.v7-tf.dock-left .v7-tf-rowitem, .v7-tf.dock-right .v7-tf-rowitem,
.v7-tf.dock-left .v7-tf-rowname, .v7-tf.dock-right .v7-tf-rowname { min-inline-size: 0; max-inline-size: 100%; inline-size: 100%; box-sizing: border-box; }

/* зазор крошек типов от поиска — токен 12, чтобы иконка не прилипала к полю (скрин автора 28.08 08:11) */
.v7-tf-sections .v7-tf-scope-inline { margin-inline: 0.25rem 0.75rem; }

/* автор 28.08 (отменено его же решением 08:22): плашки-рамки убраны — крошечный стиль со стрелкой */
.v7-tf-sections .v7-tf-scope-inline { margin-inline: 0.75rem; }


/* иконки разделов › две крошки типов — стрелка как в оглавлении (автор 28.08) */
.v7-tf-scope-arrow { color: var(--v5-muted, #a3a099); font-size: 0.8125rem; flex: 0 0 auto; user-select: none; margin-inline: -0.125rem; }   /* стрелка узкая: сводим зазор икон к общему 30 */
.v7-tf-sections .v7-tf-scope-inline { margin-inline: 0 0.375rem; }

/* единый межстрочный отступ каталога (автор 28.08: «поправь отступы между строками») */
.v7-tf-catalog { gap: 0.75rem 1.5rem !important; }

/* титлбар: равные зазоры между группами инструментов = токен 12 (автор 28.08 «зазоры не исправлены») */
.v7-tf-tools { gap: 0.75rem; }
.v7-tf-tools > .v7-tf-mode { margin-inline-end: 0; }

/* регламент V1.0 «внутренний зазор уровня — токен 12»: единый вертикальный ритм окна */
.v7-tf { gap: 0.75rem; }
.v7-tf-inner + .v7-tf-inner { margin-block-start: 0.75rem; }
.v7-tf-tzblock + .v7-tf-tzblock { margin-block-start: 0.75rem; }

/* метки рядов (пример автора 28.08): читаемая подпись слева у каждого ряда */
.v7-tf-rowlabel { font-size: 0.78125rem; font-weight: 600; color: var(--v5-secondary, #6e6b64);
  flex: 0 0 auto; align-self: center; margin-inline-end: 0.375rem; white-space: nowrap; }
.v7-tf-track .v7-tf-rowlabel { grid-column: span 2; justify-self: start; }
.v7-tf-au-row { margin-block-start: 0.75rem; display: flex; align-items: center; }
.v7-tf-au-row .v7-tf-track { display: flex; flex-wrap: wrap; gap: 0.75rem; }

/* кнопка «Каталог» — как метка ряда, но кликабельная (автор 29.08) */
.v7-tf-rowlabel-btn { border: 0; background: none; cursor: pointer; padding: 0; font: inherit;
  font-size: 0.78125rem; font-weight: 600; color: var(--v5-text, #244154); text-align: start; }
.v7-tf-rowlabel-btn:hover { color: var(--section-accent, #d97757); }

/* найденные категории — колонками каталога; выбранная подсвечена (автор 29.08: чипсы убраны) */
.v7-tf-catalog-found { grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)) !important; }
.v7-tf-catalog-found .v7-tf-catalog-link.is-active { color: var(--section-accent, #d97757); font-weight: 700; }

/* шаг 1 автора (29.08): ряд «Поиск» — иконка+надпись слева, поле на всю остальную ширину */
.v7-tf-row-search { display: flex; align-items: center; gap: 0.75rem; }
.v7-tf-row-search .v7-tf-rowlabel { display: inline-flex; align-items: center; gap: 0.375rem; }
.v7-tf-row-search .v7-tf-rowlabel svg { inline-size: 1rem; block-size: 1rem; }
.v7-tf-row-search .v7-tf-search { flex: 1 1 auto; }

/* шаг 2 автора: ряд «Инструменты поиска» */
.v7-tf-row-tools { display: flex; align-items: center; gap: 0.75rem; }
.v7-tf-row-tools .v7-tf-rowlabel { display: inline-flex; align-items: center; gap: 0.375rem; }
.v7-tf-row-tools .v7-tf-rowlabel svg { inline-size: 1rem; block-size: 1rem; }
.v7-tf-viewmode svg { inline-size: 1rem; block-size: 1rem; }
.v7-tf-wrap.dock-left .v7-tf-row-tools, .v7-tf-wrap.dock-right .v7-tf-row-tools { flex-wrap: wrap; justify-content: flex-start; }

/* ряд инструментов: кнопки строго 32, в один ряд (фикс разъезда после шага 2) */
.v7-tf-row-tools { flex-wrap: nowrap; }
.v7-tf-row-tools .v7-tf-scope { inline-size: 2rem !important; block-size: 2rem !important; padding: 0 !important;
  flex: 0 0 auto; display: grid !important; place-items: center; gap: 0; }
.v7-tf-row-tools .v7-tf-scope .v7-tf-check { display: none; }
.v7-tf-row-tools .v7-tf-scope svg { margin: 0; }

/* строка Поиск + Инструменты поиска (скрин автора 28.08 22:11): инструменты справа, без своей строки */
.v7-tf-row-search .v7-tf-row-tools { margin-inline-start: 0.75rem; flex: 0 0 auto; }
.v7-tf-row-search .v7-tf-search { min-inline-size: 16rem; }
/* окно поиска сокращено (автор 22:12): инструменты сразу справа, не у края */
.v7-tf-row-search .v7-tf-search { flex: 0 1 40rem; }
.v7-tf-row-search .v7-tf-row-tools { inline-size: auto !important; flex: 0 0 auto !important; }

/* кнопки классификаторов: аббревиатура в плашке (семантических глифов у систем нет) */
.v7-tf-clsbtn { inline-size: auto !important; padding: 0 0.5rem !important; font-size: 0.6875rem; font-weight: 700; letter-spacing: 0.02em; }

/* классификаторы — только иконки 32 (требование автора 29.08), имя в подсказке */
.v7-tf-clsbtn { inline-size: 2rem !important; padding: 0 !important; }

/* вертикаль: ряды Инструментов/Групп/Подгрупп — строками с переносом, метка своей строкой (автор 30.08) */
.v7-tf-wrap.dock-left .v7-tf-row-tools, .v7-tf-wrap.dock-right .v7-tf-row-tools,
.v7-tf-wrap.dock-left .v7-tf-au-row, .v7-tf-wrap.dock-right .v7-tf-au-row {
  flex-direction: row !important; flex-wrap: wrap; align-items: center; gap: 0.5rem; inline-size: 100%; }
.v7-tf-wrap.dock-left .v7-tf-row-tools .v7-tf-rowlabel, .v7-tf-wrap.dock-right .v7-tf-row-tools .v7-tf-rowlabel,
.v7-tf-wrap.dock-left .v7-tf-au-row .v7-tf-rowlabel, .v7-tf-wrap.dock-right .v7-tf-au-row .v7-tf-rowlabel {
  flex-basis: 100%; }
.v7-tf-wrap.dock-left .v7-tf-au-row .v7-tf-track, .v7-tf-wrap.dock-right .v7-tf-au-row .v7-tf-track {
  display: flex !important; flex-wrap: wrap; gap: 0.5rem; inline-size: 100%; justify-content: flex-start; }
.v7-tf-wrap.dock-left .v7-tf-scope-arrow, .v7-tf-wrap.dock-right .v7-tf-scope-arrow { margin-inline: 0.125rem; }

/* неделимые группы в рядах: переносятся целиком (автор 30.08) */
.v7-tf-grp { display: inline-flex; align-items: center; gap: 0.5rem; flex: 0 0 auto; }

/* ВИДЫ ОКНА работают (автор 30.08: «кнопки компактный/раскрытый/полный не работают»):
   compact — только Поиск и Разделы; base — + Инструменты и ряды/каталог выбора; advanced — всё */
.v7-tf.view-compact .v7-tf-row-tools,
.v7-tf.view-compact .v7-tf-au-row,
.v7-tf.view-compact .v7-tf-catalog,
.v7-tf.view-compact .v7-tf-catalog-found,
.v7-tf.view-compact [data-block="CATEGORY"],
.v7-tf.view-compact .v7-tf-tzblock:not([data-tz="NAV"]),
.v7-tf.view-compact .v7-tf-scope-inline,
.v7-tf.view-compact .v7-tf-scope-arrow { display: none !important; }
.v7-tf.view-base .v7-tf-tzblock:not([data-tz="NAV"]) { display: none !important; }
.v7-tf.view-base .v7-tf-catalog, .v7-tf.view-base .v7-tf-catalog-found { display: none !important; }

/* титлбар окна: без «плашек в плашках» — группы прозрачные, разделение стрелками (правило крошек, автор 31.08) */
.v7-tf-tools > .v7-tf-mode { border: 0; padding: 0; background: none; gap: 0.25rem; }
