/* ============================================================================
   РЕЖИМ ПЛОТНОСТИ «ШТАБ» — раздел «Сеть организаций» (витрина «Департамент»).

   Это НЕ второй визуальный язык, а профиль плотности внутри «Спокойного инженера»:
   палитра, бренд и семантика цвета не меняются, меняются шкала, слои и ритм.
   Отсюда правило файла: КАЖДЫЙ селектор начинается с .kgpb-dept, ни одного :root,
   ни одного голого body/table — иначе стили утекут на лендинг и в кабинет
   (в index.html лендинг и кабинет живут в одном документе).

   Ноль новых цветовых литералов: все цвета — существующие токены theme.css.
   Новых токенов семь, из них два — алиасы, пять — размеры.

   Диагноз, из которого выросли числа (замеры по прежней версии dept-demo):
     · карточка #fff на канве --bg давала контраст 1,08:1 — слои не различались;
     · типодиапазон 12→22 px (1,83×) — у экрана не было точки входа для глаза;
     · база 13,5 px против 15 px в остальном продукте;
     · тёмная тема была невозможна: тёмные токены объявлены на корнях кабинета.
   ========================================================================== */

.kgpb-dept {
  /* — алиасы слоёв: видимый край карточки вместо почти невидимого --border — */
  --dd-line:   var(--border-hover);   /* заметнее к белому, чем --border */
  /* 🔴 В4.5. Слой-«полка»: тулбар, шапка таблицы, треки полос, зебра строк.
     Тёмного оверрайда на --bg-soft здесь БОЛЬШЕ НЕТ, и это замер, а не вкус.
     Было: --bg-card #1E1B16 против --bg-soft #191611 = 1,05:1 — зебра в тёмной
     таблице организаций не читалась вовсе (живой замер на проде 25.08.2026).
     Вниз хода НЕТ: тот же --bg-card против ЧИСТО ЧЁРНОГО даёт 1,22:1, то есть
     весь запас «темнее поверхности» в тёмной теме равен 0,17 и стоит #000000.
     --bg-accent идёт ВВЕРХ: 1,14:1 в тёмной при 1,19:1 в светлой — темы сравнялись.
     Слой светлее поверхности в тёмной теме — не ошибка, а единственное направление,
     где запас вообще есть.
     Чернила перемерять не надо: пара --text-muted/--bg-accent измерена самой темой —
     5,02:1 (theme.css:1073, светлая) и 7,57:1 (theme.css:968, тёмная), обе AA.
     ⚠️ Числа «поверхность против поверхности» сняты вне tools/check-contrast.js:
     таких пар он НЕ СТРОИТ по построению. Его молчание здесь ничего не подтверждает,
     проверка — глазом на dept-demo.html в обеих темах. */
  --dd-sunken: var(--bg-accent);

  /* — размеры — */
  --dd-row: 40px;                     /* плотность строки: 36 compact / 40 default / 44 comfortable */
  --dd-gutter: 24px;                  /* поля канвы */
  --dd-floor: 32px;                   /* интервал между этажами */
  --dd-fs-metric: 32px;               /* KPI-число: шкала темы кончается на 30 и занята заголовками */
  --dd-fs-metric-sm: 24px;            /* вторичная метрика */

  background: var(--bg);
  color: var(--text);                 /* наследуется ВЫЧИСЛЕННЫЙ цвет, не ссылка на переменную:
                                         объявляя токены на своём корне, обязаны объявить и color */
  font-family: var(--font-sans);
  font-size: 14px;
  line-height: 1.45;
}

.kgpb-dept *, .kgpb-dept *::before, .kgpb-dept *::after { box-sizing: border-box; }
/* 🔴 [hidden] обязан скрывать. Правило браузера `[hidden]{display:none}` слабее любого
   нашего `display:` в этом файле, и элементы, которые модуль прячет атрибутом (демо-плашка,
   подсказка приглашения, кнопки «ещё», панели графика и просрочек), оставались на экране.
   Поймано живой проверкой T-600: в БОЕВОМ кабинете (демо-плашки быть не должно) висела
   пустая жёлтая полоса 34 px. Одно правило вместо правки каждого места — и будущие тоже. */
.kgpb-dept [hidden] { display: none !important; }
.kgpb-dept button, .kgpb-dept input, .kgpb-dept select { font-family: inherit; }
.kgpb-dept .dd-num { font-variant-numeric: tabular-nums; font-weight: 600; }

/* — единое фокус-кольцо (было продублировано в десяти селекторах) —
   🔴 T-1219/T-1214: у кольца ДВА носителя одной геометрии. box-shadow рисует
   каноническую пару «2px --bg-card + 2px --primary», но проигрывает по ПОРЯДКУ
   любому более позднему правилу той же специфичности с декоративной тенью
   (замер T-1219: .dd-kpi и .dd-mode button[aria-pressed] оставались без кольца
   вовсе) и не рисуется в forced-colors. outline 2px с отступом 2px кладёт ту же
   внешнюю полосу на 2–4px от бокса: в каскаде box-shadow не участвует, тени
   элементов его не гасят, в forced-colors остаётся видимым. Форма совпадает с
   outline-кольцами темы (.kgpb-theme-toggle, .kgpb-metric, .kgpb-objcard). */
.kgpb-dept :focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
  box-shadow: 0 0 0 2px var(--bg-card), 0 0 0 4px var(--primary);
}

