/* ============================================================================
   DR.Electric — Раскладка экрана "Проект" (app.css)
   Топбар + рейл этапов + рабочая область. Десктоп-first 1280→1024→768.
   ============================================================================ */

/* Цельная страница (владелец 07.08): прокручивается окно, а не внутренние
   области. Высота растёт с контентом; топбар, рейл и правая панель липнут. */
.app { min-height: 100vh; }

/* ---- Топбар проекта ---------------------------------------------------- */
.topbar {
  display: flex; align-items: center; gap: var(--sp-3);
  min-height: var(--topbar-h);
  padding: 10px var(--sp-5);
  background: var(--panel);
  border-bottom: 1px solid var(--line);
  position: sticky; top: 0;
  z-index: 30;
  /* #14: предотвращаем горизонтальный скролл на узких вьюпортах */
  min-width: 0; overflow: hidden;
}
/* Бренд живёт в шапке рейла (.rail__brand) и на экране входа. */
.brand__mark {
  display: grid; place-items: center;
  width: 28px; height: 28px; border-radius: 8px;
  background: var(--accent); color: #fff;
}
.brand__name { font-size: var(--fs-base); font-weight: 700; letter-spacing: -0.01em; }
.brand__name b { color: var(--accent); font-weight: 700; }

/* Слева — имя проекта и одна мета-строка: документы (data.js) + факты
   рабочего набора (ui-app-shell.js). Сжимается только она. */
.topbar__project { min-width: 0; display: grid; gap: 2px; }
.topbar__title { display: flex; align-items: baseline; gap: 10px; min-width: 0; }
.topbar__title > .btn { flex: none; align-self: center; }
.topbar__name {
  min-width: 0;
  font-size: var(--fs-md); font-weight: 600; letter-spacing: -0.01em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.topbar__meta {
  display: flex; align-items: baseline; gap: 6px;
  min-width: 0; color: var(--muted); font-size: var(--fs-xs);
  white-space: nowrap;
}
.topbar__meta > * { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
#projectShellFacts::before { content: "· "; }
#projectShellFacts[hidden] { display: none; }

.topbar__spacer { flex: 1; }
.topbar__actions { display: flex; align-items: center; gap: var(--sp-2); flex: 1 1 auto; min-width: 0; justify-content: flex-end; }
.topbar__hermes { flex: none; }
.topbar__hermes-dot {
  width: 8px; height: 8px; flex: none;
  border-radius: var(--r-pill); background: var(--accent);
}
.topbar__hermes.is-active {
  background: var(--accent-tint); border-color: var(--ok-line); color: var(--accent-strong);
}
/* Шапка на средних экранах (1024–1440 px): справа стоят подпись сотрудника или
   виджет ключа, «Состояние» и «Гермес». Кнопки не сжимаются ниже своего текста,
   а у .topbar стоит overflow:hidden — при нехватке места элементы налезали друг
   на друга и обрезались (жалоба владельца 16.09). Разрешаем перенос строки и
   ограничиваем подпись сотрудника. */
@media (max-width: 1440px) {
  .topbar { flex-wrap: wrap; row-gap: 6px; }
  .topbar__actions { flex-wrap: wrap; row-gap: 6px; }
  .session-identity { max-width: 240px; }
  .auth-form .input--sm { width: 120px; }
}
/* Аватар = вход по ключу: персональных пользователей в системе нет. */
.avatar {
  display: grid; place-items: center;
  width: 32px; height: 32px; flex: none;
  border: 1px solid var(--line); border-radius: var(--r-pill);
  background: var(--panel-3); color: var(--ink-2);
  cursor: pointer;
}
.avatar:hover { border-color: var(--ink-2); }

/* системный статус-индикатор */
.sysstatus {
  display: inline-flex; align-items: center; gap: var(--sp-2);
  height: 34px; padding: 0 var(--sp-3); white-space: nowrap;
  border: 1px solid var(--ok-line); border-radius: var(--r-sm);
  background: var(--ok-tint); color: var(--ok);
  font-size: var(--fs-sm); font-weight: 500;
  /* #14: не переполнять топбар */
  min-width: 0; max-width: 220px; overflow: hidden; text-overflow: ellipsis;
}
/* #14: auth-форма — ограничить ширину поля ввода чтобы не выбивать layout */
.auth-form { flex-shrink: 1; min-width: 0; }
.auth-form .input--sm { min-width: 80px; width: 120px; }
.sysstatus .dot { width: 8px; height: 8px; border-radius: var(--r-pill); background: currentColor; }

/* ---- Оболочка: рейл разделов + рабочая область -------------------------- */
.shell {
  display: grid;
  grid-template-columns: var(--rail-w) minmax(0, 1fr);
  min-height: 100vh;
}

/* Рейл разделов: бренд, группы «Работа» и «Справочники», служебный футер.
   Липнет к верху окна и скроллится внутри себя, только если сам выше окна —
   страница при этом прокручивается целиком. */
.rail {
  display: flex; flex-direction: column;
  border-right: 1px solid var(--line);
  background: var(--panel);
  position: sticky; top: 0;
  align-self: start;
  max-height: 100vh;
  overflow-y: auto;
  z-index: 20;
}
.rail__brand {
  flex: none;
  display: flex; align-items: center; gap: 10px;
  padding: 14px var(--sp-4);
  border-bottom: 1px solid var(--line);
}
.rail__nav {
  flex: 1;
  display: grid; align-content: start; gap: 2px;
  padding: var(--sp-3) var(--sp-2);
}
.rail__foot {
  flex: none;
  display: grid; gap: 6px;
  padding: var(--sp-3) var(--sp-4);
  border-top: 1px solid var(--line);
}
.rail-step {
  display: grid; gap: 1px;
  width: 100%; text-align: left;
  padding: var(--sp-2) 10px;
  border: 1px solid transparent; border-radius: 8px;
  background: transparent; color: var(--ink);
  font: inherit; cursor: pointer;
  transition: background .12s ease, border-color .12s ease;
}
.rail-step:hover { background: var(--panel-3); }
.rail-step.is-active { background: var(--accent-tint); border-color: var(--ok-line); }
.rail-step.is-active .rail-step__name { color: var(--accent-strong); font-weight: 600; }
.rail-step.is-warn { border-color: var(--warn-line); background: var(--warn-tint); }
.rail-step__name {
  display: flex; align-items: center; gap: 6px; min-width: 0;
  font-size: var(--fs-base); font-weight: 500; color: var(--ink);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.rail-step__name svg { flex: none; color: var(--warn); }
.rail-step__metric {
  font-size: var(--fs-sm); color: var(--muted);
  /* Длинные метрики («224 345 кодов · agsk-3 ред. …») переносятся,
     а не режутся многоточием в узкой колонке (критика 15.08). */
  white-space: normal; overflow-wrap: anywhere;
}
/* Служебные разделы футера — мелкой ссылкой, без метрик. */
.rail-link {
  display: block; width: 100%; text-align: left;
  padding: 2px 0; border: 0; background: none;
  color: var(--muted); font: inherit; font-size: var(--fs-sm);
  cursor: pointer;
}
.rail-link:hover { color: var(--accent-strong); text-decoration: underline; }
.rail-link.is-active { color: var(--accent-strong); font-weight: 600; }

/* ---- Рабочая область: топбар, сцена, правая панель ---------------------- */
.workarea { display: flex; flex-direction: column; min-width: 0; }
.workarea__body { flex: 1; display: flex; align-items: flex-start; min-width: 0; }

/* Правая панель: одна за раз (источник 400px / Гермес 340px), своя
   прокрутка, липнет под топбаром. */
.dock {
  flex: none;
  width: var(--ds-dock-source-w);
  border-left: 1px solid var(--line);
  background: var(--panel);
  /* Отступ от ФАКТИЧЕСКОЙ высоты шапки: на 1024–1440 px она может встать в
     две строки, и константа 60px увела бы верх панели под шапку. Переменную
     пишет ui-app-shell.js; фолбэк — прежняя константа. */
  position: sticky; top: var(--topbar-actual-h, var(--topbar-h));
  min-height: calc(100vh - var(--topbar-actual-h, var(--topbar-h)));
  max-height: calc(100vh - var(--topbar-actual-h, var(--topbar-h)));
  overflow: auto;
}
.dock[hidden] { display: none; }
.dock--source { width: var(--ds-dock-source-w); }
.dock--hermes { width: var(--ds-dock-hermes-w); }
.source-dock { display: grid; gap: var(--sp-3); min-height: 100%; padding: var(--sp-3); }
.source-dock[hidden] { display: none; }
.source-dock__head, .source-section__head, .source-dock__footer { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); }
.source-dock__head { position: sticky; top: calc(-1 * var(--sp-3)); z-index: 2; margin: calc(-1 * var(--sp-3)); padding: var(--sp-3); background: var(--panel); border-bottom: 1px solid var(--line); }
.source-section { display: grid; gap: var(--sp-2); min-width: 0; }
.source-section__head > span { color: var(--muted); font-size: var(--fs-sm); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.source-section--missing, .source-section__empty { border: 1px dashed var(--line); border-radius: var(--r-sm); padding: var(--sp-3); color: var(--muted); background: var(--panel-2); }
.source-section--missing { gap: var(--sp-3); }
.source-difference { padding: var(--sp-2) var(--sp-3); border-left: 3px solid var(--warn); background: var(--warn-tint); font-size: var(--fs-sm); }
.source-price { display: grid; gap: var(--sp-1); padding: var(--sp-3); border-top: 1px solid var(--line); }
.source-price > div { display: flex; justify-content: space-between; gap: var(--sp-3); font-size: var(--fs-sm); }
.source-price > div span { color: var(--muted); }
.source-price--empty { border: 1px solid var(--danger-line); border-radius: var(--r-sm); background: var(--danger-tint); }
.source-dock__footer { position: sticky; bottom: calc(-1 * var(--sp-3)); z-index: 2; margin: auto calc(-1 * var(--sp-3)) calc(-1 * var(--sp-3)); padding: var(--sp-3); border-top: 1px solid var(--line); background: var(--panel); flex-wrap: wrap; }
.source-dock__loading { color: var(--muted); padding: var(--sp-3) 0; }

/* ---- Сцена ------------------------------------------------------------- */
.stage { flex: 1; min-width: 0; }
.stage__inner {
  max-width: 1760px; margin: 0 auto;
  padding: var(--sp-4) var(--sp-4) var(--sp-8);
  display: grid; gap: var(--sp-4);
}
/* Элемент grid по умолчанию не уже своего содержимого (min-width: auto), поэтому
   панель с широкой таблицей раздувала страницу целиком, несмотря на собственную
   горизонтальную прокрутку таблицы: прокрутка работает только тогда, когда
   контейнеру разрешено быть уже контента. Поймано на проде 12.08 на проекте с
   длинными наименованиями — страница уезжала на 1073px. */
.stage__inner > * { min-width: 0; }

.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-4); flex-wrap: wrap; }
.page-head__titles { display: grid; gap: 2px; }
.page-head h1 { display: flex; align-items: center; gap: var(--sp-2); }
.page-head__sub { color: var(--muted); }

/* Один следующий шаг по ежедневному пути PDF → проверка → КП. */
.manager-route {
  display: grid; gap: var(--sp-3);
  padding: var(--sp-4);
  border: 1px solid var(--line-strong); border-radius: var(--r-md);
  background: var(--panel);
  box-shadow: var(--shadow-1);
}
.manager-route--ok { border-color: var(--ok-line); background: var(--ok-tint); }
.manager-route--warn { border-color: var(--warn-line); background: var(--warn-tint); }
.manager-route--info { border-color: var(--info-line); background: var(--info-tint); }
.manager-route__progress { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.manager-route__step { display: inline-flex; align-items: center; gap: 6px; color: var(--muted); font-size: var(--fs-sm); }
.manager-route__step > span {
  display: grid; place-items: center; width: 22px; height: 22px;
  border: 1px solid var(--line-strong); border-radius: var(--r-pill); background: var(--panel);
  color: var(--muted); font-size: var(--fs-xs); font-weight: 700;
}
.manager-route__step.is-current { color: var(--ink); font-weight: 600; }
.manager-route__step.is-current > span { border-color: var(--accent); color: var(--accent-strong); }
.manager-route__step.is-done > span { border-color: var(--accent); background: var(--accent); color: #fff; }
.manager-route__arrow { color: var(--line-strong); }
.manager-route__content { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-4); }
.manager-route__copy { display: grid; gap: 4px; min-width: 0; }
.manager-route__copy h2 { margin: 0; font-size: var(--fs-lg); }
.manager-route__copy p { margin: 0; max-width: 78ch; color: var(--ink-2); }
.manager-route__action { flex: 0 0 auto; }

/* Верхняя сетка: документы/обработка слева, сводка справа */
.work-top {
  display: grid;
  grid-template-columns: minmax(0, 1.5fr) minmax(300px, 1fr);
  gap: var(--sp-4); align-items: start;
}
.work-top > .panel { min-width: 0; }

/* Дропзона загрузки */
.dropzone {
  display: grid; gap: var(--sp-2); justify-items: center;
  padding: var(--sp-5); text-align: center;
  border: 1.5px dashed var(--line-strong); border-radius: var(--r-md);
  background: var(--panel-2); color: var(--muted);
  transition: border-color .12s, background .12s;
  cursor: pointer;
}
.dropzone:hover, .dropzone.is-drag { border-color: var(--accent); background: var(--accent-tint); color: var(--accent-strong); }
.dropzone:focus-within {
  outline: 2px solid var(--accent); outline-offset: 2px;
  border-color: var(--accent);
}
.dropzone__icon { color: var(--muted); }
.dropzone.is-drag .dropzone__icon { color: var(--accent); }
.dropzone__title { font-weight: 600; color: var(--ink); }
.dropzone__hint { font-size: var(--fs-sm); }

/* Список документов / job */
.docrow {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--sp-2) var(--sp-3);
  padding: var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--panel-2);
}
.docrow + .docrow { margin-top: var(--sp-2); }
.docrow__main { min-width: 0; }
/* Имя файла — отдельной строкой во всю ширину, кнопки не съедают строку
   (критика 15.08: имя обрезалось многоточием при свободной ширине). */
.docrow__name { grid-column: 1 / -1; font-weight: 600; white-space: normal; overflow-wrap: anywhere; }
.docrow__meta { min-width: 0; }
.docrow__actions { display: flex; align-items: center; justify-content: flex-end; gap: var(--sp-2); flex-wrap: wrap; }
.docrow__icon { display: grid; place-items: center; width: 34px; height: 34px; border-radius: var(--r-sm); background: var(--info-tint); color: var(--info); }
.docrow__icon.is-spec { background: var(--accent-tint); color: var(--accent); }
.docrow__name { font-weight: 600; overflow-wrap: anywhere; }
.docrow__meta { font-size: var(--fs-sm); color: var(--muted); }
.docrow__pages { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.mini-chip {
  display: inline-flex;
  align-items: center;
  min-height: 20px;
  padding: 1px 6px;
  border: 1px solid var(--line);
  border-radius: var(--r-xs);
  background: var(--surface-2);
  color: var(--muted);
  font-size: var(--fs-xs);
}
.docrow__job { display: grid; gap: var(--sp-2); margin-top: var(--sp-2); }
.docrow__support { grid-column: 1 / -1; font-size: var(--fs-xs); color: var(--muted); }
.docrow__support summary { width: max-content; cursor: pointer; }
.docrow__support > div { display: flex; flex-wrap: wrap; gap: var(--sp-2) var(--sp-4); margin-top: var(--sp-2); }

/* Пустое состояние распознавания над рабочим столом (C2: жёлтый баннер со
   счётчиками удалён — цифры только в пилюлях тулбара и «Итого по КП»). */
.project-decision-summary {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-4);
  padding: var(--sp-3) var(--sp-4); border: 1px solid var(--warn-line);
  border-radius: var(--r-md); background: var(--warn-tint);
}
.project-decision-summary__copy { display: grid; gap: 3px; min-width: 0; }
.project-decision-summary__copy h2 { display: flex; align-items: center; gap: var(--sp-2); margin: 0; font-size: var(--fs-md); }
.project-decision-summary__copy p { margin: 0; color: var(--ink-2); font-size: var(--fs-sm); }
.project-decision-summary__actions { display: flex; gap: var(--sp-2); flex-wrap: wrap; flex: 0 0 auto; }

