/* ══════════════════════════════════════════════════════════════
   СГЭМ — Расчёт БС v2
   ══════════════════════════════════════════════════════════════ */

:root {
  /* «Чертёжная сталь» — палитра от логотипа СГЭМ (красный/синий) */
  --bg: #eef1f5;
  --paper: #ffffff;
  --paper-soft: #f6f8fa;
  --ink: #161a21;
  --ink-soft: #454c59;
  --ink-mute: #7c8492;
  --rule: #d7dce3;
  --rule-soft: #e8ecf1;
  --accent: #c02a2b;
  --accent-soft: #fceeed;
  --accent-dark: #96201f;
  --blue: #2a529a;
  --blue-soft: #e8eef8;
  --green: #1f7a43;
  --yellow: #b48845;
  --orange: #d27a2c;
  --sidebar-bg: #14181f;
  --sidebar-text: #c6cfdc;
  --sidebar-mute: #66788f;
  --sidebar-line: #273140;
  /* Семантические алиасы новых модулей. Значения совпадают с прежними
     светлыми fallback-цветами, поэтому light theme визуально не меняется. */
  --surface: #ffffff;
  --surface-2: #f7f8fa;
  --surface-soft: #f4f7fb;
  --border: #dfe4eb;
  --line: #cfd7e0;
  --text: #161a21;
  --muted: #687386;
  --primary: #255ca8;
  --bg-soft: #f5f7fa;
  /* Токены редизайна v3.99 */
  --graphite: #14181f;
  --steel: #1c222c;
  /* v4.26.002 — только локальные системные шрифты: интерфейс не зависит от
     доступа к Google Fonts и не отправляет наружу сетевые запросы. */
  --font: 'Segoe UI', 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
  --mono: 'Cascadia Mono', 'SF Mono', Consolas, monospace;
  --r-sm: 6px;
  --r-md: 10px;
  --r-lg: 14px;
  --shadow-sm: 0 1px 2px rgba(16,20,27,.05), 0 1px 3px rgba(16,20,27,.06);
  --shadow-md: 0 4px 14px rgba(16,20,27,.08), 0 1px 3px rgba(16,20,27,.06);
  --shadow-lg: 0 18px 48px rgba(16,20,27,.18), 0 4px 12px rgba(16,20,27,.10);
  --ring: 0 0 0 3px rgba(42,82,154,.18);
  --ring-accent: 0 0 0 3px rgba(192,42,43,.16);
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { font-size: 14px; }

.status-pill.status-error {
  color: #fff;
  background: #a61f24;
  border-color: #a61f24;
}
body {
  background: var(--bg);
  font-family: var(--font);
  color: var(--ink);
  font-size: 13px;
  line-height: 1.45;
  -webkit-font-smoothing: antialiased;
  min-height: 100vh;
}

/* ── ТОПБАР ───────────────────────────────────────────────── */
.topbar {
  position: sticky; top: 0; z-index: 100;
  background: var(--paper);
  border-bottom: 1px solid var(--rule);
  display: flex; align-items: center; gap: 16px;
  padding: 0 24px; height: 56px;
}
.topbar-left { display: flex; align-items: center; gap: 12px; flex: 1; }
.brand-logo { height: 32px; }
.brand-text { font-weight: 600; font-size: 14px; color: var(--ink); }
.brand-text .version { color: var(--ink-mute); font-weight: 400; margin-left: 4px; font-size: 12px; }
.status-pill {
  font-size: 11px; color: var(--green);
  padding: 4px 10px; background: #e8f0e9;
  border-radius: 12px; letter-spacing: .3px;
}

/* ── ВИДЫ ─────────────────────────────────────────────────── */
.view { display: none; }
.view.active { display: block; }

/* ── СПИСОК БС ────────────────────────────────────────────── */
/* v3.104 (П.1): оптимизация под 1920×1080 — используем больше ширины экрана
   (раньше контент упирался в 1400px, оставляя ~500px пустыми по краям). */
.page-pad { padding: 28px 40px; max-width: 1800px; margin: 0 auto; }
.page-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 24px;
}
.page-head h1 {
  font-size: 22px; font-weight: 600; letter-spacing: -.3px;
}
.page-actions { display: flex; gap: 12px; align-items: center; }
.search-input {
  padding: 8px 12px; min-width: 280px;
  border: 1px solid var(--rule); border-radius: 4px;
  font-family: inherit; font-size: 13px; background: var(--paper);
}
.search-input:focus { outline: none; border-color: var(--accent); }
.loading { color: var(--ink-mute); padding: 20px; text-align: center; }

.bs-list-table {
  width: 100%; border-collapse: collapse;
  background: var(--paper); border: 1px solid var(--rule);
  font-size: 12px;
}
.bs-list-table th, .bs-list-table td {
  padding: 10px 12px; text-align: left;
  border-bottom: 1px solid var(--rule-soft);
}
.bs-list-table th {
  background: var(--paper-soft); font-size: 10px;
  text-transform: uppercase; letter-spacing: 1px;
  color: var(--ink-mute); font-weight: 600;
}
.bs-list-table tr:hover { background: var(--paper-soft); cursor: pointer; }
.bs-list-table td.mono { font-family: 'JetBrains Mono', monospace; }
.bs-list-table td.right { text-align: right; font-family: 'JetBrains Mono', monospace; }

.status-tag {
  display: inline-block; padding: 2px 8px;
  border-radius: 2px; font-size: 10px;
  font-weight: 600; text-transform: uppercase; letter-spacing: .5px;
}
.status-tag.draft    { background: #f4f1ec; color: var(--ink-mute); }
.status-tag.in_progress { background: #fff4df; color: #8a5a13; }
.status-tag.approved { background: var(--blue-soft); color: var(--blue); }
.status-tag.won      { background: #e8f0e9; color: var(--green); }
.status-tag.lost     { background: var(--accent-soft); color: var(--accent); }

.summary-position-table { min-width: 1220px; }
.status-tag.archived { background: #f4f1ec; color: var(--ink-mute); }

/* ── ШАПКА БС / ПОЗИЦИИ ──────────────────────────────────── */
.bs-header {
  background: var(--paper);
  border-bottom: 1px solid var(--rule);
  padding: 12px 24px;
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 16px;
}
.btn-back {
  background: none; border: 1px solid var(--rule);
  padding: 6px 12px; font-family: inherit;
  font-size: 13px; color: var(--ink-soft);
  border-radius: 3px; cursor: pointer;
}
.btn-back:hover { background: var(--paper-soft); }
.bs-title { line-height: 1.2; }
.bs-title .bs-num {
  font-family: 'JetBrains Mono', monospace;
  font-size: 16px; font-weight: 600; color: var(--accent);
}
.bs-title .bs-name {
  font-size: 13px; color: var(--ink-soft); margin-top: 2px;
}
.bs-actions { display: flex; gap: 8px; align-items: center; }

/* ── ЛЭЙАУТ БС: левая навигация + основная область ──────── */
.bs-layout {
  display: grid;
  grid-template-columns: 220px 1fr;
  min-height: calc(100vh - 56px - 65px);
}
.bs-nav {
  background: var(--sidebar-bg);
  padding: 16px 0;
  position: sticky;
  top: calc(56px + 65px);
  height: calc(100vh - 56px - 65px);
  overflow-y: auto;
}
.nav-btn {
  display: block;
  width: 100%;
  background: none;
  border: none;
  border-left: 3px solid transparent;
  padding: 10px 18px;
  font-family: inherit;
  font-size: 13px;
  color: var(--sidebar-text);
  text-align: left;
  cursor: pointer;
  transition: all .15s;
}
.nav-btn:hover { background: rgba(255,255,255,.05); }
.nav-btn.active {
  background: rgba(184,38,42,.15);
  color: #fff;
  border-left-color: var(--accent);
  font-weight: 500;
}
.nav-btn.disabled { color: var(--sidebar-mute); cursor: not-allowed; opacity: .5; }
.nav-btn .badge {
  display: inline-block;
  background: var(--accent);
  color: #fff;
  font-size: 10px;
  padding: 1px 6px;
  border-radius: 8px;
  margin-left: 6px;
  font-family: 'JetBrains Mono', monospace;
}

.bs-main {
  padding: 24px 32px;
  overflow-y: auto;
  max-height: calc(100vh - 56px - 65px);
}

/* ── СЕКЦИИ ────────────────────────────────────────────── */
.bs-section { display: none; }
.bs-section.active { display: block; }
.bs-section h2 {
  font-size: 14px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 1.5px;
  color: var(--ink); margin-bottom: 12px;
  padding-bottom: 6px; border-bottom: 1px solid var(--rule);
}
.section-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 12px;
}
.section-head h2 { margin: 0; border: none; }
.section-head .muted { color: var(--ink-mute); font-weight: 400; font-size: 12px; }

/* ── ФОРМЫ ──────────────────────────────────────────────── */
.form-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px 16px;
  align-items: start;
  background: var(--paper);
  padding: 16px;
  border: 1px solid var(--rule);
  border-radius: 4px;
}
.deal-options-row {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: repeat(2, minmax(240px, 1fr));
  gap: 10px;
}
.deal-option {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  padding: 9px 11px;
  border: 1px solid var(--rule);
  border-radius: 8px;
  background: var(--paper-soft);
  cursor: pointer;
}
.deal-option input { flex: 0 0 auto; }
.deal-option span { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.deal-option b { font-size: 12px; white-space: nowrap; }
.deal-option small { color: var(--ink-mute); font-size: 11px; }
@media (max-width: 760px) {
  .deal-options-row { grid-template-columns: 1fr; }
  .deal-option span { align-items: flex-start; flex-direction: column; gap: 2px; }
}
.fl {
  display: grid;
  grid-template-rows: 2.6em auto auto; /* подпись (до 2 строк) · поле · подсказка */
  font-size: 11px;
  color: var(--ink-mute);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: .8px;
  min-height: 0;
  align-content: start;
}
.fl.wide-2 { grid-column: span 2; }
.fl.wide-4 { grid-column: span 4; }
.fl input, .fl select, .fl textarea {
  width: 100%;
  box-sizing: border-box;
  background: var(--paper);
  border: 1px solid var(--rule);
  color: var(--ink);
  padding: 7px 10px;
  font-family: inherit;
  font-size: 13px;
  border-radius: 3px;
  outline: none;
  margin-top: 0;
  text-transform: none;
  letter-spacing: 0;
}
.fl input:focus, .fl select:focus, .fl textarea:focus {
  border-color: var(--accent);
}
.fl input:disabled {
  background: var(--paper-soft);
  color: var(--ink-soft);
}
.fl .hint {
  display: block;
  margin-top: 3px;
  font-size: 10px;
  color: var(--ink-mute);
  font-style: italic;
  letter-spacing: 0;
  text-transform: none;
  line-height: 1.25;
}
/* Чекбокс-поля (строчная раскладка) — своя сетка не нужна */
.fl:has(input[type="checkbox"]) {
  display: flex;
  grid-template-rows: none;
}

/* ── КНОПКИ ─────────────────────────────────────────────── */
.btn-primary, .btn-secondary, .btn-danger {
  padding: 8px 14px;
  font-family: inherit;
  font-size: 13px;
  font-weight: 500;
  border: none;
  border-radius: 3px;
  cursor: pointer;
  transition: all .15s;
}
.btn-primary { background: var(--accent); color: #fff; }
.btn-primary:hover { background: var(--accent-dark); }
.btn-secondary {
  background: var(--paper);
  color: var(--ink);
  border: 1px solid var(--rule);
}
.btn-secondary:hover { background: var(--paper-soft); border-color: var(--ink-mute); }
.btn-danger {
  background: var(--paper);
  color: var(--accent);
  border: 1px solid var(--accent);
}
.btn-danger:hover { background: var(--accent-soft); }

/* ── ПОЗИЦИИ — карточки ─────────────────────────────────── */
.position-card {
  background: var(--paper);
  border: 1px solid var(--rule);
  border-radius: 4px;
  padding: 14px 16px;
  margin-bottom: 10px;
  display: grid;
  grid-template-columns: 40px 1fr auto auto;
  gap: 16px;
  align-items: center;
  cursor: pointer;
  transition: all .15s;
}
.position-card:hover {
  border-color: var(--accent);
  box-shadow: 0 1px 4px rgba(184,38,42,.08);
}
.position-card .pos-no {
  font-family: 'JetBrains Mono', monospace;
  font-size: 18px;
  font-weight: 600;
  color: var(--accent);
}
.position-card .pos-info .pos-name {
  font-size: 14px;
  font-weight: 500;
  color: var(--ink);
  margin-bottom: 4px;
}
.position-card .pos-info .pos-meta {
  font-size: 11px;
  color: var(--ink-mute);
  display: flex;
  gap: 12px;
}
.position-card .pos-info .pos-meta .item { display: flex; gap: 4px; }
.position-card .pos-info .pos-meta .item .lbl { color: var(--ink-mute); }
.position-card .pos-info .pos-meta .item .val { color: var(--ink); font-family: 'JetBrains Mono', monospace; }
.position-card .pos-cost {
  text-align: right;
}
.position-card .pos-cost .lbl {
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: 1px;
  color: var(--ink-mute);
}
.position-card .pos-cost .val {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink);
}

/* ── ТАБЛИЦА ОПЕРАЦИЙ ───────────────────────────────────── */
.ops-table {
  width: 100%;
  border-collapse: collapse;
  background: var(--paper);
  border: 1px solid var(--rule);
  font-size: 12px;
}
.ops-table th, .ops-table td {
  padding: 6px 8px;
  text-align: left;
  border-bottom: 1px solid var(--rule-soft);
}
.ops-table th {
  background: var(--paper-soft);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 1px;
  color: var(--ink-mute);
  font-weight: 600;
}
.ops-table th.right, .ops-table td.right {
  text-align: right;
  font-family: 'JetBrains Mono', monospace;
}
.ops-table td.center { text-align: center; }
.ops-table td.muted { color: var(--ink-mute); }
.ops-table input[type=number] {
  width: 70px;
  padding: 3px 6px;
  border: 1px solid var(--rule);
  background: var(--paper);
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  border-radius: 2px;
  text-align: right;
}
.ops-table input[type=number]:focus { outline: none; border-color: var(--accent); }
.ops-table tr.batch { background: var(--blue-soft); }
.ops-table tr.batch td { color: var(--blue); }
.ops-table tfoot tr.subtotal {
  background: var(--paper-soft);
  font-weight: 600;
}
.ops-table tfoot tr.subtotal td {
  border-top: 2px solid var(--ink);
  font-size: 13px;
}

/* ── ОБЩИЕ ЗАТРАТЫ — список ─────────────────────────────── */
.common-list {
  background: var(--paper);
  border: 1px solid var(--rule);
  border-radius: 4px;
  overflow: hidden;
}
.common-row {
  display: grid;
  grid-template-columns: 100px 1fr auto auto;
  gap: 12px;
  padding: 10px 14px;
  border-bottom: 1px solid var(--rule-soft);
  align-items: center;
}
.common-row:last-child { border-bottom: none; }
.common-row .cat {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 1px;
  color: var(--ink-mute);
  font-weight: 600;
}
.common-row .name { font-size: 13px; color: var(--ink); }
.common-row .cost {
  font-family: 'JetBrains Mono', monospace;
  font-weight: 600;
  font-size: 13px;
}
.common-row .del-btn {
  background: none;
  border: none;
  color: var(--ink-mute);
  cursor: pointer;
  padding: 2px 6px;
  font-size: 14px;
}
.common-row .del-btn:hover { color: var(--accent); }

/* ── СВОДНЫЙ РАСЧЁТ ─────────────────────────────────────── */
.summary-grid {
  display: grid;
  grid-template-columns: 1.3fr 1fr;
  gap: 16px;
  margin-top: 16px;
}
/* v4.14.002 — снимок версии БС в модалке: содержимое не должно обрезаться. */
#rev_snapshot_body { padding-right: 4px; }
#rev_snapshot_body .price-tbl { min-width: 0; }
#rev_snapshot_body table { max-width: 100%; }
@media (max-width: 1180px) {
  #rev_snapshot_body .summary-grid { grid-template-columns: 1fr; }
}
.cost-breakdown {
  background: var(--paper-soft);
  border: 1px solid var(--ink);
  padding: 14px 18px;
}
.cost-breakdown .head {
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: 2px;
  color: var(--ink-mute);
  margin-bottom: 10px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--rule);
  font-weight: 600;
}
.cost-row {
  display: grid;
  grid-template-columns: 24px 1fr auto;
  align-items: baseline;
  padding: 3px 0;
  font-size: 12px;
}
.cost-row .idx { font-family: 'JetBrains Mono', monospace; font-size: 9px; color: var(--ink-mute); }
.cost-row .nm { color: var(--ink-soft); }
.cost-row .vl { font-family: 'JetBrains Mono', monospace; font-weight: 500; }
.cost-row.subsum {
  padding: 6px 0 5px;
  margin: 4px 0;
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}
.cost-row.subsum .nm { font-weight: 600; color: var(--ink); text-transform: uppercase; font-size: 10px; letter-spacing: .5px; }
.cost-row.subsum .vl { font-weight: 600; font-size: 13px; }
.cost-row.section-head {
  padding: 8px 0 4px;
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: 1.5px;
  color: var(--accent);
  font-weight: 600;
  border-bottom: 1px dashed var(--rule);
  margin-bottom: 3px;
}
.cost-row.total {
  border-top: 2px solid var(--ink);
  border-bottom: 2px solid var(--ink);
  margin-top: 8px;
  padding: 8px 0;
}
.cost-row.total .nm { font-weight: 700; color: var(--ink); text-transform: uppercase; letter-spacing: 1px; font-size: 11px; }
.cost-row.total .vl { font-weight: 700; font-size: 15px; color: var(--accent); }

.price-section { display: flex; flex-direction: column; gap: 12px; }
.price-section .head {
  font-size: 9px; text-transform: uppercase;
  letter-spacing: 2px; color: var(--ink-mute); font-weight: 600;
}
.price-tbl { width: 100%; border-collapse: collapse; border: 1px solid var(--ink); }
.price-tbl thead th {
  background: var(--ink); color: #fff;
  font-size: 9px; text-transform: uppercase; letter-spacing: 1.5px;
  padding: 7px 8px; text-align: right; font-weight: 500;
}
.price-tbl thead th:first-child { text-align: left; padding-left: 12px; }
.price-tbl tbody td {
  padding: 8px;
  font-family: 'JetBrains Mono', monospace;
  text-align: right;
  font-size: 12px;
  font-weight: 500;
  border-bottom: 1px solid var(--rule-soft);
}
.price-tbl tbody td:first-child {
  text-align: left;
  font-family: 'Inter', sans-serif;
  font-weight: 600;
  font-size: 14px;
  color: var(--ink);
  padding-left: 14px;
}
.price-tbl tr.recommended { background: var(--accent-soft); }
.price-tbl tr.recommended td { color: var(--accent); font-weight: 600; }
.price-tbl tr.recommended td:first-child {
  color: var(--accent); position: relative; padding-left: 28px;
}
.price-tbl tr.recommended td:first-child::before {
  content: "★"; position: absolute; left: 10px; top: 50%;
  transform: translateY(-50%); font-size: 13px;
}

.formula-note {
  font-size: 10.5px;
  color: var(--ink-mute);
  padding: 8px 10px;
  background: var(--paper-soft);
  border-left: 2px solid var(--ink-mute);
  line-height: 1.5;
}
.formula-note b { color: var(--ink); }

/* ── ПОДСКАЗКА АНАЛОГА ─────────────────────────────────── */
.hint-box {
  background: #fef9ec;
  border-left: 3px solid var(--yellow);
  padding: 10px 14px;
  font-size: 12px;
  color: var(--ink-soft);
  border-radius: 0 4px 4px 0;
}
.hint-box b { color: var(--ink); }
.analog-item {
  padding: 4px 0;
  font-size: 11.5px;
}
.analog-item .bs-num { font-family: 'JetBrains Mono', monospace; color: var(--accent); font-weight: 600; }
.analog-item .meta { color: var(--ink-mute); margin-left: 8px; }

/* ── МОДАЛКИ ───────────────────────────────────────────── */
.modal {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.5);
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
}
.modal-card {
  background: var(--paper);
  padding: 24px;
  border-radius: 6px;
  width: 600px;
  max-width: 90vw;
  max-height: 90vh;
  overflow-y: auto;
}
.modal-card h3 {
  font-size: 16px;
  font-weight: 600;
  margin-bottom: 12px;
}
.modal-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 20px;
  padding-top: 16px;
  border-top: 1px solid var(--rule);
}


.modal-inline-error {
  margin-top: 12px;
  padding: 10px 12px;
  border: 1px solid rgba(208,52,52,.35);
  border-radius: 8px;
  background: rgba(208,52,52,.08);
  color: var(--ink);
  font-size: 12.5px;
  line-height: 1.4;
}
html[data-theme="dark"] .modal-inline-error {
  background: rgba(224,82,82,.10);
  border-color: rgba(224,82,82,.28);
}

/* ── TOAST ─────────────────────────────────────────────── */
#toast_container {
  position: fixed;
  bottom: 24px;
  right: 24px;
  z-index: 2000;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.toast {
  background: var(--ink);
  color: #fff;
  padding: 10px 16px;
  border-radius: 4px;
  font-size: 13px;
  box-shadow: 0 4px 16px rgba(0,0,0,.2);
  animation: slideIn .2s ease-out;
  max-width: 400px;
}
.toast.success { background: var(--green); }
.toast.error { background: var(--accent); }
.toast.warning { background: var(--orange); }
@keyframes slideIn {
  from { transform: translateY(20px); opacity: 0; }
  to { transform: translateY(0); opacity: 1; }
}

.kb-badge {
  display: inline-block;
  padding: 2px 8px;
  background: var(--accent);
  color: #fff;
  font-family: 'JetBrains Mono', monospace;
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .5px;
  border-radius: 2px;
}

.center { text-align: center; }
.muted { color: var(--ink-mute); }

/* ══════════════════════════════════════════════════════════════
   v3: КНОПКИ СЛОЖНОСТИ
   ══════════════════════════════════════════════════════════════ */
.cplx-row {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  max-width: 600px;
}
.cplx-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: 12px 4px;
  border: 1px solid var(--rule);
  background: var(--paper);
  border-radius: 3px;
  cursor: pointer;
  transition: all .15s;
  font-family: inherit;
  text-align: center;
}
.cplx-btn:hover {
  border-color: var(--ink-soft);
  background: var(--paper-soft);
}
.cplx-btn b {
  font-family: 'JetBrains Mono', monospace;
  font-size: 18px;
  font-weight: 600;
  color: var(--ink);
}
.cplx-btn span {
  font-family: 'JetBrains Mono', monospace;
  font-size: 10px;
  color: var(--ink-mute);
  margin-top: 2px;
}
.cplx-btn.active {
  border-color: var(--accent);
  background: var(--accent-soft);
  box-shadow: 0 0 0 1px var(--accent);
}
.cplx-btn.active b { color: var(--accent); }
.cplx-btn.suggested {
  border-color: var(--blue);
  background: var(--blue-soft);
}
.cplx-btn.suggested::before {
  content: 'рекомендовано';
  position: absolute;
  font-size: 9px;
  color: var(--blue);
  letter-spacing: .5px;
  top: -8px;
  background: var(--bg);
  padding: 0 4px;
}
.cplx-btn { position: relative; }

/* ══════════════════════════════════════════════════════════════
   v3: ТАБЛИЦА МАТЕРИАЛОВ
   ══════════════════════════════════════════════════════════════ */
.mat-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  background: var(--paper);
  border: 1px solid var(--rule);
  margin-top: 8px;
}
.mat-table th {
  padding: 8px 10px;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .3px;
  text-transform: uppercase;
  background: var(--paper-soft);
  border-bottom: 1px solid var(--rule);
  color: var(--ink-soft);
  text-align: left;
  vertical-align: bottom;
}
.mat-table th.right { text-align: right; }
.mat-table th .th-sub {
  display: block;
  font-size: 9px;
  font-weight: 400;
  color: var(--ink-mute);
  text-transform: none;
  letter-spacing: 0;
}
.mat-table td {
  padding: 6px 10px;
  border-bottom: 1px solid var(--rule-soft);
  vertical-align: middle;
}
.mat-table td.right { text-align: right; font-family: 'JetBrains Mono', monospace; }
.mat-table tbody tr:hover { background: var(--paper-soft); }
.mat-table input[type=number],
.mat-table input[type=text] {
  width: 100%;
  box-sizing: border-box;
  min-width: 0;
  background: transparent;
  border: 1px solid transparent;
  padding: 3px 6px;
  font-family: inherit;
  font-size: 13px;
  color: var(--ink);
  border-radius: 2px;
  text-align: right;
  font-family: 'JetBrains Mono', monospace;
}
/* v3.72 — убираем спин-стрелки у числовых полей (наезжали на соседнюю колонку) */
.mat-table input[type=number]::-webkit-outer-spin-button,
.mat-table input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.mat-table input[type=number] { -moz-appearance: textfield; appearance: textfield; }
/* числовые колонки логистики — гарантированная минимальная ширина под крупные суммы */
#logistics_table td, #logistics_table th { overflow: hidden; }
#logistics_table th.right, #logistics_table td.right { min-width: 72px; }
.mat-table input[type=text] { text-align: left; font-family: inherit; }
.mat-table input:focus {
  border-color: var(--accent);
  background: var(--paper);
  outline: none;
}
.mat-table tr.section-divider td {
  background: var(--paper-soft);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: .5px;
  text-transform: uppercase;
  color: var(--ink-soft);
  padding: 4px 10px;
}
.mat-table tfoot tr.subtotal td {
  background: var(--paper-soft);
  font-weight: 600;
  font-size: 13px;
  padding: 10px;
  border-top: 2px solid var(--rule);
  border-bottom: none;
}
.mat-row-handle {
  cursor: grab;
  color: var(--ink-mute);
  font-size: 14px;
  text-align: center;
}
.mat-del-btn {
  background: transparent;
  border: none;
  color: var(--ink-mute);
  cursor: pointer;
  padding: 4px 6px;
  font-size: 13px;
  border-radius: 3px;
}
.mat-del-btn:hover { background: var(--accent-soft); color: var(--accent); }
.mat-edit-btn {
  background: transparent;
  border: none;
  color: var(--ink-mute);
  cursor: pointer;
  padding: 4px 6px;
  font-size: 13px;
  border-radius: 3px;
}
.mat-edit-btn:hover { background: var(--blue-soft); color: var(--blue); }

/* ══════════════════════════════════════════════════════════════
   v3: МОДАЛКА ВЫБОРА МАТЕРИАЛА (широкая)
   ══════════════════════════════════════════════════════════════ */
.modal-card.wide {
  max-width: 920px;
  width: 95vw;
}
.modal-card.full {
  width: 96vw;
  max-width: 96vw;
}

/* v4.45.008 — широкая карточка создания/редактирования операции ТП.
   На десктопе даём форме и материалам рабочую ширину; мобильная раскладка
   ниже по файлу по-прежнему переводит все модалки в полноэкранный bottom-sheet. */
.modal-card.route-op-modal-card {
  width: min(1180px, 96vw);
  max-width: 1180px;
  max-height: 94vh;
}
.modal-card.route-op-modal-card .form-grid {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
.modal-card.route-op-modal-card .fl,
.modal-card.route-op-modal-card input,
.modal-card.route-op-modal-card select {
  min-width: 0;
}
/* v3.70 — окно «Новое изделие» шире и поля просторнее (форма всего из 3 полей) */
.modal-card.wide.product-mode { max-width: 760px; width: 92vw; }
.modal-card.product-mode .form-grid { grid-template-columns: 1.4fr 1.4fr 1fr; }
.modal-card.product-mode .form-grid .fl.wide-2 { grid-column: auto; }
.modal-card.product-mode .form-grid input { width: 100%; }

/* v5.00.001-alpha — структура предприятия */
.org-page { max-width: 1500px; margin: 0 auto; }
.org-head { align-items: flex-start; }
.org-stats { display:grid; grid-template-columns:repeat(5,minmax(130px,1fr)); gap:12px; margin:18px 0; }
.org-stat { background:var(--surface, #fff); border:1px solid var(--border, #dfe4eb); border-radius:12px; padding:16px 18px; display:flex; flex-direction:column; gap:3px; box-shadow:0 2px 8px rgba(20,35,55,.04); }
.org-stat b { font-size:26px; line-height:1; color:var(--primary, #255ca8); }
.org-stat span { color:var(--muted, #687386); font-size:13px; }
.org-tabs { margin-bottom:0; overflow-x:auto; }
.org-content { background:var(--surface, #fff); border:1px solid var(--border, #dfe4eb); border-radius:0 12px 12px 12px; min-height:260px; padding:18px; }
.org-section-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:14px; }
.org-section-head h2 { margin:0; font-size:20px; }
.org-content .users-table-wrap { max-height:calc(100vh - 340px); overflow:auto; }
.org-content .users-table { min-width:780px; }
.org-content .row-inactive { opacity:.58; }
.org-content .table-actions { display:flex; gap:6px; justify-content:flex-end; white-space:nowrap; }
.org-content .btn-secondary.small { padding:6px 9px; font-size:12px; }
.org-modal { max-height:88vh; overflow:auto; }
.org-modal .form-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
.org-modal .fl { margin-bottom:10px; }
.org-modal .check-field { flex-direction:row; align-items:center; align-self:end; padding:10px 0; }
.org-competency-list { display:flex; flex-direction:column; gap:8px; max-height:56vh; overflow:auto; margin:15px 0; }
.org-competency-row { display:grid; grid-template-columns:auto 1fr minmax(190px,260px); align-items:center; gap:12px; padding:10px 12px; border:1px solid var(--border, #dfe4eb); border-radius:9px; }
.org-competency-row span { display:flex; flex-direction:column; }
.org-competency-row small { color:var(--muted, #687386); }
.platform-switch { display:flex; align-items:center; gap:8px; cursor:pointer; white-space:nowrap; }
.platform-switch input { width:18px; height:18px; accent-color:var(--primary, #255ca8); }
/* v5.00.002-alpha — CMMS */
.cmms-status { display:inline-flex; padding:4px 9px; border-radius:999px; font-size:12px; font-weight:650; background:#eef2f7; color:#42526a; }
.cmms-status.new { background:#fff4d6; color:#835d00; }
.cmms-status.planned { background:#e8f1ff; color:#235a9f; }
.cmms-status.in_progress { background:#e6f7ef; color:#176a45; }
.cmms-status.paused { background:#fff0e8; color:#9b4b13; }
.cmms-status.completed { background:#e7f5ea; color:#2b6f3c; }
.cmms-status.cancelled { background:#f1f1f1; color:#777; }
.cmms-material-list { display:flex; flex-direction:column; gap:10px; margin:14px 0; }
.cmms-material-row { display:grid; grid-template-columns:minmax(280px,2fr) 1fr 1fr; gap:10px; border-bottom:1px solid var(--border,#dfe4eb); padding-bottom:10px; }
@media (max-width:900px) {
  .org-stats { grid-template-columns:repeat(2,minmax(120px,1fr)); }
  .org-modal .form-grid { grid-template-columns:1fr; }
  .org-competency-row { grid-template-columns:auto 1fr; }
  .org-competency-row select { grid-column:2; }
  .cmms-material-row { grid-template-columns:1fr; }
}
.journal-table { table-layout: fixed; width: 100%; }
.journal-table th, .journal-table td { white-space: normal; overflow-wrap: anywhere; vertical-align: top; }
.mat-pick-results {
  margin-top: 12px;
  max-height: 50vh;
  overflow-y: auto;
  border: 1px solid var(--rule);
  border-radius: 3px;
}
.mat-pick-row {
  display: grid;
  grid-template-columns: 70px 1fr 110px 120px 90px 110px 90px;
  gap: 12px;
  padding: 8px 12px;
  border-bottom: 1px solid var(--rule-soft);
  align-items: center;
  font-size: 12px;
  cursor: pointer;
  transition: background .1s;
}
.mat-pick-row:hover { background: var(--blue-soft); }
.mat-pick-row.header {
  background: var(--paper-soft);
  font-weight: 600;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .3px;
  color: var(--ink-soft);
  cursor: default;
  position: sticky;
  top: 0;
  z-index: 1;
}
.mat-pick-row .code {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--ink-mute);
}
.mat-pick-row .name { font-weight: 500; }
.mat-pick-row .meta {
  font-family: 'JetBrains Mono', monospace;
  font-size: 11px;
  color: var(--ink-soft);
}
.mat-pick-row .price {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  font-weight: 600;
  color: var(--accent-dark);
  text-align: right;
}
.mat-pick-row .price-na { color: var(--ink-mute); font-weight: 400; }
.mat-pick-row .pick-btn {
  background: var(--accent);
  color: #fff;
  border: none;
  padding: 5px 10px;
  border-radius: 2px;
  cursor: pointer;
  font-size: 12px;
  font-family: inherit;
}
.mat-pick-row .pick-btn:hover { background: var(--accent-dark); }

/* ── v3.1: readonly-поля материалов (цена/название из справочника) ── */
.mat-readonly {
  display: inline-block;
  padding: 3px 6px;
  color: var(--ink-soft);
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
}
.mat-table input.mat-readonly-input {
  color: var(--ink-soft);
  background: transparent;
  border-color: transparent;
  cursor: default;
}
.mat-table input.mat-readonly-input:focus {
  border-color: transparent;
  background: transparent;
}

/* ── v3.2: КИМ-таблица материалов, вспомогательные ── */
.mat-table-kim select[data-field] {
  width: 100%;
  background: transparent;
  border: 1px solid transparent;
  padding: 3px 4px;
  font-family: inherit;
  font-size: 13px;
  color: var(--ink);
  border-radius: 2px;
}
.mat-table-kim select[data-field]:focus {
  border-color: var(--accent);
  background: var(--paper);
  outline: none;
}
.mat-table .mat-name {
  font-size: 13px;
  color: var(--ink);
  display: block;
  padding: 3px 0;
}
.mat-table input.mat-kim {
  max-width: 70px;
}
.aux-basis-info {
  background: var(--paper-soft);
  border: 1px solid var(--rule);
  border-radius: 4px;
  padding: 8px 12px;
  margin-bottom: 12px;
  font-size: 13px;
}

/* v4.28.001 — единая рамка и отступы для расчётных разделов позиции БС.
   Таблицы больше не прилипают к внешней границе рабочей области. */
#pos-materials,
#pos-aux,
#pos-labor,
#pos-control,
#sec-packaging,
#sec-logistics,
#pos-prod {
  box-sizing: border-box;
  background: var(--paper);
  border: 1px solid var(--rule);
  border-radius: 8px;
  padding: 20px;
  box-shadow: 0 1px 3px rgba(31, 42, 55, .04);
}
#pos-materials .mat-table,
#pos-aux .mat-table,
#pos-labor .mat-table,
#pos-labor .ops-table,
#pos-control .mat-table,
#sec-packaging .mat-table,
#sec-logistics .mat-table,
#pos-prod .mat-table {
  margin: 14px 0 0;
}
#pos-materials > .hint,
#pos-aux > .hint,
#pos-labor > .hint,
#pos-control > .hint,
#sec-packaging > .hint,
#sec-logistics > .hint,
#pos-prod > .hint {
  margin: 0 0 12px;
  line-height: 1.5;
}
.section-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  justify-content: flex-end;
  flex-wrap: wrap;
}
.copy-materials-summary {
  margin-top: 12px;
  padding: 11px 13px;
  border: 1px solid var(--rule);
  border-radius: 6px;
  background: var(--paper-soft);
  color: var(--ink-soft);
  font-size: 13px;
  line-height: 1.45;
}
#aux_table td {
  padding: 8px 10px;
}
#aux_table input[data-aux-field] {
  min-width: 64px;
}
#aux_table input[data-aux-field="name"] {
  min-width: 150px;
}
#aux_table input[data-aux-field="note"] {
  min-width: 170px;
}
.aux-category {
  display: block;
  font-size: 10px;
  margin: 0 0 2px 6px;
}
@media (max-width: 900px) {
  #pos-materials,
  #pos-aux,
  #pos-labor,
  #pos-control,
  #sec-packaging,
  #sec-logistics,
  #pos-prod {
    padding: 12px;
  }
}
.hint-inline {
  align-self: start;
}

/* ══════════════════════════════════════════════════════════════
   v3.3: РЕДАКТОР СПРАВОЧНИКОВ
   ══════════════════════════════════════════════════════════════ */
.topbar-btn {
  background: transparent;
  border: 1px solid var(--rule);
  color: var(--ink);
  padding: 6px 14px;
  border-radius: 4px;
  cursor: pointer;
  font-family: inherit;
  font-size: 13px;
  margin-right: 8px;
  transition: all .15s;
}
.topbar-btn:hover { background: var(--paper-soft); border-color: var(--ink-soft); }

.dicts-layout {
  display: grid;
  grid-template-columns: 280px 1fr;
  min-height: calc(100vh - 56px);
}
.dicts-sidebar {
  border-right: 1px solid var(--rule);
  padding: 20px 0;
  background: var(--paper-soft);
}
.dicts-sidebar h3 {
  padding: 0 20px 12px;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: .5px;
  color: var(--ink-soft);
}
.dict-list { display: flex; flex-direction: column; }
/* v4.09.001 — группировка и нумерация справочников в навигации */
.dict-group { margin-bottom: 4px; }
.dict-group-head {
  padding: 10px 20px 4px;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .4px;
  color: var(--ink-soft);
  font-weight: 700;
}
.dict-list-item .dict-num {
  display: inline-block;
  min-width: 30px;
  color: var(--ink-soft);
  font-variant-numeric: tabular-nums;
  font-size: 12px;
}
.dict-list-item.active .dict-num { color: var(--accent); }
.dict-search-wrap { padding-top: 4px; }
.dict-list-item {
  padding: 10px 20px;
  cursor: pointer;
  font-size: 13px;
  border-left: 3px solid transparent;
  transition: all .12s;
}
.dict-list-item:hover { background: var(--paper); }
.dict-list-item.active {
  background: var(--paper);
  border-left-color: var(--accent);
  color: var(--accent);
  font-weight: 600;
}
.dicts-main { padding: 24px 28px; overflow-x: auto; }
.dicts-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  margin-bottom: 16px;
  gap: 16px;
}
.dicts-head h1 { font-size: 22px; margin: 0; }
.dicts-actions { display: flex; gap: 10px; }

.dict-table-wrap { overflow-x: auto; }
.dict-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  background: var(--paper);
  border: 1px solid var(--rule);
}
.dict-table th {
  padding: 8px 10px;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .3px;
  text-transform: uppercase;
  background: var(--paper-soft);
  border-bottom: 1px solid var(--rule);
  color: var(--ink-soft);
  text-align: left;
  white-space: nowrap;
}
.dict-table td {
  padding: 4px 8px;
  border-bottom: 1px solid var(--rule-soft);
}
.dict-table tbody tr:hover { background: var(--paper-soft); }
.dict-table input, .dict-table select {
  width: 100%;
  background: transparent;
  border: 1px solid transparent;
  padding: 4px 6px;
  font-family: inherit;
  font-size: 13px;
  color: var(--ink);
  border-radius: 2px;
  box-sizing: border-box;
}
.dict-table input[type=number] { font-family: 'JetBrains Mono', monospace; text-align: right; }
.dict-table input:focus, .dict-table select:focus {
  border-color: var(--accent);
  background: var(--bg);
  outline: none;
}
.dict-table input.dirty, .dict-table select.dirty {
  background: var(--orange-soft, #fff6e8);
  border-color: var(--orange);
}
.dict-table td.readonly {
  color: var(--ink-mute);
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
}
.dict-row-actions { white-space: nowrap; text-align: center; }
.dict-save-btn, .dict-del-btn {
  background: transparent;
  border: 1px solid transparent;
  cursor: pointer;
  padding: 3px 7px;
  border-radius: 3px;
  font-size: 13px;
}
.dict-save-btn { color: var(--green); }
.dict-save-btn:hover { background: var(--green); color: #fff; }
.dict-save-btn:disabled { color: var(--ink-mute); cursor: default; background: transparent; }
.dict-del-btn { color: var(--ink-mute); }
.dict-del-btn:hover { background: var(--accent-soft); color: var(--accent); }

/* ── v3.4: Обучение по закрытым заказам ── */
.fact-box {
  margin-top: 24px;
  padding: 16px;
  border: 1px dashed var(--rule);
  border-radius: 6px;
  background: var(--paper-soft);
}
.fact-box h3 { margin: 0 0 4px; font-size: 14px; }
.fact-row {
  display: flex;
  gap: 16px;
  align-items: flex-end;
  margin-top: 10px;
  flex-wrap: wrap;
}
.fact-info {
  flex: 1;
  font-size: 13px;
  color: var(--ink-soft);
  align-self: center;
  min-width: 200px;
}
.learn-settings {
  display: flex;
  gap: 20px;
  align-items: center;
  padding: 14px 16px;
  background: var(--paper-soft);
  border: 1px solid var(--rule);
  border-radius: 6px;
  font-size: 13px;
  flex-wrap: wrap;
}
.learn-settings label { display: flex; gap: 6px; align-items: center; }
.learn-settings input {
  border: 1px solid var(--rule);
  border-radius: 3px;
  padding: 4px 6px;
  font-family: 'JetBrains Mono', monospace;
}
.learn-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  background: var(--paper);
  border: 1px solid var(--rule);
}
.learn-table th {
  padding: 9px 12px;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .3px;
  background: var(--paper-soft);
  border-bottom: 1px solid var(--rule);
  color: var(--ink-soft);
  text-align: left;
}
.learn-table th.right, .learn-table td.right { text-align: right; }
.learn-table td {
  padding: 8px 12px;
  border-bottom: 1px solid var(--rule-soft);
}
.learn-table tbody tr:hover { background: var(--paper-soft); }
.learn-table .mono { font-family: 'JetBrains Mono', monospace; }
.dev-pos { color: var(--accent); font-weight: 600; }
.dev-neg { color: var(--green); font-weight: 600; }
.badge-wait {
  font-size: 11px;
  color: var(--ink-mute);
  background: var(--rule-soft);
  padding: 2px 8px;
  border-radius: 10px;
}
.badge-ready {
  font-size: 11px;
  color: var(--green);
  background: var(--green-soft, #e8f5e9);
  padding: 2px 8px;
  border-radius: 10px;
}

/* ── Импорт справочников: блок ошибок ── */
.warn-box {
  background: #fbf0e4;
  border: 1px solid var(--orange);
  color: #8a4a12;
  border-radius: 4px;
  padding: 9px 12px;
  font-size: 13px;
  line-height: 1.45;
}

/* ── SPLASH / заставка ── */
#splash {
  position: fixed; inset: 0; z-index: 9999;
  display: flex; align-items: center; justify-content: center;
  background: #ffffff;
  transition: opacity .45s ease, visibility .45s ease;
}
#splash.hide { opacity: 0; visibility: hidden; }
.splash-inner { text-align: center; }
.splash-logo {
  width: min(560px, 78vw); height: auto;
  opacity: 0; transform: scale(.92);
  animation: splashIn .7s cubic-bezier(.2,.7,.3,1) forwards;
}
@keyframes splashIn {
  from { opacity: 0; transform: scale(.92) translateY(8px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}
.splash-bar {
  width: min(300px, 50vw); height: 4px; margin: 22px auto 0;
  background: rgba(31,62,138,.14); border-radius: 4px; overflow: hidden;
}
.splash-bar span {
  display: block; height: 100%; width: 40%; border-radius: 4px;
  background: linear-gradient(90deg, var(--blue, #1f3e8a), #c0392b);
  animation: splashBar 1.1s ease-in-out infinite;
}
@keyframes splashBar {
  0%   { transform: translateX(-110%); }
  100% { transform: translateX(360%); }
}
.splash-sub {
  margin-top: 14px; font-size: 13px; letter-spacing: .04em;
  color: #5a6275; opacity: 0; animation: splashIn .6s .25s forwards;
}

/* ── Этап 0: переключатель пользователя (роли) ── */
.user-box {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: 10px;
  padding: 3px 8px;
  background: rgba(255,255,255,0.12);
  border-radius: 6px;
}
.user-icon { font-size: 14px; }
.user-select {
  background: #fff;
  color: #1a2332;
  border: 1px solid rgba(0,0,0,0.15);
  border-radius: 5px;
  padding: 4px 8px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  max-width: 230px;
}
.user-select:focus { outline: 2px solid #4a90d9; }

/* Подсветка элементов, скрытых по правам, не нужна — они получают .hidden-by-role */
.hidden-by-role { display: none !important; }
.disabled-by-role {
  opacity: 0.5;
  pointer-events: none;
  filter: grayscale(0.3);
}
.role-note {
  font-size: 12px;
  color: #c0392b;
  margin-left: 8px;
  font-style: italic;
}

/* ── v3.22: управление пользователями (Админ) ── */
.users-wrap { padding: 24px 32px; max-width: 1100px; }
.users-wrap.admin-wrap { width: 100%; max-width: none; box-sizing: border-box; }
.users-head {
  display: flex; justify-content: space-between; align-items: flex-start;
  gap: 16px; margin-bottom: 20px;
}
.users-table-wrap { overflow-x: auto; }
table.users-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
table.users-table th, table.users-table td {
  padding: 5px 8px; border-bottom: 1px solid #e3e8ef; text-align: left;
  vertical-align: middle;
}
table.users-table th { background: #f5f7fa; font-weight: 600; color: #38465c; }
table.users-table tr.inactive { opacity: 0.5; }
table.users-table select {
  padding: 3px 6px; border: 1px solid #cdd6e0; border-radius: 5px; font-size: 12.5px;
  max-width: 220px;
}
/* Кнопки действий — в одну строку, компактные */
td.user-actions { white-space: nowrap; }
td.user-actions .btn-secondary {
  display: inline-block; padding: 3px 9px; font-size: 12px; line-height: 1.5;
  margin: 0 3px 0 0; white-space: nowrap; vertical-align: middle;
}
.user-state { font-size: 12px; font-weight: 600; padding: 2px 8px; border-radius: 10px; }
.user-state.on  { background: #e3f6e8; color: #1b7a3d; }
.user-state.off { background: #f3e3e3; color: #9a2b2b; }
.perm-legend table { width: 100%; border-collapse: collapse; font-size: 12.5px; margin-top: 8px; }
.perm-legend th, .perm-legend td {
  padding: 6px 8px; border: 1px solid #e3e8ef; text-align: center;
}
.perm-legend th:first-child, .perm-legend td:first-child { text-align: left; font-weight: 600; }
.perm-legend td.yes { color: #1b7a3d; font-weight: 700; }
.perm-legend td.no  { color: #c9cdd4; }

/* ── v3.23: редактор матрицы прав ── */
table.perm-edit-table { width: 100%; border-collapse: collapse; font-size: 13px; margin-top: 8px; }
table.perm-edit-table th, table.perm-edit-table td {
  padding: 7px 8px; border: 1px solid #e3e8ef; text-align: center;
}
table.perm-edit-table th:first-child, table.perm-edit-table td:first-child {
  text-align: left; font-weight: 600; white-space: nowrap;
}
table.perm-edit-table thead th { background: #f5f7fa; color: #38465c; }
/* v4.44.002 — вертикальные названия ролей делают матрицу прав компактнее. */
table.perm-edit-table thead th.perm-role-head {
  width: var(--perm-role-col-width, 58px);
  min-width: var(--perm-role-col-width, 58px);
  max-width: var(--perm-role-col-width, 58px);
  height: 148px;
  padding: 6px 3px;
  vertical-align: bottom;
}
table.perm-edit-table thead th.perm-role-head .perm-role-head-label {
  display: inline-block;
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  white-space: nowrap;
  line-height: 1.05;
  font-weight: 700;
}
table.perm-edit-table tbody td:not(:first-child) {
  width: var(--perm-role-col-width, 58px);
  min-width: var(--perm-role-col-width, 58px);
  max-width: var(--perm-role-col-width, 58px);
  padding-left: 3px;
  padding-right: 3px;
}
table.perm-edit-table thead th.perm-cap-head { vertical-align: bottom; }
table.perm-edit-table input[type=checkbox] { width: 17px; height: 17px; cursor: pointer; }
table.perm-edit-table input[type=checkbox]:disabled { cursor: not-allowed; }
#perm_legend_table {
  display: block;
  position: relative;
  width: 100%;
  max-width: 100%;
  height: clamp(360px, calc(100vh - 300px), 760px);
  overflow: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  scrollbar-gutter: stable;
  border: 1px solid #e3e8ef;
  border-radius: 8px;
  background: #fff;
}
#perm_legend_table table.perm-edit-table {
  width: max-content;
  min-width: 100%;
  margin: 0;
}
/* v5.00.055-alpha — большая матрица прав: роли всегда сверху, права всегда слева. */
/* v5.00.056-alpha — явный THEAD + class fallback для надёжного sticky заголовка. */
/* v5.00.057-alpha — фиксированная геометрия первой колонки без наложения на роли. */
#perm_legend_table {
  --perm-cap-col-width: 360px;
  --perm-role-col-width: 58px;
}
#perm_legend_table table.perm-edit-table col.perm-cap-col {
  width: var(--perm-cap-col-width);
  min-width: var(--perm-cap-col-width);
}
#perm_legend_table table.perm-edit-table col.perm-role-col {
  width: var(--perm-role-col-width);
  min-width: var(--perm-role-col-width);
}
#perm_legend_table table.perm-edit-table thead th,
#perm_legend_table table.perm-edit-table th.perm-role-head,
#perm_legend_table table.perm-edit-table th.perm-cap-head {
  position: sticky;
  top: 0;
  z-index: 4;
  background: #f5f7fa;
  box-shadow: 0 2px 0 rgba(56, 70, 92, .10);
}
#perm_legend_table table.perm-edit-table th:first-child,
#perm_legend_table table.perm-edit-table td:first-child {
  position: sticky;
  left: 0;
  z-index: 6;
  width: var(--perm-cap-col-width);
  min-width: var(--perm-cap-col-width);
  max-width: var(--perm-cap-col-width);
  box-sizing: border-box;
  overflow: hidden;
  text-overflow: ellipsis;
  background: #fff;
  box-shadow: 2px 0 0 rgba(56, 70, 92, .10);
}
#perm_legend_table table.perm-edit-table tbody td:first-child {
  white-space: normal;
  overflow-wrap: anywhere;
}
#perm_legend_table table.perm-edit-table thead th {
  z-index: 10;
}
#perm_legend_table table.perm-edit-table thead th:first-child {
  top: 0;
  z-index: 20;
  white-space: nowrap;
  background: #f5f7fa;
  box-shadow: 2px 2px 0 rgba(56, 70, 92, .12);
}
#perm_legend_table table.perm-edit-table tbody tr:nth-child(even) td:first-child {
  background: #f8fafc;
}
#perm_legend_table table.perm-edit-table tbody tr:hover td:first-child {
  background: #eef4fb;
}

/* ── v3.25: главная страница — фильтруемый список БС ── */
/* Список БС использует всю ширину экрана (в отличие от прочих страниц) */
#view-list .page-pad { max-width: none; padding: 24px 20px; }
.bs-list-meta { font-size: 12px; color: #6b7686; margin-bottom: 8px; }
.bs-list-scroll { overflow-x: auto; border: 1px solid #e3e8ef; border-radius: 8px; }
table.bs-list-table.filterable { width: 100%; border-collapse: collapse; font-size: 13px; table-layout: auto; }
table.bs-list-table.filterable thead th {
  position: sticky; top: 0; background: #f5f7fa; z-index: 2;
}
table.bs-list-table.filterable thead tr.filter-row th {
  top: 34px; background: #eef2f7; padding: 4px 6px;
}
table.bs-list-table.filterable th, table.bs-list-table.filterable td {
  padding: 7px 10px; border-bottom: 1px solid #eceff3; text-align: left;
}
/* Наименование/Заказчик/Объект могут переноситься, остальное — компактно */
table.bs-list-table.filterable td { white-space: normal; word-break: break-word; }
table.bs-list-table.filterable td.mono, table.bs-list-table.filterable td.right { white-space: nowrap; }
table.bs-list-table.filterable td.right, table.bs-list-table.filterable th.right { text-align: right; }
table.bs-list-table.filterable tbody tr { cursor: pointer; }
table.bs-list-table.filterable tbody tr:hover { background: #f0f6ff; }
.filter-row input.col-filter, .filter-row select.col-filter {
  width: 100%; box-sizing: border-box; padding: 3px 6px; font-size: 12px;
  border: 1px solid #cdd6e0; border-radius: 4px; background: #fff; font-weight: normal;
}
.calc-tag { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 10px; white-space: nowrap; }
.calc-tag.ok   { background: #e3f6e8; color: #1b7a3d; }
.calc-tag.wip  { background: #fff3d6; color: #8a6300; }
.calc-tag.none { background: #f0f0f3; color: #888; }

/* v4.11.002 — таблица позиций БС: делаем узкие колонки шире и читабельнее.
   Правила scoped под #positions_list, чтобы не задеть общий журнал БС.
   Ширины через colgroup + минимумы на ячейках; nowrap, чтобы заголовки и
   числа не переносились и не обрезались (как «Кол-во» → «Филь»). */
#positions_list table.bs-list-table.filterable col.bscol-tag   { width: 12%; }
#positions_list table.bs-list-table.filterable col.bscol-money { width: 15%; }
#positions_list table.bs-list-table.filterable col.bscol-date  { width: 12%; }
#positions_list table.bs-list-table.filterable col.bscol-num   { width: 8%; }
#positions_list table.bs-list-table.filterable td.bscol-tag,
#positions_list table.bs-list-table.filterable th.bscol-tag   { min-width: 130px; white-space: nowrap; }
#positions_list table.bs-list-table.filterable td.bscol-money,
#positions_list table.bs-list-table.filterable th.bscol-money { min-width: 130px; white-space: nowrap; }
#positions_list table.bs-list-table.filterable td.bscol-date,
#positions_list table.bs-list-table.filterable th.bscol-date  { min-width: 120px; white-space: nowrap; }
#positions_list table.bs-list-table.filterable td.bscol-num,
#positions_list table.bs-list-table.filterable th.bscol-num   { min-width: 74px; white-space: nowrap; }
/* Поля фильтра в этих колонках занимают всю ширину ячейки */
#positions_list table.bs-list-table.filterable tr.filter-row .col-filter { width: 100%; box-sizing: border-box; }

/* ── v3.44: адаптивная ширина столбцов списка БС ──
   Резиновые текстовые колонки (Заказчик/Объект/Наименование) забирают
   свободное место и переносятся; узкие, числовые, даты и колонки-теги
   (статусы/приоритет/этап) держат компактную ширину и НЕ переносятся —
   за счёт этого бейджи статусов не «прыгают» на новую строку. */
table.bs-list-table.filterable td.bscol-tag,
table.bs-list-table.filterable th.bscol-tag,
table.bs-list-table.filterable td.bscol-num,
table.bs-list-table.filterable th.bscol-num,
table.bs-list-table.filterable td.bscol-xs,
table.bs-list-table.filterable th.bscol-xs,
table.bs-list-table.filterable td.bscol-date,
table.bs-list-table.filterable th.bscol-date,
table.bs-list-table.filterable td.bscol-money,
table.bs-list-table.filterable th.bscol-money {
  white-space: nowrap;
  word-break: normal;
}
/* «характер» колонок через colgroup: подсказка браузеру по ширине */
col.bscol-xs    { width: 1%; }
col.bscol-num   { width: 1%; }
col.bscol-date  { width: 1%; }
col.bscol-tag   { width: 1%; }
col.bscol-money { width: 1%; }
col.bscol-sm    { width: 8%; }
col.bscol-flex  { width: auto; }   /* резиновые — забирают остаток */
/* v3.72 — узкие колонки журнала операций: ДСЕ и сертификат на ~50% уже */
col.bscol-dse   { width: 9%; }
col.bscol-cert  { width: 11%; }
/* v3.73 — колонка «Стадия» достаточной ширины, тег в одну строку */
col.bscol-state { width: 8%; }
table.bs-list-table.filterable td.bscol-state,
table.bs-list-table.filterable th.bscol-state { white-space: nowrap; text-align: center; }
table.bs-list-table.filterable td.bscol-state .pstate { white-space: nowrap; display: inline-block; }
table.bs-list-table.filterable td.bscol-dse,
table.bs-list-table.filterable th.bscol-dse,
table.bs-list-table.filterable td.bscol-cert,
table.bs-list-table.filterable th.bscol-cert { white-space: normal; word-break: break-word; }

/* Узкие колонки компактнее по горизонтали */
table.bs-list-table.filterable td.bscol-xs,
table.bs-list-table.filterable th.bscol-xs,
table.bs-list-table.filterable td.bscol-num,
table.bs-list-table.filterable th.bscol-num,
table.bs-list-table.filterable td.bscol-tag,
table.bs-list-table.filterable th.bscol-tag { padding-left: 6px; padding-right: 6px; }

/* Резиновые текстовые колонки: разумный минимум, перенос разрешён */
table.bs-list-table.filterable td.bscol-flex,
table.bs-list-table.filterable th.bscol-flex {
  min-width: 120px; white-space: normal; word-break: break-word;
}
/* Колонка-тег: минимум под самый длинный бейдж («Дата отправки…» не сюда) */
table.bs-list-table.filterable th.bscol-tag,
table.bs-list-table.filterable td.bscol-tag { min-width: 86px; }
/* v3.108 — журнал заказов: сжатые колонки «Изделие»/«Наименование», чтобы
   кнопки действий помещались в одну строку. */
col.bscol-prodname { width: 15%; }
table.bs-list-table.filterable td.bscol-prodname,
table.bs-list-table.filterable th.bscol-prodname {
  min-width: 90px; max-width: 200px; white-space: normal; word-break: break-word;
  font-size: 12.5px;
}
.prod-journal-table .order-acts { flex-wrap: nowrap; white-space: nowrap; gap: 4px; }
.prod-journal-table td.order-acts { min-width: 230px; }
.prod-journal-table .order-acts .link-btn2 { margin: 0 1px; font-size: 13px; }

/* На узких экранах таблица не ломается — включается горизонтальный скролл */
.bs-list-scroll { overflow-x: auto; }
@media (max-width: 1280px) {
  table.bs-list-table.filterable { min-width: 1100px; }
}

/* ── v3.26: хлебные крошки ── */
.breadcrumbs {
  padding: 8px 20px; background: #fff; border-bottom: 1px solid #e3e8ef;
  font-size: 13px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
}
.breadcrumbs .crumb-sep { color: #b8c0cc; margin: 0 2px; }
.breadcrumbs a.crumb.link { color: #2f6fb0; cursor: pointer; text-decoration: none; }
.breadcrumbs a.crumb.link:hover { text-decoration: underline; }
.breadcrumbs .crumb.current { color: #38465c; font-weight: 600; }

/* ── v3.26: подтверждение завершения этапа ── */
.confirm-summary { margin-top: 8px; border: 1px solid #e3e8ef; border-radius: 8px; overflow: hidden; }
.confirm-summary .cs-row {
  display: flex; justify-content: space-between; gap: 12px;
  padding: 6px 12px; border-bottom: 1px solid #f0f2f6; font-size: 13px;
}
.confirm-summary .cs-row:last-child { border-bottom: none; }
.confirm-summary .cs-label { color: #56627a; }
.confirm-summary .cs-val { font-weight: 600; color: #2b3648; text-align: right; }
.confirm-summary .cs-row.missing { background: #fff4f4; }
.confirm-summary .cs-row.missing .cs-val { color: #c0392b; }
.cs-warn { padding: 8px 12px; background: #fff3d6; color: #8a6300; font-size: 13px; }
.cs-ok { padding: 8px 12px; background: #e3f6e8; color: #1b7a3d; font-size: 13px; }

/* ── v3.27: НМЦ — расчётная рентабельность ── */
.nmc-note {
  margin-top: 10px; padding: 8px 12px; border-radius: 6px;
  background: #eef4ff; color: #2f5b8f; font-size: 12.5px;
}
input.nmc-locked, select.nmc-locked {
  background: #f0f2f6; color: #8a93a3; cursor: not-allowed;
}
.nmc-banner {
  padding: 12px 16px; border-radius: 8px; font-size: 14px; margin-bottom: 8px;
}
.nmc-banner.ok  { background: #e8f3ff; color: #1c4f86; border: 1px solid #bcdcff; }
.nmc-banner.bad { background: #fff0f0; color: #a3271f; border: 1px solid #f3c9c5; }

/* ═══════════════════════════════════════════════════════════════════
   v3.30/v3.31 — ЗАДАЧИ, УВЕДОМЛЕНИЯ, ОТЧЁТЫ
   ═══════════════════════════════════════════════════════════════════ */

/* ── Уведомления (колокольчик + панель) ── */
.notif-btn { position: relative; }
.notif-dot {
  position: absolute; top: -6px; right: -4px;
  background: var(--accent); color: #fff;
  font-size: 10px; font-weight: 700; line-height: 1;
  min-width: 16px; height: 16px; padding: 0 4px;
  border-radius: 9px; display: flex; align-items: center; justify-content: center;
}
.notif-panel {
  position: absolute; top: 56px; right: 16px; z-index: 200;
  width: 380px; max-height: 70vh; overflow: hidden;
  background: var(--paper); border: 1px solid var(--rule);
  border-radius: 8px; box-shadow: 0 12px 32px rgba(0,0,0,.16);
  display: flex; flex-direction: column;
}
.notif-panel-head {
  display: flex; justify-content: space-between; align-items: center;
  padding: 12px 16px; border-bottom: 1px solid var(--rule-soft);
  font-weight: 600; font-size: 13px;
}
.notif-readall {
  background: none; border: none; color: var(--blue);
  cursor: pointer; font-size: 12px; font-family: inherit;
}
.notif-readall:hover { text-decoration: underline; }
.notif-list { overflow-y: auto; }
.notif-item {
  padding: 11px 16px; border-bottom: 1px solid var(--rule-soft);
  cursor: pointer; transition: background .12s;
}
.notif-item:hover { background: var(--paper-soft); }
.notif-item.unread { background: var(--accent-soft); }
.notif-item.unread:hover { background: #fbe2e2; }
.notif-item .nt-title { font-weight: 600; font-size: 13px; color: var(--ink); }
.notif-item .nt-body { font-size: 12px; color: var(--ink-soft); margin-top: 2px; }
.notif-item .nt-time { font-size: 11px; color: var(--ink-mute); margin-top: 4px; }
.notif-empty { padding: 32px 16px; text-align: center; color: var(--ink-mute); font-size: 13px; }

/* ── Задачи ── */
.task-list { display: flex; flex-direction: column; gap: 10px; }
.task-card {
  border: 1px solid var(--rule); border-left: 4px solid var(--rule);
  border-radius: 6px; padding: 12px 14px; background: var(--paper);
  display: flex; gap: 12px; align-items: flex-start;
}
.task-card.prio-high   { border-left-color: var(--accent); }
.task-card.prio-normal { border-left-color: var(--blue); }
.task-card.prio-low    { border-left-color: var(--ink-mute); }
.task-card.is-done     { opacity: .6; }
.task-card.is-done .tc-title { text-decoration: line-through; }
.task-card.overdue { background: var(--accent-soft); }
.tc-main { flex: 1; min-width: 0; text-align: left; }
.tc-title { font-weight: 600; font-size: 14px; color: var(--ink); text-align: left; }
.tc-desc { font-size: 12px; color: var(--ink-soft); margin-top: 3px; text-align: left; }
.tc-meta { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.tc-chip {
  font-size: 11px; padding: 2px 8px; border-radius: 10px;
  background: var(--rule-soft); color: var(--ink-soft);
}
.tc-chip.due-over { background: var(--accent); color: #fff; }
.tc-chip.status-open { background: var(--blue-soft); color: var(--blue); }
.tc-chip.status-in_progress { background: #fff2dd; color: var(--orange); }
.tc-chip.status-submitted { background: #ece3f7; color: #6b46c1; }
.tc-chip.status-done { background: #e3f0e6; color: var(--green); }
.tc-chip.status-cancelled { background: var(--rule-soft); color: var(--ink-mute); }
.tc-note { font-size: 12px; color: var(--ink-soft); margin-top: 4px; }

/* ── Обсуждение по БС (чат) ── */
.chat-area {
  max-height: 460px; overflow-y: auto; border: 1px solid var(--rule);
  border-radius: 6px; padding: 12px; background: var(--paper-soft);
  display: flex; flex-direction: column; gap: 10px;
}
.chat-msg {
  background: var(--paper); border: 1px solid var(--rule); border-radius: 6px;
  padding: 8px 12px; max-width: 80%; align-self: flex-start;
}
.chat-msg.mine { align-self: flex-end; border-color: var(--blue); background: var(--blue-soft); }
.chat-msg-head { font-size: 12px; margin-bottom: 3px; }
.chat-msg-head .muted { font-weight: 400; }
.chat-msg-body { font-size: 13px; color: var(--ink); white-space: normal; word-break: break-word; }
.chat-mention { color: var(--accent); font-weight: 600; }
.chat-compose { margin-top: 12px; display: flex; flex-direction: column; gap: 8px; }
.chat-compose textarea {
  width: 100%; border: 1px solid var(--rule); border-radius: 6px; padding: 8px 10px;
  font-family: inherit; font-size: 13px; resize: vertical;
}
.chat-compose textarea:focus { outline: none; border-color: var(--accent); }
.chat-compose-actions { display: flex; gap: 8px; align-items: center; justify-content: flex-end; }
.chat-mention-select { padding: 6px 8px; border: 1px solid var(--rule); border-radius: 6px; font-family: inherit; font-size: 12px; margin-right: auto; }

/* ── Документы по БС ── */
.docs-upload { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 10px 0 16px; }
.doc-category-select { padding: 6px 8px; border: 1px solid var(--rule); border-radius: 6px; font-family: inherit; font-size: 13px; }
.docs-group { margin-bottom: 16px; }
.docs-group-head { font-size: 12px; text-transform: uppercase; letter-spacing: .6px; color: var(--ink-mute); font-weight: 600; margin-bottom: 6px; }
.doc-row { display: flex; align-items: center; gap: 10px; padding: 7px 10px; border: 1px solid var(--rule); border-radius: 6px; background: var(--paper); margin-bottom: 6px; }
.doc-ic { font-size: 16px; }
.doc-name { font-size: 13px; color: var(--blue); text-decoration: none; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.doc-name:hover { text-decoration: underline; }
.doc-meta { font-size: 11px; color: var(--ink-mute); white-space: nowrap; }
.doc-del { border: 1px solid var(--rule); background: transparent; border-radius: 4px; cursor: pointer; padding: 2px 8px; color: var(--ink-soft); }
.doc-del:hover { border-color: var(--accent); color: var(--accent); }
.doc-parse { border: 1px solid var(--rule); background: transparent; border-radius: 4px; cursor: pointer; padding: 2px 10px; color: var(--ink-soft); white-space: nowrap; font-size: 12px; }
.doc-parse:hover { border-color: var(--accent); color: var(--accent); }
.tc-actions { display: flex; flex-direction: row; flex-wrap: wrap; gap: 6px; align-items: flex-start; }
.tc-actions button {
  background: transparent; border: 1px solid var(--rule); border-radius: 4px;
  padding: 4px 10px; font-size: 12px; cursor: pointer; font-family: inherit;
  white-space: nowrap;
}
.tc-actions button:hover { border-color: var(--ink-soft); background: var(--paper-soft); }
.tc-actions .tc-done:hover { border-color: var(--green); color: var(--green); }
.tc-actions .tc-del:hover { border-color: var(--accent); color: var(--accent); }

/* ── Отчёты ── */
.reports-wrap { max-width: 1100px; margin: 0 auto; padding: 24px; }
.reports-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; margin-bottom: 20px; }
.reports-head h1 { font-size: 22px; margin: 0 0 4px; }
.rep-cards { display: grid; grid-template-columns: repeat(auto-fit,minmax(150px,1fr)); gap: 12px; margin-bottom: 24px; }
.rep-card {
  background: var(--paper); border: 1px solid var(--rule); border-radius: 8px;
  padding: 16px; text-align: center;
}
.rep-card .rc-num { font-size: 28px; font-weight: 700; color: var(--ink); font-family: 'JetBrains Mono', monospace; }
.rep-card .rc-label { font-size: 12px; color: var(--ink-mute); margin-top: 4px; }
.rep-card.warn .rc-num { color: var(--accent); }
.rep-card.ok .rc-num { color: var(--green); }
.rep-section { margin-bottom: 28px; }
.rep-section h2 { font-size: 15px; margin: 0 0 12px; }
.rep-table { width: 100%; border-collapse: collapse; background: var(--paper); border: 1px solid var(--rule); border-radius: 8px; overflow: hidden; }
.rep-table th, .rep-table td { padding: 9px 12px; text-align: left; border-bottom: 1px solid var(--rule-soft); font-size: 13px; }
.rep-table th { background: var(--paper-soft); font-weight: 600; color: var(--ink-soft); }
.rep-table tr:last-child td { border-bottom: none; }
.rep-table td.num { text-align: right; font-family: 'JetBrains Mono', monospace; }
.rep-table td.over { color: var(--accent); font-weight: 700; }
.rep-empty { color: var(--ink-mute); font-size: 13px; padding: 12px 0; }

/* ── Правила этапов ── */
.rules-table { width: 100%; border-collapse: collapse; margin-top: 12px; }
.rules-table th, .rules-table td { padding: 8px 10px; border-bottom: 1px solid var(--rule-soft); font-size: 13px; text-align: left; }
.rules-table th { background: var(--paper-soft); font-weight: 600; color: var(--ink-soft); }
.rules-table .r-act button { background: none; border: 1px solid var(--rule); border-radius: 4px; padding: 3px 8px; cursor: pointer; font-size: 12px; margin-right: 4px; }
.rules-table .r-act button:hover { border-color: var(--ink-soft); }
.rule-badge { font-size: 11px; padding: 1px 7px; border-radius: 10px; background: var(--blue-soft); color: var(--blue); }
.rule-badge.notif-only { background: #fff2dd; color: var(--orange); }

/* ═══════════════════════════════════════════════════════════════════
   v3.32 — УПРОЩЁННЫЙ КОНТРОЛЬ, МИН. ЗАКУПКА, СОХРАНИТЬ ВСЁ
   ═══════════════════════════════════════════════════════════════════ */
.ctrl-own { color: var(--green); font-size: 12px; }
#control_simple_table .ctrl-cov,
.mat-minpur {
  border: 1px solid var(--rule); border-radius: 4px; padding: 4px 6px;
  font-family: inherit; font-size: 13px;
}
#control_simple_table .ctrl-cov:focus,
.mat-minpur:focus { outline: none; border-color: var(--accent); }
.mat-minpur { width: 90px; }
#control_travel {
  border: 1px solid var(--rule); border-radius: 4px; padding: 4px 6px; font-family: inherit;
}
#control_travel:focus { outline: none; border-color: var(--accent); }
#control_base_note { font-size: 12px; }
/* Кнопка «Сохранить всё» — заметный акцент в шапке позиции */
#btn_save_all_pos { font-weight: 600; }
#btn_save_all_pos:disabled { opacity: .6; cursor: default; }

/* v3.34 — отчёты: диапазон дат + центрирование числовых ячеек */
.rep-table td.ctr, .rep-table th.ctr { text-align: center; }
.rep-table td.ctr { font-family: 'JetBrains Mono', monospace; }
.rep-range {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 10px;
}
/* поля «с/по» — компактная строка в один ряд с кнопками (а не столбиком) */
.rep-range .fl {
  display: inline-flex; align-items: center; gap: 6px; margin: 0;
}
.rep-range .fl > span { font-size: 11px; color: var(--ink-mute); }
.rep-range .fl input[type="date"] { width: auto; margin-top: 0; }
.rep-range input[type="date"] {
  border: 1px solid var(--rule); border-radius: 4px; padding: 5px 8px;
  font-family: inherit; font-size: 13px;
}
.rep-range input[type="date"]:focus { outline: none; border-color: var(--accent); }
.rep-range button { padding: 5px 12px; align-self: center; }

/* ════════════════════════════════════════════════════════════════════
   v3.42 — Эскиз изделия в «Описании», подсказки и приоритет
   ════════════════════════════════════════════════════════════════════ */

/* Двухколоночная раскладка вкладки «Описание»: форма + панель эскиза */
.describe-layout {
  display: flex;
  gap: 24px;
  align-items: flex-start;
}
.describe-main { flex: 1 1 auto; min-width: 0; }
.describe-sketch {
  flex: 0 0 640px;
  max-width: 720px;
  position: sticky;
  top: 8px;
}
@media (max-width: 1100px) {
  .describe-layout { flex-direction: column; }
  .describe-sketch { flex-basis: auto; max-width: none; width: 100%; position: static; }
}

.sketch-drop {
  border: 2px dashed var(--border, #c8ccd4);
  border-radius: 10px;
  min-height: 440px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--surface-2, #f7f8fa);
  cursor: pointer;
  outline: none;
  overflow: hidden;
  transition: border-color .15s, background .15s;
}
.sketch-drop:focus,
.sketch-drop.dragover { border-color: var(--accent, #2d6cdf); background: rgba(45,108,223,.06); }
.sketch-placeholder {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  color: var(--muted, #8a909c);
  font-size: 13px;
  text-align: center;
  padding: 16px;
}
.sketch-icon { font-size: 36px; opacity: .7; }
.sketch-img { max-width: 100%; max-height: 480px; display: block; border-radius: 8px; }
.sketch-actions { display: flex; gap: 8px; margin-top: 10px; }

/* v3.91 — список из нескольких эскизов */
.sketch-list { display: flex; flex-direction: column; gap: 14px; }
.sketch-item { border: 1px solid var(--rule, #d8dbe0); border-radius: 10px; padding: 8px; background: var(--paper, #fff); }
.sketch-item-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.sketch-item-no { font-size: 12px; font-weight: 600; color: var(--ink-mute, #667); text-transform: uppercase; letter-spacing: .6px; }
.sketch-item .sketch-drop { min-height: 300px; margin: 0; }
.sketch-del {
  background: transparent; border: none; color: var(--ink-mute, #8a909c);
  cursor: pointer; font-size: 14px; line-height: 1; padding: 2px 6px; border-radius: 4px;
}
.sketch-del:hover { background: var(--accent-soft, #fbe9e9); color: var(--accent, #c0392b); }
.sketch-empty-hint { padding: 18px; text-align: center; font-size: 13px; border: 2px dashed var(--rule, #d8dbe0); border-radius: 10px; }

/* Подсказка по категориям материалов над поиском (item 3) */
.matpick-cat-hint {
  font-size: 11px;
  color: var(--muted, #8a909c);
  line-height: 1.5;
  margin: 0 0 6px;
  padding: 6px 8px;
  background: var(--surface-2, #f7f8fa);
  border-radius: 6px;
}
.matpick-cat-hint b { color: var(--text, #232733); }

/* Раздельный поиск в справочнике материалов (item 3) */
.matpick-search-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  margin-bottom: 8px;
}
.matpick-search-row input { width: 100%; }
@media (max-width: 640px) { .matpick-search-row { grid-template-columns: 1fr; } }

/* Приоритет расчёта в списке БС (item 2) */
.prio-tag {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 10px;
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
}
.prio-tag.low    { background: #e7eaef; color: #6b7180; }
.prio-tag.normal { background: #e3eefc; color: #2d6cdf; }
.prio-tag.high   { background: #fde7e7; color: #d6403a; }
.prio-select { font-size: 12px; padding: 2px 4px; max-width: 96px; width: 100%; box-sizing: border-box; }

/* Кнопки этапов workflow */
.stage-actions { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin: 8px 0; }
.stage-badge {
  display: inline-block; padding: 2px 10px; border-radius: 12px;
  font-size: 12px; font-weight: 600;
}
.stage-badge.commerce    { background: #e3eefc; color: #2d6cdf; }
.stage-badge.engineering { background: #fff2dd; color: #b8772a; }
.stage-badge.review      { background: #e9f7ed; color: #2e8f4f; }
.stage-badge.done        { background: #e7eaef; color: #6b7180; }
.confirm-mark { font-size: 12px; color: #2e8f4f; margin-left: 6px; }

/* ════════════════════════════════════════════════════════════════════
   v3.43 — Панель 6 этапов жизненного цикла БС
   ════════════════════════════════════════════════════════════════════ */
.wf-panel {
  background: var(--surface-2, #f7f8fa);
  border: 1px solid var(--border, #e2e5ea);
  border-radius: 10px;
  padding: 12px 16px;
  margin: 8px 0;
}
.wf-steps { display: flex; align-items: stretch; flex-wrap: wrap; gap: 4px; }
.wf-step {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 10px; border-radius: 8px; background: #fff;
  border: 1px solid var(--border, #e2e5ea); min-width: 130px;
}
.wf-step-num {
  width: 24px; height: 24px; border-radius: 50%; flex: 0 0 24px;
  display: flex; align-items: center; justify-content: center;
  font-size: 13px; font-weight: 700; background: #e7eaef; color: #6b7180;
}
.wf-step.done    { border-color: #2e8f4f; }
.wf-step.done .wf-step-num    { background: #2e8f4f; color: #fff; }
.wf-step.current { border-color: #2d6cdf; box-shadow: 0 0 0 2px rgba(45,108,223,.15); }
.wf-step.current .wf-step-num { background: #2d6cdf; color: #fff; }
.wf-step-label { font-size: 13px; font-weight: 600; }
.wf-step-who   { font-size: 11px; color: var(--muted, #8a909c); }
.wf-arrow      { display: flex; align-items: center; color: var(--muted, #c0c4cc); font-size: 16px; }
.wf-actions    { margin-top: 12px; padding-top: 10px; border-top: 1px dashed var(--border, #e2e5ea); }
.wf-actions-row { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 8px; }
.wf-rollback-btn { margin-left: auto; }
.wf-rollback-note {
  margin-top: 10px;
  padding: 8px 10px;
  border-left: 3px solid #d79224;
  border-radius: 5px;
  background: #fff7e6;
  color: var(--ink-soft, #4c5564);
  font-size: 12px;
  line-height: 1.45;
}
.wf-subcheck   {
  display: inline-flex; align-items: center; gap: 8px; font-size: 13px;
  padding: 6px 10px; background: #fff8e6; border: 1px solid #f0d98a;
  border-radius: 8px; cursor: pointer;
}
.wf-subcheck input { width: 16px; height: 16px; }
@media (max-width: 1180px) {
  .wf-arrow { display: none; }
  .wf-step  { min-width: 0; flex: 1 1 45%; }
}

/* v3.43 — textarea тех.характеристик и readonly-поля */
.fl-textarea {
  width: 100%; box-sizing: border-box; resize: vertical;
  font: inherit; padding: 8px 10px;
  border: 1px solid var(--border, #c8ccd4); border-radius: 8px;
  background: #fff; color: var(--text, #232733);
}
.fl-textarea.readonly-field, .readonly-field {
  background: var(--surface-2, #f1f2f4); color: var(--muted, #6b7180); cursor: not-allowed;
}

/* v3.43 — нередактируемый столбец «Партия (шт.)» в материалах */
.mat-batch-qty { color: var(--muted, #6b7180); background: var(--surface-2, #f7f8fa); font-weight: 600; }

/* v3.43 — габариты упаковки в строке логистики */
.pack-dims-cell { white-space: nowrap; }
.pack-dims-cell input { width: 56px; text-align: right; margin-left: 2px; }

/* ── Модуль «Маршрутные карты / Производство» (v3.46) ── */
.eng-cols { display: grid; grid-template-columns: 19% 1fr; gap: 16px; align-items: start; }
/* v4.16.012 — панель ДСЕ можно растягивать мышью как окно программы. */
.eng-cols.eng-cols-resizable {
  grid-template-columns: minmax(220px, var(--eng-dse-panel-width, 19%)) 9px minmax(0, 1fr);
  gap: 8px;
}
.eng-cols-resizable > .eng-col { min-width: 0; }
.eng-col-resizer {
  position: sticky;
  top: 12px;
  height: calc(100vh - 150px);
  min-height: 180px;
  align-self: start;
  cursor: col-resize;
  touch-action: none;
  user-select: none;
  border-radius: 5px;
  display: flex;
  align-items: center;
  justify-content: center;
  outline: none;
  transition: background .15s ease;
}
.eng-col-resizer::before {
  content: '';
  width: 3px;
  height: 48px;
  border-radius: 3px;
  background: var(--rule);
  box-shadow: 0 -7px 0 -1px var(--rule), 0 7px 0 -1px var(--rule);
  transition: background .15s ease, height .15s ease;
}
.eng-col-resizer:hover,
.eng-col-resizer:focus-visible,
.eng-cols-resizable.is-resizing .eng-col-resizer { background: var(--blue-soft); }
.eng-col-resizer:hover::before,
.eng-col-resizer:focus-visible::before,
.eng-cols-resizable.is-resizing .eng-col-resizer::before {
  background: var(--accent);
  height: 64px;
}
body.eng-col-resizing,
body.eng-col-resizing * { cursor: col-resize !important; user-select: none !important; }
.eng-col { background: var(--paper); border: 1px solid var(--rule); border-radius: 6px; padding: 8px; }
/* v4.09.001 — левая панель ДСЕ прокручивается независимо от страницы.
   Колонка «прилипает» к верху, а сам список ДСЕ имеет свою прокрутку. */
.eng-cols > .eng-col:first-child {
  position: sticky;
  top: 12px;
  max-height: calc(100vh - 150px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.eng-cols > .eng-col:first-child #eng_dse_list {
  flex: 1 1 auto;
  overflow-y: auto;
  min-height: 0;
}
.eng-col-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 4px 6px 8px; border-bottom: 1px solid var(--rule-soft); margin-bottom: 6px; }
.eng-col-head h3 { margin: 0; font-size: 15px; }
.eng-dse-item { padding: 6px 10px; border-radius: 4px; cursor: pointer; font-size: 13px; line-height: 1.4; white-space: normal; overflow-wrap: anywhere; word-break: break-word; }
.eng-dse-imp { font-size: 12px; padding: 2px 6px 8px; border-bottom: 1px solid var(--rule-soft); margin-bottom: 6px; }
.order-acts { margin-top: 4px; display: flex; gap: 10px; flex-wrap: wrap; }
.order-acts .link-btn2 { font-size: 11px; }
/* v3.108.3 — .order-acts используется и на <td> (журнал заказов, таблица этапов плана).
   display:flex на ячейке таблицы ломает её рендеринг: фон заливается не на всю высоту
   (видны «блоки»/неполная заливка). Для td — обычная ячейка, кнопки в строку. */
td.order-acts { display: table-cell; vertical-align: middle; white-space: nowrap; margin-top: 0; }
td.order-acts .link-btn2 { display: inline-block; vertical-align: middle; }
/* v3.61: материалы */
/* v3.63 П.1: эскиз + материалы в одну строку */
.eng-sketch-mat-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 14px; align-items: start; }
/* v3.69: блок материалов ДСЕ убран → эскиз занимает всю ширину */
.eng-sketch-mat-row:has(.eng-route-sketch-full) { grid-template-columns: 1fr; }
/* v3.81 (Задача 2): когда есть панель замечаний — эскиз слева, замечания справа */
.eng-sketch-mat-row:has(.eng-route-remarks) { grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); }
.eng-route-remarks { min-width: 0; }
.eng-route-remarks .rev-item { border: 1px solid var(--rule-soft); border-radius: 6px; padding: 8px 10px; margin-bottom: 8px; background: var(--paper); }
.eng-route-remarks .rev-item.rev-rejected { border-left: 3px solid #c98a14; background: #fff8ec; }
.eng-route-remarks .rev-item.rev-ok { border-left: 3px solid #2f8f4e; }
.eng-route-remarks .rev-item.rev-none { opacity: .7; }
.eng-route-remarks .rev-item-head { font-size: 12px; font-weight: 700; color: var(--ink); display: flex; gap: 8px; align-items: center; justify-content: space-between; }
.eng-route-remarks .rev-item-meta { font-size: 11px; color: var(--ink-mute); margin-top: 3px; }
.eng-route-remarks .rev-item-note { font-size: 13px; color: var(--ink); margin-top: 5px; white-space: pre-wrap; line-height: 1.4; }
.eng-route-remarks .rev-item-empty { font-size: 12px; color: var(--ink-mute); margin-top: 3px; }
.eng-route-sketch-full { max-width: 720px; }
.eng-sketch-mat-row:has(.eng-route-remarks) .eng-route-sketch-full { max-width: none; }
/* материалы операции прямо в таблице маршрута */
.route-ops-table .mat-tag,
.route-ops-table .route-resource-tag { display: inline-block; font-size: 10px; font-weight: 700; padding: 0 5px; border-radius: 8px; vertical-align: middle; }
.route-ops-table .mat-tag.mt-main { background: #e6f0ff; color: #2f5fb0; }
.route-ops-table .mat-tag.mt-aux { background: #f0ece0; color: #8a7320; }
.route-ops-table .mat-tag.mt-comp { background: #fde8e4; color: #a33a26; }
.prod-kks-missing { display: inline-block; font-size: 11px; font-weight: 600; padding: 0 6px; border-radius: 8px; background: #fde8e4; color: #a33a26; white-space: nowrap; }
/* v5.05.030 — компактный/подробный вид маршрута и скрытие дерева ДСЕ */
.route-view-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 8px 0 6px; }
.route-view-seg { display: inline-flex; }
.route-view-seg .btn-secondary { border-radius: 0; }
.route-view-seg .btn-secondary:first-child { border-radius: 6px 0 0 6px; }
.route-view-seg .btn-secondary:last-child { border-radius: 0 6px 6px 0; margin-left: -1px; }
.route-view-seg .btn-secondary.is-on { background: var(--blue-soft); font-weight: 600; }
.route-view-hint { margin-left: auto; }
.route-cols-wrap { position: relative; }
.route-cols-menu { position: absolute; z-index: 20; top: calc(100% + 4px); left: 0; min-width: 220px; padding: 8px 10px; border: 1px solid var(--rule-soft); border-radius: 8px; background: var(--paper, #fff); box-shadow: 0 6px 18px rgba(0,0,0,.12); display: grid; gap: 4px; font-size: 13px; }
.route-cols-menu label { display: flex; align-items: center; gap: 6px; cursor: pointer; }
.route-ops-table .route-op-expand { font-size: 14px; line-height: 1; }
.route-ops-table tr.route-op-detail > td { background: var(--paper-soft, rgba(127,127,127,.06)); padding: 8px 12px 10px; }
.route-op-detail-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px 18px; font-size: 12px; }
.route-op-detail-cap { font-size: 11px; font-weight: 600; color: var(--ink-mute); margin-bottom: 3px; }
.eng-cols.eng-cols-resizable.eng-dse-collapsed { grid-template-columns: minmax(0, 1fr); gap: 0; }
.eng-cols.eng-dse-collapsed > .eng-col:first-child, .eng-cols.eng-dse-collapsed > .eng-col-resizer { display: none; }
.route-ops-table .route-resource-tag.rt-equipment { background: #e5f2ec; color: #26734d; }
.route-ops-table .route-resource-tag.rt-tooling { background: #eee8f8; color: #6d4aa3; }
@media (max-width: 1100px) { .eng-sketch-mat-row { grid-template-columns: 1fr; } }
.eng-mat-block { min-width: 0; border: 1px solid var(--rule-soft); border-radius: 6px; padding: 8px 10px; background: var(--paper); }
.mat-sub { margin-bottom: 12px; }
.mat-sub h4 { margin: 6px 0; font-size: 13px; color: var(--ink-mute); }
.mat-table { font-size: 13px; }
.mat-add { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; margin-top: 6px; }
.mat-page { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: start; }
/* v4.45.030 — широкие отчётные ведомости не должны определять ширину
   grid-колонки и попадать в цикл авто-resize «таблица ↔ контейнер».
   Карточки остаются равными, а 10–12 колонок прокручиваются внутри отчёта. */
.mat-page > .mat-bom { min-width: 0; max-width: 100%; }
.bom-report-frame {
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
  overflow-x: auto;
  overflow-y: hidden;
}
.bom-report-table {
  width: 100%;
  min-width: 1080px;
  table-layout: auto;
}
.bom-controls { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin: 8px 0; }
.bom-main td { background: rgba(46, 120, 200, 0.08); }
@media (max-width: 980px) { .mat-page { grid-template-columns: 1fr; } }
.eng-dse-item:hover { background: var(--paper-soft); }
.eng-dse-item.active { background: var(--blue-soft); }
.eng-dse-type { display: inline-block; width: 16px; color: var(--ink-mute); }
.eng-sel { padding: 3px 6px; border: 1px solid var(--rule); border-radius: 4px; background: var(--paper); }
.eng-route-status { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 8px 6px; font-size: 13px; color: var(--ink-soft); }
/* v4.42.003 — компактная и логичная панель техпроцесса:
   состояние всегда слева, действия всегда справа. */
.eng-route-head-compact { align-items:center; margin-bottom:4px; padding-bottom:5px; }
.eng-route-head-compact h3 { flex:0 1 auto; min-width:0; }
.eng-route-versionbar { margin-left:auto; display:flex; align-items:center; justify-content:flex-end; gap:4px; flex-wrap:wrap; }
.eng-route-versionbar .btn-secondary { padding:3px 8px; min-height:26px; }
.eng-route-versionbar .link-btn2 { padding:2px 5px; }
.eng-route-version-select { min-height:26px; max-width:180px; }

.eng-route-control-panel {
  display:grid;
  grid-template-columns:minmax(360px, 1fr) minmax(520px, auto);
  align-items:start;
  gap:8px 14px;
  padding:5px 6px 6px;
  border-bottom:1px solid var(--rule-soft);
}
.eng-route-state-panel { min-width:0; display:flex; flex-direction:column; gap:3px; }
.eng-route-state-line { display:flex; align-items:center; gap:5px 8px; flex-wrap:wrap; min-height:24px; font-size:12px; color:var(--ink-soft); }
.eng-route-state-key { font-weight:700; color:var(--ink); min-width:62px; }
.eng-route-state-item { display:inline-flex; align-items:center; gap:5px; white-space:nowrap; }
.eng-route-state-divider { width:1px; height:16px; background:var(--rule); margin:0 2px; }
.eng-route-state-meta { max-width:160px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--ink-mute); font-size:11px; }
.eng-route-state-hint { color:var(--ink-mute); font-size:11px; line-height:1.25; padding-left:70px; }

.eng-route-command-panel { display:flex; flex-direction:column; align-items:flex-end; gap:3px; min-width:0; }
.eng-route-command-row { display:flex; align-items:center; justify-content:flex-end; gap:4px; flex-wrap:wrap; }
.eng-route-command-row + .eng-route-command-row { padding-top:3px; border-top:1px solid var(--rule-soft); }
.eng-route-command-row .btn-secondary,
.eng-route-command-row .btn-primary { padding:3px 7px; min-height:26px; line-height:1.15; }
.eng-route-command-primary .btn-primary { font-weight:700; }
.eng-route-command-service .btn-secondary { font-size:12px; }
.eng-route-validation-box:empty { display:none; }
.eng-route-validation-line details { flex:1 1 100%; margin-left:70px; font-size:11px; color:var(--ink-mute); }
.eng-route-validation-line summary { cursor:pointer; width:max-content; }
.eng-route-validation-line ul { margin:4px 0 0 18px; padding:0; color:var(--ink-soft); }

@media (max-width: 1100px) {
  .eng-route-control-panel { grid-template-columns:1fr; }
  .eng-route-command-panel { align-items:flex-start; }
  .eng-route-command-row { justify-content:flex-start; }
}
@media (max-width: 900px) {
  .eng-route-head-compact { flex-direction:column; align-items:stretch; }
  .eng-route-versionbar { margin-left:0; justify-content:flex-start; }
  .eng-route-state-hint { padding-left:0; }
}
.eng-ops-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.eng-ops-scroll { overflow-x: auto; }
.eng-ops-table th, .eng-ops-table td { white-space: nowrap; }
/* v3.59: маршрут — фиксированные колонки с переносом текста, без горизонтальной прокрутки */
.route-ops-table { table-layout: fixed; }
.route-ops-table th, .route-ops-table td { white-space: normal; overflow-wrap: anywhere; word-break: break-word; vertical-align: top; }
/* v3.104 (П.6): заголовки столбцов маршрута — в одну строку без переноса
   (в частности «В паспорт»); перенос оставляем только для ячеек данных. */
.route-ops-table thead th { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-left: 5px; padding-right: 5px; }
/* v3.57: цветовая индикация состояний операций в производстве */
.prod-ops-table td { vertical-align: top; }
.prod-ops-table .small { font-size: 11px; }
tr.prow-ok   td { background: rgba(46, 160, 67, 0.16); }   /* принята — зелёный */
tr.prow-sub  td { background: rgba(240, 200, 0, 0.20); }   /* сдана на контроль — жёлтый */
tr.prow-none td { background: rgba(210, 60, 60, 0.14); }   /* не сдана — красный */
.prod-legend { display: flex; gap: 14px; margin: 6px 2px 10px; font-size: 12px; flex-wrap: wrap; }
.prod-legend .leg { display: inline-flex; align-items: center; gap: 6px; color: var(--ink-soft); }
.prod-legend .leg::before { content: ''; width: 12px; height: 12px; border-radius: 3px; display: inline-block; }
.prod-legend .leg-none::before { background: rgba(210, 60, 60, 0.45); }
.prod-legend .leg-sub::before  { background: rgba(240, 200, 0, 0.6); }
.prod-legend .leg-ok::before   { background: rgba(46, 160, 67, 0.5); }
.eng-ops-table th, .eng-ops-table td { border-bottom: 1px solid var(--rule-soft); padding: 6px 8px; text-align: left; }
/* v3.71 П.4 — вертикальные линии между всеми столбцами таблиц техпроцесса */
.eng-ops-table { border: 1px solid var(--rule); }
.eng-ops-table th, .eng-ops-table td { border-right: 1px solid var(--rule-soft); }
.eng-ops-table th:last-child, .eng-ops-table td:last-child { border-right: none; }
.eng-ops-table thead th { border-bottom: 1px solid var(--rule); background: var(--paper-soft); }
.eng-ops-table th { color: var(--ink-mute); font-weight: 600; }
.eng-ops-table td.num, .eng-ops-table td.center, .eng-ops-table th:nth-child(4), .eng-ops-table th:nth-child(5), .eng-ops-table th:nth-child(6) { text-align: center; }
/* v3.55: маршрут (≈2/3) + эскиз ДСЕ (≈1/3) справа, один на всю ДСЕ */
/* v3.63 П.1/П.5: эскиз внутри eng-sketch-mat-row, растягиваемый */
.eng-route-split { display: flex; flex-direction: column; gap: 12px; }
.eng-route-main { min-width: 0; }
.eng-route-sketch {
  border: 1px solid var(--rule-soft); border-radius: 6px; padding: 8px;
  background: var(--paper);
  resize: vertical; overflow: auto;
  min-height: 160px;
}
.eng-sketch-cap { font-size: 12px; color: var(--ink-mute); font-weight: 600; margin-bottom: 6px; }
.eng-sketch-img { width: 100%; height: auto; border-radius: 4px; display: block; }
.eng-sketch-drop {
  border-radius: 4px; outline: none;
  aspect-ratio: 16 / 9;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden; background: var(--paper-soft, transparent);
  border: 1px dashed var(--rule); width: 100%;
}
.eng-sketch-drop .eng-sketch-img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; }
.eng-sketch-empty { color: var(--ink-mute); font-size: 13px; text-align: center; padding: 20px 8px; }
.eng-sketch-drop.editable { cursor: pointer; }
.eng-sketch-drop.editable:focus { box-shadow: inset 0 0 0 2px var(--accent, #2F5496); }
.eng-sketch-drop.dragover { box-shadow: inset 0 0 0 2px var(--accent, #2F5496); }
/* v3.92 — несколько эскизов ДСЕ */
.eng-sketch-list { display: flex; flex-direction: column; gap: 12px; }
.eng-sketch-window { border: 1px solid var(--rule-soft); border-radius: 6px; padding: 6px; background: var(--paper); }
.eng-sketch-window-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px; }
.eng-sketch-window-no { font-size: 11px; font-weight: 600; color: var(--ink-mute); text-transform: uppercase; letter-spacing: .5px; }
.eng-sketch-window .eng-sketch-drop { aspect-ratio: 16 / 9; }
.link-btn { background: none; border: none; color: var(--accent); cursor: pointer; font-size: 14px; }
.link-btn:hover { color: var(--accent-dark); }
@media (max-width: 980px) {
  .eng-cols, .eng-cols.eng-cols-resizable { grid-template-columns: 1fr; }
  .eng-col-resizer { display: none; }
}

/* ── Производство: вкладки, состояния, мини-кнопки ── */
.eng-tabs { display: flex; gap: 4px; border-bottom: 2px solid var(--rule); margin-bottom: 12px; }
.ws-tabs { margin-top: 10px; }
.eng-tab { background: none; border: none; padding: 8px 16px; cursor: pointer; font-size: 14px; color: var(--ink-soft); border-bottom: 2px solid transparent; margin-bottom: -2px; }
.eng-tab:hover { color: var(--ink); }
.eng-tab.active { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }
.prod-cols, .prod-new { display: grid; }
.prod-cols { grid-template-columns: 320px 1fr; gap: 16px; align-items: start; }
.prod-new { grid-template-columns: 1fr auto auto auto; gap: 8px; margin-bottom: 12px; }
.eng-inp { padding: 5px 8px; border: 1px solid var(--rule); border-radius: 4px; background: var(--paper); }
.btn-mini { padding: 3px 10px; border: 1px solid var(--rule); border-radius: 4px; background: var(--paper); cursor: pointer; font-size: 12px; margin: 1px; }
.btn-mini:hover { background: var(--paper-soft); }
.btn-mini.ok { border-color: var(--green); color: var(--green); }
.btn-mini.warn { border-color: var(--accent); color: var(--accent); }
.pstate { font-size: 12px; padding: 2px 8px; border-radius: 10px; background: var(--rule-soft); color: var(--ink-soft); }
.pstate.sub { background: var(--blue-soft); color: var(--blue); }
.pstate.ok { background: #e6f4ea; color: var(--green); }
.pstate.warn { background: var(--accent-soft); color: var(--accent-dark); }
.anom-block { margin-bottom: 20px; }
.anom-block h3 { margin: 0 0 2px; font-size: 15px; }
@media (max-width: 980px) { .prod-cols { grid-template-columns: 1fr; } .prod-new { grid-template-columns: 1fr; } }

/* v3.67 П.1 — единое окно заказов производства (одна таблица) */
.prod-single { margin-top: 4px; }
.prod-orders-table { width: 100%; }
.prod-orders-table tr.prod-order-row { cursor: pointer; }
.prod-orders-table tr.prod-order-row:hover { background: var(--paper-soft); }
.prod-orders-table td { vertical-align: middle; }
.prod-orders-table .order-acts { white-space: nowrap; }
.prod-status-tag { font-size: 12px; padding: 2px 9px; border-radius: 10px; background: var(--rule-soft); color: var(--ink-soft); white-space: nowrap; }
.prod-status-tag.st-open { background: var(--rule-soft); color: var(--ink-soft); }
.prod-status-tag.st-in_progress { background: var(--blue-soft); color: var(--blue); }
.prod-status-tag.st-done { background: #e6f4ea; color: var(--green); }
.prod-status-tag.st-closed { background: var(--accent-soft); color: var(--accent-dark); }
.prod-status-tag.st-archived { background: #ececec; color: #888; }

/* v3.67 П.2 — фильтры журнала сдачи */
.ws-filters { display: flex; align-items: center; gap: 10px; padding: 10px 0; flex-wrap: wrap; }
.ws-filters .search-input { max-width: 280px; }

/* v3.68 П.7 — журнал заказов в стиле журнала БС, на всю ширину */
.prod-journal-head { display: flex; align-items: center; justify-content: space-between; margin: 4px 0 8px; }
.prod-journal-head h3 { margin: 0; }
.prod-journal-table { width: 100%; }
.prod-journal-table tbody tr.prod-order-row { cursor: pointer; }
.prod-journal-table tbody tr.prod-order-row:hover { background: var(--paper-soft, #f4f7fc); }
.prod-journal-table td.mono { font-family: ui-monospace, "SF Mono", Menlo, monospace; }
.prod-journal-table col.prod-actions-col { width: 286px; }
.prod-journal-table th.prod-actions-col,
.prod-journal-table td.order-acts { min-width: 270px; }
.order-actions-bar {
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  white-space: nowrap;
}
.order-action-btn,
.order-toggle-btn {
  min-height: 34px;
  border: 1px solid var(--rule);
  border-radius: 7px;
  background: var(--paper);
  color: var(--ink-soft);
  cursor: pointer;
  font: inherit;
  transition: border-color .15s, background .15s, color .15s, transform .15s;
}
.order-action-btn {
  width: 34px;
  min-width: 34px;
  padding: 0;
  font-size: 17px;
  line-height: 1;
}
.order-toggle-btn {
  min-width: 86px;
  padding: 0 10px;
  font-size: 12px;
  font-weight: 700;
}
.order-action-btn:hover,
.order-toggle-btn:hover {
  border-color: var(--blue);
  background: var(--blue-soft);
  color: var(--blue);
  transform: translateY(-1px);
}
.order-toggle-btn.is-on { border-color: rgba(47,143,78,.45); color: var(--green); }
.order-toggle-btn.is-off { border-color: rgba(192,42,43,.45); color: var(--accent); }
.order-action-btn.danger { color: #c0392b; }
.order-action-btn.danger:hover { border-color: #c0392b; background: rgba(192,57,43,.08); color: #e74c3c; }
.prod-enabled-tag {
  display: inline-flex;
  margin-top: 4px;
  padding: 2px 7px;
  border-radius: 999px;
  font-size: 10px;
  font-weight: 700;
  white-space: nowrap;
}
.prod-enabled-tag.is-enabled { color: var(--green); background: rgba(47,143,78,.10); }
.prod-enabled-tag.is-disabled { color: var(--accent); background: rgba(192,42,43,.10); }

/* v3.68 П.6 — панель управления аномалиями */
.anom-toolbar { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 12px; padding-bottom: 8px; border-bottom: 1px solid var(--rule-soft, #e3e8f0); }
.anom-check { font-size: 13px; color: var(--ink-soft, #55617a); display: inline-flex; align-items: center; gap: 5px; cursor: pointer; }
.anom-acts { white-space: nowrap; }
.anom-block .eng-ops-table td:last-child { width: 1%; white-space: nowrap; }

/* v3.68 П.8 — переключатель архива головных изделий */
.eng-prod-archtoggle { padding: 4px 8px 8px; }
#eng_product_list .dict-list-item { display: flex; align-items: center; gap: 6px; }
.ws-head { align-items: center; }
#ws_refresh { margin-left: auto; white-space: nowrap; }

/* ── Модуль: одноколоночный режим (вкладки Производство/Аномалии) ── */
#view-eng .dicts-layout.no-sidebar { grid-template-columns: 1fr; }
#view-eng .dicts-layout.no-sidebar .dicts-sidebar { display: none; }
/* Шапка сайдбара «Изделия» + кнопка */
#view-eng .dicts-sidebar > div:first-child { padding: 0 16px 12px; }
#view-eng .dicts-sidebar h3 { padding: 0; }
#view-eng .dicts-sidebar .btn-secondary { padding: 4px 10px; font-size: 12px; white-space: nowrap; }
#eng_product_list .dict-list-item { line-height: 1.35; white-space: normal; overflow-wrap: anywhere; word-break: break-word; padding: 8px 12px; }

/* ── Стартовая страница (выбор модуля) ── */
.home-wrap { max-width: 920px; margin: 0 auto; padding: 64px 24px; text-align: center; }
.home-title { font-size: 30px; margin: 0 0 6px; color: var(--ink); }
.home-sub { color: var(--ink-soft); margin: 0 0 40px; font-size: 15px; }
.home-cards { display: flex; flex-wrap: wrap; justify-content: center; gap: 20px; }
.home-card {
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  flex: 0 1 260px; max-width: 280px;
  padding: 36px 20px; background: var(--paper); border: 1px solid var(--rule);
  border-radius: 10px; cursor: pointer; transition: all .15s; text-align: center;
}
.home-card:hover { border-color: var(--accent); box-shadow: 0 6px 20px rgba(0,0,0,.08); transform: translateY(-2px); }
.home-card-ico { font-size: 40px; line-height: 1; }
.home-card-name { font-size: 19px; font-weight: 600; color: var(--ink); }
.home-card-desc { font-size: 13px; color: var(--ink-soft); }
@media (max-width: 760px) { .home-card { flex-basis: 100%; max-width: 360px; } }

/* v4.03.001 — панель и режим изменения порядка плиток */
.home-toolbar { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 10px; margin: 0 0 24px; }
.home-reorder-hint { font-size: 13px; color: var(--ink-soft); }
.home-cards.reordering .home-card { cursor: grab; border-style: dashed; border-color: var(--accent); }
.home-cards.reordering .home-card:hover { transform: none; box-shadow: none; }
.home-cards.reordering .home-card.dragging { opacity: .5; cursor: grabbing; }
.home-cards.reordering .home-card.drag-over { outline: 2px solid var(--accent); outline-offset: 2px; }

/* ── Рабочее место заказа (цеховая стойка: крупные элементы) ── */
.ws-wrap { max-width: 1100px; margin: 0 auto; padding: 20px 24px; }
/* v3.71 П.5 — журнал операций на всю ширину экрана (как журнал заказов) */
#view-workspace .ws-wrap { max-width: none; }
.ws-list-meta { font-size: 12px; color: var(--ink-soft, #55617a); margin: 6px 2px 8px; }
.ws-journal-table .ws-act { white-space: nowrap; }
.ws-head { display: flex; align-items: center; gap: 16px; margin-bottom: 16px; }
.ws-head-info { flex: 1; }
.ws-head-info h1 { margin: 0 0 6px; font-size: 24px; }
.ws-progress { display: flex; align-items: center; gap: 12px; }
.ws-progress-track { flex: 1; max-width: 360px; height: 12px; background: var(--rule-soft); border-radius: 6px; overflow: hidden; }
.ws-progress-bar { height: 100%; background: var(--green); width: 0; transition: width .3s; }
.ws-progress span { font-size: 14px; color: var(--ink-soft); }
.ws-docs { display: flex; align-items: center; gap: 10px; padding: 12px 0; border-top: 1px solid var(--rule-soft); border-bottom: 1px solid var(--rule-soft); margin-bottom: 16px; flex-wrap: wrap; }
.ws-docs-label { color: var(--ink-mute); font-size: 14px; }
.ws-doc-btn { padding: 8px 16px; border: 1px solid var(--rule); border-radius: 6px; background: var(--paper); font-size: 15px; cursor: pointer; }
.ws-doc-btn:disabled { opacity: .5; cursor: not-allowed; }
.ws-doc-btn:not(:disabled):hover { border-color: var(--accent); }
.ws-card-wrap { overflow-x: auto; }
.ws-card { width: 100%; border-collapse: collapse; font-size: 16px; }
.ws-card th, .ws-card td { padding: 12px 14px; border-bottom: 1px solid var(--rule-soft); text-align: left; }
.ws-card th { font-size: 13px; color: var(--ink-mute); text-transform: uppercase; letter-spacing: .04em; }
.ws-card td.num, .ws-card td.center, .ws-card th:nth-child(4), .ws-card th:nth-child(5), .ws-card th:nth-child(6), .ws-card th:nth-child(7) { text-align: center; }
.ws-act { padding: 8px 18px; border: 1px solid var(--rule); border-radius: 6px; background: var(--paper); cursor: pointer; font-size: 15px; margin: 2px; }
.ws-act:hover { background: var(--paper-soft); }
.ws-act.ok { border-color: var(--green); color: var(--green); }
.ws-act.warn { border-color: var(--accent); color: var(--accent); }

/* ── Кнопки правки в дереве ДСЕ и заголовках ── */
.dse-acts { float: right; opacity: 0; transition: opacity .12s; white-space: nowrap; }
.eng-dse-item:hover .dse-acts { opacity: 1; }
.eng-dse-item { position: relative; }
#eng_main_title .link-btn { font-size: 15px; vertical-align: middle; }

/* ── Ссылки на справочники модуля в разделе техпроцесса ── */
.eng-dict-hint { padding: 10px 12px; margin-top: 6px; border-top: 1px solid var(--rule-soft); font-size: 12px; }
.link-btn2 { background: none; border: none; color: var(--blue); cursor: pointer; font-size: 12px; padding: 0; text-decoration: underline; }
.link-btn2:hover { color: var(--accent); }

/* ── Дерево ДСЕ с раскрытием + картинка ── */
.dse-toggle { display: inline-block; width: 14px; cursor: pointer; color: var(--ink-mute); font-size: 10px; user-select: none; }
.dse-toggle.empty { cursor: default; }
.dse-hasimg { margin-left: 4px; font-size: 11px; opacity: .7; }
.eng-dse-item { display: flex; align-items: flex-start; gap: 4px; }
.eng-dse-item .dse-acts { margin-left: auto; }
/* v3.91 — обозначение сверху, наименование снизу */
.eng-dse-cap { display: flex; flex-direction: column; min-width: 0; flex: 1 1 auto; }
.eng-dse-desig { font-weight: 600; }
.eng-dse-name { color: var(--ink-mute); font-size: 12px; line-height: 1.25; }
.eng-dse-item .eng-dse-type { margin-top: 1px; }
.eng-dse-item .dse-qty,
.eng-dse-item .dse-hasimg { margin-top: 1px; }

/* v3.63 П.2: поиск материала с выпадающим списком */
.mat-search-wrap { position: relative; flex: 1; min-width: 200px; }
.mat-search { width: 100%; }
.mat-search-drop {
  position: absolute; top: 100%; left: 0; right: 0; z-index: 200;
  background: var(--paper, #fff); border: 1px solid var(--rule); border-top: none;
  border-radius: 0 0 6px 6px; max-height: 260px; overflow-y: auto;
  box-shadow: 0 4px 16px rgba(0,0,0,.12);
}
.mat-drop-item {
  padding: 5px 10px; cursor: pointer; font-size: 12px; line-height: 1.4;
  border-bottom: 1px solid var(--rule-soft);
}
.mat-drop-item:hover { background: var(--accent-soft, #e8eef8); }
.mat-drop-empty { padding: 8px 10px; color: var(--ink-mute); font-size: 12px; font-style: italic; }
.mat-grade { color: var(--accent, #2F5496); font-size: 11px; }
.mat-size  { color: var(--ink-mute); font-size: 11px; }
.mat-code  { color: var(--ink-mute); font-size: 11px; }
.mat-add { display: flex; gap: 6px; align-items: flex-start; flex-wrap: wrap; margin-top: 8px; }


/* ════════════════════════════════════════════════════════════════
   v3.74 — План-факт (БС × производство)
   ════════════════════════════════════════════════════════════════ */
.planfact-bs-badge {
  display: inline-block; margin-left: 8px; padding: 1px 6px;
  font-size: 11px; border-radius: 8px;
  background: #eef2f7; color: var(--accent, #2F5496); white-space: nowrap;
}
.planfact-head { margin: 4px 0 14px; }
.planfact-summary {
  display: flex; flex-wrap: wrap; gap: 18px; align-items: center;
  padding: 12px 16px; margin-bottom: 18px;
  background: #f7f9fc; border: 1px solid var(--line, #e3e8ef); border-radius: 10px;
}
.pf-sum-item { display: flex; flex-direction: column; gap: 2px; }
.pf-sum-lbl { font-size: 11px; color: var(--ink-mute, #667); text-transform: uppercase; letter-spacing: .03em; }
.pf-sum-val { font-size: 17px; font-weight: 600; }
.pf-band { display: inline-block; padding: 4px 12px; border-radius: 14px; font-size: 13px; font-weight: 600; }
.pf-band-ok   { background: #e8f0e9; color: var(--green, #2e6e3c); }
.pf-band-warn { background: #fdf3e0; color: #9a6a13; }
.pf-band-bad  { background: #fdeaea; color: #b3261e; }
.pf-band-none { background: #eef0f3; color: #667; }
.planfact-pos { margin-bottom: 22px; }
.planfact-pos-head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 6px; }
.planfact-pos-head h4 { margin: 0; }
.planfact-table { width: 100%; }
.planfact-table col.pf-num { width: 16%; }
.planfact-table td.right, .planfact-table th.right { text-align: right; }
.planfact-table .pf-over  { color: #b3261e; }   /* недозаложили: факт > план */
.planfact-table .pf-under { color: var(--green, #2e6e3c); } /* перезаложили: факт < план (экономия) */
.planfact-table .pf-neutral { color: var(--ink-mute, #667); }
.planfact-table tr.pf-total td { font-weight: 700; border-top: 2px solid var(--line, #cfd6e0); background: #f7f9fc; }
.pf-flat { color: var(--ink-mute, #889); cursor: help; }

/* ════════════════════════════════════════════════════════════════
   v3.75 — Планирование (Гантт) и Проекты (чек-лист)
   ════════════════════════════════════════════════════════════════ */
.gantt-wrap { margin: 8px 0 6px; border: 1px solid var(--line, #e3e8ef); border-radius: 10px; padding: 10px 12px; background: #fbfcfe; overflow-x: auto; }
.gantt-svg { width: 100%; min-width: 720px; height: auto; font-family: inherit; }
.gantt-lbl { font-size: 12px; fill: var(--ink, #243); }
.gantt-tick { font-size: 10px; fill: var(--ink-mute, #889); text-anchor: middle; }
.gantt-grid { stroke: #e7ecf3; stroke-width: 1; }
.gantt-bar-approved { fill: var(--accent, #2F5496); }
.gantt-bar-proposed { fill: none; stroke: #b9a44a; stroke-width: 1.5; stroke-dasharray: 4 3; }
.gantt-legend { font-size: 12px; color: var(--ink-mute, #667); margin-top: 6px; }
.gantt-legend .gl-approved { color: var(--accent, #2F5496); }
.gantt-legend .gl-proposed { color: #b9a44a; }
/* v3.81 (Задача 3) — Гантт по дням: подписи секций, полосы статусов */
.gantt-lbl.gantt-section { font-weight: 700; fill: var(--ink, #243); font-size: 12px; }
.gantt-bar-draft { fill: #c2ccd9; }
.gantt-svg rect.gantt-bar-proposed { fill: #efe4ad; stroke: #b9a44a; stroke-width: 1; stroke-dasharray: none; }
.plan-table .plan-section-row td { background: #eef2f8; font-weight: 700; color: var(--ink, #243); }
.plan-table .plan-dur-inp { width: 64px; text-align: center; padding: 3px 4px; border: 1px solid var(--line, #d3dae5); border-radius: 5px; font: inherit; }
.plan-table .plan-dur-cell { white-space: nowrap; }
/* v3.83 — Гант с ФИКСИРОВАННЫМ масштабом: SVG в собственных пикселях, без
   растягивания на 100% ширины (иначе шрифт «дышал» от числа строк). Подписи —
   фиксированным кеглем, как основной текст листа. Прокрутка — на обёртке. */
.gantt-fixed { max-height: 460px; overflow: auto; }
.gantt-svg-fixed { display: block; font-family: inherit; }
.gantt-svg-fixed .gantt-lbl { font-size: 13px; fill: var(--ink, #243); }
.gantt-svg-fixed .gantt-tick { font-size: 11px; fill: var(--ink-mute, #889); }
.gantt-svg-fixed .gantt-grid { stroke: #e7ecf3; stroke-width: 1; }
.gantt-svg-fixed .gantt-bar-approved { fill: var(--accent, #2F5496); }
.gantt-svg-fixed .gantt-bar-proposed { fill: #efe4ad; stroke: #b9a44a; stroke-width: 1; }
.gantt-svg-fixed .gantt-bar-draft { fill: #c2ccd9; }
.plan-table .plan-dep-sel { max-width: 200px; padding: 3px 4px; border: 1px solid var(--line, #d3dae5); border-radius: 5px; font: inherit; font-size: 12px; }
.plan-table .plan-dep-cell { font-size: 12px; }
/* v4.29.002 — неподвижная рамка и внутренняя прокрутка широких таблиц
   планирования. Правая и нижняя границы теперь не обрезаются. */
.planning-table-frame {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  margin-top: 14px;
  overflow-x: auto;
  border: 1px solid var(--rule, #d8dee7);
  border-radius: 8px;
  background: var(--paper, #fff);
  box-shadow: var(--shadow-sm);
}
.planning-table-frame > .plan-table {
  width: 100%;
  margin: 0 !important;
  border: 0;
  border-radius: 0;
  box-shadow: none;
}
.planning-table-bs > .plan-table { min-width: 780px; }
.planning-table-order > .plan-table { min-width: 1560px; }
.planning-table-overview > .plan-table { min-width: 980px; }
.planning-table-frame .plan-table th,
.planning-table-frame .plan-table td {
  border-right: 1px solid var(--rule-soft, #e8edf3);
}
.planning-table-frame .plan-table th:last-child,
.planning-table-frame .plan-table td:last-child { border-right: 0; }
.planning-table-frame .plan-table tbody tr:last-child td { border-bottom: 0; }
.planning-table-order { margin-top: 8px; }
.oplan-toolbar,
.oplan-workflow,
.oplan-baserow,
.gantt-wrap { max-width: 100%; min-width: 0; }
/* v3.81 — компактный Гантт устарел (заменён фиксированным масштабом v3.83). */
.proj-progress { flex: 1; min-width: 180px; height: 10px; background: #e7ecf3; border-radius: 6px; overflow: hidden; }
.proj-progress-fill { height: 100%; background: var(--green, #2e6e3c); transition: width .2s; }
tr.proj-done td { color: var(--ink-mute, #889); }
tr.proj-done td:nth-child(2) { text-decoration: line-through; }

/* ════════════════════════════════════════════════════════════════
   v3.76 — Метрология (реестр СИ, поверки)
   ════════════════════════════════════════════════════════════════ */
.metro-table tr.metro-row-overdue td,
.metro-table tr.metro-row-rejected td { background: #fdecec; }
.metro-table tr.metro-row-soon td { background: #fdf6e6; }
.metro-table tr.metro-row-overdue:hover td,
.metro-table tr.metro-row-rejected:hover td { background: #fbe0e0; }
.metro-table tr.metro-row-soon:hover td { background: #fbeecf; }
.form-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; margin: 6px 0 4px; }
.form-grid2 .field { display: flex; flex-direction: column; gap: 3px; }
.form-grid2 .field > span { font-size: 12px; color: var(--ink-mute, #667); }
.form-grid2 .wide-2 { grid-column: span 2; }
@media (max-width: 640px) {
  .form-grid2 { grid-template-columns: 1fr; }
  .form-grid2 .wide-2 { grid-column: auto; }
}

/* v3.79 — аккуратная форма добавления СИ (сетка с подписями) */
.metro-add { border: 1px solid var(--rule); border-radius: 8px; background: var(--paper);
  padding: 12px 14px; margin-bottom: 14px; }
.metro-add-head { display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 10px; }
.metro-add-title { font-weight: 600; font-size: 13px; color: var(--ink, #223); }
.metro-add-tools { display: flex; gap: 12px; }
.metro-add-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px 14px; align-items: end; }
.metro-fld { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.metro-fld > span { font-size: 11.5px; color: var(--ink-mute, #667); }
.metro-fld .eng-inp { width: 100%; box-sizing: border-box; }
.metro-fld-sm { max-width: 120px; }
.metro-fld-wide { grid-column: span 2; }
.metro-fld-btn { justify-content: flex-end; align-self: end; }
.metro-fld-btn .btn-primary { width: 100%; }
@media (max-width: 1100px) { .metro-add-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) {
  .metro-add-grid { grid-template-columns: 1fr; }
  .metro-fld-wide { grid-column: auto; }
}

/* v4.41.001 — сводный реестр СИ и карточка средства измерения. */
.metro-registry-head { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin-bottom:10px; }
.metro-registry-summary { margin:0; flex:1 1 420px; }
.metro-registry-actions { display:flex; align-items:center; justify-content:flex-end; gap:5px; flex-wrap:wrap; }
.metro-registry-actions .btn-secondary, .metro-registry-actions .btn-primary { padding:4px 8px; min-height:28px; }
.metro-table-scroll { overflow:auto; max-height:calc(100vh - 300px); min-height:220px; padding-bottom:0; border:1px solid var(--rule); border-radius:7px; background:var(--paper); }
.metro-table { min-width:900px; margin:0; }
.metro-table th, .metro-table td { vertical-align:middle; }
.metro-table th { white-space:normal; min-width:110px; }
.metro-table thead tr:first-child th { white-space:nowrap; height:34px; box-sizing:border-box; }
.metro-table th:nth-child(1), .metro-table td:nth-child(1) { min-width:210px; }
.metro-table th:nth-child(2), .metro-table td:nth-child(2) { min-width:160px; }
.metro-table th:nth-child(3), .metro-table td:nth-child(3) { min-width:130px; }
.metro-table th:nth-child(4), .metro-table td:nth-child(4),
.metro-table th:nth-child(5), .metro-table td:nth-child(5) { min-width:150px; }
.metro-table th:nth-child(6), .metro-table td:nth-child(6) { min-width:150px; }
.metro-table th:nth-child(7), .metro-table td:nth-child(7) { min-width:160px; }
.metro-table thead tr:first-child th { position:sticky; top:0; z-index:5; }
.metro-table thead tr.filter-row th { position:sticky; top:34px; z-index:6; box-shadow:0 1px 0 var(--rule); }
.metro-table .metro-col-filter { min-width:0; width:100%; }
.metro-filter-reset { white-space:nowrap; }
.metro-name-cell { font-weight:600; }
.metro-bulk-toolbar { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:10px 0; }
.metro-bulk-toolbar label { display:flex; align-items:center; gap:6px; }
.metro-bulk-toolbar .eng-inp { width:auto; }
.metro-bulk-toolbar input[type="number"] { width:100px; }
.metro-table input[type="checkbox"] { width:16px; height:16px; vertical-align:middle; cursor:pointer; }
.metro-cert-link { white-space:nowrap; }

.metro-card-modal { z-index:1100; }
.metro-card-shell { width:min(1120px, 96vw); max-width:1120px; max-height:92vh; overflow:auto; }
.metro-card-titlebar { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; padding-bottom:10px; border-bottom:1px solid var(--rule-soft); }
.metro-card-titlebar h3 { margin:0 0 3px; }
.metro-card-layout { display:grid; grid-template-columns:260px minmax(0, 1fr); gap:18px; padding:16px 0 8px; align-items:start; }
.metro-card-photo-panel { min-width:0; display:flex; flex-direction:column; gap:7px; position:sticky; top:0; }
.metro-card-photo-frame { width:100%; aspect-ratio:4 / 3; border:1px solid var(--rule); border-radius:8px; overflow:hidden; background:var(--paper-soft); display:flex; align-items:center; justify-content:center; }
.metro-card-photo { width:100%; height:100%; object-fit:contain; background:var(--paper-soft); }
.metro-card-photo-empty { color:var(--ink-mute); display:flex; flex-direction:column; align-items:center; gap:5px; text-align:center; }
.metro-card-photo-empty span { font-size:42px; line-height:1; opacity:.65; }
.metro-card-photo-empty b { color:var(--ink-soft); }
.metro-card-photo-empty small { font-size:11px; }
.metro-photo-btn { width:100%; text-align:center; justify-content:center; }
.metro-card-form { min-width:0; }
.metro-card-fields { margin:0; }
.metro-card-note { min-height:84px; resize:vertical; }
.metro-cert-field { display:flex; align-items:center; gap:8px; }
.metro-cert-field .eng-inp { min-width:0; flex:1; }
.metro-card-meta { margin-top:10px; font-size:11px; color:var(--ink-mute); }
.metro-card-actions { border-top:1px solid var(--rule-soft); padding-top:10px; margin-top:8px; }
@media (max-width: 820px) {
  .metro-card-layout { grid-template-columns:1fr; }
  .metro-card-photo-panel { position:static; max-width:360px; }
  .metro-table-scroll { max-height:calc(100vh - 240px); }
}

/* v3.104 (П.4) — планирование по заказу: подсветка строк-черновиков */
.oplan-draft-row td { background: #fdf6e6; }
.oplan-draft-row:hover td { background: #fbeecf; }

/* v3.106 — план-факт, факт-полоса Гантта, лист согласования */
.gantt-bar-fact { fill: #e0a13c; }
.gantt-svg-fixed .gantt-bar-fact { fill: #e0a13c; }
.gantt-svg-fixed .gantt-fact-marker { fill: #e0a13c; stroke: #9a6515; stroke-width: 1; }
.gantt-svg-fixed .gantt-section-band { fill: #eef2f8; }
.gantt-svg-fixed .gantt-lbl.gantt-section { font-weight: 700; fill: #2F5496; font-size: 12.5px; }
/* v4.35.001 — строки планирования читаемы после сужения колонок:
   длинные названия переносятся, а пары дат переходят на следующую строку. */
.planning-table-order .plan-table th,
.planning-table-order .plan-table td {
  white-space: normal;
  overflow-wrap: anywhere;
  word-break: normal;
  vertical-align: top;
}
.planning-table-order .oplan-stage-cell { min-width: 190px; max-width: 360px; line-height: 1.35; }
/* v4.43.007 — компактная отдельная графа порядкового номера этапа. */
.planning-table-order .oplan-no-head,
.planning-table-order .oplan-no-cell { width: 44px; min-width: 44px; max-width: 44px; padding-left: 4px; padding-right: 4px; white-space: nowrap; }
.oplan-next-no { display:inline-flex; align-items:center; justify-content:center; min-width:42px; height:30px; padding:0 8px; border:1px solid var(--line, #dfe5ec); border-radius:7px; background:var(--paper-soft, #f5f7fa); color:var(--ink-soft, #52606f); font-weight:700; }
.planning-table-order .oplan-item-cell { min-width: 220px; max-width: 390px; line-height: 1.35; }
.planning-table-order .oplan-window-cell { min-width: 155px; text-align: center; }
.planning-table-order .plan-dur-cell,
.planning-table-order .order-acts { white-space: nowrap; vertical-align: middle; }
.oplan-plan-cell,
.oplan-fact-cell { display: flex; flex-wrap: wrap; gap: 5px;
  align-items: center; justify-content: center; min-width: 0; width: 100%; }
.oplan-plan-cell.is-manual { padding: 3px; border-radius: 6px; background: #eef6ff; }
html[data-theme="dark"] .oplan-plan-cell.is-manual { background: rgba(88, 142, 214, .16); }
.oplan-date-inp { flex: 1 1 138px; width: 145px; min-width: 128px; max-width: 165px; box-sizing: border-box;
  font: inherit; font-size: 12px; font-variant-numeric: tabular-nums; padding: 4px 5px;
  border: 1px solid var(--line, #cfd7e0); border-radius: 5px; }
.oplan-date-save { flex: 0 0 30px; width: 30px; height: 28px; padding: 0; border: 1px solid var(--line, #cfd7e0);
  border-radius: 5px; background: var(--paper, #fff); cursor: pointer; }
.oplan-date-save:hover { border-color: var(--accent, #2F5496); background: #eef3fb; }
.plan-table .oplan-link-sel { width: 100%; min-width: 240px; max-width: 440px; }
.plan-table .oplan-item-sel { width: 100%; min-width: 210px; max-width: 390px; }
.oplan-new-link { min-width: 300px; max-width: 480px; }
.oplan-new-item { min-width: 260px; max-width: 460px; }
.oplan-workflow { border: 1px solid var(--line, #e3e8ef); border-radius: 8px; padding: 10px 14px;
  margin: 4px 0 12px; background: #f8fafc; }
.oplan-workflow-head { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  flex-wrap: wrap; margin-bottom: 8px; }
.oplan-workflow-acts { display: flex; gap: 6px; flex-wrap: wrap; }
.oplan-appr-list { display: flex; flex-wrap: wrap; gap: 8px 18px; }
.oplan-appr-chip { font-size: 13px; }
.oplan-appr-chip .hint { margin-left: 4px; }
.ov-row:hover td { background: #eef3fb; }

/* v3.107 — компактный тулбар планирования (сводка + кнопки в один ряд) */
.oplan-toolbar { display: flex; align-items: center; justify-content: space-between;
  gap: 12px; flex-wrap: wrap; padding: 8px 12px; margin-bottom: 10px;
  background: #f6f8fb; border: 1px solid var(--line, #e3e8ef); border-radius: 8px; }
.oplan-stats { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.oplan-stat { display: inline-flex; align-items: baseline; gap: 6px; font-size: 13px; }
.oplan-stat b { font-size: 15px; color: var(--ink, #243); }
.oplan-stat-lbl { color: var(--muted, #77808c); font-size: 12px; text-transform: uppercase;
  letter-spacing: .02em; }
.oplan-actions { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.btn-mini { border: 1px solid var(--line, #cfd7e0); background: #fff; color: var(--ink, #243);
  font: inherit; font-size: 12.5px; font-weight: 600; padding: 5px 10px; border-radius: 6px;
  cursor: pointer; white-space: nowrap; line-height: 1.1; }
.btn-mini:hover { background: #eef3fb; border-color: var(--accent, #2F5496); }
.btn-mini.danger { color: #b3261e; border-color: #e6bcb8; }
.btn-mini.danger:hover { background: #fbeceb; border-color: #b3261e; }
.oplan-baserow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-bottom: 12px; font-size: 13px; }

/* v3.108 — обсуждение поручений */
.asg-comment { padding: 8px 0; border-bottom: 1px solid var(--line, #eef0f2); font-size: 13.5px; }
.asg-comment:last-child { border-bottom: none; }
.asg-comment > div { margin-top: 3px; white-space: pre-wrap; }
.asg-row:hover td { background: #eef3fb; }
.assignments-sections { display: flex; flex-direction: column; gap: 18px; }
.assignments-block {
  padding: 18px;
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 8px);
  background: var(--paper);
  box-shadow: var(--shadow-sm);
}
.assignments-block-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  margin-bottom: 14px;
}
.assignments-block-head h2 { margin: 0 0 4px; font-size: 17px; }
.assignments-block-head .hint { margin: 0; }
@media (max-width: 720px) {
  .assignments-block { padding: 12px; }
  .assignments-block-head { align-items: stretch; flex-direction: column; }
  .assignments-block-head .btn-secondary { align-self: flex-start; }
}

.metro-sched-scroll { overflow-x: auto; }
.metro-sched-table th, .metro-sched-table td { white-space: nowrap; }
.metro-sched-table .metro-mcol { width: 34px; min-width: 34px; font-size: 11px; padding: 6px 2px; }
.metro-sched-table .metro-mcell { width: 34px; min-width: 34px; color: var(--accent, #2F5496); font-weight: 700; }
.metro-sched-table td.metro-mcell[data-sched-month] { cursor: pointer; }
.metro-sched-table td.metro-mcell[data-sched-month]:hover { background: #eef3fb; }
.metro-sched-table td.metro-mon { background: #dbe7fb; }
.metro-sched-table td.metro-mon:hover { background: #cbdcf7; }

/* ════════════════════════════════════════════════════════════════
   v3.81 (Задача 5) — Сменно-суточные задания (табель)
   ════════════════════════════════════════════════════════════════ */
.prod-subtabs { display: flex; gap: 6px; margin-bottom: 14px; border-bottom: 1px solid var(--line, #e3e8ef); }
.prod-subtab { border: none; background: none; padding: 8px 14px; font: inherit; font-weight: 600;
  color: var(--ink-mute, #667); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
.prod-subtab:hover { color: var(--ink, #243); }
.prod-subtab.active { color: var(--accent, #2F5496); border-bottom-color: var(--accent, #2F5496); }
.ts-toolbar { display: flex; gap: 12px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 12px; }
.ts-lbl { display: flex; flex-direction: column; gap: 3px; font-size: 12px; color: var(--ink-mute, #667); font-weight: 600; }
.ts-status { font-size: 13px; color: var(--ink-mute, #667); margin-left: auto; }
.ws-journal-table th:last-child,
.ws-journal-table td.ws-action-cell { min-width: 172px; }
.ws-action-group {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  white-space: nowrap;
}
.ws-action-group .ws-act { margin: 0; min-width: 76px; }
.ts-grid-scroll { overflow-x: auto; border: 1px solid var(--line, #e3e8ef); border-radius: 8px; }
.ts-table { border-collapse: collapse; width: 100%; font-size: 13px; }
.ts-table th, .ts-table td { border: 1px solid var(--line, #eceff4); padding: 5px 7px; text-align: center; }
.ts-table thead th { background: #f3f6fb; font-weight: 700; position: sticky; top: 0; vertical-align: bottom; }
.ts-table .ts-name-col { text-align: left; min-width: 170px; position: sticky; left: 0; background: #fbfcfe; z-index: 1; }
.ts-table thead .ts-name-col { z-index: 2; background: #f3f6fb; }
.ts-col-sub { font-size: 10px; font-weight: 400; color: var(--ink-mute, #889); }
.ts-order-col { min-width: 74px; }
.ts-spec-col { min-width: 80px; background: #faf6ec; }
.ts-total-col { background: #eef4ee; font-weight: 700; }
.ts-num { text-align: center; }
.ts-cell-inp { width: 62px; text-align: center; padding: 4px 4px; border: 1px solid var(--line, #cdd6e3);
  border-radius: 5px; font: inherit; background: #fff; color: var(--ink, #243); }
.ts-cell-inp::placeholder { color: #c2ccd9; }
.ts-cell-inp:hover { border-color: #9fb0c8; }
.ts-cell-inp:focus { border-color: var(--accent, #2F5496); box-shadow: 0 0 0 2px rgba(47,84,150,.15); background: #fff; outline: none; }
.ts-cell-inp:disabled { background: #f3f5f8; color: var(--ink-mute, #889); border-color: transparent; }
.ts-table td.ts-num { padding: 4px 6px; }
.ts-table tfoot .ts-foot td { background: #eef2f8; font-weight: 700; border-top: 2px solid #cdd6e3; }
.ts-table tfoot .ts-name-col { background: #e7edf6; }

/* ═══ v3.85 — Документооборот ═══ */
.doc-card {
  background: var(--paper, #fff);
  border: 1px solid var(--line, #e2e5ea);
  border-radius: 10px;
  padding: 16px 18px;
}
.doc-card h3 { font-size: 16px; }
.doc-card textarea, .doc-card input, .doc-card select {
  width: 100%; box-sizing: border-box;
  border: 1px solid var(--line, #d6dae1); border-radius: 6px;
  padding: 7px 10px; font: inherit; background: #fff;
}
.doc-card textarea:focus, .doc-card input:focus, .doc-card select:focus {
  outline: none; border-color: var(--accent, #2F5496);
  box-shadow: 0 0 0 2px rgba(47,84,150,.12);
}
.doc-card label { display: block; font-size: 12px; color: var(--ink-mute, #667); }
.doc-card label > input, .doc-card label > select, .doc-card label > textarea { margin-top: 3px; }
.doc-card .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px; }
.doc-route-row select { flex: 1; }
.btn-secondary.danger { color: #b3261e; border-color: #e6b5b1; }
.btn-secondary.danger:hover { background: #fdeaea; }

/* v4.29.003 — открытие полной карточки заявления ОК. */
.hr-application-row { cursor: pointer; }
.hr-application-row:hover td { background: color-mix(in srgb, var(--accent, #2F5496) 5%, var(--paper, #fff)); }
.hr-application-card { max-width: 920px; margin: 0 auto; }
.doc-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; }
.doc-details-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 20px; }
.doc-details-grid > div { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.doc-details-grid b { overflow-wrap: anywhere; }
.doc-section h4 { margin: 0 0 8px; font-size: 13px; }
.doc-text-block { padding: 10px 12px; border: 1px solid var(--line, #e2e5ea); border-radius: 7px; background: var(--paper-soft, #f7f8fa); white-space: normal; overflow-wrap: anywhere; }
@media (max-width: 720px) {
  .doc-card-head { flex-direction: column; }
  .doc-details-grid { grid-template-columns: 1fr; }
}

/* ═══ v4.04 — карточка договора/приказа (по образцу СЭД) ═══ */
/* Группа реквизитов: рамка + заголовок, как «пачки» полей в СЭД. */
.doc-fs {
  border: 1px solid var(--line, #e2e5ea);
  border-radius: 8px;
  padding: 12px 14px;
  margin-top: 12px;
}
.doc-fs-t {
  font-size: 11px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .05em; color: var(--accent, #2F5496);
  margin-bottom: 8px; padding-bottom: 4px;
  border-bottom: 1px solid var(--line, #e6e9ee);
}
.doc-fs label { margin-top: 8px; }
.doc-fs .form-grid { margin-top: 8px; }
/* v4.04.006 — форма выдачи учтённой копии: «Кому» и «Назначение» в одну линию. */
.form-grid.copy-issue-grid {
  grid-template-columns: minmax(200px, 1fr) 2fr;
  align-items: end;
}
.form-grid.copy-issue-grid > label {
  display: flex; flex-direction: column; gap: 4px; margin-top: 0;
  font-size: 12px; color: var(--ink-mute, #667);
}
.form-grid.copy-issue-grid > label select,
.form-grid.copy-issue-grid > label input {
  width: 100%; box-sizing: border-box;
}
/* Реквизиты «только для чтения» в карточке. */
.doc-rq .ir { display: flex; gap: 8px; padding: 3px 0; font-size: 13px;
  border-bottom: 1px dashed var(--line, #eef0f3); }
.doc-rq .ir:last-child { border-bottom: none; }
.doc-rq .il { color: var(--ink-mute, #667); min-width: 210px; flex-shrink: 0; }
.doc-rq .iv { font-weight: 600; }
/* Чекбоксы (пролонгация, адресаты рассылки приказа). */
.doc-chk { display: flex; align-items: center; gap: 7px; font-size: 13px;
  color: var(--ink, #222); cursor: pointer; }
.doc-chk input { width: auto !important; margin: 0; }
.doc-chk-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4px 14px;
  margin-top: 6px; }
@media (max-width: 720px) {
  .doc-chk-grid { grid-template-columns: 1fr; }
  .doc-rq .il { min-width: 130px; }
}

/* ═══ v3.86 — Табель: присутствие в смене и описание задачи ═══ */
.ts-table .ts-present-col { width: 64px; min-width: 56px; }
.ts-present-chk { width: 17px; height: 17px; cursor: pointer; }
.ts-table .ts-descr-col { text-align: left; min-width: 200px; }
.ts-descr-inp { width: 100%; box-sizing: border-box; border: 1px solid var(--line, #d6dae1);
  border-radius: 5px; padding: 4px 7px; font: inherit; background: #fff; }
.ts-descr-inp:focus { outline: none; border-color: var(--accent, #2F5496);
  box-shadow: 0 0 0 2px rgba(47,84,150,.12); }
.ts-descr-text { color: var(--ink-mute, #667); }
.ts-table tr.ts-row-absent td { background: #f6f7f9; color: #aab2bd; }
.ts-table tr.ts-row-absent .ts-name-col { background: #f1f3f6; color: #8b94a1; }
.ts-table tfoot .ts-present-col { background: #e7edf6; }

/* ════════════════════════════════════════════════════════════════════
   v3.87 — отметка утверждения техпроцесса, табель присутствия,
   столбец «по табелю» в сменно-суточных заданиях.
   ════════════════════════════════════════════════════════════════════ */

/* Задача 2 — крупная отметка об утверждении техпроцесса (под экспертизами). */
.tp-approval-stamp {
  margin-top: 10px;
  border: 2px solid;
  border-radius: 8px;
  padding: 10px 12px;
  text-align: center;
}
.tp-approval-stamp .tp-stamp-main { font-size: 14px; font-weight: 800; letter-spacing: .3px; }
.tp-approval-stamp .tp-stamp-meta { font-size: 11px; margin-top: 4px; opacity: .85; }
.tp-approval-stamp.tp-approved { border-color: #2f8f4e; background: #eaf6ee; color: #1f6e3a; }
.tp-approval-stamp.tp-not-approved { border-color: #c0392b; background: #fdeded; color: #a82a1e; }

/* Задача 1 — табель присутствия (ФИО × дни). Переиспользует .ts-table. */
.att-create-panel {
  display: grid;
  grid-template-columns: minmax(160px, 1fr) minmax(160px, 1fr)
    minmax(190px, 1.2fr) minmax(150px, .8fr) auto;
  gap: 12px;
  align-items: end;
  padding: 14px;
  margin-bottom: 16px;
  border: 1px solid var(--rule);
  border-radius: 10px;
  background: var(--paper);
  box-sizing: border-box;
}
.att-create-panel .eng-inp {
  width: 100%;
  min-height: 36px;
  box-sizing: border-box;
}
.att-create-panel .btn-secondary { min-height: 36px; white-space: nowrap; }
.att-list-frame {
  width: 100%;
  overflow: hidden;
  border: 1px solid var(--rule);
  border-radius: 10px;
  background: var(--paper);
  box-sizing: border-box;
}
.att-list-frame .bs-list-table {
  width: 100%;
  margin: 0;
  border: 0;
}
.att-list-frame .bs-list-table th:first-child,
.att-list-frame .bs-list-table td:first-child { border-left: 0; }
.att-list-frame .bs-list-table th:last-child,
.att-list-frame .bs-list-table td:last-child { border-right: 0; }
.att-list-frame .bs-list-table thead tr:first-child th { border-top: 0; }
.att-list-frame .bs-list-table tbody tr:last-child td { border-bottom: 0; }
.att-table .att-day-col { min-width: 34px; width: 34px; font-size: 11px; }
.att-table .att-cell-inp {
  width: 40px; text-align: center; border: 1px solid var(--line, #d7dde6);
  border-radius: 4px; padding: 2px 2px; font-size: 12px;
}
.att-table .att-cell-inp:focus { outline: none; border-color: var(--accent); }
.att-grid-scroll { overflow-x: auto; }
/* v4.47.011 — табель: собственная жёсткая геометрия sticky-колонок и дней.
   Таблица исключена из универсального resize в разметке app.js. */
.att-table {
  --att-w-no: 44px;
  --att-w-name: 245px;
  --att-w-position: 165px;
  --att-w-org: 160px;
  --att-w-phone: 150px;
  --att-w-day: 44px;
  --att-w-shifts: 72px;
  --att-w-hours: 72px;
  table-layout: fixed;
  width: auto;
}
.att-table col.att-col-no { width: var(--att-w-no); }
.att-table col.att-col-name { width: var(--att-w-name); }
.att-table col.att-col-position { width: var(--att-w-position); }
.att-table col.att-col-org { width: var(--att-w-org); }
.att-table col.att-col-phone { width: var(--att-w-phone); }
.att-table col.att-col-day { width: var(--att-w-day); }
.att-table col.att-col-shifts { width: var(--att-w-shifts); }
.att-table col.att-col-hours { width: var(--att-w-hours); }
.att-table th,
.att-table td { box-sizing: border-box; }
.att-table .att-fixed {
  position: sticky;
  z-index: 2;
  background: var(--paper, #fff);
  text-align: left;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.att-table thead .att-fixed {
  z-index: 6;
  background: #f3f6fb;
}
.att-table .att-no-col {
  left: 0;
  width: var(--att-w-no);
  min-width: var(--att-w-no);
  max-width: var(--att-w-no);
  text-align: center;
}
.att-table .att-name-col {
  left: var(--att-w-no);
  width: var(--att-w-name);
  min-width: var(--att-w-name);
  max-width: var(--att-w-name);
}
.att-table .att-position-col {
  left: calc(var(--att-w-no) + var(--att-w-name));
  width: var(--att-w-position);
  min-width: var(--att-w-position);
  max-width: var(--att-w-position);
}
.att-table .att-org-col {
  left: calc(var(--att-w-no) + var(--att-w-name) + var(--att-w-position));
  width: var(--att-w-org);
  min-width: var(--att-w-org);
  max-width: var(--att-w-org);
}
.att-table .att-phone-col {
  left: calc(var(--att-w-no) + var(--att-w-name) + var(--att-w-position) + var(--att-w-org));
  width: var(--att-w-phone);
  min-width: var(--att-w-phone);
  max-width: var(--att-w-phone);
  box-shadow: 3px 0 5px rgba(40, 55, 75, .08);
}
.att-table .att-day-col,
.att-table .att-day-cell {
  width: var(--att-w-day);
  min-width: var(--att-w-day);
  max-width: var(--att-w-day);
  padding-left: 3px;
  padding-right: 3px;
  text-align: center;
}
.att-table .att-day-col { font-size: 11px; }
.att-table .att-cell-inp {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  text-align: center;
  border: 1px solid var(--line, #d7dde6);
  border-radius: 4px;
  padding: 2px 1px;
  font-size: 12px;
}
.att-table .att-cell-inp:focus { outline: none; border-color: var(--accent); }
.att-table .att-shifts-col {
  width: var(--att-w-shifts);
  min-width: var(--att-w-shifts);
  max-width: var(--att-w-shifts);
}
.att-table .ts-total-col:last-child {
  width: var(--att-w-hours);
  min-width: var(--att-w-hours);
  max-width: var(--att-w-hours);
}
.att-table .att-total-label { text-align: right; font-weight: 700; background: #eef2f8; }
.att-grid-scroll {
  overflow-x: auto;
  overflow-y: visible;
  scrollbar-gutter: stable;
}
@media (max-width: 1100px) {
  .att-create-panel { grid-template-columns: repeat(2, minmax(180px, 1fr)); }
  .att-create-panel .btn-secondary { justify-self: start; }
}
@media (max-width: 620px) {
  .att-create-panel { grid-template-columns: 1fr; }
  .att-create-panel .btn-secondary { width: 100%; }
}

/* Столбец «по табелю» в сменно-суточных заданиях. */
.ts-table .ts-att-col { min-width: 96px; width: 100px; font-size: 12px; }
.ts-table .ts-att-col .ts-over { color: var(--accent); font-weight: 700; }

/* ════════════════════════════════════════════════════════════════════
   v3.99 — РЕДИЗАЙН «ИНЖЕНЕРНЫЙ ПУЛЬТ»
   Слой поверх существующих правил: селекторы и разметка не менялись.
   Идея: графитовая панель управления + чертёжная культура (сетка,
   индексы, моноширинные коды), фирменные красный/синий из логотипа.
   ════════════════════════════════════════════════════════════════════ */

/* ── База: выделение, фокус, скроллбары ── */
::selection { background: rgba(42,82,154,.18); }
:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; border-radius: 4px; }
* { scrollbar-width: thin; scrollbar-color: #c4ccd6 transparent; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-thumb { background: #c4ccd6; border-radius: 8px; border: 2px solid var(--bg); }
::-webkit-scrollbar-thumb:hover { background: #a9b3c0; }
::-webkit-scrollbar-track { background: transparent; }

body { letter-spacing: .1px; }

/* ── Топбар: графитовая панель с сигнальной линией ── */
.topbar {
  background: linear-gradient(180deg, #1a2029 0%, var(--graphite) 100%);
  border-bottom: none;
  box-shadow: inset 0 -2px 0 var(--accent), 0 2px 10px rgba(16,20,27,.25);
  gap: 10px;
}
.topbar .brand-logo {
  height: 30px;
  background: #fff;
  padding: 3px 8px;
  border-radius: 7px;
  box-sizing: content-box;
}
.topbar .brand-text { color: #f2f5f9; font-weight: 600; letter-spacing: .2px; white-space: nowrap; }
.topbar .brand-text .version {
  color: #9db1cc;
  font-family: var(--mono);
  font-size: 11px;
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.12);
  border-radius: 999px;
  padding: 1px 8px;
  margin-left: 8px;
}
.topbar .topbar-btn {
  color: #cdd6e2;
  border: 1px solid rgba(255,255,255,.14);
  background: rgba(255,255,255,.03);
  border-radius: 8px;
  padding: 6px 12px;
  margin-right: 0;
  white-space: nowrap;
  transition: background .15s, border-color .15s, color .15s, transform .1s;
}
.topbar .topbar-btn:hover {
  background: rgba(255,255,255,.10);
  border-color: rgba(255,255,255,.28);
  color: #fff;
}
.topbar .topbar-btn:active { transform: translateY(1px); }
.topbar-right { display: flex; align-items: center; gap: 8px; flex-wrap: nowrap; }
.topbar .status-pill {
  background: rgba(46,140,80,.16);
  color: #7fd39c;
  border: 1px solid rgba(127,211,156,.25);
  border-radius: 999px;
  white-space: nowrap;
}
.topbar .user-box { background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.12); border-radius: 8px; margin-left: 0; }
.topbar .user-select { border-radius: 6px; font-weight: 500; }
.notif-dot { box-shadow: 0 0 0 2px var(--graphite); }
@media (max-width: 1100px) {
  .topbar { overflow-x: auto; }
  .topbar::-webkit-scrollbar { display: none; }
}

/* ── Хлебные крошки: закреплены под топбаром (v3.100) ── */
.breadcrumbs {
  position: sticky;
  top: 56px;
  z-index: 95; /* ниже топбара (100), выше контента */
  background: rgba(255,255,255,.92);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--rule-soft);
  box-shadow: 0 1px 4px rgba(16,20,27,.04);
  padding: 9px 24px;
}
.breadcrumbs a.crumb.link { color: var(--blue); }
.breadcrumbs .crumb.current { color: var(--ink); }

/* ── Заставка ── */
#splash {
  background:
    linear-gradient(rgba(255,255,255,.94), rgba(255,255,255,.94)),
    repeating-linear-gradient(0deg, transparent 0 27px, rgba(42,82,154,.35) 27px 28px),
    repeating-linear-gradient(90deg, transparent 0 27px, rgba(42,82,154,.35) 27px 28px),
    #fff;
}
.splash-bar { background: rgba(22,26,33,.08); }
.splash-bar span { background: linear-gradient(90deg, var(--blue), var(--accent)); }

/* ── Главная: чертёжный лист с индексированными карточками ── */
#view-home.active {
  min-height: calc(100vh - 56px);
  background:
    radial-gradient(ellipse 900px 480px at 50% -80px, rgba(42,82,154,.07), transparent 65%),
    repeating-linear-gradient(0deg, transparent 0 31px, rgba(42,82,154,.055) 31px 32px),
    repeating-linear-gradient(90deg, transparent 0 31px, rgba(42,82,154,.055) 31px 32px);
}
.home-wrap { max-width: 1060px; padding: 56px 24px 72px; }
.home-wrap::before {
  content: 'Спецгазэнергомаш · единая система завода';
  display: block;
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 2.5px;
  color: var(--blue);
  margin-bottom: 14px;
}
.home-title {
  font-size: 40px;
  font-weight: 700;
  letter-spacing: -1px;
  line-height: 1.1;
}
.home-sub { margin: 8px 0 44px; color: var(--ink-mute); }
.home-cards { counter-reset: module; gap: 16px; }
.home-card {
  counter-increment: module;
  position: relative;
  align-items: flex-start;
  text-align: left;
  gap: 12px;
  flex: 0 1 316px;
  max-width: 336px;
  padding: 22px 20px 20px;
  border: 1px solid var(--rule);
  border-radius: var(--r-lg);
  background: var(--paper);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
  transition: transform .18s cubic-bezier(.2,.7,.3,1), box-shadow .18s, border-color .18s, background-color .18s;
}
.home-card::before {
  content: counter(module, decimal-leading-zero);
  position: absolute;
  top: 16px; right: 18px;
  font-family: var(--mono);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 1px;
  color: var(--ink-mute);
  opacity: .75;
}
.home-card::after {
  content: '';
  position: absolute;
  left: 0; right: 0; top: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--accent), var(--blue));
  transform: scaleX(0);
  transform-origin: left;
  transition: transform .22s cubic-bezier(.2,.7,.3,1);
}
.home-card:hover, .home-card:focus-visible {
  transform: translateY(-3px);
  border-color: #c3cbd6;
  box-shadow: var(--shadow-md);
  background-color: #f2f5fa;
}
.home-card:hover::after, .home-card:focus-visible::after { transform: scaleX(1); }
.home-card-ico {
  font-size: 22px;
  width: 46px; height: 46px;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(160deg, var(--blue-soft), #f2f6fc);
  border: 1px solid #d9e3f2;
  border-radius: 12px;
}
.home-card-name { font-size: 16px; font-weight: 600; letter-spacing: -.2px; }
.home-card-desc { color: var(--ink-mute); font-size: 12.5px; line-height: 1.45; }

/* ── Заголовки страниц ── */
.page-head h1 { font-size: 24px; font-weight: 700; letter-spacing: -.5px; }
.reports-head h1 { font-weight: 700; letter-spacing: -.5px; }

/* ── Кнопки ── */
.btn-primary, .btn-secondary, .btn-danger {
  border-radius: 8px;
  font-weight: 500;
  transition: background .15s, border-color .15s, color .15s, box-shadow .15s, transform .1s;
}
.btn-primary {
  background: linear-gradient(180deg, #cf3334, var(--accent));
  box-shadow: 0 1px 2px rgba(150,32,31,.35), inset 0 1px 0 rgba(255,255,255,.15);
}
.btn-primary:hover { background: var(--accent-dark); box-shadow: 0 3px 10px rgba(150,32,31,.30); }
.btn-primary:active, .btn-secondary:active, .btn-danger:active { transform: translateY(1px); }
.btn-primary:focus-visible { outline: none; box-shadow: var(--ring-accent); }
.btn-secondary { box-shadow: var(--shadow-sm); }
.btn-secondary:hover { border-color: #b9c2cd; background: var(--paper-soft); }
.btn-danger { box-shadow: none; }
.topbar-btn { border-radius: 8px; }

/* ── Формы ── */
.form-grid { border-radius: var(--r-md); box-shadow: var(--shadow-sm); padding: 18px; }
.fl input, .fl select, .fl textarea {
  border-radius: 7px;
  transition: border-color .15s, box-shadow .15s;
}
.fl input:focus, .fl select:focus, .fl textarea:focus {
  border-color: var(--blue);
  box-shadow: var(--ring);
}
.search-input { border-radius: 8px; transition: border-color .15s, box-shadow .15s; }
.search-input:focus { border-color: var(--blue); box-shadow: var(--ring); }
.chat-compose textarea:focus { border-color: var(--blue); box-shadow: var(--ring); }

/* ── Таблицы-журналы ── */
.bs-list-table, .rep-table {
  border-collapse: separate;
  border-spacing: 0;
  border-radius: var(--r-md);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
}
.bs-list-table th { border-bottom: 1px solid var(--rule); }
.bs-list-table tbody tr { transition: background .12s; }
.bs-list-table tr:hover { background: #f2f6fb; }
.bs-list-table tr:last-child td { border-bottom: none; }

/* ── Статусы: пилюли с индикатором ── */
.status-tag {
  border-radius: 999px;
  padding: 3px 10px 3px 8px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.status-tag::before {
  content: '';
  width: 6px; height: 6px;
  border-radius: 50%;
  background: currentColor;
  flex: 0 0 auto;
}
.status-tag.draft    { background: #eef1f5; color: #6b7382; }
.status-tag.in_progress { background: #fff4df; color: #8a5a13; }
.status-tag.approved { background: var(--blue-soft); color: var(--blue); }
.status-tag.won      { background: #e4f2e9; color: var(--green); }
.status-tag.lost     { background: var(--accent-soft); color: var(--accent); }

/* ── Навигация карточки БС ── */
.bs-nav { padding: 12px 0; }
.nav-btn {
  margin: 2px 10px;
  width: calc(100% - 20px);
  border-left: none;
  border-radius: 8px;
  padding: 9px 14px;
  transition: background .15s, color .15s;
}
.nav-btn:hover { background: rgba(255,255,255,.06); }
.nav-btn.active {
  background: linear-gradient(90deg, rgba(192,42,43,.28), rgba(192,42,43,.10));
  box-shadow: inset 3px 0 0 var(--accent);
  border-left: none;
}
.nav-btn .badge { border-radius: 999px; }

/* ── Карточки и панели ── */
.position-card, .task-card, .rep-card, .modal-card, .cplx-btn { border-radius: var(--r-md); }
.rep-card { box-shadow: var(--shadow-sm); }
.rep-card .rc-num { letter-spacing: -.5px; }
.task-card { box-shadow: var(--shadow-sm); }
.wf-panel { box-shadow: var(--shadow-sm); }

/* ── Модалки ── */
.modal { background: rgba(16,20,27,.55); backdrop-filter: blur(4px); }
.modal-card {
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-lg);
  border: 1px solid var(--rule-soft);
  animation: modalIn .18s cubic-bezier(.2,.7,.3,1);
}
@keyframes modalIn {
  from { opacity: 0; transform: translateY(10px) scale(.985); }
  to   { opacity: 1; transform: translateY(0) scale(1); }
}
.modal-card h3 { font-size: 17px; font-weight: 700; letter-spacing: -.3px; }

/* v4.32.003 — карточка реквизитов производственного заказа. */
.order-link-card {
  width: min(720px, calc(100vw - 32px));
  max-width: 720px;
  box-sizing: border-box;
  overflow-x: hidden;
}
.order-link-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px 16px;
}
.order-link-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}
.order-link-field.full { grid-column: 1 / -1; }
.order-link-field > span { font-size: 12px; color: var(--ink-mute); }
.order-link-field .eng-inp,
.order-link-field .eng-sel {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
}

/* ── Тосты ── */
.toast {
  background: var(--steel);
  border-radius: var(--r-md);
  box-shadow: var(--shadow-lg), inset 3px 0 0 var(--blue);
  padding: 11px 16px 11px 18px;
}
.toast.success { background: var(--steel); box-shadow: var(--shadow-lg), inset 3px 0 0 #3fae6d; }
.toast.error   { background: var(--steel); box-shadow: var(--shadow-lg), inset 3px 0 0 #e05252; }
.toast.warning { background: var(--steel); box-shadow: var(--shadow-lg), inset 3px 0 0 var(--orange); }

/* ── Панель уведомлений ── */
.notif-panel { border-radius: var(--r-lg); box-shadow: var(--shadow-lg); top: 64px; }
.notif-item.unread { box-shadow: inset 3px 0 0 var(--accent); }

/* ── Справочники ── */
.dict-list-item { border-radius: 0 999px 999px 0; margin-right: 12px; }

/* ── Доступность: отключение движения ── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
  .home-card:hover { transform: none; }
}

/* v3.102 — итоговая строка стоимости в материальной ведомости */
.bom-total td { background: rgba(183, 28, 28, 0.06); border-top: 2px solid var(--accent, #b71c1c); font-weight: 600; }
.bom-price-inp { text-align: right; }

/* ── v4.03.003 — экран входа по паролю ── */
.login-overlay {
  position: fixed; inset: 0; z-index: 9999;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, #2a2a35 0%, #3a1f22 100%);
}
.login-card {
  background: #fff; border-radius: 12px; padding: 32px 36px;
  width: 340px; max-width: 92vw; box-shadow: 0 12px 40px rgba(0,0,0,0.35);
  display: flex; flex-direction: column; gap: 12px;
}
.login-card h2 { margin: 0 0 4px; text-align: center; color: #b71c1c; }
.login-logo { text-align: center; margin-bottom: 4px; }
.login-logo img { max-height: 56px; }
.login-card .fl { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: #555; }
.login-card input,
.login-card select {
  padding: 10px 12px; border: 1px solid #ccc; border-radius: 8px; font-size: 15px;
  background: #fff;
}
.login-card input:focus,
.login-card select:focus { outline: none; border-color: #b71c1c; }
.login-card .btn-primary {
  margin-top: 8px; padding: 11px; border: none; border-radius: 8px;
  background: #b71c1c; color: #fff; font-size: 15px; font-weight: 600; cursor: pointer;
}
.login-card .btn-primary:hover { background: #9c1717; }
.login-card .btn-primary:disabled { opacity: .6; cursor: default; }
.login-err { color: #b71c1c; font-size: 13px; min-height: 18px; text-align: center; }
.login-err.success { color: #1b5e20; }
.login-hint { margin: 0; color: #667085; font-size: 13px; line-height: 1.45; }
.login-link {
  align-self: center; border: 0; background: transparent; color: #8f1717;
  padding: 3px 6px; font: inherit; font-size: 13px; cursor: pointer;
  text-decoration: underline; text-underline-offset: 2px;
}
.login-link:hover { color: #b71c1c; }
.login-captcha {
  display: flex; flex-direction: column; gap: 7px; padding: 10px;
  border: 1px solid #d6dae1; border-radius: 8px; background: #f7f8fa;
}
.login-captcha[hidden] { display: none; }
.login-captcha-title { color: #555; font-size: 13px; }
.login-captcha-image-row { display: flex; align-items: center; gap: 8px; }
.login-captcha-image-row img {
  width: 184px; max-width: calc(100% - 72px); height: 64px;
  border: 1px solid #c8ccd3; border-radius: 6px; background: #fff;
}
.login-captcha-image-row .login-link { flex: 1; padding: 4px 0; }
.user-name { font-size: 13px; }
/* v4.04.006 — имя пользователя в тёмном топбаре (режим входа по паролю):
   без явного цвета текст наследовал тёмный --ink и был нечитаем на графите. */
.topbar .user-name { color: #eef2f7; font-weight: 600; }
.topbar .user-name .muted { color: #9db1cc; font-weight: 400; }

/* ── v4.03.003 — баннер режима входа в админке пользователей ── */
.auth-mode-banner {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 10px 14px; margin-bottom: 12px; border-radius: 8px; font-size: 14px;
}
.auth-mode-banner.on  { background: rgba(27,94,32,0.10); border: 1px solid #1b5e20; }
.auth-mode-banner.off { background: rgba(183,28,28,0.06); border: 1px solid #d0a0a0; }
.auth-mode-banner button { margin-left: auto; }

/* ════════════════════════════════════════════════════════════════
   v4.04.006 — ТЁМНАЯ ТЕМА
   Переключается атрибутом html[data-theme="dark"] (кнопка в топбаре).
   Топбар и без того графитовый — здесь переопределяем поверхности
   тела/карточек/полей через те же CSS-переменные, что и светлая тема,
   плюс точечные правки для мест с жёстко заданным белым фоном.
   ════════════════════════════════════════════════════════════════ */
.theme-toggle { font-size: 15px; line-height: 1; padding: 6px 10px; }

html[data-theme="dark"] {
  /* v4.10.001 — тёмная тема сделана светлее и менее контрастной:
     поверхности приподняты к средне-серому, текст чуть мягче «чисто белого»,
     тени и разделители ослаблены. */
  --bg: #1b212b;
  --paper: #232b37;
  --paper-soft: #2b3441;
  --ink: #dbe1ea;
  --ink-soft: #aab3c2;
  --ink-mute: #838d9c;
  --rule: #38424f;
  --rule-soft: #2f3846;
  --accent: #e0575a;
  --accent-soft: #3f2728;
  --accent-dark: #c0393b;
  --blue: #7aa6e6;
  --blue-soft: #26344c;
  --green: #4bbd77;
  --yellow: #d6ab5e;
  --orange: #e0954a;
  --shadow-sm: 0 1px 2px rgba(0,0,0,.22), 0 1px 3px rgba(0,0,0,.18);
  --shadow-md: 0 4px 14px rgba(0,0,0,.28), 0 1px 3px rgba(0,0,0,.20);
  --shadow-lg: 0 18px 48px rgba(0,0,0,.36), 0 4px 12px rgba(0,0,0,.24);
  --ring: 0 0 0 3px rgba(122,166,230,.24);
  --ring-accent: 0 0 0 3px rgba(224,87,90,.20);
}

/* Поверхности с жёстко заданным белым фоном → мягкая тёмная «бумага». */
html[data-theme="dark"] .user-select,
html[data-theme="dark"] input,
html[data-theme="dark"] select,
html[data-theme="dark"] textarea {
  background: var(--paper-soft);
  color: var(--ink);
  border-color: var(--rule);
}
html[data-theme="dark"] input::placeholder,
html[data-theme="dark"] textarea::placeholder { color: var(--ink-mute); }

/* Таблицы, карточки, модалки — на переменных, но подстрахуем чётные строки. */
html[data-theme="dark"] tr:nth-child(even),
html[data-theme="dark"] .zebra tr:nth-child(even) { background: rgba(255,255,255,.03); }

/* Статус-пилюля «Подключено к БД» на тёмной теме читается так же (уже зелёная). */
html[data-theme="dark"] .status-pill { background: rgba(46,140,80,.16); color: #7fd39c; }

/* Скроллбары под тёмный фон. */
html[data-theme="dark"] * { scrollbar-color: #475464 transparent; }
html[data-theme="dark"] ::-webkit-scrollbar-thumb { background: #475464; border-color: var(--bg); }
html[data-theme="dark"] ::-webkit-scrollbar-thumb:hover { background: #566475; }

/* Плитки главной и прочие светлые «paper»-блоки наследуют переменные —
   отдельных правил не требуется. Логин-оверлей оставляем светлым:
   вход до применения темы. */

/* ── v4.13.003 — Гантт (планирование по заказу/БС) в тёмной теме ──
   Диаграмма рисуется SVG с жёстко заданными светлыми цветами (фон, сетка,
   полосы секций, синие подписи секций). В тёмной теме текст становится
   светлым, а фон/полосы оставались светлыми → «светлое по светлому» и подписи
   не читались. Переопределяем на переменные темы. */
html[data-theme="dark"] .gantt-wrap { background: var(--paper-soft); border-color: var(--rule); }
html[data-theme="dark"] .gantt-lbl,
html[data-theme="dark"] .gantt-svg-fixed .gantt-lbl { fill: var(--ink); }
html[data-theme="dark"] .gantt-lbl.gantt-section,
html[data-theme="dark"] .gantt-svg-fixed .gantt-lbl.gantt-section { fill: var(--blue, #7aa6e6); }
html[data-theme="dark"] .gantt-tick,
html[data-theme="dark"] .gantt-svg-fixed .gantt-tick { fill: var(--ink-mute); }
html[data-theme="dark"] .gantt-grid,
html[data-theme="dark"] .gantt-svg-fixed .gantt-grid { stroke: var(--rule); }
html[data-theme="dark"] .gantt-svg-fixed .gantt-section-band { fill: var(--blue-soft, #26344c); }
html[data-theme="dark"] .gantt-bar-approved,
html[data-theme="dark"] .gantt-svg-fixed .gantt-bar-approved { fill: var(--blue, #7aa6e6); }
html[data-theme="dark"] .gantt-bar-draft,
html[data-theme="dark"] .gantt-svg-fixed .gantt-bar-draft { fill: #566475; }
html[data-theme="dark"] .gantt-bar-fact,
html[data-theme="dark"] .gantt-svg-fixed .gantt-bar-fact { fill: var(--orange, #e0954a); }
html[data-theme="dark"] .gantt-svg rect.gantt-bar-proposed,
html[data-theme="dark"] .gantt-svg-fixed .gantt-bar-proposed { fill: #4a4327; stroke: #d6ab5e; }
/* Полосы-заголовки секций в таблице плана и подсветка строк-черновиков */
html[data-theme="dark"] .plan-table .plan-section-row td { background: var(--paper-soft); color: var(--ink); }
html[data-theme="dark"] .oplan-draft-row td { background: #3a3320; }
html[data-theme="dark"] .oplan-draft-row:hover td { background: #463d26; }
html[data-theme="dark"] .oplan-workflow { background: var(--paper-soft); border-color: var(--rule); }

/* ── v4.05.001 — 3D-модель ДСЕ (просмотрщик) ── */
.dse-model-btn { margin-left: 6px; }
.dse-model-frame {
  width: 100%; height: 62vh; min-height: 360px;
  border: 1px solid var(--rule); border-radius: 8px;
  background: #eef1f5; display: block;
}
/* v4.06.002 — увеличенное окно 3D-модели.
   v4.06.004 — вся карточка укладывается в 90vh без прокрутки: flex-колонка,
   iframe занимает свободное место, панель загрузки всегда видна. */
.modal-card.model-mode {
  max-width: 1400px; width: 94vw;
  max-height: 92vh; height: 92vh;
  display: flex; flex-direction: column;
  overflow: hidden;
}
.modal-card.model-mode h3 { flex: 0 0 auto; }
.modal-card.model-mode #dse_model_body {
  flex: 1 1 auto; min-height: 0;
  display: flex; flex-direction: column;
  overflow: hidden;
}
.modal-card.model-mode .modal-actions { flex: 0 0 auto; }
.modal-card.model-mode .dse-model-frame {
  flex: 1 1 auto; min-height: 220px; height: auto;
}
/* подпись файла и панель «Заменить модель» — не сжимаются */
.modal-card.model-mode .hint,
.modal-card.model-mode .doc-fs { flex: 0 0 auto; }
html[data-theme="dark"] .dse-model-frame { border-color: var(--rule); }

/* ── v4.06.001 — Справка ── */
.help-body {
  max-width: 820px; padding: 4px 8px 40px;
  line-height: 1.6; color: var(--ink);
}
.help-body .help-h1 { font-size: 22px; margin: 4px 0 14px; }
.help-body .help-h2 { font-size: 17px; margin: 22px 0 8px; color: var(--accent); }
.help-body .help-h3 { font-size: 15px; margin: 16px 0 6px; }
.help-body p { margin: 8px 0; }
.help-body ul, .help-body ol { margin: 8px 0 8px 4px; padding-left: 22px; }
.help-body li { margin: 4px 0; }
.help-body code {
  background: var(--paper-soft); border: 1px solid var(--rule);
  border-radius: 4px; padding: 1px 5px; font-size: 90%;
}
.help-body blockquote {
  margin: 12px 0; padding: 8px 14px;
  border-left: 3px solid var(--accent);
  background: var(--paper-soft); border-radius: 0 6px 6px 0;
  color: var(--ink-soft);
}
.help-body hr { border: 0; border-top: 1px solid var(--rule); margin: 20px 0; }
/* v4.12.001 — блоки кода/ASCII-схемы в справке: моноширинный, с прокруткой,
   сохраняет пробелы и переносы (для блок-схемы взаимодействий). */
.help-body .help-pre {
  background: var(--paper-soft);
  border: 1px solid var(--rule);
  border-radius: 6px;
  padding: 12px 14px;
  margin: 12px 0;
  overflow-x: auto;
  line-height: 1.35;
}
.help-body .help-pre code {
  display: block;
  white-space: pre;
  background: none;
  border: 0;
  padding: 0;
  font-family: 'SF Mono', 'Cascadia Code', 'JetBrains Mono', Consolas, 'Courier New', monospace;
  font-size: 12px;
  color: var(--ink);
}
/* v4.12.002 — контейнер векторной схемы (SVG) в справке. */
.help-body .help-svg {
  margin: 14px 0;
  padding: 10px;
  border: 1px solid var(--rule);
  border-radius: 8px;
  background: var(--paper);
  overflow-x: auto;
  text-align: center;
}
.help-body .help-svg svg {
  max-width: 100%;
  height: auto;
  display: inline-block;
}
.help-body a { color: var(--blue); }

/* Контекстная кнопка «?» в заголовках разделов. */
.help-q {
  display: inline-flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; margin-left: 8px; padding: 0;
  border-radius: 50%; border: 1px solid var(--rule);
  background: var(--paper-soft); color: var(--ink-soft);
  font-size: 12px; font-weight: 700; cursor: pointer; vertical-align: middle;
}
.help-q:hover { background: var(--accent); color: #fff; border-color: var(--accent); }

/* ── v4.07.001 — КД по ЕСКД: папки-типы, тулбар, фильтр ── */
.docm-toolbar { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:14px; }
.docm-viewtabs { display:inline-flex; border:1px solid var(--rule); border-radius:8px; overflow:hidden; }
.docm-vtab { background:var(--paper); color:var(--ink-soft); border:0; padding:6px 14px; font-size:13px; cursor:pointer; }
.docm-vtab.active { background:var(--accent); color:#fff; }
.docm-flt { font-size:13px; color:var(--ink-soft); display:inline-flex; align-items:center; gap:6px; }
.docm-flt select { padding:5px 8px; border:1px solid var(--rule); border-radius:6px; background:var(--paper-soft); color:var(--ink); }

.docm-folders { display:flex; flex-direction:column; gap:6px; }
.docm-folder { border:1px solid var(--rule); border-radius:8px; overflow:hidden; background:var(--paper); }
.docm-folder-head { display:flex; align-items:center; gap:10px; padding:11px 14px; cursor:pointer; user-select:none; }
.docm-folder-head:hover { background:var(--paper-soft); }
.docm-folder.open .docm-folder-head { border-bottom:1px solid var(--rule); background:var(--paper-soft); }
.dfh-ico { font-size:17px; }
.dfh-label { flex:1; font-weight:600; font-size:14px; }
.dfh-count { min-width:26px; text-align:center; font-size:12px; font-weight:600; color:var(--ink-soft);
  background:var(--rule-soft); border-radius:12px; padding:1px 9px; }
.docm-folder-body { padding:4px 0; }
.docm-doc-row { display:flex; align-items:center; gap:14px; padding:8px 16px; cursor:pointer; border-bottom:1px solid var(--rule-soft); font-size:13px; }
.docm-doc-row:last-child { border-bottom:0; }
.docm-doc-row:hover { background:var(--accent-soft); }
.ddr-arch { min-width:70px; color:var(--ink-mute); font-variant-numeric:tabular-nums; }
.ddr-des { flex:1; }
.ddr-order { min-width:120px; color:var(--ink-soft); }
.ddr-ver { min-width:120px; text-align:right; color:var(--ink-soft); }

/* v5.02.001-alpha — явная настройка области действия РКД. */
.ddr-actions { min-width:92px; text-align:right; white-space:nowrap; }
.ddr-scope-btn { font-weight:600; }
.dm-scope-modal { width:min(760px,92vw); max-height:90vh; overflow:auto; }
.dm-scope-doc { padding:10px 12px; margin-bottom:12px; border:1px solid var(--rule-soft); border-radius:8px; background:var(--paper-soft); }
.dm-scope-mode { display:grid; gap:7px; margin-bottom:10px; }
.dm-scope-mode > label { display:flex; gap:9px; align-items:flex-start; padding:9px 10px; border:1px solid var(--rule); border-radius:8px; cursor:pointer; background:var(--paper); }
.dm-scope-mode > label:has(input:checked) { border-color:var(--accent); background:var(--accent-soft); }
.dm-scope-mode span { display:flex; flex-direction:column; gap:2px; }
.dm-scope-mode small { color:var(--ink-mute); font-weight:400; }
.dm-scope-items { border:1px solid var(--rule); border-radius:8px; padding:8px 10px; max-height:300px; overflow:auto; background:var(--paper); transition:opacity .15s; }
.dm-scope-items.disabled { opacity:.52; }
.dm-scope-item { display:flex; gap:9px; align-items:flex-start; margin:0; padding:8px 4px; border-bottom:1px solid var(--rule-soft); cursor:pointer; }
.dm-scope-item:last-child { border-bottom:0; }
.dm-scope-item input { margin-top:3px; }
.dm-scope-item > span { min-width:0; }
.dm-scope-positions { display:block; margin-top:3px; color:var(--ink-mute); font-size:11px; line-height:1.35; }
@media (max-width: 900px) {
  .ddr-actions { min-width:auto; }
  .ddr-scope-btn { font-size:0; }
  .ddr-scope-btn::first-letter { font-size:13px; }
}

/* ════════════════════════════════════════════════════════════════════════
   v4.16.001 — ЕЖЕДНЕВНИК: личная выезжающая панель.
   v4.20.002 — открывается штатным пунктом бокового меню из любого раздела.
   Цвета — через переменные темы (работает и в тёмной теме).
   ════════════════════════════════════════════════════════════════════════ */
/* v4.16.003 — ГЕОМЕТРИЯ ИСПРАВЛЕНА. Раньше язычок и панель лежали рядом во
   flex-потоке: панель начиналась ПОСЛЕ язычка (x≈36px), и translateX(-100%)
   оставлял видимой её правую полоску шириной с язычок — она перекрывала
   язычок и перехватывала клики (наружу выглядывал красный «＋» кнопки
   добавления). Теперь язычок — АБСОЛЮТНЫЙ ребёнок панели, приклеенный к её
   правому краю снаружи: он едет вместе с панелью, а закрытая панель уходит
   за экран ЦЕЛИКОМ. */
.diary-drawer {
  position: fixed; left: var(--sb-w, 248px); top: var(--topbar-h, 64px); bottom: 0; z-index: 110;
  pointer-events: none;
  transition: left .18s ease;
}
.diary-panel {
  position: relative;
  width: 340px; max-width: 86vw; height: 100%;
  background: var(--paper);
  border-right: 1px solid var(--rule);
  box-shadow: var(--shadow-md, 0 6px 24px rgba(16,20,27,.12));
  transform: translateX(-100%);
  transition: transform .25s ease;
  display: flex; flex-direction: column;
  pointer-events: auto;
}
.diary-drawer.open .diary-panel { transform: translateX(0); }
body.sb-collapsed .diary-drawer { left: var(--sb-w-collapsed, 68px); }

/* Шапка панели */
.diary-head {
  display: flex; align-items: center; gap: 8px;
  padding: 12px 14px; border-bottom: 1px solid var(--rule);
}
.diary-title { font-weight: 700; font-size: 15px; color: var(--ink); flex: 1; }
.diary-privacy {
  font-size: 11px; color: var(--ink-mute);
  background: var(--paper-soft); border: 1px solid var(--rule-soft);
  border-radius: 999px; padding: 2px 8px; white-space: nowrap; cursor: default;
}
.diary-close {
  border: none; background: none; cursor: pointer;
  font-size: 20px; line-height: 1; color: var(--ink-mute); padding: 2px 6px;
}
.diary-close:hover { color: var(--accent); }

/* Вкладки */
.diary-tabs {
  display: flex; gap: 4px; padding: 8px 10px 0;
  border-bottom: 1px solid var(--rule-soft);
}
.diary-tab {
  border: none; background: none; cursor: pointer;
  font: inherit; font-size: 13px; color: var(--ink-mute);
  padding: 7px 9px; border-bottom: 2px solid transparent;
}
.diary-tab:hover { color: var(--ink); }
.diary-tab.active { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }
.diary-cnt { font-size: 11px; color: var(--ink-mute); }
.diary-tab.active .diary-cnt { color: var(--accent); }

/* Добавление */
.diary-add { display: flex; gap: 6px; padding: 10px 12px 6px; }
.diary-add input {
  flex: 1; padding: 8px 10px; font: inherit; font-size: 13px;
  border: 1px solid var(--rule); border-radius: var(--r-sm);
  background: var(--paper); color: var(--ink);
}
.diary-add input:focus { outline: none; border-color: var(--accent); }
.diary-add-btn { padding: 6px 12px; font-size: 15px; line-height: 1; }

/* Список записей */
.diary-body { flex: 1; overflow-y: auto; padding: 6px 8px 14px; }
.diary-empty {
  color: var(--ink-mute); font-size: 13px; text-align: center;
  padding: 26px 14px; line-height: 1.6;
}
.diary-item {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 8px 6px; border-bottom: 1px solid var(--rule-soft);
}
.diary-item:last-child { border-bottom: none; }
.diary-check { padding-top: 2px; }
.diary-check input { width: 16px; height: 16px; cursor: pointer; accent-color: var(--accent); }
.diary-item-main { flex: 1; min-width: 0; }
.diary-text {
  font-size: 13px; color: var(--ink); line-height: 1.45;
  white-space: pre-wrap; word-break: break-word;
}
.diary-item-done .diary-text { color: var(--ink-mute); text-decoration: line-through; }
.diary-meta { font-size: 11px; color: var(--ink-mute); margin-top: 2px; }
.diary-item-btns { display: flex; gap: 2px; opacity: 0; transition: opacity .12s; }
.diary-item:hover .diary-item-btns { opacity: 1; }
.diary-ibtn {
  border: none; background: none; cursor: pointer;
  font-size: 13px; color: var(--ink-mute); padding: 2px 4px; border-radius: 4px;
}
.diary-ibtn:hover { color: var(--blue); background: var(--paper-soft); }
.diary-ibtn-del:hover { color: var(--accent); background: var(--accent-soft); }

/* Инлайн-редактор записи */
.diary-edit-ta {
  width: 100%; min-height: 64px; resize: vertical;
  font: inherit; font-size: 13px; padding: 6px 8px;
  border: 1px solid var(--rule); border-radius: var(--r-sm);
  background: var(--paper); color: var(--ink);
}
.diary-edit-ta:focus { outline: none; border-color: var(--accent); }
.diary-edit-btns { display: flex; gap: 6px; margin-top: 6px; }
.diary-edit-btns .btn-primary, .diary-edit-btns .btn-secondary {
  padding: 4px 10px; font-size: 12px;
}

/* v4.16.009 — ежедневник без diary.edit работает в режиме просмотра. */
.diary-drawer.diary-readonly .diary-check input { cursor: not-allowed; opacity: .65; }
.diary-drawer.diary-readonly .diary-privacy { color: var(--ink-mute); }


/* v4.16.014 — в документообороте увеличены кнопки действий у заявлений */
.hr-app-table td.order-acts { min-width: 96px; }
.hr-app-table td.order-acts .link-btn2 {
  font-size: 18px;
  line-height: 1;
  padding: 4px 6px;
  margin: 0 3px;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.hr-app-table td.order-acts .link-btn2:hover {
  transform: translateY(-1px);
}

/* ═══════════════════════════════════════════════════════════════════════
   v4.17.001 — защищённые личные и групповые чаты
   ═══════════════════════════════════════════════════════════════════════ */
.chat-topbar-btn { position: relative; }
.chat-unread-badge {
  position: absolute; top: -6px; right: -6px; min-width: 17px; height: 17px;
  padding: 0 4px; border-radius: 999px; background: var(--accent, #c02a2b);
  color: #fff; font-size: 10px; font-weight: 700; line-height: 17px; text-align: center;
  box-shadow: 0 0 0 2px var(--steel, #19212c);
}
.sgem-chat-overlay {
  position: fixed; inset: 0; z-index: 10050; display: flex; align-items: stretch;
  justify-content: stretch; background: rgba(10,15,22,.48); backdrop-filter: blur(3px);
  padding: 58px 18px 18px;
}
.sgem-chat-shell {
  width: min(1320px, 100%); height: 100%; margin: 0 auto; display: grid;
  grid-template-columns: 340px minmax(0, 1fr); overflow: hidden;
  background: var(--paper, #fff); border: 1px solid var(--rule, #d8dee7);
  border-radius: 14px; box-shadow: 0 24px 70px rgba(0,0,0,.28);
}
.sgem-chat-sidebar {
  display: flex; flex-direction: column; min-width: 0;
  border-right: 1px solid var(--rule, #d8dee7); background: var(--paper-soft, #f7f9fc);
}
.sgem-chat-side-head, .sgem-chat-head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 16px 18px; border-bottom: 1px solid var(--rule, #d8dee7);
  background: var(--paper, #fff);
}
.sgem-chat-title { font-size: 18px; font-weight: 800; color: var(--ink, #1b2430); }
.sgem-chat-private, .sgem-chat-current-sub { font-size: 11px; color: var(--ink-mute, #7b8492); margin-top: 2px; }
.sgem-chat-icon-btn {
  border: 0; background: transparent; color: var(--ink-soft, #566170); cursor: pointer;
  width: 34px; height: 34px; border-radius: 8px; font-size: 18px;
}
.sgem-chat-icon-btn:hover { background: var(--rule-soft, #eef1f5); }
.sgem-chat-actions { display: flex; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--rule-soft, #e8edf3); }
.sgem-chat-actions button { flex: 1; white-space: nowrap; }
.sgem-chat-actions #chat_lock_btn { flex: 0 0 38px; padding-left: 8px; padding-right: 8px; }
.sgem-chat-room-list { flex: 1; min-height: 0; overflow-y: auto; padding: 8px; }
.sgem-chat-room {
  width: 100%; display: grid; grid-template-columns: 40px minmax(0,1fr) auto; gap: 10px;
  align-items: center; border: 0; background: transparent; color: var(--ink, #1b2430);
  padding: 10px; border-radius: 10px; cursor: pointer; text-align: left;
}
.sgem-chat-room:hover { background: var(--blue-soft, #edf4ff); }
.sgem-chat-room.active { background: var(--blue-soft, #e7f0ff); box-shadow: inset 3px 0 0 var(--blue, #2f63a5); }
.sgem-chat-room-icon {
  width: 38px; height: 38px; display: grid; place-items: center; border-radius: 12px;
  background: var(--paper, #fff); border: 1px solid var(--rule-soft, #e5eaf0); font-size: 18px;
}
.sgem-chat-room-text { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.sgem-chat-room-name { font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sgem-chat-room-last { font-size: 11px; color: var(--ink-mute, #7b8492); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sgem-chat-room-unread {
  min-width: 21px; height: 21px; padding: 0 6px; border-radius: 999px; background: var(--accent, #c02a2b);
  color: #fff; font-size: 11px; font-weight: 700; line-height: 21px; text-align: center;
}
.sgem-chat-empty-list { padding: 30px 12px; text-align: center; color: var(--ink-mute, #7b8492); }
.sgem-chat-main { min-width: 0; min-height: 0; display: flex; flex-direction: column; background: var(--paper, #fff); }
.sgem-chat-placeholder, .sgem-chat-gate {
  flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 10px; text-align: center; color: var(--ink-mute, #7b8492); padding: 28px;
}
.sgem-chat-placeholder-icon, .sgem-chat-gate-icon { font-size: 46px; opacity: .75; }
.sgem-chat-placeholder b, .sgem-chat-gate h2 { color: var(--ink, #1b2430); margin: 0; }
.sgem-chat-gate p { max-width: 620px; line-height: 1.5; }
.sgem-chat-key-form { width: min(480px, 100%); display: flex; flex-direction: column; gap: 10px; margin-top: 12px; }
.sgem-chat-key-form input[type=password] {
  width: 100%; box-sizing: border-box; padding: 10px 12px; border: 1px solid var(--rule, #d8dee7);
  border-radius: 8px; background: var(--paper, #fff); color: var(--ink, #1b2430);
}
.sgem-chat-key-form label { display: flex; gap: 8px; align-items: flex-start; text-align: left; font-size: 12px; }
.sgem-chat-current-title { font-size: 16px; font-weight: 800; }
.sgem-chat-head-actions { display: flex; gap: 8px; }
.sgem-chat-message-list {
  flex: 1; min-height: 0; overflow-y: auto; padding: 18px 22px; display: flex;
  flex-direction: column; gap: 8px; background:
  linear-gradient(rgba(255,255,255,.91), rgba(255,255,255,.91)),
  repeating-linear-gradient(0deg, transparent, transparent 23px, rgba(54,86,120,.04) 24px);
}
[data-theme="dark"] .sgem-chat-message-list {
  background: linear-gradient(rgba(25,31,40,.95), rgba(25,31,40,.95)),
  repeating-linear-gradient(0deg, transparent, transparent 23px, rgba(255,255,255,.025) 24px);
}
.sgem-chat-message-row { display: flex; justify-content: flex-start; }
.sgem-chat-message-row.mine { justify-content: flex-end; }
.sgem-chat-bubble {
  max-width: min(72%, 760px); padding: 9px 12px 6px; border-radius: 13px 13px 13px 3px;
  background: var(--paper-soft, #f1f4f8); border: 1px solid var(--rule-soft, #e4e9ef);
  color: var(--ink, #1b2430); box-shadow: 0 1px 2px rgba(0,0,0,.04);
}
.sgem-chat-message-row.mine .sgem-chat-bubble {
  background: var(--blue-soft, #e8f1ff); border-color: rgba(47,99,165,.18); border-radius: 13px 13px 3px 13px;
}
.sgem-chat-sender { font-size: 11px; font-weight: 800; color: var(--blue, #2f63a5); margin-bottom: 3px; }
.sgem-chat-message-text { white-space: normal; overflow-wrap: anywhere; line-height: 1.42; font-size: 13px; }
.sgem-chat-message-meta { display: flex; align-items: center; justify-content: flex-end; gap: 5px; margin-top: 4px; font-size: 9px; color: var(--ink-mute, #7b8492); }
.sgem-chat-delete-msg { border: 0; background: transparent; cursor: pointer; font-size: 10px; opacity: .45; padding: 0 2px; }
.sgem-chat-delete-msg:hover { opacity: 1; }
.sgem-chat-deleted, .sgem-chat-locked-msg { font-style: italic; color: var(--ink-mute, #7b8492); }
.sgem-chat-compose {
  display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 10px; align-items: end;
  padding: 12px 16px; border-top: 1px solid var(--rule, #d8dee7); background: var(--paper, #fff);
}
.sgem-chat-compose textarea {
  width: 100%; min-height: 48px; max-height: 150px; resize: vertical; box-sizing: border-box;
  padding: 10px 12px; border: 1px solid var(--rule, #d8dee7); border-radius: 10px;
  background: var(--paper-soft, #f7f9fc); color: var(--ink, #1b2430); font: inherit;
}
.sgem-chat-modal-card { width: min(620px, 94vw); max-height: 86vh; display: flex; flex-direction: column; }
.sgem-chat-modal-body { min-height: 0; overflow-y: auto; }
.sgem-chat-kind-switch { display: flex; gap: 20px; margin-bottom: 12px; }
.sgem-chat-kind-switch label { display: flex; align-items: center; gap: 6px; font-weight: 700; }
.sgem-chat-kind-switch label.disabled { opacity: .45; }
.sgem-chat-user-picker {
  max-height: 390px; overflow-y: auto; margin: 12px 0; border: 1px solid var(--rule, #d8dee7);
  border-radius: 9px; background: var(--paper, #fff);
}
.sgem-chat-user-row {
  display: grid; grid-template-columns: 22px minmax(0,1fr) auto; gap: 8px; align-items: center;
  padding: 10px 12px; border-bottom: 1px solid var(--rule-soft, #e8edf3); cursor: pointer;
}
.sgem-chat-user-row:last-child { border-bottom: 0; }
.sgem-chat-user-row:hover { background: var(--blue-soft, #edf4ff); }
.sgem-chat-user-row.disabled { opacity: .45; cursor: not-allowed; }
.sgem-chat-user-row small { font-size: 10px; color: var(--ink-mute, #7b8492); text-align: right; }

@media (max-width: 820px) {
  .sgem-chat-overlay { padding: 52px 4px 4px; }
  .sgem-chat-shell { grid-template-columns: 280px minmax(0,1fr); border-radius: 8px; }
  .sgem-chat-bubble { max-width: 88%; }
}
@media (max-width: 620px) {
  .sgem-chat-shell { grid-template-columns: 1fr; }
  .sgem-chat-sidebar { position: absolute; z-index: 2; width: min(86vw, 330px); height: calc(100% - 56px); }
  .sgem-chat-main { grid-column: 1; }
}

/* ── v4.17.003: исправления и расширение защищённого чата ───────────── */
.sgem-chat-modal-layer {
  z-index: 10180 !important;
  backdrop-filter: none;
  background: rgba(10,15,22,.58);
}
.sgem-chat-modal-layer .sgem-chat-modal-card { position: relative; z-index: 1; }
.sgem-chat-notice-stack {
  position: fixed; z-index: 10260; top: 72px; right: 24px; width: min(420px, calc(100vw - 32px));
  display: flex; flex-direction: column; gap: 10px; pointer-events: none;
}
.sgem-chat-notice {
  pointer-events: auto; display: grid; grid-template-columns: 28px minmax(0,1fr) 24px; gap: 9px;
  align-items: start; padding: 12px 13px; border-radius: 10px; color: #fff;
  box-shadow: 0 16px 40px rgba(0,0,0,.28); animation: modalIn .15s ease-out;
}
.sgem-chat-notice.error { background: #a72125; }
.sgem-chat-notice.success { background: #287547; }
.sgem-chat-notice > span { display: grid; place-items: center; width: 24px; height: 24px; border-radius: 999px; background: rgba(255,255,255,.18); font-weight: 800; }
.sgem-chat-notice > div { line-height: 1.35; overflow-wrap: anywhere; }
.sgem-chat-notice button { border: 0; background: transparent; color: #fff; cursor: pointer; opacity: .75; }
.sgem-chat-notice button:hover { opacity: 1; }

.sgem-chat-compose { display: block; padding: 10px 14px 12px; position: relative; }
.sgem-chat-compose-row { display: grid; grid-template-columns: auto minmax(0,1fr) auto; gap: 9px; align-items: end; }
.sgem-chat-compose-tools { display: flex; gap: 5px; align-items: center; padding-bottom: 4px; }
.sgem-chat-tool-btn {
  width: 38px; height: 38px; border: 1px solid var(--rule, #d8dee7); border-radius: 9px;
  background: var(--paper-soft, #f7f9fc); color: var(--ink, #1b2430); cursor: pointer; font-size: 18px;
}
.sgem-chat-tool-btn:hover { background: var(--blue-soft, #edf4ff); border-color: rgba(47,99,165,.35); }
.sgem-chat-compose-row textarea { min-height: 46px; }
.sgem-chat-emoji-panel {
  position: absolute; left: 14px; bottom: 72px; z-index: 5; width: min(360px, calc(100% - 28px));
  grid-template-columns: repeat(8, 1fr); gap: 4px; padding: 9px; border: 1px solid var(--rule, #d8dee7);
  border-radius: 11px; background: var(--paper, #fff); box-shadow: 0 12px 34px rgba(0,0,0,.2);
}
.sgem-chat-emoji-panel button { border: 0; background: transparent; border-radius: 7px; cursor: pointer; font-size: 21px; padding: 5px; }
.sgem-chat-emoji-panel button:hover { background: var(--blue-soft, #edf4ff); transform: scale(1.08); }
.sgem-chat-pending-files { display: flex; flex-wrap: wrap; gap: 7px; margin: 0 0 8px 47px; }
.sgem-chat-pending-file {
  display: grid; grid-template-columns: 24px minmax(0,1fr) 24px; gap: 7px; align-items: center;
  max-width: min(360px, 100%); padding: 7px 8px; border: 1px solid var(--rule-soft, #e5eaf0);
  border-radius: 9px; background: var(--paper-soft, #f7f9fc);
}
.sgem-chat-pending-file > div { min-width: 0; display: flex; flex-direction: column; }
.sgem-chat-pending-file b { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 11px; }
.sgem-chat-pending-file small { color: var(--ink-mute, #7b8492); font-size: 9px; }
.sgem-chat-pending-file button { border: 0; background: transparent; cursor: pointer; color: var(--ink-mute, #7b8492); }

.sgem-chat-attachments { display: flex; flex-direction: column; gap: 7px; margin-top: 7px; }
.sgem-chat-attachment-card {
  display: grid; grid-template-columns: 34px minmax(0,1fr) auto; gap: 8px; align-items: center;
  min-width: min(420px, 62vw); padding: 8px; border: 1px solid rgba(47,99,165,.16);
  border-radius: 9px; background: rgba(255,255,255,.62);
}
[data-theme="dark"] .sgem-chat-attachment-card { background: rgba(0,0,0,.15); }
.sgem-chat-attachment-card.locked { display: block; min-width: 0; font-style: italic; color: var(--ink-mute, #7b8492); }
.sgem-chat-attachment-icon { font-size: 24px; text-align: center; }
.sgem-chat-attachment-info { min-width: 0; display: flex; flex-direction: column; }
.sgem-chat-attachment-info b { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 11px; }
.sgem-chat-attachment-info small { font-size: 9px; color: var(--ink-mute, #7b8492); }
.sgem-chat-attachment-open {
  border: 0; background: transparent; color: var(--blue, #2f63a5); cursor: pointer; font-size: 10px;
  text-decoration: underline; white-space: nowrap;
}
.sgem-chat-attachment-open:disabled { opacity: .55; cursor: wait; }
.sgem-chat-media-view { min-height: 180px; max-height: 68vh; display: grid; place-items: center; overflow: auto; }
.sgem-chat-media-view img { max-width: 100%; max-height: 65vh; object-fit: contain; border-radius: 8px; }
.sgem-chat-media-view video { width: min(100%, 980px); max-height: 65vh; background: #000; border-radius: 8px; }
.sgem-chat-media-view audio { width: min(100%, 640px); }

.sgem-chat-group-card { display: flex; align-items: center; gap: 13px; padding: 10px 0 14px; }
.sgem-chat-group-big-icon { width: 54px; height: 54px; display: grid; place-items: center; border-radius: 16px; background: var(--blue-soft, #edf4ff); font-size: 28px; }
.sgem-chat-group-card h4 { margin: 0 0 3px; font-size: 17px; }
.sgem-chat-group-meta { padding: 7px 0; border-top: 1px solid var(--rule-soft, #e8edf3); }
.sgem-chat-members-title { margin: 16px 0 7px; }
.sgem-chat-members-list { border: 1px solid var(--rule, #d8dee7); border-radius: 10px; overflow: hidden; }
.sgem-chat-member-info { display: grid; grid-template-columns: 34px minmax(0,1fr); gap: 9px; align-items: center; padding: 9px 11px; border-bottom: 1px solid var(--rule-soft, #e8edf3); }
.sgem-chat-member-info:last-child { border-bottom: 0; }
.sgem-chat-member-avatar { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 9px; background: var(--paper-soft, #f7f9fc); }
.sgem-chat-member-info > div { display: flex; flex-direction: column; }
.sgem-chat-member-info small { color: var(--ink-mute, #7b8492); font-size: 10px; }

@media (max-width: 720px) {
  .sgem-chat-compose-row { grid-template-columns: auto minmax(0,1fr); }
  .sgem-chat-compose-row #chat_send_btn { grid-column: 1 / -1; }
  .sgem-chat-pending-files { margin-left: 0; }
  .sgem-chat-attachment-card { min-width: 0; grid-template-columns: 30px minmax(0,1fr); }
  .sgem-chat-attachment-open { grid-column: 2; justify-self: start; }
  .sgem-chat-head { align-items: flex-start; }
  .sgem-chat-head-actions { flex-wrap: wrap; justify-content: flex-end; }
}

/* ── v4.17.004 / v4.19.001: изменение ширины столбцов во всех рабочих таблицах.
   Таблица ИЗНАЧАЛЬНО вписана в ширину экрана (ширины столбцов пропорционально
   ужимаются скриптом table_resize.js), поэтому горизонтальная прокрутка при
   первом открытии не появляется. Она включается только когда пользователь сам
   расширил столбцы и сумма ширин стала больше контейнера. ── */
.sgem-table-scroll-host { overflow-x: auto; }
.sgem-resizable-table {
  table-layout: fixed !important;
  width: 100% !important;
  min-width: var(--sgem-resize-min-width, 100%) !important;
}
/* Содержимое ячеек не распирает вписанные столбцы: длинный текст переносится,
   неразрывные строки (обозначения, номера) обрезаются многоточием. */
.sgem-resizable-table > thead > tr > th,
.sgem-resizable-table > tbody > tr > td {
  overflow-wrap: anywhere;
  word-break: break-word;
}
.sgem-resizable-table > tbody > tr > td.mono,
.sgem-resizable-table > tbody > tr > td.nowrap {
  overflow: hidden;
  text-overflow: ellipsis;
}
.sgem-resizable-table .sgem-resizable-th {
  position: relative;
  overflow: visible;
}
.sgem-column-resizer {
  position: absolute;
  z-index: 6;
  top: 0;
  right: -4px;
  width: 9px;
  height: 100%;
  cursor: col-resize;
  touch-action: none;
  user-select: none;
}
.sgem-column-resizer::after {
  content: '';
  position: absolute;
  top: 18%;
  bottom: 18%;
  left: 4px;
  width: 1px;
  background: transparent;
}
.sgem-resizable-th:hover > .sgem-column-resizer::after,
.sgem-column-resizer:focus::after,
.sgem-resizable-table.is-column-resizing .sgem-column-resizer::after {
  background: var(--blue, #2f63a5);
}
body.sgem-column-resizing,
body.sgem-column-resizing * {
  cursor: col-resize !important;
  user-select: none !important;
}
/* v4.44.005 — во время перетаскивания двигается только лёгкая
   фиксированная направляющая. Реальная таблица перестраивается один раз после
   pointerup, поэтому большие реестры не «залипают» при resize. */
.sgem-column-resize-guide {
  position: fixed;
  z-index: 10050;
  top: 0;
  left: 0;
  width: 2px;
  height: 20px;
  background: var(--blue, #2f63a5);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--paper, #fff) 65%, transparent);
  pointer-events: none;
  opacity: 0;
  transform: translate3d(-1px,0,0);
  transition: opacity .08s ease;
  will-change: transform;
}
.sgem-column-resize-guide.is-visible { opacity: .9; }

/* ── v4.17.005: встроенный предпросмотр изображений, видео, аудио и PDF ── */
.sgem-chat-attachment-card.preview-card {
  display: block;
  min-width: min(460px, 62vw);
  padding: 8px;
}
.sgem-chat-attachment-head {
  display: grid;
  grid-template-columns: 34px minmax(0,1fr) auto;
  gap: 8px;
  align-items: center;
}
.sgem-chat-inline-preview {
  margin-top: 8px;
  width: min(430px, 58vw);
  max-width: 100%;
  overflow: hidden;
  border-radius: 9px;
  background: rgba(26,34,45,.06);
  border: 1px solid rgba(47,99,165,.13);
}
[data-theme="dark"] .sgem-chat-inline-preview { background: rgba(255,255,255,.04); }
.sgem-chat-inline-preview img {
  display: block;
  width: 100%;
  max-height: 340px;
  object-fit: contain;
  cursor: zoom-in;
  background: rgba(0,0,0,.04);
}
.sgem-chat-inline-preview video {
  display: block;
  width: 100%;
  max-height: 360px;
  background: #000;
}
.sgem-chat-inline-preview audio {
  display: block;
  width: calc(100% - 16px);
  margin: 8px;
}
.sgem-chat-inline-loading {
  min-height: 76px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  color: var(--ink-mute, #7b8492);
  font-size: 11px;
}
.sgem-chat-inline-loading span {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  border: 2px solid rgba(47,99,165,.22);
  border-top-color: var(--blue, #2f63a5);
  animation: sgemChatSpin .8s linear infinite;
}
@keyframes sgemChatSpin { to { transform: rotate(360deg); } }
.sgem-chat-inline-preview.failed { border-color: rgba(192,42,43,.28); }
.sgem-chat-inline-preview.failed button {
  width: 100%;
  min-height: 58px;
  border: 0;
  background: transparent;
  color: var(--accent, #c02a2b);
  cursor: pointer;
  padding: 10px;
}
.sgem-chat-modal-card.pdf-mode {
  width: min(1120px, 96vw);
  height: min(860px, 92vh);
  max-height: 92vh;
}
.sgem-chat-pdf-view {
  flex: 1;
  min-height: 0;
  height: 72vh;
  border: 1px solid var(--rule, #d8dee7);
  border-radius: 8px;
  overflow: hidden;
  background: #eef1f5;
}
.sgem-chat-pdf-view iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
  background: #fff;
}
@media (max-width: 720px) {
  .sgem-chat-attachment-card.preview-card { min-width: 0; }
  .sgem-chat-inline-preview { width: 100%; max-width: 100%; }
  .sgem-chat-modal-card.pdf-mode { width: 98vw; height: 92vh; }
}


/* ── v4.17.007: таблицы без пустой белой полосы + читаемая тёмная тема ── */
/* Контейнер всегда окрашен в цвет текущей темы. Таблица занимает всю доступную
   ширину, а горизонтальная прокрутка появляется только когда сумма столбцов
   действительно шире окна. */
.sgem-table-scroll-host {
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
  background: var(--paper, #fff);
}
.sgem-table-scroll-host > .sgem-resizable-table {
  margin-right: 0 !important;
}

/* В старых модулях часть цветов таблиц была задана светлыми константами.
   В тёмной теме это давало светлую строку с почти белым текстом, особенно
   при наведении. Ниже единые безопасные цвета для рабочих таблиц. */
html[data-theme="dark"] .sgem-table-scroll-host,
html[data-theme="dark"] .bs-list-scroll,
html[data-theme="dark"] .dict-table-wrap,
html[data-theme="dark"] .users-table-wrap,
html[data-theme="dark"] .metro-table-scroll,
html[data-theme="dark"] .metro-sched-scroll,
html[data-theme="dark"] .ts-grid-scroll,
html[data-theme="dark"] .att-grid-scroll,
html[data-theme="dark"] .eng-ops-scroll {
  background: var(--paper);
  border-color: var(--rule);
}

html[data-theme="dark"] table,
html[data-theme="dark"] table th,
html[data-theme="dark"] table td {
  color: var(--ink);
  border-color: var(--rule-soft);
}

html[data-theme="dark"] table.bs-list-table,
html[data-theme="dark"] table.users-table,
html[data-theme="dark"] table.perm-edit-table,
html[data-theme="dark"] table.plan-table,
html[data-theme="dark"] table.metro-table,
html[data-theme="dark"] table.eng-ops-table {
  background: var(--paper);
}

html[data-theme="dark"] table.bs-list-table.filterable thead th,
html[data-theme="dark"] table.bs-list-table thead th,
html[data-theme="dark"] table.users-table thead th,
html[data-theme="dark"] table.perm-edit-table thead th,
html[data-theme="dark"] table.plan-table thead th,
html[data-theme="dark"] table.metro-table thead th,
html[data-theme="dark"] table.eng-ops-table thead th {
  background: #303a48 !important;
  color: var(--ink) !important;
  border-color: var(--rule) !important;
}

html[data-theme="dark"] table.bs-list-table.filterable thead tr.filter-row th,
html[data-theme="dark"] table.bs-list-table thead tr.filter-row th {
  background: #27313e !important;
  color: var(--ink-soft) !important;
}

html[data-theme="dark"] table.bs-list-table tbody tr,
html[data-theme="dark"] table.users-table tbody tr,
html[data-theme="dark"] table.perm-edit-table tbody tr,
html[data-theme="dark"] table.plan-table tbody tr,
html[data-theme="dark"] table.metro-table tbody tr,
html[data-theme="dark"] table.eng-ops-table tbody tr {
  background: transparent;
  color: var(--ink);
}

html[data-theme="dark"] table.bs-list-table tbody tr:nth-child(even),
html[data-theme="dark"] table.users-table tbody tr:nth-child(even),
html[data-theme="dark"] table.perm-edit-table tbody tr:nth-child(even),
html[data-theme="dark"] table.plan-table tbody tr:nth-child(even),
html[data-theme="dark"] table.metro-table tbody tr:nth-child(even),
html[data-theme="dark"] table.eng-ops-table tbody tr:nth-child(even) {
  background: rgba(255,255,255,.025);
}

html[data-theme="dark"] table.bs-list-table tbody tr:hover,
html[data-theme="dark"] table.bs-list-table.filterable tbody tr:hover,
html[data-theme="dark"] .prod-journal-table tbody tr.prod-order-row:hover,
html[data-theme="dark"] .prod-orders-table tr.prod-order-row:hover,
html[data-theme="dark"] table.users-table tbody tr:hover,
html[data-theme="dark"] table.plan-table tbody tr:hover,
html[data-theme="dark"] table.metro-table tbody tr:hover,
html[data-theme="dark"] table.eng-ops-table tbody tr:hover {
  background: #344154 !important;
  color: #f0f4fa !important;
}

html[data-theme="dark"] table.bs-list-table tbody tr:hover td,
html[data-theme="dark"] table.bs-list-table.filterable tbody tr:hover td,
html[data-theme="dark"] .prod-journal-table tbody tr.prod-order-row:hover td,
html[data-theme="dark"] .prod-orders-table tr.prod-order-row:hover td,
html[data-theme="dark"] table.users-table tbody tr:hover td,
html[data-theme="dark"] table.plan-table tbody tr:hover td,
html[data-theme="dark"] table.metro-table tbody tr:hover td,
html[data-theme="dark"] table.eng-ops-table tbody tr:hover td {
  color: #f0f4fa !important;
}

html[data-theme="dark"] .breadcrumbs {
  background: var(--paper);
  border-color: var(--rule);
  color: var(--ink-soft);
}
html[data-theme="dark"] .breadcrumbs .crumb.current { color: var(--ink); }
html[data-theme="dark"] .bs-list-meta,
html[data-theme="dark"] .muted,
html[data-theme="dark"] .hint { color: var(--ink-mute) !important; }


/* ═══════════════════════════════════════════════════════════════════════
   v4.17.008 — устойчивый мобильный запуск + корректная обработка видеоформатов
   ═══════════════════════════════════════════════════════════════════════ */
.mobile-menu-toggle {
  display: none;
  margin-left: auto;
  width: 40px;
  height: 40px;
  border: 1px solid rgba(255,255,255,.18);
  border-radius: 9px;
  background: rgba(255,255,255,.06);
  color: #fff;
  font-size: 21px;
  line-height: 1;
  cursor: pointer;
}

.sgem-chat-video-unsupported {
  min-height: 150px;
  padding: 18px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  text-align: center;
  color: var(--ink, #1b2430);
  background: var(--paper-soft, #f7f9fc);
}
.sgem-chat-video-unsupported-icon { font-size: 34px; }
.sgem-chat-video-unsupported span {
  max-width: 520px;
  color: var(--ink-mute, #7b8492);
  font-size: 11px;
  line-height: 1.45;
}
.sgem-chat-video-unsupported .btn-secondary { margin-top: 4px; }
.sgem-chat-mobile-back { display: none; }
.sgem-chat-head-main { min-width: 0; display: flex; align-items: center; gap: 10px; }
.sgem-chat-head-main > div { min-width: 0; }

@media (max-width: 900px) {
  html { -webkit-text-size-adjust: 100%; }
  body { overflow-x: hidden; }

  .topbar {
    height: 56px;
    min-height: 56px;
    padding: 0 10px;
    overflow: visible !important;
  }
  .topbar-left { min-width: 0; gap: 8px; }
  .topbar .brand-logo { height: 25px; padding: 3px 6px; }
  .topbar .brand-text { min-width: 0; font-size: 13px; }
  .topbar .brand-text .version { display: none; }
  .mobile-menu-toggle { display: grid; place-items: center; flex: 0 0 auto; }
  .topbar-right {
    position: fixed;
    z-index: 620;
    top: 58px;
    left: 8px;
    right: 8px;
    max-height: calc(100dvh - 68px);
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 7px;
    padding: 10px;
    border: 1px solid rgba(255,255,255,.14);
    border-radius: 12px;
    background: #1a2029;
    box-shadow: 0 18px 45px rgba(0,0,0,.38);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transform: translateY(-8px);
    transition: opacity .16s ease, transform .16s ease, visibility .16s;
  }
  .topbar.mobile-nav-open .topbar-right {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transform: translateY(0);
  }
  .topbar-right > *,
  .topbar .topbar-btn,
  .topbar .status-pill,
  .topbar .user-box { width: 100%; box-sizing: border-box; }
  .topbar .topbar-btn {
    min-height: 43px;
    display: flex;
    align-items: center;
    justify-content: flex-start;
    padding: 9px 12px;
    font-size: 14px;
  }
  .topbar .status-pill { min-height: 38px; display: flex; align-items: center; justify-content: center; }
  .topbar .user-box { display: flex; padding: 5px; }
  .topbar .user-select { width: 100%; min-width: 0; min-height: 36px; }

  .breadcrumbs {
    top: 56px;
    padding: 8px 11px;
    overflow-x: auto;
    white-space: nowrap;
    scrollbar-width: none;
  }
  .breadcrumbs::-webkit-scrollbar { display: none; }

  .page-pad { padding: 15px 10px; max-width: none; }
  .page-head {
    align-items: stretch;
    flex-direction: column;
    gap: 10px;
    margin-bottom: 14px;
  }
  .page-head h1 { font-size: 20px; }
  .page-actions { display: grid; grid-template-columns: 1fr; gap: 8px; width: 100%; }
  .search-input { width: 100%; min-width: 0; box-sizing: border-box; }
  .section-head, .metro-add-head, .planfact-head, .docs-head, .prod-head {
    align-items: stretch;
    flex-direction: column;
    gap: 8px;
  }
  .section-head > *, .page-actions > * { max-width: 100%; }

  .home-wrap { padding: 24px 10px 34px; }
  .home-title { font-size: 28px; }
  .home-cards { display: grid; grid-template-columns: 1fr; gap: 10px; }
  .home-card { width: 100%; max-width: none; min-height: 116px; flex-basis: auto; }
  .home-toolbar { display: flex; flex-wrap: wrap; gap: 7px; }

  .form-grid,
  .form-grid2,
  .modal-card.product-mode .form-grid,
  .copy-issue-grid,
  .prod-new,
  .metro-add-grid {
    grid-template-columns: 1fr !important;
  }
  .fl.wide-2, .fl.wide-4, .form-grid2 .wide-2, .metro-fld-wide { grid-column: auto !important; }
  input, select, textarea { font-size: 16px; }
  .btn-primary, .btn-secondary, .btn-danger { min-height: 42px; }

  .bs-header {
    grid-template-columns: 1fr;
    align-items: stretch;
    gap: 9px;
    padding: 10px;
  }
  .bs-actions { display: flex; flex-wrap: wrap; gap: 7px; }
  .bs-layout { grid-template-columns: 1fr; min-height: 0; }
  .bs-nav {
    position: sticky;
    top: 91px;
    z-index: 80;
    width: 100%;
    height: auto;
    max-height: none;
    display: flex;
    overflow-x: auto;
    overflow-y: hidden;
    padding: 6px;
    box-sizing: border-box;
    scrollbar-width: thin;
  }
  .bs-nav .nav-btn {
    width: auto;
    flex: 0 0 auto;
    padding: 9px 12px;
    border-left: 0;
    border-bottom: 3px solid transparent;
    border-radius: 7px;
    white-space: nowrap;
  }
  .bs-nav .nav-btn.active { border-left: 0; border-bottom-color: var(--accent); }
  .bs-main { max-height: none; overflow: visible; padding: 12px 10px 24px; }

  .dicts-layout { grid-template-columns: 1fr; min-height: 0; }
  .dicts-sidebar {
    position: static;
    max-height: 230px;
    overflow-y: auto;
    border-right: 0;
    border-bottom: 1px solid var(--rule);
    padding: 8px 0;
  }

  .eng-cols,
  .eng-cols.eng-cols-resizable,
  .prod-cols,
  .mat-page {
    grid-template-columns: 1fr !important;
  }
  .eng-col-resizer { display: none !important; }

  .position-card {
    grid-template-columns: 34px minmax(0,1fr);
    gap: 10px;
    padding: 12px;
  }
  .position-card .pos-cost, .position-card .pos-actions { grid-column: 2; text-align: left; }
  .position-card .pos-info .pos-meta { flex-wrap: wrap; gap: 5px 10px; }

  .sgem-table-scroll-host,
  .metro-table-scroll,
  .dict-table-wrap,
  .users-table-wrap,
  .bs-list-scroll,
  [style*="overflow-x:auto"],
  [style*="overflow-x: auto"] {
    max-width: 100%;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior-x: contain;
  }
  .sgem-column-resizer { right: -7px; width: 15px; }

  .modal {
    padding: 0 !important;
    align-items: flex-end;
  }
  .modal-card,
  .modal-card.wide,
  .modal-card.full,
  .modal-card.product-mode {
    width: 100vw !important;
    max-width: 100vw !important;
    max-height: 94dvh !important;
    box-sizing: border-box;
    overflow-y: auto;
    border-radius: 16px 16px 0 0 !important;
    padding: 16px !important;
  }
  .modal-actions {
    position: sticky;
    bottom: -16px;
    z-index: 3;
    flex-wrap: wrap;
    padding: 11px 0 4px;
    background: var(--paper, #fff);
  }
  .modal-actions > button { flex: 1 1 130px; }
  .order-link-grid { grid-template-columns: 1fr; }
  .order-link-field.full { grid-column: auto; }

  .notif-panel {
    position: fixed !important;
    top: 58px !important;
    left: 8px !important;
    right: 8px !important;
    width: auto !important;
    max-height: calc(100dvh - 70px) !important;
  }
}

@media (max-width: 620px) {
  .sgem-chat-overlay { padding: 0 !important; align-items: stretch; background: var(--paper, #fff); }
  .sgem-chat-shell {
    position: relative;
    display: block;
    width: 100vw;
    height: 100dvh;
    max-width: none;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    overflow: hidden;
  }
  .sgem-chat-sidebar,
  .sgem-chat-main {
    position: absolute !important;
    inset: 0;
    width: 100% !important;
    height: 100% !important;
    grid-column: auto;
    transition: transform .2s ease;
  }
  .sgem-chat-sidebar { z-index: 2; transform: translateX(0); border-right: 0; }
  .sgem-chat-main { z-index: 3; transform: translateX(100%); }
  .sgem-chat-shell.room-open .sgem-chat-sidebar { transform: translateX(-100%); }
  .sgem-chat-shell.room-open .sgem-chat-main { transform: translateX(0); }
  .sgem-chat-mobile-back {
    display: grid;
    place-items: center;
    flex: 0 0 auto;
    width: 38px;
    height: 38px;
    border: 1px solid var(--rule, #d8dee7);
    border-radius: 10px;
    background: var(--paper-soft, #f7f9fc);
    color: var(--ink, #1b2430);
    font-size: 21px;
    cursor: pointer;
  }
  .sgem-chat-side-head, .sgem-chat-head { min-height: 58px; padding: 10px 11px; }
  .sgem-chat-current-title { max-width: 55vw; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .sgem-chat-current-sub { max-width: 58vw; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .sgem-chat-head-actions { gap: 5px; }
  .sgem-chat-head-actions .btn-secondary { min-height: 36px; padding: 6px 8px; font-size: 11px; }
  .sgem-chat-actions { padding: 8px; }
  .sgem-chat-actions button { min-height: 42px; padding: 7px 8px; }
  .sgem-chat-room { min-height: 62px; }
  .sgem-chat-message-list { padding: 10px 8px; gap: 7px; }
  .sgem-chat-bubble { max-width: 92%; padding: 8px 10px 6px; }
  .sgem-chat-compose { padding: 8px; }
  .sgem-chat-compose-row { grid-template-columns: auto minmax(0,1fr); gap: 6px; }
  .sgem-chat-compose-tools { align-self: stretch; flex-direction: column; padding-bottom: 0; }
  .sgem-chat-tool-btn { width: 38px; height: 38px; }
  .sgem-chat-compose-row textarea { min-height: 82px; resize: none; }
  .sgem-chat-compose-row #chat_send_btn { grid-column: 1 / -1; width: 100%; min-height: 43px; }
  .sgem-chat-pending-files { margin-left: 0; flex-wrap: nowrap; overflow-x: auto; }
  .sgem-chat-pending-file { min-width: 230px; }
  .sgem-chat-attachment-card,
  .sgem-chat-attachment-card.preview-card { min-width: 0; width: 100%; box-sizing: border-box; }
  .sgem-chat-inline-preview { width: 100%; }
  .sgem-chat-inline-preview img, .sgem-chat-inline-preview video { max-height: 42dvh; }
  .sgem-chat-notice-stack { top: 8px; left: 8px; right: 8px; width: auto; }
  .sgem-chat-modal-layer { padding: 0 !important; align-items: flex-end; }
  .sgem-chat-modal-card,
  .sgem-chat-modal-card.pdf-mode {
    width: 100vw !important;
    max-width: 100vw !important;
    height: auto;
    max-height: 94dvh !important;
    border-radius: 16px 16px 0 0 !important;
  }
  .sgem-chat-modal-card.pdf-mode { height: 94dvh; }
  .sgem-chat-pdf-view { height: 72dvh; }
  .sgem-chat-user-picker { max-height: 52dvh; }
  .sgem-chat-kind-switch { flex-wrap: wrap; }
}


/* v4.17.008 — видимое состояние ошибки запуска вместо пустого экрана. */
.sgem-startup-warning {
  position: fixed;
  z-index: 2500;
  left: 18px;
  right: 18px;
  bottom: 18px;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border: 1px solid #d5a33a;
  border-radius: 10px;
  background: #fff8e7;
  color: #3f3215;
  box-shadow: 0 12px 35px rgba(0,0,0,.22);
}
.sgem-startup-warning.fatal { border-color: #c83b3b; background: #fff0f0; color: #501b1b; }
.sgem-startup-warning > div { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }
.sgem-startup-warning span { font-size: 12px; line-height: 1.4; }
.sgem-startup-warning button {
  min-height: 36px;
  padding: 7px 12px;
  border: 1px solid rgba(0,0,0,.16);
  border-radius: 7px;
  background: #fff;
  cursor: pointer;
}
.sgem-startup-warning button.close { width: 36px; padding: 0; }
.sgem-load-warning {
  margin: 8px;
  padding: 10px 12px;
  border: 1px solid #d5a33a;
  border-radius: 8px;
  background: #fff8e7;
  color: #3f3215;
}
.sgem-load-warning button { margin-left: 8px; }

@media (max-width: 1180px) {
  .topbar-left { flex: 1 1 auto; width: 100%; }
  .mobile-menu-toggle { margin-left: auto; }
  .topbar .user-box { order: -1; min-height: 48px; }
  .topbar .user-select {
    display: block !important;
    width: 100% !important;
    min-width: 0 !important;
    min-height: 42px !important;
    padding: 7px 10px !important;
    font-size: 16px !important;
    color: #fff !important;
    background: #111821 !important;
    border-color: rgba(255,255,255,.24) !important;
  }
  .sgem-startup-warning { left: 8px; right: 8px; bottom: 8px; align-items: stretch; flex-wrap: wrap; }
  .sgem-startup-warning > div { flex-basis: 100%; }
  .sgem-startup-warning button:not(.close) { flex: 1; }
}

/* ══════════════════════════════════════════════════════════════
   v4.20.001 — РЕДИЗАЙН ОБОЛОЧКИ: боковое меню + новая главная.
   Слой добавлен В КОНЕЦ файла и намеренно перекрывает прежние
   правила топбара/главной. Внутренности разделов (таблицы, карточки
   БС, модалки) НЕ трогаются — меняется только оболочка и главная.
   Все цвета берутся из переменных, поэтому тёмная тема работает
   без отдельного дублирования правил.
   ══════════════════════════════════════════════════════════════ */

:root {
  --sb-w: 248px;          /* ширина бокового меню */
  --sb-w-collapsed: 68px; /* свёрнутое состояние */
  --topbar-h: 64px;
  --r-xl: 16px;
  --violet: #7c5cff;
  --violet-soft: #f1edff;
  --sky-soft: #e9f2ff;
  --mint-soft: #e6f6ee;
  --amber-soft: #fff3e3;
}

/* ── БОКОВОЕ МЕНЮ ─────────────────────────────────────────── */
.sidebar {
  position: fixed; top: 0; left: 0; bottom: 0; z-index: 120;
  width: var(--sb-w);
  background: var(--paper);
  border-right: 1px solid var(--rule);
  display: flex; flex-direction: column;
  transition: width .18s ease, transform .18s ease;
}
.ui-icon-sprite {
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
}
.ui-icon-sprite symbol,
.side-item svg,
.topbar svg,
.user-icon svg {
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.sidebar-brand {
  display: flex; align-items: flex-start; gap: 12px;
  height: 78px; padding: 10px 18px 7px;
  border-bottom: 1px solid var(--rule-soft); flex: none;
}
.sidebar-logo { height: 32px; width: auto; flex: none; margin-top: 2px; }
.sidebar-brand-text {
  display: flex; flex-direction: column; line-height: 1.15;
  font-weight: 700; font-size: 18px; letter-spacing: .25px; color: var(--ink);
  white-space: nowrap; overflow: hidden;
}
.sidebar-brand-name { font-size: 18px; line-height: 1.05; }
.sidebar-brand-text small {
  font-size: 10.5px; font-weight: 500; letter-spacing: .45px;
  text-transform: uppercase; color: var(--ink-mute);
}
.sidebar-brand-version {
  margin-top: 6px;
  font-family: var(--mono);
  font-size: 9.5px;
  font-weight: 600;
  color: var(--blue);
  letter-spacing: .35px;
}
.sidebar-nav { flex: 1 1 auto; min-height: 100px; overflow-y: auto; padding: 12px 10px; }
.sidebar-foot {
  flex: 0 1 auto;
  max-height: 54vh;
  overflow-y: auto;
  padding: 10px;
  border-top: 1px solid var(--rule-soft);
}
.sidebar-tools {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid var(--rule-soft);
}
.sidebar-developer {
  padding: 7px 8px 1px;
  color: var(--ink-mute);
  font-size: 9.5px;
  font-weight: 400;
  line-height: 1.2;
  letter-spacing: .15px;
  text-align: center;
  opacity: .65;
  white-space: nowrap;
}

.side-item {
  display: flex; align-items: center; gap: 11px;
  width: 100%; padding: 9px 11px; margin-bottom: 2px;
  background: none; border: 0; border-radius: var(--r-md);
  font-family: inherit; font-size: 13px; color: var(--ink-soft);
  cursor: pointer; text-align: left;
  transition: background .13s, color .13s;
}
.side-item:hover { background: var(--paper-soft); color: var(--ink); }
.side-item.active { background: var(--blue-soft); color: var(--blue); font-weight: 600; }
.side-item .si-ico {
  width: 24px;
  height: 24px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: none;
}
.side-item .si-ico svg { width: 21px; height: 21px; }
.side-item .si-txt { flex: 1; line-height: 1.3; }
.side-item .si-chev { color: var(--ink-mute); font-size: 15px; }
.sidebar .chat-unread-badge {
  top: 50%;
  right: 8px;
  transform: translateY(-50%);
  box-shadow: 0 0 0 2px var(--paper);
}

/* Свёрнутое меню — только иконки */
body.sb-collapsed .sidebar { width: var(--sb-w-collapsed); }
body.sb-collapsed .sidebar .si-txt,
body.sb-collapsed .sidebar .si-chev,
body.sb-collapsed .sidebar-brand-text { display: none; }
body.sb-collapsed .side-item { justify-content: center; padding: 10px 0; }
body.sb-collapsed .sidebar-brand { justify-content: center; align-items: center; padding: 0; }
body.sb-collapsed .sidebar-logo { margin-top: 0; }
body.sb-collapsed .sidebar-developer { display: none; }

.sidebar-scrim { display: none; }

/* ── СДВИГ ОСНОВНОГО СОДЕРЖИМОГО ──────────────────────────── */
body { padding-left: var(--sb-w); transition: padding-left .18s ease; }
body.sb-collapsed { padding-left: var(--sb-w-collapsed); }

/* ── ТОПБАР ───────────────────────────────────────────────── */
.topbar { height: var(--topbar-h); gap: 12px; padding: 0 22px; }
.topbar-left { gap: 12px; flex: 1 1 auto; min-width: 0; }
.topbar .brand-logo { display: none; }
.topbar .brand-text { display: none; }

.sidebar-toggle {
  background: none; border: 0; cursor: pointer; flex: none;
  font-size: 17px; color: var(--ink-soft); padding: 6px 8px;
  border-radius: var(--r-sm); line-height: 1;
}
.sidebar-toggle:hover { background: var(--paper-soft); color: var(--ink); }

/* Глобальный поиск по центру топбара */
.topsearch {
  position: relative; display: flex; align-items: center;
  width: 100%; max-width: 460px; margin: 0 auto;
}
.topsearch-ico {
  position: absolute; left: 12px;
  width: 16px; height: 16px;
  color: var(--ink-mute); pointer-events: none;
}
.topsearch-ico svg { width: 16px; height: 16px; }
.topsearch-input {
  width: 100%; height: 38px; padding: 0 74px 0 34px;
  border: 1px solid var(--rule); border-radius: var(--r-md);
  background: var(--paper-soft); font-family: inherit;
  font-size: 13px; color: var(--ink);
}
.topsearch-input::placeholder { color: var(--ink-mute); }
.topsearch-input:focus {
  outline: none; border-color: var(--blue);
  background: var(--paper); box-shadow: var(--ring);
}
.topsearch-kbd {
  position: absolute; right: 8px; padding: 3px 7px;
  font-size: 10px; color: var(--ink-mute);
  background: var(--paper); border: 1px solid var(--rule);
  border-radius: var(--r-sm); pointer-events: none; white-space: nowrap;
}

/* ── ГЛАВНАЯ: две колонки ─────────────────────────────────── */
.home-wrap {
  max-width: 1560px; margin: 0 auto; padding: 30px 32px 56px;
  text-align: left;
  display: grid; grid-template-columns: minmax(0, 1fr) 392px; gap: 26px;
  align-items: start;
}
.home-wrap::before { display: none; }
.home-main { min-width: 0; }
.home-title { font-size: 25px; font-weight: 700; letter-spacing: -.4px; margin: 0 0 4px; }
.home-sub { font-size: 13.5px; color: var(--ink-mute); margin: 0 0 26px; }

.home-sec-head { display: flex; align-items: center; justify-content: space-between; }
.home-sec-title {
  font-size: 15px; font-weight: 700; letter-spacing: -.2px;
  color: var(--ink); margin: 0 0 14px;
}
.home-fav-cfg {
  background: none; border: 0; cursor: pointer; color: var(--ink-mute);
  font-size: 14px; padding: 4px 7px; border-radius: var(--r-sm); margin-bottom: 12px;
}
.home-fav-cfg:hover { background: var(--paper-soft); color: var(--ink); }

/* Избранные разделы — 4 в ряд, крупная иконка в цветном квадрате */
.home-fav {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 16px; margin: 0 0 30px;
}
.fav-card {
  position: relative; display: flex; flex-direction: column; gap: 8px;
  min-height: 172px; padding: 18px;
  background: var(--paper); border: 1px solid var(--rule);
  border-radius: var(--r-xl); cursor: pointer; text-align: left;
  font-family: inherit; box-shadow: var(--shadow-sm);
  transition: border-color .14s, box-shadow .14s, transform .14s;
}
.fav-card:hover {
  border-color: var(--blue); box-shadow: var(--shadow-md); transform: translateY(-2px);
}
.fav-ico {
  display: flex; align-items: center; justify-content: center;
  width: 42px; height: 42px; border-radius: var(--r-md);
  font-size: 20px; background: var(--sky-soft); margin-bottom: 4px;
}
.fav-card:nth-child(1) .fav-ico { background: var(--mint-soft); }
.fav-card:nth-child(2) .fav-ico { background: var(--violet-soft); }
.fav-card:nth-child(3) .fav-ico { background: var(--sky-soft); }
.fav-card:nth-child(4) .fav-ico { background: var(--amber-soft); }
.fav-name { font-size: 14px; font-weight: 650; color: var(--ink); line-height: 1.3; }
.fav-desc { font-size: 12px; color: var(--ink-mute); line-height: 1.45; flex: 1; }
.fav-arrow { align-self: flex-end; color: var(--ink-mute); font-size: 15px; }
.fav-card:hover .fav-arrow { color: var(--blue); }
.home-fav-empty {
  grid-column: 1 / -1; padding: 22px; text-align: center;
  color: var(--ink-mute); font-size: 12.5px;
  border: 1px dashed var(--rule); border-radius: var(--r-xl);
}

/* Все разделы — карточки в 3 колонки, иконка слева, стрелка справа */
.home-cards {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 14px; justify-content: initial;
}
.home-card {
  display: grid !important;
  grid-template-columns: 38px 1fr 16px;
  grid-template-areas: 'ico name arrow' 'ico desc arrow';
  align-items: center; gap: 2px 13px;
  width: auto !important; max-width: none !important; flex-basis: auto !important;
  min-height: 84px; padding: 15px 16px; text-align: left;
  background: var(--paper); border: 1px solid var(--rule);
  border-radius: var(--r-lg); cursor: pointer; font-family: inherit;
  box-shadow: var(--shadow-sm);
  transition: border-color .14s, box-shadow .14s, transform .14s;
}
.home-card.hidden-by-role { display: none !important; }
.home-card::before, .home-card::after { display: none !important; }
.home-card:hover {
  border-color: var(--blue); box-shadow: var(--shadow-md); transform: translateY(-2px);
}
.home-card-ico {
  grid-area: ico; display: flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: var(--r-md);
  font-size: 17px !important; background: var(--paper-soft);
  margin: 0 !important;
}
.home-card-name { grid-area: name; font-size: 13.5px; font-weight: 650; align-self: end; }
.home-card-desc { grid-area: desc; font-size: 11.5px; color: var(--ink-mute); align-self: start; line-height: 1.4; }
.home-card::part(arrow) { grid-area: arrow; }
.home-card .home-card-arrow { grid-area: arrow; color: var(--ink-mute); font-size: 15px; }
.home-card:hover .home-card-arrow { color: var(--blue); }

.home-toolbar { justify-content: flex-start; margin: 0 0 14px; }

/* ── ПРАВАЯ КОЛОНКА ───────────────────────────────────────── */
.home-rail { display: flex; flex-direction: column; gap: 16px; position: sticky; top: 82px; }
.rail-card {
  background: var(--paper); border: 1px solid var(--rule);
  border-radius: var(--r-xl); padding: 16px; box-shadow: var(--shadow-sm);
}
.rail-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
.rail-card h3 { font-size: 13.5px; font-weight: 700; color: var(--ink); margin: 0; }
.rail-link {
  background: none; border: 0; cursor: pointer;
  color: var(--blue); font-size: 12px; font-family: inherit; padding: 2px 4px;
}
.rail-link:hover { text-decoration: underline; }
.rail-body { display: flex; flex-direction: column; }
.rail-empty { color: var(--ink-mute); font-size: 12px; padding: 10px 0; text-align: center; }

.rail-item {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 9px 0; border-bottom: 1px solid var(--rule-soft);
  cursor: pointer; background: none; border-left: 0; border-right: 0; border-top: 0;
  width: 100%; min-width: 0; overflow: hidden;
  text-align: left; font-family: inherit;
}
.rail-item:last-child { border-bottom: 0; }
.rail-item:hover .ri-title { color: var(--blue); }
.ri-ico {
  display: flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 9px; flex: none;
  font-size: 13px; background: var(--paper-soft);
}
.ri-ico.warn { background: var(--accent-soft); }
.ri-ico.info { background: var(--sky-soft); }
.ri-ico.time { background: var(--amber-soft); }
.ri-main { flex: 1; min-width: 0; }
.ri-title {
  display: block; max-width: 100%;
  font-size: 12.5px; font-weight: 600; color: var(--ink);
  line-height: 1.35; margin-bottom: 2px;
  overflow-wrap: anywhere; word-break: break-word;
}
.ri-sub {
  display: block; max-width: 100%;
  font-size: 11.5px; color: var(--ink-mute); line-height: 1.35;
  overflow: hidden; overflow-wrap: anywhere; word-break: break-word;
  white-space: normal;
}
.ri-time {
  font-size: 10.5px; color: var(--ink-mute);
  flex: none; padding-top: 2px; white-space: nowrap;
}
.ri-tag {
  font-size: 9.5px; font-weight: 700; letter-spacing: .4px;
  color: var(--ink-mute); background: var(--paper-soft);
  border: 1px solid var(--rule-soft); border-radius: 5px;
  padding: 2px 6px; flex: none; align-self: center;
}
.rail-more {
  display: block; width: 100%; margin-top: 10px; padding: 8px;
  background: none; border: 0; cursor: pointer; font-family: inherit;
  color: var(--blue); font-size: 12px; border-radius: var(--r-sm);
}
.rail-more:hover { background: var(--paper-soft); }

/* Быстрый поиск — выделенная плашка */
.rail-search { background: var(--blue-soft); border-color: transparent; }
.rail-search h3 { color: var(--blue); margin-bottom: 4px; }
.rail-hint { font-size: 11.5px; color: var(--ink-soft); margin: 0 0 11px; }
.rail-search-box { position: relative; display: flex; align-items: center; }
.rail-search-box input {
  width: 100%; height: 38px; padding: 0 38px 0 12px;
  border: 1px solid var(--rule); border-radius: var(--r-md);
  background: var(--paper); font-family: inherit; font-size: 12.5px; color: var(--ink);
}
.rail-search-box input:focus { outline: none; border-color: var(--blue); box-shadow: var(--ring); }
.rail-search-box button {
  position: absolute; right: 6px; background: none; border: 0;
  cursor: pointer; font-size: 13px; color: var(--ink-mute); padding: 5px;
}
.rail-search-box button:hover { color: var(--blue); }

/* ── ТЁМНАЯ ТЕМА: точечные поправки ───────────────────────── */
html[data-theme="dark"] {
  /* v4.20.003 — спокойная низкоконтрастная палитра без «светящихся» блоков. */
  --bg: #1e242d;
  --paper: #242c36;
  --paper-soft: #2a333f;
  --ink: #cbd2dc;
  --ink-soft: #a4adba;
  --ink-mute: #7f8997;
  --rule: #36404c;
  --rule-soft: #303945;
  --accent: #bd5b5e;
  --accent-soft: #38292d;
  --blue: #7897c1;
  --blue-soft: #2b3748;
  --green: #69a982;
  --yellow: #b49a68;
  --orange: #bd855a;
  --violet-soft: #302d41;
  --sky-soft: #273442;
  --mint-soft: #293a33;
  --amber-soft: #3a3429;
}
html[data-theme="dark"] .topsearch-input { background: var(--paper-soft); }
html[data-theme="dark"] .rail-search { background: var(--paper-soft); }
html[data-theme="dark"] .mat-batch-qty {
  background: var(--paper-soft) !important;
  color: var(--ink-soft) !important;
}
html[data-theme="dark"] .topbar {
  background: #1c222b;
  box-shadow: inset 0 -1px 0 var(--rule), 0 2px 8px rgba(0,0,0,.18);
}
html[data-theme="dark"] .side-item.active {
  background: var(--blue-soft);
  color: #9bb2d2;
}
html[data-theme="dark"] .wf-panel {
  background: var(--paper);
  border-color: var(--rule);
  box-shadow: none;
}
html[data-theme="dark"] .wf-step {
  background: var(--paper-soft);
  border-color: var(--rule);
  color: var(--ink-soft);
}
html[data-theme="dark"] .wf-step-num {
  background: #343e4a;
  color: var(--ink-soft);
}
html[data-theme="dark"] .wf-step.done { border-color: #527b64; }
html[data-theme="dark"] .wf-step.done .wf-step-num {
  background: #527b64;
  color: #dce8e1;
}
html[data-theme="dark"] .wf-step.current {
  border-color: #687f9f;
  box-shadow: 0 0 0 1px rgba(120,151,193,.18);
}
html[data-theme="dark"] .wf-step.current .wf-step-num {
  background: #536b8d;
  color: #e0e6ee;
}
html[data-theme="dark"] .wf-step-who,
html[data-theme="dark"] .wf-arrow { color: var(--ink-mute); }
html[data-theme="dark"] .wf-actions { border-color: var(--rule); }
html[data-theme="dark"] .wf-subcheck {
  background: #39352b;
  border-color: #625b47;
  color: var(--ink-soft);
}
html[data-theme="dark"] .status-pill {
  background: rgba(105,169,130,.10);
  color: #83b395;
  border-color: rgba(105,169,130,.20);
}

.topbar .icon-btn {
  width: 36px;
  height: 36px;
  padding: 7px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.topbar .icon-btn svg { width: 19px; height: 19px; }
.user-icon {
  width: 18px;
  height: 18px;
  display: inline-flex;
  color: var(--ink-soft);
}
.user-icon svg { width: 18px; height: 18px; }

/* ── v4.21.001: панель администратора ─────────────────────── */
.admin-head { margin-bottom: 18px; }
.admin-tabs {
  display: flex;
  gap: 5px;
  overflow-x: auto;
  padding: 5px;
  margin-bottom: 18px;
  border: 1px solid var(--rule);
  border-radius: var(--r-md);
  background: var(--paper-soft);
}
.admin-tab {
  flex: 0 0 auto;
  border: 0;
  border-radius: var(--r-sm);
  background: transparent;
  color: var(--ink-soft);
  padding: 9px 14px;
  font: inherit;
  font-weight: 600;
  cursor: pointer;
}
.admin-tab:hover { color: var(--ink); background: var(--paper); }
.admin-tab.active {
  color: var(--blue);
  background: var(--paper);
  box-shadow: var(--shadow-sm);
}
.admin-pane {
  display: none;
  padding: 20px;
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
  border: 1px solid var(--rule);
  border-radius: var(--r-lg);
  background: var(--paper);
  box-shadow: var(--shadow-sm);
}
.admin-pane.active { display: block; }
.admin-pane-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 16px;
}
.admin-pane-head h2 { margin: 0 0 4px; font-size: 17px; }
.admin-pane-head .hint { margin: 0; max-width: 900px; }
.admin-pane .perm-legend,
.admin-pane .stage-rules-wrap { margin: 0; min-width: 0; max-width: 100%; }

.admin-cleanup-alert {
  padding: 11px 13px;
  margin-bottom: 14px;
  border: 1px solid #e5b5b0;
  border-left: 4px solid var(--danger, #b3261e);
  border-radius: 8px;
  background: #fff4f3;
  color: #6f211b;
  font-size: 13px;
}
.admin-cleanup-tools { display: flex; margin-bottom: 12px; }
.admin-cleanup-tools input { width: min(560px, 100%); }
.admin-cleanup-table td { vertical-align: middle; }
.admin-cleanup-preview {
  margin-top: 18px;
  padding: 18px;
  border: 2px solid #d55b50;
  border-radius: 10px;
  background: var(--paper);
  box-shadow: var(--shadow-md);
}
.admin-cleanup-preview-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 16px;
  margin-bottom: 12px;
}
.admin-cleanup-preview-head h3 { margin: 3px 0 0; }
.admin-cleanup-warnings {
  display: grid;
  gap: 5px;
  padding: 10px 12px;
  border-radius: 8px;
  background: #fff4f3;
  color: #7b251e;
  font-size: 13px;
}
.admin-cleanup-counts {
  display: grid;
  grid-template-columns: repeat(3, minmax(180px, 1fr));
  gap: 8px;
  margin: 14px 0;
}
.admin-cleanup-counts > div {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  padding: 8px 10px;
  border: 1px solid var(--rule);
  border-radius: 7px;
  background: var(--paper-soft);
  font-size: 12px;
}
.admin-cleanup-consent {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin-top: 12px;
  color: var(--ink);
  font-size: 13px;
}
.admin-cleanup-consent input { margin-top: 2px; }
.admin-cleanup-actions { display: flex; justify-content: flex-end; margin-top: 14px; }

.email-smtp-status {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin-bottom: 16px;
  padding: 12px 14px;
  border: 1px solid var(--rule);
  border-radius: var(--r-md);
  background: var(--paper-soft);
  line-height: 1.4;
}
.email-smtp-status .email-status-dot { flex: none; color: var(--ink-mute); }
.email-smtp-status.configured { border-color: #9bcba8; background: var(--mint-soft); }
.email-smtp-status.configured .email-status-dot { color: var(--green); }
.email-smtp-status.not-configured { border-color: #e3c985; }
.email-smtp-status.not-configured .email-status-dot { color: #b47a12; }
.email-recipient-add {
  display: grid;
  grid-template-columns: minmax(240px, .8fr) minmax(280px, 1fr) auto;
  gap: 12px;
  align-items: end;
  margin-bottom: 18px;
  padding: 14px;
  border: 1px solid var(--rule-soft);
  border-radius: var(--r-md);
  background: var(--paper-soft);
}
.email-recipient-add .fl { margin: 0; }
.email-recipient-add select,
.email-recipient-add input { width: 100%; min-height: 38px; box-sizing: border-box; }
.email-recipients-table td:nth-child(3) { font-family: var(--mono); }
.email-types-modal { max-width: 760px; }
.email-types-toolbar {
  display: flex;
  gap: 8px;
  margin: 12px 0;
}
.email-types-list {
  max-height: min(58vh, 620px);
  overflow: auto;
  padding-right: 4px;
}
.email-types-group {
  margin: 0 0 12px;
  padding: 12px;
  border: 1px solid var(--rule-soft);
  border-radius: var(--r-md);
  background: var(--paper-soft);
}
.email-types-group-title {
  margin-bottom: 8px;
  color: var(--ink);
  font-size: 12px;
  font-weight: 700;
}
.email-types-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 7px 16px;
}
.email-type-option {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  color: var(--ink-soft);
  font-size: 12px;
  line-height: 1.35;
  cursor: pointer;
}
.email-type-option input { flex: none; margin-top: 2px; }

.audit-filters {
  display: grid;
  grid-template-columns: 150px 150px 160px minmax(240px, 1fr) auto;
  gap: 10px;
  align-items: end;
  margin-bottom: 16px;
}
.audit-filters label {
  display: flex;
  flex-direction: column;
  gap: 5px;
  color: var(--ink-soft);
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .45px;
}
.audit-filters input,
.audit-filters select {
  width: 100%;
  min-height: 36px;
  padding: 7px 9px;
  border: 1px solid var(--rule);
  border-radius: var(--r-sm);
  background: var(--paper-soft);
  color: var(--ink);
  font: inherit;
  text-transform: none;
  letter-spacing: normal;
}
.audit-table { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.audit-table th,
.audit-table td {
  padding: 9px 10px;
  border-bottom: 1px solid var(--rule-soft);
  text-align: left;
  vertical-align: top;
}
.audit-table th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--paper-soft);
  color: var(--ink-soft);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: .55px;
}
.audit-account { font-family: var(--mono); font-size: 11.5px; }
.audit-path {
  max-width: 340px;
  overflow-wrap: anywhere;
  color: var(--ink-soft);
  font-family: var(--mono);
  font-size: 11px;
}
.audit-result {
  display: inline-flex;
  padding: 2px 7px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 700;
}
.audit-result.ok { color: var(--green); background: var(--mint-soft); }
.audit-result.err { color: var(--accent); background: var(--accent-soft); }
.audit-pager {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 10px;
  margin-top: 14px;
}

@media (max-width: 900px) {
  .admin-wrap { padding: 16px 10px; }
  .admin-pane { padding: 14px; }
  .admin-pane-head { flex-direction: column; }
  .email-recipient-add { grid-template-columns: 1fr; }
  .email-types-grid { grid-template-columns: 1fr; }
  .admin-cleanup-counts { grid-template-columns: 1fr; }
  .wf-rollback-btn { margin-left: 0; }
  .audit-filters { grid-template-columns: 1fr 1fr; }
  .audit-search { grid-column: 1 / -1; }
}

/* ── АДАПТИВ ──────────────────────────────────────────────── */
@media (max-width: 1420px) {
  .home-fav { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .home-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 1180px) {
  .home-wrap { grid-template-columns: minmax(0, 1fr); }
  .home-rail { position: static; }
  .topsearch { max-width: none; }
  .topsearch-kbd { display: none; }
}
@media (max-width: 900px) {
  /* Меню уезжает за край и открывается кнопкой ☰ поверх контента. */
  body, body.sb-collapsed { padding-left: 0; }
  .diary-drawer, body.sb-collapsed .diary-drawer { left: 0; }
  .sidebar { transform: translateX(-100%); box-shadow: var(--shadow-lg); }
  body.sb-open .sidebar { transform: translateX(0); width: var(--sb-w); }
  body.sb-open .sidebar .si-txt,
  body.sb-open .sidebar .si-chev,
  body.sb-open .sidebar-brand-text { display: block; }
  body.sb-open .side-item { justify-content: flex-start; padding: 9px 11px; }
  body.sb-open .sidebar-scrim {
    display: block; position: fixed; inset: 0; z-index: 119;
    background: rgba(12,16,22,.42);
  }
  .home-wrap { padding: 20px 14px 40px; }
  .home-fav, .home-cards { grid-template-columns: minmax(0, 1fr); }
  .home-card { max-width: none !important; }
}

/* Настройка избранных разделов (модалка v4.20.001) */
.fav-cfg-list {
  display: flex; flex-direction: column; gap: 2px;
  max-height: 46vh; overflow-y: auto; margin: 4px 0 10px;
}
.fav-cfg-row {
  display: flex; align-items: center; gap: 9px;
  padding: 8px 10px; border-radius: var(--r-sm);
  font-size: 13px; color: var(--ink); cursor: pointer;
}
.fav-cfg-row:hover { background: var(--paper-soft); }
.fav-cfg-row input { cursor: pointer; }
.fav-cfg-row input:disabled { cursor: not-allowed; }
.fav-cfg-row input:disabled + * { opacity: .5; }

/* ════════════════════════════════════════════════════════════════
   v4.24.001 — ОПЕРАЦИОННЫЙ ДАШБОРД РУКОВОДИТЕЛЯ
   ════════════════════════════════════════════════════════════════ */
.exec-dashboard {
  max-width: 1880px;
  margin: 0 auto;
  padding: 26px 30px 46px;
  transition: opacity .18s ease;
}
.exec-dashboard.is-refreshing { opacity: .72; pointer-events: none; }
.exec-loading,
.exec-error {
  min-height: 52vh;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 12px;
  color: var(--ink-mute);
}
.exec-error strong { color: var(--ink); font-size: 17px; }
.exec-loader {
  width: 28px; height: 28px;
  border: 3px solid var(--rule);
  border-top-color: var(--blue);
  border-radius: 50%;
  animation: exec-spin .75s linear infinite;
}
@keyframes exec-spin { to { transform: rotate(360deg); } }

.exec-hero {
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  min-height: 150px;
  padding: 28px 30px;
  margin-bottom: 18px;
  border: 1px solid color-mix(in srgb, var(--blue) 24%, var(--rule));
  border-radius: 18px;
  background:
    radial-gradient(circle at 86% 20%, color-mix(in srgb, var(--blue) 16%, transparent) 0, transparent 32%),
    linear-gradient(120deg, var(--paper) 20%, color-mix(in srgb, var(--blue-soft) 58%, var(--paper)) 100%);
  box-shadow: var(--shadow-sm);
}
.exec-hero::after {
  content: "";
  position: absolute;
  width: 260px; height: 260px;
  right: 7%; top: -160px;
  border: 38px solid color-mix(in srgb, var(--blue) 7%, transparent);
  border-radius: 50%;
  pointer-events: none;
}
.exec-eyebrow {
  margin-bottom: 6px;
  color: var(--blue);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 1.25px;
  text-transform: uppercase;
}
.exec-hero h1 {
  color: var(--ink);
  font-size: clamp(25px, 2vw, 34px);
  letter-spacing: -.7px;
  line-height: 1.1;
}
.exec-hero p { margin-top: 8px; color: var(--ink-soft); font-size: 14px; }
.exec-hero-actions {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.exec-updated { color: var(--ink-mute); font-size: 11px; }
.exec-refresh { display: inline-flex; align-items: center; gap: 6px; }
.exec-refresh span { font-size: 17px; line-height: 1; }

.exec-degraded {
  margin: 0 0 14px;
  padding: 10px 12px;
  border: 1px solid rgba(184,118,0,.25);
  border-radius: 10px;
  background: rgba(184,118,0,.07);
  color: var(--ink-mute);
  font-size: 12px;
}
.exec-degraded strong { color: var(--ink); }
html[data-theme="dark"] .exec-degraded { background: rgba(214,160,52,.08); border-color: rgba(214,160,52,.20); }

.exec-kpis {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 14px;
  margin-bottom: 16px;
}
.exec-kpi {
  position: relative;
  min-height: 154px;
  padding: 19px 20px;
  border: 1px solid var(--rule);
  border-radius: 15px;
  background: var(--paper);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
}
.exec-kpi::after {
  content: "";
  position: absolute;
  left: 0; top: 0; bottom: 0;
  width: 3px;
  background: var(--blue);
}
.exec-kpi.kpi-deadline::after { background: var(--accent); }
.exec-kpi.kpi-production::after { background: var(--green); }
.exec-kpi.kpi-bs::after { background: var(--orange); }
.exec-kpi-icon {
  position: absolute;
  right: 16px; top: 15px;
  display: grid; place-items: center;
  width: 38px; height: 38px;
  border-radius: 11px;
  background: var(--paper-soft);
  color: var(--blue);
}
.exec-kpi-icon svg { width: 21px; height: 21px; fill: none; stroke: currentColor; stroke-width: 1.8; }
.kpi-deadline .exec-kpi-icon { color: var(--accent); }
.kpi-production .exec-kpi-icon { color: var(--green); }
.kpi-bs .exec-kpi-icon { color: var(--orange); }
.exec-kpi-label { color: var(--ink-soft); font-size: 12px; font-weight: 600; }
.exec-kpi-value {
  margin: 11px 0 8px;
  color: var(--ink);
  font-family: var(--mono);
  font-size: clamp(25px, 2vw, 32px);
  font-weight: 700;
  letter-spacing: -1px;
  line-height: 1.15;
}
.exec-kpi-value.is-text {
  max-width: calc(100% - 42px);
  font-family: var(--font);
  font-size: 20px;
  letter-spacing: -.25px;
}
.exec-kpi-foot {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 5px;
  min-height: 20px;
  color: var(--ink-mute);
  font-size: 10.5px;
}
.exec-dot { width: 6px; height: 6px; border-radius: 50%; margin-left: 5px; }
.exec-dot:first-child { margin-left: 0; }
.exec-dot.bad { background: var(--accent); }
.exec-dot.warn { background: var(--orange); }

.exec-toolbar {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px;
  margin-bottom: 16px;
  border: 1px solid var(--rule);
  border-radius: 13px;
  background: var(--paper);
  box-shadow: var(--shadow-sm);
}
.exec-search {
  display: flex; align-items: center; gap: 8px;
  min-width: 240px;
  flex: 1 1 320px;
  padding: 0 11px;
  border: 1px solid var(--rule);
  border-radius: 9px;
  background: var(--paper-soft);
}
.exec-search:focus-within { border-color: var(--blue); box-shadow: var(--ring); }
.exec-search svg { width: 17px; height: 17px; fill: none; stroke: var(--ink-mute); stroke-width: 2; }
.exec-search input {
  width: 100%; height: 36px;
  border: 0 !important;
  outline: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  color: var(--ink);
  font: inherit;
}
.exec-filter-group {
  display: inline-flex;
  padding: 3px;
  border-radius: 9px;
  background: var(--paper-soft);
}
.exec-filter-group button {
  padding: 7px 10px;
  border: 0;
  border-radius: 7px;
  background: transparent;
  color: var(--ink-mute);
  font: inherit;
  font-size: 11px;
  cursor: pointer;
  white-space: nowrap;
}
.exec-filter-group button:hover { color: var(--ink); }
.exec-filter-group button.active {
  color: var(--blue);
  background: var(--paper);
  box-shadow: var(--shadow-sm);
  font-weight: 600;
}
.exec-risk-select {
  height: 36px;
  padding: 0 30px 0 10px;
  border: 1px solid var(--rule);
  border-radius: 9px;
  background: var(--paper-soft);
  color: var(--ink);
  font: inherit;
  font-size: 11px;
}

.exec-main-grid {
  display: grid;
  grid-template-columns: minmax(0, 3fr) minmax(250px, 1fr);
  gap: 16px;
  margin-bottom: 16px;
}
.exec-bottom-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}
.exec-panel {
  min-width: 0;
  border: 1px solid var(--rule);
  border-radius: 15px;
  background: var(--paper);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
}
.exec-panel-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding: 17px 19px 14px;
  border-bottom: 1px solid var(--rule-soft);
}
.exec-panel-head h2 { font-size: 15px; font-weight: 700; letter-spacing: -.15px; }
.exec-panel-head p { margin-top: 2px; color: var(--ink-mute); font-size: 10.5px; }
.exec-hint { color: var(--ink-mute); font-size: 10px; }
.exec-alert-count {
  display: grid; place-items: center;
  min-width: 25px; height: 25px;
  border-radius: 50%;
  background: var(--accent-soft);
  color: var(--accent);
  font: 700 11px var(--mono);
}

.exec-orders { max-height: 565px; overflow: auto; }
.exec-order-row {
  display: grid;
  grid-template-columns: minmax(180px, 1.25fr) minmax(140px, .9fr) repeat(3, minmax(112px, .78fr)) minmax(125px, .8fr) minmax(100px, .65fr) 24px;
  align-items: center;
  gap: 13px;
  min-height: 104px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--rule-soft);
  cursor: pointer;
  transition: background .15s ease, transform .15s ease;
}
.exec-order-row:last-child { border-bottom: 0; }
.exec-order-row:hover { background: color-mix(in srgb, var(--blue-soft) 42%, var(--paper)); }
.exec-order-main,
.exec-order-risk,
.exec-order-metric { min-width: 0; display: flex; flex-direction: column; }
.exec-order-title { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.exec-order-title strong {
  overflow: hidden;
  color: var(--ink);
  font: 700 13px var(--mono);
  text-overflow: ellipsis;
  white-space: nowrap;
}
.exec-order-main > span {
  margin-top: 5px;
  overflow: hidden;
  color: var(--ink-soft);
  font-size: 11.5px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.exec-order-main > small {
  margin-top: 2px;
  overflow: hidden;
  color: var(--ink-mute);
  font-size: 9.5px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.exec-order-status {
  padding: 2px 6px;
  border-radius: 999px;
  font-size: 8px;
  font-weight: 700;
  letter-spacing: .25px;
  text-transform: uppercase;
}
.exec-order-status.st-new { color: var(--blue); background: var(--blue-soft); }
.exec-order-status.st-in_production { color: var(--green); background: color-mix(in srgb, var(--green) 12%, transparent); }
.exec-order-status.st-closed { color: var(--ink-mute); background: var(--paper-soft); }
.exec-risk-pill {
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 3px 7px;
  border-radius: 999px;
  font-size: 9px;
  font-weight: 700;
}
.exec-risk-pill > span { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.exec-risk-pill.critical { color: var(--accent); background: var(--accent-soft); }
.exec-risk-pill.warning { color: var(--orange); background: color-mix(in srgb, var(--orange) 13%, transparent); }
.exec-risk-pill.normal { color: var(--green); background: color-mix(in srgb, var(--green) 12%, transparent); }
.exec-order-risk small {
  margin-top: 7px;
  overflow: hidden;
  color: var(--ink-mute);
  font-size: 9.5px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.exec-order-metric > span { color: var(--ink-mute); font-size: 9px; text-transform: uppercase; letter-spacing: .5px; }
.exec-order-metric > strong {
  margin: 5px 0 4px;
  overflow: hidden;
  color: var(--ink);
  font: 600 11px var(--mono);
  text-overflow: ellipsis;
  white-space: nowrap;
}
.exec-order-metric > small {
  margin-top: 4px;
  overflow: hidden;
  color: var(--ink-mute);
  font-size: 8.5px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.exec-order-metric.bad > strong,
.exec-order-metric.planfact.bad > strong { color: var(--accent); }
.exec-order-metric.planfact.warn > strong { color: var(--orange); }
.exec-order-metric.planfact.good > strong { color: var(--green); }
.exec-order-metric.planfact.muted > strong { color: var(--ink-mute); }
.exec-order-metric.readiness.good > strong { color: var(--green); }
.exec-order-open { color: var(--ink-mute); font-size: 17px; transition: transform .15s; }
.exec-order-row:hover .exec-order-open { color: var(--blue); transform: translateX(3px); }
.exec-progress {
  display: block;
  width: 100%; height: 4px;
  overflow: hidden;
  border-radius: 999px;
  background: var(--rule-soft);
}
.exec-progress-fill { display: block; height: 100%; border-radius: inherit; background: var(--blue); }
.exec-progress.green .exec-progress-fill { background: var(--green); }
.exec-progress.red .exec-progress-fill { background: var(--accent); }

.exec-donut-wrap { padding: 24px 20px 18px; }
.exec-donut {
  display: grid;
  place-items: center;
  width: 164px; height: 164px;
  margin: 0 auto 23px;
  border-radius: 50%;
  background: conic-gradient(
    var(--blue) 0 var(--dash-new),
    var(--green) var(--dash-new) var(--dash-prod),
    var(--rule) var(--dash-prod) 360deg);
  position: relative;
}
.exec-donut::after {
  content: "";
  position: absolute;
  width: 116px; height: 116px;
  border-radius: 50%;
  background: var(--paper);
  box-shadow: inset 0 0 0 1px var(--rule-soft);
}
.exec-donut > div { position: relative; z-index: 1; display: flex; flex-direction: column; text-align: center; }
.exec-donut strong { font: 700 27px var(--mono); }
.exec-donut span { color: var(--ink-mute); font-size: 10px; }
.exec-legend { display: grid; gap: 9px; }
.exec-legend > div { display: grid; grid-template-columns: 10px 1fr auto; align-items: center; gap: 8px; color: var(--ink-soft); font-size: 10.5px; }
.exec-legend strong { color: var(--ink); font-family: var(--mono); }
.exec-legend-dot { width: 8px; height: 8px; border-radius: 3px; background: var(--blue); }
.exec-legend-dot.prod { background: var(--green); }
.exec-legend-dot.closed { background: var(--rule); }
.exec-risk-summary {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  border-top: 1px solid var(--rule-soft);
}
.exec-risk-summary > div { padding: 14px 7px; text-align: center; border-right: 1px solid var(--rule-soft); }
.exec-risk-summary > div:last-child { border-right: 0; }
.exec-risk-summary span { display: block; }
.exec-risk-summary > div > span:last-child { margin-top: 2px; color: var(--ink-mute); font-size: 8.5px; text-transform: uppercase; }
.exec-risk-number { font: 700 17px var(--mono); }
.exec-dashboard .bad { color: var(--accent) !important; }
.exec-dashboard .warn { color: var(--orange) !important; }
.exec-dashboard .good { color: var(--green) !important; }
.exec-dashboard .muted { color: var(--ink-mute) !important; }

.exec-bs-list,
.exec-alerts { max-height: 370px; overflow: auto; }
.exec-bs-row {
  display: grid;
  grid-template-columns: minmax(105px, 1fr) minmax(90px, 1.5fr) auto auto 16px;
  align-items: center;
  gap: 12px;
  width: 100%;
  min-height: 59px;
  padding: 10px 16px;
  border: 0;
  border-bottom: 1px solid var(--rule-soft);
  background: transparent;
  color: var(--ink);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.exec-bs-row:last-child { border-bottom: 0; }
.exec-bs-row:hover:not(:disabled) { background: var(--paper-soft); }
.exec-bs-row:disabled { cursor: default; }
.exec-bs-name { min-width: 0; display: flex; flex-direction: column; }
.exec-bs-name strong { overflow: hidden; font: 600 11px var(--mono); text-overflow: ellipsis; white-space: nowrap; }
.exec-bs-name small { color: var(--ink-mute); font-size: 9px; }
.exec-bs-bar { height: 7px; border-radius: 999px; background: var(--rule-soft); overflow: hidden; }
.exec-bs-bar i { display: block; height: 100%; min-width: 2px; border-radius: inherit; background: var(--ink-mute); }
.exec-bs-bar i.bad { background: var(--accent); }
.exec-bs-bar i.warn { background: var(--orange); }
.exec-bs-bar i.good { background: var(--green); }
.exec-bs-value { display: flex; flex-direction: column; align-items: flex-end; white-space: nowrap; }
.exec-bs-value strong { font: 700 11px var(--mono); }
.exec-bs-value span { color: var(--ink-mute); font: 8.5px var(--mono); }
.exec-bs-complete { color: var(--ink-mute); font-size: 9px; white-space: nowrap; }
.exec-bs-arrow { color: var(--ink-mute); }

.exec-alert {
  display: grid;
  grid-template-columns: 7px minmax(0, 1fr) auto 16px;
  align-items: center;
  gap: 11px;
  width: 100%;
  min-height: 59px;
  padding: 10px 16px;
  border: 0;
  border-bottom: 1px solid var(--rule-soft);
  background: transparent;
  color: var(--ink);
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.exec-alert:last-child { border-bottom: 0; }
.exec-alert:hover { background: var(--paper-soft); }
.exec-alert-mark { width: 7px; height: 7px; border-radius: 50%; background: var(--orange); box-shadow: 0 0 0 4px color-mix(in srgb, var(--orange) 12%, transparent); }
.exec-alert-mark.critical { background: var(--accent); box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 12%, transparent); }
.exec-alert-body { min-width: 0; display: flex; flex-direction: column; }
.exec-alert-body strong { overflow: hidden; font-size: 10.5px; text-overflow: ellipsis; white-space: nowrap; }
.exec-alert-body span { margin-top: 2px; overflow: hidden; color: var(--ink-mute); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.exec-alert-order { color: var(--ink-soft); font: 9.5px var(--mono); white-space: nowrap; }
.exec-empty { padding: 36px 18px; color: var(--ink-mute); text-align: center; }
.exec-empty.exec-success { color: var(--green); }

html[data-theme="dark"] .exec-hero {
  border-color: var(--rule);
  background:
    radial-gradient(circle at 86% 20%, rgba(122,166,230,.08) 0, transparent 32%),
    linear-gradient(120deg, var(--paper) 20%, #26303e 100%);
}
html[data-theme="dark"] .exec-order-row:hover {
  background: rgba(122,166,230,.055);
}
html[data-theme="dark"] .exec-donut {
  filter: saturate(.78);
}

@media (max-width: 1500px) {
  .exec-order-row {
    grid-template-columns: minmax(180px, 1.3fr) minmax(130px, .9fr) repeat(3, minmax(105px, .75fr)) minmax(120px, .8fr) 24px;
  }
  .exec-order-metric.planfact { display: none; }
}
@media (max-width: 1250px) {
  .exec-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .exec-main-grid { grid-template-columns: minmax(0, 1fr); }
  .exec-status-panel { display: grid; grid-template-columns: 220px 1fr; }
  .exec-status-panel .exec-panel-head { border-right: 1px solid var(--rule-soft); border-bottom: 0; }
  .exec-status-panel .exec-donut-wrap { display: flex; align-items: center; gap: 30px; }
  .exec-status-panel .exec-donut { width: 120px; height: 120px; margin: 0; flex: 0 0 auto; }
  .exec-status-panel .exec-donut::after { width: 84px; height: 84px; }
  .exec-status-panel .exec-donut strong { font-size: 21px; }
  .exec-status-panel .exec-risk-summary { grid-column: 1 / -1; }
}
@media (max-width: 1020px) {
  .exec-dashboard { padding: 18px 14px 36px; }
  .exec-toolbar { flex-wrap: wrap; }
  .exec-search { flex-basis: 100%; }
  .exec-filter-group { max-width: 100%; overflow-x: auto; }
  .exec-bottom-grid { grid-template-columns: minmax(0, 1fr); }
  .exec-order-row {
    grid-template-columns: minmax(170px, 1.2fr) minmax(120px, .85fr) repeat(3, minmax(100px, .75fr)) 24px;
  }
  .exec-order-metric.schedule { display: none; }
}
@media (max-width: 720px) {
  .exec-hero { align-items: flex-start; flex-direction: column; padding: 22px 20px; }
  .exec-hero-actions { justify-content: flex-start; }
  .exec-kpis { grid-template-columns: minmax(0, 1fr); }
  .exec-toolbar { align-items: stretch; }
  .exec-filter-group { display: flex; }
  .exec-risk-select { width: 100%; }
  .exec-status-panel { display: block; }
  .exec-status-panel .exec-panel-head { border-right: 0; border-bottom: 1px solid var(--rule-soft); }
  .exec-status-panel .exec-donut-wrap { display: block; }
  .exec-status-panel .exec-donut { width: 150px; height: 150px; margin: 0 auto 20px; }
  .exec-status-panel .exec-donut::after { width: 106px; height: 106px; }
  .exec-order-row {
    grid-template-columns: minmax(0, 1fr) 24px;
    gap: 9px;
    padding: 15px;
  }
  .exec-order-main { grid-column: 1; }
  .exec-order-risk { grid-column: 1; }
  .exec-order-open { grid-column: 2; grid-row: 1 / 3; align-self: center; }
  .exec-order-metric { display: none; }
  .exec-bs-row { grid-template-columns: minmax(90px, 1fr) minmax(70px, 1fr) auto 14px; }
  .exec-bs-complete { display: none; }
  .exec-alert-order { display: none; }
}

/* ════════════════════════════════════════════════════════════════
   v4.25.001 — ЕДИНЫЕ РАМКИ ПРОЕКТОВ И ДОКУМЕНТООБОРОТА
   Компактные вложенные таблицы не участвуют в глобальном ручном resize:
   вместо нескольких полос прокрутки у каждой секции одна цельная рамка.
   ════════════════════════════════════════════════════════════════ */
.projects-page,
#docs_inner {
  min-width: 0;
  max-width: 100%;
}
.project-create-card,
.project-order-picker,
.project-section-card,
.docs-registry {
  min-width: 0;
  border: 1px solid var(--rule);
  border-radius: var(--r-lg);
  background: var(--paper);
  box-shadow: var(--shadow-sm);
}
.project-create-card {
  padding: 13px 14px;
  margin-bottom: 12px;
}
.project-order-picker {
  padding: 11px 14px;
  margin-bottom: 14px;
}
.project-order-picker .field {
  display: flex;
  flex-direction: column;
  gap: 5px;
  width: min(100%, 620px);
  max-width: none !important;
}
.project-order-picker .field > span {
  color: var(--ink-mute);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: .25px;
  text-transform: uppercase;
}
.project-order-picker select { width: 100%; min-height: 36px; }
.project-section-card {
  padding: 16px;
}
.readiness-center { overflow: hidden; }
.readiness-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 18px; margin-bottom: 12px;
}
.readiness-head h3 { margin: 0 0 4px; font-size: 17px; }
.readiness-head p { margin: 0; color: var(--ink-mute); font-size: 12px; }
.readiness-degraded-note {
  margin: 8px 0 10px; padding: 8px 10px; border: 1px solid color-mix(in srgb, var(--orange) 45%, var(--rule));
  border-radius: 8px; background: color-mix(in srgb, var(--orange) 8%, var(--paper));
  color: var(--ink); font-size: 11px; line-height: 1.35;
}
.readiness-degraded-note b { color: var(--orange); }
.readiness-launch {
  min-width: 210px; padding: 10px 14px; border: 1px solid var(--rule);
  border-radius: var(--r-md); display: flex; flex-direction: column; gap: 3px;
  background: var(--paper-soft);
}
.readiness-launch strong { font-size: 13px; }
.readiness-launch span { color: var(--ink-mute); font-size: 11px; }
.readiness-launch.good { border-color: color-mix(in srgb, var(--green) 42%, var(--rule)); background: color-mix(in srgb, var(--green) 8%, var(--paper)); }
.readiness-launch.good strong { color: var(--green); }
.readiness-launch.bad { border-color: color-mix(in srgb, var(--accent) 42%, var(--rule)); background: color-mix(in srgb, var(--accent) 7%, var(--paper)); }
.readiness-launch.bad strong { color: var(--accent); }
.ready-departments {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px;
  margin: 0 0 12px; color: var(--ink-mute); font-size: 11px;
}
.ready-dept {
  display: inline-flex; align-items: center; gap: 5px; padding: 4px 7px;
  border: 1px solid var(--rule); border-radius: 999px; background: var(--paper-soft);
}
.ready-dept b { color: var(--ink); font-weight: 600; }
.ready-dept i { min-width: 18px; padding: 1px 5px; border-radius: 999px; color: #fff; text-align: center; font-style: normal; }
.ready-dept i.bad { background: var(--accent); }
.ready-dept i.warn { background: var(--orange); }
.readiness-frame { overflow: auto; }
.readiness-table { min-width: 1260px !important; font-size: 11px; }
.readiness-table th { white-space: normal; line-height: 1.2; }
.readiness-table td { vertical-align: top; padding: 8px 6px; }
.ready-product { min-width: 160px; }
.ready-product strong, .ready-product span { display: block; }
.ready-product span { margin-top: 3px; color: var(--ink-mute); font-size: 10px; }
.ready-state {
  width: 100%; min-width: 92px; display: flex; flex-direction: column;
  align-items: flex-start; gap: 2px; padding: 5px 7px; border: 1px solid transparent;
  border-radius: 5px; color: var(--ink); background: var(--paper-soft);
  text-align: left; font: inherit; line-height: 1.2;
}
button.ready-state { cursor: pointer; }
button.ready-state:hover { filter: brightness(.97); border-color: currentColor; }
.ready-state span { font-weight: 650; }
.ready-state small { color: inherit; opacity: .72; font-size: 9px; }
.ready-state.good { color: var(--green); background: color-mix(in srgb, var(--green) 9%, var(--paper)); }
.ready-state.bad { color: var(--accent); background: color-mix(in srgb, var(--accent) 8%, var(--paper)); }
.ready-state.warn { color: var(--orange); background: color-mix(in srgb, var(--orange) 10%, var(--paper)); }
.ready-state.progress { color: var(--blue); background: color-mix(in srgb, var(--blue) 9%, var(--paper)); }
.ready-state.muted { color: var(--ink-mute); }
.ready-blocker-row td { padding-top: 0 !important; background: var(--paper-soft); }
.ready-blockers { display: flex; flex-wrap: wrap; gap: 5px; padding: 2px 0 5px; }
.ready-blocker {
  display: inline-flex; align-items: center; gap: 5px; padding: 4px 7px;
  border: 1px solid var(--rule); border-radius: 5px; background: var(--paper);
  color: var(--ink); font: inherit; font-size: 10px; text-align: left; cursor: pointer;
}
.ready-blocker:hover { border-color: currentColor; }
.ready-blocker.critical { color: var(--accent); }
.ready-blocker.warning { color: var(--orange); }
.ready-blocker b { color: inherit; }
.ready-blocker i { margin-left: 2px; font-style: normal; }
.readiness-legend {
  display: flex; flex-wrap: wrap; gap: 12px; margin-top: 10px;
  color: var(--ink-mute); font-size: 10px;
}
.readiness-legend span { display: inline-flex; align-items: center; gap: 5px; }
.readiness-legend i { width: 8px; height: 8px; border-radius: 50%; }
.readiness-legend i.good { background: var(--green); }
.readiness-legend i.warn { background: var(--orange); }
.readiness-legend i.bad { background: var(--accent); }
.project-section-card > h3 {
  margin-bottom: 5px;
  font-size: 15px;
}
.order-composition-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  margin-bottom: 8px;
}
.order-composition-head h3 { margin: 0 0 6px; font-size: 15px; }
.order-composition-total,
.order-composition-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.order-composition-total span {
  padding: 4px 8px;
  border: 1px solid var(--rule);
  border-radius: 999px;
  background: var(--paper-soft);
  color: var(--ink-mute);
  font-size: 11px;
}
.order-composition-total b { color: var(--ink); }
.order-composition-actions button { white-space: nowrap; }
.project-detail-card {
  margin-top: 13px;
  padding: 14px;
  border: 1px solid var(--rule-soft);
  border-radius: var(--r-md);
  background: var(--paper-soft);
}
.project-create-row,
.project-check-row,
.project-item-row {
  display: grid !important;
  align-items: stretch;
  gap: 9px;
  margin: 0 !important;
}
.project-create-row {
  grid-template-columns: minmax(240px, 1.5fr) minmax(230px, .75fr) minmax(210px, .65fr) auto !important;
}
.project-check-row {
  grid-template-columns: minmax(260px, 1.5fr) minmax(230px, .65fr) 150px auto !important;
  padding-bottom: 13px;
  margin-bottom: 13px !important;
  border-bottom: 1px solid var(--rule-soft);
}
.project-item-row {
  grid-template-columns: minmax(170px, .55fr) minmax(280px, 1fr) 82px minmax(210px, .55fr) auto !important;
  margin: 12px 0 !important;
}
.project-create-row > *,
.project-check-row > *,
.project-item-row > * {
  width: 100% !important;
  min-width: 0 !important;
  min-height: 36px;
}
.project-create-row button,
.project-check-row button,
.project-item-row button { white-space: nowrap; }
.oi-assign-one { margin-top: 3px; font-size: 11px; }
.oi-tp-modal { width: min(620px, calc(100vw - 28px)); }
.oi-selected-list {
  max-height: 180px;
  overflow: auto;
  margin: 10px 0 14px;
  padding: 9px 9px 9px 29px;
  border: 1px solid var(--rule-soft);
  border-radius: var(--r-sm);
  background: var(--paper-soft);
  font-size: 12px;
}
.oi-selected-list li + li { margin-top: 5px; }
.project-summary {
  gap: 24px;
  margin: 0 0 14px !important;
  padding: 13px 15px;
  border-color: var(--rule-soft);
  background: var(--paper-soft);
  box-shadow: none;
}
.project-summary .proj-progress { min-width: 220px; }
.project-table-frame,
.docs-table-frame {
  width: 100%;
  max-width: 100%;
  overflow-x: auto;
  overflow-y: hidden;
  border: 1px solid var(--rule);
  border-radius: var(--r-md);
  background: var(--paper);
  box-shadow: var(--shadow-sm);
}
.project-table-frame > table,
.docs-table-frame > table {
  width: 100% !important;
  margin: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
}
.project-table-frame > table thead tr:first-child th,
.docs-table-frame > table thead tr:first-child th { border-top: 0; }
.project-table-frame > table th:first-child,
.project-table-frame > table td:first-child,
.docs-table-frame > table th:first-child,
.docs-table-frame > table td:first-child { border-left: 0; }
.project-table-frame > table th:last-child,
.project-table-frame > table td:last-child,
.docs-table-frame > table th:last-child,
.docs-table-frame > table td:last-child { border-right: 0; }
.project-table-frame > table tbody tr:last-child td,
.docs-table-frame > table tbody tr:last-child td { border-bottom: 0; }
.project-doc-group { margin-top: 15px; }
.project-doc-group + .project-doc-group { margin-top: 17px; }

.docs-registry { padding: 15px; }
.docs-toolbar {
  margin: 0 0 14px !important;
  border-color: var(--rule-soft);
  background: var(--paper-soft);
  box-shadow: none;
}
.docs-toolbar .pf-sum-item:last-child {
  flex-direction: row;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.docs-registry .filterable { min-width: 920px; }
.docs-registry-row { cursor: pointer; }
.docs-registry-row td {
  transition: background-color .15s ease;
}
.docs-registry-row:hover td {
  background: var(--blue-soft);
}
.docs-registry-row:focus-visible {
  outline: 2px solid var(--blue);
  outline-offset: -2px;
}
.docs-registry-row td:last-child { white-space: nowrap; }
.docs-actions {
  width: 62px;
  min-width: 62px;
  text-align: center;
}
.doc-action-btn {
  width: 36px;
  min-width: 36px;
  height: 36px;
  padding: 0;
  border: 1px solid var(--rule);
  border-radius: 8px;
  background: var(--paper);
  color: var(--ink-soft);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: inherit;
  font-size: 19px;
  font-weight: 700;
  line-height: 1;
  cursor: pointer;
  box-shadow: var(--shadow-sm);
  transition: border-color .15s, background .15s, color .15s, transform .15s;
}
.doc-action-btn:hover,
.doc-action-btn:focus-visible {
  border-color: var(--blue);
  background: var(--blue-soft);
  color: var(--blue);
  transform: translateY(-1px);
  outline: none;
}
html[data-theme="dark"] .docs-registry-row:hover td {
  background: var(--paper-soft);
}

html[data-theme="dark"] .project-create-card,
html[data-theme="dark"] .project-order-picker,
html[data-theme="dark"] .project-section-card,
html[data-theme="dark"] .docs-registry,
html[data-theme="dark"] .project-table-frame,
html[data-theme="dark"] .docs-table-frame {
  border-color: var(--rule);
  background: var(--paper);
}
html[data-theme="dark"] .project-detail-card,
html[data-theme="dark"] .project-summary,
html[data-theme="dark"] .docs-toolbar { background: var(--paper-soft); }

@media (max-width: 1180px) {
  .project-create-row { grid-template-columns: minmax(220px, 1fr) minmax(210px, 1fr) !important; }
  .project-check-row { grid-template-columns: minmax(240px, 1fr) minmax(210px, .7fr) !important; }
  .project-item-row { grid-template-columns: minmax(240px, 1fr) 90px !important; }
}
@media (max-width: 700px) {
  .sidebar-brand { height: 76px; padding-left: 16px; padding-right: 16px; }
  .project-create-card,
  .project-order-picker,
  .project-section-card,
  .docs-registry { border-radius: var(--r-md); }
  .project-create-card,
  .project-section-card,
  .docs-registry { padding: 11px; }
  .readiness-head { flex-direction: column; }
  .order-composition-head { flex-direction: column; }
  .order-composition-actions { width: 100%; }
  .readiness-launch { width: 100%; min-width: 0; }
  .project-create-row,
  .project-check-row,
  .project-item-row { grid-template-columns: minmax(0, 1fr) !important; }
  .project-summary { align-items: stretch; gap: 11px; }
  .project-summary .proj-progress { min-width: 0; width: 100%; }
  .docs-toolbar .pf-sum-item:last-child {
    width: 100%;
    margin-left: 0 !important;
  }
  .docs-toolbar .pf-sum-item:last-child > * { flex: 1 1 auto; }
}

/* v4.28.001 — компактная настольная раскладка для 1920×1080.
   Основные карточки главной и пункты меню помещаются без лишней прокрутки. */
@media (min-width: 1440px) and (min-height: 800px) and (max-height: 1100px) {
  :root { --topbar-h: 58px; }

  .sidebar-brand {
    height: 64px;
    padding: 8px 14px 5px;
  }
  .sidebar-logo { height: 29px; }
  .sidebar-brand-version { margin-top: 3px; }
  .sidebar-nav { padding: 7px 8px; }
  .side-item {
    gap: 9px;
    padding: 6px 9px;
    margin-bottom: 1px;
  }
  body.sb-collapsed .side-item { padding: 7px 0; }
  .side-item .si-ico { width: 22px; height: 22px; }
  .side-item .si-ico svg { width: 19px; height: 19px; }
  .sidebar-foot { padding: 7px 8px; }

  .topbar { gap: 10px; padding: 0 16px; }
  .topsearch-input { height: 34px; }

  .home-wrap {
    max-width: 1600px;
    padding: 18px 24px 26px;
    grid-template-columns: minmax(0, 1fr) 320px;
    gap: 18px;
  }
  .home-title { font-size: 22px; margin-bottom: 2px; }
  .home-sub { font-size: 12.5px; margin-bottom: 15px; }
  .home-sec-title { font-size: 14px; margin-bottom: 9px; }
  .home-fav-cfg { margin-bottom: 6px; }
  .home-fav { gap: 12px; margin-bottom: 16px; }
  .fav-card {
    min-height: 128px;
    padding: 12px 14px;
    gap: 5px;
  }
  .fav-ico {
    width: 36px;
    height: 36px;
    margin-bottom: 1px;
    font-size: 18px;
  }
  .fav-name { font-size: 13.5px; }
  .fav-desc { font-size: 11.5px; line-height: 1.3; }
  .home-toolbar { margin-bottom: 8px; gap: 7px; }
  .home-cards { gap: 8px 11px; }
  .home-card {
    grid-template-columns: 34px 1fr 14px;
    gap: 1px 10px;
    min-height: 64px;
    padding: 9px 12px;
  }
  .home-card-ico {
    width: 34px;
    height: 34px;
    font-size: 15px !important;
  }
  .home-card-name { font-size: 13px; }
  .home-card-desc { font-size: 11px; line-height: 1.25; }

  .home-rail { gap: 10px; top: 68px; }
  .rail-card { padding: 12px 14px; }
  .rail-head { margin-bottom: 7px; }
  .rail-item { gap: 8px; padding: 6px 0; }
  .ri-ico { width: 27px; height: 27px; }
  .ri-title { font-size: 12px; line-height: 1.25; }
  .ri-sub { font-size: 11px; line-height: 1.25; }
  .rail-more { margin-top: 4px; padding: 5px; }
  .rail-hint { margin-bottom: 7px; }
  .rail-search-box input { height: 34px; }
}

/* ── v4.30.001: МИКРОКЛИМАТ ЦЕХОВ НА ГЛАВНОЙ ─────────────── */
.environment-panel {
  margin: 0 0 22px;
  padding: 14px 16px 16px;
  background: var(--paper);
  border: 1px solid var(--rule);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-sm);
}
.environment-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 11px;
}
.environment-head h2 {
  margin: 0 0 2px;
  color: var(--ink);
  font-size: 14px;
  font-weight: 700;
}
.environment-head p {
  margin: 0;
  color: var(--ink-mute);
  font-size: 11.5px;
  line-height: 1.35;
}
.environment-refresh {
  flex: none;
  padding: 5px 9px;
  border: 1px solid var(--rule);
  border-radius: var(--r-sm);
  background: var(--paper-soft);
  color: var(--ink-soft);
  cursor: pointer;
  font: inherit;
  font-size: 11.5px;
}
.environment-refresh:hover {
  border-color: var(--blue);
  color: var(--blue);
}
.environment-refresh:focus-visible {
  outline: none;
  border-color: var(--blue);
  box-shadow: var(--ring);
}
.environment-refresh:disabled {
  cursor: wait;
  opacity: .55;
}
.environment-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(156px, 1fr));
  gap: 9px;
}
.environment-sensor {
  min-width: 0;
  padding: 10px 11px 9px;
  border: 1px solid var(--rule-soft);
  border-radius: var(--r-md);
  background: var(--paper-soft);
}
.environment-sensor.partial,
.environment-sensor.stale {
  border-style: dashed;
}
.environment-sensor.unavailable,
.environment-sensor.no_data {
  opacity: .72;
}
.environment-sensor-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 6px;
  margin-bottom: 7px;
}
.environment-sensor-head strong {
  min-width: 0;
  overflow: hidden;
  color: var(--ink);
  font-size: 12px;
  font-weight: 700;
  line-height: 1.25;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.environment-sensor-head > span {
  flex: none;
  color: var(--ink-mute);
  font-family: var(--mono);
  font-size: 8.5px;
}
.environment-metrics {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 7px;
}
.environment-metric {
  min-width: 0;
  padding: 6px 7px;
  border-radius: var(--r-sm);
  background: var(--paper);
}
.environment-metric-label {
  display: block;
  overflow: hidden;
  margin-bottom: 1px;
  color: var(--ink-mute);
  font-size: 8.5px;
  line-height: 1.2;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.environment-value {
  display: block;
  color: var(--ink);
  font-family: var(--mono);
  font-size: 18px;
  font-weight: 700;
  line-height: 1.15;
  white-space: nowrap;
}
.environment-metric.temperature .environment-value { color: var(--accent); }
.environment-metric.humidity .environment-value { color: var(--blue); }
.environment-value small {
  margin-left: 2px;
  color: var(--ink-mute);
  font-family: var(--font);
  font-size: 9px;
  font-weight: 600;
}
.environment-stamp {
  overflow: hidden;
  margin-top: 6px;
  color: var(--ink-mute);
  font-size: 8.5px;
  line-height: 1.25;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.environment-loading,
.environment-empty {
  grid-column: 1 / -1;
  padding: 12px;
  border: 1px dashed var(--rule);
  border-radius: var(--r-md);
  color: var(--ink-mute);
  font-size: 12px;
  text-align: center;
}

@media (min-width: 1440px) and (min-height: 800px) and (max-height: 1100px) {
  .environment-panel {
    margin-bottom: 13px;
    padding: 10px 12px 11px;
  }
  .environment-head { margin-bottom: 7px; }
  .environment-grid { gap: 7px; }
  .environment-sensor { padding: 7px 8px 6px; }
  .environment-sensor-head { margin-bottom: 5px; }
  .environment-metric { padding: 4px 6px; }
  .environment-value { font-size: 16px; }
  .environment-stamp { margin-top: 4px; }
}

@media (max-width: 520px) {
  .environment-panel { padding: 12px; }
  .environment-head { align-items: center; }
  .environment-refresh { padding: 6px 8px; }
  .environment-grid { grid-template-columns: minmax(0, 1fr); }
}

/* ── v4.30.002: роль и «Выйти» рядом с переключателем пользователей ───────── */
/* Кнопка выхода теперь есть и у администратора (у него виден выпадающий
   список пользователей). Цвета берём из переменных темы — не хардкодим. */
.user-box .user-admin-box {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
}
.user-box .user-admin-box .user-name { font-size: 13px; }
@media (max-width: 700px) {
  .user-box .user-admin-box { flex-wrap: wrap; }
}

/* v4.33.001 — типовые чек-листы и очередь работ */
.project-view-tabs,
.project-queue-tabs { display:flex; flex-wrap:wrap; gap:8px; margin:0 0 16px; }
.project-view-tabs button,
.project-queue-tabs button { border:1px solid var(--line); background:var(--paper); color:var(--text); border-radius:9px; padding:8px 13px; cursor:pointer; }
.project-view-tabs button.active,
.project-queue-tabs button.active { background:var(--accent); color:#fff; border-color:var(--accent); }
.project-inline-check { display:flex !important; align-items:center; gap:7px; white-space:nowrap; }
.project-state { display:inline-flex; border-radius:999px; padding:3px 8px; font-size:12px; font-weight:700; white-space:nowrap; background:var(--paper-soft); }
.project-state-overdue { background:#ffe5e5; color:#9b1c1c; }
.project-state-waiting { background:#fff2cc; color:#705300; }
.project-state-done { background:#e2f5e8; color:#236238; }
.project-state-later { color:var(--ink-mute); }
.project-item-links { margin-top:5px; font-size:12px; color:var(--warning-text, #8a5c00); }
.project-queue-head { display:grid; gap:12px; margin-bottom:12px; }
.project-batch-toolbar { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:10px; background:var(--paper-soft); border-radius:10px; }
.project-batch-toolbar .eng-sel,
.project-batch-toolbar .eng-inp { width:auto; min-width:150px; }
.project-template-layout { display:grid; grid-template-columns:minmax(220px, 280px) minmax(0, 1fr); gap:16px; align-items:start; }
.project-template-list { display:flex; flex-direction:column; gap:7px; position:sticky; top:12px; }
.project-template-list-item { text-align:left; border:1px solid var(--line); background:var(--paper); color:var(--text); border-radius:9px; padding:10px 12px; cursor:pointer; }
.project-template-list-item.active { border-color:var(--accent); box-shadow:0 0 0 1px var(--accent); }
.project-template-head { display:flex; align-items:center; justify-content:space-between; gap:12px; }
.project-template-fields { display:grid; grid-template-columns:repeat(auto-fit, minmax(210px, 1fr)); gap:12px; }
.project-template-fields.compact { grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); }
.project-template-fields label { display:grid; gap:5px; font-size:12px; color:var(--ink-mute); }
.project-template-fields textarea { min-height:70px; resize:vertical; }
.project-template-item { border:1px solid var(--line); border-radius:12px; padding:13px; margin:12px 0; background:var(--paper-soft); }
.project-template-item-title { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.project-template-actions { display:flex; flex-wrap:wrap; gap:9px; margin-top:14px; }
@media (max-width: 900px) {
  .project-template-layout { grid-template-columns:1fr; }
  .project-template-list { position:static; }
}
html[data-theme="dark"] .project-state-overdue { background:#4c2424; color:#ffb7b7; }
html[data-theme="dark"] .project-state-waiting { background:#493d1e; color:#ffe49a; }
html[data-theme="dark"] .project-state-done { background:#183c28; color:#a7e7ba; }


/* v4.34.001 — центр обеспечения материалами */
.materials-tabs { display:flex; gap:8px; margin:0 0 14px; border-bottom:1px solid var(--line); padding-bottom:9px; }
.materials-tab { border:1px solid var(--line); background:var(--paper); color:var(--text); border-radius:9px; padding:8px 14px; cursor:pointer; font-weight:650; }
.materials-tab.active { background:var(--accent); color:#fff; border-color:var(--accent); }
.ms-loading { padding:28px; text-align:center; color:var(--ink-mute); }
.ms-summary { display:grid; grid-template-columns:repeat(5,minmax(120px,1fr)); gap:10px; margin-bottom:12px; }
.ms-summary > div { border:1px solid var(--line); background:var(--paper); border-radius:11px; padding:11px 13px; display:grid; gap:2px; }
.ms-summary strong { font-size:22px; }
.ms-summary span { color:var(--ink-mute); font-size:12px; }
.ms-summary .bad { border-color:#d66; }
.ms-summary .warn { border-color:#d6a13b; }
.ms-alert { margin:0 0 12px; padding:10px 12px; border-radius:9px; background:#fff2cc; color:#705300; border:1px solid #e5c66c; }
.ms-toolbar { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-bottom:12px; }
.ms-toolbar #ms_search { flex:1 1 320px; }
.ms-order-filter { border:1px solid var(--accent); background:var(--paper); color:var(--accent); border-radius:999px; padding:7px 10px; cursor:pointer; }
.ms-frame { overflow:auto; max-height:calc(100vh - 325px); }
.ms-table { min-width:1580px; }
.ms-table th { position:sticky; top:0; z-index:2; background:var(--paper-soft); }
.ms-table td { vertical-align:top; }
.ms-table td small { display:block; margin-top:4px; color:var(--ink-mute); line-height:1.25; }
.ms-table .ms-field { min-width:125px; width:100%; margin-bottom:5px; }
.ms-risk { display:inline-flex; border-radius:999px; padding:3px 8px; font-size:11px; font-weight:750; white-space:nowrap; }
.ms-risk.good { background:#e2f5e8; color:#236238; }
.ms-risk.warn { background:#fff2cc; color:#705300; }
.ms-risk.bad { background:#ffe5e5; color:#9b1c1c; }
.ms-approved { color:#236238 !important; font-weight:700; }
.ms-sub { display:grid; gap:2px; min-width:150px; }
.ms-sub > span { color:var(--ink-mute); font-size:11px; }
.ms-sub.approved > span { color:#236238; }
.ms-sub.pending > span { color:#8a5c00; }
.ms-sub .mini-btn { width:26px; margin-right:3px; }
.ms-sub-open { margin-top:5px; }
.text-danger { color:#a92727 !important; }
.ms-modal-card { width:min(620px,92vw); }
.ms-modal-card .modal-head { display:flex; justify-content:space-between; align-items:center; gap:12px; }
.ms-modal-card .modal-close { border:0; background:transparent; cursor:pointer; font-size:22px; color:var(--ink-mute); }
.ms-modal-card .modal-body { display:grid; gap:12px; }
.ms-modal-card .fl { display:grid; gap:5px; }
.ms-modal-card textarea { resize:vertical; }
.ms-modal-card .modal-foot { display:flex; justify-content:flex-end; gap:8px; margin-top:18px; padding-top:14px; border-top:1px solid var(--line); }
@media (max-width:1000px) { .ms-summary { grid-template-columns:repeat(2,minmax(130px,1fr)); } .ms-frame { max-height:none; } }
html[data-theme="dark"] .ms-alert { background:#493d1e; color:#ffe49a; border-color:#806e37; }
html[data-theme="dark"] .ms-risk.good { background:#183c28; color:#a7e7ba; }
html[data-theme="dark"] .ms-risk.warn { background:#493d1e; color:#ffe49a; }
html[data-theme="dark"] .ms-risk.bad { background:#4c2424; color:#ffb7b7; }

/* v4.35.002 — явный выбор позиций при создании производственных заказов. */
.pofc-choice {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 8px 0 4px;
  font-weight: 600;
  cursor: pointer;
}
.pofc-choice input[type="checkbox"] {
  width: 18px;
  height: 18px;
  margin: 1px 0 0;
  flex: 0 0 auto;
}
.pofc-choice.is-disabled {
  cursor: not-allowed;
  opacity: .72;
}
.pofc-serial-row {
  display: grid;
  grid-template-columns: minmax(88px, 110px) minmax(180px, 1fr);
  align-items: center;
  gap: 8px;
  margin: 5px 0;
}
.pofc-state {
  margin: 4px 0 8px 26px;
  font-size: 12px;
  line-height: 1.4;
  overflow-wrap: anywhere;
}
.pofc-state-ready { color: #237a3b; }
.pofc-state-warning { color: #9a6200; }
.pofc-state-blocked { color: #b23b3b; }
.pofc-empty {
  margin: 0 0 10px;
  padding: 9px 11px;
  border: 1px solid #efb9b9;
  border-radius: 8px;
  background: #fff2f2;
  color: #9f2525;
  font-size: 13px;
}
@media (max-width: 640px) {
  .pofc-serial-row { grid-template-columns: 1fr; gap: 3px; }
  .pofc-state { margin-left: 0; }
}
html[data-theme="dark"] .pofc-empty {
  border-color: #6f3b3b;
  background: #3f2424;
  color: #ffb7b7;
}
html[data-theme="dark"] .pofc-state-ready { color: #9fdbad; }
html[data-theme="dark"] .pofc-state-warning { color: #ffd37a; }
html[data-theme="dark"] .pofc-state-blocked { color: #ffaaaa; }

/* v4.36.001 — планирование на узких экранах: элементы управления не выходят
   за границы своей колонки и не перекрывают соседние выпадающие списки. */
.planning-table-order .plan-dep-cell,
.planning-table-order .oplan-item-cell,
.planning-table-order .oplan-window-cell {
  min-width: 0;
  overflow: hidden;
}
.planning-table-order .oplan-calendar-cell { min-width: 145px; }
.planning-table-order .oplan-calendar-sel { width:100%; min-width:132px; max-width:100%; box-sizing:border-box; }
.oplan-new-calendar { min-width:155px; }
.planning-table-order .plan-dep-sel,
.planning-table-order .oplan-link-sel,
.planning-table-order .oplan-item-sel {
  display: block;
  width: 100%;
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
  text-overflow: ellipsis;
}
@media (max-width: 1366px) {
  .planning-table-order > .plan-table { min-width: 1380px; table-layout: fixed; }
  .planning-table-order .oplan-stage-cell { min-width: 0; width: 17%; }
  .planning-table-order .oplan-item-cell { min-width: 0; width: 14%; }
  .planning-table-order .plan-dep-cell { min-width: 0; }
  .planning-table-order .oplan-window-cell { min-width: 0; width: 13%; }
  .planning-table-order .oplan-date-inp {
    flex: 1 1 125px;
    width: 100%;
    min-width: 0;
    max-width: 100%;
  }
}

/* v4.36.001 — счётчики непрочитанных уведомлений непосредственно в меню. */
.side-item { position: relative; }
.side-notif-badge {
  flex: none;
  min-width: 19px;
  height: 19px;
  padding: 0 5px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 999px;
  background: #b3261e;
  color: #fff;
  font-size: 10.5px;
  font-weight: 700;
  line-height: 1;
  box-sizing: border-box;
  box-shadow: 0 0 0 2px var(--paper);
}
body.sb-collapsed .side-notif-badge {
  position: absolute;
  top: 3px;
  right: 4px;
  min-width: 17px;
  height: 17px;
  padding: 0 4px;
  font-size: 9.5px;
}

/* v4.36.001 — наглядный жизненный цикл поручения. */
.asg-flow {
  display: grid;
  grid-template-columns: repeat(4, minmax(130px, 1fr));
  gap: 8px;
  margin-top: 16px;
}
.asg-flow-step {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  padding: 9px 10px;
  border: 1px solid var(--rule-soft, #e5e9ef);
  border-radius: 7px;
  background: var(--paper-soft, #f7f9fb);
  color: var(--ink-mute, #727b87);
  min-width: 0;
}
.asg-flow-step.done { color: var(--ink, #243); border-color: #b9d7c0; }
.asg-flow-dot {
  width: 9px;
  height: 9px;
  margin-top: 4px;
  border-radius: 50%;
  background: #c4cad2;
  flex: none;
}
.asg-flow-step.done .asg-flow-dot { background: #2e6e3c; }
.asg-return-reason {
  margin-top: 12px;
  padding: 9px 11px;
  border-left: 3px solid #b3261e;
  border-radius: 4px;
  background: #fff1f0;
}
html[data-theme="dark"] .asg-return-reason { background: rgba(179, 38, 30, .14); }
@media (max-width: 900px) {
  .asg-flow { grid-template-columns: repeat(2, minmax(150px, 1fr)); }
}
@media (max-width: 560px) {
  .asg-flow { grid-template-columns: 1fr; }
}

/* ═══════════════════════════════════════════════════════════════════════
   v4.36.003 — компактные рабочие таблицы без уменьшения шрифта.
   Высота строк уменьшается только за счёт внутренних отступов элементов.
   ═══════════════════════════════════════════════════════════════════════ */

/* Планирование: более плотные строки, при этом размер текста сохраняется. */
.planning-table-order .plan-table th,
.planning-table-order .plan-table td,
.planning-table-bs .plan-table th,
.planning-table-bs .plan-table td {
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 6px;
  padding-right: 6px;
}
.planning-table-order .plan-table .plan-dep-sel,
.planning-table-order .plan-table .oplan-link-sel,
.planning-table-order .plan-table .oplan-item-sel,
.planning-table-bs .plan-table .plan-dep-sel {
  padding-top: 2px;
  padding-bottom: 2px;
}
.planning-table-order .oplan-date-inp {
  padding-top: 2px;
  padding-bottom: 2px;
}
.planning-table-order .oplan-date-save {
  width: 26px;
  flex-basis: 26px;
  height: 24px;
}
/* Поле длительности занимает фактическую ширину столбца и следует за ней
   при ручном перетаскивании границы столбца. */
.plan-table .plan-dur-inp {
  width: 100%;
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
  padding-top: 2px;
  padding-bottom: 2px;
}
.gantt-svg-fixed .gantt-row-separator {
  stroke: var(--rule-soft, #e7ecf3);
  stroke-width: 1;
  opacity: .72;
  vector-effect: non-scaling-stroke;
}
html[data-theme="dark"] .gantt-svg-fixed .gantt-row-separator {
  stroke: var(--rule, #39424f);
  opacity: .68;
}

/* Журнал заказов: меньше вертикальные отступы и управляющие кнопки.
   Размеры шрифта намеренно не переопределяются. */
.prod-journal-table th,
.prod-journal-table td {
  padding-top: 4px !important;
  padding-bottom: 4px !important;
}
.prod-journal-table thead tr.filter-row th {
  padding-top: 3px !important;
  padding-bottom: 3px !important;
}
.prod-journal-table .col-filter {
  padding-top: 2px;
  padding-bottom: 2px;
}
.prod-journal-table col.prod-actions-col { width: 246px; }
.prod-journal-table th.prod-actions-col,
.prod-journal-table td.order-acts { min-width: 238px; }
.prod-journal-table .order-actions-bar { gap: 4px; }
.prod-journal-table .order-action-btn,
.prod-journal-table .order-toggle-btn { min-height: 28px; }
.prod-journal-table .order-action-btn {
  width: 28px;
  min-width: 28px;
}
.prod-journal-table .order-toggle-btn {
  min-width: 76px;
  padding-left: 7px;
  padding-right: 7px;
}

/* Документооборот: единая компактная плотность для реестра документов,
   заявлений, поручений и экземпляров. Шрифты остаются прежними. */
#docs_inner .bs-list-table th,
#docs_inner .bs-list-table td {
  padding-top: 5px;
  padding-bottom: 5px;
}
#docs_inner table.bs-list-table.filterable thead tr.filter-row th,
#docs_inner table.bs-list-table.filterable thead tr.filter-row td {
  padding-top: 3px;
  padding-bottom: 3px;
}
#docs_inner .filter-row .col-filter {
  padding-top: 2px;
  padding-bottom: 2px;
}
#docs_inner .hr-app-table td.order-acts .link-btn2 {
  padding-top: 2px;
  padding-bottom: 2px;
}
#docs_inner .docs-actions {
  width: 54px;
  min-width: 54px;
}
#docs_inner .doc-action-btn {
  width: 30px;
  min-width: 30px;
  height: 30px;
}

/* ═══════════════════════════════════════════════════════════════════════
   v4.36.004 — шаблоны проектов: стабильная сетка без наложения полей.
   Все элементы формы ограничены своей grid-ячейкой; активная рамка списка
   рисуется внутрь кнопки и больше не выходит за левую границу панели.
   ═══════════════════════════════════════════════════════════════════════ */
.project-template-layout {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  grid-template-columns: minmax(210px, 250px) minmax(0, 1fr);
  gap: 14px;
}
.project-template-list,
#project_template_editor,
.project-template-fields,
.project-template-fields > label {
  min-width: 0;
}
.project-template-list {
  width: 100%;
  max-width: 100%;
}
.project-template-list > button,
.project-template-list-item {
  width: 100%;
  max-width: 100%;
  min-width: 0;
}
.project-template-list-item {
  overflow-wrap: anywhere;
  line-height: 1.25;
}
.project-template-list-item.active {
  border-color: var(--accent);
  box-shadow: inset 0 0 0 1px var(--accent);
}
.project-template-fields > label {
  align-content: start;
}
.project-template-fields .eng-inp,
.project-template-fields .eng-sel,
.project-template-fields textarea {
  display: block;
  width: 100%;
  min-width: 0;
  max-width: 100%;
}
.project-template-fields .eng-sel {
  text-overflow: ellipsis;
}
.project-template-main-fields {
  grid-template-columns:
    minmax(110px, .72fr)
    minmax(250px, 1.55fr)
    minmax(210px, 1.18fr)
    minmax(180px, 1fr)
    minmax(240px, 1.35fr);
  gap: 10px 12px;
}
.project-template-fields.compact {
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: 10px 12px;
}
.project-template-fields.compact .pti-code { grid-column: span 2; }
.project-template-fields.compact .pti-title { grid-column: span 4; }
.project-template-fields.compact .pti-user { grid-column: span 3; }
.project-template-fields.compact .pti-department { grid-column: span 3; }
.project-template-fields.compact .pti-offset,
.project-template-fields.compact .pti-remind,
.project-template-fields.compact .pti-escalate { grid-column: span 2; }
.project-template-fields.compact .pti-escalation-role,
.project-template-fields.compact .pti-depends { grid-column: span 3; }
.project-template-fields.compact .pti-blockers { grid-column: span 4; }
.project-template-fields.compact .pti-confirm { grid-column: span 3; }
.project-template-fields.compact .pti-confirmation-text { grid-column: span 5; }
.project-template-fields.compact .pti-description { grid-column: 1 / -1; }
.project-template-fields.compact .pti-confirm {
  min-height: 31px;
  align-self: end;
  white-space: normal;
  line-height: 1.25;
}
.project-template-fields.compact .pti-description textarea {
  min-height: 58px;
}

@media (max-width: 1500px) {
  .project-template-main-fields {
    grid-template-columns: repeat(6, minmax(0, 1fr));
  }
  .project-template-main-fields .pt-main-code { grid-column: span 2; }
  .project-template-main-fields .pt-main-name { grid-column: span 4; }
  .project-template-main-fields .pt-main-trigger,
  .project-template-main-fields .pt-main-kind,
  .project-template-main-fields .pt-main-pattern { grid-column: span 2; }

  .project-template-fields.compact {
    grid-template-columns: repeat(6, minmax(0, 1fr));
  }
  .project-template-fields.compact .pti-code { grid-column: span 2; }
  .project-template-fields.compact .pti-title { grid-column: span 4; }
  .project-template-fields.compact .pti-user,
  .project-template-fields.compact .pti-department { grid-column: span 3; }
  .project-template-fields.compact .pti-offset,
  .project-template-fields.compact .pti-remind,
  .project-template-fields.compact .pti-escalate { grid-column: span 2; }
  .project-template-fields.compact .pti-escalation-role,
  .project-template-fields.compact .pti-depends,
  .project-template-fields.compact .pti-blockers,
  .project-template-fields.compact .pti-confirm { grid-column: span 3; }
  .project-template-fields.compact .pti-confirmation-text,
  .project-template-fields.compact .pti-description { grid-column: 1 / -1; }
}

@media (max-width: 900px) {
  .project-template-layout { grid-template-columns: minmax(0, 1fr); }
  .project-template-main-fields,
  .project-template-fields.compact { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .project-template-main-fields > label,
  .project-template-fields.compact > label { grid-column: auto !important; }
  .project-template-main-fields .pt-main-name,
  .project-template-main-fields .pt-main-pattern,
  .project-template-fields.compact .pti-title,
  .project-template-fields.compact .pti-confirmation-text,
  .project-template-fields.compact .pti-description { grid-column: 1 / -1 !important; }
}

@media (max-width: 560px) {
  .project-template-main-fields,
  .project-template-fields.compact { grid-template-columns: minmax(0, 1fr); }
  .project-template-main-fields > label,
  .project-template-fields.compact > label { grid-column: 1 !important; }
  .project-template-head { align-items: flex-start; flex-wrap: wrap; }
}

/* v4.37.001 — три фазы коммерческого графика и адресный исполнитель. */
.oplan-phase-row td {
  padding: 6px 10px !important;
  font-weight: 700;
  letter-spacing: .02em;
  border-top: 2px solid var(--line, #cfd7e0) !important;
  border-bottom: 1px solid var(--line, #dfe5ec) !important;
  background: var(--paper-2, #f1f5f9);
}
.oplan-phase-engineering td { background: #eef4ff; }
.oplan-phase-procurement td { background: #fff6df; }
.oplan-phase-production td { background: #eef8f0; }
.oplan-phase-sel {
  display: block;
  width: 100%;
  min-width: 0;
  margin-top: 5px;
  padding: 3px 5px;
  border: 1px solid var(--line, #cfd7e0);
  border-radius: 5px;
  background: var(--paper, #fff);
  color: var(--ink, #223);
  font: inherit;
  font-size: 11.5px;
}
.oplan-responsible-stack {
  display: flex;
  flex-direction: column;
  gap: 5px;
  width: 100%;
  min-width: 0;
}
.oplan-new-phase { min-width: 150px; max-width: 190px; }
.oplan-new-responsible { min-width: 250px; max-width: 390px; }
.gantt-svg-fixed .gantt-phase-band { fill: #e5ebf3; }
.gantt-svg-fixed .gantt-phase-engineering { fill: #e7efff; }
.gantt-svg-fixed .gantt-phase-procurement { fill: #fff0c9; }
.gantt-svg-fixed .gantt-phase-production { fill: #e5f3e8; }
.gantt-svg-fixed .gantt-lbl.gantt-phase {
  font-weight: 800;
  font-size: 13px;
  fill: var(--ink, #243);
  text-transform: uppercase;
}
html[data-theme="dark"] .oplan-phase-engineering td { background: rgba(76, 116, 178, .18); }
html[data-theme="dark"] .oplan-phase-procurement td { background: rgba(174, 125, 36, .18); }
html[data-theme="dark"] .oplan-phase-production td { background: rgba(62, 126, 76, .18); }
html[data-theme="dark"] .gantt-svg-fixed .gantt-phase-engineering { fill: #27364d; }
html[data-theme="dark"] .gantt-svg-fixed .gantt-phase-procurement { fill: #483b24; }
html[data-theme="dark"] .gantt-svg-fixed .gantt-phase-production { fill: #293e2e; }
html[data-theme="dark"] .gantt-svg-fixed .gantt-lbl.gantt-phase { fill: var(--ink, #e8edf3); }


/* v4.38.002 — компактные этапы 6–8: ресурсы, план, диспетчер ССЗ.
   Новые вкладки имеют внутренний белый отступ, чтобы рамки таблиц не
   прилипали к краям рабочей области. */
.prod-flow-surface {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  padding: 14px 16px 18px;
  background: var(--paper);
}
.prod-flow-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:10px; }
.prod-flow-head h3 { margin:0 0 4px; }
.prod-flow-form { display:flex; flex-wrap:wrap; align-items:end; gap:8px; margin:8px 0 12px; }
.prod-flow-form label { display:flex; flex-direction:column; gap:4px; font-size:12px; }
.prod-flow-actions { display:flex; flex-wrap:wrap; gap:8px; margin:8px 0 12px; }
.prod-flow-table { width:100%; border:1px solid var(--rule); margin:0 0 2px; }
.prod-flow-table .eng-inp, .prod-flow-table .eng-sel { min-width:90px; max-width:220px; padding-top:4px; padding-bottom:4px; }
.prod-flow-table td { vertical-align:top; }
@media (max-width: 900px) {
  .prod-flow-surface { padding:10px 10px 14px; }
  .prod-flow-head { flex-direction:column; }
  .prod-flow-table { min-width:920px; }
}

/* v4.41.002 — крупные действия в реестре СИ; карточка открывается кликом по строке. */
.metro-row-actions { white-space:nowrap; min-width:230px; }
.metro-row-action { min-height:32px; padding:5px 10px; margin:1px 2px; font-weight:600; }
.metro-row-action.danger { border-color:#d8a2a2; color:#a31b1b; }
.metro-row-action.danger:hover { background:#fff0f0; }
html[data-theme="dark"] .metro-row-action.danger:hover { background:#3a2020; }

/* v4.41.002 — периодический регистр материалов и движения в передел. */
.material-consumption-card { padding:14px 16px 18px; }
.material-consumption-kpi { display:flex; flex-wrap:wrap; gap:8px; margin:10px 0 12px; }
.material-consumption-kpi > span { min-width:112px; border:1px solid var(--rule); border-radius:8px; padding:8px 11px; background:var(--paper); display:flex; flex-direction:column; }
.material-consumption-kpi > span b { font-size:18px; line-height:1.1; }
.material-consumption-kpi > span small { color:var(--ink-mute); margin-top:3px; }
.material-consumption-kpi > span.warn b { color:#a96d00; }
.material-consumption-filters { display:flex; align-items:end; flex-wrap:wrap; gap:8px; margin-bottom:10px; padding:9px; border:1px solid var(--rule); border-radius:8px; background:var(--paper-soft, var(--paper)); }
.material-consumption-filters label { display:flex; flex-direction:column; gap:3px; font-size:11px; color:var(--ink-mute); }
.material-consumption-filters input,.material-consumption-filters select { min-height:32px; }
.material-consumption-frame { max-height:58vh; overflow:auto; }
.material-consumption-table { min-width:1280px; }
.material-consumption-table thead th { position:sticky; top:0; z-index:2; background:var(--paper); }
.prod-material-modal-card { width:min(1380px,96vw); max-width:96vw; }
.prod-material-modal-head { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; position:sticky; top:-24px; z-index:5; background:var(--paper); padding:2px 0 10px; }
.prod-material-modal-head h3 { margin-bottom:2px; }
.prodmat-frame,.prodmat-history-frame { overflow:auto; }
.prodmat-table { min-width:1040px; }
.prodmat-actions { white-space:nowrap; }
.prodmat-actions button { margin:2px; min-height:32px; }
.prodmat-history-title { margin:16px 0 7px; }
.warn-text { color:#a96d00; }
@media (max-width: 900px) {
  .material-consumption-card { padding:10px; }
  .material-consumption-kpi > span { min-width:96px; }
}


/* ═══════════════════════════════════════════════════════════════════════
   v4.43.001 — состав заказа, сортировка производственных заказов и
   поисковые выпадающие фильтры реестра техпроцессов.
   ═══════════════════════════════════════════════════════════════════════ */
.order-composition-table.sgem-resizable-table {
  table-layout: fixed !important;
}
.order-composition-table .sgem-column-resizer::after {
  background: color-mix(in srgb, var(--blue, #2f63a5) 24%, transparent);
}
.order-composition-table .sgem-resizable-th:hover > .sgem-column-resizer::after,
.order-composition-table .sgem-column-resizer:focus::after,
.order-composition-table.is-column-resizing .sgem-column-resizer::after {
  background: var(--blue, #2f63a5);
}
.eng-prod-filter-combo {
  min-width: 0;
}
.prod-journal-head-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  flex-wrap: wrap;
}
.prod-enabled-sort-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--ink-mute, #667);
  font-size: 12px;
}
.prod-enabled-sort {
  min-height: 30px;
  padding-top: 3px;
  padding-bottom: 3px;
  width: auto;
  min-width: 164px;
}
.prod-enabled-tag { margin-top: 0; }
@media (max-width: 720px) {
  .prod-journal-head { align-items: flex-start; gap: 8px; }
  .prod-journal-head-actions { justify-content: flex-start; }
  .prod-enabled-sort-label { width: 100%; }
  .prod-enabled-sort { flex: 1 1 auto; min-width: 0; }
}

/* v4.43.003 — интерактивная ширина графы названий в экранном Ганте. */
.gantt-svg-fixed .gantt-label-divider {
  stroke: var(--rule, #cbd3df);
  stroke-width: 1;
  vector-effect: non-scaling-stroke;
}
.gantt-svg-fixed .gantt-label-resizer {
  fill: transparent;
  cursor: col-resize;
  pointer-events: all;
  touch-action: none;
}
.gantt-svg-fixed .gantt-resize-guide {
  stroke: var(--accent, #b71c1c);
  stroke-width: 2;
  opacity: 0;
  pointer-events: none;
  vector-effect: non-scaling-stroke;
}
.gantt-svg-fixed .gantt-label-resizer:hover + * { cursor: col-resize; }
.gantt-svg-fixed:has(.gantt-label-resizer:hover) .gantt-resize-guide,
body.gantt-resizing .gantt-svg-fixed .gantt-resize-guide { opacity: .55; }
body.gantt-resizing, body.gantt-resizing * { cursor: col-resize !important; user-select: none !important; }
.gantt-svg-fixed .gantt-bar-date {
  font-size: 10px;
  font-weight: 600;
  fill: var(--ink-soft, #52606f);
  paint-order: stroke;
  stroke: var(--paper, #fff);
  stroke-width: 3.2px;
  stroke-linejoin: round;
  dominant-baseline: middle;
  pointer-events: none;
}
.gantt-meta-row { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:6px; flex-wrap:wrap; }
.gantt-date-toggle { display:inline-flex; align-items:center; gap:7px; font-size:12px; color: var(--ink-mute, #667); user-select:none; }
.gantt-date-toggle input { margin:0; }
html[data-theme="dark"] .gantt-svg-fixed .gantt-label-divider { stroke: var(--rule, #39424f); }
html[data-theme="dark"] .gantt-svg-fixed .gantt-bar-date {
  fill: var(--ink-soft, #aab3c2);
  stroke: var(--paper-soft, #2b3441);
}
html[data-theme="dark"] .gantt-date-toggle { color: var(--ink-mute, #aab3c2); }

/* v4.44.001 — встроенная диагностика производительности */
.perf-summary-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:10px; margin:8px 0 12px; }
.perf-card { border:1px solid var(--rule,#dfe5ec); border-radius:10px; padding:12px 14px; background:var(--paper,#fff); display:flex; flex-direction:column; gap:3px; min-height:78px; }
.perf-card span { font-size:11px; color:var(--ink-mute,#667); }
.perf-card b { font-size:18px; line-height:1.2; color:var(--ink,#243); }
.perf-card small { font-size:10.5px; color:var(--ink-mute,#667); }
.perf-scope-note { padding:9px 11px; border-radius:8px; background:var(--paper-soft,#f5f7fa); color:var(--ink-soft,#52606f); font-size:11px; margin-bottom:14px; }
.perf-title { font-size:13px; margin:18px 0 7px; display:flex; align-items:baseline; gap:8px; }
.perf-table { font-size:11px; }
.perf-table td, .perf-table th { vertical-align:top; }
.perf-sql-text { max-width:580px; white-space:normal; overflow-wrap:anywhere; }
html[data-theme="dark"] .perf-card { background:var(--paper,#222a35); border-color:var(--rule,#3a4655); }
html[data-theme="dark"] .perf-scope-note { background:var(--paper-soft,#2b3441); }

/* v4.44.009 — планирование: реестр этапов + карточка */
.oplan-order-picker { align-items:flex-end; gap:12px; flex-wrap:wrap; }
.oplan-stage-readonly { cursor:pointer; }
.oplan-stage-readonly:hover > td { outline:1px solid var(--border); outline-offset:-1px; }
.oplan-readonly-table td { vertical-align:middle; }
.oplan-archive-banner { margin:10px 0; }
.oplan-stage-card-shell { width:min(980px, 96vw); max-width:980px; }
.oplan-stage-card-shell .modal-actions { position:sticky; bottom:0; }

/* v4.45.007 — по-колоночный поиск в справочнике «Материалы и цены». */
.dict-table .dict-filter-row th {
  padding: 4px 6px 6px;
  background: var(--paper);
  border-bottom: 2px solid var(--rule);
}
.dict-table .dict-filter-row .dict-col-filter {
  min-width: 72px;
  border: 1px solid var(--rule);
  background: var(--bg);
  padding: 5px 7px;
  font-size: 12px;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
}
.dict-table .dict-filter-row .dict-filter-clear {
  width: 28px;
  height: 28px;
  border: 1px solid var(--rule);
  background: var(--paper);
  border-radius: 5px;
  cursor: pointer;
  color: var(--ink-soft);
}

/* v4.45.017 — структурная строка цикла маршрута */
.route-ops-table tr.route-cycle-row td {
  background: var(--surface-soft, #f4f7fb);
  border-top: 2px solid var(--rule, #cbd5e1);
  border-bottom: 2px solid var(--rule, #cbd5e1);
}
.route-ops-table tr.route-cycle-row td:nth-child(3) {
  letter-spacing: .01em;
}
/* v4.45.017 — метка исполняемого прохода структурного цикла */
.prod-cycle-badge{display:inline-flex;align-items:center;white-space:nowrap;font-size:10px;padding:1px 5px;margin-left:3px;vertical-align:middle}

/* v4.45.021 — журнал производства: операции сгруппированы по ДСЕ. */
.ws-list-meta { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.ws-group-tools { display:inline-flex; align-items:center; gap:12px; margin-left:auto; }
.ws-dse-group-row > td {
  padding: 9px 10px !important;
  background: var(--paper-soft, #f6f8fb);
  border-top: 2px solid var(--rule, #d7dce5);
  border-bottom: 1px solid var(--rule, #d7dce5);
}
.ws-dse-group-row { cursor:pointer; }
.ws-dse-group-row:hover > td { background: var(--hover, #f0f4f8); }
.ws-dse-group-head { display:flex; align-items:center; gap:10px; min-width:760px; }
.ws-dse-toggle {
  width:26px; height:26px; flex:0 0 26px; border:1px solid var(--rule);
  border-radius:5px; background:var(--paper); cursor:pointer; color:var(--ink-soft);
}
.ws-dse-group-main { flex:1 1 auto; min-width:0; font-size:14px; }
.ws-dse-material-row { margin-top:4px; display:flex; align-items:center; gap:14px; flex-wrap:wrap; font-size:12px; color:var(--ink-soft); }
.ws-dse-material { min-width:260px; }
.ws-dse-cert-value { min-width:190px; }
.ws-dse-cert-edit { font-size:14px; padding:0 4px; }
.ws-dse-progress { flex:0 0 auto; white-space:nowrap; font-size:12px; color:var(--ink-soft); font-weight:600; }
.ws-dse-op-row td { border-bottom-color:var(--rule-soft); }
.ws-dse-repeat { text-align:center; }
@media (max-width: 900px) {
  .ws-dse-group-head { min-width:620px; }
  .ws-dse-material-row { gap:8px; }
}

/* v4.45.022 — действия в начале строки ТП. */
.route-ops-table .route-op-actions{white-space:nowrap;min-width:58px}
.route-ops-table .route-op-actions .link-btn{padding:2px 4px}
.route-ops-table th,.route-ops-table td{vertical-align:top}

/* v4.45.026 — Excel-подобная прокрутка таблицы маршрута: собственный
   scroll-container не меняет overflow общих экранов, а шапка закрепляется
   только в пределах таблицы. */
.eng-route-ops-scroll {
  max-height: min(70vh, 720px);
  overflow: auto;
  overscroll-behavior: contain;
  border: 1px solid var(--rule);
  background: var(--paper);
}
.eng-route-ops-scroll .route-ops-table { border: 0; }
.eng-route-ops-scroll .route-ops-table thead th {
  position: sticky;
  top: 0;
  z-index: 4;
  background: var(--paper-soft);
  box-shadow: 0 1px 0 var(--rule);
}

/* v4.45.023 — зебра строк таблицы операций ТП. */
.route-ops-table tbody tr:not(.route-cycle-row):nth-child(odd) > td {
  background: var(--paper);
}
.route-ops-table tbody tr:not(.route-cycle-row):nth-child(even) > td {
  background: #f3f6fa;
}
.route-ops-table tbody tr:not(.route-cycle-row):hover > td {
  background: #eaf1f9;
}

html[data-theme="dark"] .route-ops-table tbody tr:not(.route-cycle-row):nth-child(odd) > td {
  background: var(--paper);
}
html[data-theme="dark"] .route-ops-table tbody tr:not(.route-cycle-row):nth-child(even) > td {
  background: rgba(255,255,255,.035);
}
html[data-theme="dark"] .route-ops-table tbody tr:not(.route-cycle-row):hover > td {
  background: #344154 !important;
}


/* v4.47.007 — сортировка строк в редакторе справочников. */
.dict-table th.dict-sortable-th {
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
}
.dict-table th.dict-sortable-th:hover { background: var(--blue-soft, #eef4fb); }
.dict-sort-mark {
  display: inline-block;
  margin-left: 6px;
  min-width: 10px;
  opacity: .55;
  font-size: 11px;
}
.dict-table th.dict-sortable-th[aria-sort="ascending"] .dict-sort-mark,
.dict-table th.dict-sortable-th[aria-sort="descending"] .dict-sort-mark { opacity: 1; }

/* v4.47.008 — server-side фильтр «Материалы и цены» по видам номенклатуры 1С. */
.material-kind-filter-panel {
  margin: 0 0 10px;
  padding: 10px 12px;
  border: 1px solid var(--rule, #d8dee8);
  border-radius: 9px;
  background: var(--paper, #fff);
}
.material-kind-filter-head,
.material-kind-query-row,
.material-kind-summary,
.material-dict-pager {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.material-kind-filter-head { justify-content: space-between; margin-bottom: 8px; }
.material-kind-filter-actions { display: flex; align-items: center; gap: 6px; }
.material-kind-chip-list {
  display: flex;
  align-items: stretch;
  gap: 6px;
  flex-wrap: wrap;
  max-height: 156px;
  overflow: auto;
  padding: 2px 1px 6px;
}
.material-kind-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 30px;
  padding: 5px 8px;
  border: 1px solid var(--rule, #d8dee8);
  border-radius: 7px;
  background: var(--bg, #f6f8fb);
  cursor: pointer;
  user-select: none;
  font-size: 11.5px;
}
.material-kind-chip:hover { border-color: var(--accent, #d43b3b); }
.material-kind-chip.is-selected {
  border-color: var(--accent, #d43b3b);
  box-shadow: inset 0 0 0 1px var(--accent, #d43b3b);
  background: var(--paper, #fff);
}
.material-kind-chip input { margin: 0; }
.material-kind-chip-name { font-weight: 600; }
.material-kind-chip-count {
  min-width: 22px;
  padding: 1px 5px;
  border-radius: 10px;
  background: var(--paper, #fff);
  color: var(--ink-soft, #596579);
  text-align: center;
  font-variant-numeric: tabular-nums;
}
.material-kind-chip-groups { color: var(--ink-mute, #7b8798); font-size: 10.5px; white-space: nowrap; }
.material-kind-query-row { margin-top: 8px; }
.material-kind-global-search { flex: 1 1 520px; min-width: 260px; }
.material-page-size { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; font-size: 11px; color: var(--ink-soft, #596579); }
.material-page-size select { min-height: 32px; border: 1px solid var(--rule, #d8dee8); border-radius: 6px; background: var(--paper, #fff); color: var(--ink, #263342); padding: 3px 22px 3px 7px; }
.material-kind-summary { margin-top: 7px; font-size: 11px; color: var(--ink-soft, #596579); }
.material-kind-summary > span:not(:last-child)::after { content: '·'; margin-left: 10px; color: var(--ink-mute, #8b96a6); }
.dict-material-table-host { width: 100%; overflow: auto; }
.material-dict-pager { justify-content: center; margin: 10px 0 4px; font-size: 11.5px; }
.material-dict-empty, .material-dict-loading { padding: 28px 16px; text-align: center; color: var(--ink-mute, #748094); }
html[data-theme="dark"] .material-kind-filter-panel,
html[data-theme="dark"] .material-kind-chip.is-selected { background: var(--paper, #222a35); }
html[data-theme="dark"] .material-kind-chip { background: var(--paper-soft, #2b3441); }
html[data-theme="dark"] .material-kind-chip-count { background: var(--paper, #222a35); }
@media (max-width: 900px) {
  .material-kind-chip-list { max-height: 220px; }
  .material-kind-query-row > .btn-primary { width: 100%; }
  .material-kind-global-search { flex-basis: 100%; }
}

/* v4.48.001 — ключевые события проекта / XLSX «Обязанности Поставщика» */
.project-xlsx-actions { display:flex; align-items:center; gap:7px; flex-wrap:wrap; }
.project-xlsx-hint { margin:-2px 0 10px; font-size:12px; line-height:1.45; }
.project-key-events-table { min-width:1780px !important; table-layout:fixed; }
.project-key-events-table th,
.project-key-events-table td { white-space:normal !important; vertical-align:top; line-height:1.35; }
.project-key-events-table th:nth-child(1) { width:42px; }
.project-key-events-table th:nth-child(2) { width:52px; }
.project-key-events-table th:nth-child(3) { width:105px; }
.project-key-events-table th:nth-child(4) { width:320px; }
.project-key-events-table th:nth-child(5) { width:185px; }
.project-key-events-table th:nth-child(6) { width:285px; }
.project-key-events-table th:nth-child(7),
.project-key-events-table th:nth-child(8) { width:160px; }
.project-key-events-table th:nth-child(9) { width:245px; }
.project-key-events-table th:nth-child(10) { width:115px; }
.project-key-events-table th:nth-child(11) { width:145px; }
.project-key-events-table th:nth-child(12) { width:46px; }

/* v4.48.003 — компактный блок заказа, редактирование ключевых событий и зависимости */
.project-order-toolbar {
  display:grid;
  grid-template-columns:minmax(330px, 1.05fr) minmax(0, 2.2fr);
  gap:10px;
  align-items:end;
  min-width:0;
  padding:9px 11px;
  margin-bottom:10px;
  border:1px solid var(--rule);
  border-radius:var(--r-lg);
  background:var(--paper);
  box-shadow:var(--shadow-sm);
}
.project-order-current { display:grid; gap:4px; min-width:0; }
.project-order-current > span {
  color:var(--ink-mute);
  font-size:10px;
  font-weight:650;
  letter-spacing:.25px;
  text-transform:uppercase;
}
.project-order-current .eng-sel { width:100%; min-width:0; min-height:34px; }
.project-order-create-inline {
  display:grid;
  grid-template-columns:minmax(115px,.5fr) minmax(145px,.7fr) minmax(190px,.9fr) minmax(130px,.65fr) auto;
  gap:7px;
  align-items:center;
  min-width:0;
}
.project-order-create-inline > * { width:100%; min-width:0; min-height:34px; }
.project-order-create-inline button { white-space:nowrap; }

.project-checklist-card { padding:12px; }
.project-checklist-card .project-summary {
  gap:14px;
  padding:9px 11px;
  margin-bottom:9px !important;
}
.project-checklist-card .project-summary .proj-progress { min-width:140px; flex:1 1 140px; }
.project-checklist-card .pf-sum-item { min-width:74px; }
.project-xlsx-actions { gap:5px; }
.project-xlsx-actions .btn-secondary,
.project-checklist-card #proj_apply_templates { padding-left:10px; padding-right:10px; }

/* При первом показе таблица ровно вписана в контейнер. data-force-resize
   подключает универсальный ресайзер: после этого границы можно тянуть мышью,
   а горизонтальная прокрутка появляется только после ручного расширения. */
.project-key-events-table {
  width:100% !important;
  min-width:0 !important;
  table-layout:fixed !important;
  font-size:11px;
}
.project-key-events-table th,
.project-key-events-table td {
  white-space:normal !important;
  vertical-align:top;
  line-height:1.25;
  padding:6px 5px !important;
  overflow-wrap:anywhere;
}
.project-key-events-table th { font-size:10.5px; }
.project-key-events-table th:nth-child(1) { width:2.5%; }
.project-key-events-table th:nth-child(2) { width:3.5%; }
.project-key-events-table th:nth-child(3) { width:6.5%; }
.project-key-events-table th:nth-child(4) { width:19%; }
.project-key-events-table th:nth-child(5) { width:12%; }
.project-key-events-table th:nth-child(6) { width:9%; }
.project-key-events-table th:nth-child(7) { width:8%; }
.project-key-events-table th:nth-child(8) { width:7%; }
.project-key-events-table th:nth-child(9) { width:10%; }
.project-key-events-table th:nth-child(10) { width:8%; }
.project-key-events-table th:nth-child(11) { width:6%; }
.project-key-events-table th:nth-child(12) { width:6%; }
.project-key-events-table th:nth-child(13) { width:2.5%; }
.project-key-events-table.sgem-resizable-table { min-width:var(--sgem-resize-min-width, 100%) !important; }
.project-row-actions { white-space:nowrap !important; }
.project-row-actions .link-btn2 { padding:2px 3px; }
.project-dependency-cell { position:relative; }
.project-dependency-list { display:flex; flex-wrap:wrap; gap:3px; padding-right:20px; }
.project-dependency-chip {
  display:inline-flex;
  align-items:center;
  gap:2px;
  padding:2px 5px;
  border-radius:999px;
  border:1px solid var(--rule-soft);
  background:var(--paper-soft);
  font-size:10px;
  white-space:nowrap;
}
.project-dependency-chip.is-done { color:#267343; }
.project-dependency-chip.is-waiting { color:var(--warning-text, #8a5c00); }
.project-dependency-edit { position:absolute; top:3px; right:2px; padding:1px 2px; }

.project-event-modal {
  width:min(980px, calc(100vw - 30px));
  max-height:90vh;
  overflow:auto;
}
.project-event-modal-head {
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:16px;
  margin-bottom:12px;
}
.project-event-modal-head h3 { margin:0 0 4px; }
.project-event-modal-head p { margin:0; font-size:12px; }
.project-event-grid {
  display:grid;
  grid-template-columns:repeat(3, minmax(0,1fr));
  gap:9px 10px;
}
.project-event-grid > label { display:grid; gap:4px; min-width:0; }
.project-event-grid > label > span {
  color:var(--ink-mute);
  font-size:10.5px;
  font-weight:650;
}
.project-event-grid .eng-inp,
.project-event-grid .eng-sel { width:100%; min-width:0; box-sizing:border-box; }
.project-event-grid textarea { resize:vertical; min-height:54px; }
.project-event-wide { grid-column:1 / -1; }
.project-event-confirm {
  grid-column:1 / -1;
  display:flex !important;
  grid-template-columns:auto 1fr;
  align-items:center;
  justify-content:flex-start;
  gap:7px !important;
  padding:4px 0;
}
.project-event-confirm > span { font-size:12px !important; color:var(--ink) !important; }
.project-event-dependencies {
  border:1px solid var(--rule-soft);
  border-radius:var(--r-md);
  background:var(--paper-soft);
  padding:9px;
}
.project-event-deps-head { display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin-bottom:7px; }
.project-event-deps-head .muted { font-size:11px; }
.project-dependency-picker {
  display:grid;
  grid-template-columns:repeat(2, minmax(0,1fr));
  gap:4px 8px;
  max-height:170px;
  overflow:auto;
  padding-right:3px;
}
.project-dependency-option {
  display:grid !important;
  grid-template-columns:auto 18px minmax(34px,auto) minmax(0,1fr);
  align-items:start;
  gap:5px !important;
  padding:5px 6px;
  border-radius:6px;
  cursor:pointer;
  font-size:11px;
}
.project-dependency-option:hover { background:var(--paper); }
.project-dependency-option.is-done .project-dependency-status { color:#267343; }
.project-dependency-status { color:var(--warning-text, #8a5c00); font-weight:700; }
.project-event-actions { margin-top:12px; }

@media (max-width: 1180px) {
  .project-order-toolbar { grid-template-columns:1fr; align-items:stretch; }
  .project-order-create-inline { grid-template-columns:repeat(4,minmax(0,1fr)) auto; }
}
@media (max-width: 760px) {
  .project-order-create-inline { grid-template-columns:1fr 1fr; }
  .project-order-create-inline button { grid-column:1 / -1; }
  .project-event-grid { grid-template-columns:1fr; }
  .project-event-wide,
  .project-event-confirm { grid-column:1; }
  .project-dependency-picker { grid-template-columns:1fr; }
}

/* v4.48.004 — входной контроль материалов */
.incoming-control-card{display:flex;flex-direction:column;gap:10px}
.incoming-filters{display:grid;grid-template-columns:minmax(240px,2fr) repeat(6,minmax(125px,1fr)) auto auto auto auto;gap:6px;align-items:end}
.incoming-control-table{font-size:12px;table-layout:fixed;width:100%;min-width:100%}
.incoming-control-table th,.incoming-control-table td{padding:6px 7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.incoming-sort-th{cursor:pointer}.incoming-sort-mark{font-size:9px;opacity:.65}
.incoming-control-table tr.clickable{cursor:pointer}.incoming-control-table tr.clickable:hover{background:var(--bg-soft,#f5f7fa)}
.incoming-lot-modal{max-width:min(1220px,96vw);max-height:94vh;overflow:auto}
.incoming-card-status{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:8px 0}
.incoming-edit-grid{display:grid;grid-template-columns:repeat(4,minmax(170px,1fr));gap:8px;margin:10px 0}
.incoming-edit-grid label{display:flex;flex-direction:column;gap:4px;font-size:12px}.incoming-edit-grid textarea{min-height:54px;resize:vertical}
.incoming-note-wide{grid-column:span 2}.incoming-card-actions{display:flex;gap:7px;flex-wrap:wrap;margin:12px 0}
.incoming-files{display:grid;gap:5px}.incoming-file-row{display:flex;gap:10px;justify-content:space-between;padding:6px 8px;border:1px solid var(--border,#d9dee7);border-radius:6px}
.incoming-upload{display:flex;gap:7px;align-items:center;flex-wrap:wrap;margin:8px 0}.incoming-history{margin-top:12px}
.incoming-legacy-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:10px}.incoming-legacy-grid label{display:flex;flex-direction:column;gap:4px}.incoming-legacy-wide{grid-column:1/-1}.incoming-legacy-grid textarea{min-height:72px;resize:vertical}
@media(max-width:1100px){.incoming-filters{grid-template-columns:repeat(3,minmax(150px,1fr))}.incoming-edit-grid{grid-template-columns:repeat(2,minmax(180px,1fr))}}

/* v4.49.001 — Lean / SQCDP */
.lean-surface{padding-bottom:28px}.lean-toolbar{display:flex;align-items:end;gap:12px;flex-wrap:wrap;margin-bottom:14px}.lean-toolbar>div:first-child{margin-right:auto}.lean-toolbar label{font-size:12px;color:var(--ink-mute);display:flex;flex-direction:column;gap:4px}.lean-kpi-grid{display:grid;grid-template-columns:repeat(6,minmax(150px,1fr));gap:10px;margin-bottom:14px}.lean-kpi{border:1px solid var(--rule-soft);border-radius:10px;background:var(--paper);padding:12px;min-height:94px}.lean-kpi.ok{box-shadow:inset 0 3px 0 rgba(28,130,77,.55)}.lean-kpi.warn{box-shadow:inset 0 3px 0 rgba(190,126,0,.65)}.lean-kpi.bad{box-shadow:inset 0 3px 0 rgba(190,48,48,.65)}.lean-kpi-label{font-size:12px;color:var(--ink-mute);font-weight:700}.lean-kpi-value{font-size:25px;font-weight:800;line-height:1.2;margin:5px 0}.lean-kpi-sub{font-size:11px;color:var(--ink-mute);line-height:1.35}.lean-section{border:1px solid var(--rule-soft);border-radius:10px;background:var(--paper);padding:12px;margin-bottom:12px;overflow:hidden}.lean-section h3,.lean-section h4{margin:0 0 10px}.lean-two-col{display:grid;grid-template-columns:1fr 1fr;gap:12px}.lean-wip-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:8px 0 14px}.lean-wip-grid>div{background:var(--paper-soft);border:1px solid var(--rule-soft);border-radius:8px;padding:10px;text-align:center}.lean-wip-grid b{display:block;font-size:22px}.lean-wip-grid span{font-size:11px;color:var(--muted)}.lean-bar{height:8px;min-width:110px;background:var(--paper-soft);border-radius:999px;overflow:hidden}.lean-bar span{display:block;height:100%;background:currentColor;opacity:.55}.lean-section .project-table-frame{max-height:430px;overflow:auto}.lean-section table{font-size:12px}@media(max-width:1500px){.lean-kpi-grid{grid-template-columns:repeat(3,1fr)}}@media(max-width:1100px){.lean-two-col{grid-template-columns:1fr}.lean-wip-grid{grid-template-columns:repeat(2,1fr)}}

/* v4.49.002 — Lean этап 2: 5 Why / Кайдзен / 5S / мероприятия */
.lean-inner-tabs{margin-bottom:14px;position:sticky;top:0;z-index:3;background:var(--paper);padding:4px 0 8px}
.lean-kpi-grid-compact{grid-template-columns:repeat(auto-fit,minmax(180px,240px));justify-content:start}
.lean-modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.lean-modal-head h3{margin:0}.lean-modal-head .modal-close{border:0;background:transparent;font-size:24px;cursor:pointer;color:var(--ink-mute)}
.lean-modal-body{display:grid;gap:14px}.lean-why-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.lean-why-grid .fl:nth-last-child(-n+2){grid-column:1/-1}
.lean-modal .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.lean-modal .form-grid .wide-2{grid-column:1/-1}.lean-modal .fl{display:flex;flex-direction:column;gap:5px}
.lean-modal textarea.eng-inp{resize:vertical;min-height:58px}.lean-overdue td{background:rgba(190,48,48,.055)}
.lean-section .pf-band{white-space:nowrap}.lean-action-status{min-width:130px}
@media(max-width:900px){.lean-why-grid,.lean-modal .form-grid{grid-template-columns:1fr}.lean-modal .form-grid .wide-2,.lean-why-grid .fl:nth-last-child(-n+2){grid-column:auto}.lean-inner-tabs{position:static}}

/* v4.49.003 — digital Kanban / WIP */
.lean-kanban-board{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:10px;margin-bottom:14px}.lean-kanban-card{border:1px solid var(--rule-soft);background:var(--paper);border-radius:10px;padding:12px;box-shadow:inset 0 3px 0 rgba(28,130,77,.45)}.lean-kanban-card.warning{box-shadow:inset 0 3px 0 rgba(190,126,0,.65)}.lean-kanban-card.critical{box-shadow:inset 0 3px 0 rgba(190,48,48,.7)}.lean-kanban-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.lean-kanban-wip{display:flex;justify-content:space-between;align-items:end;margin-top:12px}.lean-kanban-wip span{font-size:12px;color:var(--ink-mute);font-weight:700}.lean-kanban-wip strong{font-size:24px}.lean-kanban-progress{height:8px;background:var(--paper-soft);border-radius:999px;overflow:hidden;margin:5px 0 9px}.lean-kanban-progress span{display:block;height:100%;background:currentColor;opacity:.52}.lean-kanban-split{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;font-size:11px}.lean-kanban-split span{background:var(--paper-soft);border-radius:6px;padding:6px;text-align:center}.lean-kanban-queue{font-size:12px;margin-top:9px}.lean-kanban-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:10px;padding-top:8px;border-top:1px solid var(--rule-soft);font-size:11px;color:var(--ink-mute)}@media(max-width:760px){.lean-kanban-board{grid-template-columns:1fr}.lean-kanban-split{grid-template-columns:1fr 1fr 1fr}}

/* v5.00.003-alpha — управление качеством */
.quality-kpi {display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin:20px 0}
.quality-kpi>div {padding:18px;background:var(--paper);border:1px solid var(--rule);border-radius:12px;display:grid;gap:6px}
.quality-kpi strong {font-size:28px}.quality-kpi span {color:var(--ink-mute)}
.quality-toolbar {display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:18px}.quality-toolbar[hidden]{display:none}
.quality-content {background:var(--paper);border:1px solid var(--rule);border-radius:12px;padding:22px}
.quality-link {border:0;background:none;padding:0;color:var(--blue);cursor:pointer;text-align:left;font:inherit;font-weight:600;text-decoration:underline;text-underline-offset:3px}
.quality-pages {margin-top:18px;align-items:center}.quality-overdue {color:#b42318;font-weight:600}
.quality-source {background:var(--paper-soft);border-left:3px solid #4673b9;padding:16px;margin:18px 0;border-radius:6px}
.quality-details {display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:18px;margin:24px 0}
.quality-details dt {color:var(--ink-mute);font-size:12px;margin-bottom:5px}.quality-details dd {margin:0;white-space:pre-wrap;overflow-wrap:anywhere}
.quality-actions {display:grid;gap:14px}.quality-actions article {border:1px solid var(--rule);border-radius:10px;padding:18px}.quality-actions h4 {margin:0 0 8px}.quality-actions p,.quality-source p {white-space:pre-wrap;overflow-wrap:anywhere}
#view-quality .org-section-head {gap:16px;flex-wrap:wrap}#view-quality .page-actions {flex-wrap:wrap}

#quality_filters input,#quality_filters select {font:inherit;color:var(--ink);background:var(--paper);border:1px solid var(--rule);border-radius:var(--r-sm);min-height:36px;padding:7px 10px;max-width:100%}
#view-hr {padding:24px;box-sizing:border-box;min-width:0}
#view-hr .page-header {display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:16px}
#view-hr .page-header h2 {margin:0;font-size:23px}
#view-hr .page-actions {display:flex;gap:8px;flex-wrap:wrap}
#view-hr > .hint {padding:14px 16px;border:1px solid var(--rule-soft,#dce2eb);border-radius:10px;background:var(--paper,#fff);line-height:1.6}
#view-hr > label {display:flex;gap:12px;align-items:center;margin:18px 0;font-weight:600}
#hr_search {padding:10px 12px;border:1px solid var(--rule-soft,#dce2eb);border-radius:8px;background:var(--paper,#fff);color:inherit;max-width:100%;box-sizing:border-box}
#hr_content h3 {margin:24px 0 12px;font-size:17px}
#hr_content .users-table-wrap {border:1px solid var(--rule-soft,#dce2eb);border-radius:12px;background:var(--paper,#fff);overflow:auto;max-height:52vh}
#hr_content .users-table {width:100%;min-width:640px;border-collapse:collapse}
#hr_content .users-table th {position:sticky;top:0;background:var(--paper-soft,#f4f6fa);z-index:1}
#hr_content .users-table th,#hr_content .users-table td {padding:12px 14px;border-right:1px solid var(--rule-soft,#dce2eb);vertical-align:top;white-space:normal}
.side-group {margin:6px 0}
.side-group > summary {cursor:pointer;padding:10px 11px;font-size:12px;font-weight:650;color:var(--ink-mute,#65718a);border-radius:8px}
.side-group > summary:hover {background:var(--paper-soft,#f4f6fa)}
.sidebar-nav .side-item {padding-top:6px;padding-bottom:6px;margin-bottom:1px;min-height:34px}
.sidebar-foot .side-item {padding-top:6px;padding-bottom:6px}
.sidebar-nav {min-height:0!important;overscroll-behavior:contain;scrollbar-gutter:stable}
body.sb-collapsed .side-group > summary {font-size:0;padding:6px;text-align:center}
body.sb-collapsed .side-group > summary::after {content:'•••';font-size:12px}
@media(max-width:700px){#view-hr{padding:14px}#view-hr > label{align-items:flex-start;flex-direction:column}#hr_search{width:100%}}

/* ══════════════════════════════════════════════════════════════
   v5.00.006-alpha — единая спокойная тёмная палитра
   Все новые имена являются алиасами существующей системы темы.
   Светлая тема и геометрия компонентов не затрагиваются.
   ══════════════════════════════════════════════════════════════ */
html[data-theme="dark"] {
  --bg-app: #1d242d;
  --bg-sidebar: #202832;
  --bg-header: #202832;
  --bg-surface: #252e39;
  --bg-card: #293440;
  --bg-elevated: #303c49;
  --table-bg: #293440;
  --table-header-bg: #323e4c;
  --table-row-bg: #293440;
  --table-row-alt-bg: #2c3743;
  --table-row-hover: #354250;
  --input-bg: #242e38;
  --input-hover-bg: #293541;
  --input-focus-bg: #293541;
  --border-primary: #3a4653;
  --border-secondary: #323d49;
  --text-primary: #e3e7eb;
  --text-secondary: #a9b3bd;
  --text-muted: #7f8b97;
  --text-disabled: #68737e;

  --bg: var(--bg-app);
  --paper: var(--bg-card);
  --paper-soft: var(--bg-elevated);
  --ink: var(--text-primary);
  --ink-soft: var(--text-secondary);
  --ink-mute: var(--text-muted);
  --rule: var(--border-primary);
  --rule-soft: var(--border-secondary);
  --surface: var(--bg-card);
  --surface-2: var(--bg-elevated);
  --surface-soft: var(--bg-surface);
  --border: var(--border-primary);
  --line: var(--border-secondary);
  --text: var(--text-primary);
  --muted: var(--text-muted);
  --primary: #789ac7;
  --bg-soft: var(--table-row-hover);
  --sidebar-bg: var(--bg-sidebar);
  --sidebar-text: #b8c1cb;
  --sidebar-mute: #84909d;
  --sidebar-line: #303b47;
  --graphite: var(--bg-header);
  --steel: var(--bg-elevated);
  --accent: #c75a5d;
  --accent-dark: #ad4c4f;
  --accent-soft: #422d31;
  --blue: #7f9fc9;
  --blue-soft: #314052;
  --green: #70ad89;
  --yellow: #b9a16e;
  --orange: #bd885f;
  --shadow-sm: 0 1px 2px rgba(8,12,16,.12);
  --shadow-md: 0 4px 14px rgba(8,12,16,.16), 0 1px 3px rgba(8,12,16,.12);
  --shadow-lg: 0 18px 48px rgba(8,12,16,.22), 0 4px 12px rgba(8,12,16,.14);
}

html[data-theme="dark"] .sidebar,
html[data-theme="dark"] .topbar { background: var(--bg-header); }
html[data-theme="dark"] .topbar {
  box-shadow: inset 0 -1px 0 var(--border-secondary), 0 2px 8px rgba(8,12,16,.10);
}
html[data-theme="dark"] .side-item:hover { background: var(--input-hover-bg); }
html[data-theme="dark"] .side-item.active {
  background: #314052;
  color: #a9c0df;
}

html[data-theme="dark"] .org-stat,
html[data-theme="dark"] .org-content,
html[data-theme="dark"] .quality-kpi > div,
html[data-theme="dark"] .quality-content,
html[data-theme="dark"] #view-hr > .hint,
html[data-theme="dark"] #hr_content .users-table-wrap {
  background: var(--bg-card);
  border-color: var(--border-primary);
  box-shadow: var(--shadow-sm);
}
html[data-theme="dark"] .org-stat b { color: var(--blue); }
html[data-theme="dark"] .org-stat span { color: var(--text-secondary); }

html[data-theme="dark"] .admin-tabs { background: var(--bg-surface); border-color: var(--border-secondary); }
html[data-theme="dark"] .admin-tab { color: var(--text-secondary); }
html[data-theme="dark"] .admin-tab:hover { background: var(--input-hover-bg); color: var(--text-primary); }
html[data-theme="dark"] .admin-tab.active { background: #314052; color: #9eb9df; }

html[data-theme="dark"] .users-table-wrap,
html[data-theme="dark"] .sgem-table-scroll-host,
html[data-theme="dark"] .project-table-frame,
html[data-theme="dark"] .docs-table-frame { background: var(--table-bg); border-color: var(--border-primary); }
html[data-theme="dark"] table { background: var(--table-bg); }
html[data-theme="dark"] table thead th,
html[data-theme="dark"] table.bs-list-table thead th,
html[data-theme="dark"] table.users-table thead th,
html[data-theme="dark"] table.perm-edit-table thead th,
html[data-theme="dark"] table.plan-table thead th,
html[data-theme="dark"] table.metro-table thead th,
html[data-theme="dark"] table.eng-ops-table thead th {
  background: var(--table-header-bg) !important;
  color: var(--text-primary) !important;
  border-color: var(--border-primary);
}
html[data-theme="dark"] table tbody tr { background: var(--table-row-bg); }
html[data-theme="dark"] table tbody tr:nth-child(even) { background: var(--table-row-alt-bg); }
html[data-theme="dark"] table tbody tr:hover,
html[data-theme="dark"] table tbody tr:hover td {
  background: var(--table-row-hover) !important;
  color: var(--text-primary) !important;
}
html[data-theme="dark"] table td { color: #dce2e7; border-color: var(--border-secondary); }

html[data-theme="dark"] input,
html[data-theme="dark"] select,
html[data-theme="dark"] textarea,
html[data-theme="dark"] .eng-inp,
html[data-theme="dark"] .eng-sel {
  background: var(--input-bg);
  color: var(--text-primary);
  border-color: var(--border-primary);
}
html[data-theme="dark"] input:hover:not(:disabled),
html[data-theme="dark"] select:hover:not(:disabled),
html[data-theme="dark"] textarea:hover:not(:disabled) { background: var(--input-hover-bg); }
html[data-theme="dark"] input:focus,
html[data-theme="dark"] select:focus,
html[data-theme="dark"] textarea:focus {
  background: var(--input-focus-bg);
  border-color: #6688b5;
  box-shadow: var(--ring);
}
html[data-theme="dark"] input:disabled,
html[data-theme="dark"] select:disabled,
html[data-theme="dark"] textarea:disabled,
html[data-theme="dark"] button:disabled { color: var(--text-disabled); opacity: .72; }
html[data-theme="dark"] .modal { background: rgba(10,14,19,.58); }
html[data-theme="dark"] .modal-card,
html[data-theme="dark"] .dropdown-menu,
html[data-theme="dark"] .notif-panel { background: var(--bg-card); border-color: var(--border-primary); }

html[data-theme="dark"] .cmms-status { background: #303a45; color: #b8c1cb; }
html[data-theme="dark"] .cmms-status.new { background: #443b28; color: #d8bd7d; }
html[data-theme="dark"] .cmms-status.planned { background: #2d3d52; color: #a8c4e7; }
html[data-theme="dark"] .cmms-status.in_progress,
html[data-theme="dark"] .cmms-status.completed { background: #2b4036; color: #9bc9ad; }
html[data-theme="dark"] .cmms-status.paused { background: #46362d; color: #d7aa83; }
html[data-theme="dark"] .cmms-status.cancelled { background: #343b43; color: #929da8; }
html[data-theme="dark"] * { scrollbar-color: #536171 transparent; }
html[data-theme="dark"] ::-webkit-scrollbar-thumb { background: #536171; border-color: var(--bg-app); }
html[data-theme="dark"] ::-webkit-scrollbar-thumb:hover { background: #637282; }
/* v5.00.009-alpha: компактный реестр закупок, общие переменные обеих тем. */
#view-procurement .org-page {padding:16px; min-width:0;}
#procurement_content {min-width:0;}
.proc-stats {display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px;margin:12px 0;}
.proc-stats>div {border:1px solid var(--border);border-radius:6px;padding:8px;background:var(--surface);display:flex;flex-direction:column;}
.proc-stats b {font-size:20px;}.proc-stats span {font-size:12px;color:var(--muted);}
.proc-toolbar {display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:8px 0;}
.proc-toolbar input {flex:1;min-width:190px;}.proc-toolbar button {white-space:normal;}
.proc-table-wrap {max-height:65vh;overflow:auto;border:1px solid var(--border);min-width:0;}
.proc-table {table-layout:fixed;width:100%;font-size:12px;}
.proc-table td,.proc-table th {padding:5px 6px;white-space:normal;overflow-wrap:anywhere;}
.proc-table thead {position:sticky;top:0;background:var(--surface);z-index:1;}
.proc-table tr[data-proc-open] {cursor:pointer;}
.proc-sort {border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;padding:0;}
.proc-risk-red td:first-child {border-left:3px solid var(--danger,#9c6666);}
.proc-risk-yellow td:first-child {border-left:3px solid var(--warning,#a39066);}
.proc-risk-green td:first-child {border-left:3px solid var(--success,#6a8b7b);}
.proc-risk-gray td:first-child {border-left:3px solid var(--muted);}
.proc-form {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;}
.proc-form label {display:flex;flex-direction:column;gap:4px;min-width:0;}
.proc-form input,.proc-form select,.proc-form textarea {width:100%;min-width:0;box-sizing:border-box;}
.proc-wide {grid-column:1/-1;} @media(max-width:700px){.proc-form{grid-template-columns:1fr;}}
/* v5.00.010-alpha — юридическая служба */
.legal-toolbar{display:flex;gap:16px;align-items:center;margin:14px 0;flex-wrap:wrap}.legal-toolbar input{min-width:280px}.legal-form{display:grid;grid-template-columns:repeat(2,minmax(220px,1fr));gap:12px}.legal-form label{display:flex;flex-direction:column;gap:5px}.legal-form .legal-wide{grid-column:1/-1}.legal-risk{display:inline-block;padding:2px 8px;border-radius:999px;background:#e5e7eb}.legal-risk.high,.legal-risk.critical{background:#fee2e2;color:#991b1b}.legal-risk.medium{background:#fef3c7;color:#92400e}.legal-risk.low{background:#dcfce7;color:#166534}.legal-table td{vertical-align:top}@media(max-width:700px){.legal-form{grid-template-columns:1fr}.legal-form .legal-wide{grid-column:auto}}

/* v5.00.013-alpha — IT HelpDesk */
#view-it_helpdesk .org-page{min-width:0}.it-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:12px 0}.it-filters{display:flex;gap:8px;flex-wrap:wrap}.it-filters select,.it-filters input{min-height:36px}.it-filters input{min-width:280px}.it-table td{vertical-align:top}.it-priority{display:inline-flex;padding:3px 8px;border-radius:999px;border:1px solid var(--border);font-size:12px;font-weight:600}.it-critical{font-weight:800}.it-overdue td{box-shadow:inset 0 1px 0 rgba(180,50,50,.28),inset 0 -1px 0 rgba(180,50,50,.28)}.it-ticket-meta{display:flex;gap:8px 16px;flex-wrap:wrap;padding:10px 12px;margin-bottom:12px;border:1px solid var(--border);border-radius:10px;background:var(--surface)}.it-comments{display:flex;flex-direction:column;gap:8px;max-height:280px;overflow:auto;margin:8px 0 14px}.it-comment{padding:9px 11px;border:1px solid var(--border);border-radius:9px;background:var(--surface)}.it-comment.internal{border-style:dashed}.it-readonly-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:14px}.it-readonly-grid>div{padding:9px 11px;border:1px solid var(--border);border-radius:9px}.it-readonly-grid span{display:block;font-size:12px;color:var(--muted);margin-bottom:3px}.it-readonly-grid .wide-2{grid-column:1/-1}.it-readonly-grid p{margin:2px 0}@media(max-width:760px){.it-toolbar{align-items:stretch;flex-direction:column}.it-filters{flex-direction:column}.it-filters input{min-width:0;width:100%}.it-readonly-grid{grid-template-columns:1fr}}

/* v5.00.014-alpha — этап 9: Analytics / SQCDP */
.analytics-page{max-width:1680px;margin:0 auto}.analytics-period-label{display:flex;align-items:center;gap:8px;font-size:13px}.analytics-period-label select{min-width:100px}.analytics-section-title{font-size:17px;margin:24px 0 10px}.analytics-sqcdp{display:grid;grid-template-columns:repeat(5,minmax(180px,1fr));gap:12px}.analytics-card{border:1px solid var(--border);border-radius:12px;padding:16px;background:var(--surface,#fff);min-height:170px;box-shadow:0 1px 2px rgba(0,0,0,.04);border-top-width:4px}.analytics-card-head{display:flex;align-items:center;gap:8px}.analytics-code{font-weight:800;font-size:18px}.analytics-tone-dot{width:9px;height:9px;border-radius:50%;margin-left:auto;background:var(--muted,#999)}.tone-ok{--analytics-tone:#2f9e44}.tone-warning{--analytics-tone:#e0a800}.tone-critical{--analytics-tone:#d9485f}.tone-neutral{--analytics-tone:#868e96}.analytics-card.tone-ok,.analytics-card.tone-warning,.analytics-card.tone-critical,.analytics-card.tone-neutral{border-top-color:var(--analytics-tone)}.analytics-card .analytics-tone-dot,.analytics-status{background:var(--analytics-tone)}.analytics-card-value{font-size:32px;font-weight:800;margin-top:18px;line-height:1}.analytics-card-label{font-size:12px;color:var(--text-muted,#6c757d);margin-top:7px}.analytics-card-sub{margin-top:16px;font-size:12px;line-height:1.45;color:var(--text-muted,#6c757d)}.analytics-executive{display:grid;grid-template-columns:repeat(7,minmax(120px,1fr));gap:10px;margin-bottom:14px}.analytics-kpi{border:1px solid var(--border);border-radius:10px;padding:12px;background:var(--surface,#fff)}.analytics-kpi b{font-size:24px;display:block}.analytics-kpi span{font-size:12px;color:var(--text-muted,#6c757d)}.analytics-status{display:inline-block;border-radius:999px;padding:3px 9px;color:#fff;font-size:12px;font-weight:700}.analytics-risk-table td:nth-child(n+2){text-align:center}.analytics-trend{border:1px solid var(--border);border-radius:12px;padding:14px;background:var(--surface,#fff);overflow:auto}.analytics-legend{display:flex;gap:16px;align-items:center;flex-wrap:wrap;font-size:12px;margin-bottom:10px}.analytics-bars{height:190px;display:flex;gap:4px;align-items:stretch;min-width:720px}.analytics-day{flex:1;min-width:18px;display:flex;flex-direction:column;justify-content:flex-end;gap:5px;text-align:center}.analytics-day-bars{height:155px;display:flex;gap:1px;align-items:flex-end;justify-content:center;border-bottom:1px solid var(--border)}.analytics-day .bar{display:block;width:22%;min-height:2px;border-radius:3px 3px 0 0;background:currentColor}.analytics-day .accepted{color:#2f9e44}.analytics-day .returns{color:#f08c00}.analytics-day .hse{color:#d9485f}.analytics-day .quality{color:#7950f2}.analytics-day span{font-size:9px;color:var(--text-muted,#6c757d);transform:rotate(-45deg);white-space:nowrap}.analytics-method{margin-top:16px;border:1px solid var(--border);border-radius:10px;padding:10px 14px}.analytics-method summary{cursor:pointer;font-weight:700}.analytics-method p{font-size:13px;margin:8px 0}@media(max-width:1200px){.analytics-sqcdp{grid-template-columns:repeat(2,minmax(180px,1fr))}.analytics-executive{grid-template-columns:repeat(3,minmax(130px,1fr))}}@media(max-width:700px){.analytics-sqcdp,.analytics-executive{grid-template-columns:1fr}.analytics-page .page-head{align-items:flex-start}.analytics-page .page-actions{width:100%;flex-wrap:wrap}}


/* v5.00.015-alpha — Digital Twin */
.dt-page{max-width:1900px}.dt-head{align-items:flex-start}.dt-actions{flex-wrap:wrap;justify-content:flex-end}.dt-filter-label,.dt-auto{display:flex;align-items:center;gap:7px;color:var(--ink-soft);font-size:12px}.dt-filter-label select{min-width:190px;padding:7px 9px;border:1px solid var(--rule);border-radius:var(--r-sm);background:var(--paper);color:var(--ink)}.dt-search{min-width:240px}.dt-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:10px;margin:16px 0}.dt-kpi{background:var(--paper);border:1px solid var(--rule);border-radius:var(--r-md);padding:13px 14px;box-shadow:var(--shadow-sm)}.dt-kpi b{display:block;font-size:22px;line-height:1.1}.dt-kpi span{display:block;color:var(--ink-soft);font-size:11px;margin-top:5px}.dt-kpi.tone-warning{border-color:#d6b478}.dt-grid-main{display:grid;grid-template-columns:minmax(0,2.2fr) minmax(300px,.8fr);gap:14px;align-items:start}.dt-panel{background:var(--paper);border:1px solid var(--rule);border-radius:var(--r-lg);padding:14px;box-shadow:var(--shadow-sm)}.dt-panel-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.dt-panel-head h2{font-size:16px}.dt-departments{display:grid;gap:12px}.dt-department{border:1px solid var(--rule);border-left:4px solid var(--green);border-radius:var(--r-md);background:var(--surface-2);overflow:hidden}.dt-department.tone-warning{border-left-color:var(--yellow)}.dt-department.tone-critical{border-left-color:var(--accent)}.dt-department>header{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:11px 12px;border-bottom:1px solid var(--rule-soft);background:var(--paper)}.dt-department h3{font-size:14px}.dt-department header span:not(.dt-state){font-size:11px;color:var(--ink-mute)}.dt-state{display:inline-flex;align-items:center;border-radius:999px;padding:3px 8px;font-size:10px;font-weight:600;white-space:nowrap}.dt-state.tone-ok{background:#e9f4ed;color:var(--green)}.dt-state.tone-warning{background:#fff4df;color:#8a5a13}.dt-state.tone-critical{background:var(--accent-soft);color:var(--accent)}.dt-workplaces{display:grid;grid-template-columns:repeat(auto-fit,minmax(285px,1fr));gap:9px;padding:9px}.dt-workplace{background:var(--paper);border:1px solid var(--rule);border-top:3px solid var(--green);border-radius:var(--r-md);padding:10px}.dt-workplace.tone-warning{border-top-color:var(--yellow)}.dt-workplace.tone-critical{border-top-color:var(--accent)}.dt-workplace-head{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}.dt-workplace-head>div{min-width:0}.dt-workplace-head b{display:block}.dt-workplace-head div>span{display:block;color:var(--ink-mute);font-size:10px}.dt-center{margin-top:8px;padding:8px;border-radius:var(--r-sm);background:var(--paper-soft);border:1px solid var(--rule-soft)}.dt-center-title{display:flex;justify-content:space-between;gap:8px}.dt-center-title span{color:var(--ink-mute);font-size:10px}.dt-mini-metrics,.dt-node-stats{display:flex;gap:9px;flex-wrap:wrap;margin-top:6px;color:var(--ink-soft);font-size:11px}.dt-center-empty,.dt-empty-node{padding:12px;color:var(--ink-mute);font-size:11px;text-align:center}.dt-equipment-list{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}.dt-equipment,.dt-equipment-more{display:inline-flex;padding:3px 6px;border:1px solid var(--rule);border-radius:999px;font-size:10px;background:var(--paper-soft);max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dt-equipment.tone-warning{border-color:#d6b478}.dt-equipment.tone-critical{border-color:var(--accent);color:var(--accent)}.dt-signals{display:grid;gap:7px;max-height:720px;overflow:auto}.dt-signal{width:100%;border:1px solid var(--rule);border-left:3px solid var(--green);background:var(--paper);border-radius:var(--r-sm);padding:8px 9px;text-align:left;display:grid;grid-template-columns:auto 1fr;gap:2px 8px;color:var(--ink);cursor:pointer}.dt-signal.tone-warning{border-left-color:var(--yellow)}.dt-signal.tone-critical{border-left-color:var(--accent)}.dt-signal-kind{font-size:10px;font-weight:700;color:var(--ink-mute);text-transform:uppercase;letter-spacing:.4px}.dt-signal-text{font-size:11px;font-weight:600}.dt-signal-meta{grid-column:2;color:var(--ink-mute);font-size:10px}.dt-orders-panel{margin-top:14px}.dt-order-table td{vertical-align:middle}.dt-progress{height:7px;min-width:150px;background:var(--rule-soft);border-radius:999px;overflow:hidden;margin-bottom:4px}.dt-progress i{display:block;height:100%;background:var(--blue)}.dt-danger{color:var(--accent);font-weight:700}.dt-method{margin-top:14px}@media(max-width:1200px){.dt-grid-main{grid-template-columns:1fr}.dt-signals{max-height:400px}}@media(max-width:760px){.dt-page{padding:18px}.dt-actions{width:100%;justify-content:flex-start}.dt-search,.dt-filter-label select{min-width:0;width:100%}.dt-workplaces{grid-template-columns:1fr}.dt-summary{grid-template-columns:repeat(2,1fr)}}

/* ════════════════════════════════════════════════════════════════════
   v5.00.016-alpha — пользовательские обои главной страницы.
   По умолчанию остаётся штатная чертёжная клетка. Пользователь может
   выбрать локальное изображение; оно хранится только в этом браузере.
   ════════════════════════════════════════════════════════════════════ */
#view-home.active.home-wallpaper-custom {
  background-image:
    linear-gradient(rgba(238,241,245,.70), rgba(238,241,245,.70)),
    var(--home-wallpaper-image);
  background-size: cover, cover;
  background-position: center, center;
  background-repeat: no-repeat, no-repeat;
  background-attachment: fixed, fixed;
}
html[data-theme="dark"] #view-home.active.home-wallpaper-custom {
  background-image:
    linear-gradient(rgba(20,24,31,.73), rgba(20,24,31,.73)),
    var(--home-wallpaper-image);
}
.wallpaper-modal { width: min(680px, 92vw); }
.wallpaper-modal .wallpaper-note {
  margin: -2px 0 16px;
  color: var(--ink-mute);
  font-size: 12px;
  line-height: 1.5;
}
.wallpaper-preview {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 7;
  overflow: hidden;
  border: 1px solid var(--rule);
  border-radius: var(--r-md);
  background:
    radial-gradient(ellipse 420px 220px at 50% -40px, rgba(42,82,154,.09), transparent 65%),
    repeating-linear-gradient(0deg, transparent 0 23px, rgba(42,82,154,.08) 23px 24px),
    repeating-linear-gradient(90deg, transparent 0 23px, rgba(42,82,154,.08) 23px 24px),
    var(--bg);
  box-shadow: var(--shadow-sm);
}
.wallpaper-preview.has-image {
  background-image:
    linear-gradient(rgba(238,241,245,.55), rgba(238,241,245,.55)),
    var(--wallpaper-preview-image);
  background-size: cover, cover;
  background-position: center, center;
  background-repeat: no-repeat, no-repeat;
}
html[data-theme="dark"] .wallpaper-preview.has-image {
  background-image:
    linear-gradient(rgba(20,24,31,.58), rgba(20,24,31,.58)),
    var(--wallpaper-preview-image);
}
.wallpaper-preview::after {
  content: 'Главная СГЭМ';
  position: absolute;
  left: 18px;
  bottom: 14px;
  padding: 6px 10px;
  border-radius: 7px;
  background: color-mix(in srgb, var(--paper) 88%, transparent);
  border: 1px solid color-mix(in srgb, var(--rule) 86%, transparent);
  color: var(--ink);
  font-weight: 700;
  box-shadow: var(--shadow-sm);
}
.wallpaper-controls {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  margin-top: 16px;
}
.wallpaper-file-input { display: none; }
.wallpaper-file-label { cursor: pointer; }
.wallpaper-storage-note {
  margin-top: 10px;
  color: var(--ink-mute);
  font-size: 11px;
}
@media (max-width: 700px) {
  #view-home.active.home-wallpaper-custom { background-attachment: scroll, scroll; }
  .wallpaper-controls > * { width: 100%; justify-content: center; }
}

/* HelpDesk 2.0 patch */
.it-chip{display:inline-flex;flex-direction:column;gap:1px;padding:6px 9px;border:1px solid var(--border);border-radius:9px;background:var(--surface);max-width:260px}.it-chip small{font-size:11px;color:var(--muted)}.it-chips{display:flex;gap:6px;flex-wrap:wrap;margin:7px 0 14px}.it-attachments{display:flex;gap:7px;flex-wrap:wrap;margin:7px 0 14px}.it-attachment{display:flex;align-items:center;gap:7px;min-width:190px;max-width:320px;padding:7px 9px;border:1px solid var(--border);border-radius:9px;background:var(--surface);text-decoration:none;color:inherit}.it-attachment:hover{box-shadow:0 1px 4px rgba(0,0,0,.08)}.it-attachment>span:last-child{min-width:0}.it-attachment b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.it-attachment small{display:block;color:var(--muted);font-size:11px;margin-top:2px}.it-event{display:flex;gap:8px;padding:6px 9px;color:var(--muted);font-size:12px}.it-event>span{font-size:8px;padding-top:5px}.it-event b{color:var(--text)}.it-event small{display:block;margin-top:2px}.it-event.internal{border-left:2px dashed var(--border);margin-left:4px}.it-rating-box,.it-rating-summary{margin:14px 0 2px;padding:12px;border:1px solid var(--border);border-radius:10px;background:var(--surface)}.it-rating-box h4{margin:0 0 8px}.it-stars{white-space:nowrap;font-size:16px;letter-spacing:1px}.it-rating-input{display:flex;gap:5px;margin:4px 0 10px}.it-rating-input label{cursor:pointer}.it-rating-input input{position:absolute;opacity:0;pointer-events:none}.it-rating-input span{font-size:28px;line-height:1;color:var(--muted)}.it-rating-input label:has(input:checked) span,.it-rating-input label:has(input:checked)~label span{color:var(--muted)}.it-rating-input:has(input[value="5"]:checked) span,.it-rating-input:has(input[value="4"]:checked) label:nth-child(-n+4) span,.it-rating-input:has(input[value="3"]:checked) label:nth-child(-n+3) span,.it-rating-input:has(input[value="2"]:checked) label:nth-child(-n+2) span,.it-rating-input:has(input[value="1"]:checked) label:nth-child(1) span{color:currentColor}.it-stat-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin:8px 0 16px}.it-stat-cards>div{padding:10px;border:1px solid var(--border);border-radius:10px;background:var(--surface)}.it-stat-cards b{display:block;font-size:18px}.it-stat-cards span{display:block;color:var(--muted);font-size:12px;margin-top:2px}.it-rating-distribution{display:grid;grid-template-columns:repeat(5,minmax(70px,1fr));gap:6px;margin-bottom:14px}.it-rating-distribution>div{padding:8px;border:1px solid var(--border);border-radius:8px;text-align:center}.it-rating-distribution span,.it-rating-distribution b{display:block}.it-stats-head{display:flex;justify-content:flex-end;margin-bottom:6px}#view-it_helpdesk select[multiple]{min-height:92px}.quality-kpi{flex-wrap:wrap}@media(max-width:760px){.it-rating-distribution{grid-template-columns:repeat(2,1fr)}.it-attachment{max-width:100%;width:100%}}

/* ===== SGEM HELPDESK DEV HD1 BEGIN ===== */
#view-it_helpdesk .quality-kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(135px,1fr));gap:10px;margin:16px 0}
#view-it_helpdesk .quality-kpi>div.it-kpi{position:relative;overflow:hidden;padding:14px 15px;border:1px solid var(--border);border-radius:12px;background:var(--surface,#fff);box-shadow:0 1px 3px rgba(15,23,42,.05)}
#view-it_helpdesk .quality-kpi>div.it-kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:#64748b}
#view-it_helpdesk .quality-kpi .it-kpi-new::before{background:#6366f1}.quality-kpi .it-kpi-progress::before{background:#f59e0b}.quality-kpi .it-kpi-waiting-user::before{background:#eab308}.quality-kpi .it-kpi-waiting-support::before{background:#0ea5e9}.quality-kpi .it-kpi-overdue::before{background:#dc2626}.quality-kpi .it-kpi-resolved::before{background:#16a34a}.quality-kpi .it-kpi-rating::before{background:#8b5cf6}
#view-it_helpdesk .quality-kpi .it-kpi-overdue b{color:#b91c1c}#view-it_helpdesk .quality-kpi .it-kpi-resolved b{color:#15803d}#view-it_helpdesk .quality-kpi .it-kpi-progress b{color:#b45309}
.it-ticket-row{cursor:pointer;transition:background .15s ease,box-shadow .15s ease}.it-ticket-row:hover,.it-ticket-row:focus{background:rgba(59,130,246,.055);outline:none;box-shadow:inset 3px 0 0 #3b82f6}.it-ticket-row td{vertical-align:middle!important}.it-overdue{background:rgba(220,38,38,.035)}
.it-status,.it-priority{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;border-radius:999px;font-size:11px;font-weight:700;line-height:1.2;border:1px solid transparent;white-space:nowrap}
.it-status-new{background:rgba(59,130,246,.12);color:#1d4ed8;border-color:rgba(59,130,246,.25)}.it-status-assigned{background:rgba(139,92,246,.12);color:#6d28d9;border-color:rgba(139,92,246,.25)}.it-status-in_progress{background:rgba(245,158,11,.15);color:#a16207;border-color:rgba(245,158,11,.3)}.it-status-waiting_user{background:rgba(234,179,8,.16);color:#854d0e;border-color:rgba(234,179,8,.3)}.it-status-waiting_support{background:rgba(14,165,233,.13);color:#0369a1;border-color:rgba(14,165,233,.28)}.it-status-resolved,.it-status-closed{background:rgba(22,163,74,.13);color:#166534;border-color:rgba(22,163,74,.28)}.it-status-cancelled{background:rgba(100,116,139,.13);color:#475569;border-color:rgba(100,116,139,.25)}.it-status-overdue{background:rgba(220,38,38,.12);color:#b91c1c;border-color:rgba(220,38,38,.28)}.it-status-internal{background:rgba(245,158,11,.13);color:#92400e;border-color:rgba(245,158,11,.28);font-size:10px}
.it-priority-low{background:rgba(22,163,74,.09);color:#166534;border-color:rgba(22,163,74,.22)}.it-priority-normal{background:rgba(100,116,139,.09);color:#475569;border-color:rgba(100,116,139,.22)}.it-priority-high{background:rgba(249,115,22,.12);color:#c2410c;border-color:rgba(249,115,22,.28)}.it-priority-critical{background:rgba(220,38,38,.12);color:#b91c1c;border-color:rgba(220,38,38,.28)}
.it-sla{white-space:nowrap}.it-sla-paused{color:#a16207;font-weight:600}.it-sla-overdue{color:#b91c1c;font-weight:800}
.it-ticket-page{max-width:1500px;margin:0 auto 40px}.it-ticket-top{margin:4px 0 16px}.it-back{border:0;background:transparent;padding:6px 0;color:#2563eb;font-weight:700;cursor:pointer}.it-back:hover{text-decoration:underline}.it-ticket-heading{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;margin-top:8px}.it-ticket-number{font-size:12px;font-weight:800;color:var(--muted);letter-spacing:.03em}.it-ticket-heading h2{font-size:26px;margin:3px 0 10px;line-height:1.2}.it-ticket-badges{display:flex;gap:7px;flex-wrap:wrap}.it-ticket-meta-line{display:flex;gap:8px 22px;flex-wrap:wrap;margin-top:13px;padding:11px 13px;border:1px solid var(--border);border-radius:10px;background:var(--surface,#fff);font-size:12px;color:var(--muted)}.it-ticket-meta-line b{color:var(--text)}
.it-ticket-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;align-items:start}.it-ticket-main,.it-ticket-side{display:flex;flex-direction:column;gap:12px}.it-content-card,.it-side-card{border:1px solid var(--border);border-radius:12px;background:var(--surface,#fff);box-shadow:0 1px 3px rgba(15,23,42,.04)}.it-content-card{padding:16px}.it-side-card{padding:13px}.it-content-card h3,.it-side-card h3{font-size:14px;margin:0 0 10px}.it-description{font-size:14px;line-height:1.6;white-space:normal}.it-resolution{border-left:4px solid #16a34a;background:rgba(22,163,74,.035)}.it-section-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.it-section-head h3{margin:0}
.it-ticket-side{position:sticky;top:78px}.it-ticket-side-form{display:flex;flex-direction:column;gap:12px}.it-ticket-side select,.it-ticket-side input,.it-ticket-side textarea{width:100%}.it-ticket-side .fl{margin-top:9px}.it-ticket-side .fl:first-child{margin-top:0}.it-inline-actions{display:flex;gap:7px;margin-top:9px;flex-wrap:wrap}.it-save-ticket{width:100%;min-height:40px}.it-side-line{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:7px 0;border-bottom:1px solid rgba(148,163,184,.18)}.it-side-line:last-child{border-bottom:0}.it-side-line>span:first-child{font-size:12px;color:var(--muted)}.it-person-main{display:flex;align-items:center;gap:9px}
.it-avatar{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:rgba(59,130,246,.12);color:#1d4ed8;font-size:11px;font-weight:800;flex:0 0 30px}.it-comment-head{display:flex;align-items:center;gap:9px}.it-comment-body{margin:8px 0 0 39px;line-height:1.55}.it-comments{max-height:none;overflow:visible;margin:10px 0 14px}.it-comment{padding:12px;border-radius:11px}.it-comment.internal{border-color:rgba(245,158,11,.35);background:rgba(245,158,11,.055)}.it-event{margin-left:14px;border-left:2px solid rgba(148,163,184,.25);padding-left:13px}
.it-reply-box{border-top:1px solid var(--border);padding-top:14px}.it-reply-box textarea{width:100%;resize:vertical;min-height:96px}.it-comment-mode{display:inline-flex;border:1px solid var(--border);border-radius:9px;padding:3px;margin-bottom:9px;background:rgba(148,163,184,.06)}.it-comment-mode button{border:0;background:transparent;padding:6px 10px;border-radius:6px;font-size:12px;cursor:pointer}.it-comment-mode button.active{background:var(--surface,#fff);box-shadow:0 1px 3px rgba(15,23,42,.12);font-weight:700}.it-reply-box.internal-mode textarea{border-color:rgba(245,158,11,.5);background:rgba(245,158,11,.035)}.it-reply-actions{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:8px}.it-file-button{display:inline-flex;align-items:center;gap:5px;cursor:pointer;color:#2563eb;font-weight:600;font-size:12px}.it-file-button input{display:none}
.it-pasted-images{margin:9px 0;padding:10px;border:1px dashed #60a5fa;border-radius:9px;background:rgba(59,130,246,.045)}.it-pasted-images-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;font-size:12px}.it-pasted-images-head span{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;border-radius:999px;background:#dbeafe;color:#1d4ed8;font-weight:700}.it-pasted-images-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px}.it-pasted-images figure{margin:0;min-width:0;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--surface,#fff)}.it-pasted-images img{display:block;width:100%;height:92px;object-fit:contain;background:#f8fafc}.it-pasted-images figcaption{display:flex;align-items:center;gap:5px;padding:5px 7px}.it-pasted-images figcaption span{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px}.it-pasted-images figcaption button{width:24px;height:24px;border:0;border-radius:6px;background:transparent;color:#b91c1c;font-size:18px;line-height:1;cursor:pointer}.it-pasted-images figcaption button:hover{background:#fee2e2}
.it-people-picker+.it-people-picker{margin-top:15px}.it-field-title{font-size:12px;font-weight:700;margin-bottom:7px}.it-people-picker details{position:relative}.it-people-picker summary{display:inline-flex;align-items:center;color:#2563eb;font-size:12px;font-weight:700;cursor:pointer;list-style:none;padding:5px 0}.it-people-picker summary::-webkit-details-marker{display:none}.it-people-menu{position:relative;margin-top:5px;border:1px solid var(--border);border-radius:10px;padding:8px;background:var(--surface,#fff);max-height:240px;overflow:auto;box-shadow:0 8px 24px rgba(15,23,42,.09);z-index:3}.it-people-menu>input{position:sticky;top:-8px;z-index:2;margin:-1px 0 6px;background:var(--surface,#fff)}.it-person-option{display:flex;align-items:center;gap:8px;padding:7px;border-radius:7px;cursor:pointer;font-size:12px}.it-person-option:hover{background:rgba(59,130,246,.06)}.it-person-option input{width:auto!important;margin:0}.it-people-chips{display:flex;gap:5px;flex-wrap:wrap}.it-person-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 5px 4px 8px;border-radius:999px;background:rgba(59,130,246,.09);border:1px solid rgba(59,130,246,.18);font-size:11px}.it-person-chip button{border:0;background:transparent;color:#64748b;cursor:pointer;font-size:15px;line-height:1;padding:0 2px}.it-person-chip button:hover{color:#b91c1c}
.it-chips{margin-bottom:0}.it-rating-box,.it-rating-summary{background:var(--surface,#fff)}
@media(max-width:1100px){.it-ticket-layout{grid-template-columns:1fr}.it-ticket-side{position:static}.it-ticket-side-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.it-ticket-side-form>.it-side-card,.it-ticket-side-form>.it-save-ticket{min-width:0}.it-ticket-side-form>.it-save-ticket{grid-column:1/-1}}
@media(max-width:760px){.it-ticket-heading{flex-direction:column}.it-ticket-heading h2{font-size:21px}.it-ticket-layout{grid-template-columns:1fr}.it-ticket-side-form{display:flex}.it-ticket-meta-line{flex-direction:column;gap:5px}.it-reply-actions{align-items:stretch}.it-ticket-page{margin-bottom:20px}}
/* ===== SGEM HELPDESK DEV HD1 END ===== */

/* ===== SGEM HELPDESK DEV HD2 BEGIN ===== */
/* Inline screenshots and videos */
.it-comment-attachments{margin:12px 0 0 39px;align-items:flex-start}
.it-media{overflow:hidden;border:1px solid var(--border);border-radius:11px;background:var(--surface,#fff);box-shadow:0 1px 3px rgba(15,23,42,.05);max-width:760px}
.it-media-image>a{display:block;background:#eef1f5;text-align:center;line-height:0}
.it-media-image img{display:block;width:auto;max-width:100%;max-height:460px;margin:0 auto;object-fit:contain;cursor:zoom-in}
.it-media-video{width:min(100%,760px)}
.it-media-video video{display:block;width:100%;max-height:460px;background:#0f172a}
.it-media-meta{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:8px 10px;font-size:11px}
.it-media-meta>span{min-width:0}.it-media-meta b{display:block;max-width:560px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.it-media-meta small{display:block;color:var(--muted);margin-top:2px}.it-media-meta>a{flex:0 0 auto;color:#2563eb;font-weight:700;text-decoration:none}.it-media-meta>a:hover{text-decoration:underline}

/* Chat role identity */
.it-comment{position:relative;border-left-width:4px!important}
.it-comment-role-requester{border-left-color:#2563eb!important;background:rgba(37,99,235,.035)}
.it-comment-role-assignee{border-left-color:#16a34a!important;background:rgba(22,163,74,.035)}
.it-comment-role-support{border-left-color:#0891b2!important;background:rgba(8,145,178,.035)}
.it-comment-role-watcher{border-left-color:#7c3aed!important;background:rgba(124,58,237,.03)}
.it-comment-role-participant{border-left-color:#64748b!important}
.it-comment-role-internal{border-left-color:#d97706!important;background:rgba(245,158,11,.065)!important}
.it-comment-who{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0;flex:1}.it-comment-who>div{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.it-role-badge{display:inline-flex;align-items:center;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:800;line-height:1.4;border:1px solid transparent;white-space:nowrap}
.it-role-requester{color:#1d4ed8;background:#eff6ff;border-color:#bfdbfe}.it-role-assignee{color:#15803d;background:#f0fdf4;border-color:#bbf7d0}.it-role-support{color:#0e7490;background:#ecfeff;border-color:#a5f3fc}.it-role-watcher{color:#6d28d9;background:#f5f3ff;border-color:#ddd6fe}.it-role-participant{color:#475569;background:#f8fafc;border-color:#e2e8f0}.it-role-internal{color:#92400e;background:#fffbeb;border-color:#fde68a}
.it-avatar-requester{background:#dbeafe;color:#1d4ed8}.it-avatar-assignee{background:#dcfce7;color:#15803d}.it-avatar-support{background:#cffafe;color:#0e7490}.it-avatar-watcher{background:#ede9fe;color:#6d28d9}.it-avatar-participant{background:#e2e8f0;color:#475569}.it-avatar-internal{background:#fef3c7;color:#92400e}
@media(max-width:760px){.it-comment-attachments{margin-left:0}.it-media,.it-media-video{max-width:100%;width:100%}.it-media-image img,.it-media-video video{max-height:340px}.it-comment-who{align-items:flex-start;flex-direction:column;gap:2px}}
/* ===== SGEM HELPDESK DEV HD2 END ===== */

/* ===== v5.00.027-alpha — спецификации БС ===== */
.spec-card{margin:12px 0;padding:14px;border:1px solid var(--rule);border-left:4px solid var(--blue);border-radius:var(--r-md);background:var(--paper);box-shadow:var(--shadow-sm)}
.spec-card.inactive{opacity:.68;border-left-color:var(--ink-mute)}
.spec-card-head{display:grid;grid-template-columns:95px minmax(220px,1fr) auto;gap:10px;align-items:end}
.spec-card-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding-bottom:1px}
.spec-card .spec-no input,.spec-card .spec-name input{width:100%}
.spec-fields-grid{display:grid;grid-template-columns:repeat(4,minmax(140px,1fr));gap:10px;margin-top:12px}
.spec-fields-grid .wide-2{grid-column:span 2}
.spec-effective{margin-top:10px;padding-top:9px;border-top:1px solid var(--rule-soft);font-size:11px}
.spec-allocation-scroll{overflow:auto;margin-top:12px}
.spec-allocation-table{min-width:720px}
.spec-allocation-table th:not(:first-child),.spec-allocation-table td:not(:first-child){text-align:right}
.spec-qty-input{width:92px!important;min-width:76px;text-align:right}
.allocation-banner{margin:12px 0;padding:11px 13px;border:1px solid var(--rule);border-left:4px solid var(--green);border-radius:var(--r-sm);background:var(--paper)}
.allocation-banner.ok{border-left-color:var(--green);background:color-mix(in srgb,var(--green) 6%,var(--paper))}
.allocation-banner.bad{border-left-color:var(--accent);background:color-mix(in srgb,var(--accent) 6%,var(--paper))}
.allocation-status{display:inline-block;min-width:205px;font-size:11px;line-height:1.35}
.allocation-status.under,.allocation-status.over{font-weight:700;color:var(--accent)}
.allocation-status.ok{font-weight:700;color:var(--green)}
.spec-result-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:12px}
.spec-result-card{padding:14px;border:1px solid var(--rule);border-top:4px solid var(--blue);border-radius:var(--r-md);background:var(--paper);box-shadow:var(--shadow-sm);break-inside:avoid}
.spec-result-card h3{margin:0 0 4px;font-size:15px}
.spec-result-conditions{margin-bottom:10px;color:var(--ink-mute);font-size:11px;line-height:1.5}
.spec-result-totals{display:grid;gap:5px;margin-top:9px}
.spec-result-totals span{display:flex;justify-content:space-between;gap:12px;padding-bottom:4px;border-bottom:1px solid var(--rule-soft);font-size:12px}
.spec-result-totals .grand{margin-top:2px;padding-top:6px;border-top:2px solid var(--accent);border-bottom:0;color:var(--accent);font-size:13px}
@media(max-width:1050px){.spec-fields-grid{grid-template-columns:repeat(2,minmax(140px,1fr))}.spec-card-head{grid-template-columns:90px 1fr}.spec-card-actions{grid-column:1/-1}}
@media(max-width:650px){.spec-fields-grid{grid-template-columns:1fr}.spec-fields-grid .wide-2{grid-column:auto}.spec-card-head{grid-template-columns:1fr}.spec-result-grid{grid-template-columns:1fr}}
/* ===== v5.00.027-alpha — спецификации БС END ===== */


/* ===== v5.00.037-alpha — мягкая тёмная тема без резких перепадов =====
   Поверхности таблиц, полей и раскрытых списков сведены в один диапазон
   яркости. Заголовок таблицы отделяется в основном границей, а не контрастом. */
html[data-theme="dark"] {
  --bg-app: #232a32;
  --bg-surface: #29313a;
  --bg-card: #2b343e;
  --bg-elevated: #2e3741;
  --table-bg: #2b343e;
  --table-header-bg: #303943;
  --table-row-bg: #2b343e;
  --table-row-alt-bg: #2d3640;
  --table-row-hover: #333d47;
  --input-bg: #2c3540;
  --input-hover-bg: #303a44;
  --input-focus-bg: #323c46;
  --border-primary: #3b4650;
  --border-secondary: #36414b;
  --text-primary: #d8dee4;
  --text-secondary: #aab3bc;
  --text-muted: #89949f;
  --bg: var(--bg-app);
  --paper: var(--bg-card);
  --paper-soft: var(--bg-elevated);
  --ink: var(--text-primary);
  --ink-soft: var(--text-secondary);
  --ink-mute: var(--text-muted);
  --rule: var(--border-primary);
  --rule-soft: var(--border-secondary);
}
html[data-theme="dark"] table thead th,
html[data-theme="dark"] table.bs-list-table thead th,
html[data-theme="dark"] table.users-table thead th,
html[data-theme="dark"] table.perm-edit-table thead th,
html[data-theme="dark"] table.plan-table thead th,
html[data-theme="dark"] table.metro-table thead th,
html[data-theme="dark"] table.eng-ops-table thead th {
  background: var(--table-header-bg) !important;
  border-color: var(--border-secondary) !important;
}
html[data-theme="dark"] table tbody tr,
html[data-theme="dark"] table tbody td { background-color: var(--table-row-bg); }
html[data-theme="dark"] table tbody tr:nth-child(even),
html[data-theme="dark"] table tbody tr:nth-child(even) td { background-color: var(--table-row-alt-bg); }
html[data-theme="dark"] table tbody tr:hover,
html[data-theme="dark"] table tbody tr:hover td { background-color: var(--table-row-hover) !important; }
html[data-theme="dark"] input,
html[data-theme="dark"] select,
html[data-theme="dark"] textarea,
html[data-theme="dark"] .eng-inp,
html[data-theme="dark"] .eng-sel {
  background: var(--input-bg) !important;
  border-color: var(--border-secondary);
  color: var(--text-primary);
}
html[data-theme="dark"] select option,
html[data-theme="dark"] select optgroup {
  background: var(--input-bg);
  color: var(--text-primary);
}
html[data-theme="dark"] .dropdown-menu,
html[data-theme="dark"] .notif-panel,
html[data-theme="dark"] .it-people-menu {
  background: #2d3640;
  border-color: var(--border-secondary);
  color: var(--text-primary);
}
/* ===== v5.00.037-alpha END ===== */

/* ===== SGEM HelpDesk HD3.1: queues + category tree ===== */
.it-scope-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 14px;padding:5px;background:var(--surface-2,#f5f7fb);border:1px solid var(--border,#dfe4ea);border-radius:12px}
.it-scope-tabs button{border:0;background:transparent;padding:9px 13px;border-radius:9px;cursor:pointer;font-weight:650;color:var(--text-muted,#667085)}
.it-scope-tabs button:hover{background:rgba(0,0,0,.04)}
.it-scope-tabs button.active{background:var(--surface,#fff);color:var(--text,#1f2937);box-shadow:0 1px 4px rgba(0,0,0,.08)}
.it-scope-tabs button span{display:inline-flex;min-width:22px;height:22px;align-items:center;justify-content:center;margin-left:6px;padding:0 6px;border-radius:999px;background:rgba(100,116,139,.12);font-size:12px}
.it-scope-tabs button.active span{background:rgba(59,130,246,.12);color:#2563eb}
.it-category-path{display:block;max-width:420px;white-space:normal;line-height:1.35}
.it-route-preview{display:flex;flex-direction:column;gap:3px;padding:12px 14px;border:1px solid var(--border,#dfe4ea);border-radius:10px;background:var(--surface-2,#f8fafc)}
.it-route-preview>span{font-size:12px;color:var(--text-muted,#667085);text-transform:uppercase;letter-spacing:.03em}
.it-route-preview>b{font-size:14px}
.it-route-preview>small{color:var(--text-muted,#667085)}
.it-ticket-side select[name="category_id"]{width:100%}

/* HelpDesk HD3.1.1 config */
.it-config{min-width:min(960px,86vw)}
.it-config-tabs{display:flex;gap:8px;margin-bottom:18px;border-bottom:1px solid var(--border)}
.it-config-tabs button{border:0;background:transparent;padding:10px 14px;cursor:pointer;font-weight:600}
.it-config-tabs button.active{border-bottom:2px solid currentColor}
.it-config-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}
.it-config-head h3{margin:0 0 4px}
.it-check-line{display:flex;align-items:center;gap:8px;justify-content:flex-start}
.it-check-line input{width:auto}
.it-config [hidden]{display:none!important}


/* HelpDesk HD3.1.1 UI cleanup */

/* Настройки HelpDesk не должны сами растягивать модальное окно */
.it-config{
  width:100%;
  min-width:0;
  max-width:100%;
  box-sizing:border-box;
  overflow:hidden;
}

.it-config-head-actions{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  flex-wrap:wrap;
  gap:7px;
}

.it-config-table-wrap{
  width:100%;
  max-width:100%;
  overflow-x:hidden;
}

.it-config-table{
  width:100%!important;
  min-width:0!important;
  max-width:100%;
  table-layout:fixed;
}

.it-config-table th,
.it-config-table td{
  min-width:0;
  overflow-wrap:anywhere;
  word-break:normal;
  vertical-align:middle;
}

.it-config-category-table th:nth-child(1),
.it-config-category-table td:nth-child(1){width:48%}

.it-config-category-table th:nth-child(2),
.it-config-category-table td:nth-child(2){width:20%}

.it-config-category-table th:nth-child(3),
.it-config-category-table td:nth-child(3){width:7%}

.it-config-category-table th:nth-child(4),
.it-config-category-table td:nth-child(4){width:7%}

.it-config-category-table th:nth-child(5),
.it-config-category-table td:nth-child(5){width:6%}

.it-config-category-table th:nth-child(6),
.it-config-category-table td:nth-child(6){width:12%}

.it-config-group-table th:nth-child(1),
.it-config-group-table td:nth-child(1){width:22%}

.it-config-group-table th:nth-child(2),
.it-config-group-table td:nth-child(2){width:38%}

.it-config-group-table th:nth-child(3),
.it-config-group-table td:nth-child(3){width:9%}

.it-config-group-table th:nth-child(4),
.it-config-group-table td:nth-child(4){width:8%}

.it-config-group-table th:nth-child(5),
.it-config-group-table td:nth-child(5){width:8%}

.it-config-group-table th:nth-child(6),
.it-config-group-table td:nth-child(6){width:15%}

.it-config-action{
  text-align:right;
}

.it-config-action .btn-sm{
  max-width:100%;
}

.it-config-category-name{
  display:flex;
  align-items:flex-start;
  gap:5px;
  padding-left:calc(var(--it-depth,0) * 17px);
  min-width:0;
}

.it-config-category-name > span{
  min-width:0;
}

.it-config-category-name small{
  display:block;
  margin-top:2px;
  color:var(--muted);
  line-height:1.25;
  overflow-wrap:anywhere;
}

.it-tree-toggle{
  flex:0 0 22px;
  width:22px;
  height:22px;
  padding:0;
  border:0;
  background:transparent;
  cursor:pointer;
  font-size:15px;
  line-height:22px;
  border-radius:5px;
}

.it-tree-toggle:hover{
  background:rgba(100,116,139,.12);
}

.it-tree-toggle.empty{
  cursor:default;
  opacity:.35;
}

.it-config-members{
  display:flex;
  flex-wrap:wrap;
  gap:5px;
}

.it-config-member{
  display:inline-flex;
  align-items:center;
  gap:4px;
  max-width:100%;
  padding:3px 7px;
  border:1px solid var(--border);
  border-radius:999px;
  background:rgba(100,116,139,.06);
  font-size:12px;
  line-height:1.25;
}

.it-config-member b{
  font-size:11px;
}

/* Основная таблица HelpDesk: без горизонтальной прокрутки на десктопе */
#view-it_helpdesk .users-table-wrap{
  max-width:100%;
}

#view-it_helpdesk .it-table{
  width:100%!important;
  min-width:0!important;
  table-layout:fixed;
}

#view-it_helpdesk .it-table th,
#view-it_helpdesk .it-table td{
  min-width:0;
  overflow-wrap:anywhere;
  vertical-align:middle;
}

#view-it_helpdesk .it-table th:nth-child(1),
#view-it_helpdesk .it-table td:nth-child(1){width:24%}

#view-it_helpdesk .it-table th:nth-child(2),
#view-it_helpdesk .it-table td:nth-child(2){width:18%}

#view-it_helpdesk .it-table th:nth-child(3),
#view-it_helpdesk .it-table td:nth-child(3){width:9%}

#view-it_helpdesk .it-table th:nth-child(4),
#view-it_helpdesk .it-table td:nth-child(4){width:15%}

#view-it_helpdesk .it-table th:nth-child(5),
#view-it_helpdesk .it-table td:nth-child(5){width:13%}

#view-it_helpdesk .it-table th:nth-child(6),
#view-it_helpdesk .it-table td:nth-child(6){width:14%}

#view-it_helpdesk .it-table th:nth-child(7),
#view-it_helpdesk .it-table td:nth-child(7){width:7%}

#view-it_helpdesk .it-table .it-status,
#view-it_helpdesk .it-table .it-priority,
#view-it_helpdesk .it-table .it-sla{
  max-width:100%;
  white-space:normal;
}

@media (max-width:900px){
  .it-config-table-wrap,
  #view-it_helpdesk .users-table-wrap{
    overflow-x:auto;
  }

  .it-config-table{
    min-width:760px!important;
  }

  #view-it_helpdesk .it-table{
    min-width:900px!important;
  }

  .it-config-category-name{
    padding-left:calc(var(--it-depth,0) * 12px);
  }
}

/* HelpDesk HD3.1.1 UI cleanup 2 */

/* На обычном десктопе основная таблица не должна показывать
   горизонтальный scrollbar, если все колонки уже помещаются. */
#view-it_helpdesk .users-table-wrap{
  overflow-x:hidden;
}

/* Чуть перераспределяем место в настройках категорий,
   чтобы кнопка "Изменить" всегда была нормальной ширины. */
.it-config-category-table th:nth-child(1),
.it-config-category-table td:nth-child(1){width:46%}

.it-config-category-table th:nth-child(2),
.it-config-category-table td:nth-child(2){width:19%}

.it-config-category-table th:nth-child(3),
.it-config-category-table td:nth-child(3){width:7%}

.it-config-category-table th:nth-child(4),
.it-config-category-table td:nth-child(4){width:7%}

.it-config-category-table th:nth-child(5),
.it-config-category-table td:nth-child(5){width:6%}

.it-config-category-table th:nth-child(6),
.it-config-category-table td:nth-child(6){width:15%}

.it-config-category-table .it-config-action{
  white-space:nowrap;
}

.it-config-category-table .it-config-action .btn-sm{
  width:auto;
  min-width:88px;
  white-space:nowrap;
  padding-left:12px;
  padding-right:12px;
}

/* На небольшом экране скролл остаётся допустимым. */
@media (max-width:900px){
  #view-it_helpdesk .users-table-wrap{
    overflow-x:auto;
  }
}


/* HelpDesk HD3.2A management report */
.it-report{
  width:min(1120px,82vw);
  max-width:100%;
  box-sizing:border-box;
}

.it-report-filters{
  display:flex;
  align-items:flex-end;
  flex-wrap:wrap;
  gap:12px;
}

.it-report-filters .fl{
  min-width:180px;
}

.it-report-scope{
  margin-left:auto;
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:2px;
}

.it-report-scope span,
.it-report-scope small{
  color:var(--muted);
}

.it-report-note{
  margin:10px 0 14px;
}

.it-report-cards{
  grid-template-columns:repeat(3,minmax(0,1fr));
}

.it-report-cards > div{
  min-width:0;
}

.it-report-cards small{
  display:block;
  margin-top:3px;
  color:var(--muted);
  font-size:11px;
}

.it-report-section{
  margin-top:20px;
}

.it-report-section h4{
  margin:0 0 9px;
}

.it-report-table-wrap{
  width:100%;
  max-width:100%;
  overflow-x:auto;
}

.it-report-table{
  width:100%;
  min-width:900px;
  table-layout:fixed;
  font-size:12px;
}

.it-report-table th,
.it-report-table td{
  white-space:normal;
  overflow-wrap:anywhere;
  vertical-align:middle;
}

.it-report-table th:first-child,
.it-report-table td:first-child{
  width:18%;
}

.it-report-grid{
  display:grid;
  grid-template-columns:minmax(0,2fr) minmax(220px,1fr);
  gap:20px;
  align-items:start;
}

@media (max-width:900px){
  .it-report{
    width:100%;
  }

  .it-report-cards{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }

  .it-report-grid{
    grid-template-columns:1fr;
  }

  .it-report-scope{
    margin-left:0;
    align-items:flex-start;
  }
}


/* HelpDesk HD3.2A UI1: local horizontal scrolling */

/* Сам отчёт больше не должен создавать общий горизонтальный скролл */
.it-report{
  min-width:0;
  overflow-x:hidden;
}

/* Все внутренние контейнеры могут корректно сжиматься */
.it-report-section,
.it-report-grid,
.it-report-grid > *{
  min-width:0;
  max-width:100%;
  box-sizing:border-box;
}

/* Категории и оценки теперь друг под другом */
.it-report-grid{
  grid-template-columns:minmax(0,1fr);
  gap:18px;
}

/* Если таблица широкая — двигается только таблица, не вся модалка */
.it-report .users-table-wrap,
.it-report .it-report-table-wrap{
  width:100%;
  max-width:100%;
  min-width:0;
  overflow-x:auto;
  overflow-y:hidden;
  box-sizing:border-box;
}

/* Блок оценок не должен расталкивать модалку */
.it-report .it-rating-distribution{
  width:100%;
  max-width:100%;
  min-width:0;
  box-sizing:border-box;
}

.it-report .it-rating-distribution > *{
  min-width:0;
}

@media (max-width:900px){
  .it-report{
    overflow-x:hidden;
  }
}


/* HelpDesk HD3.2A UI2: no useless horizontal scrollbars */

/* В отчёте таблицы всегда укладываются в ширину окна */
.it-report .users-table-wrap,
.it-report .it-report-table-wrap{
  overflow-x:hidden;
}

/* Убираем искусственную минимальную ширину широких таблиц */
.it-report .users-table,
.it-report .it-report-table{
  width:100%;
  min-width:0 !important;
  max-width:100%;
  table-layout:fixed;
}

/* Длинные названия групп, сотрудников и категорий переносятся */
.it-report .users-table th,
.it-report .users-table td,
.it-report .it-report-table th,
.it-report .it-report-table td{
  white-space:normal;
  overflow-wrap:anywhere;
  word-break:normal;
}


/* HelpDesk HD3.2B1b bulk UI */
.it-bulk-bar{
  display:flex;
  align-items:flex-end;
  gap:10px;
  flex-wrap:wrap;
  padding:10px 12px;
  margin:10px 0;
  border:1px solid var(--border);
  border-radius:10px;
  background:var(--surface);
}

.it-bulk-bar[hidden]{
  display:none;
}

.it-bulk-bar label{
  display:flex;
  flex-direction:column;
  gap:4px;
  font-size:12px;
  color:var(--muted);
}

.it-bulk-bar select{
  min-width:175px;
  min-height:34px;
}

.it-bulk-count{
  align-self:center;
  margin-right:auto;
  white-space:nowrap;
}

.it-bulk-check,
.it-bulk-select-all{
  width:16px;
  height:16px;
  margin:0 7px 0 0;
  vertical-align:-2px;
  cursor:pointer;
}

#view-it_helpdesk .it-ticket-row.it-bulk-selected{
  background:rgba(59,130,246,.08);
  box-shadow:inset 3px 0 0 #3b82f6;
}

@media(max-width:760px){
  .it-bulk-bar{
    align-items:stretch;
  }

  .it-bulk-bar label,
  .it-bulk-bar select,
  .it-bulk-bar button{
    width:100%;
  }

  .it-bulk-count{
    margin-right:0;
  }
}

/* HD5.1 rating stars */
.it-rating-star {
    display: inline !important;
    color: #e0a800 !important;
    font-style: normal;
    line-height: inherit;
}

.it-stars {
    display: inline !important;
    color: #e0a800 !important;
}


/* ===== SGEM HELPDESK KPI FILTERS BEGIN ===== */
#view-it_helpdesk .quality-kpi .it-kpi[data-it-kpi-filter]{
  cursor:pointer;
  transition:transform .12s ease,box-shadow .12s ease,border-color .12s ease;
  user-select:none;
}
#view-it_helpdesk .quality-kpi .it-kpi[data-it-kpi-filter]:hover{
  transform:translateY(-1px);
  box-shadow:0 4px 12px rgba(15,23,42,.10);
}
#view-it_helpdesk .quality-kpi .it-kpi[data-it-kpi-filter]:focus{
  outline:2px solid rgba(37,99,235,.35);
  outline-offset:2px;
}
#view-it_helpdesk .quality-kpi .it-kpi[data-it-kpi-filter].active{
  border-color:#2563eb;
  box-shadow:0 0 0 2px rgba(37,99,235,.14),0 4px 12px rgba(15,23,42,.08);
}
#view-it_helpdesk .quality-kpi .it-kpi[data-it-kpi-filter].active::after{
  content:"";
  position:absolute;
  right:10px;
  top:10px;
  width:7px;
  height:7px;
  border-radius:50%;
  background:#2563eb;
}
/* ===== SGEM HELPDESK KPI FILTERS END ===== */


/* ===== SGEM HELPDESK QUICK RESOLVE BEGIN ===== */
#view-it_helpdesk .it-resolution-editor .it-quick-resolve{
  width:100%;
  margin-top:10px;
  min-height:40px;
}
#view-it_helpdesk .it-resolution-editor textarea{
  min-height:92px;
}
/* ===== SGEM HELPDESK QUICK RESOLVE END ===== */


/* ===== SGEM HELPDESK TABLE SORT BEGIN ===== */
#view-it_helpdesk .it-table th[data-it-sort]{
  cursor:pointer;
  user-select:none;
  white-space:nowrap;
  transition:background .12s ease;
}
#view-it_helpdesk .it-table th[data-it-sort]:hover{
  background:rgba(59,130,246,.06);
}
#view-it_helpdesk .it-table th[data-it-sort]::after{
  content:"↕";
  display:inline-block;
  margin-left:6px;
  font-size:10px;
  opacity:.28;
}
#view-it_helpdesk .it-table th[data-sort-dir="asc"]::after{
  content:"▲";
  opacity:.85;
}
#view-it_helpdesk .it-table th[data-sort-dir="desc"]::after{
  content:"▼";
  opacity:.85;
}
/* ===== SGEM HELPDESK TABLE SORT END ===== */


/* ===== SGEM HELPDESK REWORK RATING RESPONSIVE BEGIN ===== */

/* Пустая звезда: серое заполнение + красная обводка интерфейса */
#view-it_helpdesk .it-rating-input span{
  display:inline-block;
  color:#d6d9df !important;
  -webkit-text-stroke:1.4px var(--accent,#cf2e2e);
  paint-order:stroke fill;
  text-shadow:
    .35px 0 var(--accent,#cf2e2e),
    -.35px 0 var(--accent,#cf2e2e),
    0 .35px var(--accent,#cf2e2e),
    0 -.35px var(--accent,#cf2e2e);
  transition:
    color .12s ease,
    transform .12s ease,
    -webkit-text-stroke-color .12s ease;
}

/* Выбранные звёзды — золотые */
#view-it_helpdesk
.it-rating-input:has(input[value="5"]:checked)
label:nth-child(-n+5) span,

#view-it_helpdesk
.it-rating-input:has(input[value="4"]:checked)
label:nth-child(-n+4) span,

#view-it_helpdesk
.it-rating-input:has(input[value="3"]:checked)
label:nth-child(-n+3) span,

#view-it_helpdesk
.it-rating-input:has(input[value="2"]:checked)
label:nth-child(-n+2) span,

#view-it_helpdesk
.it-rating-input:has(input[value="1"]:checked)
label:nth-child(1) span{
  color:#e0a800 !important;
  -webkit-text-stroke-color:#e0a800;
  text-shadow:none;
}

#view-it_helpdesk .it-rating-input label:hover span{
  transform:scale(1.08);
}

#view-it_helpdesk .it-rating-help{
  margin-top:4px;
  color:var(--ink-mute,#667085);
  font-size:12px;
}

#view-it_helpdesk .it-rework-area{
  margin-top:14px;
  padding-top:13px;
  border-top:1px solid var(--border,#dfe4ea);
}

#view-it_helpdesk .it-rework-area [data-it-rework-box]{
  margin-top:12px;
}

#view-it_helpdesk .it-rework-area textarea{
  width:100%;
  box-sizing:border-box;
  resize:vertical;
  min-height:78px;
}

#view-it_helpdesk .it-rework-area [data-it-rework]{
  margin-top:9px;
}


/* ---------- Новая заявка: адаптация по высоте экрана ---------- */

.modal-card.it-new-ticket-modal{
  width:min(760px,calc(100vw - 24px)) !important;
  max-width:760px !important;
  max-height:calc(100dvh - 20px) !important;
  overflow-y:auto !important;
  overscroll-behavior:contain;
  box-sizing:border-box;
}

.modal-card.it-new-ticket-modal .modal-actions{
  position:sticky;
  bottom:-1px;
  z-index:5;
  margin-top:12px;
  padding:12px 0 2px;
  background:var(--paper,var(--surface,#fff));
}

.modal-card.it-new-ticket-modal
textarea[name="description"]{
  min-height:86px;
  max-height:160px;
  resize:vertical;
}


/* Ноутбуки и мониторы с небольшой высотой */
@media (max-height: 860px){

  .modal-card.it-new-ticket-modal{
    padding:14px 18px !important;
    max-height:calc(100dvh - 10px) !important;
  }

  .modal-card.it-new-ticket-modal h3{
    margin-bottom:8px;
  }

  .modal-card.it-new-ticket-modal .form-grid{
    gap:7px 10px;
  }

  .modal-card.it-new-ticket-modal .fl{
    gap:3px;
  }

  .modal-card.it-new-ticket-modal
  .it-route-preview{
    padding:8px 11px;
  }

  .modal-card.it-new-ticket-modal
  textarea[name="description"]{
    min-height:68px;
    height:68px;
  }

  .modal-card.it-new-ticket-modal
  .modal-actions{
    margin-top:8px;
    padding-top:9px;
  }

  .modal-card.it-new-ticket-modal .hint{
    line-height:1.25;
  }
}


/* Очень низкие рабочие экраны */
@media (max-height: 720px){

  .modal-card.it-new-ticket-modal{
    padding:10px 14px !important;
  }

  .modal-card.it-new-ticket-modal
  textarea[name="description"]{
    min-height:54px;
    height:54px;
  }

  .modal-card.it-new-ticket-modal
  input,
  .modal-card.it-new-ticket-modal
  select{
    min-height:32px;
  }
}

/* ===== SGEM HELPDESK REWORK RATING RESPONSIVE END ===== */


/* ===== SGEM HELPDESK DRAFTS BEGIN ===== */

#view-it_helpdesk .it-draft-row{
  cursor:pointer;
}

#view-it_helpdesk .it-draft-row:hover{
  background:rgba(59,130,246,.045);
}

#view-it_helpdesk .it-draft-actions{
  text-align:right;
  white-space:nowrap;
}

#view-it_helpdesk .it-draft-existing-files{
  padding:10px 12px;
  border:1px solid var(--border,#dfe4ea);
  border-radius:9px;
  background:var(--surface-2,#f8fafc);
}

#view-it_helpdesk .it-draft-file-list{
  display:flex;
  flex-direction:column;
  gap:6px;
}

#view-it_helpdesk .it-draft-file-list a{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
  padding:7px 9px;
  border:1px solid var(--border,#dfe4ea);
  border-radius:7px;
  background:var(--surface,#fff);
  color:inherit;
  text-decoration:none;
}

#view-it_helpdesk .it-draft-file-list a:hover{
  border-color:#94a3b8;
}

#view-it_helpdesk .it-draft-file-list small{
  color:var(--muted,#64748b);
  white-space:nowrap;
}

@media(max-width:760px){

  #view-it_helpdesk .it-draft-actions{
    text-align:left;
  }

}

/* ===== SGEM HELPDESK DRAFTS END ===== */


/* ===== SGEM HELPDESK RATING HOVER RED BEGIN ===== */

/* Больше не увеличиваем звезду при наведении */
#view-it_helpdesk .it-rating-input label:hover span{
  transform:none !important;
}

/*
 * Наведение:
 * до текущей звезды всё красное.
 *
 * Эти правила идут после золотого checked,
 * поэтому пока курсор находится над звёздами,
 * пользователь видит красный предпросмотр.
 * После ухода курсора выбранная оценка снова золотая.
 */

#view-it_helpdesk
.it-rating-input:has(label:nth-child(1):hover)
label:nth-child(-n+1) span,

#view-it_helpdesk
.it-rating-input:has(label:nth-child(2):hover)
label:nth-child(-n+2) span,

#view-it_helpdesk
.it-rating-input:has(label:nth-child(3):hover)
label:nth-child(-n+3) span,

#view-it_helpdesk
.it-rating-input:has(label:nth-child(4):hover)
label:nth-child(-n+4) span,

#view-it_helpdesk
.it-rating-input:has(label:nth-child(5):hover)
label:nth-child(-n+5) span{
  color:var(--accent,#cf2e2e) !important;
  -webkit-text-stroke-color:var(--accent,#cf2e2e) !important;
  text-shadow:none !important;
}

/* ===== SGEM HELPDESK RATING HOVER RED END ===== */

/* ===== SGEM HELP: article images ===== */
.help-image-wrap {
  margin: 16px 0 22px;
}

.help-image {
  display: block;
  max-width: 100%;
  height: auto;
  border-radius: 8px;
  border: 1px solid var(--border, #d9dee7);
  box-shadow: 0 2px 8px rgba(0,0,0,.08);
}
/* ===== SGEM HELP: article images END ===== */

/* ═══════════════════════════════════════════════════════════════
   v5.00.041-alpha — закреплённая верхняя часть графика заказа
   ───────────────────────────────────────────────────────────────
   Раньше при заполнении большого графика кнопка «+ Этап» уезжала
   вверх и до неё приходилось прокручивать страницу целиком.
   Тулбар со сводкой и действиями графика закрепляется под топбаром
   и хлебными крошками (56px + ~37px).
   Слой должен быть НИЖЕ хлебных крошек (95) и топбара (100).
   ═══════════════════════════════════════════════════════════════ */
:root { --sgem-sticky-top: 94px; }

/* Оба контейнера объявлены с overflow-x:auto — по спецификации это делает их
   прокручиваемыми и по вертикали, и sticky внутри перестаёт работать.
   Класс ставится только на время раздела «Планирование» (см. engSwitchTab). */
#view-eng .dicts-main.eng-sticky-host,
#view-eng .dict-table-wrap.eng-sticky-host { overflow: visible; }
/* без min-width:0 grid-элемент без собственной прокрутки может растянуть колонку */
#view-eng .dicts-main.eng-sticky-host { min-width: 0; }

.oplan-toolbar {
  position: sticky;
  top: var(--sgem-sticky-top, 94px);
  z-index: 30;
  /* Непрозрачный фон обязателен: под тулбаром проезжают таблица и Гантт.
     Переменная даёт корректный цвет и в тёмной теме. */
  background: var(--paper-soft, #f6f8fb);
  box-shadow: 0 2px 6px rgba(16, 20, 27, .07);
}

@media (max-width: 900px) {
  :root { --sgem-sticky-top: 92px; }
}
.hse-cal-toolbar{display:flex;align-items:center;gap:8px;margin:12px 0}.hse-cal-toolbar b{margin-left:auto;text-transform:capitalize;font-size:18px}.hse-cal-week,.hse-cal-grid{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr))}.hse-cal-week>div{padding:8px;text-align:center;font-weight:700;color:var(--text-muted,#667085)}.hse-cal-cell{min-height:120px;border:1px solid var(--border,#e2e8f0);padding:6px;background:var(--surface,#fff)}.hse-cal-cell.outside{background:var(--surface-muted,#f8fafc)}.hse-cal-cell.today{box-shadow:inset 0 0 0 2px #2563eb}.hse-cal-day{font-weight:700;margin-bottom:5px}.hse-cal-event{display:block;width:100%;border:0;border-left:3px solid #2563eb;border-radius:4px;background:#eff6ff;color:#1e3a8a;text-align:left;padding:4px 6px;margin:3px 0;cursor:pointer;font-size:12px;overflow:hidden;text-overflow:ellipsis}.hse-cal-event span{font-weight:700}.hse-cal-event.done{border-color:#16a34a;background:#f0fdf4;color:#166534;text-decoration:line-through}.hse-cal-event.cancelled{border-color:#94a3b8;background:#f8fafc;color:#64748b;text-decoration:line-through}@media(max-width:900px){.hse-cal-week,.hse-cal-grid{min-width:850px}.hse-cal-grid{overflow:auto}.org-content:has(.hse-cal-grid){overflow-x:auto}}
.it-desktop-enrollment{padding:16px;border:1px solid var(--border,#e2e8f0);border-radius:10px;background:var(--surface-muted,#f8fafc);margin-bottom:20px}.it-desktop-issue-wrap{display:flex;flex-direction:column;justify-content:flex-end}.it-enrollment-result{margin-top:14px;padding:14px;border:1px solid #86efac;border-radius:8px;background:#f0fdf4}.it-enrollment-code-row{display:flex;gap:8px;margin-top:8px}.it-enrollment-code-row input{flex:1;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:14px}.it-enrollment-result .warning{color:#9a3412;margin-bottom:0}

/* v5.00.051-alpha — требования ОТ должности и контроль сотрудника */
.hse-employee-link,
.hse-position-link {
  border: 0;
  background: transparent;
  color: var(--accent);
  padding: 0;
  font: inherit;
  font-weight: 700;
  text-align: left;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 2px;
}
.hse-employee-link:hover, .hse-position-link:hover { opacity: .8; }
.hse-person-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 14px;
  margin-bottom: 14px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--surface-soft, var(--panel));
}
.hse-person-section { margin-top: 18px; }
.hse-person-section .org-section-head { margin-bottom: 8px; }
.hse-person-section .org-section-head h4 { margin: 0; }

/* v5.00.054-alpha — режим проверки прав другой роли для администратора */
.user-box.role-emulation-active {
  border-color: rgba(246, 184, 63, .75) !important;
  box-shadow: 0 0 0 2px rgba(246, 184, 63, .16);
}
.role-emulation-chip {
  display: inline-flex;
  align-items: center;
  max-width: 240px;
  padding: 4px 8px;
  border: 1px solid rgba(246,184,63,.55);
  border-radius: 999px;
  background: rgba(246,184,63,.14);
  color: #ffd986;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: .04em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.topbar .role-emulation-stop {
  border-color: rgba(246,184,63,.55);
  color: #ffd986;
}
.role-emulation-overlay {
  display: none;
  position: fixed;
  inset: 0;
  z-index: 3000;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(13,18,25,.62);
  backdrop-filter: blur(3px);
}
.role-emulation-dialog {
  width: min(520px, 100%);
  border: 1px solid var(--line);
  border-radius: 14px;
  background: var(--paper);
  color: var(--ink);
  box-shadow: 0 22px 70px rgba(0,0,0,.28);
  padding: 22px;
}
.role-emulation-dialog h3 { margin: 0 0 10px; }
.role-emulation-dialog p { margin: 0 0 16px; color: var(--ink-soft); line-height: 1.45; }
.role-emulation-dialog select { width: 100%; margin-top: 6px; }
.role-emulation-warning {
  margin-top: 14px;
  padding: 10px 12px;
  border: 1px solid rgba(190,125,25,.28);
  border-radius: 9px;
  background: rgba(246,184,63,.10);
  color: var(--ink);
  font-size: 12px;
  line-height: 1.45;
}
.role-emulation-error { min-height: 20px; margin-top: 8px; color: var(--danger, #b42318); font-size: 12px; }
.role-emulation-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px; }
.audit-role-emulation { display: block; margin-top: 3px; color: var(--warning-text, #8a5c00); font-size: 11px; font-weight: 700; }
@media (max-width: 700px) {
  .role-emulation-chip { max-width: 100%; }
  .role-emulation-actions { flex-direction: column-reverse; }
  .role-emulation-actions button { width: 100%; }
}


/* v5.00.055-alpha — sticky-матрица прав, тёмная тема */
html[data-theme="dark"] #perm_legend_table {
  background: var(--table-bg);
  border-color: var(--border-primary);
}
html[data-theme="dark"] #perm_legend_table table.perm-edit-table thead th,
html[data-theme="dark"] #perm_legend_table table.perm-edit-table thead th:first-child {
  background: var(--table-header-bg) !important;
  color: var(--text-primary) !important;
  box-shadow: 0 2px 0 var(--border-primary);
}
html[data-theme="dark"] #perm_legend_table table.perm-edit-table thead th:first-child {
  box-shadow: 2px 2px 0 var(--border-primary);
}
html[data-theme="dark"] #perm_legend_table table.perm-edit-table tbody td:first-child {
  background: var(--table-row-bg);
  box-shadow: 2px 0 0 var(--border-primary);
}
html[data-theme="dark"] #perm_legend_table table.perm-edit-table tbody tr:nth-child(even) td:first-child {
  background: var(--table-row-alt-bg);
}
html[data-theme="dark"] #perm_legend_table table.perm-edit-table tbody tr:hover td:first-child {
  background: var(--table-row-hover) !important;
}

/* ════════════════════════════════════════════════════════════════════════
   v5.00.062-alpha — обязательные мероприятия сотрудника по должности.
   Цветовая индикация даётся левой полосой строки, а не заливкой всей
   ячейки: так подсветка читается и в светлой, и в тёмной теме, не мешая
   штатной «зебре» и hover общих таблиц.
   ════════════════════════════════════════════════════════════════════════ */
.users-table tr.hse-ok td:first-child { border-left: 3px solid var(--success, #6a8b7b); }
.users-table tr.hse-soon td:first-child { border-left: 3px solid var(--warning, #a39066); }
.users-table tr.hse-overdue td:first-child { border-left: 3px solid var(--danger, #9c6666); }
.users-table tr.hse-muted td:first-child { border-left: 3px solid var(--border, #cbd5e1); }
.users-table tr.hse-overdue td { font-weight: 600; }

.hse-quick-filters { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0; }
.hse-quick-filters .btn-secondary.active {
  border-color: var(--primary, #2563eb);
  color: var(--primary, #2563eb);
  font-weight: 700;
}
.hse-filter-bar {
  display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end;
  padding: 10px; margin-bottom: 12px; border-radius: 8px;
  border: 1px solid var(--border, #e2e8f0);
  background: var(--surface-muted, #f8fafc);
}
.hse-filter-bar input, .hse-filter-bar select { min-width: 150px; }
.hse-filter-bar .fl.inline {
  display: flex; align-items: center; gap: 6px; margin: 0;
  color: var(--text-muted, #667085); font-size: 12px;
}
.hse-filter-bar .fl.inline input { min-width: 130px; }
.org-stats-row { display: flex; flex-wrap: wrap; gap: 10px; margin: 10px 0; }
.org-stats-row .org-stat.danger b { color: var(--danger, #b42318); }
.hint-box.danger {
  border-left: 3px solid var(--danger, #b42318);
  background: var(--surface-muted, #f8fafc);
}
html[data-theme="dark"] .hse-filter-bar,
html[data-theme="dark"] .hint-box.danger {
  background: var(--surface-secondary, #1e2733);
  border-color: var(--border-primary);
}
@media (max-width: 900px) {
  .hse-filter-bar input, .hse-filter-bar select { min-width: 120px; flex: 1 1 140px; }
}

/* v5.00.063-alpha — область обязательного мероприятия (ОТ / ПБ / ЭБ).
   Чип рядом с названием: одно мероприятие бывает по разным областям, поэтому
   область показывается всегда и не прячется в подпись. */
.hse-scope-chip {
  display: inline-block; padding: 1px 7px; border-radius: 10px;
  font-size: 11px; font-weight: 700; letter-spacing: .02em; white-space: nowrap;
  border: 1px solid var(--border, #cbd5e1);
  background: var(--surface-muted, #f1f5f9);
  color: var(--text-muted, #475569);
  vertical-align: middle;
}
html[data-theme="dark"] .hse-scope-chip {
  background: var(--surface-secondary, #1e2733);
  border-color: var(--border-primary);
  color: var(--text-primary);
}

/* v5.00.063-alpha — присутствие и признак прочтения в чате.
   Источник — users.last_seen_at: отдельного сервера присутствия в СГЭМ нет,
   поэтому «в сети» = активность в системе за последние три минуты. */
.sgem-chat-presence {
  display: inline-block; width: 9px; height: 9px; border-radius: 50%;
  margin-right: 5px; vertical-align: middle;
  background: var(--text-muted, #94a3b8);
  box-shadow: 0 0 0 2px var(--surface, #fff);
}
.sgem-chat-presence.online { background: #22c55e; }
.sgem-chat-room-icon { position: relative; }
.sgem-chat-room-icon .sgem-chat-presence {
  position: absolute; right: -1px; bottom: -1px; margin: 0;
}
.sgem-chat-presence-text { font-weight: 600; }
.sgem-chat-ticks {
  margin-left: 6px; font-size: 12px; letter-spacing: -1px;
  color: var(--text-muted, #94a3b8);
}
.sgem-chat-ticks.read { color: #2563eb; }
html[data-theme="dark"] .sgem-chat-presence { box-shadow: 0 0 0 2px var(--surface-secondary, #1e2733); }
html[data-theme="dark"] .sgem-chat-ticks.read { color: #60a5fa; }

/* v5.00.065-alpha — реестр SGEM Desktop: локальные IP и признак связи.
   «Активен» — это действующий device token, а не наличие связи, поэтому
   присутствие показывается отдельной точкой рядом с последней связью. */
.it-device-ip {
  font-family: ui-monospace, "Cascadia Mono", Consolas, "Liberation Mono", monospace;
  font-size: 12px; line-height: 1.5; white-space: nowrap;
}
.it-device-ips.stale .it-device-ip { color: var(--text-muted, #94a3b8); }
.it-device-presence {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%;
  margin-right: 6px; vertical-align: middle;
  background: var(--text-muted, #94a3b8);
}
.it-device-presence.online { background: #22c55e; }
.muted.small.warning { color: var(--warning-text, #8a5c00); }
html[data-theme="dark"] .muted.small.warning { color: #e0b44a; }

/* v5.01.000-alpha — SGEM Assist: запрос подключения, ожидание согласия и
   журнал сеансов. Состояние сеанса читается без расшифровки цветов: рядом с
   цветом всегда стоит словесный статус. */
.it-device-actions { display: flex; gap: 6px; flex-wrap: wrap; }

.assist-request .assist-scopes { display: grid; gap: 6px; margin: 10px 0 12px; }
.assist-request .check-field span { line-height: 1.4; }

.assist-wait { display: grid; gap: 10px; min-width: 320px; }
.assist-wait-head { display: flex; align-items: center; gap: 12px; }
.assist-spinner {
  width: 18px; height: 18px; border-radius: 50%; flex: 0 0 auto;
  border: 2px solid var(--border, #cbd5e1); border-top-color: #2563eb;
  animation: assist-spin 0.9s linear infinite;
}
@keyframes assist-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .assist-spinner { animation: none; } }
.assist-countdown { font-size: 22px; font-variant-numeric: tabular-nums; }
.assist-granted { font-size: 13px; }
[data-assist-result="denied"] .assist-wait-head b,
[data-assist-result="failed"] .assist-wait-head b { color: var(--danger-text, #b91c1c); }
[data-assist-result="ended"] .assist-wait-head b { color: var(--text-muted, #64748b); }

.assist-card .assist-device { display: grid; gap: 4px; margin-bottom: 10px; }
.assist-presence { font-size: 12px; color: var(--text-muted, #64748b); }
.assist-presence.online { color: #16a34a; }
.assist-journal { margin-top: 12px; border-top: 1px solid var(--border, #e2e8f0); padding-top: 10px; }
.assist-journal h4 { margin: 0 0 8px; font-size: 13px; }
.assist-journal-row { margin-bottom: 8px; line-height: 1.4; }
.assist-journal-status { font-size: 11px; margin-left: 6px; }
.assist-status-active { color: #16a34a; }
.assist-status-denied, .assist-status-failed { color: var(--danger-text, #b91c1c); }
.assist-status-expired, .assist-status-cancelled { color: var(--text-muted, #64748b); }
html[data-theme="dark"] .assist-presence.online,
html[data-theme="dark"] .assist-status-active { color: #4ade80; }

/* v5.01.001: фото общей карточки сотрудника */
.org-employee-photo {display:flex;align-items:center;gap:20px;flex-wrap:wrap;margin-bottom:20px}
.org-employee-photo img {width:120px;height:144px;object-fit:cover;border-radius:10px}
.org-employee-avatar {width:36px;height:42px;object-fit:cover;border-radius:5px;vertical-align:middle;margin-right:10px}
.hse-position-cards {display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:12px}
.hse-position-item {border:1px solid var(--border,#d5dce5);border-radius:10px;padding:14px;min-width:0}
.hse-position-item dl {display:grid;grid-template-columns:130px 1fr;gap:6px 12px;font-size:13px}
.hse-position-item dt {color:var(--text-muted,#687385)}
.hse-position-item dd {margin:0;overflow-wrap:anywhere}
.hse-position-item .table-actions {margin-top:12px}

.org-modal [hidden] {display:none !important}
.org-modal .check-field {display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:8px;text-transform:none;letter-spacing:normal}
.org-modal .check-field input[type=checkbox] {width:16px;min-width:16px;flex:0 0 16px;margin:0}
.hse-requirement-editor .form-grid {box-shadow:none;border:0;padding:0;gap:14px 18px}

/* v5.01.003-alpha — таблицы служб предприятия используют всю доступную
   ширину рабочей области. Ограничение org-page в 1500 px оставляло большие
   пустые поля на широких мониторах. Левое меню и общая шапка не меняются;
   формы/модальные окна сохраняют свои штатные ограничения ширины. */
:is(
  #view-organization,
  #view-maintenance,
  #view-quality,
  #view-procurement,
  #view-legal,
  #view-it_helpdesk,
  #view-hse
) > .org-page {
  width: 100%;
  max-width: none;
  margin-left: 0;
  margin-right: 0;
  box-sizing: border-box;
}

/* HR уже не использует org-page, но явно фиксируем тот же контракт ширины. */
#view-hr {
  width: 100%;
  max-width: none;
}

/* Табличные контейнеры растягиваются на всю ширину страницы, при этом
   существующий overflow остаётся ответственным за узкие экраны. */
:is(
  #view-organization,
  #view-maintenance,
  #view-quality,
  #view-legal,
  #view-it_helpdesk,
  #view-hse,
  #view-hr
) .users-table-wrap,
#view-procurement .proc-table-wrap {
  width: 100%;
  max-width: none;
  box-sizing: border-box;
}

:is(
  #view-organization,
  #view-maintenance,
  #view-quality,
  #view-legal,
  #view-it_helpdesk,
  #view-hse,
  #view-hr
) table.users-table,
#view-procurement table.proc-table {
  width: 100%;
}


/* v5.01.004-alpha — поздняя привязка коммерческого заказа к существующей БС */
.project-bs-missing { color: var(--danger, #b42318); font-weight: 700; }
.project-bs-link-inline {
  display: flex;
  align-items: center;
  gap: 6px;
  flex: 1 1 330px;
  min-width: 260px;
}
.project-bs-link-inline .eng-sel { flex: 1 1 220px; min-width: 170px; }
.project-bs-link-inline .btn-secondary { white-space: nowrap; }
@media (max-width: 760px) {
  .project-bs-link-inline { min-width: 0; width: 100%; flex-wrap: wrap; }
  .project-bs-link-inline .eng-sel { flex: 1 1 100%; }
}

/* ── v5.02.005-alpha: Судоку на главной ─────────────────────────────── */
.sudoku-card { user-select: none; }
.sudoku-head { align-items: flex-start; gap: 8px; }
.sudoku-head-main { min-width: 0; }
.sudoku-head-main h3 { margin-bottom: 4px; }
.sudoku-head-actions {
  display: flex; align-items: center; justify-content: flex-end; gap: 8px;
  flex-wrap: wrap;
}
.sudoku-difficulty-label {
  display: block; margin: 0 0 3px; font-size: 9.5px; line-height: 1.1;
  color: var(--ink-mute); font-weight: 600;
}
.sudoku-difficulty {
  height: 26px; max-width: 112px; padding: 2px 24px 2px 7px;
  border: 1px solid var(--rule); border-radius: 6px;
  background: var(--paper-soft); color: var(--ink); font-size: 10.5px;
}
.sudoku-toggle { min-width: 58px; }
.sudoku-body[hidden] { display: none !important; }
.sudoku-card.is-collapsed { padding-bottom: 10px; }
.sudoku-card.is-collapsed .sudoku-head { margin-bottom: 0; }
.sudoku-grid {
  display: grid; grid-template-columns: repeat(9, minmax(0, 1fr));
  width: 100%; max-width: 288px; margin: 2px auto 12px;
  border-top: 2px solid var(--ink-mute); border-left: 2px solid var(--ink-mute);
  background: var(--paper); box-sizing: border-box;
}
.sudoku-cell {
  aspect-ratio: 1; min-width: 0; padding: 0;
  border: 0; border-right: 1px solid var(--rule); border-bottom: 1px solid var(--rule);
  border-radius: 0; background: var(--paper); color: var(--blue);
  font: 650 14px/1 var(--mono); cursor: pointer;
  transition: background .08s, color .08s, box-shadow .08s;
}
.sudoku-cell:nth-child(3n) { border-right: 2px solid var(--ink-mute); }
.sudoku-cell:nth-child(n+19):nth-child(-n+27),
.sudoku-cell:nth-child(n+46):nth-child(-n+54),
.sudoku-cell:nth-child(n+73):nth-child(-n+81) { border-bottom: 2px solid var(--ink-mute); }
.sudoku-cell.fixed { background: var(--paper-soft); color: var(--ink); font-weight: 750; }
.sudoku-cell.related { background: color-mix(in srgb, var(--blue-soft) 55%, var(--paper)); }
.sudoku-cell.selected {
  position: relative; z-index: 1; background: var(--blue-soft);
  box-shadow: inset 0 0 0 2px var(--blue);
}
.sudoku-cell.conflict { background: var(--accent-soft); color: var(--accent); }
.sudoku-cell.wrong { color: var(--accent); box-shadow: inset 0 0 0 2px var(--accent); }
.sudoku-cell:focus-visible { outline: 2px solid var(--blue); outline-offset: -2px; }
.sudoku-keypad {
  display: grid; grid-template-columns: repeat(10, minmax(0, 1fr)); gap: 4px;
  margin: 0 0 9px;
}
.sudoku-keypad button {
  height: 28px; min-width: 0; padding: 0;
  border: 1px solid var(--rule); border-radius: 6px;
  background: var(--paper-soft); color: var(--ink); font: 650 12px/1 var(--mono);
  cursor: pointer;
}
.sudoku-keypad button:hover { border-color: var(--blue); background: var(--blue-soft); }
.sudoku-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; }
.sudoku-actions .btn-secondary { min-height: 30px; padding: 5px 8px; font-size: 11.5px; }
.sudoku-status {
  min-height: 30px; margin-top: 8px; color: var(--ink-mute);
  font-size: 10.5px; line-height: 1.35; text-align: center;
}
html[data-theme="dark"] .sudoku-cell.related {
  background: color-mix(in srgb, var(--blue-soft) 72%, var(--paper));
}
@media (max-width: 1180px) {
  .sudoku-grid { max-width: 306px; }
}
@media (max-width: 420px) {
  .sudoku-head { align-items: stretch; }
  .sudoku-head-actions { gap: 6px; }
  .sudoku-toggle { min-width: 0; }
}

/* v5.02.008-alpha — шахматы: квадратная доска и контрастные поля */
@media (min-width: 1181px) {
  .home-rail > .rail-card:not(.chess-card):not(.checkers-card) { width: 336px; align-self: flex-end; }
  .chess-card, .checkers-card { width: 392px; align-self: stretch; }
}
.chess-card { user-select: none; }
.chess-head { align-items: flex-start; gap: 8px; }
.chess-head-main { min-width: 0; }
.chess-head-main h3 { margin-bottom: 4px; }
.chess-head-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; justify-content: flex-end; }
.chess-difficulty-label { display: block; font-size: 10.5px; color: var(--ink-mute); margin-bottom: 3px; }
.chess-difficulty { width: 112px; min-height: 28px; padding: 3px 24px 3px 7px; font-size: 11.5px; }
.chess-toggle { min-width: 58px; }
.chess-body[hidden] { display: none !important; }
.chess-card.is-collapsed { padding-bottom: 10px; }
.chess-card.is-collapsed .chess-head { margin-bottom: 0; }
.chess-player-hint { margin: 0 0 7px; color: var(--ink-mute); font-size: 11px; }
.chess-board {
  display: grid;
  grid-template-columns: repeat(8, minmax(0, 1fr));
  grid-template-rows: repeat(8, minmax(0, 1fr));
  width: min(100%, 360px);
  aspect-ratio: 1 / 1;
  margin: 0 auto 9px;
  border: 1px solid #17191d;
  border-radius: 8px;
  overflow: hidden;
  box-shadow: 0 1px 4px rgb(0 0 0 / 14%);
}
.chess-square {
  position: relative;
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
  min-width: 0;
  min-height: 0;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border: 0;
  padding: 0;
  margin: 0;
  cursor: pointer;
  font: inherit;
}
.chess-square.light { background: #f7f7f3; }
.chess-square.dark { background: #30343a; }
.chess-square:hover { box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--blue) 55%, transparent); }
.chess-square.selected { box-shadow: inset 0 0 0 3px var(--blue); z-index: 1; }
.chess-square.last-move::before {
  content: '';
  position: absolute;
  inset: 0;
  background: color-mix(in srgb, var(--blue) 13%, transparent);
  pointer-events: none;
}
.chess-square.legal-target::after {
  content: '';
  position: absolute;
  width: 22%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: color-mix(in srgb, var(--blue) 58%, transparent);
  pointer-events: none;
}
.chess-square.legal-capture::after {
  content: '';
  position: absolute;
  inset: 8%;
  border: 3px solid color-mix(in srgb, var(--blue) 58%, transparent);
  border-radius: 50%;
  pointer-events: none;
}
.chess-piece {
  position: relative;
  z-index: 2;
  font-family: "Segoe UI Symbol", "Noto Sans Symbols 2", serif;
  font-size: clamp(26px, 7vw, 40px);
  line-height: 1;
  pointer-events: none;
}
.chess-piece.white { color: #fff; -webkit-text-stroke: .35px #111; text-shadow: 0 1px 2px rgb(0 0 0 / 75%); }
.chess-piece.black { color: #111; -webkit-text-stroke: .35px #fff; text-shadow: 0 1px 1px rgb(255 255 255 / 55%); }
.chess-file, .chess-rank {
  position: absolute;
  z-index: 3;
  font-size: 8px;
  font-weight: 700;
  line-height: 1;
  color: color-mix(in srgb, var(--ink-mute) 82%, transparent);
  pointer-events: none;
}
.chess-file { right: 2px; bottom: 2px; }
.chess-rank { left: 2px; top: 2px; }
.chess-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; }
.chess-actions .btn-secondary { min-height: 30px; padding: 5px 8px; font-size: 11.5px; }
.chess-status { min-height: 32px; margin-top: 7px; color: var(--ink-mute); font-size: 11px; line-height: 1.35; }
html[data-theme="dark"] .chess-square.light { background: #ecece8; }
html[data-theme="dark"] .chess-square.dark { background: #25282d; }
html[data-theme="dark"] .chess-piece.white { color: #fff; }
@media (max-width: 1180px) {
  .chess-card { width: auto; align-self: stretch; }
  .chess-board { width: min(100%, 360px); }
}
@media (max-width: 520px) {
  .chess-head { align-items: stretch; }
  .chess-head-actions { gap: 6px; }
  .chess-toggle { min-width: 0; }
}


/* v5.02.009-alpha — русские шашки: карточка под шахматами */
.checkers-card { user-select: none; }
.checkers-head { align-items: flex-start; gap: 8px; }
.checkers-head-main { min-width: 0; }
.checkers-head-main h3 { margin-bottom: 4px; }
.checkers-head-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; justify-content: flex-end; }
.checkers-options { display:flex; gap:8px; align-items:flex-end; flex-wrap:wrap; }
.checkers-option-label { display:grid; gap:3px; font-size:10.5px; color:var(--ink-mute); }
.checkers-difficulty, .checkers-side { width:112px; min-height:28px; padding:3px 24px 3px 7px; font-size:11.5px; }
.checkers-side { width:88px; }
.checkers-toggle { min-width: 58px; }
.checkers-body[hidden] { display: none !important; }
.checkers-card.is-collapsed { padding-bottom: 10px; }
.checkers-card.is-collapsed .checkers-head { margin-bottom: 0; }
.checkers-player-hint { margin: 0 0 7px; color: var(--ink-mute); font-size: 11px; }
.checkers-board {
  display: grid;
  grid-template-columns: repeat(8, minmax(0, 1fr));
  grid-template-rows: repeat(8, minmax(0, 1fr));
  width: min(100%, 360px);
  aspect-ratio: 1 / 1;
  margin: 0 auto 9px;
  border: 1px solid #17191d;
  border-radius: 8px;
  overflow: hidden;
  box-shadow: 0 1px 4px rgb(0 0 0 / 14%);
}
.checkers-square {
  position: relative;
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
  min-width: 0;
  min-height: 0;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border: 0;
  padding: 0;
  margin: 0;
  cursor: pointer;
  font: inherit;
}
.checkers-square.light { background: #f7f7f3; }
.checkers-square.dark { background: #7f8791; }
.checkers-square:hover { box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--blue) 55%, transparent); }
.checkers-square.unplayable { cursor: default; }
.checkers-square.unplayable:hover { box-shadow: none; }
.checkers-square.selected { box-shadow: inset 0 0 0 3px var(--blue); z-index: 1; }
.checkers-square.last-move::before {
  content: '';
  position: absolute;
  inset: 0;
  background: color-mix(in srgb, var(--blue) 13%, transparent);
  pointer-events: none;
}
.checkers-square.legal-target::after {
  content: '';
  position: absolute;
  width: 22%;
  aspect-ratio: 1;
  border-radius: 50%;
  background: color-mix(in srgb, var(--blue) 68%, transparent);
  pointer-events: none;
  z-index: 3;
}
.checkers-square.legal-capture::after {
  content: '';
  position: absolute;
  inset: 9%;
  border: 3px solid color-mix(in srgb, var(--blue) 72%, transparent);
  border-radius: 50%;
  pointer-events: none;
  z-index: 3;
}
.checkers-piece {
  position: relative;
  z-index: 2;
  display: grid;
  place-items: center;
  width: 72%;
  aspect-ratio: 1 / 1;
  border-radius: 50%;
  pointer-events: none;
  box-sizing: border-box;
  box-shadow: inset 0 -4px 0 rgb(0 0 0 / 18%), 0 2px 4px rgb(0 0 0 / 32%);
}
.checkers-piece.white { background: #fff; border: 2px solid #c7c9cc; }
.checkers-piece.black { background: #101114; border: 2px solid #030304; }
.checkers-piece.king::after {
  content: '♛';
  font-family: "Segoe UI Symbol", "Noto Sans Symbols 2", serif;
  font-size: clamp(18px, 5vw, 28px);
  line-height: 1;
}
.checkers-piece.white.king::after { color: #22252a; }
.checkers-piece.black.king::after { color: #f3f3ef; }
.checkers-file, .checkers-rank {
  position: absolute;
  z-index: 4;
  font-size: 8px;
  font-weight: 700;
  line-height: 1;
  color: color-mix(in srgb, var(--ink-mute) 82%, transparent);
  pointer-events: none;
}
.checkers-file { right: 2px; bottom: 2px; }
.checkers-rank { left: 2px; top: 2px; }
.checkers-actions { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 7px; }
.checkers-actions .btn-secondary { min-height: 30px; padding: 5px 8px; font-size: 11.5px; }
.checkers-status { min-height: 32px; margin-top: 7px; color: var(--ink-mute); font-size: 11px; line-height: 1.35; }

/* v5.02.010-alpha — более светлые тёмные клетки шашек для контраста с чёрными фигурами */
html[data-theme="dark"] .checkers-square.light { background: #ecece8; }
html[data-theme="dark"] .checkers-square.dark { background: #737b85; }
@media (max-width: 1180px) {
  .checkers-card { width: auto; align-self: stretch; }
  .checkers-board { width: min(100%, 360px); }
}
@media (max-width: 520px) {
  .checkers-head { align-items: stretch; }
  .checkers-head-actions { gap: 6px; }
  .checkers-toggle { min-width: 0; }
}

/* v5.02.012-alpha — material-first center + full-width consolidated BOM */
.mat-page.mat-page-single { display:block; width:100%; }
.mat-bom-full { width:100%; max-width:none !important; min-width:0; }
.bom-full-head { display:flex; align-items:center; justify-content:space-between; gap:14px; flex-wrap:wrap; }
.bom-scope-switch { display:inline-flex; align-items:center; gap:3px; padding:3px; border:1px solid var(--line); border-radius:10px; background:var(--paper-soft); }
.bom-scope-btn { border:0; background:transparent; color:var(--ink); border-radius:7px; padding:7px 14px; cursor:pointer; font-weight:700; }
.bom-scope-btn.active { background:var(--accent); color:#fff; }
.bom-scope-panel[hidden], .bom-report-frame[hidden] { display:none !important; }
.bom-mode-hint { padding:0 4px 8px; }
.bom-report-full { width:100%; max-width:none; min-height:320px; overflow:auto; }
.bom-report-full .bom-report-table { min-width:1100px; width:100%; }

.ms-concept-note { margin:0 0 12px; padding:10px 12px; border:1px solid var(--line); border-radius:9px; background:var(--paper-soft); color:var(--ink-soft); }
.ms-group-table { min-width:1500px; }
.ms-group-row > td { vertical-align:top; }
.ms-group-actions { min-width:150px; }
.ms-group-actions .ms-group-toggle,
.ms-group-actions .ms-group-save { display:block; width:100%; margin:0 0 6px; }
.ms-group-detail-row > td { padding:0 !important; background:var(--paper-soft); }
.ms-group-details { padding:14px 16px 16px; border-top:1px solid var(--line); border-bottom:1px solid var(--line); }
.ms-detail-head { display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; margin-bottom:10px; }
.ms-detail-head > span { color:var(--ink-mute); font-size:12px; }
.ms-source-table { width:100%; border-collapse:collapse; font-size:12px; }
.ms-source-table th,
.ms-source-table td { padding:7px 8px; border-bottom:1px solid var(--line); text-align:left; vertical-align:top; }
.ms-source-table th { background:var(--paper); color:var(--ink-mute); font-weight:700; position:static; }
.ms-source-table td small { display:block; margin-top:3px; color:var(--ink-mute); }
.ms-source-table .num { text-align:right; white-space:nowrap; }
html[data-theme="dark"] .ms-concept-note { background:var(--paper-soft); }
@media (max-width:1000px) {
  .bom-full-head { align-items:flex-start; }
  .bom-scope-switch { width:100%; }
  .bom-scope-btn { flex:1; }
  .ms-group-details { padding:10px; overflow:auto; }
  .ms-source-table { min-width:980px; }
}

/* v5.02.014-alpha — пакетная сдача / приёмка операций */
.prod-batch-open{white-space:nowrap}
.prod-batch-modal-card{width:min(1500px,96vw);max-width:none;max-height:94vh;display:flex;flex-direction:column;overflow:hidden}
.prod-batch-head{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;padding-bottom:10px;border-bottom:1px solid var(--rule-soft)}
.prod-batch-head h3{margin:0 0 4px}
.prod-batch-toolbar{display:flex;gap:10px;align-items:end;flex-wrap:wrap;padding:12px 0}
.prod-batch-toolbar label{display:flex;flex-direction:column;gap:4px;min-width:300px;font-size:12px}
.prod-batch-modes{display:flex;gap:2px;padding:3px;border:1px solid var(--rule-soft);border-radius:8px;background:var(--panel-soft,#f4f6f8)}
.prod-batch-modes button{border:0;background:transparent;padding:7px 14px;border-radius:6px;cursor:pointer;font:inherit}
.prod-batch-modes button.active{background:var(--accent,#c62f34);color:#fff}
.prod-batch-modes button:disabled{opacity:.45;cursor:not-allowed}
.prod-batch-filters{display:flex;align-items:end;gap:8px;flex-wrap:wrap;padding:8px 0 10px;border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft)}
.prod-batch-filters>input{min-width:270px;flex:1 1 320px}
.prod-batch-filters label{display:flex;gap:5px;align-items:center;font-size:12px;white-space:nowrap}
.prod-batch-filters label input{width:110px}
.prod-batch-selection{font-weight:600;margin-left:auto;white-space:nowrap}
.prod-batch-body{flex:1 1 auto;min-height:220px;overflow:auto;padding:10px 2px}
.prod-batch-group{border:1px solid var(--rule-soft);border-radius:8px;margin-bottom:9px;background:var(--panel-bg,#fff);overflow:hidden}
.prod-batch-group>summary{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:10px 12px;cursor:pointer;font-weight:600;background:var(--panel-soft,#f7f8fa)}
.prod-batch-counts{font-weight:400;font-size:12px;color:var(--muted)}
.prod-batch-group-tools{display:flex;gap:12px;align-items:center;flex-wrap:wrap;padding:8px 10px;border-top:1px solid var(--rule-soft)}
.prod-batch-table th:first-child,.prod-batch-table td:first-child{width:42px;text-align:center}
.prod-batch-table tr.is-blocked{opacity:.62}
.prod-batch-table tr.is-batch-selected>td{background:var(--blue-soft,#e8eef8)}
.prod-batch-table tr.is-batch-selected>td:first-child{box-shadow:inset 3px 0 var(--blue,#2a529a)}
.prod-batch-table input[type="checkbox"]{width:17px;height:17px;accent-color:var(--blue,#2a529a);cursor:pointer}
.prod-batch-table input[type="checkbox"]:disabled{cursor:not-allowed}
.prod-batch-prepare{padding:10px 12px;margin-top:10px;border:1px solid var(--rule-soft);border-radius:8px;background:var(--panel-soft,#f7f8fa)}
.prod-batch-prepare-grid{display:grid;grid-template-columns:minmax(250px,1fr) minmax(250px,1fr);gap:10px;margin-bottom:6px}
.prod-batch-prepare-grid label{display:flex;flex-direction:column;gap:4px;font-size:12px}
.prod-batch-prepare-grid .wide-2{grid-column:1/-1}
.prod-batch-empty{padding:32px;text-align:center;color:var(--muted)}
.prod-batch-actions{flex:0 0 auto;border-top:1px solid var(--rule-soft);padding-top:10px}
.prod-batch-history td{vertical-align:top}
@media(max-width:900px){.prod-batch-modal-card{width:98vw}.prod-batch-toolbar label{min-width:220px}.prod-batch-prepare-grid{grid-template-columns:1fr}.prod-batch-prepare-grid .wide-2{grid-column:auto}.prod-batch-group>summary{align-items:flex-start;flex-direction:column;gap:4px}}

/* v5.02.015-alpha — UID и прослеживаемость ДСЕ */
.dse-trace-badge{font-size:10px;padding:2px 6px;border-radius:999px;white-space:nowrap;background:var(--surface-2,#eef1f5);color:var(--text-muted,#5d6672)}
.dse-trace-badge.trace-individual{background:rgba(36,117,208,.12);color:#245f9e}
.dse-trace-badge.trace-batch{background:rgba(57,135,84,.12);color:#2f6d45}
.dse-trace-badge.trace-none{opacity:.65}
.prod-trace-card{max-width:1180px!important;width:min(1180px,96vw)!important;max-height:92vh;overflow:auto}
.prod-trace-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px}
.prod-trace-head h3{margin:0 0 4px}
.prod-trace-order{padding:10px 12px;border:1px solid var(--border,#dce1e7);border-radius:10px;background:var(--surface-2,#f7f8fa);margin-bottom:10px}
.prod-trace-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.prod-trace-toolbar input:first-child{min-width:320px;flex:1}.prod-trace-toolbar input:nth-child(2){width:210px}
.prod-trace-list{display:grid;gap:10px}
.prod-trace-group{border:1px solid var(--border,#dce1e7);border-radius:10px;padding:12px;background:var(--surface,#fff)}
.prod-trace-group-main{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.prod-trace-title{font-weight:700;font-size:15px}.prod-trace-uid{border:1px solid var(--border,#dce1e7);background:var(--surface-2,#f7f8fa);border-radius:7px;padding:6px 9px;cursor:pointer;font-size:12px}
.prod-trace-uid:hover,.prod-trace-piece:hover{border-color:var(--accent,#2f6fbe)}
.prod-trace-material{margin-top:8px;padding:7px 9px;border-radius:7px;background:rgba(73,133,91,.08);font-size:12px}
.prod-trace-pieces,.prod-trace-events{margin-top:9px}.prod-trace-pieces summary,.prod-trace-events summary{cursor:pointer;font-weight:600;font-size:12px}
.prod-trace-piece-grid{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;max-height:180px;overflow:auto}
.prod-trace-piece{border:1px solid var(--border,#dce1e7);background:var(--surface-2,#f7f8fa);border-radius:6px;padding:5px 7px;cursor:pointer;font-size:11px}.prod-trace-piece span{opacity:.65}
.prod-trace-event{display:grid;grid-template-columns:145px 130px minmax(220px,1fr) minmax(140px,220px);gap:8px;padding:6px 0;border-bottom:1px solid var(--border-soft,#edf0f3);font-size:11px;align-items:center}
.prod-trace-event:last-child{border-bottom:0}.prod-trace-uid-cell .link-btn2{font-size:11px;padding:0}
@media(max-width:760px){.prod-trace-group-main{display:block}.prod-trace-uid{margin-top:8px}.prod-trace-event{grid-template-columns:1fr 1fr}.prod-trace-toolbar input:first-child,.prod-trace-toolbar input:nth-child(2){width:100%;min-width:0}}
/* v5.02.016-alpha — физическая маркировка UID */
.dse-mark-badge{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:20px;padding:0 5px;border-radius:6px;font-size:10px;font-weight:700;background:var(--surface-2,#eef1f5);color:var(--text-muted,#5d6672);border:1px solid var(--border,#dce1e7)}
.prod-trace-markline{margin-top:3px;color:var(--text-muted,#5d6672)}
.prod-trace-uid-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.prod-trace-scan-card{max-width:980px!important;width:min(980px,96vw)!important;max-height:92vh;overflow:auto}
.prod-trace-scan-row{display:flex;gap:8px;align-items:center;margin:8px 0 12px}.prod-trace-scan-row input{flex:1;font-size:18px;letter-spacing:.04em}
.prod-trace-scan-card-head{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;padding:12px;border:1px solid var(--border,#dce1e7);border-radius:10px;background:var(--surface-2,#f7f8fa)}
.prod-trace-scan-uid{font-size:18px;font-weight:800;margin-bottom:4px}
.prod-trace-mark-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.prod-trace-mark-editor{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap;margin:10px 0;padding:10px;border:1px solid var(--border,#dce1e7);border-radius:10px;background:var(--surface,#fff)}
.prod-trace-mark-editor label{display:flex;flex-direction:column;gap:4px;font-size:11px;font-weight:600}.prod-trace-mark-editor .grow{flex:1;min-width:240px}
.prod-trace-current-op{margin-top:10px;padding:12px;border:1px solid var(--border,#dce1e7);border-radius:10px;background:var(--surface,#fff)}
.prod-trace-op-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
@media(max-width:760px){.prod-trace-scan-card-head{display:block}.prod-trace-mark-actions{justify-content:flex-start;margin-top:8px}.prod-trace-mark-editor{display:block}.prod-trace-mark-editor label{margin-bottom:8px}.prod-trace-scan-row{align-items:stretch;flex-direction:column}}

/* v5.02.017-alpha — явный вход в реестр прослеживаемости */
.prod-trace-row-btn{min-width:34px;width:auto;padding-left:6px!important;padding-right:6px!important;font-size:10px;font-weight:700;letter-spacing:.25px}
.prod-trace-registry-card{max-width:1180px}
.prod-trace-registry-tools{display:flex;gap:8px;margin:12px 0}
.prod-trace-registry-tools .eng-inp{width:min(560px,100%)}
.prod-trace-registry-list{max-height:68vh;overflow:auto;border:1px solid var(--border,#d9dee6);border-radius:8px}
.prod-trace-registry-table{width:100%;margin:0}
.prod-trace-registry-table thead th{position:sticky;top:0;z-index:1;background:var(--panel-bg,#fff)}


/* v5.02.018 — партии запуска изделий и листовая маркировка */
.prod-launch-batch-row{background:color-mix(in srgb,var(--accent,#c62828) 5%,var(--card,#fff));font-weight:500}
.prod-launch-batch-row:hover{background:color-mix(in srgb,var(--accent,#c62828) 9%,var(--card,#fff))}
.prod-launch-child .prod-order-number-cell{padding-left:20px;color:var(--muted,#667085)}
.prod-batch-expand{border:0;background:transparent;cursor:pointer;font-size:14px;padding:2px 5px;color:inherit}
.prod-batch-labels-btn{min-width:34px;font-weight:700}
.pofc-launch-controls{display:flex;gap:10px;align-items:end;flex-wrap:wrap;margin:8px 0;padding:8px;border:1px solid var(--border,#d9dde5);border-radius:8px;background:var(--surface-soft,#f7f8fa)}
.pofc-launch-controls label,.pofc-batch-size-wrap{display:flex;gap:6px;align-items:center}
.pofc-batch-size{width:80px}
.pofc-serial-bulk{display:flex;flex-direction:column;gap:4px;margin-top:7px}.pofc-serial-bulk textarea{width:100%;min-height:92px;font-family:monospace}
.prod-launch-label-card{width:min(780px,96vw);max-width:780px;max-height:92vh;overflow:auto}.prod-launch-label-head{display:flex;flex-direction:column;gap:6px}.prod-launch-label-grid{display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:14px 16px;margin:16px 0 8px;align-items:start}.prod-launch-label-grid label{display:flex;flex-direction:column;gap:6px;font-weight:600}.prod-launch-label-main{grid-column:1/2}.prod-launch-label-side{grid-column:2/3;display:flex;flex-direction:column;gap:12px}.prod-launch-label-preview{grid-column:1/-1;border:1px solid var(--line,#d9dee7);border-radius:12px;background:var(--panel,#f7f9fc);padding:12px 14px;min-width:0}.prod-launch-label-designation{font-weight:700;font-size:15px;line-height:1.3;color:var(--text,#223)}.prod-launch-label-name{margin-top:4px;font-size:13px;line-height:1.35;color:var(--muted,#5f6b7a)}.prod-launch-label-badge{display:inline-flex;align-items:center;align-self:flex-start;padding:8px 10px;border-radius:999px;background:rgba(33,92,180,.08);color:var(--accent,#215cb4);font-weight:700;font-size:12px;white-space:nowrap}.prod-launch-label-card .modal-actions{margin-top:18px}.prod-launch-label-card .eng-sel{width:100%;min-width:0}.prod-launch-label-card .modal-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}@media(max-width:760px){.prod-launch-label-card{width:min(96vw,96vw)}.prod-launch-label-grid{grid-template-columns:1fr}.prod-launch-label-side{grid-column:1/2}}

.pofc-existing-batch{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:7px 0}.pofc-existing-size{width:80px}

/* v5.02.019-alpha — формирование партии из выбранных существующих изделий */
.prod-launch-select-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.prod-launch-select-actions .btn-primary:disabled{opacity:.5;cursor:not-allowed}
.prod-select-col{width:34px!important;min-width:34px!important;max-width:34px!important;text-align:center!important}
.prod-select-col input[type="checkbox"]{width:16px;height:16px;cursor:pointer;vertical-align:middle}
.prod-order-row.is-launch-selected>td{background:color-mix(in srgb,var(--accent,#c62828) 8%,var(--card,#fff))}
.prod-launch-selected-card{width:min(620px,94vw)}
.prod-launch-selected-label{display:flex;flex-direction:column;gap:5px;margin:14px 0;font-size:12px;font-weight:600}
.prod-launch-selected-label .eng-inp{width:100%}
.prod-launch-child .prod-order-number-cell{padding-left:20px;color:var(--muted,#667085)}
@media(max-width:900px){.prod-launch-select-actions{width:100%}.prod-launch-select-actions button{flex:1 1 auto}}

/* v5.04.001: расчёт излишков в широкой ячейке наименования материала. */
.mat-recovery{margin-top:6px;text-align:left;white-space:normal;min-width:220px;font-family:inherit}
.mat-recovery summary{cursor:pointer;font-size:11px;color:var(--text-secondary)}
.mat-recovery[open]{padding:8px;border:1px solid var(--rule-soft);border-radius:5px}
.mat-recovery .fl{margin-top:8px;display:flex;flex-direction:column;gap:4px}
.mat-recovery small{display:block;margin-top:6px;font-size:10px}

/* v5.04.005-alpha — игровой центр и компактный журнал производства. */
.games-page { max-width: none; width: 100%; box-sizing: border-box; }
.games-grid { display:grid; grid-template-columns:repeat(2,minmax(340px,1fr)); gap:16px; align-items:start; }
.games-grid > .rail-card { margin:0; min-width:0; }
.game-standings-card { margin-top:18px; padding:16px; background:var(--paper); border:1px solid var(--line); border-radius:12px; }
.game-standings-wrap { overflow-x:auto; }
.game-standings-table { width:100%; min-width:720px; }
.game-ai-level { display:flex; align-items:center; gap:8px; margin:8px 0; color:var(--ink-mute); font-size:13px; }
.game-ai-level select { min-width:130px; }
.sea-manual-panel { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:10px; margin:8px 0 12px; border:1px solid var(--line); border-radius:10px; background:var(--paper-soft); }
.sea-manual-panel > b { width:100%; }
.sea-manual-panel .btn-secondary.active { outline:2px solid var(--accent); }

/* Шашки — плоское 2D-представление без объёмных теней. */
.checkers-piece { box-shadow:none !important; }
.checkers-piece.white { background:#fff; border:3px solid #9ca3af; }
.checkers-piece.black { background:#15171a; border:3px solid #555b63; }
.checkers-piece.king::after { text-shadow:none; }

/* Журнал производственных заказов всегда укладывается в доступную ширину. */
#prod_order_list { width:100%; max-width:none; overflow-x:hidden; }
#prod_order_list .prod-journal-table { width:100%; min-width:0 !important; table-layout:fixed; }
#prod_order_list .prod-journal-table th,
#prod_order_list .prod-journal-table td { min-width:0 !important; padding-left:5px; padding-right:5px; overflow-wrap:anywhere; }
#prod_order_list .prod-journal-table col.bscol-xs { width:4%; }
#prod_order_list .prod-journal-table col.bscol-sm { width:6.2%; }
#prod_order_list .prod-journal-table col.bscol-prodname { width:10.5%; }
#prod_order_list .prod-journal-table col.bscol-date { width:7%; }
#prod_order_list .prod-journal-table col.bscol-tag { width:7%; }
#prod_order_list .prod-journal-table col.prod-select-col { width:28px; }
#prod_order_list .prod-journal-table col.prod-actions-col { width:12%; }
#prod_order_list .prod-journal-table td.order-acts { min-width:0 !important; white-space:normal; }
#prod_order_list .prod-journal-table .order-actions-bar,
#prod_order_list .prod-journal-table .order-acts { flex-wrap:wrap; }

.org-employee-photo-button { display:inline-flex; padding:0; margin:0 10px 0 0; border:0; background:transparent; cursor:zoom-in; vertical-align:middle; }
.org-employee-photo-button .org-employee-avatar { margin-right:0; }
.org-photo-lightbox { position:fixed; inset:0; z-index:3000; display:flex; align-items:center; justify-content:center; padding:32px; background:rgb(0 0 0 / 72%); }
.org-photo-lightbox-card { position:relative; max-width:min(900px,92vw); max-height:90vh; padding:12px; border-radius:12px; background:var(--paper); box-shadow:0 20px 70px rgb(0 0 0 / 40%); }
.org-photo-lightbox-card img { display:block; max-width:calc(92vw - 24px); max-height:calc(90vh - 64px); object-fit:contain; border-radius:8px; }
.org-photo-lightbox-close { position:absolute; top:8px; right:8px; z-index:2; }
.org-photo-lightbox-caption { margin:8px 42px 0 4px; font-weight:600; }
@media (max-width:900px) { .games-grid { grid-template-columns:1fr; } }
.summary-mode-label { display:flex; align-items:center; gap:7px; font-size:13px; color:var(--ink-mute); }
.summary-mode-label select { min-width:190px; }
.simplified-summary-grid { margin-top:14px; }
.simplified-bs-table { width:100%; }
.simplified-bs-table td:nth-child(2), .simplified-bs-table th:nth-child(2) { width:170px; }

/* v5.04.017 — показать/скрыть пароль во всех password-input */
.password-input-wrap {
  position: relative;
  display: block;
  width: 100%;
  min-width: 0;
}
.password-input-wrap > input {
  width: 100%;
  box-sizing: border-box;
  padding-right: 42px !important;
}
.password-eye-btn {
  position: absolute;
  right: 7px;
  top: 50%;
  transform: translateY(-50%);
  width: 30px;
  height: 30px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: 6px;
  background: transparent;
  color: var(--ink-mute, #6b7280);
  cursor: pointer;
  z-index: 2;
}
.password-eye-btn:hover,
.password-eye-btn:focus-visible {
  background: rgba(127, 127, 127, .10);
  color: var(--ink, #1b2430);
  outline: none;
}
.password-eye-btn svg {
  width: 19px;
  height: 19px;
  fill: currentColor;
}
.password-eye-btn.is-visible {
  color: var(--accent, #b71c1c);
}
/* chat.js historically styled only input[type=password]; preserve the same
   field box after the eye temporarily switches the input to type=text. */
.sgem-chat-key-form .password-input-wrap input {
  width: 100%; box-sizing: border-box; padding: 10px 42px 10px 12px;
  border: 1px solid var(--rule, #d8dee7); border-radius: 8px;
  background: var(--paper, #fff); color: var(--ink, #1b2430);
}

/* v5.05.000-alpha — позиционная калькуляция БС */
.common-alloc { display:block; font-size:11px; margin-top:4px; color:var(--muted, #666); }
.common-alloc select { font-size:11px; max-width:240px; margin-right:6px; }
.tkp-table th, .tkp-table td { white-space:nowrap; }
#logistics_table td input[data-f="tariff_value"], #logistics_table td input[data-f="distance_km"],
#logistics_table td input[data-f="oversize_cost"], #logistics_table td input[data-f="unloading_cost"] { width:90px; }

/* v5.05.001: scrollable stage register with persistent column headings. */
.planning-table-order { max-height: 65vh; overflow: auto; }
.planning-table-order .oplan-readonly-table { border-collapse: separate; border-spacing: 0; overflow: visible; }
.planning-table-order .oplan-readonly-table thead th { position: sticky; top: 0; z-index: 5; background: var(--paper-soft, #eef2f7); }
.planning-table-order tr[hidden] { display: none; }
.oplan-gantt { margin-top: 18px; }
.oplan-gantt > summary { cursor: pointer; font-weight: 700; padding: 12px 0; }
.oplan-contract { margin: 14px 0; }

/* The executor picker is a child dialog above the unchanged batch selection. */
#prod_batch_prepare.prod-batch-prepare { position:fixed; inset:0; z-index:10; margin:0; padding:20px; background:rgba(15,23,42,.45); display:flex; align-items:center; justify-content:center; }
.prod-batch-executor-dialog { width:min(720px,100%); max-height:90vh; overflow:auto; padding:24px; border-radius:12px; background:var(--paper,#fff); box-shadow:0 18px 60px #0005; }
.prod-batch-executor-dialog .prod-batch-prepare-grid { grid-template-columns:1fr; }
.prod-batch-executor-dialog .wide-2 { grid-column:auto; }

/* v5.05.005 — выбор повторных согласующих графика */
.oplan-appr-carried{font-weight:600;color:var(--ink-mute)}
.oplan-appr-history{margin-top:10px}
.oplan-appr-history>summary{cursor:pointer;color:var(--ink-mute);font-weight:600}
.oplan-repeat-modal{width:min(680px,94vw)}
.oplan-repeat-list{display:grid;gap:8px;margin:14px 0}
.oplan-repeat-role{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;cursor:pointer}
.oplan-repeat-role.required{background:var(--surface-2,rgba(127,127,127,.06));cursor:default}
.oplan-repeat-role input{margin-top:3px}
.oplan-repeat-role span{display:grid;gap:2px}
.oplan-repeat-role small{color:var(--ink-mute)}

/* Cartridge accounting is private to the HelpDesk stock dialog. */
.it-cartridge-dialog .modal-card{width:min(1100px,96vw);max-width:1100px}
.it-cartridge-dialog table{width:100%;min-width:790px;border-collapse:collapse;font-size:12px;margin:12px 0}
.it-cartridge-dialog th,.it-cartridge-dialog td{padding:10px 12px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line,#dce1e8)}
.it-cartridge-dialog th{background:var(--surface-2,#f4f6f9);font-weight:600}
.it-cartridge-dialog th:first-child{width:35%}
.it-cartridge-dialog [data-it-cartridges]>h3{margin:20px 0 10px}
