/* Header — единая sticky-шапка на всю ширину (по образцу TMK) */
.header {
  display: flex;
  align-items: center;
  gap: 0;
  height: var(--header-height);
  padding: 0 24px;
  background: var(--color-card);
  border-bottom: 1px solid var(--color-border);
  box-shadow: var(--shadow);
  position: sticky;
  top: 0;
  z-index: 100;
  flex-shrink: 0;
}

.header__logo {
  font-size: 15px;
  font-weight: 700;
  color: var(--color-primary);
  letter-spacing: -0.3px;
  margin-right: 32px;
  white-space: nowrap;
  cursor: default;
  user-select: none;
}

.header__version {
  margin-left: 6px;
  font-size: 10px;
  font-weight: 500;
  color: var(--color-fg-muted);
  vertical-align: middle;
}

/* Индикатор соединения / свежести данных в шапке */
.live-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  margin-left: 8px;
  vertical-align: middle;
  background: #9ca3af;
  cursor: pointer;
  transition: background 0.3s;
}
.live-dot--ok      { background: #10b981; }
.live-dot--changed { background: #f59e0b; animation: live-pulse 1.5s ease-in-out 2; }
.live-dot--error   { background: #ef4444; }
.live-dot--unknown { background: #9ca3af; }

/* Индикатор интеграции (🔗 + цветной кружок-статус справа снизу).
   Цвет рисуем CSS-кружком, а не `color:` на emoji — emoji-глифы
   рендерятся system color font'ом и игнорируют CSS color. */
.integ-status {
  position: relative;
  display: inline-block;
  cursor: pointer;
  font-size: 18px;
  padding: 0 6px;
  line-height: 1;
}
.integ-status__dot {
  position: absolute;
  right: 2px;
  bottom: 2px;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #9ca3af;
  border: 1.5px solid #fff;
  box-shadow: 0 0 0 1px rgba(0,0,0,0.08);
  transition: background 0.3s;
}
.integ-status--gray   .integ-status__dot { background: #9ca3af; }
.integ-status--green  .integ-status__dot { background: #10b981; }
.integ-status--yellow .integ-status__dot { background: #f59e0b; }
.integ-status--red    .integ-status__dot { background: #ef4444; }

@keyframes live-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(245, 158, 11, 0.6); }
  70%  { box-shadow: 0 0 0 10px rgba(245, 158, 11, 0); }
  100% { box-shadow: 0 0 0 0 rgba(245, 158, 11, 0); }
}

.header__nav {
  display: flex;
  align-items: center;
  gap: 4px;
  flex: 1;
}

.nav-link {
  display: inline-flex;
  align-items: center;
  height: 36px;
  padding: 0 14px;
  border-radius: var(--radius);
  font-size: 14px;
  font-weight: 500;
  color: var(--color-fg-muted);
  cursor: pointer;
  transition: all 0.15s;
  user-select: none;
}

.nav-link:hover {
  background: var(--color-bg);
  color: var(--color-fg);
  text-decoration: none;
}

.nav-link.active {
  background: var(--color-primary);
  color: #fff;
}

/* Dropdown «Админ» */
.nav-dropdown {
  position: relative;
}

.nav-dropdown__menu {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  min-width: 220px;
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
  padding: var(--space-1);
  z-index: 110;
  display: none;
  flex-direction: column;
}

/* Меню, выровненное по правому краю триггера (для dropdown в правой части шапки) */
.nav-dropdown--right .nav-dropdown__menu {
  left: auto;
  right: 0;
}

.nav-dropdown.open .nav-dropdown__menu {
  display: flex;
}

.nav-dropdown__item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
  border-radius: var(--radius);
  font-size: 14px;
  color: var(--color-fg);
  cursor: pointer;
  user-select: none;
}

.nav-dropdown__item:hover {
  background: var(--color-bg);
  text-decoration: none;
}

.nav-dropdown__item--disabled {
  color: var(--color-fg-muted);
  cursor: not-allowed;
  opacity: 0.6;
}

.nav-dropdown__item--disabled:hover {
  background: transparent;
}

.header__user {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-left: auto;
}

.header__username {
  font-size: 13px;
  color: var(--color-fg-muted);
}

/* Main — без ограничения по ширине (как в TMK) */
#main {
  padding: var(--space-4) 24px;
}

/* Buttons */
.btn {
  padding: var(--space-2) var(--space-4);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-card);
  color: var(--color-fg);
  cursor: pointer;
  font: inherit;
  transition: all 0.1s ease;
}

.btn:hover {
  background: var(--color-bg);
}

.btn--primary {
  background: var(--color-primary);
  color: #fff;
  border-color: var(--color-primary);
}

.btn--primary:hover {
  background: var(--color-primary-hover);
  border-color: var(--color-primary-hover);
}

.btn--small {
  padding: var(--space-1) var(--space-3);
  font-size: 13px;
}

/* Forms */
.form-group {
  margin-bottom: var(--space-4);
}

/* Чекбокс-строка: квадратик + лейбл рядом без растяжения.
   width: fit-content — чтобы клик мимо input+текста не попадал
   в hit-area <label> и не тогглил чекбокс случайно. display: flex
   оставлен (а не inline-flex) — каждая строка остаётся на своей
   строке, не слипается с соседними. */
.checkbox-row {
  display: flex;
  width: fit-content;
  max-width: 100%;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
  font-size: 14px;
  cursor: pointer;
}

.checkbox-row input[type="checkbox"] {
  width: auto;
  margin: 0;
}

/* Парный класс для строк формы без чекбокса (например, «Контроль: <select>»
   в цепочке операций) — без cursor: pointer и без семантики <label>. */
.form-row-inline {
  display: flex;
  width: fit-content;
  max-width: 100%;
  align-items: center;
  gap: 8px;
  margin-bottom: 6px;
  font-size: 14px;
}

/* Сетка чекбоксов (для большого числа опций — например, dispatch_scope по стадиям) */
.checkbox-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: var(--space-1) var(--space-3);
  max-height: 50vh;
  overflow-y: auto;
  padding: var(--space-2) 0;
}

.form-group label {
  display: block;
  margin-bottom: var(--space-1);
  font-weight: 500;
  color: var(--color-fg);
}

.form-group input,
.form-group select,
.form-group textarea {
  width: 100%;
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  font: inherit;
  background: var(--color-card);
}

.form-group input:focus,
.form-group select:focus,
.form-group textarea:focus {
  outline: 2px solid var(--color-primary);
  outline-offset: -1px;
}

.form-group input[aria-invalid="true"] {
  border-color: var(--color-danger);
}

/* Login layout */
.login-page {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 70vh;
}

.login-card {
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: var(--space-6);
  box-shadow: var(--shadow);
  width: 100%;
  max-width: 360px;
}

.login-card h2 {
  margin-bottom: var(--space-5);
  text-align: center;
}

/* Tables */
.toolbar {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-4);
}

.toolbar__title {
  flex: 1;
  margin: 0;
}

.toolbar__inline {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: 0.9em;
  color: var(--color-fg-muted);
}

.radio-inline {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-right: var(--space-3);
}

.vac-report__section {
  margin: var(--space-3) 0;
}

.vac-report__section--err {
  color: #b1361f;
}

.vac-report__list {
  margin: 4px 0 0 var(--space-4);
  padding: 0;
}

.vac-report__list--err li {
  color: #b1361f;
}

.vac-report__list code {
  background: rgba(0, 0, 0, 0.06);
  padding: 0 4px;
  border-radius: 3px;
}

table {
  width: 100%;
  border-collapse: collapse;
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  overflow: hidden;
}

th, td {
  padding: var(--space-3);
  text-align: left;
  border-bottom: 1px solid var(--color-border);
}

th {
  background: var(--color-bg);
  font-weight: 600;
  color: var(--color-fg-muted);
  text-transform: uppercase;
  font-size: 12px;
  letter-spacing: 0.5px;
}

tbody tr {
  cursor: pointer;
}

tbody tr:hover {
  background: var(--color-bg);
}

tr:last-child td {
  border-bottom: none;
}

/* Status badges */
.badge {
  display: inline-block;
  padding: 2px var(--space-2);
  border-radius: var(--radius);
  font-size: 12px;
  font-weight: 500;
  background: var(--color-bg);
  color: var(--color-fg-muted);
}

.badge--draft   { background: #f3f4f6; color: #4b5563; }
.badge--active  { background: #dbeafe; color: #1d4ed8; }
.badge--shipped { background: #d1fae5; color: #047857; }
.badge--closed  { background: #e5e7eb; color: #6b7280; }
.badge--paused  { background: #fef9c3; color: #92400e; border: 1px solid #fde68a; }

.pause-banner {
  background: #fef9c3;
  border: 1px solid #fde68a;
  color: #92400e;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius);
  margin-bottom: var(--space-3);
  font-weight: 500;
}
.badge--ok      { background: #d1fae5; color: #047857; }
.badge--muted   { background: #e5e7eb; color: #6b7280; }
.badge--danger  { background: #fee2e2; color: #b91c1c; border: 1px solid #fca5a5; }

.badge--prio-critical { background: #fee2e2; color: #991b1b; border: 1px solid #fca5a5; font-weight: 700; }
.badge--prio-high     { background: #ffedd5; color: #9a3412; border: 1px solid #fed7aa; font-weight: 600; }
.badge--prio-normal   { background: #f3f4f6; color: #6b7280; }

/* Alerts */
#alert-area {
  position: fixed;
  top: var(--space-4);
  right: var(--space-4);
  z-index: 1000;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.alert {
  padding: var(--space-3) var(--space-4);
  border-radius: var(--radius);
  background: var(--color-card);
  border: 1px solid var(--color-border);
  box-shadow: var(--shadow);
  min-width: 240px;
}

.alert--error   { border-left: 4px solid var(--color-danger); }
.alert--success { border-left: 4px solid var(--color-success); }
.alert--info    { border-left: 4px solid var(--color-primary); }

/* Modal */
.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.4);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 100;
}

.modal {
  background: var(--color-card);
  border-radius: var(--radius);
  padding: var(--space-5);
  box-shadow: var(--shadow);
  max-width: 480px;
  width: 90%;
  max-height: 90vh;
  overflow-y: auto;
}

.modal__title {
  margin-top: 0;
  margin-bottom: var(--space-4);
}

.modal__actions {
  display: flex;
  justify-content: flex-end;
  gap: var(--space-2);
  margin-top: var(--space-5);
  position: sticky;
  bottom: calc(-1 * var(--space-5));
  background: var(--color-card);
  padding: var(--space-3) 0;
  margin-bottom: calc(-1 * var(--space-5));
  border-top: 1px solid var(--color-border-soft, #eee);
  z-index: 1;
}

/* Loading */
.loading {
  text-align: center;
  color: var(--color-fg-muted);
  padding: var(--space-6);
}

/* Empty state */
.empty {
  text-align: center;
  color: var(--color-fg-muted);
  padding: var(--space-6);
}

/* Project scheme — мнемосхема изделия (v0.16.2 «B + C»: карточные фазы
   с шапкой-табло + полировка плиток с рельсом и шевронами в цепочке). */
.scheme {
  display: flex;
  flex-direction: column;
  gap: var(--space-5);
  margin-top: var(--space-4);
}

/* Каждая фаза = карточка с тенью и шапкой. Между карточками
   рисуем компактную стрелку ▼ + подпись триггера. */
.scheme__section {
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-radius: 10px;
  padding: 0;
  overflow: hidden;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
  position: relative;
}

/* v0.36.0: стрелка-разделитель между ФАЗАМИ (не между секциями внутри
   одной фазы). Раньше рисовалась между каждыми двумя .scheme__section. */
.scheme__phase + .scheme__phase::before {
  content: "▼";
  display: block;
  text-align: center;
  color: var(--color-primary);
  background: transparent;
  font-size: 11px;
  margin-bottom: 8px;
  margin-top: -4px;
}

/* v0.36.0: phase-обёртка — внутри неё одна или несколько scheme__section
   одной фазы (например, upstream + node параллельно). */
.scheme__phase {
  margin-bottom: 24px;
}
.scheme__phase:last-child {
  margin-bottom: 0;
}

.scheme__phase-header {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
  padding: 0 var(--space-2);
}

.scheme__phase-title {
  margin: 0;
  flex: 1 1 auto;
  font-size: 16px;
  font-weight: 700;
  color: var(--color-fg);
  text-transform: none;
}

.scheme__phase-actions {
  display: flex;
  gap: var(--space-1);
  align-items: center;
  flex-shrink: 0;
}

.scheme__phase-arrow {
  border: 1px solid var(--color-border);
  background: var(--color-card);
  color: var(--color-fg);
  width: 28px;
  height: 28px;
  border-radius: 6px;
  font-size: 14px;
  line-height: 1;
  cursor: pointer;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.scheme__phase-arrow:hover:not([disabled]) {
  background: var(--color-bg-hover, #f3f4f6);
}
.scheme__phase-arrow[disabled] {
  opacity: 0.35;
  cursor: not-allowed;
}

.scheme__phase-early {
  margin-left: var(--space-2);
}

.scheme__phase-empty {
  padding: 14px 18px;
  color: var(--color-fg-muted);
  font-size: 13px;
  font-style: italic;
  background: var(--color-card);
  border: 1px dashed var(--color-border);
  border-radius: 10px;
}

.scheme__heading {
  background: linear-gradient(180deg, #f9fafb, #f3f4f6);
  padding: 12px 18px;
  margin: 0;
  border-bottom: 1px solid var(--color-border);
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 14px;
  font-weight: 700;
  color: var(--color-fg);
  text-transform: none;
  letter-spacing: 0;
}

/* Счётчик «N из M закрыто» справа от названия фазы (data-status из JS). */
.scheme__heading[data-status]::after {
  content: attr(data-status);
  font-size: 11px;
  color: var(--color-fg-muted);
  font-weight: 500;
}

/* Содержимое карточки идёт после .scheme__heading — выводим паддинг
   на этом уровне, а не на .scheme__section (чтобы шапка прилипала к краю). */
.scheme__section > div:not(.scheme__heading) {
  padding: 14px 18px;
}

/* Сетка для upstream / tail (хвост змейкой) — адаптивные брейкпоинты 5/4/3/2/1. */
.scheme-grid {
  display: grid;
  gap: var(--space-3);
  grid-template-columns: repeat(5, minmax(0, 1fr));
}

@media (max-width: 1280px) {
  .scheme-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 1024px) {
  .scheme-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 720px) {
  .scheme-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 480px) {
  .scheme-grid { grid-template-columns: 1fr; }
}

/* Узел: ярлык слева + горизонтальная цепочка этапов */
.scheme-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  align-items: stretch;
  margin-bottom: var(--space-3);
}

.scheme-row:last-child {
  margin-bottom: 0;
}

.scheme-row__label {
  flex: 0 0 160px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  font-weight: 600;
  color: var(--color-fg);
  padding: var(--space-3);
  background: linear-gradient(180deg, #fafbfc, #f3f4f6);
  border-left: 3px solid var(--color-primary);
  border-radius: var(--radius);
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.03);
}

.scheme-row__label-meta {
  font-size: 12px;
  font-weight: 400;
  color: var(--color-fg-muted);
}

/* v0.23.0: ДУ инстансов в строке блока на мнемосхеме */
.scheme-row__label-du {
  font-size: 12px;
  font-weight: 500;
  color: var(--color-fg, inherit);
  margin-top: 2px;
}
.scheme-row__label-du--missing {
  color: var(--color-fg-muted);
  font-weight: 400;
  font-style: italic;
}

.scheme-row__chain {
  flex: 1;
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  align-items: stretch;
  position: relative;
  padding: 6px 0;
}

/* Горизонтальный «рельс» под цепочкой — едва заметная подложка. */
.scheme-row__chain::before {
  content: "";
  position: absolute;
  left: 12px;
  right: 12px;
  top: 50%;
  height: 2px;
  background: linear-gradient(
    90deg,
    transparent 0%,
    #e5e7eb 8%,
    #e5e7eb 92%,
    transparent 100%
  );
  z-index: 0;
}

.scheme-row__chain > .scheme-block {
  z-index: 1;
}

/* Шеврон между плитками цепочки. */
.scheme-row__chain > .scheme-block + .scheme-block::after {
  content: "›";
  position: absolute;
  left: -14px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 16px;
  color: #94a3b8;
  font-weight: 700;
  background: white;
  padding: 0 3px;
  border-radius: 50%;
  z-index: 2;
}

.scheme-block {
  background: var(--color-bg);
  /* v0.31.5: цветная полоса статуса сверху — нативный 3px border-top
     вместо отдельного ::before. До 0.31.5 полоса делалась псевдо-элементом
     с собственным border-radius, который скруглял её углы плавно (от 0 до
     3px на длине радиуса) — на широких плитках это выглядело как «начало
     полосы тоньше». Нативный border скругляется браузером заодно с
     остальными border'ами плитки, без потери толщины в углах. */
  border: 1px solid var(--color-border);
  border-top: 3px solid var(--scheme-status-color, var(--color-border));
  border-radius: var(--radius);
  padding: var(--space-3);
  font-size: 13px;
  min-width: 140px;
  flex: 1 1 140px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  cursor: default;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
  transition:
    transform 0.12s ease,
    box-shadow 0.12s ease;
}

.scheme-block:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
  /* border-color НЕ меняем при hover — иначе сотрутся цвета status
     (border-top) и category (border-left). До 0.31.5 этот эффект
     был экранирован псевдо-элементом ::before; теперь полоса —
     часть border'а, перезаписывать его color нельзя. */
}

.scheme-block__title {
  font-weight: 600;
  color: var(--color-fg);
  line-height: 1.3;
}

.scheme-block__meta {
  font-size: 12px;
  color: var(--color-fg-muted);
}

.scheme-block--upstream {
  border-left: 4px solid #a855f7;
}

.scheme-block--node {
  border-left: 4px solid var(--color-primary);
}

.scheme-block--tail {
  border-left: 4px solid #14b8a6;
}

.scheme-block--service {
  /* ADR-020: оранжевая полоса для сервисных блоков (пуско-наладка,
     ремонт, гарантия) — открываются после tail. */
  border-left: 4px solid #f97316;
}

.scheme-block--disabled {
  opacity: 0.5;
}

.scheme-block--disabled .scheme-block__title::after {
  content: " (опц.)";
  font-weight: 400;
  font-size: 11px;
  color: var(--color-fg-muted);
}

.scheme-block--archived,
.scheme-row--archived {
  opacity: 0.55;
}

/* ===== Палитра статусов мнемосхемы =====
   Тонкая полоса сверху (::before) задаёт цвет статуса. Фон — лёгкая тонировка.
   Цвета намеренно отличаются от палитры канбана задач, чтобы при переключении
   обзора пользователь не путал контексты. */
.scheme-block { position: relative; }
/* v0.31.5: status-полоса теперь — это border-top самой плитки (см. выше
   в .scheme-block). Псевдо-элемент ::before убран — лишний слой,
   создававший артефакт «полоса тоньше в углах» из-за border-radius. */

.scheme-block--status-pending      { --scheme-status-color: #d1d5db; }
.scheme-block--status-waiting      { --scheme-status-color: #f59e0b; background: #fffbeb; }
.scheme-block--status-assigned     { --scheme-status-color: #3b82f6; background: #eff6ff; }
.scheme-block--status-in_progress  { --scheme-status-color: #f97316; background: #fff7ed; }
.scheme-block--status-awaiting_otk { --scheme-status-color: #8b5cf6; background: #faf5ff; }
.scheme-block--status-done         { --scheme-status-color: #10b981; background: #ecfdf5; }
.scheme-block--status-rejected     { --scheme-status-color: #dc2626; background: #fef2f2; }
.scheme-block--status-skipped      {
  --scheme-status-color: #9ca3af;
  background: repeating-linear-gradient(135deg, #f9fafb 0 6px, #f3f4f6 6px 12px);
}

/* Внутренности плитки: исполнитель / прогресс / дедлайн / бейджи */
.scheme-block__assignee {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  color: var(--color-fg-muted);
  line-height: 1.2;
}
.scheme-block__assignee--missing { color: #b91c1c; }
.scheme-block__assignee .online-dot { flex-shrink: 0; }

.scheme-block__progress {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  color: var(--color-fg-muted);
  line-height: 1.2;
}
.scheme-block__progress-bar {
  flex: 1;
  min-width: 24px;
  height: 4px;
  background: rgba(0, 0, 0, 0.08);
  border-radius: 2px;
  overflow: hidden;
}
.scheme-block__progress-fill {
  height: 100%;
  background: var(--scheme-status-color, var(--color-primary));
  transition: width 0.25s ease;
}
.scheme-block__progress-num { white-space: nowrap; }
.scheme-block__due { white-space: nowrap; }
.scheme-block__due--soon    { color: #d97706; }
.scheme-block__due--overdue { color: #dc2626; font-weight: 600; }

.scheme-block__badges {
  display: flex;
  gap: 4px;
  font-size: 12px;
  flex-wrap: wrap;
}
.scheme-block__badge {
  display: inline-flex;
  align-items: center;
  padding: 0 4px;
  border-radius: 3px;
  line-height: 1.4;
}
.scheme-block__badge--rejection { background: #fee2e2; }
.scheme-block__badge--rollback  { background: #fef3c7; }
.scheme-block__badge--errands   { background: #dbeafe; }

/* v0.32.4: бейдж прохождения ОТК на плитке мнемосхемы. */
.scheme-block__qc-row {
  margin-top: 4px;
  font-size: 11px;
  line-height: 1.4;
}
.scheme-block__qc-row a {
  text-decoration: none;
}
.scheme-block__qc {
  display: inline-flex;
  align-items: center;
  padding: 1px 6px;
  border-radius: 3px;
  white-space: nowrap;
}
.scheme-block__qc--pass {
  background: #dcfce7;
  color: #166534;
}
.scheme-block__qc--fail {
  background: #fee2e2;
  color: #b91c1c;
}
.scheme-block__qc--partial {
  background: #fef9c3;
  color: #854d0e;
}

/* v0.33.1: бейдж отгрузки на плитке мнемосхемы. */
.scheme-block__shipment-row {
  margin-top: 4px;
  font-size: 11px;
  line-height: 1.4;
}
.scheme-block__shipment-row a {
  text-decoration: none;
}
.scheme-block__shipment {
  display: inline-flex;
  align-items: center;
  padding: 1px 6px;
  border-radius: 3px;
  white-space: nowrap;
}
.scheme-block__shipment--full {
  background: #dcfce7;
  color: #166534;
}
.scheme-block__shipment--partial {
  background: #fef3c7;
  color: #92400e;
}
.scheme-block__shipment--fail {
  background: #fee2e2;
  color: #b91c1c;
}

/* v0.33.1: секция отгрузок в модалке «📁 Документы». */
.pdocs-ship-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.pdocs-ship-table th,
.pdocs-ship-table td {
  padding: 6px 8px;
  border-bottom: 1px solid #e5e7eb;
  text-align: left;
  vertical-align: top;
}
.pdocs-ship-table th {
  background: #f9fafb;
  font-weight: 600;
}
.pdocs-ship__result--pass { color: #166534; font-weight: 600; }
.pdocs-ship__result--fail { color: #b91c1c; font-weight: 600; }
.pdocs-ship__result--active { color: #92400e; font-weight: 600; }
.pdocs-ship__result--cancelled { color: #6b7280; }
.pdocs-ship__warn {
  background: #fef3c7;
  border: 1px solid #fcd34d;
  padding: 8px 12px;
  border-radius: 6px;
  margin-bottom: 8px;
}

.timeline-row__qc-pdf {
  display: inline-flex;
  align-items: center;
  padding: 0 6px;
  border-radius: 3px;
  background: #dcfce7;
  color: #166534;
  text-decoration: none;
  font-size: 12px;
}
.timeline-row__qc-pdf:hover {
  background: #bbf7d0;
}

/* Прогресс на ярлыке node-узла слева (suммарный по цепочке) */
.scheme-row__progress {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  color: var(--color-fg-muted);
  margin-top: 6px;
}
.scheme-row__progress-bar {
  flex: 1;
  min-width: 60px;
  height: 4px;
  background: rgba(0, 0, 0, 0.08);
  border-radius: 2px;
  overflow: hidden;
}
.scheme-row__progress-fill {
  height: 100%;
  background: #3b82f6;
  transition: width 0.25s ease;
}
.scheme-row__progress--status-done    .scheme-row__progress-fill { background: #10b981; }
.scheme-row__progress--status-rejected .scheme-row__progress-fill { background: #dc2626; }
.scheme-row__progress--status-in_progress .scheme-row__progress-fill { background: #f97316; }
.scheme-row__progress--status-awaiting_otk .scheme-row__progress-fill { background: #8b5cf6; }
.scheme-row__progress-num { white-space: nowrap; font-variant-numeric: tabular-nums; }

/* v0.31.2: стрелочки ↑/↓ для перестановки блоков на схеме (project.bom.write).
   До v0.31.2 здесь жил DnD (.dnd-draggable / .dnd-dragging / .dnd-drop-target),
   удалённый из-за нерешаемого бага «сбивается весь порядок» при swap'е. */
.scheme-row__reorder {
  display: inline-flex;
  flex-direction: column;
  gap: 1px;
  margin-right: var(--space-2);
  flex: 0 0 auto;
}
.scheme-row__arrow {
  width: 22px;
  height: 16px;
  padding: 0;
  font-size: 11px;
  line-height: 1;
  background: var(--color-bg-muted, #f3f4f6);
  border: 1px solid var(--color-border, #d1d5db);
  border-radius: 3px;
  cursor: pointer;
  color: var(--color-fg, #111827);
}
.scheme-row__arrow:hover:not(:disabled) {
  background: var(--color-primary, #2563eb);
  color: #fff;
  border-color: var(--color-primary, #2563eb);
}
.scheme-row__arrow:disabled {
  opacity: 0.35;
  cursor: not-allowed;
}

/* Тулбар с фильтрами (например, на странице проектов) */
.filters {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin-bottom: var(--space-3);
}

.filters__input {
  min-width: 240px;
  flex: 1 1 240px;
  max-width: 360px;
}

.filters__select {
  min-width: 140px;
}

/* ===== Унифицированные form-поля (.input / .select) =====
   Стиль выровнен с tmk.factory: высота 38px, рамка, focus-glow, кастомная
   стрелка у select. Применяется к toolbar-фильтрам и любым формам. */
.input,
.select {
  height: 38px;
  padding: 0 12px;
  background: var(--color-card, #fff);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  color: var(--color-fg);
  font-size: 14px;
  outline: none;
  transition: border-color 0.15s, box-shadow 0.15s;
  box-sizing: border-box;
}
.input:focus,
.select:focus {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(59, 91, 219, 0.12);
}
.input::placeholder { color: var(--color-fg-muted); }
.select {
  appearance: none;
  -webkit-appearance: none;
  cursor: pointer;
  padding-right: 32px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%236b7280' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
}

/* Toolbar c фильтрами: всё в одной строке (как tmk).
   .toolbar__spacer раздвигает левую и правую группы. */
.toolbar { flex-wrap: wrap; }
.toolbar__title { flex: none; margin-right: var(--space-2); }
.toolbar__spacer { flex: 1; }

/* Поиск со встроенным крестиком очистки */
.search-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
}
.search-wrap > .input {
  padding-right: 30px;
  width: 260px;
}
.search-wrap__clear {
  position: absolute;
  right: 6px;
  top: 50%;
  transform: translateY(-50%);
  border: none;
  background: transparent;
  cursor: pointer;
  font-size: 16px;
  color: var(--color-fg-muted);
  padding: 0 4px;
}
.search-wrap__clear[hidden] { display: none; }

/* Сортируемые таблицы (как в tmk) */
.sortable-table .sort-th {
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
}
.sortable-table .sort-th:hover {
  background: var(--color-bg, #f9fafb);
}
.sort-arrow {
  margin-left: 4px;
  font-size: 11px;
  color: var(--color-fg);
}
.sort-arrow--idle { opacity: 0.3; }

/* Колонка «Продукт» в таблице проектов — ограничиваем ширину, чтобы
   остальные колонки помещались; длинные названия переносятся построчно.
   Значение max-width подбираемое (≈70% прежней ширины). */
.sortable-table .col-product {
  max-width: 500px;
  white-space: normal;
  overflow-wrap: anywhere;
}

/* Плашка-напоминалка срока отгрузки — под датой, а не в одну строку. */
.sortable-table .ship-badge {
  margin-top: 2px;
}

/* Toolbar-фильтры на странице «К распределению» (v0.16.8) */
.toolbar__search {
  padding: 6px 10px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  font: inherit;
  min-width: 220px;
}
.toolbar__select {
  padding: 6px 10px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: white;
  font: inherit;
}
.toolbar__meta {
  font-size: 12px;
  color: var(--color-fg-muted);
}

th.th-sortable {
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
}
th.th-sortable:hover {
  background: var(--color-bg, #f9fafb);
}

/* Бейдж «X дней до отгрузки» */
.delivery {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 6px;
  border-radius: 4px;
  font-size: 11px;
  font-weight: 500;
  white-space: nowrap;
}
.delivery--ok       { background: #f3f4f6; color: #4b5563; }
.delivery--warn     { background: #fef3c7; color: #92400e; }
.delivery--alert    { background: #fee2e2; color: #b91c1c; }
.delivery--overdue  { background: #b91c1c; color: #fff; }

/* Wizard добавления блоков */
.ab-section {
  margin-top: var(--space-4);
}
.ab-section__title {
  margin: 0 0 var(--space-2);
  font-size: 15px;
  font-weight: 600;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
}
.ab-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--space-2);
  margin-top: var(--space-2);
}
.ab-card {
  display: flex;
  align-items: flex-start;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-bg);
  cursor: pointer;
  position: relative;
  transition: background 0.15s;
}
.ab-card:hover:not(.ab-card--existing) {
  background: var(--color-card);
}
.ab-card input[type="checkbox"] {
  margin: 4px 0 0;
  flex-shrink: 0;
}
.ab-card__body {
  flex: 1;
  min-width: 0;
}
.ab-card__title {
  font-weight: 500;
  font-size: 14px;
}
.ab-card__qty {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 4px;
}
.ab-card__qty-input {
  width: 60px;
  padding: 2px 4px;
  font-size: 12px;
}
.ab-card--existing {
  opacity: 0.55;
  cursor: not-allowed;
}
.ab-card__badge {
  position: absolute;
  top: 4px;
  right: 4px;
  font-size: 10px;
  background: #d1fae5;
  color: #065f46;
  padding: 1px 6px;
  border-radius: 8px;
}

/* Прогресс-бар проекта в таблице */
.progress {
  position: relative;
  width: 100px;
  height: 16px;
  background: #f3f4f6;
  border-radius: 8px;
  overflow: hidden;
}
.progress__bar {
  height: 100%;
  background: #3b82f6;
  transition: width 0.3s ease;
}
.progress__bar.progress--low  { background: #f59e0b; }
.progress__bar.progress--mid  { background: #3b82f6; }
.progress__bar.progress--full { background: #10b981; }
.progress__label {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  font-weight: 600;
  color: #1f2937;
}

/* Аудит-журнал */
.audit__pre {
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: 4px;
  padding: var(--space-2);
  margin: var(--space-1) 0 0;
  font-size: 11px;
  max-height: 240px;
  overflow: auto;
  white-space: pre-wrap;
  word-break: break-word;
}

.audit__footer {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: var(--space-2);
  margin-top: var(--space-3);
}

/* Picker исполнителей: список с радио + точка-индикатор активности */
.user-picker {
  display: flex;
  flex-direction: column;
  gap: 2px;
  max-height: 50vh;
  overflow-y: auto;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: var(--space-2);
}
.user-picker__row {
  display: grid;
  grid-template-columns: auto auto 1fr auto;
  align-items: start;
  column-gap: 8px;
  padding: 6px 8px;
  border-radius: 4px;
  cursor: pointer;
  line-height: 1.35;
}
.user-picker__row:hover {
  background: var(--color-bg);
}
.user-picker__row input[type="radio"] {
  margin: 0;
  width: 16px;
  height: 16px;
  /* Чтобы радио визуально стояло на одной линии с первой строкой ФИО,
     даже если ФИО переносится на две строки. */
  margin-top: 3px;
}
.user-picker__row .online-dot {
  margin-top: 6px;
}
.user-picker__name {
  min-width: 0;
  overflow-wrap: anywhere;
}
.dm-hint {
  font-size: 12px;
  color: #92400e;
}

/* Блок «Предложение системы» в окне «Назначить исполнителя» */
.dm-suggestion {
  background: #ecfdf5;
  border: 1px solid #a7f3d0;
  border-radius: var(--radius);
  padding: var(--space-3);
  margin-bottom: var(--space-3);
}
.dm-suggestion__title {
  font-weight: 600;
  font-size: 13px;
  color: #065f46;
  margin-bottom: 6px;
}
.dm-suggestion__row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 4px;
}
.dm-suggestion__name {
  font-weight: 600;
  font-size: 15px;
}
.dm-suggestion__meta {
  font-size: 12px;
  color: var(--color-fg-muted);
}
.dm-suggestion__hint {
  font-size: 12px;
  color: var(--color-fg-muted);
  margin-bottom: 10px;
}
.dm-suggestion__actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

/* Бейдж загрузки в строке кандидата */
.load-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 22px;
  height: 18px;
  padding: 0 5px;
  border-radius: 9px;
  font-size: 11px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.load-badge--low  { background: #f3f4f6; color: #4b5563; }
.load-badge--mid  { background: #fef3c7; color: #92400e; }
.load-badge--high { background: #fee2e2; color: #b91c1c; }

/* ===== 🔔 Уведомления в шапке ===== */
#bell-dropdown { position: relative; }
.bell-icon { font-size: 18px; }
.bell-badge {
  position: absolute;
  top: -4px;
  right: -4px;
  background: #dc2626;
  color: #fff;
  border-radius: 10px;
  padding: 1px 6px;
  font-size: 11px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  line-height: 1.4;
  min-width: 18px;
  text-align: center;
  pointer-events: none;
}
.nav-dropdown__menu--wide { min-width: 320px; max-width: 360px; }
.bell-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 8px 12px;
  border-bottom: 1px solid var(--color-border);
  font-weight: 600;
  font-size: 13px;
}
.bell-list {
  max-height: 60vh;
  overflow-y: auto;
}
.bell-list .empty {
  padding: 16px;
  text-align: center;
  color: var(--color-fg-muted);
}
.bell-item {
  padding: 8px 12px;
  border-bottom: 1px solid var(--color-border);
  cursor: pointer;
}
.bell-item:hover { background: var(--color-bg, #f9fafb); }
.bell-item--unread { background: #eff6ff; }
.bell-item--unread:hover { background: #dbeafe; }
.bell-item__title { font-weight: 600; font-size: 13px; line-height: 1.3; }
.bell-item__body  { font-size: 12px; color: var(--color-fg-muted); line-height: 1.3; margin-top: 2px; }
.bell-item__time  { font-size: 11px; color: var(--color-fg-muted); margin-top: 4px; }

/* Просроченные поручения */
.errand-card--overdue {
  border-left: 4px solid #dc2626;
}
.errand-overdue-chip {
  display: inline-block;
  background: #fee2e2;
  color: #991b1b;
  padding: 1px 7px;
  border-radius: 9px;
  font-size: 11px;
  font-weight: 600;
  margin-left: 4px;
  white-space: nowrap;
}

.role-chip {
  display: inline-block;
  padding: 1px 8px;
  margin-right: 4px;
  background: #dbeafe;
  color: #1d4ed8;
  border-radius: 10px;
  font-size: 11px;
  font-weight: 500;
}

/* Точка активности (10px, в строке) */
.online-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
  background: #9ca3af;
}
.online-dot--online  { background: #10b981; }
.online-dot--idle    { background: #f59e0b; }
.online-dot--offline { background: #d1d5db; }

/* Группировка «Мои задачи» по проектам */
.mytasks__project {
  margin-bottom: var(--space-4);
  padding: var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-card);
}
.mytasks__project-title {
  margin: 0 0 var(--space-2);
  font-size: 15px;
  font-weight: 600;
}
.mytasks__bucket {
  margin-top: var(--space-2);
}
.mytasks__bucket-title {
  font-size: 13px;
  font-weight: 500;
  color: var(--color-fg-muted);
  margin: var(--space-2) 0 var(--space-1);
}

.scheme-block--archived .scheme-block__title,
.scheme-row--archived .scheme-row__label > div:first-child {
  text-decoration: line-through;
}

.scheme-block:hover {
  background: var(--color-card);
}

.scheme__back {
  margin-bottom: var(--space-3);
}

/* Кликабельный лейбл узла на схеме (drill-down) */
.scheme-row__label--clickable {
  cursor: pointer;
}

.scheme-row__label--clickable:hover {
  background: var(--color-card);
}

/* Task status badges — для списков и таймлайна задач */
.tbadge {
  display: inline-block;
  padding: 2px var(--space-2);
  border-radius: var(--radius);
  font-size: 12px;
  font-weight: 500;
}

.tbadge--pending         { background: #f3f4f6; color: #4b5563; }
.tbadge--waiting         { background: #fef3c7; color: #92400e; }
.tbadge--assigned        { background: #dbeafe; color: #1d4ed8; }
.tbadge--in_progress     { background: #c7d2fe; color: #3730a3; }
.tbadge--awaiting_otk    { background: #fde68a; color: #78350f; }
.tbadge--done            { background: #d1fae5; color: #047857; }
.tbadge--rejected_by_otk { background: #fee2e2; color: #b91c1c; }
.tbadge--paused          { background: #ffedd5; color: #9a3412; }
.tbadge--skipped         { background: #e5e7eb; color: #6b7280; }
.tbadge--cancelled       { background: #e5e7eb; color: #6b7280; text-decoration: line-through; }
/* errand-only варианты (in_progress / done / cancelled — общие с tasks) */
.tbadge--new             { background: #fef3c7; color: #92400e; }
.tbadge--taken           { background: #dbeafe; color: #1d4ed8; }
.tbadge--rejected        { background: #fee2e2; color: #b91c1c; }

/* ===== Поручения ===== */
.errands-section {
  margin-bottom: var(--space-5);
}

.errands-section__title {
  font-size: 16px;
  font-weight: 600;
  margin-bottom: var(--space-2);
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.errands-section__title--toggle {
  cursor: pointer;
  user-select: none;
}

.errands-section__cnt {
  font-weight: 400;
  color: var(--color-fg-muted);
  font-size: 14px;
}

.errands-section__caret {
  margin-left: auto;
  color: var(--color-fg-muted);
}

.errand-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.errand-card {
  border: 1px solid var(--color-border);
  border-radius: 6px;
  padding: var(--space-3);
  background: var(--color-bg);
}

.errand-card__head {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.errand-card__title {
  font-weight: 600;
}

.errand-card__meta {
  font-size: 12px;
  color: var(--color-fg-muted);
}

.errand-card__desc {
  margin-top: var(--space-2);
  white-space: pre-wrap;
}

.errand-card__project {
  margin: 4px 0;
  font-size: 0.85em;
  color: var(--color-fg-muted);
}

.errand-card__reason {
  margin-top: var(--space-2);
  font-size: 12px;
  color: #b91c1c;
}

.errand-card__actions {
  margin-top: var(--space-2);
  display: flex;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.errand-card__files {
  margin-top: var(--space-2);
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.errand-file {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--color-card);
  border: 1px solid var(--color-border);
  border-radius: 4px;
  padding: 2px 6px;
  font-size: 12px;
}

.errand-file a {
  text-decoration: none;
}

.errand-file__size {
  color: var(--color-fg-muted);
}

.errand-file__del {
  background: transparent;
  border: none;
  color: #b91c1c;
  cursor: pointer;
  padding: 0 2px;
  font-size: 14px;
  line-height: 1;
}

.errand-file__del:hover {
  color: #7f1d1d;
}

/* Связанные поручения в drill-down блока */
.related-errands {
  margin-top: var(--space-4);
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-border);
}

.related-errands__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--space-2);
}

.related-errands__title {
  font-size: 14px;
  font-weight: 600;
  margin: 0;
}

/* Drill-down: список экземпляров */
.instance-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin-top: var(--space-3);
}

.instance-row {
  padding: var(--space-3);
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.instance-row:hover {
  background: var(--color-card);
}

/* Drill-down: таймлайн задач экземпляра/блока */
.timeline {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin-top: var(--space-3);
}

.timeline-row {
  padding: var(--space-3);
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.timeline-row__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
}

.timeline-row__title {
  font-weight: 600;
}

.timeline-row__meta {
  font-size: 12px;
  color: var(--color-fg-muted);
}

.timeline-row__actions {
  display: flex;
  gap: var(--space-2);
  flex-wrap: wrap;
}

.modal--wide {
  max-width: 720px;
}

.modal--xl {
  max-width: 920px;
}

.modal--xxl {
  max-width: 1280px;
}

/* ===== Склад (procurement) ===== */

.proc-tabs {
  display: inline-flex;
  border: 1px solid var(--color-border);
  border-radius: 6px;
  overflow: hidden;
}

.proc-tabs__btn {
  padding: 6px 14px;
  border: none;
  background: var(--color-bg);
  color: var(--color-fg);
  cursor: pointer;
  font-size: 14px;
  border-right: 1px solid var(--color-border);
}

.proc-tabs__btn:last-child {
  border-right: none;
}

.proc-tabs__btn.active {
  background: var(--color-primary);
  color: #fff;
}

.toolbar--filters {
  gap: var(--space-2);
  padding-top: 0;
}

.proc-status {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 10px;
  font-size: 12px;
  white-space: nowrap;
}

.proc-project-chip {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 10px;
  font-size: 12px;
  background: #eef2ff;
  color: #2c4cad;
  white-space: nowrap;
}

.modal.modal--xxl {
  width: min(96vw, 1200px);
  max-width: 96vw;
  max-height: 92vh;
}

.dlv-multi-warn {
  flex: 1;
  font-size: 12px;
  color: #a02020;
}

.proc-status--required   { background: #fff4e6; color: #b04a00; }
.proc-status--ordered    { background: #e6f0ff; color: #0a5cb0; }
.proc-status--partial    { background: #fff9c2; color: #7a6000; }
.proc-status--complete   { background: #e3f4dd; color: #2a6e1a; }
.proc-status--issue      { background: #ffe0e0; color: #a02020; }
.proc-status--disabled   { background: #ececec; color: #777; }
.proc-status--active     { background: #e3f4dd; color: #2a6e1a; }
.proc-status--superseded { background: #ececec; color: #888; }

.proc-sheet-row {
  cursor: pointer;
}

.proc-sheet-row:hover {
  background: rgba(0, 102, 204, 0.06);
}

.proc-row--lazer {
  background: rgba(150, 100, 200, 0.07);
}

/* v0.36.1: bulk-выделение позиций комплектации. */
.proc-items th.proc-cb,
.proc-items td.proc-cb {
  width: 36px;
  text-align: center;
  padding-left: 4px;
  padding-right: 4px;
}

.proc-items .proc-row--selected {
  background: rgba(0, 102, 204, 0.10);
}

.proc-items .proc-row--lazer.proc-row--selected {
  background: rgba(80, 60, 200, 0.14);
}

.proc-bulk-bar {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: 8px 12px;
  margin-bottom: 8px;
  background: #eef4ff;
  border: 1px solid #c9d8f5;
  border-radius: 6px;
  font-size: 13px;
}

.proc-bulk-list {
  max-height: 200px;
  overflow-y: auto;
  margin: 8px 0 0;
  padding-left: 20px;
  font-size: 13px;
}

.proc-row--lazer .proc-cell-cat::after {
  content: " 🏭";
  font-size: 11px;
  opacity: 0.6;
}

.proc-row--dimmed {
  color: #888;
}

.proc-row--dimmed .proc-cell-cat {
  text-decoration: line-through;
  text-decoration-color: rgba(0, 0, 0, 0.3);
}

.pup-preview {
  margin-top: var(--space-2);
  border-top: 1px solid var(--color-border);
  padding-top: var(--space-2);
  font-size: 14px;
}

.pup-preview__meta {
  background: #f6f8fa;
  padding: 8px 12px;
  border-radius: 6px;
  margin-bottom: 8px;
  line-height: 1.5;
}

.pup-preview__stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 6px 12px;
  margin: 8px 0;
}

.pup-preview__cats ul {
  margin: 4px 0 0;
  padding-left: 22px;
  columns: 2;
  -webkit-columns: 2;
  font-size: 13px;
}

/* ===== Закуп (orders tab) ===== */

.proc-orders-section {
  margin-top: var(--space-3);
}

.proc-orders-section__head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--space-2);
  flex-wrap: wrap;
  gap: var(--space-2);
}

.proc-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

/* Базовая колонка формы: label + поле с предсказуемым отступом.
   До v0.9.1 в коде использовалось 10+ модалок с .form-row, но базы не было —
   label и input «слипались». */
.form-row {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin-bottom: var(--space-3);
}
.form-row > label {
  font-size: 13px;
  color: var(--color-fg-muted, #666);
  font-weight: 500;
}
.form-row > .input,
.form-row > .select,
.form-row > textarea {
  width: 100%;
}

.form-row__check {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.form-row__check label {
  display: flex;
  align-items: center;
  gap: 6px;
  cursor: pointer;
}

.form-row__hint {
  font-size: 12px;
  color: #777;
  margin-top: 2px;
}

/* Узкое поле для таблиц (вместо inline-style="width:100px") */
.input--sm {
  width: 90px;
  height: 32px;
  padding: 0 8px;
  font-size: 13px;
}

/* File-input: единый стиль кнопки выбора файла (без него — браузерный default) */
.input[type="file"] {
  padding: 6px 10px;
  height: auto;
  line-height: 1.4;
  cursor: pointer;
}
.input[type="file"]::file-selector-button {
  margin-right: 10px;
  padding: 4px 12px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-card, #fff);
  color: var(--color-fg, #333);
  font-size: 13px;
  cursor: pointer;
  transition: background 0.15s, border-color 0.15s;
}
.input[type="file"]::file-selector-button:hover {
  background: #f1f3f7;
  border-color: var(--color-primary);
}

.proc-orders-section h3 {
  font-size: 16px;
  margin: 0;
}

.proc-status--pending_payment { background: #fff4e6; color: #b04a00; }
.proc-status--paid             { background: #e3f4dd; color: #2a6e1a; }
.proc-status--cancelled        { background: #ececec; color: #888; text-decoration: line-through; }

.proc-order {
  border: 1px solid var(--color-border);
  border-radius: 6px;
  padding: 10px 14px;
  margin-bottom: 8px;
  background: #fafbfc;
}

.proc-order--cancelled {
  opacity: 0.6;
}

.proc-order__head {
  display: flex;
  justify-content: space-between;
  gap: var(--space-2);
  align-items: center;
  flex-wrap: wrap;
}

.proc-order__actions {
  display: flex;
  gap: 6px;
}

.proc-order__meta {
  font-size: 13px;
  color: #666;
  margin-top: 4px;
}

.proc-order__items {
  margin: 6px 0 0;
  padding-left: 22px;
  font-size: 14px;
}

.proc-order__notes {
  margin-top: 6px;
  font-size: 13px;
  font-style: italic;
  color: #555;
}

.proc-draft-items {
  max-height: 180px;
  overflow-y: auto;
  margin: 4px 0 0;
  padding-left: 22px;
  font-size: 14px;
}

.form-row--two {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-2);
}

/* ===== 🏭 Лазер в ТМК ===== */

.laser-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  padding: var(--space-2);
  background: rgba(150, 100, 200, 0.08);
  border-radius: 6px;
  margin-bottom: var(--space-2);
}

.laser-bar__hint {
  font-size: 14px;
  color: #555;
}

/* ── Партии приёмки и входной контроль (v0.8.8) ─────────────────────── */

.proc-status--arrived               { background: #e6f0ff; color: #0a5cb0; }
.proc-status--accepted              { background: #fff4e6; color: #b04a00; }
.proc-status--completed             { background: #e3f4dd; color: #2a6e1a; }
.proc-status--rejected_at_acceptance{ background: #ffe0e0; color: #a02020; text-decoration: line-through; }

.dlv-qc-chip {
  display: inline-block;
  padding: 1px 6px;
  border-radius: 8px;
  font-size: 12px;
  margin-left: 4px;
}
.dlv-qc-chip--pending { background: #fff4e6; color: #b04a00; }
.dlv-qc-chip--passed  { background: #e3f4dd; color: #2a6e1a; }
.dlv-qc-chip--failed  { background: #ffe0e0; color: #a02020; }

.dlv-qc-notes {
  color: #555;
  font-style: italic;
  margin-left: 4px;
}

.dlv-qc-actions {
  display: inline-flex;
  gap: 6px;
  margin-left: 8px;
}

/* ── Модалка приёмки партии (full-screen) ───────────────────────────── */

.modal.modal--xl {
  width: 95vw;
  max-width: 1400px;
  max-height: 90vh;
  display: flex;
  flex-direction: column;
}

.modal__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-bottom: var(--space-2);
  border-bottom: 1px solid var(--c-border);
  margin-bottom: var(--space-2);
}

.modal__close {
  background: transparent;
  border: 0;
  font-size: 18px;
  cursor: pointer;
  color: #888;
  padding: 4px 8px;
}
.modal__close:hover { color: #333; }

.dlv-meta {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;
  gap: var(--space-3);
  margin-bottom: var(--space-3);
  align-items: end;
}
.dlv-meta > div {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}
.dlv-meta__notes { grid-column: 1 / -1; }
.dlv-meta label {
  font-size: 12px;
  color: #666;
}

.dlv-toolbar {
  display: flex;
  gap: var(--space-2);
  align-items: center;
  flex-wrap: wrap;
  padding: var(--space-2) 0;
  border-top: 1px solid var(--c-border);
  border-bottom: 1px solid var(--c-border);
}
.dlv-toolbar .input,
.dlv-toolbar .select { flex: 0 1 auto; }
.dlv-toolbar .input[type="search"] { flex: 1 1 200px; min-width: 180px; }
.dlv-toolbar__count {
  margin-left: auto;
  color: #666;
  font-size: 13px;
}

.dlv-table-wrap {
  overflow: auto;
  flex: 1 1 auto;
  margin: var(--space-2) 0;
}

.dlv-table { width: 100%; }
.dlv-order-line {
  font-size: 12px;
  color: #666;
  margin-top: 2px;
}

/* Подстрочная подпись в ячейке таблицы (например, клиент под номером
   проекта в таблице «Позиции» комплектации). */
.proc-cell-sub {
  font-size: 12px;
  color: #666;
  margin-top: 2px;
}

/* Блок выбора режима в модалке загрузки ведомости (v0.8.11) */
.pup-actives {
  margin: 6px 0 8px 18px;
  font-size: 13px;
  color: #555;
}
.pup-mode-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 6px;
  cursor: pointer;
}
.pup-mode-row .select { margin-left: 6px; }
.pup-mode-hint {
  font-size: 12px;
  color: #777;
  margin-top: 6px;
  padding-left: 24px;
  font-style: italic;
}

/* Список impact'ов в модалке удаления ведомости (v0.8.11) */
.proc-impact-list {
  margin: 6px 0 0 18px;
  font-size: 13px;
  line-height: 1.5;
}
.proc-impact-list li { margin-bottom: 6px; }

.btn--danger {
  background: #c0392b;
  color: #fff;
  border-color: #a32d22;
}
.btn--danger:hover { background: #a32d22; }


/* ── Виджет комплектации на мнемосхеме проекта (v0.8.9 → v0.8.11+) ─── */

.proc-widget {
  background: #f6f8fb;
  border: 1px solid var(--c-border);
  border-radius: 6px;
  padding: var(--space-2) var(--space-3);
  margin: var(--space-2) 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.proc-widget__head {
  display: flex;
  align-items: center;
  gap: var(--space-3);
}

/* Двухколоночная сетка карточек ведомостей */
.proc-widget__sheets {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-2);
}
@media (max-width: 700px) {
  .proc-widget__sheets { grid-template-columns: 1fr; }
}

.proc-widget__sheet {
  background: #fff;
  border: 1px solid var(--c-border);
  border-radius: 4px;
  padding: 8px 10px;
  display: flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
  transition: border-color 0.15s;
}
.proc-widget__sheet:hover { border-color: #6ec06b; }

.proc-widget__sheet-info {
  flex: 1 1 auto;
  min-width: 0;
}
.proc-widget__sheet-name {
  font-size: 13px;
  font-weight: 500;
  margin-bottom: 4px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.proc-widget__sheet-bar-wrap {
  position: relative;
  height: 20px;
  background: #e6eaef;
  border-radius: 4px;
  overflow: hidden;
}

.proc-widget__bar {
  position: absolute;
  inset: 0 auto 0 0;
  background: #6ec06b;
  transition: width 0.3s ease;
}

.proc-widget__bar-label-left,
.proc-widget__bar-label-right {
  position: absolute;
  top: 0;
  height: 100%;
  display: flex;
  align-items: center;
  font-size: 12px;
  font-weight: 500;
  color: #1f3a1c;
  padding: 0 6px;
  text-shadow: 0 0 2px rgba(255, 255, 255, 0.8);
}
.proc-widget__bar-label-left { left: 0; }
.proc-widget__bar-label-right { right: 0; }

/* Полоска issue: длиной 1/3 от ширины основного бара, под ним */
.proc-widget__issue-wrap {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 4px;
}
.proc-widget__issue-bar {
  display: inline-block;
  width: 33%;
  height: 4px;
  background: #c0392b;
  border-radius: 2px;
}
.proc-widget__issue-label {
  font-size: 11px;
  color: #c0392b;
  white-space: nowrap;
}

/* Кнопки в столбик справа от бара */
.proc-widget__sheet-actions {
  display: flex;
  flex-direction: column;
  gap: 4px;
  flex: 0 0 auto;
}
.proc-widget__sheet-actions .btn { white-space: nowrap; }

.proc-widget__chips {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  align-items: center;
}
.proc-widget__chips-label {
  font-size: 12px;
  color: #666;
  margin-right: 4px;
}
.proc-widget__qc-chip {
  cursor: pointer;
  border: 1px solid transparent;
  font-family: inherit;
  font-size: 13px;
  padding: 2px 8px;
  margin-left: auto;
}
.proc-widget__qc-chip:hover {
  border-color: #c0392b;
}

/* Форма проекта: общий fieldset для группировки полей (v0.9.2) */
.form-fieldset {
  border: 1px solid var(--color-border, #e1e1e1);
  border-radius: var(--radius, 4px);
  padding: var(--space-3) var(--space-4);
  margin: var(--space-4) 0;
}
.form-fieldset > legend {
  padding: 0 var(--space-2);
  font-size: 13px;
  font-weight: 600;
  color: var(--color-fg-muted, #666);
}
.form-hint {
  margin: var(--space-2) 0 0;
  font-size: 12px;
  color: var(--color-fg-muted, #666);
  line-height: 1.5;
}

/* Документы проекта (v0.9.2 + v0.9.3 — мета-шапка и 2 колонки) */
.pdocs-meta {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-3);
  margin-bottom: var(--space-4);
  background: var(--color-bg-soft, #f9fafb);
  border: 1px solid var(--color-border-soft, #eee);
  border-radius: var(--radius, 4px);
}
.pdocs-meta__cell {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.pdocs-meta__label {
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--color-fg-muted, #888);
  font-weight: 600;
}
.pdocs-meta__value {
  font-size: 14px;
  color: var(--color-fg, #222);
}
.pdocs-meta__empty {
  color: var(--color-fg-muted, #999);
  font-style: italic;
}

/* Двухколоночная сетка для строк-видов */
.pdocs-grid {
  display: block;
}
.pdocs-grid--two-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-2) var(--space-4);
}
.pdocs-grid--two-cols .pdocs-row {
  grid-template-columns: 1fr;
  border-top: 0;
  padding: var(--space-2);
  background: var(--color-card, #fff);
  border: 1px solid var(--color-border-soft, #eee);
  border-radius: var(--radius, 4px);
}
.pdocs-grid--two-cols .pdocs-row__label {
  padding-top: 0;
  font-weight: 600;
  margin-bottom: var(--space-1);
}

.pdocs-section {
  margin-bottom: var(--space-5);
}
.pdocs-section__title {
  font-size: 15px;
  margin: 0 0 var(--space-3);
  padding-bottom: var(--space-2);
  border-bottom: 1px solid var(--color-border, #e1e1e1);
}
.pdocs-block {
  margin-bottom: var(--space-4);
  padding: var(--space-2) var(--space-3);
  background: var(--color-bg-soft, #f9fafb);
  border-radius: var(--radius, 4px);
}
.pdocs-block__title {
  font-size: 14px;
  margin: 0 0 var(--space-2);
  color: var(--color-fg, #222);
}
.pdocs-row {
  display: grid;
  grid-template-columns: 200px 1fr;
  gap: var(--space-3);
  align-items: start;
  padding: var(--space-2) 0;
  border-top: 1px dashed var(--color-border-soft, #eee);
}
.pdocs-row:first-child {
  border-top: 0;
}
.pdocs-row__label {
  font-size: 13px;
  font-weight: 500;
  color: var(--color-fg-muted, #555);
  padding-top: 4px;
}
.pdocs-row__body {
  min-width: 0;
}
.pdocs-file {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  flex-wrap: wrap;
}
.pdocs-file__name {
  font-weight: 500;
  text-decoration: none;
  color: var(--color-primary, #0066cc);
  max-width: 360px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pdocs-file__name:hover {
  text-decoration: underline;
}
.pdocs-file__meta {
  font-size: 12px;
  color: var(--color-fg-muted, #888);
}
.pdocs-file__actions {
  display: flex;
  gap: var(--space-2);
  margin-left: auto;
}
.pdocs-empty {
  display: flex;
  align-items: center;
  gap: var(--space-3);
}
.pdocs-empty__hint {
  font-size: 13px;
  color: var(--color-fg-muted, #999);
  font-style: italic;
}
.pdocs-history {
  margin-top: var(--space-2);
  font-size: 13px;
}
.pdocs-history > summary {
  cursor: pointer;
  color: var(--color-fg-muted, #666);
  user-select: none;
}
.pdocs-history ul {
  list-style: none;
  margin: var(--space-2) 0 0;
  padding: 0 0 0 var(--space-3);
}
.pdocs-history li {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: 2px 0;
}
.pdocs-procurement-info {
  background: #fffbeb;
  border: 1px solid #fde68a;
  border-radius: var(--radius, 4px);
  padding: var(--space-2) var(--space-3);
}
.pdocs-procurement-info p {
  margin: 0;
  font-size: 13px;
  color: #78350f;
}

/* v0.32.4: «🧪 Прохождение ОТК» — список попыток на проект. */
.pdocs-qc-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.pdocs-qc-table thead th {
  text-align: left;
  font-weight: 500;
  color: var(--color-fg-muted, #555);
  padding: 4px 8px;
  border-bottom: 1px solid var(--color-border-soft, #e5e7eb);
}
.pdocs-qc-table tbody td {
  padding: 6px 8px;
  border-bottom: 1px dashed var(--color-border-soft, #eee);
  vertical-align: top;
}
.pdocs-qc-table tbody tr:last-child td {
  border-bottom: 0;
}
.pdocs-qc__result--pass {
  color: #166534;
  font-weight: 500;
}
.pdocs-qc__result--fail {
  color: #b91c1c;
  font-weight: 500;
}
.pdocs-qc__simple {
  color: var(--color-fg-muted, #6b7280);
  font-style: italic;
}
.pdocs-qc__inspector {
  color: var(--color-fg-muted, #6b7280);
  font-size: 12px;
}
.pdocs-qc__no-pdf {
  color: var(--color-fg-muted, #9ca3af);
  font-style: italic;
}

@media (max-width: 760px) {
  .pdocs-grid--two-cols {
    grid-template-columns: 1fr;
  }
  .pdocs-meta {
    grid-template-columns: 1fr;
  }
}

/* Справочники мнемосхемы (v0.10.0) */
.ref-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
}
.ref-table th,
.ref-table td {
  padding: var(--space-2) var(--space-3);
  border-bottom: 1px solid var(--color-border-soft, #eee);
  text-align: left;
  vertical-align: top;
}
.ref-table th {
  background: var(--color-bg-soft, #f9fafb);
  font-weight: 600;
  font-size: 13px;
  color: var(--color-fg-muted, #555);
}
.ref-table tbody tr:hover {
  background: var(--color-bg-soft, #f9fafb);
}
.ref-table__row--inactive {
  opacity: 0.55;
}
.ref-table__actions {
  display: flex;
  gap: var(--space-2);
  white-space: nowrap;
}
.ref-table code {
  background: #f3f4f6;
  padding: 1px 5px;
  border-radius: 3px;
  font-size: 12px;
}

/* Цепочка операций в редакторе узла */
.nt-chain__row {
  display: grid;
  grid-template-columns: 32px 1fr auto;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-3);
  border: 1px solid var(--color-border-soft, #eee);
  border-radius: var(--radius, 4px);
  margin-bottom: var(--space-2);
  background: var(--color-card, #fff);
}
.nt-chain__order {
  font-size: 16px;
  font-weight: 600;
  color: var(--color-fg-muted, #888);
  padding-top: 4px;
}
.nt-chain__main {
  min-width: 0;
}
.nt-chain__title {
  font-weight: 600;
  margin-bottom: 2px;
}
.nt-chain__meta {
  font-size: 12px;
  color: var(--color-fg-muted, #888);
  margin-bottom: var(--space-1);
}
.nt-chain__roles {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  color: var(--color-fg-muted, #888);
  margin-bottom: var(--space-2);
  line-height: 1.6;
}

/* Раскрывающаяся подсказка про чекбоксы цепочки. */
.nt-chain__help {
  background: #f9fafb;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: 8px 12px;
  margin-bottom: var(--space-3);
  font-size: 13px;
}
.nt-chain__help summary {
  cursor: pointer;
  color: var(--color-primary);
  font-weight: 500;
  list-style: none;
  user-select: none;
}
.nt-chain__help summary::-webkit-details-marker { display: none; }
.nt-chain__help summary:hover { text-decoration: underline; }
.nt-chain__help[open] summary { margin-bottom: 8px; }
.nt-chain__help-body p {
  margin: 0 0 8px 0;
  line-height: 1.5;
  color: var(--color-fg, #1f2937);
}
.nt-chain__help-body p:last-child { margin-bottom: 0; }
.nt-chain__help-body em { color: var(--color-fg-muted, #6b7280); }
.nt-chain__actions {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

/* Чекбокс-список ролей в редакторе операции */
.st-roles {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--space-1) var(--space-3);
}

/* Предложение системы в «К распределению» (v0.12.0) */
.dispatch-suggestion {
  display: inline-block;
  padding: 2px 8px;
  background: #fef3c7;
  color: #92400e;
  border-radius: var(--radius, 4px);
  font-size: 13px;
  font-weight: 500;
}

/* Матрица прав (v0.11.0) */
.perm-matrix {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  /* Сбрасываем глобальное `table { overflow: hidden }` (см. строку 326) —
     иначе оно создаёт scroll-context на самой <table>, и sticky thead
     прилипает к нескроллящемуся table вместо окна. */
  overflow: visible;
  border-radius: 0;
}
.perm-matrix th,
.perm-matrix td {
  padding: var(--space-2);
  border: 1px solid var(--color-border-soft, #eee);
  vertical-align: top;
}
.perm-matrix thead th {
  background: var(--color-bg-soft, #f9fafb);
  font-size: 12px;
  font-weight: 600;
  text-align: center;
  white-space: normal;
  min-width: 90px;
  /* Закрепляем строку с ролями при вертикальной прокрутке. Скролл-
     контейнер один (<html>), глобальный .header — sticky на top:0
     с z-index:100. Поэтому пинимся ПОД хедер: top = высота хедера.
     С border-collapse: collapse рамка sticky-ячеек теряется,
     поэтому рисуем её через box-shadow. */
  position: sticky;
  top: var(--header-height);
  z-index: 2;
  box-shadow:
    inset 0 -1px 0 var(--color-border-soft, #eee),
    inset 0 1px 0 var(--color-border-soft, #eee);
}
.perm-matrix__name-col {
  text-align: left;
  min-width: 280px;
  max-width: 360px;
}
.perm-matrix__group td {
  background: #f3f4f6;
  font-weight: 600;
  font-size: 14px;
  padding: var(--space-2) var(--space-3);
}
.perm-matrix__cell {
  text-align: center;
}
.perm-cb {
  cursor: pointer;
  width: 18px;
  height: 18px;
}

/* Иконка узла: поле + clear-кнопка + палитра предложений */
.nt-icon-row {
  display: flex;
  gap: var(--space-2);
  align-items: stretch;
}
.nt-icon-row > input {
  flex: 1;
  font-size: 18px;
  text-align: center;
}
.nt-icon-palette {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(36px, 1fr));
  gap: var(--space-1);
  margin-top: var(--space-2);
}
.nt-icon-palette__btn {
  padding: 4px 0;
  font-size: 18px;
  background: var(--color-card, #fff);
  border: 1px solid var(--color-border, #e1e1e1);
  border-radius: var(--radius, 4px);
  cursor: pointer;
  font-family: inherit;
  line-height: 1;
}
.nt-icon-palette__btn:hover {
  background: var(--color-bg-soft, #f3f4f6);
  border-color: var(--color-primary, #0066cc);
}
@media (max-width: 640px) {
  .pdocs-row {
    grid-template-columns: 1fr;
    gap: var(--space-1);
  }
  .pdocs-row__label {
    padding-top: 0;
    font-weight: 600;
  }
  .pdocs-file__name {
    max-width: 100%;
  }
  .pdocs-file__actions {
    margin-left: 0;
  }
}

/* Карточки блоков в редакторе шаблона */
.tpl-block-card {
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: var(--space-2);
  margin-bottom: var(--space-2);
  background: var(--color-bg-elevated, var(--color-bg, #fff));
}
.tpl-block-card__row {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}
.tpl-block-card__title { flex: 1; }
.tpl-block-card__handle { cursor: grab; opacity: 0.6; user-select: none; }
.tpl-block-card--dragging { opacity: 0.4; }

/* Вложенный overlay для picker'а поверх редактора шаблона */
.modal-overlay--nested { z-index: 1100; }

/* ===== 🔔 Шаблоны уведомлений (notification_admin.js, v0.18.0 Phase 12) ===== */
.notif-group { margin-bottom: var(--space-5, 24px); }
.notif-group__title {
  margin: 0 0 var(--space-2, 8px);
  font-size: 15px;
  font-weight: 600;
}
.notif-templates-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.notif-templates-table th,
.notif-templates-table td {
  border: 1px solid var(--border, #ddd);
  padding: 8px;
  vertical-align: top;
  text-align: left;
}
.notif-templates-table th {
  background: var(--surface-2, #f5f5f5);
  font-weight: 600;
}
.notif-template-text {
  width: 100%;
  min-height: 80px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 12px;
  padding: 6px 8px;
  border: 1px solid var(--border, #ccc);
  border-radius: 4px;
  resize: vertical;
  box-sizing: border-box;
}
.notif-vars {
  color: var(--muted, #888);
  font-size: 11px;
  margin-top: 4px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.notif-vars code { font-size: 11px; }
.notif-hint {
  color: var(--muted-2, #666);
  font-size: 11px;
  margin-top: 2px;
}
.notif-row__meta { margin-top: 4px; }
.notif-row__actions {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 130px;
}
.notif-default-badge {
  display: inline-block;
  color: var(--muted, #888);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.notif-override-badge {
  display: inline-block;
  color: #d97706;
  background: #fef3c7;
  padding: 1px 6px;
  border-radius: 3px;
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}
.notif-preview__text {
  background: var(--surface-2, #f5f5f5);
  border: 1px solid var(--border, #ddd);
  border-radius: 4px;
  padding: 12px;
  margin: 12px 0;
  white-space: pre-wrap;
  word-break: break-word;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 12px;
  max-height: 60vh;
  overflow: auto;
}

/* Toolbar, var-chips, inline preview pane (Task 6, rich-formatting Track 1) */
.notif-fmt-toolbar { display: flex; gap: 4px; margin-bottom: 4px; }
.notif-var-chip { background: none; border: 1px solid var(--color-border, #d0d7de);
  border-radius: 4px; padding: 0 4px; cursor: pointer; }
.notif-var-chip:hover { background: var(--color-bg-subtle, #f6f8fa); }
.notif-preview-pane { white-space: pre-wrap; background: var(--color-bg-subtle, #f6f8fa);
  border-radius: 6px; padding: 8px 12px; margin-top: 6px; font-size: 14px; line-height: 1.4; }
.notif-preview-pane blockquote { border-left: 3px solid var(--color-border, #ccc);
  margin: 4px 0; padding: 2px 0 2px 10px; color: var(--color-fg-muted, #6b7280); }

/* Профиль пользователя (v0.18.1) */
.profile-section {
  margin-bottom: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid #e5e7eb;
}
.profile-section:last-child {
  border-bottom: none;
}
.profile-section__title {
  margin: 0 0 8px;
  font-size: 13px;
  color: #374151;
}
.profile-row {
  padding: 4px 0;
  font-size: 13px;
}
.profile-row__label {
  display: inline-block;
  min-width: 80px;
  color: #6b7280;
}
.profile-tg-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
#prof-tg-code-block,
.notif-tg-code-block {
  margin-top: 12px;
  padding: 16px;
  background: #f5f5f5;
  border-radius: 8px;
  text-align: center;
}
.profile-tg-code-label {
  font-size: 11px;
  color: #6b7280;
  margin-bottom: 6px;
}
.profile-tg-code {
  font-size: 2rem;
  font-weight: 700;
  letter-spacing: 0.15em;
  user-select: all;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.profile-tg-cmd-row {
  margin-top: 12px;
  font-size: 13px;
  color: #374151;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
}
.profile-tg-cmd {
  background: #e8e8e8;
  padding: 4px 8px;
  border-radius: 4px;
  user-select: all;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.profile-tg-expires {
  font-size: 11px;
  margin-top: 6px;
  color: #6b7280;
}

/* v0.37.0: модалка «📜 История актов ОТК» (drill-down таймлайна задачи). */
.btn-link {
  background: none;
  border: none;
  color: #2563eb;
  cursor: pointer;
  padding: 0;
  font: inherit;
  text-decoration: underline;
}
.btn-link:hover {
  color: #1d4ed8;
}
.qc-history {
  list-style: none;
  padding: 0;
  margin: 12px 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.qc-history__row {
  border: 1px solid #e5e7eb;
  border-radius: 6px;
  padding: 10px 12px;
  background: #fafafa;
}
.qc-history__head {
  font-size: 13px;
  color: #374151;
}
.qc-history__verdict--pass {
  color: #166534;
  font-weight: 600;
}
.qc-history__verdict--fail {
  color: #b22222;
  font-weight: 600;
}
.qc-history__when,
.qc-history__inspector {
  color: #6b7280;
  font-size: 12px;
}
.qc-history__reason {
  margin-top: 6px;
  font-size: 12px;
  color: #4b5563;
}
.qc-history__actions {
  margin-top: 8px;
}
.qc-history__no-pdf {
  font-size: 12px;
  color: #9ca3af;
  font-style: italic;
}
.qc-history__empty {
  text-align: center;
  color: #6b7280;
  padding: 20px;
  font-style: italic;
}

.notif-cols { margin-top: 6px; }
.notif-col-list { display: flex; flex-wrap: wrap; gap: 8px; margin: 4px 0; }
.notif-col-box { font-size: 13px; white-space: nowrap; }

/* Трек 2: панель выбора формата rich-сводок на «Шаблоны уведомлений» */
.notif-summary-formats {
  margin-bottom: var(--space-4);
  padding: var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
}
.notif-fmt-row {
  display: block;
  margin-top: var(--space-2);
}
.notif-fmt-row select {
  margin-left: var(--space-2);
}