/* Защита от краткого появления дублей до нормализации рабочего стола.
   Чип счётчиков и плитки метрик из списка убраны волной 2 — их больше нет. */
[data-screen="project"] .pilot-readiness-grid,
[data-screen="project"] [data-pilot-client-readiness],
[data-screen="project"] [data-pilot-client-manifest],
[data-screen="project"] [data-pilot-act="client-excel"] { display: none !important; }

/* Сводка готовности (правая колонка) */
.summary { display: grid; gap: var(--sp-3); }
.summary__metric {
  display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: var(--sp-3);
  padding: var(--sp-2) var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--panel-2);
}
.summary__metric .dot { width: 10px; height: 10px; border-radius: var(--r-pill); }
.summary__metric .label { color: var(--ink-2); }
.summary__metric .val { font-weight: 700; font-variant-numeric: tabular-nums; }

.readiness {
  display: grid; gap: var(--sp-2);
  padding: var(--sp-3); border-radius: var(--r-md);
  border: 1px solid var(--warn-line); background: var(--warn-tint);
}
.readiness.is-ready { border-color: var(--ok-line); background: var(--ok-tint); }
.readiness__title { display: flex; align-items: center; gap: var(--sp-2); font-weight: 600; }
.readiness__text { font-size: var(--fs-sm); color: var(--ink-2); }

/* ---- Плановая пауза распознавания («пыльная роза») --------------------- */
/* Канон 20.08: распознавание временно недоступно, пока катятся доработки
   качества; готовые проекты работают как обычно. Флаг приходит из
   GET /capabilities; плашку и disabled-кнопку ведёт data.js. */
.pilot-processing-paused {
  display: flex; align-items: flex-start; gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-4); margin-bottom: var(--sp-3);
  border: 1px solid #e3cbca; border-radius: var(--r-md);
  background: #f6edec; color: #8a4a55;
}
.pilot-processing-paused[hidden] { display: none; }
.pilot-processing-paused__icon { flex: none; color: #b76e79; }
.pilot-processing-paused__copy { display: grid; gap: 2px; }
.pilot-processing-paused__title { font-weight: 600; font-size: var(--fs-sm); }
.pilot-processing-paused__note { font-size: var(--fs-sm); color: #7d5557; }

/* ---- Центр: таблица позиций ------------------------------------------- */
.positions { display: grid; }
.positions__toolbar {
  display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap;
  padding: var(--sp-3) var(--sp-4);
  border-bottom: 1px solid var(--line);
}
.positions__counts { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.positions__toolbar .spacer { flex: 1; }
.positions__search { width: 220px; }

.focus-bar {
  display: flex; align-items: center; gap: var(--sp-3);
  padding: var(--sp-2) var(--sp-4);
  background: var(--review-tint);
  border-bottom: 1px solid var(--line);
  font-size: var(--fs-sm);
}
.focus-bar.is-hot { background: var(--warn-tint); }
.focus-bar strong { font-variant-numeric: tabular-nums; }

/* колоночная геометрия таблицы позиций */
.positions .tablewrap {
  width: 100%;
  max-width: 100%;
  overflow-x: auto;
  overflow-y: visible;
  scrollbar-gutter: stable both-edges;
}
table.positions-table {
  min-width: 1120px;
  width: 100%;
  table-layout: fixed;
}
table.positions-table .pos-col-sec { width: 70px; }
table.positions-table .pos-col-name { width: 300px; }
table.positions-table .pos-col-status { width: 112px; }
table.positions-table .pos-col-qty-drawing { width: 72px; }
table.positions-table .pos-col-qty-spec { width: 76px; }
table.positions-table .pos-col-qty { width: 76px; }
table.positions-table .pos-col-price-agsk { width: 78px; }
table.positions-table .pos-col-price-retail { width: 78px; }
table.positions-table .pos-col-price-purchase { width: 78px; }
table.positions-table .pos-col-price-offer { width: 82px; }
table.positions-table .pos-col-act { width: 74px; }
table.positions-table .col-sec { width: 70px; }
table.positions-table .col-qty-drawing { width: 72px; }
table.positions-table .col-qty-spec { width: 76px; }
table.positions-table .col-qty { width: 76px; }
table.positions-table .col-price-agsk { width: 78px; }
table.positions-table .col-price-retail { width: 78px; }
table.positions-table .col-price-purchase { width: 78px; }
table.positions-table .col-price-offer { width: 82px; }
table.positions-table .col-status { width: 112px; }
table.positions-table .col-act { width: 74px; }
table.positions-table th {
  white-space: normal;
  line-height: 1.15;
  overflow-wrap: anywhere;
}
table.positions-table td {
  padding: 5px 6px;
}
.pos-page { font-size: var(--fs-xs, 11px); color: var(--muted); margin-top: 3px; display: inline-flex; align-items: center; gap: 3px; white-space: nowrap; }
.pos-page svg { opacity: .7; }
.pos-name { font-weight: 600; overflow-wrap: anywhere; }
.pos-agsk { font-family: var(--font-mono); font-size: var(--fs-sm); color: var(--ink-2); }
.pos-agsk.is-empty { color: var(--danger); }
.pos-agsk-suggestions { font-size: var(--fs-xs, 11px); color: var(--muted); margin-top: 2px; display: flex; flex-direction: column; gap: 2px; }
.agsk-suggestion { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.btn--xs { font-size: var(--fs-xs, 11px); padding: 1px 6px; line-height: 1.4; }
.btn--link { background: none; border: none; color: var(--accent, #2563eb); cursor: pointer; text-decoration: underline; padding: 0; font: inherit; }
.btn--link:hover { color: var(--accent-hover, #1d4ed8); }
.pos-supplier { font-size: var(--fs-sm); color: var(--muted); margin-top: 2px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; white-space: nowrap; }
.pos-supplier .art { font-family: var(--font-mono); }
/* D5: источник прайса артикула («Поставщик: CHINT») — компактная подпись под строкой поставщика. */
.pos-supplier-src { margin-top: 1px; }
.pos-supplier-src strong { color: var(--text); }
.final-qty-cell { display: inline-flex; align-items: center; justify-content: flex-end; gap: 4px; min-width: 0; }
.final-qty-input { width: 58px; height: 28px; padding: 3px 5px; text-align: right; }
.final-qty-input:focus { outline: 2px solid var(--accent-soft); outline-offset: 1px; }
.pos-section td { background: var(--panel-3); color: var(--text); border-top: 2px solid var(--line-strong); }
.pos-section strong { font-size: var(--fs-base); }
.pos-section__icon { color: var(--muted); display: inline-flex; margin-right: 6px; vertical-align: -2px; }
.pos-section--level-2 td { padding-left: 28px; }
.pos-section--level-3 td { padding-left: 44px; }
.pos-section--level-4 td { padding-left: 60px; }
.rowact { display: flex; gap: var(--sp-1); justify-content: flex-end; }

/* раскрытая строка-правка */
.pos-edit td { background: var(--panel-2); border-bottom: 1px solid var(--line-strong); }
.edit-grid {
  display: grid; gap: var(--sp-3);
  grid-template-columns: 1.4fr .8fr .9fr .6fr .7fr;
  padding: var(--sp-2) 0;
}
.edit-foot { display: flex; align-items: center; gap: var(--sp-2); margin-top: var(--sp-2); }
.edit-foot .spacer { flex: 1; }

/* источник: мини-превью PDF с боксом */
.evidence {
  display: grid; grid-template-columns: 200px 1fr; gap: var(--sp-3);
  margin-top: var(--sp-3); padding: var(--sp-3);
  border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel);
}
.pdfmini {
  position: relative; aspect-ratio: 3/4; border-radius: var(--r-sm); overflow: hidden;
  border: 1px solid var(--line-strong);
  background:
    repeating-linear-gradient(0deg, transparent 0 13px, oklch(94% 0.004 255) 13px 14px),
    var(--panel);
}
.pdfmini__rows { position: absolute; inset: 14px 12px; display: grid; gap: 8px; align-content: start; }
.pdfmini__rows i { display: block; height: 5px; border-radius: 2px; background: oklch(88% 0.006 255); }
.pdfmini__rows i:nth-child(3n) { width: 70%; }
.pdfmini__box {
  position: absolute; left: 8%; right: 12%;
  border: 2px solid var(--accent); border-radius: 3px;
  background: oklch(52% 0.13 155 / .14);
  box-shadow: 0 0 0 2px oklch(52% 0.13 155 / .10);
}
.evidence__meta { display: grid; gap: var(--sp-2); align-content: start; font-size: var(--fs-sm); }
.evidence__row { display: grid; grid-template-columns: 130px 1fr; gap: var(--sp-2); }
.evidence__row dt { color: var(--muted); font-weight: 600; }
.evidence__row dd { margin: 0; color: var(--ink); }

/* totals */
.totals {
  display: flex; align-items: center; justify-content: flex-end; gap: var(--sp-6);
  padding: var(--sp-3) var(--sp-4); border-top: 1px solid var(--line-strong);
  background: var(--panel-2);
}
.totals__item { text-align: right; }
.totals__item .lbl { font-size: var(--fs-xs); color: var(--muted); text-transform: uppercase; letter-spacing: 0.04em; }
.totals__item .v { font-size: var(--fs-md); font-weight: 700; font-variant-numeric: tabular-nums; }
.totals__item.is-grand .v { font-size: var(--fs-lg); color: var(--accent-strong); }

/* segmented (фильтр решений) */
.seg { display: inline-flex; flex: none; border: 1px solid var(--line-strong); border-radius: var(--r-sm); overflow: hidden; }
.seg button {
  border: 0; background: var(--panel); color: var(--ink-2);
  font: inherit; font-size: var(--fs-sm); padding: 6px var(--sp-3); cursor: pointer;
  border-right: 1px solid var(--line);
}
.seg button:last-child { border-right: 0; }
.seg button[aria-pressed="true"] { background: var(--accent); color: #fff; }

/* ---- Адаптивность ------------------------------------------------------ */
.screen[hidden] { display: none; }

/* About: поток шагов */
.about-instructions > summary { cursor: pointer; list-style: none; }
.about-instructions > summary::-webkit-details-marker { display: none; }
.about-instructions > summary::after { content: "⌄"; margin-left: auto; color: var(--muted); }
.about-instructions[open] > summary::after { transform: rotate(180deg); }
.about-flow { display: grid; gap: var(--sp-2); margin-top: var(--sp-4); }
.flow-step {
  display: grid; grid-template-columns: 28px 28px 1fr auto; align-items: center; gap: var(--sp-3);
  width: 100%; text-align: left; padding: var(--sp-3);
  border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2);
  font: inherit; cursor: pointer; transition: border-color .12s, background .12s;
}
.flow-step:hover { border-color: var(--accent); background: var(--accent-tint); }
.flow-step__n {
  display: grid; place-items: center; width: 26px; height: 26px; border-radius: var(--r-pill);
  background: var(--accent); color: #fff; font-weight: 700; font-size: var(--fs-sm);
}
.flow-step__ic { color: var(--muted); display: grid; place-items: center; }
.flow-step__body { display: grid; gap: 2px; min-width: 0; }
.flow-step__t { font-weight: 600; }
.flow-step__d { font-size: var(--fs-sm); color: var(--muted); text-wrap: pretty; }
.flow-step__go { color: var(--muted); }
.flow-step:hover .flow-step__go { color: var(--accent); }

/* About: легенда статусов */
.legend-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-3); }
.legend-card {
  display: grid; gap: var(--sp-2); padding: var(--sp-3);
  border: 1px solid var(--line); border-left-width: 3px; border-radius: var(--r-sm); background: var(--panel-2);
}
.legend-card--ok { border-left-color: var(--ok); }
.legend-card--warn { border-left-color: var(--warn); }
.legend-card--review { border-left-color: var(--review); }
.legend-card--danger { border-left-color: var(--danger); }
.legend-card__d { font-size: var(--fs-sm); color: var(--ink-2); text-wrap: pretty; }
.about-note { display: flex; align-items: center; gap: var(--sp-2); color: var(--muted); font-size: var(--fs-sm); }
.about-note svg { color: var(--info); flex: none; }

/* Помощь: руководство пользователя (screen-help.js) */
.help-toc { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: var(--sp-2); margin-top: var(--sp-3); }
.help-toc__link {
  display: flex; align-items: center; gap: var(--sp-2); padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2);
  color: var(--ink); text-decoration: none; font-size: var(--fs-sm);
}
.help-toc__link:hover { border-color: var(--accent); color: var(--accent); }
.help-toc__link svg { flex: none; color: var(--muted); }
.help-section { scroll-margin-top: var(--sp-4); }
.help-lead { max-width: 88ch; color: var(--ink-2); text-wrap: pretty; margin: 0 0 var(--sp-3); }
.help-block { margin-bottom: var(--sp-4); }
.help-block:last-of-type { margin-bottom: var(--sp-2); }
.help-block__title { margin-bottom: var(--sp-2); }
.help-p { max-width: 88ch; color: var(--ink-2); text-wrap: pretty; }
.help-steps { display: grid; gap: var(--sp-2); margin: 0; padding-left: 1.4em; }
.help-steps li { max-width: 88ch; text-wrap: pretty; }
.help-steps .cell-strong { display: block; }
.help-list { display: grid; gap: 6px; margin: 0; padding-left: 1.4em; }
.help-list li { max-width: 88ch; color: var(--ink-2); text-wrap: pretty; }
.help-defs { display: grid; gap: var(--sp-2); margin: 0; }
.help-defs__row { display: grid; grid-template-columns: minmax(180px, 22%) 1fr; gap: var(--sp-3); align-items: start; }
.help-defs dt { font-weight: 600; text-wrap: pretty; }
.help-defs dd { margin: 0; color: var(--ink-2); text-wrap: pretty; }
.help-table td { vertical-align: top; text-wrap: pretty; }
.help-note {
  display: flex; align-items: flex-start; gap: var(--sp-2); padding: var(--sp-3);
  border: 1px solid var(--line); border-left-width: 3px; border-radius: var(--r-sm);
  background: var(--panel-2); color: var(--ink-2); text-wrap: pretty; max-width: 92ch;
}
.help-note svg { flex: none; color: var(--info); margin-top: 2px; }
.help-note--ok { border-left-color: var(--ok); }
.help-note--warn { border-left-color: var(--warn); }
.help-note--review { border-left-color: var(--review); }
.help-note--neutral { border-left-color: var(--line); }
.help-back { display: inline-block; margin-top: var(--sp-2); }
@media (max-width: 760px) {
  .help-defs__row { grid-template-columns: 1fr; gap: 2px; }
}

/* AGSK: ревизии */
.rev-row {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  padding: var(--sp-2) var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2);
}
.rev-row.is-active { border-color: var(--ok-line); background: var(--ok-tint); }

/* Suppliers: карточки + job */
.supcard {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  min-width: 0; overflow: hidden;
  width: 100%; text-align: left; padding: var(--sp-3);
  border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2);
  font: inherit; cursor: pointer; transition: border-color .12s, background .12s;
}
.supcard:hover { border-color: var(--line-strong); }
.supcard.is-active { border-color: var(--accent); background: var(--accent-tint); }
.supcard > div:first-child { min-width: 0; flex: 1 1 auto; }
.supcard .cell-strong { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.supcard__stats {
  display: grid; gap: 1px; text-align: right; font-size: var(--fs-sm);
  min-width: 0; max-width: min(430px, 58%); white-space: nowrap; flex: 0 1 auto;
}
.supcard__stats span { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.supcard__stats .muted { overflow: hidden; text-overflow: ellipsis; }
.jobbar {
  display: flex; align-items: center; gap: var(--sp-3); margin: 0 var(--sp-4) var(--sp-3);
  padding: var(--sp-2) var(--sp-3); border: 1px solid var(--line); border-left: 3px solid var(--info);
  border-radius: var(--r-sm); background: var(--info-tint); font-size: var(--fs-sm);
}
.jobbar[data-status="succeeded"] { border-left-color: var(--ok); background: var(--ok-tint); }
.jobbar svg { color: var(--info); flex: none; }
.jobbar[data-status="succeeded"] svg { color: var(--ok); }
.jobbar > span { flex: 1; }

/* KP: сетка параметров и превью */
.kp-grid { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(320px, 0.95fr); gap: var(--sp-4); align-items: start; }
.kp-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-3); }
.kp-form-field { align-content: start; }
.kp-form-field .input,
.kp-form-field .select { width: 100%; }
.kp-form-field [aria-invalid="true"] { border-color: var(--danger); box-shadow: 0 0 0 1px var(--danger-line); }
.kp-field-hint { color: var(--muted); font-size: var(--fs-xs); line-height: 1.35; }
.kp-field-error { color: var(--danger); font-size: var(--fs-xs); font-weight: 600; line-height: 1.35; }
.kp-field-error[hidden],
.kp-form-validation[hidden] { display: none; }
.kp-form-validation {
  margin-top: var(--sp-3); padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--danger-line); border-radius: var(--r-sm);
  background: var(--danger-tint); color: var(--danger); font-size: var(--fs-sm); font-weight: 600;
}
.pricelines { display: grid; gap: var(--sp-2); }
.priceline { display: flex; align-items: center; justify-content: space-between; font-size: var(--fs-base); color: var(--ink-2); }
.priceline.is-strong { padding-top: var(--sp-2); border-top: 1px solid var(--line); color: var(--ink); font-weight: 600; }
.kp-total {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: var(--sp-3); padding-top: var(--sp-3); border-top: 1px solid var(--line-strong);
}
.kp-total strong { font-size: var(--fs-lg); color: var(--accent-strong); }
.offer-row {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  padding: var(--sp-2) var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2);
}
.kp-version-card { border: 1px solid var(--line); border-radius: var(--r-sm); overflow: hidden; background: var(--panel); }
.kp-version-card__head { padding: var(--sp-3); background: var(--panel-2); border-bottom: 1px solid var(--line); }
.kp-version-card__files { display: grid; gap: var(--sp-2); padding: var(--sp-2); }
.kp-version-file { background: var(--panel); }
.kp-file-state {
  display: inline-flex; margin-top: 3px; padding: 2px 7px;
  border: 1px solid var(--line); border-radius: var(--r-pill); font-size: var(--fs-xs); font-weight: 600;
}
.kp-file-state--clean { color: var(--ok); border-color: var(--ok-line); background: var(--ok-tint); }
.kp-file-state--draft { color: oklch(45% 0.11 60); border-color: var(--warn-line); background: var(--warn-tint); }
.kp-file-state--unknown { color: var(--muted); background: var(--panel-2); }
.dirty-guard-dialog { display: grid; gap: var(--sp-3); }
.dirty-guard-dialog p { margin: 0; }
.dirty-guard-dialog__actions { display: flex; flex-wrap: wrap; gap: var(--sp-2); justify-content: flex-end; }