/* ─────────────────────────────  ШАПКА  ───────────────────────────── */
.kgpb-dept .dd-header {
  background: var(--bg-card);
  border-bottom: 1px solid var(--dd-line);
  padding: 14px var(--dd-gutter);
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
}
.kgpb-dept .dd-header h1 {
  margin: 0; font-size: 26px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.15;
  display: flex; align-items: center; gap: 10px;
}
.kgpb-dept .dd-header .kic { color: var(--primary); }
.kgpb-dept .dd-sub { color: var(--text-muted); font-size: 12px; }
.kgpb-dept .dd-head-right { margin-left: auto; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

/* сегментный переключатель режима — цель нажатия ≥36 px */
.kgpb-dept .dd-mode { display: flex; background: var(--dd-sunken); border-radius: var(--radius-pill); padding: 3px; gap: 2px; }
.kgpb-dept .dd-mode button {
  border: 0; background: transparent; color: var(--text-muted);
  padding: 8px 16px; min-height: 36px; font-size: 13px; font-weight: 600;
  border-radius: var(--radius-pill); cursor: pointer;
}
.kgpb-dept .dd-mode button:hover { color: var(--text); }
.kgpb-dept .dd-mode button[aria-pressed="true"] { background: var(--bg-card); color: var(--primary); box-shadow: var(--shadow); }

/* кнопка темы и прочие «тихие» кнопки шапки */
.kgpb-dept .dd-ghost {
  display: inline-flex; align-items: center; gap: 6px; min-height: 36px;
  padding: 7px 12px; border: 1px solid var(--dd-line); background: var(--bg-card);
  color: var(--text-muted); border-radius: var(--radius-sm); font-size: 13px; font-weight: 600; cursor: pointer;
}
.kgpb-dept .dd-ghost:hover { background: var(--dd-sunken); color: var(--text); }

/* — несмываемая демо-плашка: обязательна, но не должна быть самым ярким пятном экрана — */
.kgpb-dept .dd-demo-banner {
  position: sticky; top: 0; z-index: 60; min-height: 34px;
  display: flex; align-items: center; gap: 8px; padding: 6px var(--dd-gutter);
  background: var(--warning-bg); color: var(--warning-text);
  font-size: 12.5px; font-weight: 600; border-bottom: 1px solid var(--dd-line);
}
/* T-693. Липнуть плашка имеет право только там, где над ней ничего нет — на публичной
   витрине (dept-demo.html: класс .kgpb-dept висит на самом <body>). В кабинете тот же
   .kgpb-dept лежит ВНУТРИ страницы с липкой шапкой .topbar (top:0, z-index 10), и плашка
   на top:0 с z-index 60 накрывала шапку целиком: переключатель организации, переключатель
   темы и «Выход» переставали нажиматься — клик уходил в плашку. Плашка информационная,
   шапка функциональная, поэтому в кабинете плашка едет вместе с содержимым.
   Признак — «есть ли над нами шапка», а не конкретный экран: правило одно на ВСЕ экраны
   кабинета (сеть, лицензиат, карточка организации) и на будущие. */
body:not(.kgpb-dept) .kgpb-dept .dd-demo-banner { position: static; }

/* ─────────────────────────────  КАНВА  ─────────────────────────────
   .dd-canvas — та же канва для экранов КАБИНЕТА (T-600). Свой класс, а не <main>:
   кабинет уже лежит внутри <main id="main-content">, и второй <main> в документе
   недопустим. Публичная демо-страница остаётся на <main> — там он единственный. */
.kgpb-dept main, .kgpb-dept .dd-canvas {
  max-width: 1920px; margin: 0 auto; padding: var(--dd-gutter);
  display: flex; flex-direction: column; gap: var(--dd-floor);
}

.kgpb-dept .dd-panel {
  background: var(--bg-card); border: 1px solid var(--dd-line);
  border-radius: var(--radius); padding: 20px; box-shadow: var(--shadow-md); min-width: 0;
}
.kgpb-dept .dd-panel h2 {
  margin: 0 0 14px; font-size: 16.5px; font-weight: 700; line-height: 1.25;
  display: flex; align-items: center; gap: 8px; color: var(--text);
}

/* ───────────────────────  ЭТАЖ 1: KPI-плитки  ─────────────────────── */
.kgpb-dept .dd-kpis { display: flex; gap: 12px; flex-wrap: wrap; }
.kgpb-dept .dd-kpi {
  flex: 1 1 190px; min-width: 175px; text-align: left;
  background: var(--bg-card); border: 1px solid var(--border-control); border-radius: var(--radius); /* 1.4.11: .dd-kpi — <button aria-pressed>, это контур управления, а не декор */
  padding: 14px 16px; cursor: pointer; box-shadow: var(--shadow-md);
  transition: border-color .15s, box-shadow .15s;
}
.kgpb-dept .dd-kpi:hover { border-color: var(--border-control-hover); background: var(--dd-sunken); }
.kgpb-dept .dd-kpi[aria-pressed="true"] { border-color: var(--primary); box-shadow: 0 0 0 1px var(--primary) inset; }
.kgpb-dept .dd-kpi-num {
  font-size: var(--dd-fs-metric); font-weight: 800; line-height: 1.05; letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums; display: flex; align-items: center; gap: 8px;
}
.kgpb-dept .dd-kpi-num .kic { width: 20px; height: 20px; flex: none; }
.kgpb-dept .dd-kpi-num.red { color: var(--danger); }
.kgpb-dept .dd-kpi-num.yellow { color: var(--warning-text); }
.kgpb-dept .dd-kpi-num.neutral { color: var(--text); }
/* display:block обязателен: подпись — <span>, и инлайновая кнопка «Пригласить» вставала с ней
   в одну строку вплотную (зазор 0 px — живая проверка прода), а вертикальный отступ кнопки
   в инлайновом потоке не действовал вовсе. */
.kgpb-dept .dd-kpi-label { display: block; color: var(--text-muted); font-size: 12.5px; margin-top: 6px; line-height: 1.3; }
.kgpb-dept .dd-kpi--off { border-style: dashed; border-color: var(--border-strong); cursor: default; box-shadow: none; }
.kgpb-dept .dd-kpi--off:hover { background: var(--bg-card); }
.kgpb-dept .dd-kpi-spark { display: block; margin-top: 8px; color: var(--text-faint); height: 18px; }
.kgpb-dept .dd-kpi-delta { font-size: 12px; font-weight: 700; margin-left: auto; }
.kgpb-dept .dd-kpi-delta.up { color: var(--danger); }
.kgpb-dept .dd-kpi-delta.down { color: var(--success); }

.kgpb-dept .dd-invite-note {
  margin: 0; padding: 10px 14px; border-radius: var(--radius-sm);
  background: var(--dd-sunken); color: var(--text-muted); font-size: 12.5px;
}
.kgpb-dept .dd-cta {
  margin-top: 10px; border: 0; background: var(--primary); color: var(--on-primary, #fff);
  border-radius: var(--radius-sm); padding: 8px 14px; min-height: 36px;
  font-size: 13px; font-weight: 600; cursor: pointer; display: inline-flex; align-items: center; gap: 6px;
}
.kgpb-dept .dd-cta:hover { background: var(--primary-hover); }

/* ─────────  ЭТАЖ 2: бенто 8/4 — полосы по округам + лента событий  ───────── */
.kgpb-dept .dd-floor2 { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 16px; }

.kgpb-dept .dd-bar-row {
  display: grid; grid-template-columns: 76px 1fr 46px; gap: 10px; align-items: center;
  margin-bottom: 8px; font-size: 13px;
}
.kgpb-dept .dd-bar-name { color: var(--text-muted); font-weight: 600; }
.kgpb-dept .dd-bar { display: flex; height: 18px; border-radius: 5px; overflow: hidden; background: var(--dd-sunken); gap: 1px; }
.kgpb-dept .dd-bar span { display: block; height: 100%; min-width: 3px; }
.kgpb-dept .dd-seg-red { background: var(--danger); }
.kgpb-dept .dd-seg-yellow { background: var(--warning); }
.kgpb-dept .dd-seg-green { background: var(--success); }
.kgpb-dept .dd-seg-erknm { background: var(--border-strong); }

/* воронка подключения: различает ПОЗИЦИЯ и подпись, а не пять оттенков —
   монохромная лестница из пяти ступеней физически неразличима (шаг ≤1,35:1) */
.kgpb-dept .dd-funnel { display: grid; gap: 8px; }
.kgpb-dept .dd-funnel-row { display: grid; grid-template-columns: 200px 1fr 56px; gap: 10px; align-items: center; font-size: 13px; }
.kgpb-dept .dd-funnel-name { color: var(--text-muted); font-weight: 600; }
.kgpb-dept .dd-funnel-track { display: block; height: 18px; border-radius: 5px; background: var(--dd-sunken); overflow: hidden; }
/* display:block обязателен: заливка — <span>, а инлайновый элемент игнорирует width/height
   молча. Трек рисовался только потому, что он элемент grid и блокифицируется сам. */
.kgpb-dept .dd-funnel-fill { display: block; height: 100%; background: var(--primary); border-radius: 5px; }

.kgpb-dept .dd-legend { display: flex; flex-wrap: wrap; gap: 8px 18px; margin-top: 14px; font-size: 12px; color: var(--text-muted); }
.kgpb-dept .dd-legend i {
  display: inline-block; width: 11px; height: 11px; border-radius: 3px;
  margin-right: 6px; vertical-align: -1px; border: 1px solid var(--dd-line);
}

.kgpb-dept .dd-feed { list-style: none; margin: 0; padding: 0; }
.kgpb-dept .dd-feed li {
  display: flex; gap: 10px; align-items: baseline; padding: 9px 0;
  border-top: 1px solid var(--border); font-size: 13px;
}
.kgpb-dept .dd-feed li:first-child { border-top: 0; }
.kgpb-dept .dd-feed .dd-feed-when { color: var(--text-muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.kgpb-dept .dd-feed .dd-feed-school { font-weight: 700; }
.kgpb-dept .dd-feed-note { color: var(--text-faint); font-size: 12px; }
.kgpb-dept .dd-more {
  border: 0; background: none; color: var(--primary); cursor: pointer;
  padding: 10px 0 2px; min-height: 36px; font-size: 13px; font-weight: 600;
}
.kgpb-dept .dd-more:hover { text-decoration: underline; }

/* ────────────────  СВЕТОФОР: иконка + текст + число + позиция  ──────────────── */
.kgpb-dept .dd-badge {
  display: inline-flex; align-items: center; gap: 6px; border-radius: var(--radius-pill);
  padding: 3px 11px; font-size: 12.5px; font-weight: 700; white-space: nowrap;
}
.kgpb-dept .dd-badge .kic { width: 13px; height: 13px; flex: none; }
.kgpb-dept .dd-badge--red { background: var(--danger-bg); color: var(--danger); }
.kgpb-dept .dd-badge--yellow { background: var(--warning-bg); color: var(--warning-text); }
.kgpb-dept .dd-badge--green { background: var(--success-bg); color: var(--success); }
.kgpb-dept .dd-badge--erknm { background: var(--info-bg, var(--primary-bg)); color: var(--primary-text); }
.kgpb-dept .dd-badge--off { background: transparent; color: var(--text-muted); border: 1px dashed var(--border-strong); font-weight: 600; }

/* ──────────────────  ТУЛБАР ТАБЛИЦЫ: табы-счётчики, фильтры  ────────────────── */
.kgpb-dept .dd-tabs { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 14px; }
.kgpb-dept .dd-tab {
  border: 1px solid var(--dd-line); background: var(--bg-card); color: var(--text-muted);
  border-radius: var(--radius-pill); padding: 7px 14px; min-height: 36px;
  font-size: 13px; font-weight: 600; cursor: pointer; display: inline-flex; align-items: center; gap: 7px;
}
.kgpb-dept .dd-tab:hover { background: var(--dd-sunken); color: var(--text); }
.kgpb-dept .dd-tab[aria-pressed="true"] { background: var(--primary-bg); border-color: var(--primary); color: var(--primary-text); }
.kgpb-dept .dd-tab b { font-variant-numeric: tabular-nums; }

.kgpb-dept .dd-toolbar {
  display: flex; gap: 10px; flex-wrap: wrap; align-items: center;
  padding: 10px 12px; margin-bottom: 12px;
  background: var(--dd-sunken); border-radius: var(--radius-sm);
}
.kgpb-dept .dd-toolbar .dd-spacer { margin-left: auto; }
.kgpb-dept .dd-toolbar label { font-size: 12px; color: var(--text-muted); font-weight: 600; }
.kgpb-dept .dd-filters { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.kgpb-dept .dd-filters select, .kgpb-dept .dd-filters input {
  background: var(--bg-card); color: var(--text); border: 1px solid var(--dd-line);
  border-radius: var(--radius-sm); padding: 8px 11px; min-height: 36px; font-size: 13px;
}
.kgpb-dept .dd-filters input { min-width: 190px; }
.kgpb-dept .dd-chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
.kgpb-dept .dd-chip {
  display: inline-flex; align-items: center; gap: 6px; background: var(--primary-bg);
  color: var(--primary-text); border-radius: var(--radius-pill);
  padding: 4px 6px 4px 12px; font-size: 12.5px; font-weight: 600;
}
.kgpb-dept .dd-chip button {
  border: 0; background: none; color: inherit; cursor: pointer;
  width: 24px; height: 24px; border-radius: 50%; line-height: 1; font-size: 15px;
  display: inline-flex; align-items: center; justify-content: center;
}
.kgpb-dept .dd-chip button:hover { background: var(--bg-accent); }

/* ────────────────────────────  ТАБЛИЦА  ──────────────────────────── */
/* Одна прокрутка: липнет шапка таблицы к вьюпорту, а не внутренний контейнер с max-height —
   прежние 62vh показывали 15 строк из 107 и давали двойной скролл. */
.kgpb-dept .dd-tblwrap { overflow-x: auto; border: 1px solid var(--dd-line); border-radius: var(--radius); }
/* 🔴 min-width у таблицы БОЛЬШЕ НЕТ, и это решение, а не упущение. Жёсткие 980 px были
   основанием по умолчанию: каждая новая таблица рождалась шире канвы кабинета (861 px на
   типовых 1280) и переполняла карточку, пока кто-нибудь не вспоминал про модификатор
   `--narrow`. Раздача модификатора руками — мина с отложенным взрывом: следующая таблица
   опять родится без него. Теперь по умолчанию таблица занимает ровно контейнер и шире него
   становится только от собственного содержимого — то есть по делу, а не «на всякий случай».
   Кому такая ширина всё-таки нужна (сегодня это одна таблица школ, восемь колонок), тот
   получает её содержимым и объявляет прокрутку явно — см. --pinlast ниже. */
.kgpb-dept table.dd-tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 14px; }
.kgpb-dept .dd-tbl thead th {
  position: sticky; top: 0; z-index: 2; background: var(--dd-sunken); text-align: left;
  font-weight: 700; color: var(--text-muted); font-size: 11px; text-transform: uppercase; letter-spacing: .06em;
  padding: 0 12px; height: 36px; border-bottom: 1px solid var(--border-strong); white-space: nowrap;
}
.kgpb-dept .dd-tbl thead th[aria-sort] { cursor: pointer; user-select: none; }
.kgpb-dept .dd-tbl thead th[aria-sort]:hover { color: var(--text); }
.kgpb-dept .dd-tbl thead th[aria-sort="ascending"]::after { content: " ↑"; }
.kgpb-dept .dd-tbl thead th[aria-sort="descending"]::after { content: " ↓"; }
.kgpb-dept .dd-tbl tbody td {
  padding: 0 12px; height: var(--dd-row); border-bottom: 1px solid var(--border); white-space: nowrap;
}
.kgpb-dept .dd-tbl tbody tr:nth-child(even) { background: var(--dd-sunken); }
/* Наведение красит ЯЧЕЙКУ, а не строку. Здесь стояло `tr:hover { background: --bg-accent }` —
   правило, мёртвое по построению: голый селектор темы `table tbody tr:hover td`
   (theme.css:385) достаёт до .dd-tbl (обе страницы грузят theme.css раньше dept.css)
   и кладёт фон ЯЧЕЙКИ поверх фона строки. До пикселя доезжал только фон темы, а на чётных
   строках --bg-accent к тому же совпадал с зеброй. Мерить надо td, а не tr.
   Нейтральной лестницы не хватает ни в одной теме (замер вычисленным значением:
   1,03 светлая-чётная, 1,20 тёмная-чётная, 1,05 тёмная-нечётная), поэтому заливка уходит
   на брендовый тинт, а различие несёт ВТОРОЙ носитель — внутренняя кайма сверху и снизу
   (inset-тень, не border: border сдвинул бы геометрию строки на пиксель). Кайма --primary
   даёт 5,99–8,50:1 ко всем четырём фонам, то есть работает и там, где заливки не хватает.
   Кликабельна ровно одна таблица — список организаций: её строки помечены data-id
   (dept-dashboard.js:1156, обработчик :1185). Остальные .dd-tbl (динамика, журнал изменений,
   мастер заведения, реестры кабинета) — данные без перехода, и подсветка с курсором-рукой
   обещала бы на них клик, которого нет. */
.kgpb-dept .dd-tbl tbody tr[data-id] { cursor: pointer; }
.kgpb-dept .dd-tbl tbody tr[data-id]:hover td,
.kgpb-dept .dd-tbl tbody tr[data-id]:focus-within td {
  background: var(--primary-bg);
  box-shadow: inset 0 1px 0 var(--primary), inset 0 -1px 0 var(--primary);
}
/* 🔴 Бейдж ЕРКНМ не имеет права раствориться в наведённой строке. Его заливка идёт из
   --info-bg, а тот БАЙТ В БАЙТ равен --primary-bg в обеих темах (theme.css:72 и :806) —
   значит на наведённой строке плашка теряет форму и превращается в обычный текст, хотя
   именно заливка и несёт смысл «это статус». Второй носитель берётся не новый: контурная
   кайма — ровно та, что уже носит .dd-tab[aria-pressed]. Скоуп по СОСТОЯНИЮ, а не по классу:
   в карточке организации и в прочих таблицах бейдж стоит на --bg-card, там дефекта нет. */
.kgpb-dept .dd-tbl tbody tr[data-id]:hover .dd-badge--erknm,
.kgpb-dept .dd-tbl tbody tr[data-id]:focus-within .dd-badge--erknm {
  box-shadow: inset 0 0 0 1px var(--primary);
}

/* цветная полоска статуса по левому краю строки: цвет «по краю», строка не заливается */
.kgpb-dept .dd-tbl tbody td:first-child { border-left: 3px solid transparent; padding-left: 12px; }
.kgpb-dept .dd-tbl tbody tr[data-sev="red"] td:first-child { border-left-color: var(--danger); }
.kgpb-dept .dd-tbl tbody tr[data-sev="yellow"] td:first-child { border-left-color: var(--warning); }
.kgpb-dept .dd-tbl tbody tr[data-sev="green"] td:first-child { border-left-color: var(--success); }
.kgpb-dept .dd-tbl tbody tr[data-sev="erknm"] td:first-child { border-left-color: var(--border-strong); }
.kgpb-dept .dd-tbl tbody tr[data-sev="off"] td:first-child { border-left-color: var(--border-strong); border-left-style: dashed; }
.kgpb-dept .dd-tbl .dd-cell-muted { color: var(--text-muted); }
.kgpb-dept .dd-tbl .dd-name { font-weight: 600; }
.kgpb-dept .dd-row-open {
  border: 0; background: none; color: var(--primary); cursor: pointer;
  width: 36px; height: 36px; border-radius: var(--radius-sm);
  display: inline-flex; align-items: center; justify-content: center;
}
/* T-1220. Заливка --primary-bg — тот же токен, что у наведённой строки: на ней своё
   наведение кнопки давало ровно 1,00, на фонах покоя 1,179/1,017 светлая и 1,267/1,110
   тёмная — не видно нигде. Цветом не развести (см. разбор T-1217 ниже), состояние несёт
   ФОРМА: inset-кольцо 1 px --primary внутри бокса 36×36. Кольцо к заливке наведённой
   строки 7,209/5,987, к --bg-card 8,503/7,583, к зебре --dd-sunken 7,092/6,644
   (светлая/тёмная, порог графики 3:1). Формы состояний не совпадают: наведение — полый
   контур, фокус — сплошная заливка, кайма строки — линии во всю ширину. С фокусом не
   спорит: у :focus-visible ниже box-shadow: none — позже в файле при равной
   специфичности, под фокусом кольцо не рисуется. В forced-colors box-shadow гаснет —
   наведение возвращает outline в блоке forced-colors в конце файла. */
.kgpb-dept .dd-row-open:hover { background: var(--primary-bg); box-shadow: inset 0 0 0 1px var(--primary); }
/* 🔴 T-1217. Опенер НЕ носит общее кольцо файла (строка 65), и это геометрия, а не вкус.
   Замер вычисленным значением на dept-demo, 1440 на 900: кнопка 36 в строке 40, разброс
   кольца 4 px — кольцо выходит за строку на 2,5 сверху и 1,5 снизу и пересекает кайму
   строки с обеих сторон. Места для кольца внутри строки нет вовсе, и рост цели нажатия
   до 40-44 (T-1110) не помогает, а вредит: наружное кольцо растёт вместе с кнопкой.
   Наружный слой кольца и кайма наведения-фокуса строки (правило выше, tr с data-id) —
   ОДИН токен --primary, между ними 1,00; светлая прослойка кольца против заливки
   фокусированной строки даёт 1,18 в светлой теме и 1,27 в тёмной — не отделяет.
   Цветом эти два состояния не развести НИ ОДНИМ существующим токеном: кайма строки и
   есть самый контрастный к --primary-bg цвет темы, остальные к нему ближе (проверено
   на --primary-hover 1,35 и --text 1,86 в светлой). Разводит ФОРМА: строка носит две
   линии в 1 px во всю ширину, кнопка — сплошную заливку 36 на 36 внутри своего бокса.
   Заливка не выходит за строку ни на пиксель, высоту строки не трогает и переживёт
   любой рост цели нажатия. Числа: --primary против заливки фокусированной строки
   7,21 светлая и 5,99 тёмная; против фонов покоя (там опенер стоит в строках без
   data-id — списки кабинета и активность) 8,50 и 7,09 светлая, 7,58 и 6,64 тёмная;
   глиф --on-primary на --primary — 8,50 и 8,27. Новых токенов ноль.
   Сторож check-contrast меряет здесь пару чернила-заливка, а не кольцо, и правило
   попадает в его строку «правил без объявленного кольца»: кольца здесь и нет.
   outline: none — с T-1219 общее кольцо несёт и outline; наружный outline воспроизвёл
   бы тот же вынос ±2,5/1,5 за строку. В forced-colors заливка --primary не рисуется —
   индикатор возвращает inset-outline в блоке forced-colors в конце файла. */
.kgpb-dept .dd-row-open:focus-visible {
  background: var(--primary); color: var(--on-primary); outline: none; box-shadow: none;
}
.kgpb-dept .dd-tbl-count { color: var(--text-muted); font-size: 12px; margin: 12px 0 0; }
.kgpb-dept .dd-empty { padding: 40px; text-align: center; color: var(--text-muted); }

/* скелетон загрузки вместо белой пустоты */
.kgpb-dept .dd-skel { background: var(--dd-sunken); border-radius: var(--radius-sm); animation: ddPulse 1.2s ease-in-out infinite; }
@keyframes ddPulse { 0%, 100% { opacity: 1; } 50% { opacity: .55; } }
@media (prefers-reduced-motion: reduce) {
  .kgpb-dept .dd-skel { animation: none; }
  .kgpb-dept .dd-kpi { transition: none; }
}

/* ──────────────────  КАРТОЧКА ОРГАНИЗАЦИИ (правая панель)  ────────────────── */
.kgpb-dept .dd-backdrop { position: fixed; inset: 0; background: rgba(16,32,64,0.45); z-index: 50; }
.kgpb-dept .dd-card {
  position: fixed; top: 40px; right: 0; bottom: 0; width: min(680px, 100%); z-index: 55;
  background: var(--bg-card); border: 2px solid var(--primary); border-right: 0;
  border-radius: var(--radius-lg) 0 0 0; box-shadow: var(--shadow-lg);
  display: flex; flex-direction: column; overflow: hidden;
}
.kgpb-dept .dd-card-strip {
  background: var(--primary-bg); color: var(--primary-text); padding: 10px 16px;
  font-weight: 700; font-size: 13px; display: flex; align-items: center; gap: 8px;
}
.kgpb-dept .dd-card-strip .dd-card-close {
  margin-left: auto; border: 0; background: none; color: inherit; cursor: pointer;
  width: 36px; height: 36px; font-size: 20px; line-height: 1; border-radius: var(--radius-sm);
  display: inline-flex; align-items: center; justify-content: center;
}
.kgpb-dept .dd-crumbs { padding: 10px 16px 0; color: var(--text-muted); font-size: 12px; }
.kgpb-dept .dd-crumbs b { color: var(--text); font-weight: 700; }
.kgpb-dept .dd-card-body { padding: 16px; overflow: auto; }
.kgpb-dept .dd-card-body h3 { margin: 0 0 8px; font-size: 22px; font-weight: 800; letter-spacing: -0.01em; }
.kgpb-dept .dd-kv { display: grid; grid-template-columns: 200px 1fr; gap: 8px 14px; font-size: 13px; margin: 14px 0; }
.kgpb-dept .dd-kv dt { color: var(--text-muted); margin: 0; }
.kgpb-dept .dd-kv dd { margin: 0; }
/* действия карточки липнут к низу панели — иначе уезжают за экран на длинной карточке */
.kgpb-dept .dd-card-actions {
  display: flex; gap: 8px; flex-wrap: wrap; margin-top: auto;
  padding: 12px 16px; border-top: 1px solid var(--dd-line); background: var(--bg-card);
}
.kgpb-dept .dd-card-actions button {
  border: 1px solid var(--dd-line); background: var(--dd-sunken); color: var(--text-muted);
  border-radius: var(--radius-sm); padding: 9px 14px; min-height: 36px; font-size: 13px; font-weight: 600;
}
/* 🔴 T-1199. «Отключено» несёт пунктир — тот же признак, которым файл уже помечает
   выключенное (значок статуса off, плитка off, полоска строки со значением off), — а не
   общая прозрачность. Прозрачность 0.65 гасила ВЕСЬ орган вместе с надписью: замер
   вычисленным значением 25.08 дал 2,52 в светлой теме и 4,06 в тёмной, тогда как те же
   чернила на той же подложке без неё — 5,02 и 7,57 (числа темы, см. шапку файла), обе AA.
   Формально WCAG отключённые органы исключает (критерии 1.4.3 и 1.4.11, оговорка про
   неактивный компонент), и ради числа дизайн бы не правился. Правится он потому, что
   надпись здесь И ЕСТЬ сообщение: три кнопки подвала карточки организации выключены
   ВСЕГДА и только надписью говорят, что именно доступно самой организации, а у кнопки
   отправки поручения в надписи стоит число получателей, из-за которого она погашена.
   Тот же вывод про сплошную прозрачность уже сделан темой по задачам (theme.css, блок
   про мокапную .72) — здесь он повторён, а не изобретён.
   Толщина рамки НЕ ТРОГАЕТСЯ: меняются только стиль и цвет. У кнопки подвала рамка
   1 px уже есть и остаётся 1 px, у .dd-cta её нет вовсе (border: 0) и пунктир на нулевой
   толщине ничего не рисует — иначе кнопка отправки прыгала бы на 1,5 px при каждом
   снятии галочки получателя, она гаснет и зажигается вживую. Для .dd-cta признаком
   служит сам уход брендовой заливки в приглушённую.
   Оба контейнера лечатся одним правилом: разница между ними — контейнер, а не состояние. */
.kgpb-dept .dd-card-actions button[disabled],
.kgpb-dept .dd-actions button[disabled] {
  cursor: not-allowed;
  background: var(--dd-sunken); color: var(--text-muted);
  border-style: dashed; border-color: var(--border-strong);
}
.kgpb-dept .dd-src { color: var(--text-faint); font-size: 12px; }

/* ───────  ФОРМЫ КАБИНЕТА (мастер заведения, настройки сети) — T-600  ───────
   Ноль новых цветов и размеров: те же токены и та же высота цели нажатия 36 px,
   что у фильтров таблицы. Метка — отдельный блок: связка label[for] ↔ поле
   обязательна, инлайновая подпись рядом с полем её не заменяет. */
.kgpb-dept .dd-field { margin: 0 0 16px; }
.kgpb-dept .dd-label { display: block; margin-bottom: 6px; font-size: 13px; font-weight: 600; color: var(--text); }
.kgpb-dept .dd-req { color: var(--danger); }
.kgpb-dept .dd-input {
  width: 100%; background: var(--bg-card); color: var(--text);
  border: 1px solid var(--dd-line); border-radius: var(--radius-sm);
  padding: 9px 12px; min-height: 36px; font-size: 14px; line-height: 1.45;
}
.kgpb-dept textarea.dd-input { resize: vertical; min-height: 120px; }
.kgpb-dept .dd-field .dd-src { margin: 6px 0 0; }
/* В-238 P0: цель — вся метка (T-1206), а не флажок 16 px; замер T-1057 давал 18,84 —
   ниже жёсткого минимума AA 24 (SC 2.5.8). Флажку пол не нужен, у него flex:none ниже. */
.kgpb-dept .dd-check { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; cursor: pointer; min-height: 24px; }
.kgpb-dept .dd-check input { width: 16px; height: 16px; flex: none; }
/* В-238, сенсорный разряд. Стоит ЗДЕСЬ, а не в theme.css: там правило оказалось мёртвым —
   безусловный .dd-check{min-height:24px} выше в этом же файле бьёт его при равной
   специфичности, потому что dept.css подключается позже. Замер живой приёмки на 834
   (pointer:coarse) давал 24.0 вместо 44. */
/* Д-3 (живая приёмка 03.09): summary «Те же данные таблицей» — 1319×17,4, ниже жёсткого
   минимума AA 24 (SC 2.5.8). Порог безусловный: 24 нарушается при ЛЮБОМ указателе,
   а не только под пальцем — поэтому правило стоит ВНЕ медиазапроса. */
.kgpb-dept summary { min-height: 24px; }
@media (pointer: coarse) {
  .kgpb-dept .dd-check, .kgpb-dept .dd-row-open { min-height: 44px; }
}
/* Ряд кнопок формы. Отдельный класс, а не .dd-card-actions: тот — липкий подвал
   слайд-овера и перекрашивает .dd-cta в «тихую» кнопку (селектор специфичнее). */
.kgpb-dept .dd-actions { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 4px; }
.kgpb-dept .dd-actions .dd-cta { margin-top: 0; }
/* Выключенная кнопка ряда формы лечится там же, где кнопка подвала карточки (T-1199). */

/* ══════  ЭКРАН ОРГАНИЗАЦИИ: T-602 (провал), T-603 (проценты), T-604 (активность)  ══════
   Ноль новых цветовых литералов и ноль новых токенов: всё из theme.css и из алиасов
   этого файла. Режим просмотра обозначается РАМКОЙ и полосой, а не заливкой: заливка
   съела бы семантику цвета статусов внутри экрана. */
/* overflow здесь НЕ ставится: overflow на предке отключает position:sticky, а под рамкой
   живут липкие элементы (шапка таблицы, закреплённая последняя колонка) — рамка не стоит
   их потери при прокрутке. Прежняя формулировка ссылалась на демо-плашку; после T-693 в
   кабинете плашка не липкая, но само правило осталось в силе по причине выше. */
.kgpb-dept.dd-viewmode { border: 2px solid var(--primary); border-radius: var(--radius-lg); }
.kgpb-dept .dd-viewstrip {
  background: var(--primary-bg); color: var(--primary-text);
  padding: 10px var(--dd-gutter); font-weight: 700; font-size: 13px;
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.kgpb-dept .dd-viewstrip .dd-viewstrip-close { margin-left: auto; }
/* Кнопка, выглядящая ссылкой: крошки обязаны быть кнопками (это действие, а не адрес),
   но читаться должны как путь. */
.kgpb-dept .dd-link {
  border: 0; background: none; padding: 0; font: inherit; color: var(--primary-text);
  text-decoration: underline; cursor: pointer; min-height: 24px;
}
.kgpb-dept .dd-link:hover { color: var(--primary); }
.kgpb-dept .dd-sr {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* — два процента РЯДОМ и раздельно; третий счётчик — вне обоих знаменателей — */
.kgpb-dept .dd-pcts { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px; }
.kgpb-dept .dd-pct {
  border: 1px solid var(--dd-line); border-radius: var(--radius); padding: 14px 16px;
  background: var(--bg-card); display: flex; flex-direction: column; gap: 2px; min-width: 0;
}
.kgpb-dept .dd-pct-num { font-size: var(--dd-fs-metric); font-weight: 800; line-height: 1.1; font-variant-numeric: tabular-nums; }
.kgpb-dept .dd-pct-label { font-size: 13px; font-weight: 700; }
/* Цвет отделяет закон от пожелания учредителя: бренд — норма, нейтраль — задача
   учредителя. Красного нет ни у одного из трёх: это метрики, а не приговор. */
.kgpb-dept .dd-pct--fire { border-left: 3px solid var(--primary); }
.kgpb-dept .dd-pct--fire .dd-pct-num { color: var(--primary); }
.kgpb-dept .dd-pct--founder { border-left: 3px solid var(--border-strong); }
.kgpb-dept .dd-pct--ask { border-left: 3px dashed var(--border-strong); }
.kgpb-dept .dd-pct--ask .dd-pct-num { color: var(--text-muted); }
/* Шкала АКТИВНОСТИ — своя тройка. Тот же цветовой словарь продукта, но метрика другая:
   «давно не заходили» не равно «просрочено требование», и делить классы с процентами
   готовности эти счётчики не должны. */
.kgpb-dept .dd-pct--ok { border-left: 3px solid var(--success); }
.kgpb-dept .dd-pct--ok .dd-pct-num { color: var(--success); }
.kgpb-dept .dd-pct--warn { border-left: 3px solid var(--warning); }
.kgpb-dept .dd-pct--warn .dd-pct-num { color: var(--warning-text); }
.kgpb-dept .dd-pct--alert { border-left: 3px solid var(--danger); }
.kgpb-dept .dd-pct--alert .dd-pct-num { color: var(--danger); }

.kgpb-dept .dd-note {
  margin: 12px 0 0; padding: 10px 12px; font-size: 12.5px;
  background: var(--dd-sunken); border-radius: var(--radius-sm); color: var(--text-muted);
  display: flex; align-items: flex-start; gap: 8px;
}
.kgpb-dept .dd-note .kic { flex: none; margin-top: 2px; }
.kgpb-dept .dd-sub-h { margin: 16px 0 8px; font-size: 13px; font-weight: 700; }
/* T-632: тело одного факта карточки организации (значение + источник + основание).
   Свой блок нужен потому, что источник и правовое основание идут ПОД значением и должны
   читаться как его часть, а не как соседний абзац; новых цветов нет — только отступы. */
.kgpb-dept .dd-fact { margin: 0 0 4px; line-height: 1.45; }
.kgpb-dept .dd-fact .dd-src { display: block; margin-top: 2px; }
.kgpb-dept .dd-fact .dd-feed { margin-top: 6px; }
.kgpb-dept .dd-mini { margin: 4px 0 0; padding-left: 18px; }
.kgpb-dept .dd-mini li { margin: 2px 0; }

/* — серая шкала смежных направлений: вне пожарного процента и визуально вне его — */
.kgpb-dept .dd-gauge { display: block; height: 10px; border-radius: 5px; background: var(--dd-sunken); overflow: hidden; }
.kgpb-dept .dd-gauge span { display: block; height: 100%; background: var(--primary); }
.kgpb-dept .dd-gauge--grey span { background: var(--border-strong); }
.kgpb-dept .dd-adjacent { border-style: dashed; }

/* — группы шагов: раскрытие через нативный <details>, вопрос задаётся по ходу — */
.kgpb-dept .dd-group { border-top: 1px solid var(--dd-line); }
.kgpb-dept .dd-group > summary {
  cursor: pointer; padding: 12px 4px; min-height: var(--dd-row);
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 14px;
}
.kgpb-dept .dd-group > summary:hover { background: var(--dd-sunken); }

.kgpb-dept .dd-step { padding: 14px 0; border-top: 1px dashed var(--dd-line); }
.kgpb-dept .dd-step-head {
  margin: 0 0 8px; font-size: 14px; font-weight: 700; line-height: 1.35;
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
}
.kgpb-dept .dd-step-id { font-weight: 600; }
/* Реквизит акта и номер из реестра — длинные неразрывные строки: без переноса
   они выталкивают колонку и рождают горизонтальную прокрутку страницы. */
.kgpb-dept .dd-step .dd-kv dd, .kgpb-dept .dd-kv dd { overflow-wrap: anywhere; }
.kgpb-dept .dd-step .dd-kv { margin: 8px 0; }

.kgpb-dept .dd-q {
  border: 1px solid var(--dd-line); border-radius: var(--radius-sm);
  padding: 12px 14px; margin: 10px 0 0; background: var(--dd-sunken);
}
.kgpb-dept .dd-q legend { padding: 0 6px; font-size: 13px; font-weight: 700; }
.kgpb-dept .dd-q-opts { display: flex; flex-wrap: wrap; gap: 8px 18px; }
/* 🔴 «Не знаю» — обычный вариант ответа, а не ошибка: ни красного, ни предупреждения. */
.kgpb-dept .dd-check--unknown { color: var(--text-muted); }
.kgpb-dept .dd-form { margin-top: 12px; }
.kgpb-dept .dd-form .dd-q { background: transparent; }

/* ══════  ПОРУЧЕНИЯ: ПЕРЕПИСКА ПО ПОРУЧЕНИЮ — T-606  ══════
   Ноль новых цветов и ноль новых токенов: слои, рамки и подписи — те же, что у ленты
   активности. Сторона различается ТРЕМЯ признаками сразу (подпись, выравнивание, фон):
   одно выравнивание не читается на узком экране, а один фон — в высококонтрастной теме. */
.kgpb-dept .dd-thread {
  list-style: none; margin: 12px 0 0; padding: 0;
  display: flex; flex-direction: column; gap: 10px;
}
/* Разделитель дня. Существующее правило .dd-daysep th — про таблицу активности;
   здесь тот же приём в списке, поэтому и класс тот же, а не второе имя для одного смысла. */
.kgpb-dept .dd-thread > li.dd-daysep {
  align-self: center; background: var(--dd-sunken); border-radius: var(--radius-pill);
  padding: 3px 12px; font-size: 12px; font-weight: 700; color: var(--text-muted);
}
.kgpb-dept .dd-msg {
  max-width: min(680px, 92%); min-width: 0;
  border: 1px solid var(--dd-line); border-radius: var(--radius);
  padding: 10px 12px; background: var(--bg-card);
}
.kgpb-dept .dd-msg--founder { align-self: flex-start; }
.kgpb-dept .dd-msg--unit { align-self: flex-end; background: var(--dd-sunken); }
.kgpb-dept .dd-msg-who { display: block; margin-bottom: 4px; font-size: 12px; font-weight: 700; color: var(--text-muted); }
/* pre-wrap: перевод строки в сообщении — часть текста, а не оформление. anywhere:
   вставленный номер акта или ссылка не должны выталкивать колонку. */
.kgpb-dept .dd-msg-body { margin: 0; font-size: 13.5px; white-space: pre-wrap; overflow-wrap: anywhere; }
.kgpb-dept .dd-msg-photo { display: block; margin-top: 8px; }
.kgpb-dept .dd-msg-photo img {
  display: block; max-width: 100%; max-height: 280px;
  border: 1px solid var(--dd-line); border-radius: var(--radius-sm);
}
/* Список получателей в предпросмотре: он бывает на сто с лишним строк — своя прокрутка,
   иначе кнопка «Отправить N организациям» уезжает за экран и подтверждать нечем. */
.kgpb-dept .dd-rcpts {
  list-style: none; margin: 8px 0 12px; padding: 8px 10px; display: grid; gap: 8px;
  max-height: 340px; overflow: auto;
  border: 1px solid var(--dd-line); border-radius: var(--radius-sm); background: var(--dd-sunken);
}
.kgpb-dept .dd-rcpts li { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-width: 0; }
.kgpb-dept .dd-rcpts .dd-check { font-weight: 600; }
/* Ряд кнопок ответа организации — стандартная высота цели нажатия, как у прочих .dd-ghost. */
.kgpb-dept .dd-form input[type="file"].dd-input { padding: 7px 10px; line-height: 1.2; }

/* 🔴 Объявления `min-width: 0` здесь больше нет: узкая таблица стала нормой, а не оговоркой
   (см. базовое правило .dd-tbl выше). Модификатор остался ради ВТОРОЙ своей половины —
   переноса строк, — и её одной достаточно, чтобы имя `--narrow` продолжало значить то же
   самое. История, которую нельзя терять: раньше правило звучало `.dd-tbl--narrow` (0,2,0)
   против базового `table.dd-tbl` (0,2,1) и проигрывало ему ВСЕГДА — модификатор был
   написан, подключён и не работал, а живая проверка мерила у списка 980 при 861 доступных.
   Отсюда `table.` в селекторах ниже и запрет на `!important`: тот переносит ту же ловушку
   на следующего. */
/* Одного контейнера мало: ячейки неразрывны, и минимальная ширина таблицы всё равно равна
   сумме самых длинных строк — предпросмотр импорта распирало до 1122 px причиной «ИНН не
   проходит проверку контрольной суммы», а бейдж «не отправлено: нет адреса» уезжал за правый
   край. Перенос разрешаем там, где текст длинный; цифровые ячейки (.dd-num — ИНН, номер
   строки) остаются в одну строку: колонка чисел от переноса читается хуже. */
.kgpb-dept table.dd-tbl--narrow tbody td:not(.dd-num),
.kgpb-dept table.dd-tbl--narrow tbody td .dd-badge { white-space: normal; }

/* 🔴 Таблица школ — восемь колонок, и в 861 px канвы кабинета она не влезает НИКАК: перенос
   строк (замер) даёт 980 px и растит высоту с 4333 до 5951 px. Значит прокрутка вбок —
   не недосмотр, а норма для этой таблицы. Беда была в другом: горизонтальная полоса живёт
   у НИЖНЕГО края контейнера высотой 4333 px, то есть за экраном, и человек видел колонку
   «Надзорное событие», обрезанную краем карточки, без единого признака, что вправо есть ещё.
   Здесь последняя колонка прибита к правому краю видимой части и отбрасывает тень на текст
   под собой: тень едет вместе с вьюпортом и говорит «содержимое продолжается» в любой точке
   таблицы, а колонка действия перестаёт быть недостижимой. Модификатор ИМЕНОВАННЫЙ, а не
   общий: у таблиц, которые в контейнер влезают, прокрутки нет и тень нарисовала бы ложную
   границу. Фон у прибитой ячейки обязан быть непрозрачным — она едет поверх соседних.
   `:not([colspan])` — про строку пустого отбора: там единственная ячейка на всю ширину сама
   себе последняя, и без оговорки она получила бы тень вертикальной чертой слева от текста
   «ничего не найдено», где прокручивать нечего. */
.kgpb-dept table.dd-tbl--pinlast thead th:last-child,
.kgpb-dept table.dd-tbl--pinlast tbody td:last-child:not([colspan]) {
  position: sticky; right: 0; background: var(--bg-card);
  /* Край слоя — ХАЙРЛАЙН, а не тень. Тень здесь врала трижды (ревью дизайн-системы 13.08):
     (1) в тёмной теме `--border-strong` СВЕТЛЕЕ фона карточки, то есть колонка не затенялась,
     а светилась — тема для теней держит отдельные токены на чёрном; (2) отрицательный spread
     ужимал теневой прямоугольник со всех сторон, включая верх и низ, и на строке высотой 40 px
     край рвался в пунктир; (3) тень рисуется всегда, а прокрутки при широком окне (main до
     1920 px) нет — то есть на мониторе департамента она изображала границу там, где ничего
     не уезжает. Линия в 1 px лишена всех трёх пороков: непрерывна, верна в обеих темах и
     честна в статике — читается как отбивка колонки действия. Это единственная вертикальная
     линия в таблице (у ячеек только `border-bottom`), поэтому сеткой она не выглядит. */
  border-left: 1px solid var(--dd-line);
}
.kgpb-dept table.dd-tbl--pinlast thead th:last-child { z-index: 3; background: var(--dd-sunken); }
.kgpb-dept table.dd-tbl--pinlast tbody td:last-child:not([colspan]) { z-index: 1; }
.kgpb-dept table.dd-tbl--pinlast tbody tr:nth-child(even) td:last-child:not([colspan]) { background: var(--dd-sunken); }
/* Наведение: ТОТ ЖЕ токен, что у остальных ячеек строки (:314) — иначе прибитая колонка
   подсвечивается ТРЕТЬИМ цветом и выглядит отдельным прямоугольником, до которого
   подсветка строки будто не доходит (поймано живой проверкой, `#151c29` против `#22304a`).
   Правило нужно потому, что своя специфичность (0,5,2) выше правила строки (0,4,3):
   без него у последней ячейки остаётся собственный фон --bg-card / --dd-sunken.
   Кайма из :314 сюда доезжает сама — каскад считает box-shadow отдельно от background. */
.kgpb-dept table.dd-tbl--pinlast tbody tr[data-id]:hover td:last-child:not([colspan]),
.kgpb-dept table.dd-tbl--pinlast tbody tr[data-id]:focus-within td:last-child:not([colspan]) { background: var(--primary-bg); }

.kgpb-dept .dd-daysep th {
  text-align: left; background: var(--dd-sunken); font-size: 12.5px; font-weight: 700;
  padding: 8px 10px; border-bottom: 1px solid var(--dd-line);
}

/* ══════  FORCED COLORS — режим высокой контрастности Windows (T-1214)  ══════
   В этом режиме box-shadow не рисуется вовсе, а background принудительно
   заменяется системным. Кольца фокуса уже переносит outline (общее правило
   :focus-visible в шапке файла). Здесь — два носителя, которые теряются целиком:
   1) индикатор фокуса опенера (T-1217) — сплошная заливка --primary гаснет вместе
      с background. Inset-outline лежит ВНУТРИ бокса 36×36: вынос за строку, ради
      которого наружное кольцо снималось, не возвращается;
   2) кайма наведения/фокуса строки (T-1196, inset box-shadow на td) — переезжает
      на outline ячеек. Highlight — системный цвет: forced-colors его уважает,
      обычный режим этих правил не видит (@media). Геометрию не трогаем: outline
      не border, высота строки не меняется. */
@media (forced-colors: active) {
  /* T-1220: inset-кольцо наведения опенера — box-shadow, здесь не рисуется; носитель —
     outline. Стоит ДО правила фокуса: при наведении+фокусе побеждает фокус (2 px). */
  .kgpb-dept .dd-row-open:hover { outline: 1px solid Highlight; outline-offset: -1px; }
  .kgpb-dept .dd-row-open:focus-visible { outline: 2px solid Highlight; outline-offset: -2px; }
  .kgpb-dept .dd-tbl tbody tr[data-id]:hover td,
  .kgpb-dept .dd-tbl tbody tr[data-id]:focus-within td {
    outline: 1px solid Highlight; outline-offset: -1px;
  }
}

@media (max-width: 1100px) {
  .kgpb-dept .dd-floor2 { grid-template-columns: 1fr; }
}
@media (max-width: 768px) {
  .kgpb-dept { --dd-gutter: 16px; --dd-floor: 24px; }
  .kgpb-dept .dd-header h1 { font-size: 22px; }
  .kgpb-dept .dd-kpi-num { font-size: var(--dd-fs-metric-sm); }
  .kgpb-dept .dd-head-right { margin-left: 0; }
  .kgpb-dept .dd-card { top: 34px; width: 100%; border-radius: 0; border-left: 0; border-top-width: 2px; }
  .kgpb-dept .dd-kv { grid-template-columns: 1fr; }
  .kgpb-dept .dd-funnel-row { grid-template-columns: 140px 1fr 44px; }
  /* Рамка режима просмотра на узком экране съедала бы 4 px ширины канвы: оставляем
     только верхнюю линию, полоса «только просмотр» и без рамки несмываема. */
  .kgpb-dept.dd-viewmode { border-radius: 0; border-left: 0; border-right: 0; border-bottom: 0; }
  .kgpb-dept .dd-pcts { grid-template-columns: 1fr; }
  .kgpb-dept .dd-pct-num { font-size: var(--dd-fs-metric-sm); }
  .kgpb-dept .dd-viewstrip .dd-viewstrip-close { margin-left: 0; }
}