@media (max-width: 1200px) {
  .work-top { grid-template-columns: 1fr; }
  .kp-grid { grid-template-columns: 1fr; }
}

@media (max-width: 720px) {
  .kp-fields { grid-template-columns: 1fr; }
  .dirty-guard-dialog__actions { display: grid; justify-content: stretch; }
  /* Топбар на узких экранах: переполнение (390px) — критика 15.08 */
  .topbar { flex-wrap: wrap; row-gap: 6px; }
  .topbar__actions { flex-wrap: wrap; }
  .topbar__meta { display: none; }
  .llm-chip { padding: 0 var(--sp-2); font-size: var(--fs-xs); }
  .work-top > .panel, .dropzone, .upload-role-queue, .upload-progress-state { min-width: 0; max-width: 100%; }
  .upload-role-filename { white-space: normal; overflow-wrap: anywhere; }
  .ds-intake-form, .ds-intake-form .dropzone { min-width: 0; }
  .upload-role-seg { flex-wrap: wrap; }
  .docrow__support, .ds-prices { min-width: 0; overflow-wrap: anywhere; }
  .docrow__support * { white-space: normal; overflow-wrap: anywhere; }
  .ds-seg { flex-wrap: wrap; max-width: 100%; }
  .ds-prices { flex-wrap: wrap; }
  .upload-role-row { flex-wrap: wrap; }
  .upload-role-radio { white-space: normal; }
  .ds-intake-form { overflow: hidden; }
  html, body { overflow-x: hidden; }
}

/* ====================== Итерация 3: новые компоненты ===================== */

/* Рейл: заголовок группы разделов и явный переключатель рабочей роли */
.rail__group-label { padding: 6px 10px 4px; }
.rail-step + .rail__group-label { padding-top: 14px; }
.rail-mode { display: grid; gap: var(--sp-2); margin-top: var(--sp-2); padding-top: var(--sp-2); border-top: 1px solid var(--line); }
.rail-mode--admin { padding: var(--sp-3); border: 1px solid var(--warn-line); border-radius: var(--r-sm); background: var(--warn-tint); }
.rail-mode__title { display: flex; align-items: center; gap: var(--sp-2); color: var(--ink); font-size: var(--fs-sm); }
.rail-mode__note { color: var(--muted); font-size: var(--fs-xs); line-height: 1.35; }
.rail-mode__toggle { width: 100%; justify-content: center; white-space: normal; }

/* Топбар: индикатор ИИ */
.llm-chip {
  display: inline-flex; align-items: center; gap: 6px; height: 34px; padding: 0 var(--sp-3);
  border: 1px solid var(--info-line); border-radius: var(--r-sm); background: var(--info-tint);
  color: var(--info); font: inherit; font-size: var(--fs-sm); font-weight: 500; cursor: pointer; white-space: nowrap;
}
.llm-chip:hover { filter: brightness(0.98); }
.llm-chip.is-warn { border-color: var(--warn-line); background: var(--warn-tint); color: var(--ds-warn-ink, oklch(40% 0.12 58)); }
.llm-chip.is-over { border-color: var(--danger-line); background: var(--danger-tint); color: var(--danger); }

/* Топбар: фоновые задачи */
.jobs-btn { position: relative; }
.jobs-btn.has-active { border-color: var(--info-line); color: var(--info); }
.jobs-count { position: absolute; top: -5px; right: -5px; min-width: 16px; height: 16px; padding: 0 4px;
  display: grid; place-items: center; border-radius: var(--r-pill); background: var(--info); color: #fff; font-size: 10px; font-weight: 700; }
.jobs-count:empty { display: none; }
.diagnostics-menu { position: relative; }
.diagnostics-menu__button { position: relative; }
.diagnostics-menu__button.has-active { border-color: var(--info-line); color: var(--info); }
.diagnostics-menu__button.is-warning { border-color: var(--warn-line); background: var(--warn-tint); }
.diagnostics-menu__button.is-error { border-color: var(--danger-line); background: var(--danger-tint); color: var(--danger); }
.diagnostics-menu__panel {
  position: fixed; z-index: 90; width: min(380px, calc(100vw - 16px));
  display: grid; gap: var(--sp-3); padding: var(--sp-3);
  border: 1px solid var(--line); border-radius: var(--r-md);
  background: var(--panel); box-shadow: var(--shadow-2);
}
.diagnostics-menu__panel[hidden] { display: none; }
.diagnostics-menu__head { display: flex; align-items: center; justify-content: space-between; }
.diagnostics-menu__panel .sysstatus, .diagnostics-menu__panel .llm-chip { width: 100%; max-width: none; min-height: 38px; height: auto; }
.diagnostics-menu__panel .llm-chip { cursor: default; }
.diagnostics-jobs { display: grid; gap: var(--sp-2); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); padding: var(--sp-3) 0; }
.diagnostics-jobs__head { display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-sm); }
.diagnostics-jobs .job-item { padding: var(--sp-2) 0; }
.diagnostics-jobs .empty { padding: var(--sp-2) 0; }
.pop {
  /* fixed + высокий z-index: топбар имеет overflow:hidden и z-index:30, поэтому
     absolute-попап обрезался границей топбара и уходил под контент. Координаты
     (top/right) задаёт JS по getBoundingClientRect кнопки. */
  position: fixed; width: 320px; z-index: 90;
  border: 1px solid var(--line); border-radius: var(--r-md); background: var(--panel); box-shadow: var(--shadow-2); overflow: hidden;
}
.auth-status {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 3px 10px; border-radius: var(--r-pill);
  font-size: var(--fs-sm); font-weight: 600; white-space: nowrap;
}
.auth-status::before { content: ""; width: 8px; height: 8px; border-radius: var(--r-pill); background: currentColor; }
.auth-status--in { color: var(--ok); background: var(--ok-tint); border: 1px solid var(--ok-line); }
.auth-status--out { color: var(--danger); background: var(--danger-tint); border: 1px solid var(--danger-line); }
/* Подпись вошедшего сотрудника в шапке (волна T1-a): имя, организация, выход. */
.session-identity {
  display: inline-flex; align-items: center; gap: var(--sp-2);
  max-width: 320px; white-space: nowrap;
}
.session-identity[hidden] { display: none; }
/* min-width: 0 — иначе флекс-элементы не сжимаются ниже ширины содержимого,
   эллипсис не срабатывает, и длинное название организации выдавливает
   соседей в шапке на узком экране (ревью Opus r7 M6). */
.session-identity__name { min-width: 0; font-size: var(--fs-sm); font-weight: 600; overflow: hidden; text-overflow: ellipsis; }
.session-identity__org { min-width: 0; font-size: var(--fs-sm); color: var(--muted); overflow: hidden; text-overflow: ellipsis; }
.auth-menu { position: relative; }
.auth-menu__panel {
  position: fixed; z-index: 90;
  display: grid; gap: var(--sp-1); min-width: 170px;
  padding: var(--sp-2); border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--panel); box-shadow: var(--shadow-2);
}
.pop__head { padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--line); font-weight: 600; font-size: var(--fs-sm); }
.job-item { padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--line); display: grid; gap: var(--sp-2); }
.job-item:last-child { border-bottom: 0; }
.job-item__top { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); }
.job-item__label { font-size: var(--fs-sm); font-weight: 500; }

/* Баннер ИИ на экране проекта */
.llm-banner {
  display: flex; align-items: center; gap: var(--sp-2);
  padding: var(--sp-2) var(--sp-4); border-bottom: 1px solid var(--line); font-size: var(--fs-sm);
}
.llm-banner.is-warn { background: var(--warn-tint); }
.llm-banner.is-over { background: var(--danger-tint); }
.llm-banner svg { flex: none; }
.llm-banner.is-over svg { color: var(--danger); }

/* Кнопка-бэйдж */
.btn-badge { display: inline-grid; place-items: center; min-width: 16px; height: 16px; padding: 0 4px;
  border-radius: var(--r-pill); background: var(--warn); color: #fff; font-size: 10px; font-weight: 700; }

/* Кандидаты АГСК */
.cand-block { margin-bottom: var(--sp-3); padding: var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel); }
.cand-block__head { display: flex; align-items: center; gap: 6px; font-size: var(--fs-sm); font-weight: 600; margin-bottom: var(--sp-2); }
.cand-block__head svg { color: var(--info); }
.cand-list { display: grid; gap: var(--sp-2); }
.cand {
  display: grid; grid-template-columns: auto auto 1fr; align-items: center; gap: var(--sp-2);
  width: 100%; text-align: left; padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--line-strong); border-radius: var(--r-sm); background: var(--panel-2);
  font: inherit; cursor: pointer; transition: border-color .12s, background .12s;
}
.cand:hover { border-color: var(--accent); background: var(--accent-tint); }
.cand.is-picked { border-color: var(--accent); background: var(--accent-tint); box-shadow: inset 3px 0 0 var(--accent); }
.cand__conf { display: grid; place-items: center; min-width: 40px; height: 22px; border-radius: var(--r-sm); font-size: var(--fs-xs); font-weight: 700; }
.cand__conf--hi { background: var(--ok-tint); color: var(--ok); }
.cand__conf--mid { background: var(--warn-tint); color: oklch(45% 0.11 60); }
.cand__conf--lo { background: var(--review-tint); color: var(--review); }
.cand__code { font-weight: 600; }
.cand__name { color: var(--muted); font-size: var(--fs-sm); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cand-empty { display: flex; align-items: center; gap: 6px; font-size: var(--fs-sm); color: var(--muted); }
.cand-empty svg { color: var(--danger); flex: none; }

/* pdfmini как кнопка */
.pdfmini { border: 1px solid var(--line-strong); cursor: pointer; padding: 0; font: inherit; }
.pdfmini:hover { border-color: var(--accent); }
.pdfmini__open {
  position: absolute; inset: auto 0 0 0; display: flex; align-items: center; justify-content: center; gap: 5px;
  padding: 4px; background: oklch(28% 0.012 255 / .82); color: #fff; font-size: var(--fs-xs); font-weight: 600;
  opacity: 0; transition: opacity .12s;
}
.pdfmini:hover .pdfmini__open { opacity: 1; }

/* Группировка по щиту */
.group-head td { background: var(--panel-3); border-top: 2px solid var(--line-strong); vertical-align: middle; overflow: visible; }
.group-head strong { font-size: var(--fs-base); }
.group-head svg { color: var(--muted); }
.group-head__main {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  min-width: 0;
}
.group-head__main strong {
  max-width: 620px;
  overflow-wrap: anywhere;
}
.group-head__main .status {
  flex-shrink: 0;
}
.group-head__total {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  min-width: 0;
  white-space: nowrap;
}

/* Комплект щита: шапка и состав */
.board-group-head td { background: var(--panel-2); border-top: 2px solid var(--accent-2, #6366f1); }
.board-member td:first-child { padding-left: 28px; }

/* E2: ввод стоимости сборки прямо на шапке комплекта (раньше — отдельная таблица «Щиты проекта») */
.board-assembly-field { display: inline-flex; align-items: center; gap: 4px; margin-right: 0; font-weight: 400; white-space: nowrap; flex-shrink: 0; }
.board-assembly-field svg { color: var(--muted); }
.board-assembly-input { width: 96px; text-align: right; padding: 2px 6px; height: auto; }

/* Сверка щитов спека↔чертёж: бейдж у заголовка группы щита */
.board-reconcile-badge { margin-left: 4px; }

/* Ф5: расхождение количества спека↔КП — бейдж у статуса позиции + тон ячейки кол-ва.
   Тон warn (жёлтый), НЕ danger (красный занят под «АГСК не найден»). */
.pos-qty-mismatch-badge { margin-left: 4px; }
.col-qty-drawing, .col-qty-spec, .col-qty {
  font-variant-numeric: tabular-nums;
}
.col-qty-drawing.has-source-qty {
  background: var(--info-tint);
  color: var(--info);
  font-weight: 600;
}
.col-qty-spec.is-qty-mismatch,
.col-qty.is-qty-mismatch {
  background: var(--warn-tint);
  color: oklch(45% 0.11 60);
  font-weight: 600;
}

/* Свёртка «На чертеже, но нет в спецификации» (под таблицей позиций) */
.drawing-only-head {
  display: flex; align-items: center; gap: 8px; width: 100%;
  padding: var(--sp-3) var(--sp-4);
  background: none; border: 0; border-radius: var(--r-md); cursor: pointer;
  font: inherit; color: inherit; text-align: left;
}
.drawing-only-head:hover { background: var(--panel-2); }
.drawing-only-head__hint { margin-left: auto; font-size: var(--fs-sm); }
.drawing-only-list { border-top: 1px solid var(--line); }
.drawing-only-row {
  display: flex; align-items: center; gap: 10px;
  padding: var(--sp-2) var(--sp-4);
}
.drawing-only-row + .drawing-only-row { border-top: 1px solid var(--line); }
.drawing-only-row__body { flex: 1; min-width: 0; }
.drawing-only-row__pending { display: inline-flex; align-items: center; gap: 6px; }

/* Модалка */
.modal-root { position: fixed; inset: 0; z-index: 80; display: grid; place-items: center; padding: var(--sp-5); }
.modal-backdrop { position: absolute; inset: 0; background: oklch(20% 0.01 255 / .42); animation: fade .15s ease; }
.modal {
  position: relative; width: min(560px, 100%); max-height: 88vh; overflow: auto;
  border: 1px solid var(--line); border-radius: var(--r-md); background: var(--panel); box-shadow: var(--shadow-2);
  animation: pop .16s ease;
}
.modal--wide { width: min(920px, 100%); }
.modal__head { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--line); position: sticky; top: 0; background: var(--panel); }
.modal__body { padding: var(--sp-4); }
@keyframes fade { from { opacity: 0; } }
@keyframes pop { from { opacity: 0; transform: translateY(8px) scale(.99); } }

/* Окно позиции (A3): одна модалка по клику на название. Чертёж и спецификация —
   крупные зоны с зумом по клику (лайтбокс вешается на img.source-page-image сам). */
.position-window { display: grid; gap: 0; }
.position-window__head {
  display: flex; align-items: center; gap: 10px;
  padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--line);
  position: sticky; top: 0; background: var(--panel); z-index: 2;
}
.position-window__head .titlewrap { flex: 1; min-width: 0; }
.position-window__spacer { flex: 1; }
.position-window__body { padding: var(--sp-4); display: grid; gap: var(--sp-4); min-width: 0; }
.position-window__foot {
  padding: var(--sp-3) var(--sp-4); border-top: 1px solid var(--line);
  background: var(--panel-2); position: sticky; bottom: 0; z-index: 2;
}
.position-window__foot-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.position-window__foot-spacer { flex: 1; }
.position-window__block { display: grid; gap: var(--sp-2); min-width: 0; }
.position-window__block-head { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); margin-bottom: 2px; }
.position-window__block-head h4 { margin: 0; font-size: 12px; font-weight: 700; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; }
.position-window__draw {
  border: 1px solid var(--line); border-radius: var(--r-sm); padding: var(--sp-2);
  background: var(--panel-2); display: grid; gap: var(--sp-2); min-width: 0;
}
.position-window__draw .source-section { gap: var(--sp-1); }
.position-window__draw .evidence-page-frame { max-height: 56vh; }
.position-window__cap { display: flex; justify-content: space-between; gap: var(--sp-2); flex-wrap: wrap; font-size: 12px; color: var(--muted); }
.position-window__quote {
  background: #fff7d6; border: 1px solid #f3e29a; border-radius: var(--r-sm);
  padding: 8px 10px; font-size: 13px; font-family: var(--mono);
  display: flex; gap: 10px; flex-wrap: wrap; align-items: baseline;
}
.position-window__quote-q { color: #7a5b00; font-weight: 700; }
.position-window__quote-sep { color: #b69c3e; }
.position-window__quote-meta { color: var(--muted); }
.position-window__naming {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 10px; border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--panel-2);
}
.position-window__naming-src { flex: 0 0 56px; font-size: 11px; font-weight: 700; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; }
.position-window__naming-val { flex: 1; font-size: 13px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; display: flex; gap: 8px; align-items: baseline; }
.position-window__naming-val .cell-sub { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.position-window__naming-val .pilot-etim-class { display: none; }
.position-window__etalon { margin-top: 6px; width: 100%; }
.position-window__qty { display: flex; align-items: flex-end; gap: 20px; font-size: 13px; flex-wrap: wrap; }
.position-window__qty-cell { display: grid; gap: 3px; }
.position-window__qty-cell b { font-family: var(--mono); font-size: 14px; }
.position-window__qty-input { width: 90px; text-align: right; }

/* Двухпанельный просмотр источника */
.source-view { display: grid; grid-template-columns: 1.3fr 1fr; gap: var(--sp-4); }
/* Вертикальная раскладка карточки позиции: секции по очереди, каждая на всю
   ширину (извлечённая позиция → спецификация → чертёж). */
.source-view--stacked { grid-template-columns: 1fr; }
/* «Извлечённая позиция» в stacked-режиме — компактно, факты в несколько колонок */
.source-view--stacked > .source-side:first-child .evidence__meta { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.source-view--stacked > .source-side:first-child .evidence__row:first-child { grid-column: 1 / -1; }
.source-doc { border: 1px solid var(--line); border-radius: var(--r-sm); overflow: hidden; }
.source-doc__bar { display: flex; align-items: center; gap: var(--sp-2); padding: var(--sp-2) var(--sp-3); border-bottom: 1px solid var(--line); background: var(--panel-2); font-size: var(--fs-sm); }
.source-doc__bar .spacer { flex: 1; }
.source-page { position: relative; aspect-ratio: 3/4; background: var(--panel); padding: var(--sp-4); }
.source-page__lines { display: grid; gap: 9px; align-content: start; }
.source-page__lines i { display: block; height: 6px; border-radius: 2px; background: oklch(90% 0.006 255); }
.source-page__box { position: absolute; left: 6%; right: 8%; border: 2px solid var(--accent); border-radius: 3px; background: oklch(52% 0.13 155 / .12); box-shadow: 0 0 0 3px oklch(52% 0.13 155 / .1); }
.source-page__box span { position: absolute; top: -18px; left: 0; font-size: 10px; font-weight: 700; color: var(--accent-strong); background: var(--accent-tint); padding: 1px 5px; border-radius: 3px; }
.source-side { display: grid; gap: var(--sp-3); align-content: start; }
.drawing-docs { display: flex; gap: var(--sp-2); align-items: end; flex-wrap: wrap; }
.source-note { display: flex; align-items: flex-start; gap: 6px; font-size: var(--fs-sm); color: var(--muted); padding-top: var(--sp-2); border-top: 1px solid var(--line); }
.source-note svg { color: var(--info); flex: none; margin-top: 1px; }

/* Сверка с чертежом */
.check-row { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: var(--sp-3); padding: var(--sp-3); border: 1px solid var(--line); border-left-width: 3px; border-radius: var(--r-sm); background: var(--panel-2); }
.check-row--danger { border-left-color: var(--danger); }
.check-row--warn { border-left-color: var(--warn); }
.check-row--ok { border-left-color: var(--ok); }
.check-row__body { min-width: 0; }

/* База кроссов */
.reuse-pill { display: inline-flex; align-items: center; gap: 4px; padding: 2px 7px; border-radius: var(--r-pill); background: var(--ok-tint); color: var(--ok); font-size: var(--fs-xs); font-weight: 700; }
.reuse-pill svg { width: 11px; height: 11px; }

/* Администрирование */
.admin-tabs { display: flex; gap: var(--sp-1); border-bottom: 1px solid var(--line); }
.admin-tab { display: inline-flex; align-items: center; gap: 6px; padding: var(--sp-2) var(--sp-3); border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--muted); font: inherit; font-weight: 500; cursor: pointer; }
.admin-tab:hover { color: var(--ink); }
.admin-tab.is-active { color: var(--accent-strong); border-bottom-color: var(--accent); }
.admin-tab svg { color: currentColor; }
.data-card { display: flex; align-items: center; gap: var(--sp-3); padding: var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2); }
.data-card.is-link { cursor: pointer; transition: border-color .12s, background .12s; }
.data-card.is-link:hover { border-color: var(--accent); background: var(--accent-tint); }
.data-card__ic { display: grid; place-items: center; width: 34px; height: 34px; border-radius: var(--r-sm); background: var(--accent-tint); color: var(--accent); flex: none; }
.data-card > svg { color: var(--muted); flex: none; }
.audit-row { display: grid; grid-template-columns: 56px 160px 180px 1fr; gap: var(--sp-3); align-items: center; padding: var(--sp-2) 0; border-bottom: 1px solid var(--line); font-size: var(--fs-sm); }
.audit-row:last-child { border-bottom: 0; }
.audit-row__time { color: var(--muted); }
.audit-row__who { display: flex; align-items: center; gap: 5px; color: var(--ink-2); }
.audit-row__who svg { color: var(--muted); flex: none; }
.audit-row__ev { color: var(--accent-strong); font-size: var(--fs-xs); }
.audit-row__detail { color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

@media (max-width: 1024px) {
  .source-view { grid-template-columns: 1fr; }
  .audit-row { grid-template-columns: 48px 1fr; }
  .audit-row__ev, .audit-row__who { display: none; }
}
@media (max-width: 1024px) {
  :root { --rail-w: 200px; }
  .edit-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 860px) {
  .shell {
    /* Без фиксированного минимума колонки сцены: жёсткий нижний предел в
       720px растягивал страницу и делал мобильный экран непригодным. */
    grid-template-columns: minmax(168px, 42vw) minmax(0, 1fr);
  }
  .rail { overflow-x: hidden; }
  .rail__brand { padding: 10px var(--sp-3); }
  .rail__nav { padding: var(--sp-2); }
  .rail__foot { padding: var(--sp-2) var(--sp-3); }
  .rail-step__metric { display: none; }
  .rail-step { padding: 6px var(--sp-2); }
  .rail-step__name { font-size: var(--fs-sm); }
  /* Мета-строка проекта уходит первой: имя проекта и действия важнее. */
  .topbar__meta { display: none; }
  .manager-route__content { align-items: stretch; flex-direction: column; }
  .manager-route__action { width: 100%; }
}

/* ====================== Боевые панели (реальные данные) ================== */

/* Топбар: ключ доступа + системный статус */
.auth-form { display: flex; align-items: center; gap: var(--sp-2); }
.auth-form .input--sm { min-height: 28px; width: 150px; font-size: var(--fs-sm); }
.input--sm { min-height: 28px; padding: 4px var(--sp-2); }
.app.auth-required .topbar__actions > :not(.auth-form):not(.sysstatus) { opacity: .5; }
.auth-form.auth-required .input { border-color: var(--warn-line); background: var(--warn-tint); }
.sysstatus__body { display: grid; gap: 0; line-height: 1.2; }
.sysstatus__body strong { font-weight: 600; }
.sysstatus__body span { font-size: var(--fs-xs); color: inherit; opacity: .85; }
.sysstatus.system-status-error { background: var(--danger-tint); color: var(--danger); border-color: var(--danger-line); }
.sysstatus.system-status-warning { background: var(--warn-tint); color: oklch(45% 0.11 60); border-color: var(--warn-line); }
.sysstatus.system-status-ok, .sysstatus.system-status-loading { background: var(--ok-tint); color: var(--ok); border-color: var(--ok-line); }
/* F2 (волна B): живой статус — зелёная пульсация точки при активном задании. */
.sysstatus.system-status-processing { background: var(--ok-tint); color: var(--ok); border-color: var(--ok-line); }
.sysstatus.system-status-processing .dot {
  animation: sysstatus-pulse 1.4s ease-in-out infinite;
}
@keyframes sysstatus-pulse {
  0%, 100% { opacity: 1; box-shadow: 0 0 0 0 var(--ok-line); }
  50% { opacity: .55; box-shadow: 0 0 0 5px var(--ok-tint); }
}

/* Одиночный тост (боевой showToast) — рядом со стеком */
.toast-single {
  position: fixed; left: 50%; bottom: var(--sp-4); transform: translateX(-50%) translateY(8px);
  max-width: min(520px, calc(100vw - 32px));
  padding: var(--sp-3) var(--sp-4); border-radius: var(--r-md);
  background: oklch(26% 0.012 255); color: #fff; font-size: var(--fs-sm);
  box-shadow: var(--shadow-2); opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s; z-index: 70;
}
.toast-single.visible { opacity: 1; transform: translateX(-50%) translateY(0); }
.toast__actions { display: flex; gap: var(--sp-2); flex-wrap: wrap; margin-top: var(--sp-2); }
.toast__actions .btn { color: inherit; border-color: currentColor; }

/* Список проектов */
.proj-item {
  display: grid; gap: 1px; width: 100%; text-align: left; padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2);
  font: inherit; cursor: pointer; transition: border-color .12s, background .12s;
}
.proj-item + .proj-item { margin-top: var(--sp-2); }
.proj-item:hover { border-color: var(--accent); background: var(--accent-tint); }
.proj-item.is-active { border-color: var(--accent); background: var(--accent-tint); }
.proj-item__title { font-weight: 600; }
.proj-item__meta { font-size: var(--fs-sm); color: var(--muted); }
.project-create { display: flex; align-items: flex-end; gap: var(--sp-3); flex-wrap: wrap; }
.project-create .field { min-width: 260px; flex: 1; }

/* Панель: общий заголовок-действия */
.panel__head-actions { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.project-scope-control { display: flex; align-items: center; gap: var(--sp-2); min-width: 180px; }
.project-scope-control .label { flex: none; font-size: var(--fs-xs); color: var(--muted); font-weight: 600; }
.project-scope-control .select { min-width: 128px; }
.processing-action-state { font-size: var(--fs-sm); color: var(--muted); margin-top: var(--sp-2); }
.processing-actions { display: flex; gap: var(--sp-2); }

/* Форма загрузки */
.upload-form { display: grid; gap: var(--sp-3); margin-top: var(--sp-3); }
.upload-role-queue { display: grid; gap: var(--sp-1); }
.upload-role-row { display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-sm); }
.upload-role-filename { font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.upload-progress-state { font-size: var(--fs-sm); color: var(--muted); }
.upload-progress-state.upload-progress-loading { color: var(--info); }
/* #1 Drag&drop подсветка */
.dropzone.is-dragover { border-color: var(--accent); background: var(--accent-tint); color: var(--accent-strong); }
.dropzone.is-dragover .dropzone__icon { color: var(--accent); }
/* #2 Роль файла через radio-кнопки */
.upload-role-hint { color: var(--muted); font-size: var(--fs-sm); }
.upload-role-seg { display: flex; gap: 2px; }
.upload-role-radio { display: inline-flex; align-items: center; padding: 3px 10px; font-size: var(--fs-sm); border: 1px solid var(--line); border-radius: var(--radius-sm); cursor: pointer; user-select: none; background: var(--surface); color: var(--muted); transition: background 0.1s, color 0.1s, border-color 0.1s; }
.upload-role-radio.is-active { background: var(--accent-tint); color: var(--accent-strong); border-color: var(--accent); font-weight: 600; }
.upload-role-radio:hover:not(.is-active) { border-color: var(--accent); color: var(--ink); }
.upload-role-auto-badge { display: inline-block; font-size: 10px; font-weight: 500; background: var(--accent-tint); color: var(--accent-strong); border-radius: 3px; padding: 0 4px; margin-left: 6px; vertical-align: middle; }

/* Чек-лист пакета документов */
.package-checklist { display: grid; gap: var(--sp-2); margin-top: var(--sp-3); }
.package-check-summary { display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-sm); }
.package-check-summary.package-role-present { color: var(--ok); }
.package-check-summary.package-role-missing { color: oklch(45% 0.11 60); }
.package-role-grid { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
.package-role {
  display: flex; align-items: center; gap: 6px; padding: 4px var(--sp-2);
  border: 1px solid var(--line); border-radius: var(--r-pill); font-size: var(--fs-xs); background: var(--panel-2);
}
.package-role-present { border-color: var(--ok-line); background: var(--ok-tint); color: var(--ok); }
.package-role-missing { border-color: var(--warn-line); background: var(--warn-tint); color: oklch(45% 0.11 60); }
.package-role-optional { color: var(--muted); }

/* Документы: метаданные/контрольная сумма/ссылка */
.document-source-meta { color: var(--muted); }
.document-hash { font-size: var(--fs-xs); color: var(--ink-2); }
.document-download-link { text-decoration: none; }

/* Сводка позиций */
.positions__summary, .offer-items-summary { display: flex; gap: var(--sp-4); flex-wrap: wrap; padding: var(--sp-2) var(--sp-4); font-size: var(--fs-sm); color: var(--ink-2); border-bottom: 1px solid var(--line); }
.offer-items-toolbar { display: flex; gap: var(--sp-2); }
.offer-items-empty td { color: var(--muted); }

/* Проверка расхождений */
.verification-summary { font-size: var(--fs-sm); }
.verification-toolbar { display: flex; gap: var(--sp-2); }
.verification-comment-panel { padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--line); }
.verification-comment-panel textarea { min-height: 48px; }
.finding-select-cell { width: 36px; text-align: center; }
.bulk-actions { display: flex; gap: var(--sp-2); }
.queue-metric, .queue-blocking-count { font-variant-numeric: tabular-nums; }
.verification-current { background: var(--accent-tint) !important; }
.verification-current td { border-bottom-color: transparent; }
/* П5: доказательства расхождения разворачиваются inline под строкой */
.finding-evidence-row > .finding-evidence-cell { padding: 0; background: var(--accent-tint); border-bottom: 2px solid var(--accent); }
.evidence-panel--inline { display: block !important; margin: 0; padding: var(--sp-3, 12px) var(--sp-4, 16px); border: 0; box-shadow: inset 3px 0 0 var(--accent); }
.evidence-panel--inline .kicker { margin: 0 0 var(--sp-2, 8px); }
.finding-row-open { border: 0; background: transparent; text-align: left; font: inherit; cursor: pointer; padding: 0; width: 100%; }
.finding-row-open:hover .cell-strong { color: var(--accent-strong); }
.severity-badge { border: 1px solid transparent; }
.severity-critical, .severity-error, .severity-high { background: var(--danger-tint); color: var(--danger); border-color: var(--danger-line); }
.severity-medium, .severity-warning { background: var(--warn-tint); color: oklch(45% 0.11 60); border-color: var(--warn-line); }
.severity-info { background: var(--info-tint); color: var(--info); border-color: var(--info-line); }

/* Доказательства */
.evidence-panel { padding: var(--sp-4); border-top: 1px solid var(--line); }
.evidence-view { display: grid; gap: var(--sp-3); margin-top: var(--sp-2); }
.evidence-card { display: grid; gap: var(--sp-2); padding: var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2); }
.evidence-visual { gap: var(--sp-3); }
.evidence-source-role { font-size: var(--fs-xs); color: var(--muted); }
.offer-item-evidence-actions { display: flex; gap: var(--sp-2); margin: 4px 0; }
.offer-item-match-meta { display: flex; gap: var(--sp-3); font-size: var(--fs-sm); color: var(--ink-2); margin: 2px 0; flex-wrap: wrap; }
.item-correction-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: var(--sp-2); margin-top: var(--sp-2); }
.decision-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: var(--r-pill); font-size: var(--fs-xs); font-weight: 600; background: var(--panel-3); color: var(--muted); }
.decision-include { background: var(--ok-tint); color: var(--ok); }
.decision-correct { background: var(--info-tint); color: var(--info); }
.decision-exclude { background: var(--panel-3); color: var(--muted); }
.agsk-ai-badge { margin-top: 4px; width: fit-content; }
.agsk-ai-actions { display: inline-flex; align-items: center; gap: var(--sp-1); flex-wrap: wrap; margin-top: 4px; }
.processing-status-badge { display: inline-flex; align-items: center; gap: 5px; padding: 0 8px 0 6px; height: 22px; border-radius: var(--r-pill); border: 1px solid transparent; font-size: var(--fs-xs); font-weight: 600; }
.processing-status-auto_matched, .processing-status-manual { background: var(--ok-tint); color: var(--ok); border-color: var(--ok-line); }
.processing-status-needs_review { background: var(--review-tint); color: var(--review); border-color: var(--review-line); }
.processing-status-no_supplier { background: var(--warn-tint); color: oklch(45% 0.11 60); border-color: var(--warn-line); }
.processing-status-catalog_not_found { background: var(--danger-tint); color: var(--danger); border-color: var(--danger-line); }
.processing-status-unverified, .processing-status-excluded, .processing-status-supplier_only { background: var(--panel-3); color: var(--muted); border-color: var(--line); }

/* Превью страницы источника (авторизованный blob) */
.source-page-image { max-width: 100%; border: 1px solid var(--line); border-radius: var(--r-sm); opacity: .4; transition: opacity .2s; }
.source-page-image-loaded { opacity: 1; }
.source-page-image-error { opacity: 1; border-color: var(--danger-line); }
.evidence-page-frame { position: relative; overflow: auto; max-height: 64vh; background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-sm); }
.evidence-page-frame .source-page-image { display: block; width: 100%; max-width: none; border: 0; border-radius: 0; }
.bbox-highlight { position: absolute; border: 2px solid var(--accent); border-radius: 3px; background: oklch(52% 0.13 155 / .14); }
/* Разметка источника в модалке пилота — ТОЛЬКО точечный маркер (канон владельца
   06.08): рамки позиции и полосы строк убраны, они загораживали документ. */
/* Обёртка листа: размер РАВЕН изображению (а не фрейму со скроллом), чтобы
   percentage-позиции маркеров считались от страницы и ехали вместе с ней. */
.drawing-page-wrap { position: relative; display: block; }
/* Точечный маркер найденного слова на чертеже (красный кружок, как
   идентификаторы в Solibri) — ставится внутри .drawing-page-wrap.
   Фидбек владельца 2026-06-12: маркер СБОКУ от объекта (левее начала слова),
   полупрозрачный — не закрывает значения на схеме. */
.drawing-marker {
  position: absolute; width: 13px; height: 13px; border-radius: 50%;
  background: rgba(220, 38, 38, .42); border: 1px solid rgba(255, 255, 255, .7);
  box-shadow: 0 0 0 1px rgba(220, 38, 38, .25);
  transform: translate(-160%, -50%);
  pointer-events: auto; cursor: help;
}
/* Канон владельца 06.08: ВСЕ состояния маркера полупрозрачны — маркер указывает
   место, но не закрывает документ даже при наведении и у текущей позиции. */
.drawing-marker:hover { background: rgba(220, 38, 38, .6); }
.drawing-marker.is-current { background: rgba(220, 38, 38, .55); box-shadow: 0 0 0 3px rgba(220, 38, 38, .2); }
/* Маркер строки спецификации стоит у ЛЕВОГО края листа (left:0), поэтому базовый
   сдвиг «левее слова» (-160%) увёл бы кружок за границу страницы. */
.drawing-marker.row-marker { transform: translate(35%, -50%); }
.drawing-marker--ok { background: color-mix(in srgb, var(--ok) 48%, transparent); box-shadow: 0 0 0 5px color-mix(in srgb, var(--ok) 22%, transparent); }
.drawing-marker--danger { background: color-mix(in srgb, var(--danger) 48%, transparent); box-shadow: 0 0 0 5px color-mix(in srgb, var(--danger) 22%, transparent); }
.drawing-marker--review, .drawing-marker--needs_review { background: color-mix(in srgb, var(--warn) 48%, transparent); box-shadow: 0 0 0 5px color-mix(in srgb, var(--warn) 22%, transparent); }
.drawing-marker--neutral { background: color-mix(in srgb, var(--muted) 48%, transparent); box-shadow: 0 0 0 5px color-mix(in srgb, var(--muted) 18%, transparent); }
/* Разметка появляется только после реально отрисованного листа: у пустого изображения
   высота ≈ 0, и процентные top сводят все маркеры в одну горизонтальную цепочку
   поверх пустого места (баг 02.08). */
.evidence-page-frame:not(:has(.source-page-image-loaded)) .bbox-highlight,
.evidence-page-frame:not(:has(.source-page-image-loaded)) .drawing-marker { display: none; }
/* Перебивает display:block из .evidence-page-frame .source-page-image. */
.source-page-image[hidden] { display: none; }
.evidence-preview-error { display: grid; justify-items: start; gap: var(--sp-2); padding: var(--sp-4); }
.pilot-evidence-context { position: sticky; top: 58px; z-index: 1; margin: calc(-1 * var(--sp-4)) calc(-1 * var(--sp-4)) var(--sp-3); padding: var(--sp-2) var(--sp-4); border-bottom: 1px solid var(--line); background: var(--panel); font-weight: 600; }
.pilot-evidence-paginator { display: flex; align-items: center; justify-content: center; gap: var(--sp-2); margin-bottom: var(--sp-3); }
.pilot-evidence-footer { position: sticky; bottom: calc(-1 * var(--sp-4)); display: flex; justify-content: flex-end; gap: var(--sp-2); margin: var(--sp-4) calc(-1 * var(--sp-4)) calc(-1 * var(--sp-4)); padding: var(--sp-3) var(--sp-4); border-top: 1px solid var(--line); background: var(--panel); }
.reconciliation-screen { display:grid; gap:var(--sp-4); }
.reconciliation-screen__head,.reconciliation-screen__progress>div:first-child,.reconciliation-screen__segments { display:flex; align-items:center; justify-content:space-between; gap:var(--sp-2); flex-wrap:wrap; }
.reconciliation-screen__head h1 { margin:0; }.reconciliation-screen__progress { display:grid; gap:var(--sp-2); padding:var(--sp-3); border:1px solid var(--line); border-radius:var(--r-sm); background:var(--panel); }
.reconciliation-screen__bar { width:min(180px,100%); height:6px; overflow:hidden; border-radius:var(--r-pill); background:var(--panel-3); }.reconciliation-screen__bar i { display:block; height:100%; background:var(--accent); }
.reconciliation-screen__workspace { display:grid; min-width:0; }.reconciliation-screen__workspace .pilot-check-queue { margin:0; }
.reconciliation-screen :focus-visible { outline:0; border-color:var(--accent); box-shadow:var(--ring); }
.pilot-check-queue-layout { display:grid; grid-template-columns:340px minmax(0,1fr); gap:var(--sp-3); align-items:start; }
.pilot-check-queue-master { display:grid; gap:2px; max-height:calc(100vh - 290px); overflow:auto; padding-right:var(--sp-1); }
.pilot-check-queue-master-item { position:relative; display:grid; grid-template-columns:auto 1fr; gap:3px var(--sp-2); width:100%; padding:10px 12px; border:1px solid transparent; border-radius:var(--r-sm); background:transparent; color:var(--ink); text-align:left; cursor:pointer; }
.pilot-check-queue-master-item:hover { background:var(--panel-2); }.pilot-check-queue-master-item.is-selected { border-color:var(--accent); background:var(--accent-tint); }
.pilot-check-queue-master-item__risk { position:absolute; inset:7px auto 7px 0; width:3px; border-radius:999px; }.pilot-check-queue-master-item__risk--ok { background:var(--ok); }.pilot-check-queue-master-item__risk--warn { background:var(--warn); }.pilot-check-queue-master-item__risk--review { background:var(--accent); }
.pilot-check-queue-master-item strong,.pilot-check-queue-master-item small { grid-column:1 / -1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }.pilot-check-queue-master-item small { color:var(--muted); }
.pilot-check-queue-detail-wrap { min-width:0; }.pilot-check-queue-detail { display:grid; gap:var(--sp-3); padding:var(--sp-3); border:1px solid var(--line); border-radius:var(--r-sm); background:var(--panel); }
.pilot-check-queue-source-summary { display:flex; gap:var(--sp-2); align-items:flex-start; }.pilot-check-queue-source-marker { flex:0 0 auto; width:10px; height:10px; margin-top:4px; border-radius:50%; background:var(--accent); box-shadow:0 0 0 3px color-mix(in oklch, var(--accent) 18%, transparent); }
.pilot-check-queue-previews { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--sp-2); }.pilot-check-queue-preview { display:grid; gap:var(--sp-1); min-width:0; }.pilot-check-queue-preview .evidence-page-frame { min-height:130px; }.pilot-check-queue-preview--empty { padding:var(--sp-3); border:1px dashed var(--line-strong); border-radius:var(--r-sm); background:var(--panel-2); }
.pilot-check-queue-decision { position:sticky; bottom:0; z-index:2; display:flex; align-items:center; gap:var(--sp-2); flex-wrap:wrap; margin:0 calc(-1 * var(--sp-3)) calc(-1 * var(--sp-3)); padding:var(--sp-3); border-top:1px solid var(--line-strong); background:var(--panel); }
.pilot-check-queue-decision .cell-sub { margin-left:auto; }.pilot-check-queue-no-candidate,.pilot-check-queue-state { display:grid; gap:var(--sp-2); padding:var(--sp-4); border:1px dashed var(--line-strong); border-radius:var(--r-sm); background:var(--panel-2); color:var(--muted); }
.pilot-check-queue-state { place-items:start center; text-align:center; min-height:180px; align-content:center; }
@media (max-width:900px) { .pilot-check-queue-layout { grid-template-columns:280px minmax(0,1fr); }.pilot-check-queue-master { max-height:none; } }
@media (max-width:760px) { .reconciliation-screen__segments { justify-content:flex-start; } .pilot-check-queue-layout { grid-template-columns:1fr; }.pilot-check-queue-master { display:flex; overflow:auto; max-height:none; }.pilot-check-queue-master-item { flex:0 0 260px; }.pilot-check-queue-decision .cell-sub { width:100%; margin-left:0; }.pilot-check-queue-decision .btn { flex:1 1 120px; } }
@media (max-width: 760px) {
  .workarea__body { display: block; }
  /* Док — полноширинный bottom sheet: открытие сразу попадает в область
     обзора (position: fixed), не отодвигая сцену. */
  .dock, .dock--source, .dock--hermes {
    position: fixed; top: auto; left: 0; right: 0; bottom: 0;
    width: 100%;
    min-height: 0;
    max-height: min(78vh, 640px);
    border-left: 0;
    border-top: 1px solid var(--line);
    border-radius: var(--r-md) var(--r-md) 0 0;
    box-shadow: 0 -12px 28px rgb(15 18 26 / 0.22);
    z-index: 40;
    overscroll-behavior: contain;
  }
  .source-dock__head { top: 0; border-radius: var(--r-md) var(--r-md) 0 0; }
}
.excel-context { overflow: auto; border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel); }
.excel-context__table { width: max-content; min-width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
.excel-context__table th, .excel-context__table td { border: 1px solid var(--line); padding: 6px 8px; max-width: 260px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.excel-context__table th { background: var(--panel-3); color: var(--muted); font-family: var(--font-mono); font-weight: 600; text-align: left; }
.excel-cell-highlight { outline: 2px solid var(--accent); outline-offset: -2px; background: var(--accent-tint); color: var(--ink); font-weight: 600; }
.pos-source-open { border: 0; background: transparent; padding: 0; text-align: left; color: inherit; cursor: pointer; }
.pos-source-open:hover { color: var(--accent-strong); text-decoration: underline; text-underline-offset: 2px; }

/* Сформированные КП */
.generated-offer-meta { gap: var(--sp-3); }
.generated-offer-summary { color: var(--muted); }
.generated-offer-total { font-variant-numeric: tabular-nums; }
.generated-offer-pricing { color: var(--ink-2); }
.generated-offer-hash { color: var(--muted); display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.generated-offer-download-link { text-decoration: none; }
.generated-offer-download-warning { border-color: var(--warn-line); color: oklch(45% 0.11 60); }
.latest-offer-download-link { text-decoration: none; }
.latest-offer-download-link.disabled { opacity: .5; pointer-events: none; cursor: not-allowed; }
.latest-offer-download-warning { border-color: var(--warn-line); }

/* Готовность КП */
.readiness-panel .panel__body { gap: var(--sp-3); }
.readiness-issues { margin: 0; padding-left: var(--sp-5); display: grid; gap: 4px; }
.readiness-issue { font-size: var(--fs-sm); color: var(--ink-2); }
.readiness-action-list { padding: 0 var(--sp-4) var(--sp-3); display: grid; gap: var(--sp-2); }
.readiness-action-ready { border-color: var(--ok-line); }
.readiness-action-blocked { border-color: var(--warn-line); }

/* Прайсы проекта / ценообразование */
.project-suppliers-disclosure > summary {
  list-style: none; cursor: pointer; border-bottom: 0;
}
.project-suppliers-disclosure > summary::-webkit-details-marker { display: none; }
.project-suppliers-disclosure > summary::after {
  content: "Раскрыть"; color: var(--muted); font-size: var(--fs-xs); font-weight: 600;
}
.project-suppliers-disclosure[open] > summary { border-bottom: 1px solid var(--line); }
.project-suppliers-disclosure[open] > summary::after { content: "Свернуть"; }
.project-suppliers-disclosure__body { display: grid; gap: var(--sp-3); }
.project-suppliers-disclosure__actions { justify-content: flex-end; }
.project-suppliers-disclosure__note { margin: 0; padding-top: var(--sp-3); border-top: 1px solid var(--line); font-size: var(--fs-sm); }
.project-supplier-option {
  display: flex; align-items: center; gap: var(--sp-2); padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2); cursor: pointer;
}
.project-supplier-option + .project-supplier-option { margin-top: var(--sp-2); }
.project-supplier-toolbar {
  display: flex; align-items: center; gap: var(--sp-2); margin-bottom: var(--sp-2); flex-wrap: wrap;
}
.project-supplier-toolbar .input--search { width: min(280px, 100%); }
.project-supplier-counts {
  display: flex; justify-content: space-between; gap: var(--sp-2); margin-bottom: var(--sp-2);
  color: var(--muted); font-size: var(--fs-sm); flex-wrap: wrap;
}
.project-supplier-list { display: grid; gap: var(--sp-2); }
.project-supplier-list .project-supplier-option + .project-supplier-option { margin-top: 0; }
.project-supplier-name { font-weight: 600; }
.project-supplier-key { color: var(--muted); font-size: var(--fs-sm); }
.project-supplier-date { color: var(--muted); font-size: var(--fs-sm); }
.project-supplier-date--unknown { font-style: italic; }
.project-supplier-stats { margin-left: auto; font-size: var(--fs-sm); color: var(--muted); }
/* Подпись «что означает текущий набор галочек» — читается раньше списка. */
.project-supplier-note {
  display: flex; align-items: flex-start; gap: var(--sp-2); margin-bottom: var(--sp-2);
  padding: var(--sp-2) var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--panel-2); color: var(--muted); font-size: var(--fs-sm);
}
.project-supplier-note--warn { border-color: var(--warn-line); }
.project-pricing { display: grid; gap: var(--sp-3); }
.pricing-preview { display: grid; gap: var(--sp-2); }
.pricing-metric { display: flex; justify-content: space-between; font-size: var(--fs-sm); }
.pricing-total { display: flex; justify-content: space-between; font-weight: 700; padding-top: var(--sp-2); border-top: 1px solid var(--line-strong); }
.commercial-terms-grid { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: var(--sp-3); }

/* Состояние каталога АГСК + карточки поставщиков (боевые id) */
.agsk-status { display: flex; gap: var(--sp-4); flex-wrap: wrap; }
.agsk-status-metric { display: grid; gap: 1px; font-size: var(--fs-sm); }
.agsk-status-metric strong { font-size: var(--fs-md); }
.supplier-card, .agsk-revision-card { display: flex; align-items: center; gap: var(--sp-3); padding: var(--sp-2) var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2); }
.supplier-card + .supplier-card, .agsk-revision-card + .agsk-revision-card { margin-top: var(--sp-2); }
.card-delete-button { margin-left: auto; }

/* sr-only-инпут внутри dropzone (файловый input) */
.dropzone input[type="file"].sr-only { position: absolute; }

@media (max-width: 1024px) {
  .commercial-terms-grid { grid-template-columns: 1fr; }
  .auth-form .input--sm { width: 120px; }
  .project-decision-summary { align-items: flex-start; flex-direction: column; }
}

/* ---- Экран входа (auth-gate) ------------------------------------------- */
.auth-gate {
  position: fixed; inset: 0; z-index: 1000;
  display: flex; align-items: center; justify-content: center;
  padding: var(--sp-4);
  background: radial-gradient(120% 120% at 50% 0%, var(--accent-tint) 0%, var(--bg) 55%);
}
.auth-gate[hidden] { display: none; }
.auth-gate__card {
  width: 100%; max-width: 380px;
  display: flex; flex-direction: column; align-items: stretch; gap: var(--sp-3);
  padding: 32px;
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: var(--r-md);
  box-shadow: 0 12px 40px -12px rgba(16, 36, 28, 0.28);
  text-align: center;
}
.auth-gate__brand {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-2);
  margin-bottom: var(--sp-1);
  font-size: var(--fs-lg); font-weight: 700; letter-spacing: -0.01em;
}
.auth-gate__brand .brand__mark { width: 30px; height: 30px; }
.auth-gate__brand .brand__name b { color: var(--accent); }
.auth-gate__title { margin: 0; font-size: var(--fs-xl); font-weight: 700; color: var(--ink); }
.auth-gate__desc {
  margin: 0; font-size: var(--fs-base); line-height: var(--lh-base); color: var(--muted);
}
.auth-gate__input { width: 100%; text-align: center; margin-top: var(--sp-2); }
.auth-gate__submit { width: 100%; }
/* «Забыли пароль?», «Войти по ключу доступа», «Войти по почте» — ссылки под
   кнопкой входа, а не вторые кнопки во всю ширину карточки. Только карточка
   входа: формы восстановления, приглашения и сброса бриф оставляет как есть. */
#loginForm .btn--ghost, #authGateForm .btn--ghost { align-self: center; width: auto; }
.auth-gate__error { margin: 0; font-size: var(--fs-sm); color: var(--danger); }
.auth-gate__error[hidden] { display: none; }

/* Hermes */
.hermes-layout { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: var(--sp-4); align-items: start; }
.hermes-chat-panel { min-height: min(680px, calc(100vh - 180px)); display: flex; flex-direction: column; }
.hermes-chat-panel .panel__body { flex: 1; }
.hermes-chat-log { display: grid; gap: var(--sp-3); align-content: start; max-height: 54vh; overflow: auto; }
.hermes-message { max-width: 82%; border: 1px solid var(--line); border-radius: var(--r-sm); padding: var(--sp-3); background: var(--panel-2); }
.hermes-message.is-manager { justify-self: end; background: var(--accent-tint); border-color: var(--accent-line); }
.hermes-message__meta { margin-bottom: 4px; color: var(--muted); font-size: var(--fs-xs); font-weight: 700; text-transform: uppercase; }
.hermes-message__text { white-space: pre-wrap; line-height: var(--lh-base); }
.hermes-action-card { display: grid; gap: var(--sp-2); margin-top: var(--sp-3); padding: var(--sp-3); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel); }
.hermes-action-card__actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); }
/* description действий Hermes собирается с \n (список правок, файлы) — сохраняем переносы */
.hermes-action-card__desc { white-space: pre-wrap; }
.hermes-action-error { color: var(--danger); }
.hermes-skill-draft { display: grid; gap: 4px; padding: var(--sp-2); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2); color: var(--ink-2); overflow-wrap: anywhere; }
.hermes-command { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--sp-3); padding: var(--sp-3); border-top: 1px solid var(--line); }
.hermes-command__input { resize: none; min-height: 72px; max-height: 200px; overflow-y: auto; }
.hermes-dock__textarea { resize: none; min-height: 34px; max-height: 200px; overflow-y: auto; }
.hermes-rules { display: grid; gap: var(--sp-3); font-size: var(--fs-sm); line-height: var(--lh-base); }
.hermes-skills-panel { display: grid; gap: var(--sp-2); padding: var(--sp-2); border: 1px solid var(--line); border-radius: var(--r-sm); background: var(--panel-2); }
.hermes-skills-panel__head { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); }
.hermes-skill-item { display: grid; gap: 4px; padding-top: var(--sp-2); border-top: 1px solid var(--line); }
.hermes-skill-item.is-disabled { opacity: 0.68; }
/* Гермес живёт в правой панели (340px): своя прокрутка у панели, здесь —
   только внутренняя раскладка ленты и формы. */
.hermes-dock {
  display: grid; gap: 8px;
  padding: var(--sp-3);
  background: var(--panel);
}
.hermes-dock[hidden] { display: none; }
.hermes-dock__head, .hermes-dock__project, .hermes-dock__actions {
  display: flex; align-items: center; gap: var(--sp-2);
}
.hermes-dock__head { justify-content: space-between; }
.hermes-dock__title { display: inline-flex; align-items: center; gap: 6px; font-weight: 700; color: var(--accent-strong); }
.hermes-dock__project {
  min-width: 0; padding: 4px 7px;
  border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--panel-2); color: var(--ink-2); font-size: var(--fs-xs);
}
.hermes-dock__project span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.hermes-dock__messages {
  display: grid;
  gap: 6px;
  max-height: min(420px, 50vh);
  overflow-y: auto;
  padding-right: 2px;
  scrollbar-gutter: stable;
}
.hermes-dock__message, .hermes-dock__empty {
  padding: 7px;
  border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--panel-2);
  color: var(--muted); font-size: var(--fs-xs); line-height: 1.35;
}
.hermes-dock__message.is-manager {
  margin-left: 16px;
  background: var(--accent-tint);
  border-color: var(--accent-line);
  color: var(--ink-2);
}
.hermes-dock__message-meta {
  margin-bottom: 3px;
  color: var(--muted);
  font-weight: 700;
  text-transform: uppercase;
}
.hermes-dock__message-text { white-space: pre-wrap; overflow-wrap: anywhere; }
.hermes-dock__form { display: grid; grid-template-columns: minmax(0,1fr) 32px; gap: var(--sp-1); }
.hermes-dock__form .input { min-width: 0; width: 100%; }
.hermes-dock__actions { flex-wrap: wrap; }
.hermes-dock__files { display: grid; gap: var(--sp-2); }
.hermes-file-box { display: grid; gap: var(--sp-2); }
.hermes-file-pick { justify-content: center; overflow: hidden; }
.hermes-supplier-key-field.is-hidden { display: none; }

@media (max-width: 1120px) {
  .hermes-layout { grid-template-columns: 1fr; }
  .hermes-message { max-width: 100%; }
}

@media (max-width: 860px) {
  .hermes-dock { gap: 6px; max-height: min(420px, 58vh); }
  .hermes-dock__messages { max-height: min(260px, 34vh); }
  .hermes-dock__actions { display: none; }
}

/* Имя позиции пилота — кликабельная ссылка на источник (лист чертежа):
   владельцу удобнее тыкать по наименованию, чем по иконке-глазу (14.07). */
.pilot-name-link { color: inherit; text-decoration: none; border-bottom: 1px dotted var(--muted); cursor: pointer; }
.pilot-name-link:hover { border-bottom-color: var(--accent); color: var(--accent); }

/* Пилот V3: строка позиции кликабельна — открывает «Источник позиции».
   Кнопочная ячейка сохраняет обычный курсор. */
tr[data-pilot-line] > td { cursor: pointer; }
tr[data-pilot-line] > td.pilot-rowact { cursor: auto; }
.pilot-row-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: flex-end;
  gap: 4px;
}
.pilot-row-actions .btn--xs { height: 28px; min-height: 28px; }
.pilot-row-actions .btn--icon.btn--xs { width: 28px; min-width: 28px; padding: 0; }
.pilot-rowact .btn--icon { color: var(--muted); opacity: .68; }
.pilot-rowact .btn--icon:hover,
.pilot-rowact .btn--icon:focus-visible { color: var(--ink); opacity: 1; }
.ds-ws-cell--name .ds-ws-status-icon { opacity: .58; }
.ds-ws-cell--name .ds-ws-status-icon:hover { opacity: .82; }
/* Широкая таблица скроллится только по горизонтали; по вертикали страница
   цельная (владелец 07.08) — внутренней области прокрутки данных нет. */
.pilot-table-scroll { overflow-x: auto; }
.pilot-price-stack { display: grid; gap: 2px; min-width: 0; text-align: left; }
/* Мини-волна 20.08: вторая цена — отдельной строкой ячейки, переносится, а не
   режется многоточием. ds.css ставит на .ds-ws-price__sub nowrap+ellipsis —
   снимаем здесь, в контексте стопки цены. Подписи источника и детали (вторая
   цена + поставщик + артикул) — блочными строками: «розница» сверху,
   «закупка 1 457 · chint · 296829» ниже. */
.pilot-price-stack .ds-ws-price__sub {
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
  overflow-wrap: anywhere;
}
.pilot-price-stack .ds-ws-price__origin,
.pilot-price-stack .ds-ws-price__detail { display: block; }
/* Волна W2 (раунд 2): признак принят по назначению — пометка тише подписи
   источника, но читается и переносится (колонка узкая). */
.pilot-price-stack .ds-ws-price__assumed {
  color: var(--muted, #6b7280);
  font-size: 11px;
  overflow-wrap: anywhere;
}
/* Разбор цены построчно (себестоимость/розница) убран из строки волной 2 —
   он живёт в title ячейки, а развёрнутый разбор даёт панель источника. */

/* ---- Волна 2: панель управления главного экрана (LAYOUT_SPEC §2.1) ------- */
.ds-controls {
  display: flex; flex-direction: column; gap: 10px;
  padding: 14px 0 10px;
}
.ds-controls__row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ds-controls__row > * { flex: none; white-space: nowrap; }
.ds-controls__spacer { flex: 1 1 auto; min-width: var(--sp-2); }
.ds-controls__search {
  flex: 1 1 240px; min-width: 200px; max-width: 360px;
  min-height: 34px; white-space: normal;
}
/* Выбранные прайсы: метка + чипы + текстовая кнопка «изменить». */
.ds-prices {
  display: inline-flex; align-items: center; gap: var(--sp-2);
  padding: 5px 10px;
  border: 1px solid var(--line-strong); border-radius: var(--r-sm);
  background: var(--panel);
}
/* F1 (волна B): прайсы на карточке страницы проекта — блок занимает карточку. */
.ds-prices--block {
  display: flex; flex-wrap: wrap; width: 100%; box-sizing: border-box;
}
/* F3 (волна B): массовые операции. Чекбоксы строк видны при наведении или при
   активном выборе; панель «Выбрано N» живёт над таблицей. */
.ds-ws-check {
  width: 15px; height: 15px; margin: 0; flex: none; cursor: pointer;
  opacity: 0; transition: opacity .12s ease;
  accent-color: var(--accent, #226f54);
}
/* Галочку показывает наведение на САМУ СТРОКУ таблицы, а не на класс полосы
   (14.09). `.ds-ws-band` — класс полосы во всю ширину: он выводит строку из
   сетки (`ds.css`: `display: block`), и вешать его на строку позиции ради
   наведения значило бы сложить восемь ячеек столбиком. Селектор строки
   покрывает и полосы (исключённая позиция), и сеточные строки щита и группы. */
.ds-ws-table > tbody > tr:hover .ds-ws-check,
.ds-ws-table > tbody > tr:focus-within .ds-ws-check,
.pilot-mass-active .ds-ws-check { opacity: 1; }
.pilot-mass-host { min-height: 0; }
.pilot-mass-bar {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 8px 12px; margin-bottom: 10px;
  border: 1px solid var(--accent-line, var(--ok-line)); border-radius: var(--r-md, 10px);
  background: var(--accent-tint, var(--ok-tint));
}
.pilot-mass-bar .kicker { font-size: var(--fs-sm, 13px); }
.pilot-mass-bar .ds-mass-count { color: var(--accent-strong, #1b5e40); }
.pilot-mass-bar__spacer { flex: 1 1 auto; }
.pilot-mass-bar .btn { white-space: nowrap; }
.pilot-mass-progress { color: var(--accent-strong, #1b5e40); font-weight: 600; }
.pilot-mass-bar .btn[aria-busy="true"] { opacity: .6; }
.pilot-mass-bar .btn[aria-busy="true"]::after {
  content: ""; display: inline-block; width: 12px; height: 12px; margin-left: 6px;
  border: 2px solid currentColor; border-top-color: transparent; border-radius: 50%;
  vertical-align: -2px; animation: spin 1s linear infinite;
}
.ds-price-chip {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 1px 8px; border-radius: var(--r-pill);
  background: var(--accent-tint); border: 1px solid var(--ok-line);
  font-size: var(--fs-sm); font-weight: 600; color: var(--accent-strong);
}
.ds-linkbtn {
  border: 0; background: none; padding: 0;
  color: var(--accent-strong); font: inherit; font-size: var(--fs-sm); cursor: pointer;
}
.ds-linkbtn:hover { text-decoration: underline; }
/* Баннер готовности — только когда подбирать больше нечего. */
.ds-banner {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 10px 14px; border-radius: var(--r-md);
  border: 1px solid var(--ok-line); background: var(--ok-tint);
}
.ds-banner__dot { width: 10px; height: 10px; border-radius: var(--r-pill); background: var(--ok); flex: none; }
/* Выпадающий список находок. */
.ds-menu-host { position: relative; display: inline-flex; }
.ds-menu {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 50;
  width: 380px; max-height: 60vh; overflow: auto;
  padding: 6px 0; border: 1px solid var(--line-strong); border-radius: var(--r-md);
  background: var(--panel); box-shadow: var(--shadow-2);
  white-space: normal;
}
.ds-menu__head { padding: 6px 14px; }
.ds-menu__row { padding: 7px 14px; border-top: 1px solid var(--ds-line-inner); }
.ds-menu__row:first-of-type { border-top: 0; }

/* ---- C1 (волна C): дропдаун «Все щиты · N ▾» в тулбаре ------------------ */
/* Ряд чипов щитов над таблицей удалён (В4); осталась одна выпадашка перехода
   к комплекту. Список — сосед кнопки (ds-menu-host), позиционируется по ней. */
.ds-anchor-index {
  position: absolute; left: 0; top: calc(100% + 6px); z-index: 50;
  display: grid; gap: var(--sp-2);
  width: 340px; padding: var(--sp-2);
  border: 1px solid var(--line-strong); border-radius: var(--r-md);
  background: var(--panel); box-shadow: var(--shadow-2);
}
/* .input--sm задаёт свой padding и стирает отступ под иконку поиска. */
.ds-anchor-index .input--search { padding-left: var(--sp-7); }
.ds-anchor-index__list { display: grid; gap: 2px; max-height: 320px; overflow: auto; }
.ds-anchor-index__item {
  display: flex; align-items: center; gap: var(--sp-2);
  width: 100%; padding: 5px var(--sp-2);
  border: 0; border-radius: var(--r-sm); background: none;
  font: inherit; text-align: left; color: var(--ink); cursor: pointer;
}
.ds-anchor-index__item:hover { background: var(--panel-3); }
.ds-anchor-index__item .ds-anchor__dot { width: 7px; height: 7px; border-radius: var(--r-pill); flex: none; }
.ds-anchor-index__name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ds-anchor-index__n { flex: none; color: var(--muted); font-size: var(--fs-sm); }
.ds-anchor-index__empty { padding: var(--sp-2); color: var(--muted); font-size: var(--fs-sm); }

/* ---- C1 (волна C): дропдаун «Фильтры ▾» в тулбаре ---------------------- */
.ds-menu__group { display: grid; gap: 2px; padding: 2px 6px 6px; }
.ds-menu-opt {
  display: flex; align-items: center; gap: var(--sp-2);
  width: 100%; padding: 6px var(--sp-3);
  border: 0; border-radius: var(--r-sm); background: none;
  font: inherit; font-size: var(--fs-sm); text-align: left;
  color: var(--ink-2); cursor: pointer;
}
.ds-menu-opt:hover { background: var(--panel-3); }
.ds-menu-opt[aria-pressed="true"] { background: var(--panel-3); color: var(--ink); font-weight: 600; }
.ds-menu-opt:disabled { opacity: .55; cursor: not-allowed; }
.ds-menu-opt .chip__n { margin-left: auto; font-variant-numeric: tabular-nums; }
.ds-menu-opt .ds-seg__n { margin-left: auto; font-size: var(--fs-sm); opacity: .7; font-variant-numeric: tabular-nums; }


/* ---- Волна 2: щит как «группа» таблицы (LAYOUT_SPEC §2.3) --------------- */
.ds-group__fact {
  display: inline-flex; align-items: center; gap: 5px;
  flex: none; white-space: nowrap;
  font-size: var(--fs-xs); color: var(--muted);
}
.ds-group__fact .input { min-height: 26px; padding: 1px 7px; font-size: var(--fs-sm); }
.board-card--unassigned .ds-group { background: var(--warn-tint); }
.ds-ws-section { display: inline-flex; align-items: center; gap: 6px; padding: 5px var(--sp-3) 5px 26px; }
/* Источник-банды секций рабочего стола (канон): позиции чертежа и спецификации
   раздельны и помечены устойчивыми заголовками источника на текущих токенах —
   чертёж --info/--info-tint, спецификация --warn/light, ручной ввод — нейтрально. */
tr.pilot-source-section td { padding-block: 6px; }
.pilot-source-section__head {
  display: inline-flex; align-items: center; gap: 8px;
  flex-wrap: wrap; min-width: 0; max-width: 100%;
}
.pilot-source-section__kind {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 1px 8px; border: 1px solid var(--line); border-radius: var(--r-pill);
  font-size: var(--fs-sm); font-weight: 600; white-space: nowrap;
}
.pilot-source-section__kind--drawing { background: var(--info-tint); color: var(--info); border-color: var(--info-line); }
.pilot-source-section__kind--specification { background: var(--warn-tint); color: var(--ds-warn-ink); border-color: var(--warn-line); }
.pilot-source-section__kind--manual { background: var(--panel-3); color: var(--ink-2); }
.pilot-source-badge--compact {
  width: var(--ds-badge-mini-h); padding-inline: 0; justify-content: center;
}
.pilot-note-popover { position: relative; display: inline-flex; flex: none; }
.pilot-note-popover__trigger {
  display: inline-flex; align-items: center; justify-content: center; gap: 3px;
  min-width: 30px; height: 22px; padding: 0 6px;
  border: 1px solid var(--warn-line); border-radius: var(--r-pill);
  background: var(--warn-tint); color: var(--ds-warn-ink);
  font: inherit; font-size: var(--fs-xs); font-weight: 700; line-height: 1;
  cursor: pointer;
}
.pilot-note-popover--danger .pilot-note-popover__trigger {
  border-color: var(--danger-line); background: var(--danger-tint); color: var(--danger);
}
.pilot-note-popover--hard-single .pilot-note-popover__trigger {
  width: auto; max-width: min(260px, calc(100vw - 32px)); height: auto;
  min-height: 22px; padding-block: 3px; text-align: left; line-height: 1.2;
}
.pilot-note-popover__label { overflow-wrap: anywhere; }
.pilot-note-popover__trigger:focus-visible { outline: none; box-shadow: var(--ring); }
.pilot-note-popover__panel {
  display: none; position: fixed; z-index: 30;
  width: max-content; max-width: min(340px, calc(100vw - 32px));
  max-height: calc(100vh - 16px); overflow-y: auto;
  padding: var(--sp-3); border: 1px solid var(--line-strong);
  border-radius: var(--r-md); background: var(--panel); color: var(--ink);
  box-shadow: var(--shadow-2); font-size: var(--fs-sm); line-height: 1.4;
}
.pilot-note-popover:hover > .pilot-note-popover__panel,
.pilot-note-popover.is-open > .pilot-note-popover__panel { display: block; }
.pilot-note-popover__panel > strong { display: block; margin-bottom: var(--sp-2); }
.pilot-note-popover__panel ul { display: grid; gap: var(--sp-2); margin: 0; padding-left: 18px; }
.pilot-note-popover__provenance {
  display: block; margin-top: 2px; color: var(--muted); font-size: var(--fs-xs);
}
.pilot-source-section__name { min-width: 0; overflow-wrap: anywhere; }
.pilot-source-section__page { color: var(--muted); font-size: var(--fs-sm); white-space: nowrap; }
.pilot-source-section__count {
  margin-left: auto; color: var(--muted); font-size: var(--fs-sm);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.pilot-source-counts { display: block; margin-top: 3px; }
@media (max-width: 768px) {
  .pilot-source-section__head { padding-left: var(--sp-3); }
  .pilot-source-section__count { margin-left: 0; }
}
.ds-ws-excluded__spacer { flex: 1 1 auto; min-width: var(--sp-2); }
.pilot-inline-candidates > td { padding: var(--sp-2) var(--sp-3); }
/* Действия строки прижаты вправо в своей колонке и не растягивают сетку. */
.ds-ws-table td.pilot-rowact { justify-self: end; }
/* Частые действия — значками в одну строку; редкие спрятаны под «⋯».
   Меню — нативный <details>: раскрывается В ПОТОКЕ, вниз по строке, поэтому
   его нечем обрезать (обёртка таблицы прокручивается по горизонтали и любой
   абсолютный поповер там резался бы), и клавиатура работает без своего JS. */
.row-more { position: relative; flex: none; }
.row-more > summary {
  list-style: none;
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer;
}
.row-more > summary::-webkit-details-marker { display: none; }
.row-more[open] > summary { background: var(--panel-3); border-color: var(--ink-2); }
.row-more__list {
  display: flex; flex-direction: column; align-items: stretch; gap: 4px;
  margin-top: 4px; padding: 6px;
  border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--panel-2);
}
.row-more__list .btn { justify-content: flex-start; }
/* Статус кода АГСК в меню «⋯» — то, что раньше стояло в колонке «Код АГСК»:
   код (или честное состояние подбора), происхождение с ✓/✗ и предупреждения
   ревью. Стоит ПЕРЕД «Подобрать АГСК» и отбит линией, чтобы читаться как
   сведение о позиции, а не как ещё одно действие. */
.row-more__list .pilot-agsk-menu-status {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px;
  padding: 2px 4px 5px;
  border-bottom: 1px solid var(--line);
}
/* Колонка кода АГСК узкая (104px), а бейдж происхождения с кнопками ✓/✗ шире:
   без переноса он ложился поверх колонки цены. */
.ds-ws-table .agsk-ai-provenance { flex-wrap: wrap; }
/* Статус-пилюли по умолчанию nowrap и фиксированной высоты — в колонках
   таблицы они шире колонки и ложились поверх соседней. Внутри рабочей
   таблицы (и только в ней) разрешаем перенос. */
.ds-ws-table .status {
  max-width: 100%;
  height: auto; min-height: 22px;
  padding-block: 2px;
  white-space: normal;
  overflow-wrap: anywhere;
  line-height: var(--lh-tight);
  text-align: left;
}

/* Pilot V3: раздельная готовность двух Excel. Плитки метрик рабочего набора
   удалены волной 2 — числа читаются с оси решения, чипов и мета-строки. */
.pilot-readiness-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--sp-3);
  margin-bottom: var(--sp-3);
}
.pilot-readiness-actions { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
.pilot-panel-head { flex-wrap: wrap; }
.pilot-panel-actions {
  min-width: 0;
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  align-items: center;
  gap: var(--sp-2);
}
.pilot-group-reconciliation {
  display: grid;
  gap: var(--sp-3);
  margin-bottom: var(--sp-4);
  padding: var(--sp-3);
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  background: var(--panel-2);
}
.pilot-group-reconciliation__head h3 { margin: 0; }
.pilot-reconciliation-list { display: grid; gap: var(--sp-3); }
.pilot-reconciliation-position {
  display: grid;
  gap: var(--sp-2);
  padding: var(--sp-3);
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  background: var(--panel);
}
.pilot-reconciliation-position__head,
.pilot-reconciliation-target__main,
.pilot-reconciliation-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
  flex-wrap: wrap;
}
.pilot-reconciliation-summary { justify-content: flex-end; }
.pilot-reconciliation-quantity { font-variant-numeric: tabular-nums; }
.pilot-reconciliation-targets,
.pilot-reconciliation-candidates ul,
.pilot-reconciliation-evidence ul {
  display: grid;
  gap: var(--sp-2);
  margin: 0;
  padding-left: var(--sp-5);
}
.pilot-reconciliation-target,
.pilot-reconciliation-candidate { padding-block: var(--sp-1); }
.pilot-reconciliation-target__main { cursor: pointer; }
.pilot-reconciliation-target__main input { flex: 0 0 auto; }
.pilot-reconciliation-candidates {
  display: grid;
  gap: var(--sp-2);
  padding: var(--sp-2);
  border: 1px dashed var(--line-strong);
  border-radius: var(--r-sm);
}

.pilot-reconciliation-candidate--rejected {
  opacity: .55;
}
.pilot-reconciliation-evidence { color: var(--muted); font-size: var(--fs-sm); }
.pilot-reconciliation-evidence summary { cursor: pointer; }
.pilot-reconciliation-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--sp-2);
}
.pilot-reconciliation-action-status { min-height: 1.25rem; }

.pilot-check-queue {
  display: grid;
  gap: var(--sp-3);
  margin-bottom: var(--sp-4);
  padding: var(--sp-3);
  border: 1px solid var(--line-strong);
  border-radius: var(--r-sm);
  background: var(--panel-2);
}
.pilot-check-queue__head,
.pilot-check-queue-card__head,
.pilot-check-queue-passports,
.pilot-check-queue-filters {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
  flex-wrap: wrap;
}
.pilot-check-queue__head h3 { margin: 0; }
.pilot-check-queue-filters label { display: grid; gap: 3px; font-size: var(--fs-sm); }
.pilot-check-queue-list { display: grid; gap: var(--sp-3); }
.pilot-check-queue-card,
.pilot-check-queue-passport {
  display: grid;
  gap: var(--sp-2);
  padding: var(--sp-3);
  border: 1px solid var(--line);
  border-radius: var(--r-sm);
  background: var(--panel);
}
.pilot-check-queue-passports { align-items: stretch; }
.pilot-check-queue-passport { flex: 1 1 320px; align-content: start; }
.pilot-check-queue-line { display: grid; grid-template-columns: minmax(120px, .7fr) minmax(220px, 1.3fr); gap: var(--sp-2); align-items: start; padding-top: var(--sp-2); border-top: 1px solid var(--line); }
.pilot-check-queue-source { display: flex; justify-content: space-between; gap: var(--sp-2); align-items: center; }
.pilot-check-queue-source--missing { display: grid; padding: var(--sp-2); border-radius: var(--r-sm); background: var(--warn-tint); }
.pilot-check-queue-fields { display: grid; gap: var(--sp-2); }
.pilot-check-queue-fields ul { margin: 0; padding-left: var(--sp-5); display: grid; gap: var(--sp-1); }
.pilot-check-queue-fields li { display: grid; grid-template-columns: minmax(140px, .7fr) repeat(2, minmax(160px, 1fr)); gap: var(--sp-2); }
.pilot-check-queue-chips { display: flex; gap: var(--sp-1); flex-wrap: wrap; }
.pilot-check-queue-batch-count { min-width: 1.5rem; padding: 0 var(--sp-1); border-radius: 999px; background: color-mix(in oklch, currentColor 12%, transparent); text-align: center; }
.pilot-check-queue-card:focus { outline: 2px solid var(--accent); outline-offset: 2px; }
/* Волна A: применённая связка — в карточке очереди и в строке воркспейса. */
.pilot-check-queue-link { display: grid; gap: var(--sp-1); }
.pilot-link-state { display: flex; gap: var(--sp-1); flex-wrap: wrap; }

/* W7: итог прогона — «распознано M из N листов» и блок выпавших листов.
   Не пилюля .status: блок многострочный, со списком листов внутри. */
.pilot-run-outcome { display: grid; gap: var(--sp-2); padding: 0 var(--sp-4) var(--sp-3); }
.pilot-run-outcome__summary { font-size: var(--fs-xs); }
.pilot-run-outcome__failed {
  display: grid;
  gap: var(--sp-2);
  padding: var(--sp-3);
  border: 1px solid var(--warn-line);
  border-radius: var(--r-sm);
  background: var(--warn-tint);
  color: oklch(45% 0.11 60);
  font-size: var(--fs-sm);
}
.pilot-run-outcome__pages { margin: 0; padding-left: var(--sp-5); display: grid; gap: var(--sp-1); }

/* 03.09: короткая сводка подбора АГСК по умолчанию — полная техническая
   расшифровка (жаргон кодов report) сворачивается сюда, видна только админу. */
.pilot-catalog-progress__details { margin-top: 6px; font-size: var(--fs-xs); }
.pilot-catalog-progress__details > summary { cursor: pointer; color: var(--muted); }

@media (max-width: 768px) {
  .docrow { grid-template-columns: 1fr; }
  .docrow__actions { justify-content: flex-start; }
  .project-decision-summary__actions,
  .project-decision-summary__actions .btn { width: 100%; }
  .pilot-readiness-grid { grid-template-columns: 1fr; }
  .pilot-panel-head { align-items: flex-start; flex-wrap: wrap; }
  .pilot-panel-actions { width: 100%; justify-content: stretch; }
  .pilot-panel-actions .btn { flex: 1 1 160px; }
  .pilot-reconciliation-position__head,
  .pilot-reconciliation-target__main,
  .pilot-reconciliation-summary,
  .pilot-check-queue-card__head { align-items: flex-start; flex-direction: column; }
  .pilot-check-queue-line,
  .pilot-check-queue-fields li { grid-template-columns: 1fr; }
  .pilot-check-queue-source { align-items: flex-start; flex-direction: column; }
}

/* Баннер обрыва загрузки модулей (503 rate-limit при холодной загрузке) */
.module-load-error {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  position: fixed;
  left: 12px;
  right: 12px;
  bottom: 12px;
  z-index: 1000;
  padding: 10px 14px;
  background: var(--danger-100, #fee2e2);
  border: 1px solid var(--danger-400, #f87171);
  border-radius: 10px;
  color: var(--danger-800, #991b1b);
  font-size: 13px;
  box-shadow: 0 8px 24px rgb(0 0 0 / 14%);
}
.module-load-error[hidden] { display: none; }

/* Drawer позиции (волна 1 редизайна): панель #positionDrawer внутри #panelDock */
.position-drawer { display: flex; flex-direction: column; gap: 10px; padding: 4px 2px; }
.position-drawer[hidden] { display: none; }
.position-drawer__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; padding-bottom: 8px; border-bottom: 1px solid var(--line, #ddd); }
.position-drawer__head-actions { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
.position-drawer__readiness { display: flex; gap: 10px; flex-wrap: wrap; font-size: 12px; }
.position-drawer__readiness .ok { color: var(--brand, #226f54); }
.position-drawer__readiness .warn { color: var(--danger-600, #dc2626); }
.position-drawer__kv b.warn { color: var(--danger-600, #dc2626); }
.position-drawer__footer { position: sticky; bottom: 0; margin-top: auto; background: var(--panel, #fff); padding-top: 10px; border-top: 1px solid var(--line, #ddd); }
.position-drawer__footer-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 8px; }

/* Рабочий стол: таблица на всю ширину (A5 — правая колонка «Итого/Проблемы»
   убрана, «Итого по КП» живёт в разделе КП, проблемы — счётчики в тулбаре). */
.pilot-ws-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; align-items: start; }
.pilot-ws-grid__main { min-width: 0; }
.pilot-ws-summary { position: sticky; top: 70px; display: grid; gap: 12px; }
.pilot-ws-summary .ws-summary { display: grid; gap: 12px; }
.ws-summary__card { background: var(--panel, #fff); border: 1px solid var(--line, #ddd); border-radius: 10px; padding: 12px; }
.ws-summary__card h4 { margin: 0 0 8px; font-size: 13px; }
.ws-summary__kv { display: flex; justify-content: space-between; gap: 10px; font-size: 13px; padding: 3px 0; }
.ws-summary__kv b { font-variant-numeric: tabular-nums; }
.ws-summary__kv--big b { font-size: 16px; color: var(--brand, #226f54); }
.ws-summary__prob { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; padding: 5px 0; border: 0; background: none; font: inherit; font-size: 13px; cursor: pointer; color: inherit; text-align: left; }
.ws-summary__prob:hover { color: var(--brand, #226f54); }
.ws-summary__prob.is-active { color: var(--brand, #226f54); font-weight: 600; }
/* A5: счётчик-фильтр проблемы в панели управления (мокап-эталон «Окно позиции»). */
.pill {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 11px; border-radius: 999px; cursor: pointer; white-space: nowrap;
  border: 1px solid var(--line, #dde); background: var(--panel-2, #f3f4f6); color: var(--muted, #6b7280);
  font-size: 12px; font-weight: 600;
}
.pill:hover { border-color: var(--line-strong, #c9ced4); color: var(--text, #1f2937); }
.pill.is-active { background: var(--accent-tint, #e9f7ee); border-color: var(--brand, #16a34a); color: var(--brand, #15803d); }
.pill.is-active .chip__n { color: var(--brand, #16a34a); }
.pill:disabled { opacity: .45; cursor: default; }
@media (max-width: 1180px) {
  .pilot-ws-grid { grid-template-columns: minmax(0, 1fr); }
  .pilot-ws-summary { position: static; }
}
.position-drawer__section { background: var(--panel, #fff); border: 1px solid var(--line, #ddd); border-radius: 10px; padding: 10px 12px; }
.position-drawer__section-title { display: flex; align-items: center; gap: 6px; margin: 0 0 8px; font-size: 13px; color: var(--muted, #666); text-transform: none; }
.position-drawer__kv { display: flex; justify-content: space-between; gap: 10px; margin-bottom: 6px; }
.position-drawer__kv b { font-variant-numeric: tabular-nums; }
.position-drawer__footer { display: flex; flex-wrap: wrap; gap: 8px; padding-top: 10px; border-top: 1px solid var(--line, #ddd); }

/* Волна D: ИИ-подбор позиции из прайса — карточки в модалке «Заменить вариант». */
.ai-sug-block { margin-top: 14px; border-top: 1px solid var(--line); padding-top: 12px; }
.ai-sug__head { display: flex; align-items: center; gap: 6px; margin-bottom: 6px; }
.ai-sug {
  display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-start;
  gap: 2px; width: 100%; text-align: left; padding: 8px; min-height: 0; white-space: normal;
  border: 0; border-top: 1px solid var(--line); border-radius: 0;
}
.ai-sug:hover { background: var(--panel-2); }
.ai-sug__badge {
  display: inline-flex; align-items: center; gap: 4px; font-size: var(--fs-xs); font-weight: 600;
  color: var(--accent-strong); background: var(--accent-tint); border-radius: 3px; padding: 1px 5px;
}
.ai-sug__badge svg { color: var(--accent); }
.ai-sug__diff { font-size: var(--fs-sm); color: var(--muted); }

/* Предпросмотр безальтернативных пар */
.baseline-preview-summary { margin-bottom: 16px; }
.baseline-preview-boards {
  display: flex;
  flex-direction: column;
  gap: 12px;
  max-height: 55vh;
  overflow-y: auto;
}
.baseline-preview-board {
  border: 1px solid var(--line, #e2e8f0);
  border-radius: 6px;
  padding: 12px;
  background: var(--panel, #ffffff);
}
.baseline-preview-board__head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
  padding-bottom: 4px;
  border-bottom: 1px solid var(--line, #edf2f7);
}
.baseline-preview-board__list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.baseline-preview-pair {
  display: grid;
  grid-template-columns: 1fr auto 1fr auto;
  align-items: center;
  gap: 12px;
  padding: 8px;
  border-radius: 4px;
  background: var(--panel-2, #f8fafc);
}
.baseline-preview-pair__arrow {
  color: var(--muted, #94a3b8);
  font-weight: bold;
}
.baseline-preview-pair__method {
  font-size: var(--fs-xs, 12px);
}
.pilot-automatic-link-badge {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: var(--fs-xs, 12px);
}
.reconciliation-screen__actions {
  display: flex;
  align-items: center;
  gap: 8px;
}
.pilot-check-queue__head-actions {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* Разница комплекта щита (канон 23.08): чертёж ↔ спецификация одним экраном. */
.pilot-kit-diff-row > td { overflow: hidden; }
.kit-diff { padding: 10px 14px 14px; min-width: 0; max-width: 100%; overflow: hidden; }
.kit-diff__head-actions { display: flex; justify-content: flex-end; margin-bottom: 8px; min-width: 0; }
.kit-diff__cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
@media (max-width: 1100px) { .kit-diff__cols { grid-template-columns: 1fr; } }
.kit-diff__col { border: 1px solid var(--line-strong); border-radius: var(--r-sm); padding: 8px 10px; min-width: 0; }
.kit-diff__col-title { margin: 0 0 6px; font-size: 12px; color: var(--muted); }
.kit-diff__empty { color: var(--muted); font-size: 12px; }
.kit-diff__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.kit-diff__row { display: flex; flex-direction: column; gap: 4px; padding: 6px 8px; border: 1px solid var(--line); border-radius: var(--r-sm); }
.kit-diff__row-main { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-width: 0; }
.kit-diff__row-qty { color: var(--muted); font-size: 12px; }
.kit-diff__row-actions { display: flex; flex-wrap: wrap; gap: 6px; min-width: 0; }
select.kit-diff__candidate { width: 100%; max-width: 100%; min-width: 0; }
.kit-diff__unresolved { margin-top: 12px; border: 1px dashed var(--line-strong); border-radius: var(--r-sm); padding: 8px 10px; }
.kit-diff-toggle { margin-left: 8px; }
.kit-diff-toggle .seg__item { font-size: 12px; padding: 2px 8px; }
.pilot-kit-duplicates-project { display: flex; justify-content: flex-end; margin: 0 0 8px; }
.kit-duplicates__groups { display: grid; gap: 8px; }
.kit-duplicates__group { border: 1px solid var(--line); border-radius: var(--r-sm); padding: 8px 10px; }
.kit-duplicates__check { display: flex; align-items: center; gap: 7px; }
.kit-duplicates__mismatch, .kit-duplicates__skip { color: var(--danger, #b42318); font-size: var(--fs-xs, 12px); margin-top: 4px; }

/* Фильтр списка «Позиции КП» по себестоимости (просьба менеджера 14.09).
   Живёт в шапке панели рядом со счётчиком позиций: переключатель из трёх
   кнопок со своими счётчиками. На узком экране переносится вместе с шапкой. */
.kp-lines-filter { display: inline-flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.kp-lines-filter .ds-count { margin-left: 4px; }
.kp-lines-filter .btn--primary .ds-count { background: rgba(255, 255, 255, .22); color: inherit; }
[data-kp-lines-filter-notice] { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
