/* admin.css — область управления: справочники (openDirectory), склад (openStock и
   stock.js), перевозка (openTrips), отчёты (openReports), первый запуск (openSetup),
   настройки (openSettings) и ресурсы (resources.js). Токены — в theme.css.

   Язык макетов Clients/Price/DirOperations/DirMaterials/DirCouriers, Stock, Courier,
   Reports, Setup, SettingsLab/Team/Links/Backups, Load и их окон: таблица со строкой
   48–56 px и шапкой на тоне меню, коды/номера/суммы/даты — JetBrains Mono, карточка
   1 px без тени, заголовок карточки с действием справа, окна с группами-капсом без
   рамки и светлым футером. Цвет дополняет подпись; тексты, порядок и DOM-контракты
   прежние.

   Границы, которые держит браузерная приёмка:
   - вкладки настроек остаются внутри [data-workspace=settings]; ARIA-связи, один
     tab stop и стрелки — от createWorkspace, здесь только вид;
   - в открытом окне каждый видимый control не ниже 31,5 px и целиком помещается в
     окно при 1440/1024/390; клавиатурный фокус не перекрывается липким футером;
   - колонки таблиц не прячутся (никакого display:none), узкая таблица прокручивается
     внутри .table-wrap; main > * не выходит за ширину экрана;
   - .resource-panel сохраняет minmax(0,1fr), .encrypted-backups — свою первую .action;
   - справочники (экраны 14–21) — общий движок dirScreen: список .dir-list и панель
     aside.dir-panel (не <dialog>: окна поверх неё остаются единственным dialog[open]);
     строка — кнопка .dir-row-open, фильтр «Действующие / Все» — сегмент .dir-seg.

   Правила ограничены своими экранами (main[data-view=…]) и своими окнами
   (dialog.admin-dialog и именованные классы): .orders-table и .table-wrap живут ещё
   у нарядов, зарплаты и денег. */

/* ====================================================== строка инструментов === */

/* Поиск, флажок архива и действие — одна строка над таблицей, без карточки:
   на макете это панель инструментов, а не блок содержимого. */
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="operations"], [data-view="materials"], [data-view="works"],
  [data-view="stock"]) > .bar {
  gap: var(--sp-2) var(--sp-2-5); margin-bottom: var(--sp-3);
}
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="operations"], [data-view="materials"], [data-view="works"]) > .bar > input[type="search"] {
  flex: 0 1 24rem; height: var(--control-h); font-size: var(--fs-12-5);
}
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="operations"], [data-view="materials"], [data-view="works"],
  [data-view="stock"]) > .bar > label {
  min-height: var(--control-h); font-size: var(--fs-12-5); color: var(--ink-2);
}
/* Кнопка добавления уходит вправо: на макете она стоит у правого края страницы. */
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="operations"], [data-view="materials"], [data-view="works"]) > .bar > button.action {
  margin-left: auto;
}
main[data-view="stock"] > .bar > button:nth-of-type(1) { margin-left: auto; }

/* ============================================== таблицы справочников и склада === */

/* Числа — моноширинные и вправо: колонку цен и остатков читают столбиком. */
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="operations"], [data-view="materials"], [data-view="works"],
  [data-view="stock"]) .table-wrap td.num {
  font: var(--fw-500) var(--fs-12-5)/1.35 var(--mono); color: var(--ink);
}
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="operations"], [data-view="materials"], [data-view="works"],
  [data-view="stock"]) .table-wrap td.row-acts {
  width: 1%;
}
/* Последняя колонка этих таблиц — «Действия»: её заголовок стоит над кнопками. */
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="operations"], [data-view="materials"], [data-view="works"],
  [data-view="stock"]) .table-wrap thead th:last-child {
  text-align: right;
}
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="operations"], [data-view="materials"], [data-view="works"],
  [data-view="stock"]) .table-wrap .row-acts button {
  margin-left: var(--sp-1-5);
}
/* Название — то, что ищут глазами; код и группа стоят тише. */
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="materials"]) .table-wrap tbody td:first-child,
main[data-view="operations"] .table-wrap tbody td:nth-child(3),
main[data-view="works"] .table-wrap tbody td:nth-child(2) {
  font-weight: var(--fw-600); color: var(--ink);
}
main:is([data-view="operations"], [data-view="works"]) .table-wrap tbody td:first-child {
  width: 1%; white-space: nowrap;
  font: var(--fw-500) var(--fs-12)/1.35 var(--mono); color: var(--muted);
}
main[data-view="operations"] .table-wrap tbody td:nth-child(2),
main[data-view="materials"] .table-wrap tbody td:nth-child(2),
main:is([data-view="counterparties"]) .table-wrap tbody td:nth-child(2) {
  color: var(--muted);
}
main[data-view="couriers"] .table-wrap tbody td:nth-child(2) {
  font: var(--fw-400) var(--fs-12-5)/1.35 var(--mono); color: var(--ink-2);
}
/* Устаревшая запись остаётся читаемой строкой, а не выцветшим пятном. */
main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
  [data-view="operations"], [data-view="materials"], [data-view="works"]) tr.off td:first-child::after {
  font-size: var(--fs-12); color: var(--muted);
}

/* ================================================================== склад === */

/* Макет «Склад»: красная плашка того, что заканчивается, список строками 56 px и
   панель материала справа. Панель sticky рядом со списком, пока контент шире
   980 px (окно ≥ 1212 px с меню 232); уже — выезжает поверх списка с затемнением,
   на телефоне — во весь экран. */
main[data-view="stock"] .stock-head { align-items: flex-end; flex-wrap: wrap; gap: var(--sp-3) var(--sp-4); margin: 0; }
main[data-view="stock"] .stock-head > div { flex: 1 1 260px; min-width: 0; }
main[data-view="stock"] .stock-title { display: flex; align-items: center; gap: var(--sp-2-5); flex-wrap: wrap; }
main[data-view="stock"] .stock-title .ro { padding: 3px 10px; border-radius: var(--radius-pill); font-weight: var(--fw-500); color: var(--ink-2); }
main[data-view="stock"] .stock-head .section-sub { max-width: none; line-height: 1.45; }
main[data-view="stock"] .stock-head .head-actions { gap: var(--sp-1-5); flex-wrap: wrap; flex: 0 0 auto; max-width: 100%; }
main[data-view="stock"] .stock-head .head-actions > button { height: var(--control-h-lg); padding-inline: var(--sp-4); }

.stock-pending {
  display: flex; align-items: center; gap: var(--sp-2-5) var(--sp-4); flex-wrap: wrap;
  margin: 0; padding: var(--sp-3) 14px; border-radius: var(--radius-card);
  background: var(--warn-soft); border: 1px solid var(--warn-line); color: var(--ink-2);
}
.stock-pending > div { flex: 1 1 18rem; display: grid; gap: 2px; font-size: var(--fs-12-5); line-height: 1.45; }
.stock-pending b { color: var(--warn); font-weight: var(--fw-600); font-size: var(--fs-13); }

.stock-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--sp-4); align-items: start; }
@media (min-width: 75.75rem) {
  .stock-layout.has-panel { grid-template-columns: minmax(0, 1fr) 420px; }
}
.stock-main { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.stock-main > input[type="search"] { height: 36px; padding: 0 var(--sp-3); font-size: var(--fs-13); }

.stock-short {
  display: flex; align-items: center; gap: var(--sp-2-5) 14px; flex-wrap: wrap;
  padding: var(--sp-3) 14px; border-radius: var(--radius-card);
  background: var(--danger-soft); border: 1px solid var(--danger-line); color: var(--ink-2);
}
.stock-short > b { font: var(--fw-600) var(--fs-20)/1 var(--mono); color: var(--danger); }
.stock-short > span { flex: 1 1 15rem; line-height: 1.45; }
.stock-short > button.ghost { border-color: var(--danger-line); }

.stock-list { display: grid; border: 1px solid var(--card-border); border-radius: var(--radius-panel); overflow: hidden; }
.stock-row {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--sp-1) var(--sp-3);
  width: 100%; min-height: 56px; padding: var(--sp-2) 14px; margin: 0;
  border: 0; border-top: 1px solid var(--row-rule); border-radius: 0;
  background: var(--surface); color: var(--ink); font: inherit; font-size: var(--fs-13); text-align: left; cursor: pointer;
}
.stock-row:first-child { border-top: 0; }
.stock-row:hover { background: var(--hover-bg); }
.stock-row.is-minus { background: var(--danger-faint); }
.stock-row[aria-pressed="true"] { background: var(--gray-25); box-shadow: inset 3px 0 0 var(--ink); }
.stock-row:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
.stock-row-main { display: flex; flex-direction: column; gap: var(--sp-1); min-width: 0; }
.stock-name { font-weight: var(--fw-500); overflow-wrap: anywhere; }
.stock-row-limit { display: flex; align-items: center; gap: var(--sp-2); min-width: 0; }
.stock-bar { position: relative; flex: 0 1 160px; min-width: 48px; height: 6px; border-radius: var(--radius-pill); background: var(--card-border); overflow: hidden; }
.stock-bar > span { position: absolute; inset: 0 auto 0 0; background: var(--ok); }
.stock-row:is(.is-short, .is-minus) .stock-bar > span { background: var(--danger); }
.stock-limit { font-size: var(--fs-12); color: var(--muted); white-space: nowrap; }
.stock-row:is(.is-short, .is-minus) .stock-limit { color: var(--danger); }
.stock-row-side { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; }
.stock-qty { font: var(--fw-600) var(--fs-13)/1.3 var(--mono); white-space: nowrap; }
.stock-row:is(.is-short, .is-minus) .stock-qty { color: var(--danger); }
.stock-tag { padding: 1px 7px; border-radius: var(--radius-pill); background: var(--danger-soft); color: var(--danger); font-size: var(--fs-11); font-weight: var(--fw-600); white-space: nowrap; }
.stock-row.is-minus .stock-tag { background: var(--danger); color: var(--ink-inverse); }
.stock-empty { margin: 0; padding: var(--sp-5); text-align: center; color: var(--muted); }
.stock-empty.is-ok { background: var(--ok-soft); color: var(--ok); }
.stock-blank { display: grid; gap: var(--sp-1-5); padding: var(--sp-5); }
.stock-blank b { font-size: var(--fs-14); font-weight: var(--fw-600); }
.stock-blank p { margin: 0; color: var(--ink-2); line-height: 1.5; max-width: 72ch; }
.stock-load-error {
  display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; padding: var(--sp-3) 14px;
  border-radius: var(--radius-card); background: var(--danger-soft); color: var(--danger); font-size: var(--fs-12-5);
}
.stock-load-error > span { flex: 1 1 14rem; }

/* Панель материала. */
.stock-panel {
  position: sticky; top: 72px; z-index: 2; display: flex; flex-direction: column; min-width: 0;
  max-height: calc(100vh - 96px); border: 1px solid var(--card-border); border-radius: var(--radius-panel);
  background: var(--surface); overflow: hidden;
}
.stock-scrim { position: fixed; inset: 0; z-index: 40; background: var(--overlay); }
@media (max-width: 75.6875rem) {
  .stock-panel {
    position: fixed; top: 12px; right: 12px; bottom: 12px; z-index: 50;
    width: min(460px, calc(100% - 24px)); max-height: none; box-shadow: var(--shadow-panel);
  }
}
@media (max-width: 37.5rem) {
  .stock-panel { inset: 0; width: 100%; border-radius: 0; border: 0; }
}
.stock-detail { display: flex; flex-direction: column; min-height: 0; flex: 1; }
.stock-detail-head { display: flex; align-items: flex-start; gap: var(--sp-2-5); padding: 14px var(--sp-4) var(--sp-2-5); }
.stock-detail-head > div { flex: 1; display: grid; gap: 3px; min-width: 0; }
.stock-detail-head h2 { margin: 0; font-size: var(--fs-17); font-weight: var(--fw-600); overflow-wrap: anywhere; }
.stock-detail-head button.stock-close { width: var(--control-h); padding: 0; font-size: var(--fs-17); }
.stock-balance { margin: 0; font: var(--fw-400) var(--fs-13)/1.4 var(--font); letter-spacing: 0; color: var(--ink-2); }
.stock-balance b { font-family: var(--mono); font-weight: var(--fw-600); color: var(--ink); }
.stock-balance b.is-short { color: var(--danger); }
.stock-detail-body { flex: 1; min-height: 0; overflow-y: auto; padding: 0 var(--sp-4) var(--sp-4); }
.stock-detail-body > .stock-pending { margin: var(--sp-2) 0 var(--sp-1); }
.stock-detail-body > .hint { margin: var(--sp-3) 0; }
.stock-detail [data-workspace^="stock:"] > .workspace-tabs {
  display: flex; width: 100%; margin: var(--sp-1) 0 14px; padding: 3px; gap: 2px; border-radius: var(--radius-card);
}
.stock-detail [data-workspace^="stock:"] > .workspace-tabs [role="tab"] { flex: 1; min-height: 30px; border-radius: var(--radius); font-size: var(--fs-12-5); }
.stock-detail .workspace-panel { display: grid; gap: var(--sp-2-5); }
.stock-detail .workspace-panel[hidden] { display: none; }
.stock-detail section { display: grid; gap: var(--sp-2-5); min-width: 0; }
.stock-lead { margin: 0; font-size: var(--fs-12-5); line-height: 1.45; color: var(--ink-2); }
.stock-detail .hint { margin: 0; font-size: var(--fs-12-5); color: var(--muted); line-height: 1.45; }
.stock-section-head { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2); }
.stock-section-head h3, .stock-caps { margin: 0; font-size: var(--fs-11); font-weight: var(--fw-600); letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.stock-caps { margin-top: var(--sp-1); }

.stock-count-form { display: grid; gap: var(--sp-1-5); }
.stock-count-row { display: flex; align-items: flex-end; gap: var(--sp-1-5); flex-wrap: wrap; }
.stock-count-row > label.field { margin: 0; width: 120px; gap: var(--sp-1); font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--ink-2); }
.stock-count-row input[name="fact"] { height: 34px; text-align: right; font-family: var(--mono); }
.stock-count-row input[name="reason"] { flex: 1 1 160px; min-width: 0; height: 34px; }
.stock-count-row input.invalid { border-color: var(--danger); }
.stock-count-row > button.action { height: 34px; }
.stock-count-diff { margin: 0; font-size: var(--fs-12-5); }
.stock-count-diff:empty { display: none; }
.stock-count-diff.is-minus { color: var(--danger); }
.stock-count-diff.is-plus { color: var(--ok); }
.stock-pending-note { margin: 0; padding: var(--sp-2) var(--sp-2-5); border-radius: var(--radius); background: var(--warn-soft); color: var(--warn); font-size: var(--fs-12-5); line-height: 1.45; }
.stock-count-form .error { margin: 0; font-size: var(--fs-12); }

.stock-detail .stock-entry {
  display: grid; gap: 3px; margin: 0; padding: var(--sp-2-5) var(--sp-3);
  border: 1px solid var(--card-border); border-radius: var(--radius-card); overflow-wrap: anywhere;
}
.stock-detail .stock-entry > b { font-size: var(--fs-13); font-weight: var(--fw-600); color: var(--ink); }
.stock-detail .stock-entry > p { margin: 0; font-size: var(--fs-12); color: var(--ink-2); }
.stock-detail .stock-entry > p.subline { color: var(--muted); }
.stock-detail .stock-entry > button { justify-self: start; margin-top: var(--sp-1); }
.stock-detail .stock-entry.is-reversed { opacity: .6; }
.stock-entry-head { display: flex; align-items: baseline; gap: var(--sp-2); }
.stock-entry-head > b { font-weight: var(--fw-600); }
.stock-delta { margin-left: auto; font: var(--fw-600) var(--fs-12-5)/1.3 var(--mono); white-space: nowrap; }
.stock-delta.is-minus { color: var(--danger); }
.stock-delta.is-plus { color: var(--ok); }
.stock-entry-meta { display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-12); color: var(--muted); }
.stock-entry-meta > span { flex: 1; }
.stock-entry-meta > button { height: 24px; min-height: 24px; padding: 0 var(--sp-2); border-radius: var(--radius-chip); font-size: var(--fs-12); }
/* История — лента без рамок, строки разделены линией, как на макете. */
.stock-detail .stock-moves { gap: 0; }
.stock-detail .stock-moves > .stock-entry { padding: var(--sp-2) 0; border: 0; border-top: 1px solid var(--row-rule); border-radius: 0; }
.stock-detail .stock-move.is-reversed .stock-entry-head > b { text-decoration: line-through; }

.stock-lot {
  display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; padding: var(--sp-2-5) var(--sp-3);
  border: 1px solid var(--card-border); border-radius: var(--radius-card); font-size: var(--fs-12-5);
}
.stock-lot.is-expired { border-color: var(--danger-line); }
.stock-lot > b { font: var(--fw-600) var(--fs-12-5)/1.3 var(--mono); }
.stock-lot-qty { font-family: var(--mono); }
.stock-lot-meta { font-size: var(--fs-12); color: var(--muted); }
.stock-pill { margin-left: auto; padding: 1px 7px; border-radius: var(--radius-pill); font-size: var(--fs-11); font-weight: var(--fw-600); }
.stock-pill.is-danger { background: var(--danger-soft); color: var(--danger); }
.stock-detail .stock-consumption.is-open {
  display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; padding: var(--sp-2) var(--sp-2-5);
  border-color: transparent; border-radius: var(--radius); background: var(--warn-soft); font-size: var(--fs-13);
}
.stock-detail .stock-consumption.is-open > span { flex: 1 1 160px; min-width: 0; }
.stock-detail .stock-consumption select { flex: none; width: auto; height: 30px; padding: 0 6px; border-radius: var(--radius-chip); font-size: var(--fs-12-5); }
.stock-ok { margin: 0; font-size: var(--fs-12-5); color: var(--ok); }

/* Окна прихода, списания, возврата и отмены — короткие, 480 px. */
dialog.stock-move-dialog { width: min(480px, calc(100vw - 2rem)); }
dialog.stock-move-dialog .stock-move-text { margin: 0; color: var(--ink-2); line-height: 1.45; font-size: var(--fs-13); }
dialog.stock-move-dialog .stock-move-pair { display: flex; gap: var(--sp-2-5); flex-wrap: wrap; }
dialog.stock-move-dialog .stock-move-pair > label.field { flex: none; min-width: 0; }
dialog.stock-move-dialog input[name="qty"] { width: 130px; }
dialog.stock-move-dialog input[name="amount"] { width: 160px; }
dialog.stock-move-dialog :is(input[name="qty"], input[name="amount"]) { font-family: var(--mono); text-align: right; }
dialog.stock-move-dialog .stock-unit-cost { margin: 0; font-size: var(--fs-12-5); color: var(--ink-2); }
dialog.stock-move-dialog .stock-move-doc > input { flex: 1 1 140px; min-width: 0; height: 36px; }
dialog.stock-move-dialog .stock-move-doc > input[name="lot"] { font-family: var(--mono); }
dialog.stock-move-dialog > form > input[name="reason"] { height: 36px; }

/* ============================================================== перевозка === */

/* Макет «Перевозка» (этап 2): шапка с индикатором автообновления, чипы-фильтры,
   карточка на курьера с аватаром и путевым листом, строка поездки сеткой
   «флажок · что и где · наряд · время · действия», чёрная плавающая панель выбора.
   Классы .trip-group / .trip.trip-<статус> — контракт браузерной приёмки. */
main[data-view="trips"] { padding-bottom: 96px; max-width: 1180px; margin: 0; }
/* Заголовок экрана 26 px на всех ширинах, как в макете (общий header.page на
   узком экране уменьшает его до 20). */
main[data-view="trips"] header.page h1, .dir-couriers header.page h1 { font-size: var(--fs-26); letter-spacing: -.01em; }
main[data-view="trips"] .trips-head-page { align-items: flex-end; gap: var(--sp-3) var(--sp-4); flex-wrap: wrap; }
main[data-view="trips"] .trips-head-page > div { flex: 1 1 280px; min-width: 0; }
main[data-view="trips"] .trips-head-page .section-sub { max-width: 720px; }
main[data-view="trips"] .trips-live {
  display: inline-flex; align-items: center; gap: var(--sp-2);
  font-size: var(--fs-12-5); color: var(--ink-2); white-space: nowrap;
}
main[data-view="trips"] .trips-live-dot { width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--ok); }
main[data-view="trips"].trips-offline .trips-live-dot { background: var(--danger); }

main[data-view="trips"] .trips-pending {
  position: sticky; top: var(--sp-2); z-index: 5;
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2-5) var(--sp-4);
  margin: 0 0 var(--sp-4); padding: var(--sp-3) 14px;
  background: var(--warn-soft); border: 1px solid var(--warn-line); border-radius: var(--radius-card);
}
main[data-view="trips"] .trips-pending[hidden] { display: none; }
main[data-view="trips"] .trips-pending-text { flex: 1 1 300px; line-height: 1.45; color: var(--ink-2); }
main[data-view="trips"] .trips-pending-text b { color: var(--warn); font-weight: var(--fw-600); }

main[data-view="trips"] .trips-chips { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin: 0 0 var(--sp-4); }
main[data-view="trips"] .trips-chips[hidden] { display: none; }
main[data-view="trips"] .trips-chip {
  display: inline-flex; align-items: center; gap: var(--sp-2); height: 34px; padding: 0 var(--sp-3);
  border: 1px solid var(--button-border); border-radius: var(--radius-pill);
  background: var(--surface); color: var(--ink); font-weight: var(--fw-500); box-shadow: none;
}
main[data-view="trips"] .trips-chip b { font: var(--fw-600) var(--fs-12)/1 var(--mono); }
main[data-view="trips"] .trips-chip[aria-checked="true"] { background: var(--ink); border-color: var(--ink); color: var(--ink-inverse); }
main[data-view="trips"] .trips-chip:hover:not([aria-checked="true"]) { border-color: var(--rule-strong); background: var(--hover-bg); }

main[data-view="trips"] .trips-error {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-3);
  margin: 0 0 var(--sp-4); padding: var(--sp-5);
  background: var(--danger-soft); border: 1px solid var(--danger-line); border-radius: var(--radius-panel);
}
main[data-view="trips"] .trips-error > span { flex: 1 1 260px; color: var(--ink-2); }
main[data-view="trips"] .trips-error b { color: var(--danger); font-weight: var(--fw-600); }
main[data-view="trips"] .trips-none {
  padding: var(--sp-6); border: 1px dashed var(--hatch-line); border-radius: var(--radius-panel);
  text-align: center; color: var(--muted);
}
main[data-view="trips"] .trips-blank {
  display: flex; flex-direction: column; align-items: center; text-align: center;
  padding: 48px var(--sp-5); background: var(--gray-25); border: 1px solid var(--rule); border-radius: var(--radius-panel);
}
main[data-view="trips"] .trips-blank b { font-size: var(--fs-17); font-weight: var(--fw-600); }
main[data-view="trips"] .trips-blank p { color: var(--muted); max-width: 480px; }
main[data-view="trips"] .trips-blank .blank-acts { justify-content: center; margin-top: var(--sp-2); }

/* Карточка курьера: шапка на тоне меню, строки — таблицей с линией сверху. */
main[data-view="trips"] .trip-group {
  margin: 0 0 var(--sp-4); padding: 0; overflow: hidden;
  background: var(--surface); border: 1px solid var(--rule); border-radius: var(--radius-panel); box-shadow: none;
}
main[data-view="trips"] .trip-group-head {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2) var(--sp-3);
  margin: 0; padding: var(--sp-2-5) 14px;
  background: var(--table-head-bg); border-bottom: 1px solid var(--rule);
}
main[data-view="trips"] .trip-avatar {
  width: 30px; height: 30px; flex: none; display: grid; place-items: center; border-radius: var(--radius-pill);
  background: var(--teal-soft); color: var(--teal); font-size: var(--fs-12); font-weight: var(--fw-600);
}
main[data-view="trips"] .trip-avatar.is-self { background: var(--chip-bg); color: var(--ink-2); }
main[data-view="trips"] .trip-group-who { display: flex; flex-direction: column; gap: 1px; min-width: 0; flex: 1 1 auto; }
main[data-view="trips"] .trip-group-who b { font-size: var(--fs-13); font-weight: var(--fw-600); color: var(--ink); }
main[data-view="trips"] .trip-group-who .subline { display: block; font-size: var(--fs-12); color: var(--muted); }
main[data-view="trips"] .trip-group-head > button { margin-left: auto; height: var(--control-h); background: var(--surface); }

/* Сетка строки как в макете: последняя колонка — по ширине кнопок этой строки. */
main[data-view="trips"] .trip-group .trip {
  display: grid; grid-template-columns: 20px minmax(0, 1.4fr) minmax(0, 1fr) 150px auto;
  align-items: center; gap: var(--sp-2) 14px;
  margin: 0; padding: var(--sp-2-5) 14px;
  background: var(--surface); border: 0; border-radius: 0; border-top: 1px solid var(--row-rule); opacity: 1;
}
main[data-view="trips"] .trip-group .trip:first-of-type { border-top: 0; }
main[data-view="trips"] .trip-group .trip.is-selected { background: var(--row-selected-bg); }
main[data-view="trips"] .trip > input[type="checkbox"] { width: 18px; height: 18px; min-height: 0; margin: 0; accent-color: var(--ink); }
main[data-view="trips"] .trip-way { display: flex; flex-direction: column; gap: 2px; min-width: 0; font-weight: var(--fw-400); }
main[data-view="trips"] .trip-kind { display: flex; align-items: center; gap: var(--sp-2); }
main[data-view="trips"] .trip-dir { font-size: var(--fs-12); font-weight: var(--fw-700); letter-spacing: .04em; text-transform: uppercase; }
main[data-view="trips"] .trip-dir-in { color: var(--info); }
main[data-view="trips"] .trip-dir-out { color: var(--teal); }
main[data-view="trips"] .trip-state {
  padding: 1px var(--sp-2); border-radius: var(--radius-pill); font-size: 11.5px; font-weight: var(--fw-500);
  background: var(--chip-bg); color: var(--ink-2);
}
main[data-view="trips"] .trip-picked .trip-state { background: var(--warn-soft); color: var(--warn); }
main[data-view="trips"] .trip-clinic { font-weight: var(--fw-500); color: var(--ink); overflow-wrap: anywhere; }
main[data-view="trips"] .trip-addr { font-size: var(--fs-12); color: var(--muted); overflow-wrap: anywhere; }
main[data-view="trips"] .trip-what { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; min-width: 0; cursor: auto; font: inherit; }
main[data-view="trips"] .trip-no {
  height: auto; min-height: 0; padding: 0; border: 0; background: none; box-shadow: none;
  font: var(--fw-600) var(--fs-12-5)/1.35 var(--mono); color: var(--ink);
  text-decoration: underline; text-underline-offset: 2px; white-space: nowrap;
}
main[data-view="trips"] .trip-no:hover:not(:disabled) { background: none; color: var(--ink-2); }
main[data-view="trips"] .trip-patient { font-size: var(--fs-12); color: var(--ink-2); overflow-wrap: anywhere; }
main[data-view="trips"] .trip-when { font: var(--fw-400) var(--fs-12)/1.4 var(--mono); color: var(--ink-2); white-space: normal; }
main[data-view="trips"] .trip-when.is-unknown { color: var(--muted); }
main[data-view="trips"] .trip-acts { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--sp-1-5); }
/* Общий слой app.css (до 1100 px) переносит действия отдельной строкой влево —
   в макете они всегда в своей колонке и прижаты вправо. */
main[data-view="trips"] .trip-group .trip .trip-acts { grid-column: auto; justify-content: flex-end; }
main[data-view="trips"] .trip-acts > button { height: 36px; min-height: 36px; white-space: nowrap; }
main[data-view="trips"] .trip-acts > .ghost { padding: 0 var(--sp-2-5); background: var(--surface); color: var(--ink-2); }
/* Главная отметка строки — чёрная с лаймовым значком, как в макете (общий слой
   app.css делает .trip-acts .action тихой — здесь макет её переопределяет). */
main[data-view="trips"] .trip-acts > button.trip-main {
  gap: var(--sp-1-5); padding: 0 14px; border: 0; box-shadow: none;
  background: var(--button-primary-bg); color: var(--button-primary-ink); font-weight: var(--fw-600);
}
main[data-view="trips"] .trip-acts > button.trip-main:hover:not(:disabled) { background: var(--ink-2); color: var(--button-primary-ink); }
main[data-view="trips"] .trip-acts > button.trip-main svg { color: var(--button-primary-icon); width: 16px; height: 16px; }

/* Плавающая панель выбора — чёрная, по центру внизу. Тост поднимается над ней. */
main[data-view="trips"] .trips-bulk {
  position: fixed; left: 50%; bottom: 20px; transform: translateX(-50%); z-index: 70;
  width: max-content; max-width: calc(100% - 24px);
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2-5);
  padding: var(--sp-2-5) var(--sp-3) var(--sp-2-5) var(--sp-4);
  border-radius: var(--radius-panel); background: var(--ink); color: var(--ink-inverse); box-shadow: var(--shadow-panel);
}
main[data-view="trips"] .trips-bulk[hidden] { display: none; }
main[data-view="trips"] .trips-bulk b { font-family: var(--mono); }
main[data-view="trips"] .trips-bulk .ghost {
  height: var(--control-h); padding: 0 var(--sp-2-5); background: transparent;
  border: 1px solid var(--ink-2); color: var(--ink-inverse);
}
main[data-view="trips"] .trips-bulk .ghost:hover:not(:disabled) { background: var(--ink-2); color: var(--ink-inverse); }
main[data-view="trips"] .trips-bulk-go {
  height: 36px; padding: 0 14px; border: 0; border-radius: var(--radius);
  background: var(--brand-lime); color: var(--ink); font-weight: var(--fw-600);
}
main[data-view="trips"] .trips-bulk-go:hover:not(:disabled) { background: var(--brand-lime); color: var(--ink); filter: brightness(.96); }
body:has(main.trips-has-bulk) .toast-host { bottom: 84px; }

/* Тост с действием «Вернуть» (общий приём 7): тёмный, кнопка лаймом. */
.toast.toast-action {
  display: flex; align-items: center; gap: var(--sp-3); pointer-events: auto;
  padding: var(--sp-2-5) var(--sp-2-5) var(--sp-2-5) var(--sp-4);
  background: var(--ink); color: var(--ink-inverse);
}
.toast.toast-action.trip-toast::before { content: none; }
.toast.toast-action .toast-dot { width: 8px; height: 8px; flex: none; border-radius: var(--radius-pill); background: var(--brand-lime); }
.toast.toast-action button {
  height: 28px; min-height: 28px; padding: 0 var(--sp-2-5);
  border: 1px solid var(--ink-2); border-radius: var(--radius-sm);
  background: transparent; color: var(--brand-lime); font-weight: var(--fw-500); box-shadow: none;
}

/* ================================================================ отчёты === */

/* Макет «Отчёты»: слева список отчётов по группам (≥ 860 px контента — колонка
   220 px, уже — горизонтальная лента), справа выбранный отчёт: заголовок, период
   или «на сегодня», выгрузки и таблица. Числа справа моноширинным, «Итого» на
   --gray-25. */
main[data-view="reports"] > header.page h1 { font-size: var(--fs-26); letter-spacing: -.01em; line-height: normal; }
main[data-view="reports"] > header.page { margin-bottom: var(--sp-4); }
main[data-view="reports"] > header.page > div { display: flex; flex-direction: column; gap: var(--sp-1); }
main[data-view="reports"] > header.page .section-sub { margin: 0; font-size: var(--fs-13); color: var(--muted); max-width: 720px; line-height: 1.45; }
main[data-view="reports"] .report-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--sp-4); align-items: start; }
main[data-view="reports"] .report-nav { display: flex; flex-direction: row; gap: var(--sp-3); overflow-x: auto; }
@media (min-width: 68.25rem) {
  main[data-view="reports"] .report-layout { grid-template-columns: 220px minmax(0, 1fr); }
  main[data-view="reports"] .report-nav { flex-direction: column; gap: var(--sp-4); }
}
main[data-view="reports"] .report-group { display: flex; flex-direction: column; gap: 2px; flex: none; }
main[data-view="reports"] .report-group-title {
  padding: 0 var(--sp-2) var(--sp-1); font-size: var(--fs-10-5); font-weight: var(--fw-600);
  letter-spacing: .06em; text-transform: uppercase; color: var(--muted);
}
main[data-view="reports"] .report-nav button {
  display: flex; flex-direction: column; align-items: flex-start; gap: 1px; min-height: 0; height: auto;
  padding: var(--sp-2) var(--sp-2-5); border: 0; border-radius: var(--radius); background: transparent;
  color: var(--ink); box-shadow: none; font: var(--fw-400) var(--fs-13)/normal var(--font); text-align: left;
  white-space: nowrap; cursor: pointer;
}
main[data-view="reports"] .report-nav button[aria-current="page"] { background: var(--surface); box-shadow: var(--shadow-active); font-weight: var(--fw-600); }
main[data-view="reports"] .report-main { display: flex; flex-direction: column; gap: var(--sp-3); min-width: 0; }
main[data-view="reports"] .report-titlebar { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--sp-2) var(--sp-3); }
main[data-view="reports"] .report-titles { flex: 1 1 240px; display: flex; flex-direction: column; gap: 3px; min-width: 0; }
main[data-view="reports"] .report-titles > h2 { margin: 0; font-size: var(--fs-17); font-weight: var(--fw-600); letter-spacing: 0; }
main[data-view="reports"] .report-about { color: var(--ink-2); line-height: 1.45; }
main[data-view="reports"] .report-period { display: flex; align-items: center; gap: var(--sp-1-5); }
main[data-view="reports"] .report-period[hidden], main[data-view="reports"] .report-today[hidden] { display: none; }
main[data-view="reports"] .report-period > span { color: var(--muted); }
main[data-view="reports"] .report-period input[type="date"] {
  width: auto; height: 34px; padding: 0 var(--sp-2); border: 1px solid var(--field-border); border-radius: var(--radius);
  font: inherit; font-size: var(--fs-13);
}
main[data-view="reports"] .report-today {
  padding: var(--sp-1) var(--sp-2-5); border-radius: var(--radius-pill); background: var(--chip-bg);
  font-size: var(--fs-12); color: var(--ink-2); white-space: nowrap;
}
main[data-view="reports"] .report-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-1-5); }
main[data-view="reports"] .report-actions > button { height: 36px; min-height: 36px; padding: 0 14px; font-size: var(--fs-13); font-weight: var(--fw-500); }
main[data-view="reports"] .report-actions > button.ghost { font-weight: var(--fw-400); color: var(--ink); }
main[data-view="reports"] .report-count { margin-left: auto; font-size: var(--fs-12); color: var(--muted); }
main[data-view="reports"] .report-note {
  padding: var(--sp-2-5) var(--sp-3); border-radius: var(--radius); background: var(--fill-soft);
  font-size: var(--fs-12-5); line-height: 1.45; color: var(--ink-2);
}
main[data-view="reports"] .report-wrap { overflow-x: auto; border: 1px solid var(--rule); border-radius: var(--radius-panel); }
main[data-view="reports"] .report-table { width: 100%; min-width: 560px; border-collapse: collapse; }
main[data-view="reports"] .report-table.is-wide { min-width: 820px; }
main[data-view="reports"] .report-table thead tr { background: var(--table-head-bg); }
main[data-view="reports"] .report-table th {
  height: auto; padding: 9px var(--sp-3); border: 0; background: none; font-size: var(--fs-12); font-weight: var(--fw-500);
  color: var(--muted); text-align: left; white-space: nowrap; text-transform: none; letter-spacing: 0;
}
main[data-view="reports"] .report-table th.num { text-align: right; }
main[data-view="reports"] .report-table td {
  height: auto; padding: 9px var(--sp-3); border: 0; border-top: 1px solid var(--row-rule); color: var(--ink);
  font: var(--fw-400) var(--fs-13)/normal var(--font); white-space: nowrap; vertical-align: middle;
}
main[data-view="reports"] .report-table td.txt { white-space: normal; }
main[data-view="reports"] .report-table td.num { text-align: right; font: var(--fw-400) var(--fs-12-5)/normal var(--mono); }
main[data-view="reports"] .report-table td.mono { font: var(--fw-400) var(--fs-12-5)/normal var(--mono); }
main[data-view="reports"] .report-table td.is-danger { color: var(--danger); }
main[data-view="reports"] .report-table td.is-ok { color: var(--ok); }
main[data-view="reports"] .report-table td.is-unknown { color: var(--warn); }
main[data-view="reports"] .report-table td.is-total { font-weight: var(--fw-600); }
main[data-view="reports"] .report-table tbody tr { cursor: default; background: var(--surface); }
main[data-view="reports"] .report-table tbody tr:hover { background: var(--surface); }
main[data-view="reports"] .report-table tbody tr.report-total { background: var(--gray-25); }
main[data-view="reports"] .report-table tbody tr.report-total > td { border-top-color: var(--gray-350); }

/* ========================================================= с чего начать === */

/* Макет «С чего начать»: слева прогресс из 11 сегментов, плашка и шаги одной
   поверхностью, справа липкий «Дневной круг» 320 px. Вторая колонка — с 80rem,
   общего порога продукта: при меню 232 px это содержимое ≈1040 px, как в макете. */
main[data-view="setup"] header.page h1 { font-size: var(--fs-26); letter-spacing: -.01em; line-height: normal; }
main[data-view="setup"] header.page > div { display: flex; flex-direction: column; gap: var(--sp-1); }
main[data-view="setup"] header.page .section-sub { margin: 0; max-width: none; font-size: var(--fs-13); color: var(--muted); line-height: normal; }
main[data-view="setup"] > .setup-body {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--sp-6); align-items: start;
}
/* Две колонки — когда содержимое (ширина минус меню 232 px) не уже 1040 px, как
   в макете: 1272 px окна. Колонка «Дневной круг» липнет под шапкой 56 px. */
@media (min-width: 79.5rem) {
  main[data-view="setup"] > .setup-body { grid-template-columns: minmax(0, 1fr) 320px; }
  main[data-view="setup"] .setup-cycle { position: sticky; top: 72px; }
}
main[data-view="setup"] .setup-main { min-width: 0; }
main[data-view="setup"] .setup-main > header.page { margin-bottom: 14px; }
main[data-view="setup"] .setup-steps-box { display: flex; flex-direction: column; gap: 14px; }

main[data-view="setup"] .setup-progress { display: flex; flex-direction: column; gap: var(--sp-1-5); }
main[data-view="setup"] .setup-score { display: flex; align-items: baseline; gap: var(--sp-2); }
main[data-view="setup"] .setup-score b { font: var(--fw-600) var(--fs-22)/1.2 var(--mono); }
main[data-view="setup"] .setup-score span { color: var(--ink-2); }
main[data-view="setup"] .setup-segments { display: flex; gap: 3px; }
main[data-view="setup"] .setup-segments span { flex: 1; height: 8px; border-radius: 3px; background: var(--rule); }
main[data-view="setup"] .setup-segments .is-done { background: var(--ok); }
main[data-view="setup"] .setup-segments .is-skipped { background: var(--gray-350); }

main[data-view="setup"] .setup-note {
  padding: var(--sp-3) 14px; border-radius: var(--radius-card); line-height: 1.45;
  background: var(--warn-soft); border: 1px solid var(--warn-line); color: var(--ink-2);
}
main[data-view="setup"] .setup-note b { color: var(--warn); font-weight: var(--fw-600); }
main[data-view="setup"] .setup-note.ok { background: var(--ok-soft); border-color: var(--ok-soft); color: var(--ok); font-weight: var(--fw-500); }
main[data-view="setup"] .setup-failed {
  display: flex; flex-direction: column; align-items: flex-start; gap: var(--sp-2);
  padding: var(--sp-3) 14px; border-radius: var(--radius-card); background: var(--danger-soft); color: var(--danger);
}

main[data-view="setup"] .setup-steps {
  list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column;
  border: 1px solid var(--card-border); border-radius: var(--radius-panel); overflow: hidden;
}
main[data-view="setup"] .setup-step { display: flex; gap: var(--sp-3); padding: 14px; border-top: 1px solid var(--row-rule); background: var(--surface); }
main[data-view="setup"] .setup-step:first-child { border-top: 0; }
main[data-view="setup"] .setup-step.is-next { background: var(--lime-25); box-shadow: inset 3px 0 0 var(--ink); }
main[data-view="setup"] .setup-step.is-skipped { opacity: .6; }
main[data-view="setup"] .setup-mark {
  width: 26px; height: 26px; flex: none; display: grid; place-items: center; border-radius: var(--radius-pill);
  border: 2px solid var(--gray-400); background: var(--surface); color: var(--ink-2);
  font: var(--fw-700) var(--fs-12)/1 var(--mono);
}
main[data-view="setup"] .setup-step.is-next .setup-mark { border-color: var(--ink); }
main[data-view="setup"] .setup-step.is-done .setup-mark { border-color: var(--ok); background: var(--ok); color: var(--ink-inverse); }
main[data-view="setup"] .setup-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--sp-1); }
main[data-view="setup"] .setup-title { display: flex; align-items: baseline; flex-wrap: wrap; gap: var(--sp-1-5) var(--sp-2-5); }
main[data-view="setup"] .setup-title b { font-size: var(--fs-14); font-weight: var(--fw-600); }
main[data-view="setup"] .setup-req { font-size: .71875rem; font-weight: var(--fw-600); color: var(--warn); }
main[data-view="setup"] .setup-fact { font-size: var(--fs-12-5); color: var(--warn); }
main[data-view="setup"] .setup-step.is-done .setup-fact { color: var(--ok); }
main[data-view="setup"] .setup-step.is-skipped .setup-fact { color: var(--muted); }
main[data-view="setup"] .setup-why { margin: 0; color: var(--ink-2); line-height: 1.45; }
main[data-view="setup"] .setup-warn { margin: 0; font-size: var(--fs-12-5); color: var(--warn); }
main[data-view="setup"] .setup-acts { display: flex; flex-wrap: wrap; gap: var(--sp-1-5); margin-top: var(--sp-1); }
main[data-view="setup"] .setup-acts button.ghost { color: var(--ink); }
main[data-view="setup"] .setup-skip {
  height: var(--control-h); padding: 0 var(--sp-2-5); border: 0; background: none; cursor: pointer;
  font: inherit; color: var(--ink-2); text-decoration: underline; text-underline-offset: 2px;
}

main[data-view="setup"] .setup-cycle {
  display: flex; flex-direction: column; gap: var(--sp-2-5); padding: var(--sp-4);
  border-radius: var(--radius-panel); background: var(--fill-soft);
}
main[data-view="setup"] .setup-cycle > h2 { margin: 0; font-size: var(--fs-14); font-weight: var(--fw-600); }
main[data-view="setup"] .setup-cycle > p { margin: 0; font-size: var(--fs-12-5); color: var(--ink-2); line-height: 1.45; }
main[data-view="setup"] .cycle-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-2-5); }
main[data-view="setup"] .cycle-list li { display: flex; gap: var(--sp-2-5); }
main[data-view="setup"] .cycle-n {
  width: 22px; height: 22px; flex: none; display: grid; place-items: center; border-radius: var(--radius-sm);
  background: var(--surface); border: 1px solid var(--button-border); font: var(--fw-600) var(--fs-11)/1 var(--mono);
}
main[data-view="setup"] .cycle-list li > span:last-child { display: flex; flex-direction: column; gap: 1px; }
main[data-view="setup"] .cycle-list b { font-weight: var(--fw-600); }
main[data-view="setup"] .cycle-list li > span:last-child > span { font-size: var(--fs-12); color: var(--ink-2); line-height: 1.4; }

/* ============================================================= настройки === */

/* Макет «Настройки»: сегментные вкладки владельца, карточки 12 px без тени, липкая
   кнопка «Сохранить» с меткой о несохранённых изменениях. Директору и приёмщику —
   плашка-пояснение и одна карточка мощности, без каркаса вкладок. */
main[data-view="settings"] > header.page { margin-bottom: var(--sp-4); }
main[data-view="settings"] > header.page h1 { font-size: var(--fs-26); letter-spacing: -.01em; line-height: normal; }
main[data-view="settings"] > header.page > div { display: flex; flex-direction: column; gap: var(--sp-1); }
main[data-view="settings"] > header.page .section-sub { margin: 0; max-width: none; font-size: var(--fs-13); color: var(--muted); line-height: normal; }
main[data-view="settings"] .settings-page { display: flex; flex-direction: column; gap: var(--sp-4); max-width: 1100px; min-width: 0; }
/* Узкая колонка: вкладки прокручиваются внутри себя, а не раздвигают страницу. */
main[data-view="settings"] .settings-page > * { min-width: 0; }
main[data-view="settings"] [data-workspace="settings"] > .workspace-tabs { margin: 0 0 var(--sp-4); padding: 3px; border-radius: var(--radius-card); }
main[data-view="settings"] [data-workspace="settings"] > .workspace-tabs [role="tab"] {
  position: relative; /* скрытая подпись точки остаётся внутри прокрутки вкладок */
  display: inline-flex; align-items: center; gap: var(--sp-1-5); min-height: 32px; padding: 0 14px; border-radius: var(--radius); font-size: var(--fs-13);
}
main[data-view="settings"] [data-workspace="settings"] > .workspace-tabs [role="tab"]:not([aria-selected="true"]) { font-weight: var(--fw-400); color: var(--ink); }
main[data-view="settings"] .tab-alert { width: 7px; height: 7px; border-radius: var(--radius-pill); background: var(--danger); }
main[data-view="settings"] .settings-limited { margin: 0; padding: var(--sp-2-5) 14px; border-radius: var(--radius-card); background: var(--fill-soft); color: var(--ink-2); line-height: 1.45; }
main[data-view="settings"] .settings-intro { margin: 0; max-width: 760px; color: var(--ink-2); line-height: 1.45; }
main[data-view="settings"] .mono { font-family: var(--mono); }
main[data-view="settings"] .settings-card-error:not([hidden]) { margin: 0; font-size: var(--fs-12-5); }

/* Лаборатория: нумерация и НДС рядом, реквизиты и мощность — во всю строку. */
main[data-view="settings"] .settings-lab {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr)); gap: 14px; align-items: start;
}
main[data-view="settings"] .settings-lab > :is(.settings-requisites, .settings-capacity) { grid-column: 1 / -1; gap: var(--sp-3); }
main[data-view="settings"] .settings-card {
  display: flex; flex-direction: column; gap: var(--sp-2-5); max-width: none; margin: 0; padding: var(--sp-4);
  border: 1px solid var(--card-border); border-radius: var(--radius-panel); background: var(--surface); box-shadow: none; min-width: 0;
}
main[data-view="settings"] .settings-card > h2.sect {
  margin: 0; padding: 0; border: 0; font-size: var(--fs-14); font-weight: var(--fw-600); letter-spacing: 0; text-transform: none; color: var(--ink);
}
main[data-view="settings"] .settings-card .hint { margin: 0; font-size: var(--fs-12); color: var(--muted); line-height: 1.45; max-width: 96ch; }
main[data-view="settings"] .settings-lead { margin: 0; max-width: 720px; color: var(--ink-2); line-height: 1.45; }

main[data-view="settings"] .settings-choices { display: grid; gap: var(--sp-2-5); }
main[data-view="settings"] .settings-choice {
  display: flex; align-items: flex-start; gap: var(--sp-2-5); width: 100%; height: auto; padding: var(--sp-2-5) var(--sp-3);
  border: 1px solid var(--button-border); border-radius: var(--radius-card); background: var(--gray-25);
  color: var(--ink); font: inherit; font-size: var(--fs-13); text-align: left; cursor: pointer;
}
main[data-view="settings"] .settings-choice[aria-checked="true"] { border-color: var(--ink); background: var(--surface); }
main[data-view="settings"] .settings-choice:disabled { cursor: default; color: var(--ink-2); }
main[data-view="settings"] .settings-choice > span:last-child { display: grid; gap: 2px; }
main[data-view="settings"] .settings-choice b { font-weight: var(--fw-500); }
main[data-view="settings"] .settings-radio {
  flex: none; width: 16px; height: 16px; margin-top: 1px; border-radius: var(--radius-pill);
  border: 2px solid var(--gray-400); box-shadow: inset 0 0 0 3px var(--surface); background: var(--surface);
}
main[data-view="settings"] .settings-choice[aria-checked="true"] .settings-radio { border-color: var(--ink); background: var(--ink); }
main[data-view="settings"] .settings-choice-hint { font-size: var(--fs-12); color: var(--muted); line-height: 1.4; }
main[data-view="settings"] .settings-choice-example { font: var(--fw-400) var(--fs-12)/normal var(--mono); color: var(--ink-2); }

main[data-view="settings"] .settings-segment { display: flex; gap: 2px; padding: 3px; border-radius: var(--radius-card); background: var(--chip-bg); }
main[data-view="settings"] .settings-segment > button {
  flex: 1; height: 32px; border: 0; border-radius: var(--radius); background: transparent; color: var(--ink);
  font: inherit; font-size: var(--fs-12-5); cursor: pointer;
}
main[data-view="settings"] .settings-segment > button[aria-checked="true"] { background: var(--surface); color: var(--ink); font-weight: var(--fw-600); box-shadow: var(--shadow-tab); }
main[data-view="settings"] .settings-segment > button:disabled { cursor: default; }
main[data-view="settings"] .settings-segment.is-small { flex: none; padding: 2px; border-radius: var(--radius); }
main[data-view="settings"] .settings-segment.is-small > button { flex: none; height: 32px; padding: 0 var(--sp-2-5); border-radius: var(--radius-sm); }
main[data-view="settings"] .settings-vat-rate { display: flex; align-items: center; gap: var(--sp-2-5); flex-wrap: wrap; }

main[data-view="settings"] .req-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr)); gap: var(--sp-2-5); margin: 0; }
main[data-view="settings"] :is(.settings-numbering, .settings-requisites) .hint { line-height: normal; }
main[data-view="settings"] .req-grid > label.field { margin: 0; gap: var(--sp-1); font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--ink-2); }
main[data-view="settings"] .req-grid input { height: 34px; }
main[data-view="settings"] .settings-requisites :is(input[name="inn"], input[name="kpp"], input[name="bik"], input[name="account"], input[name="phone"]) {
  font-family: var(--mono); font-size: var(--fs-12-5);
}
main[data-view="settings"] :is(input.invalid) { border-color: var(--danger); }
main[data-view="settings"] .field-error { font-size: var(--fs-12); font-weight: var(--fw-400); color: var(--danger); }

main[data-view="settings"] .settings-capacity-row { display: flex; gap: var(--sp-3); flex-wrap: wrap; align-items: flex-end; }
main[data-view="settings"] .settings-capacity-row > .field { margin: 0; gap: var(--sp-1); font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--ink-2); }
main[data-view="settings"] .settings-capacity-row input { width: 120px; height: 36px; text-align: right; font-family: var(--mono); }
main[data-view="settings"] .settings-capacity-row input:disabled { background: var(--gray-50); }
main[data-view="settings"] .settings-days-field { display: grid; gap: var(--sp-1); font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--ink-2); }
main[data-view="settings"] .settings-days { display: flex; gap: var(--sp-1); flex-wrap: wrap; }
main[data-view="settings"] .settings-days > button {
  width: 38px; height: 36px; padding: 0; border: 1px solid var(--button-border); border-radius: var(--radius);
  background: var(--surface); color: var(--ink); font: inherit; font-size: var(--fs-13); font-weight: var(--fw-500); cursor: pointer;
}
main[data-view="settings"] .settings-days > button[aria-pressed="true"] { border-color: var(--ink); background: var(--ink); color: var(--ink-inverse); }
main[data-view="settings"] .settings-days > button:disabled { cursor: default; }
main[data-view="settings"] .settings-days > button:disabled:not([aria-pressed="true"]) { background: var(--gray-50); }
main[data-view="settings"] .settings-week { margin: 0; font-size: var(--fs-12-5); color: var(--ink-2); }
main[data-view="settings"] .settings-week:empty { display: none; }
main[data-view="settings"] .settings-week b { font-family: var(--mono); }
main[data-view="settings"] .settings-capacity > button { align-self: flex-start; }
main[data-view="settings"] .settings-capacity > .error:not([hidden]) { font-size: var(--fs-12-5); }

main[data-view="settings"] .settings-savebar {
  position: sticky; bottom: var(--sp-4); z-index: 3; display: flex; justify-content: flex-end; align-items: center; gap: var(--sp-2);
  margin-top: var(--sp-4); pointer-events: none;
}
main[data-view="settings"] .settings-savebar > * { pointer-events: auto; }
main[data-view="settings"] .settings-savebar > button.action { height: var(--control-h-lg); padding: 0 18px; font-size: var(--fs-13); font-weight: var(--fw-500); box-shadow: 0 0 0 6px var(--surface); }
main[data-view="settings"] .settings-dirty {
  padding: 6px var(--sp-2-5); border-radius: var(--radius); background: var(--warn-soft); color: var(--warn);
  font-size: var(--fs-12-5); font-weight: var(--fw-500);
}

/* Команда: строка сотрудника с ролью-списком, статусом и действиями. */
main[data-view="settings"] .settings-team { display: flex; flex-direction: column; gap: var(--sp-3); }
main[data-view="settings"] .settings-team-head { display: flex; align-items: center; gap: var(--sp-2-5); flex-wrap: wrap; }
main[data-view="settings"] .settings-team-head > .settings-intro { flex: 1 1 320px; }
main[data-view="settings"] .settings-people { border: 1px solid var(--card-border); border-radius: var(--radius-panel); overflow: hidden; }
main[data-view="settings"] .employee {
  display: flex; align-items: center; gap: var(--sp-2) 14px; flex-wrap: wrap; padding: var(--sp-2-5) 14px; border-top: 1px solid var(--row-rule);
}
main[data-view="settings"] .employee:first-child { border-top: 0; }
main[data-view="settings"] .employee.off { opacity: .55; }
/* Временный пароль после «Сменить пароль» — своей строкой под сотрудником, один раз. */
main[data-view="settings"] .employee-temp { flex: 1 0 100%; padding-left: 48px; font-size: var(--fs-12-5); color: var(--ink-2); }
main[data-view="settings"] .employee-temp b { font: var(--fw-600) var(--fs-12-5)/normal var(--mono); color: var(--ink); }
main[data-view="settings"] .employee-avatar {
  flex: none; width: 34px; height: 34px; display: grid; place-items: center; border-radius: var(--radius-pill);
  background: var(--hue-work-soft); color: var(--hue-work); font-size: var(--fs-12); font-weight: var(--fw-600);
}
main[data-view="settings"] .employee-who { flex: 1 1 200px; display: grid; gap: 1px; min-width: 0; }
main[data-view="settings"] .employee-who b { font-weight: var(--fw-600); }
main[data-view="settings"] .employee-who .subline { font-size: var(--fs-12); color: var(--muted); overflow-wrap: anywhere; }
main[data-view="settings"] .employee-login { font-family: var(--mono); }
main[data-view="settings"] .employee-role { width: 160px; }
main[data-view="settings"] .employee-role select { width: 100%; height: 32px; }
main[data-view="settings"] .employee .row-acts { display: flex; gap: var(--sp-1-5); flex-wrap: wrap; align-items: center; }
/* Кнопки строк (команда, связи) — 30 px, 12,5, обычной жирности, как в макете. */
main[data-view="settings"] :is(.employee .row-acts, .link-acts) > button.ghost {
  height: 30px; min-height: 30px; padding: 0 var(--sp-2-5); font-size: var(--fs-12-5); font-weight: var(--fw-400); color: var(--ink);
}
main[data-view="settings"] .settings-actions > button.ghost { height: 34px; min-height: 34px; padding: 0 14px; font-size: var(--fs-13); font-weight: var(--fw-400); color: var(--ink); }
main[data-view="settings"] .settings-team-head > button.action { height: 36px; min-height: 36px; padding: 0 14px; font-size: var(--fs-13); font-weight: var(--fw-500); }
main[data-view="settings"] .employee .settings-pill { font-weight: var(--fw-500); gap: 0; }
main[data-view="settings"] .employee .settings-pill::before { display: none; }
main[data-view="settings"] .settings-pill {
  display: inline-flex; align-items: center; gap: 6px; padding: 2px var(--sp-2); border-radius: var(--radius-pill);
  font-size: var(--fs-12); font-weight: var(--fw-600); white-space: nowrap;
}
main[data-view="settings"] .settings-pill::before { content: ""; width: 6px; height: 6px; border-radius: var(--radius-pill); background: currentColor; }
main[data-view="settings"] .settings-pill.is-ok { background: var(--ok-soft); color: var(--ok); }
main[data-view="settings"] .settings-pill.is-danger { background: var(--danger-soft); color: var(--danger); }
main[data-view="settings"] .settings-pill.is-info { background: var(--info-soft); color: var(--info); }
main[data-view="settings"] .settings-pill.is-off { background: var(--chip-bg); color: var(--ink-2); }
main[data-view="settings"] .settings-role-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr)); gap: var(--sp-2); }
main[data-view="settings"] .settings-role-card { display: grid; gap: var(--sp-1); padding: var(--sp-3); border-radius: var(--radius-card); background: var(--fill-soft); }
main[data-view="settings"] .settings-role-card b { font-weight: var(--fw-600); }
main[data-view="settings"] .settings-role-card span { font-size: var(--fs-12); color: var(--ink-2); line-height: 1.45; }

/* Связи с клиниками: карточка на связь, ошибка и очередь — на виду. */
main[data-view="settings"] .settings-links { display: flex; flex-direction: column; gap: var(--sp-3); }
main[data-view="settings"] .settings-link-list { display: flex; flex-direction: column; gap: var(--sp-2-5); }
main[data-view="settings"] .link-row {
  display: flex; flex-direction: column; align-items: stretch; gap: var(--sp-2); margin: 0; padding: 14px;
  border: 1px solid var(--card-border); border-radius: var(--radius-panel); background: var(--surface);
}
main[data-view="settings"] .link-row.is-danger { border-color: var(--danger-line); background: var(--danger-faint); }
main[data-view="settings"] .link-row.off { opacity: .7; }
main[data-view="settings"] .link-main { display: flex; align-items: center; gap: var(--sp-2) 14px; flex-wrap: wrap; }
main[data-view="settings"] .link-main b { display: inline; font-size: var(--fs-14); font-weight: var(--fw-600); }
main[data-view="settings"] .link-last { margin-left: auto; font: var(--fw-400) var(--fs-12)/normal var(--mono); color: var(--muted); }
main[data-view="settings"] .link-url { font: var(--fw-400) var(--fs-12)/normal var(--mono); color: var(--ink-2); overflow-wrap: anywhere; }
main[data-view="settings"] .link-error {
  margin: 0; padding: var(--sp-2) var(--sp-2-5); border-radius: var(--radius); background: var(--surface);
  border: 1px solid var(--danger-line); color: var(--danger); font-size: var(--fs-12-5); line-height: normal;
}
main[data-view="settings"] .link-acts { display: flex; align-items: center; gap: var(--sp-1-5); flex-wrap: wrap; }
main[data-view="settings"] .link-queue { font-size: var(--fs-12-5); color: var(--warn); }
main[data-view="settings"] .settings-actions { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
main[data-view="settings"] .settings-load-error {
  display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; padding: var(--sp-3) 14px; border-radius: var(--radius-card);
  background: var(--danger-soft); color: var(--danger); font-size: var(--fs-12-5);
}
main[data-view="settings"] .settings-load-error > span { flex: 1 1 14rem; }

/* Резервные копии: жёлтая плашка одного диска, расписание, список копий. */
main[data-view="settings"] .settings-backups { display: flex; flex-direction: column; gap: var(--sp-4); }
main[data-view="settings"] .settings-backup-alert {
  display: flex; gap: var(--sp-2-5) var(--sp-4); align-items: center; flex-wrap: wrap; padding: var(--sp-3) 14px;
  border-radius: var(--radius-card); background: var(--warn-soft); border: 1px solid var(--warn-line); color: var(--ink-2);
}
main[data-view="settings"] .settings-backup-alert > span { flex: 1 1 320px; line-height: 1.45; }
main[data-view="settings"] .settings-backup-alert b { color: var(--warn); font-weight: var(--fw-600); }
main[data-view="settings"] .settings-backup-schedule { display: flex; gap: var(--sp-3); flex-wrap: wrap; align-items: flex-end; }
main[data-view="settings"] .settings-backup-schedule > label.field { margin: 0; gap: var(--sp-1); font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--ink-2); }
main[data-view="settings"] .settings-backup-schedule input { width: 120px; height: 36px; text-align: right; font-family: var(--mono); }
main[data-view="settings"] .settings-backup-schedule > button { height: 36px; }
main[data-view="settings"] .settings-backup-where { margin: 0; font-size: var(--fs-12-5); color: var(--ink-2); overflow-wrap: anywhere; }
main[data-view="settings"] .settings-backup-card > p.error { margin: 0; font-size: var(--fs-12-5); }
main[data-view="settings"] .settings-backup-list { border: 1px solid var(--card-border); border-radius: var(--radius-card); overflow: hidden; }
main[data-view="settings"] .settings-backup-list > .empty { margin: 0; border: 0; }
main[data-view="settings"] .backup {
  display: flex; align-items: center; gap: var(--sp-2-5); flex-wrap: wrap; padding: var(--sp-2) var(--sp-3); border-top: 1px solid var(--row-rule);
}
main[data-view="settings"] .backup:first-child { border-top: 0; }
main[data-view="settings"] .backup-when { font: var(--fw-400) var(--fs-12-5)/1.4 var(--mono); }
main[data-view="settings"] .backup-name { flex: 1; min-width: 0; font: var(--fw-400) var(--fs-12)/1.4 var(--mono); color: var(--muted); overflow-wrap: anywhere; }
main[data-view="settings"] .backup-size { font: var(--fw-400) var(--fs-12)/1.4 var(--mono); }

/* Зашифрованные архивы — своя карточка рядом, с тем же заголовком-строкой. */
main[data-view="settings"] .encrypted-backups {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; column-gap: var(--sp-3);
  padding: var(--sp-4); background: var(--surface); border: 1px solid var(--card-border); border-radius: var(--radius-panel);
}
main[data-view="settings"] .encrypted-backups > * { grid-column: 1 / -1; }
main[data-view="settings"] .encrypted-backups > h3 {
  grid-column: 1; grid-row: 1; margin: 0;
  font-size: var(--fs-14); font-weight: var(--fw-600); color: var(--ink);
}
main[data-view="settings"] .encrypted-backups > .hint { margin: var(--sp-2) 0 0; }
main[data-view="settings"] .encrypted-backups > .row { margin-top: var(--sp-3); gap: var(--sp-2); }
main[data-view="settings"] .encrypted-backups > .error:not(:empty) {
  margin-top: var(--sp-3); padding: var(--sp-2) var(--sp-2-5); border-radius: var(--radius-card);
  background: var(--warn-soft); color: var(--warn); font-size: var(--fs-12); line-height: 1.45;
}
main[data-view="settings"] .encrypted-backups > .production { margin-top: var(--sp-3); border: 0; box-shadow: none; }
main[data-view="settings"] .backup-encrypted-row {
  margin: 0 0 var(--sp-2); padding: var(--sp-3); border: 1px solid var(--card-border); border-radius: var(--radius-card);
}
main[data-view="settings"] .backup-encrypted-row > p { margin: 0 0 2px; font: var(--fw-400) var(--fs-12)/1.4 var(--mono); color: var(--muted); }

/* Значок «+» основной кнопки, когда подпись должна остаться словом без знака
   (её ищут по тексту): знак рисует CSS, в textContent его нет. */
button.action.plus-before::before { content: "+" / ""; color: var(--button-primary-icon); font-size: var(--fs-17); line-height: 1; font-weight: var(--fw-600); }

/* Отмена попытки привязки — встроенное подтверждение вместо системного окна. */
dialog.pairing-dialog .pairing-confirm {
  display: grid; gap: var(--sp-2); padding: var(--sp-3); border-radius: var(--radius-card);
  background: var(--danger-soft); border: 1px solid var(--danger-line);
}
dialog.pairing-dialog .pairing-confirm[hidden] { display: none; }
dialog.pairing-dialog .pairing-confirm b { color: var(--danger); }
dialog.pairing-dialog .pairing-confirm p { margin: 0; font-size: var(--fs-12-5); color: var(--ink-2); line-height: 1.45; }
dialog.pairing-dialog .pairing-confirm-acts { display: flex; gap: var(--sp-2); justify-content: flex-end; flex-wrap: wrap; }
dialog.pairing-dialog button.action.danger { background: var(--danger); }

/* ================================================================ ресурсы === */

/* Макет «Ресурсы и мощность» (этап 2). Вкладки — сегментный переключатель (общий
   приём 1), role=tab/aria-selected; .resource-page > .bar и .resource-panel —
   контракт приёмки (RS01, studio-ui). Колонки .resource-table не прячутся: узкая
   таблица прокручивается внутри .table-wrap. */
main[data-view="resources"] .resource-head { align-items: flex-end; gap: var(--sp-3) var(--sp-4); flex-wrap: wrap; }
main[data-view="resources"] .resource-head-text { flex: 1 1 300px; min-width: 0; }
main[data-view="resources"] .resource-head-text h1 { display: inline; }
main[data-view="resources"] .resource-head-text .ro { margin-left: var(--sp-2); vertical-align: middle; }
main[data-view="resources"] .resource-head-text .section-sub { max-width: 720px; }
main[data-view="resources"] .resource-head > button { height: var(--control-h); background: var(--surface); }
main[data-view="resources"] .resource-readonly {
  margin: 0 0 var(--sp-4); padding: var(--sp-2-5) 14px; border-radius: var(--radius-card);
  background: var(--table-head-bg); color: var(--ink-2);
}
main[data-view="resources"] .resource-pending {
  position: sticky; top: var(--sp-2); z-index: 5;
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2-5) var(--sp-4);
  margin: 0 0 var(--sp-4); padding: var(--sp-3) 14px; border-radius: var(--radius-card);
  background: var(--warn-soft); border: 1px solid var(--warn-line);
}
main[data-view="resources"] .resource-pending > span { flex: 1 1 300px; line-height: 1.45; color: var(--ink-2); }
main[data-view="resources"] .resource-pending b { color: var(--warn); font-weight: var(--fw-600); }
main[data-view="resources"] .resource-load-error {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-3); margin-top: var(--sp-4);
  padding: var(--sp-5); border-radius: var(--radius-panel); background: var(--danger-soft); border: 1px solid var(--danger-line);
}
main[data-view="resources"] .resource-load-error > span { flex: 1 1 260px; color: var(--ink-2); }
main[data-view="resources"] .resource-load-error b { color: var(--danger); font-weight: var(--fw-600); }

main[data-view="resources"] .resource-page > .bar {
  display: inline-flex; flex-wrap: nowrap; gap: 2px; padding: 3px; margin: 0 0 var(--sp-4);
  max-width: 100%; overflow-x: auto; background: var(--chip-bg); border-radius: var(--radius-card);
}
main[data-view="resources"] .resource-page > .bar > button {
  flex: none; height: var(--control-h); min-height: var(--control-h); padding: 0 var(--sp-3);
  border: 0; border-radius: var(--radius); background: transparent; box-shadow: none;
  color: var(--ink-2); font-size: var(--fs-13); font-weight: var(--fw-400); white-space: nowrap;
}
main[data-view="resources"] .resource-page > .bar > button:hover { color: var(--ink); background: transparent; }
main[data-view="resources"] .resource-page > .bar > [aria-selected="true"] {
  background: var(--surface); color: var(--ink); font-weight: var(--fw-600); box-shadow: var(--shadow-tab);
}
main[data-view="resources"] .resource-panel { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--sp-4); min-width: 0; }
main[data-view="resources"] .resource-panel h2 {
  margin: 0; font-size: var(--fs-14); font-weight: var(--fw-600); letter-spacing: 0; text-transform: none; color: var(--ink);
}
main[data-view="resources"] .resource-panel .hint { margin: 0; color: var(--ink-2); font-size: var(--fs-12-5); line-height: 1.45; max-width: 100ch; }
main[data-view="resources"] .resource-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2-5); }
main[data-view="resources"] .resource-toolbar > .hint { flex: 1 1 360px; }
main[data-view="resources"] .resource-toolbar > button { height: var(--control-h); }
main[data-view="resources"] .resource-toolbar > .action { height: 36px; gap: var(--sp-2); }
/* Значок кнопки — псевдоэлемент: подпись кнопки остаётся ровно «Добавить ресурс». */
main[data-view="resources"] .resource-toolbar > .resource-add::before { content: "+"; color: var(--button-primary-icon); }
main[data-view="resources"] .resource-toolbar > .resource-save-plan::before { content: "\2399"; color: var(--button-primary-icon); }
main[data-view="resources"] .resource-empty {
  display: block; padding: var(--sp-6) var(--sp-5); text-align: left;
  background: var(--gray-25); border: 1px solid var(--rule); border-radius: var(--radius-panel); color: var(--ink-2);
}
main[data-view="resources"] .resource-empty b { color: var(--ink); font-weight: var(--fw-600); }

/* Оборудование: карточки ресурсов сеткой, значок-код, остаток циклов. */
main[data-view="resources"] .resource-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: var(--sp-2-5); }
main[data-view="resources"] .resource-cards:empty { display: none; }
main[data-view="resources"] .resource-row {
  display: flex; flex-direction: column; gap: var(--sp-2-5); margin: 0; padding: 14px;
  background: var(--surface); border: 1px solid var(--rule) !important; border-radius: var(--radius-card); box-shadow: none;
}
main[data-view="resources"] .resource-row.is-over { border-color: var(--danger-line) !important; }
main[data-view="resources"] .resource-row.is-off { opacity: .6; }
main[data-view="resources"] .resource-card-head { display: flex; align-items: flex-start; gap: var(--sp-2-5); }
main[data-view="resources"] .resource-card-head > div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
main[data-view="resources"] .resource-row h2 { font-size: var(--fs-13); line-height: 1.3; overflow-wrap: anywhere; }
main[data-view="resources"] .resource-code {
  width: 34px; height: 34px; flex: none; display: grid; place-items: center; border-radius: var(--radius);
  font: var(--fw-600) var(--fs-11)/1 var(--mono); background: var(--stage-make-soft); color: var(--stage-make);
}
main[data-view="resources"] .resource-kind-workplace .resource-code { background: var(--stage-finish-soft); color: var(--stage-finish); }
main[data-view="resources"] .resource-kind-tool .resource-code { background: var(--chip-bg); color: var(--ink-2); }
main[data-view="resources"] .resource-row.is-over .resource-code { background: var(--danger-soft); color: var(--danger); }
main[data-view="resources"] .resource-kind { font-size: var(--fs-12); color: var(--muted); }
main[data-view="resources"] .resource-balance { margin: 0; font-size: var(--fs-12); color: var(--muted); }
main[data-view="resources"] .resource-balance b { font: var(--fw-600) var(--fs-14)/1.2 var(--mono); color: var(--ink); }
main[data-view="resources"] .resource-row.is-over .resource-balance b { color: var(--danger); }
main[data-view="resources"] .resource-over {
  display: inline-block; padding: 1px var(--sp-2); border-radius: var(--radius-pill);
  background: var(--danger-soft); color: var(--danger); font-size: 11.5px; font-weight: var(--fw-600);
}
main[data-view="resources"] .resource-week { margin: 0; font-size: var(--fs-12); color: var(--ink-2); }
main[data-view="resources"] .resource-card-acts { display: flex; flex-wrap: wrap; gap: var(--sp-1-5); margin-top: auto; }
main[data-view="resources"] .resource-card-acts > button { height: var(--control-h); font-size: var(--fs-12-5); background: var(--surface); }

/* Рабочие окна: сетка «ресурс × 7 дней». Неизвестный день — штриховка, выходной —
   серый, рабочее окно — голубое. */
main[data-view="resources"] .resource-week-nav { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); }
main[data-view="resources"] .resource-week-nav > button { height: var(--control-h); background: var(--surface); }
main[data-view="resources"] .resource-week-nav b { font: var(--fw-500) var(--fs-12-5)/1 var(--mono); color: var(--ink-2); }
main[data-view="resources"] .capacity-grid { min-width: 820px; table-layout: fixed; }
main[data-view="resources"] .capacity-grid th:first-child, main[data-view="resources"] .capacity-grid td:first-child { width: 200px; }
main[data-view="resources"] .capacity-grid th { text-align: center; }
main[data-view="resources"] .capacity-grid th:first-child { text-align: left; }
main[data-view="resources"] .resource-table.capacity-grid td { min-width: 0; padding: var(--sp-1); border-left: 1px solid var(--row-rule); vertical-align: middle; }
main[data-view="resources"] .resource-table.capacity-grid td:first-child { padding: var(--sp-2-5) var(--sp-3); border-left: 0; line-height: 1.3; }
main[data-view="resources"] .capacity-cell {
  width: 100%; min-height: 44px; height: auto; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
  padding: var(--sp-1); border: 1px solid var(--stage-make-line); border-radius: var(--radius);
  background: var(--stage-make-soft); color: var(--ink); box-shadow: none;
}
main[data-view="resources"] .capacity-cell.is-off { background: var(--table-head-bg); border-color: var(--rule); color: var(--muted); }
main[data-view="resources"] .capacity-cell.is-unknown {
  background: repeating-linear-gradient(135deg, var(--table-head-bg) 0 4px, var(--surface) 4px 8px);
  border-color: var(--hatch-line); color: var(--warn);
}
main[data-view="resources"] .capacity-main { font: var(--fw-600) var(--fs-12)/1.2 var(--mono); }
main[data-view="resources"] .capacity-sub { font-size: var(--fs-11); }
main[data-view="resources"] .capacity-cell:hover:not(:disabled) { border-color: var(--ink); }

/* Прогноз: строки нарядов с мини-Гантом на 7 дней и засечкой срока для клиники. */
main[data-view="resources"] .forecast-list { border: 1px solid var(--rule); border-radius: var(--radius-panel); overflow: hidden; }
main[data-view="resources"] .forecast-row { display: grid; grid-template-columns: 220px minmax(0, 1fr) 110px; align-items: center; }
main[data-view="resources"] .forecast-axis {
  padding: var(--sp-2) 14px; background: var(--table-head-bg); border-bottom: 1px solid var(--rule);
  font-size: 11.5px; color: var(--muted);
}
main[data-view="resources"] .forecast-axis > span:last-child { text-align: right; }
main[data-view="resources"] .forecast-days { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); text-align: center; }
main[data-view="resources"] .forecast-order { margin: 0; border-top: 1px solid var(--row-rule); }
main[data-view="resources"] .forecast-order:nth-child(2) { border-top: 0; }
main[data-view="resources"] .forecast-toggle {
  width: 100%; height: auto; min-height: 0; padding: var(--sp-2-5) 14px; gap: 0;
  border: 0; border-radius: 0; background: var(--surface); box-shadow: none; text-align: left; color: var(--ink); font-weight: var(--fw-400);
}
main[data-view="resources"] .forecast-toggle:hover:not(:disabled) { background: var(--hover-bg); }
main[data-view="resources"] .forecast-who { display: flex; flex-direction: column; gap: 1px; min-width: 0; padding-right: var(--sp-2-5); }
main[data-view="resources"] .forecast-who b { font: var(--fw-600) var(--fs-12-5)/1.3 var(--mono); }
main[data-view="resources"] .forecast-remake { font-size: var(--fs-11); font-weight: var(--fw-600); color: var(--held); }
main[data-view="resources"] .forecast-sub { font-size: var(--fs-12); color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
main[data-view="resources"] .forecast-bars {
  position: relative; height: 24px;
  background: repeating-linear-gradient(90deg, transparent 0, transparent calc(100% / 7 - 1px), var(--row-rule) calc(100% / 7 - 1px), var(--row-rule) calc(100% / 7));
}
main[data-view="resources"] .forecast-seg { position: absolute; top: 3px; height: 8px; border-radius: 3px; background: var(--stage-make); }
main[data-view="resources"] .forecast-seg.lane-1 { top: 13px; }
main[data-view="resources"] .forecast-seg.seg-workplace { background: var(--stage-finish); }
main[data-view="resources"] .forecast-seg.seg-unknown,
main[data-view="resources"] .forecast-legend .seg-unknown::before {
  background: repeating-linear-gradient(135deg, var(--hatch-line) 0 3px, var(--surface) 3px 6px); border: 1px solid var(--hatch-line);
}
main[data-view="resources"] .forecast-due { position: absolute; top: -2px; bottom: -2px; width: 2px; background: var(--ink); }
main[data-view="resources"] .forecast-finish { text-align: right; font: var(--fw-600) var(--fs-12)/1.3 var(--mono); }
main[data-view="resources"] .forecast-finish.is-ok { color: var(--ok); }
main[data-view="resources"] .forecast-finish.is-late { color: var(--danger); }
main[data-view="resources"] .forecast-finish.is-unknown { color: var(--warn); }
main[data-view="resources"] .forecast-detail { display: grid; gap: var(--sp-2); padding: 0 14px var(--sp-3); min-width: 0; }
main[data-view="resources"] .forecast-facts { display: flex; flex-wrap: wrap; gap: var(--sp-1-5) var(--sp-4); padding-top: var(--sp-2); font-size: var(--fs-12); color: var(--ink-2); }
main[data-view="resources"] .forecast-facts b { font-family: var(--mono); }
main[data-view="resources"] .forecast-issue, main[data-view="resources"] .forecast-op-issue { color: var(--danger); }
main[data-view="resources"] .forecast-op-issue { display: block; font-size: var(--fs-11); }
main[data-view="resources"] .forecast-table .is-missing { color: var(--danger); }
main[data-view="resources"] .forecast-table .is-muted { color: var(--muted); }
main[data-view="resources"] .forecast-table .is-unknown { color: var(--warn); }
main[data-view="resources"] .forecast-table td > button { height: var(--control-h); font-size: var(--fs-12); white-space: nowrap; }
main[data-view="resources"] .forecast-legend { display: flex; flex-wrap: wrap; gap: var(--sp-1-5) var(--sp-4); font-size: var(--fs-12); color: var(--ink-2); }
main[data-view="resources"] .forecast-legend > span { display: inline-flex; align-items: center; gap: var(--sp-1-5); }
main[data-view="resources"] .forecast-legend > span::before { content: ""; width: 16px; height: 8px; border-radius: 3px; background: var(--stage-make); }
main[data-view="resources"] .forecast-legend .seg-workplace::before { background: var(--stage-finish); }
main[data-view="resources"] .forecast-legend .due::before { width: 2px; height: 12px; border-radius: 0; background: var(--ink); }

/* План и факт: версии слева, плитки, сегмент «План / Факт / Разница», таблица. */
main[data-view="resources"] .plan-layout { display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: 14px; align-items: start; }
main[data-view="resources"] .plan-versions { display: flex; flex-direction: column; gap: var(--sp-1-5); min-width: 0; }
main[data-view="resources"] .plan-versions > .hint { font-size: var(--fs-12); color: var(--muted); }
main[data-view="resources"] .production-plan {
  display: flex; flex-direction: column; align-items: flex-start; gap: 2px; height: auto; min-height: 0;
  padding: var(--sp-2-5) var(--sp-3); border: 1px solid var(--rule); border-radius: var(--radius-card);
  background: var(--gray-25); color: var(--ink); text-align: left; box-shadow: none; font-weight: var(--fw-400); white-space: normal;
}
main[data-view="resources"] .production-plan[aria-pressed="true"] { background: var(--surface); border-color: var(--ink); }
main[data-view="resources"] .plan-title { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); }
main[data-view="resources"] .plan-title b { font-weight: var(--fw-600); }
main[data-view="resources"] .plan-late {
  padding: 1px 7px; border-radius: var(--radius-pill); background: var(--held-soft); color: var(--held);
  font-size: var(--fs-11); font-weight: var(--fw-600);
}
main[data-view="resources"] .plan-meta { font-size: var(--fs-12); color: var(--muted); overflow-wrap: anywhere; }
main[data-view="resources"] .plan-fact { display: flex; flex-direction: column; gap: var(--sp-2-5); min-width: 0; }
main[data-view="resources"] .planfact-tiles { display: flex; flex-wrap: wrap; gap: var(--sp-2); }
main[data-view="resources"] .planfact-tile { flex: 1 1 160px; display: flex; flex-direction: column; padding: var(--sp-3); border-radius: var(--radius-card); background: var(--table-head-bg); }
main[data-view="resources"] .planfact-tile b { font: var(--fw-600) var(--fs-22)/1.2 var(--mono); color: var(--ink); }
main[data-view="resources"] .planfact-tile span { font-size: var(--fs-12-5); color: var(--ink-2); }
main[data-view="resources"] .planfact-tile.is-late { background: var(--danger-soft); }
main[data-view="resources"] .planfact-tile.is-late b { color: var(--danger); }
main[data-view="resources"] .planfact-tile.is-ok { background: var(--ok-soft); }
main[data-view="resources"] .planfact-tile.is-ok b { color: var(--ok); }
main[data-view="resources"] .planfact-modes { display: inline-flex; align-self: flex-start; gap: 2px; padding: 3px; border-radius: var(--radius-card); background: var(--chip-bg); }
main[data-view="resources"] .planfact-modes > button {
  height: var(--control-h); padding: 0 var(--sp-3); border: 0; border-radius: var(--radius);
  background: transparent; box-shadow: none; color: var(--ink-2); font-weight: var(--fw-400);
}
main[data-view="resources"] .planfact-modes > [aria-checked="true"] { background: var(--surface); color: var(--ink); font-weight: var(--fw-600); box-shadow: var(--shadow-tab); }
main[data-view="resources"] .planfact-summary { min-width: 560px; }
main[data-view="resources"] .planfact-summary td { font-size: var(--fs-12-5); }
main[data-view="resources"] .planfact-summary .mono { font-family: var(--mono); }
main[data-view="resources"] .planfact-summary .is-late { color: var(--danger); font-weight: var(--fw-600); }
main[data-view="resources"] .planfact-summary .is-ok { color: var(--ok); font-weight: var(--fw-600); }
main[data-view="resources"] .planfact-summary .is-unknown { color: var(--warn); font-weight: var(--fw-600); }
main[data-view="resources"] .planfact-order {
  margin: 0; padding: var(--sp-4); background: var(--surface); border: 1px solid var(--rule); border-radius: var(--radius-panel); box-shadow: none;
}
main[data-view="resources"] .planfact-order > p { margin: 2px 0; font-size: var(--fs-12-5); color: var(--ink-2); }
main[data-view="resources"] .planfact-load-title { margin-top: var(--sp-2); }

/* Журнал: строки со «Сторнировать»; сторно — обратная запись с пометкой, исходная
   запись зачёркнута и остаётся на месте. */
main[data-view="resources"] .resource-log { border: 1px solid var(--rule); border-radius: var(--radius-panel); overflow: hidden; }
main[data-view="resources"] .resource-usage {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2) 14px; margin: 0;
  padding: var(--sp-2-5) 14px; border-top: 1px solid var(--row-rule); background: var(--surface);
}
main[data-view="resources"] .resource-usage:first-child { border-top: 0; }
main[data-view="resources"] .resource-usage.is-reversal { background: var(--gray-25); }
main[data-view="resources"] .usage-text { flex: 1 1 280px; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
main[data-view="resources"] .usage-res { font-weight: var(--fw-600); }
main[data-view="resources"] .resource-usage.is-reversed .usage-res { text-decoration: line-through; }
main[data-view="resources"] .usage-amount { font-family: var(--mono); }
main[data-view="resources"] .usage-rev {
  margin-left: var(--sp-1-5); padding: 1px 7px; border-radius: var(--radius-pill); background: var(--chip-bg);
  font-size: var(--fs-11); font-weight: var(--fw-600);
}
main[data-view="resources"] .usage-meta { font-size: var(--fs-12); color: var(--muted); overflow-wrap: anywhere; }
main[data-view="resources"] .usage-when { font: var(--fw-400) var(--fs-12)/1.3 var(--mono); color: var(--ink-2); }
main[data-view="resources"] .resource-usage > button { height: var(--control-h); font-size: var(--fs-12-5); background: var(--surface); }

main[data-view="resources"] .resource-table td { font-size: var(--fs-12-5); padding-block: var(--sp-2); }
main[data-view="resources"] .resource-table td:first-child { font-weight: var(--fw-500); color: var(--ink); }
main[data-view="resources"] .resource-table tbody tr:hover { background: var(--hover-bg); }

/* Окно решения: подсказка и ошибка под своим полем, «Причина решения · обязательно». */
dialog.resource-dialog { border-radius: var(--radius-dialog); box-shadow: var(--shadow-dialog); }
dialog.resource-dialog .resource-form-body h2 { margin: 0; font-size: var(--fs-17); font-weight: var(--fw-600); }
dialog.resource-dialog .resource-form-footer { background: var(--dialog-footer-bg); }
dialog.resource-dialog .resource-required { color: var(--warn); font-weight: var(--fw-400); }
dialog.resource-dialog .resource-reason textarea { min-height: 60px; resize: vertical; }
dialog.resource-dialog .field-error { color: var(--danger); font-size: var(--fs-12); }
dialog.resource-dialog .field-error[hidden] { display: none; }
dialog.resource-dialog textarea[aria-invalid="true"] { border-color: var(--danger); }
dialog.resource-dialog input.mono { font-family: var(--mono); }
/* Окно решения из макета «Ресурсы»: 480 px, поля подряд, причина с пометкой в строке. */
dialog.resource-dialog.plain { width: min(480px, calc(100vw - 32px)); }
dialog.resource-dialog.plain .resource-form-body { gap: var(--sp-3); padding: 18px var(--sp-5) 14px; }
dialog.resource-dialog.plain .resource-form-body > label.field { gap: var(--sp-1); margin: 0; font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--ink-2); }
dialog.resource-dialog.plain .resource-form-body > label.field > :is(input:not([type=checkbox]), select) { height: 36px; font-size: var(--fs-13); font-weight: var(--fw-400); color: var(--ink); }
dialog.resource-dialog.plain .resource-form-body > label.field > textarea { font-size: var(--fs-13); font-weight: var(--fw-400); color: var(--ink); }
dialog.resource-dialog.plain .resource-form-body > label.field > span:not(.resource-required):not(.field-error) { font-size: var(--fs-12) !important; font-weight: var(--fw-400); color: var(--muted) !important; }
dialog.resource-dialog.plain .resource-reason { display: grid; grid-template-columns: max-content minmax(0, 1fr); column-gap: var(--sp-1); }
dialog.resource-dialog.plain .resource-reason > :is(textarea, .field-error) { grid-column: 1 / -1; margin-top: var(--sp-1); }
dialog.resource-dialog.plain .resource-form-body > .error:empty { display: none; }
dialog.resource-dialog.plain .resource-form-footer { padding: var(--sp-3) var(--sp-5); gap: var(--sp-2); }
dialog.resource-dialog.plain .resource-form-footer > button { height: 32px; min-height: 32px; }
main[data-view="resources"] .planfact-summary th { padding: var(--sp-2) var(--sp-3); background: var(--table-head-bg); font-size: 11.5px; font-weight: var(--fw-500); color: var(--muted); }
main[data-view="resources"] .resource-table.planfact-summary td { padding: var(--sp-2) var(--sp-3); line-height: 1.35; }
dialog.resource-dialog .resource-summary {
  margin: 0; padding: var(--sp-3); border-radius: var(--radius-card); background: var(--fill-soft);
  font-size: var(--fs-12); line-height: 1.5; color: var(--ink-2);
}

/* Узкая область содержимого (меню 232 px видно от 801 px): Гант сжимает подписи,
   план-факт ставит версии над таблицей. */
@media (max-width: 719px), (min-width: 801px) and (max-width: 951px) {
  main[data-view="resources"] .forecast-row { grid-template-columns: 130px minmax(0, 1fr) 92px; }
}
@media (max-width: 759px), (min-width: 801px) and (max-width: 991px) {
  main[data-view="resources"] .plan-layout { grid-template-columns: minmax(0, 1fr); }
}

/* ================================================================== окна === */

/* Общий вид окон области: подзаголовок под названием, группы — капсом без рамки,
   поля парами. Липкий футер и его отступы остаются из общего слоя. */
dialog.admin-dialog.grouped-dialog { width: min(42rem, calc(100vw - 2rem)); }
dialog.admin-dialog form > h2 + .hint { margin-top: calc(-1 * var(--sp-2)); }
dialog.admin-dialog .dialog-groups { grid-template-columns: minmax(0, 1fr); gap: var(--sp-4); }
dialog.admin-dialog .form-group:not(.work-op) {
  padding: 0; border: 0; border-radius: 0;
  grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-3) var(--sp-4);
}
dialog.admin-dialog .form-group:not(.work-op) > legend { padding: 0 0 var(--sp-1); }
dialog.admin-dialog .form-group > .hint { grid-column: 1 / -1; margin: 0; }
dialog.admin-dialog .form-group > label.check { align-self: end; min-height: var(--control-h-lg); }
dialog.admin-dialog .error:empty { display: none; }
.admin-mono { font-family: var(--mono); font-size: var(--fs-12-5); }
/* Строка кнопок внутри формы — не футер: липким и залитым остаётся только
   последний .row окна, где стоят «Отмена» и «Сохранить». */
dialog .row.admin-inline-row {
  position: static; margin: 0; padding: 0; border-top: 0; background: none;
  justify-content: flex-start;
}

/* Сотрудник: имя и «работает» рядом, роль и карточка техника парой, пояснение роли —
   тихой заливкой под ними. */
dialog.employee-dialog.grouped-dialog { width: min(38rem, calc(100vw - 2rem)); }
dialog.employee-dialog .form-group > .hint:not(:empty) {
  padding: var(--sp-2) var(--sp-2-5); border-radius: var(--radius-card);
  background: var(--fill-soft); color: var(--ink-2);
}

/* Связь с клиникой: адрес и ключ — строками целиком, как на макете. */
dialog.link-dialog.grouped-dialog { width: min(38rem, calc(100vw - 2rem)); }
dialog.link-dialog .dialog-groups > .form-group:last-of-type { grid-template-columns: minmax(0, 1fr); }
dialog.link-dialog input[name="base_url"] { font-family: var(--mono); font-size: var(--fs-12-5); }
dialog.link-dialog label.field:has(input[type="checkbox"]) > span {
  display: flex; align-items: center; gap: var(--sp-2); font-weight: var(--fw-500); color: var(--ink-2);
}
dialog.link-dialog label.field:has(input[type="checkbox"]) input { width: auto; }

/* Пароль и привязка кодом — короткие окна в одну колонку. */
dialog.password-dialog, dialog.pairing-dialog { width: min(32rem, calc(100vw - 2rem)); }
dialog.pairing-dialog .hint[role="status"]:not(:empty) {
  padding: var(--sp-2) var(--sp-2-5); border-radius: var(--radius-card);
  background: var(--info-soft); color: var(--info); font-size: var(--fs-12); line-height: 1.45;
}
dialog.pairing-dialog .error:not(:empty) {
  padding: var(--sp-2) var(--sp-2-5); border-radius: var(--radius-card);
  background: var(--danger-soft); color: var(--danger); font-size: var(--fs-12); line-height: 1.45;
}

/* Ссылка курьера: адрес моноширинным рядом с «Скопировать», отзыв — красным. */
dialog.courier-link-dialog { width: min(36rem, calc(100vw - 2rem)); }
dialog.courier-link-dialog .courier-link-field { display: grid; gap: var(--sp-1-5); }
dialog.courier-link-dialog input[readonly] {
  font-family: var(--mono); font-size: var(--fs-12-5); background: var(--fill-soft); color: var(--ink-2);
}
dialog.courier-link-dialog .row { gap: var(--sp-2); }
button.ghost.danger-ghost { color: var(--danger); border-color: var(--danger-soft); }
button.ghost.danger-ghost:hover:not(:disabled) { background: var(--danger-soft); color: var(--danger); }

/* Доставка коробки: кто везёт и когда — парой, что передают — строкой. */
dialog.delivery-dialog { width: min(36rem, calc(100vw - 2rem)); }
dialog.delivery-dialog .delivery-when { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-3); }
dialog.delivery-dialog input[type="date"], dialog.delivery-dialog input[type="time"] {
  font-family: var(--mono); font-size: var(--fs-12-5);
}

/* ======================================================== узкие экраны === */

/* Строка поездки складывается, когда ширина содержимого меньше 720 px (меню 232 px
   видно до 800 px экрана): флажок слева, всё остальное столбиком. */
@media (max-width: 719px), (min-width: 801px) and (max-width: 951px) {
  main[data-view="trips"] .trip-group .trip { grid-template-columns: 20px minmax(0, 1fr); align-items: start; }
  main[data-view="trips"] .trip-group .trip > :not(input),
  main[data-view="trips"] .trip-group .trip .trip-acts { grid-column: 2; }
}
@media (max-width: 42rem) {
  main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
    [data-view="operations"], [data-view="materials"], [data-view="works"]) > .bar > input[type="search"] {
    flex: 1 1 100%;
  }
  main:is([data-view="counterparties"], [data-view="couriers"], [data-view="technicians"],
    [data-view="operations"], [data-view="materials"], [data-view="works"]) > .bar > button.action {
    margin-left: 0;
  }
  main[data-view="settings"] .encrypted-backups { grid-template-columns: minmax(0, 1fr); }
  main[data-view="settings"] .employee-role { width: 100%; }
  main[data-view="settings"] .link-last { flex-basis: 100%; text-align: right; }
  dialog.admin-dialog .form-group { grid-template-columns: minmax(0, 1fr); }
  dialog.delivery-dialog .delivery-when { grid-template-columns: minmax(0, 1fr); }
}

/* ================================= справочники: список и панель (этап 2) === */

/* Общий приём 2 макетов: слева список строками 52 px, справа липкая панель
   440 px с вкладками и футером на светлой подложке. Уже 980 px контента панель выезжает
   поверх с затемнением (.dir-overlay), на телефоне — во весь экран. */
.dir-screen { display: block; min-width: 0; }
/* «Подрядчики», «Курьеры»: в макете max-width 960 вместе с полями страницы. */
.dir-screen.dir-narrow-page { max-width: calc(960px - 56px); }
@media (max-width: 800px) { .dir-screen.dir-narrow-page { max-width: calc(960px - 40px); } }
.dir-main { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
header.page.dir-head { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-3) var(--sp-4); flex-wrap: wrap; margin: 0; }
.dir-head-text { flex: 1 1 240px; min-width: 0; display: grid; gap: var(--sp-1); }
.dir-title { display: flex; align-items: center; gap: var(--sp-2-5); flex-wrap: wrap; }
header.page.dir-head h1 { margin: 0; font-size: var(--fs-26); font-weight: var(--fw-600); line-height: normal; letter-spacing: -.01em; }
.dir-head .section-sub { margin: 0; color: var(--muted); line-height: 1.45; max-width: 90ch; }
.dir-head .dir-ro { padding: 3px 10px; border-radius: var(--radius-pill); background: var(--chip-bg); color: var(--ink-2); font-size: var(--fs-12); font-weight: var(--fw-500); }
.dir-head > button.action { height: var(--control-h-lg); padding: 0 var(--sp-4); font-size: var(--fs-13); font-weight: var(--fw-500); }
.dir-head .plus-mark { font-size: var(--fs-17); line-height: 1; }
.pp-page { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.pp-page > .dir-head .section-sub { max-width: 720px; }
.pp-page > .dir-head > .pp-back { height: 32px; padding: 0 var(--sp-3); }
/* Вкладки экрана 18 (макет): подложка радиус 10, отступ 3; кнопки 32 px, 0 14, 13 px. */
main[data-view="pay-profiles"] [data-workspace="pay-profiles"] > .workspace-tabs { margin: 0 0 14px; padding: 3px; border-radius: var(--radius-card); }
main[data-view="pay-profiles"] [data-workspace="pay-profiles"] > .workspace-tabs [role="tab"] { min-height: 32px; padding: 0 14px; border-radius: var(--radius); font-size: var(--fs-13); font-weight: var(--fw-400); color: var(--ink); }
main[data-view="pay-profiles"] [data-workspace="pay-profiles"] > .workspace-tabs [aria-selected="true"] { font-weight: var(--fw-600); }
main[data-view="pay-profiles"] [data-workspace="pay-profiles"] [role="tabpanel"] { display: flex; flex-direction: column; gap: 14px; }
main[data-view="pay-profiles"] [data-workspace="pay-profiles"] [role="tabpanel"][hidden] { display: none; }
.dir-title .help-dot[aria-expanded] { width: 32px; height: 32px; border: 1px solid var(--button-border); border-radius: var(--radius-pill); color: var(--ink-2); font-weight: var(--fw-600); }
.dir-title .help-dot[aria-expanded] { background: var(--surface); }

.dir-help { display: grid; gap: var(--sp-1-5); max-width: 760px; padding: var(--sp-3) 14px; border: 1px solid var(--card-border); border-radius: var(--radius-card); background: var(--table-head-bg); color: var(--ink-2); line-height: 1.5; }
.dir-help[hidden] { display: none; }
.dir-notices:empty { display: none; }
.dir-pending { display: flex; gap: var(--sp-2-5) var(--sp-4); align-items: center; flex-wrap: wrap; padding: var(--sp-3) 14px; border: 1px solid var(--warn-line); border-radius: var(--radius-card); background: var(--warn-soft); line-height: 1.45; }
.dir-pending > span { flex: 1 1 300px; color: var(--ink-2); }
.dir-pending > button { height: 36px; padding: 0 14px; }
.dir-pending b { color: var(--warn); font-weight: var(--fw-600); }

/* Сегмент (общий приём 1): подложка chip, радиус 10, отступ 3; активный — белый. */
.dir-tools { display: flex; gap: var(--sp-2); flex-wrap: wrap; align-items: center; }
.dir-tools > input[type="search"] { flex: 1 1 15rem; min-width: 0; height: 36px; padding: 0 var(--sp-3); }
.dir-seg { display: inline-flex; gap: 2px; padding: 3px; background: var(--chip-bg); border-radius: var(--radius-card); max-width: 100%; overflow-x: auto; }
.dir-seg > button { flex: 0 0 auto; height: 32px; padding: 0 var(--sp-2-5); border: 0; border-radius: var(--radius); background: transparent; color: var(--ink-2); font: inherit; font-size: var(--fs-12-5); white-space: nowrap; cursor: pointer; display: inline-flex; align-items: center; gap: var(--sp-1-5); }
.dir-seg > button[aria-checked="true"], .dir-seg > button[aria-selected="true"] { background: var(--surface); color: var(--ink); font-weight: var(--fw-600); box-shadow: var(--shadow-tab); }
.dir-seg > button:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
.dir-seg > button:disabled { opacity: .5; cursor: not-allowed; }
.dir-count { font: var(--fw-400) var(--fs-11) var(--mono); color: var(--muted); }
.dir-count.warn { color: var(--warn); }
.dir-seg-wrap { flex-wrap: wrap; overflow: visible; }
.dir-seg-small > button { font-size: var(--fs-12); }
/* Фильтр списка (общий приём 3 макетов): подложка радиус 8, отступ 2; кнопки 32 px,
   радиус 6, шрифт 13, неактивная — цветом текста; счётчик моно 11,5. */
.dir-seg.dir-filter { padding: 2px; border-radius: var(--radius); }
.dir-seg.dir-filter > button { padding: 0 var(--sp-2-5); border-radius: var(--radius-sm); font-size: var(--fs-13); color: var(--ink); }
.dir-seg.dir-filter .dir-count { font-size: var(--fs-11-5); }
.dir-tool-check { display: inline-flex; align-items: center; gap: var(--sp-2); min-height: 36px; font-size: var(--fs-12-5); color: var(--ink-2); }
.dir-tool-check { font-size: var(--fs-13); color: var(--ink); white-space: nowrap; }
.dir-tool-check input { width: 18px; height: 18px; margin: 0; accent-color: var(--ink); }
.dir-form .dir-field > input:not([type=checkbox]) { height: 34px; }
.dir-layout[data-dir="technicians"] .dir-form .dir-field > input { height: 36px; }
.dir-layout:is([data-dir="operations"], [data-dir="materials"], [data-dir="works"]) .dir-pane,
.dir-layout:is([data-dir="operations"], [data-dir="materials"], [data-dir="works"]) .dir-panel-body { gap: var(--sp-3); }

/* Раскладка: левая колонка и панель сбоку шириной --dir-panel-w (400–440 по макету). */
.dir-layout { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--sp-4); align-items: start; min-width: 0; }
.dir-layout.has-panel.dir-side { grid-template-columns: minmax(0, 1fr) var(--dir-panel-w, 440px); }
.dir-scrim { position: fixed; inset: 0; z-index: 40; background: var(--overlay); border: 0; }
.dir-scrim[hidden] { display: none; }

/* Список: строки 52 px, выбранная — полоса ink слева и фон подложки. */
.dir-list { border: 1px solid var(--card-border); border-radius: var(--radius-panel); overflow: hidden; background: var(--surface); }
.dir-list:has(> .dir-empty, > .dir-nothing, > .dir-error, > .dir-loading) { border: 0; border-radius: 0; overflow: visible; }
.dir-row { display: block; border-top: 1px solid var(--row-rule); }
.dir-list > .dir-row:first-child, .dir-list > .dir-row-head + .dir-row, .dir-list > .dir-group-head + .dir-row { border-top: 0; }
.dir-row.archived > .dir-row-open > *, .dir-row.archived:not(:has(> .dir-row-open)) > :not(.dir-row-acts) { opacity: .6; }
.dir-row-open, .dir-row:not(:has(> .dir-row-open)):not(.dir-row-head) {
  width: 100%; min-height: 52px; padding: var(--sp-2) 14px; display: grid; gap: var(--sp-1) var(--sp-3);
  grid-template-columns: var(--dir-cols, minmax(0, 1fr) auto); align-items: center;
  border: 0; background: var(--surface); color: inherit; font: inherit; text-align: left;
}
.dir-row:not(:has(> .dir-row-open)):not(.dir-row-head) { border-top: 1px solid var(--row-rule); }
.dir-list > .dir-row:not(:has(> .dir-row-open)):first-child { border-top: 0; }
.dir-row-open { cursor: pointer; }
.dir-row-open:hover { background: var(--dialog-footer-bg); }
.dir-row-open:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
.dir-row.selected > .dir-row-open { background: var(--dialog-footer-bg); box-shadow: inset 3px 0 0 var(--ink); }
.dir-row-head { display: grid; grid-template-columns: var(--dir-cols); gap: var(--sp-3); align-items: center; min-height: 38px; padding: 0 14px; background: var(--table-head-bg); color: var(--muted); font-size: var(--fs-12); font-weight: var(--fw-500); border-top: 0; }
.dir-row-head > span:nth-child(3), .dir-row-head > span:nth-child(4) { text-align: right; }
.dir-list:not(.wide) > .dir-row-head { display: none; }
.dir-group-head { display: flex; align-items: baseline; gap: var(--sp-2); padding: var(--sp-2) 14px; background: var(--table-head-bg); border-top: 1px solid var(--row-rule); font-size: var(--fs-10-5); font-weight: var(--fw-600); letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.dir-list > .dir-group-head:first-child { border-top: 0; }
.dir-name-cell { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.dir-name { font-weight: var(--fw-600); overflow-wrap: anywhere; }
.dir-sub { font-size: var(--fs-12); color: var(--muted); line-height: 1.35; overflow-wrap: anywhere; }
.dir-sub.warn { color: var(--warn); }
.dir-sub.strong { font-weight: var(--fw-500); }
.dir-sub.danger, .dir-num.danger { color: var(--danger); }
.dir-meta { display: flex; gap: var(--sp-1-5) var(--sp-2); flex-wrap: wrap; align-items: center; }
.dir-code { font: var(--fw-500) var(--fs-12) var(--mono); color: var(--muted); white-space: nowrap; }
.dir-num { font: var(--fw-600) var(--fs-12-5) var(--mono); color: var(--ink); white-space: nowrap; font-variant-numeric: tabular-nums; }
.dir-num.muted { color: var(--muted); font-weight: var(--fw-400); }
.dir-num.info { color: var(--info); }
.dir-num.warn { color: var(--warn); }
.dir-cell-num { text-align: right; }
.dir-cell-text { font-size: var(--fs-12-5); color: var(--ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.dir-list:not(.wide) .dir-wide-only { display: none; }
.dir-row-acts { display: inline-flex; gap: var(--sp-1-5); flex-wrap: wrap; justify-content: flex-end; }
.dir-avatar { width: 32px; height: 32px; border-radius: var(--radius-pill); background: var(--chip-bg); color: var(--ink-2); display: grid; place-items: center; font-size: var(--fs-12); font-weight: var(--fw-600); }
.dir-stock { display: flex; flex-direction: column; align-items: flex-end; gap: 1px; }
.mono, input.mono { font-family: var(--mono); }
input.mono::placeholder { font-family: var(--font); }

/* Пилюля статуса (общий приём 10): точка 6 px и подпись. */
.dir-pill { display: inline-flex; align-items: center; gap: var(--sp-1-5); padding: 2px var(--sp-2); border-radius: var(--radius-pill); background: var(--chip-bg); color: var(--ink-2); font-size: var(--fs-12); font-weight: var(--fw-500); white-space: nowrap; }
.dir-dot { width: 6px; height: 6px; border-radius: var(--radius-pill); background: currentColor; flex: none; }
.dir-pill.ok { background: var(--ok-soft); color: var(--ok); }
.dir-pill.danger { background: var(--danger-soft); color: var(--danger); }
.dir-pill.warn { background: var(--warn-soft); color: var(--warn); }
.dir-pill.held { background: var(--held-soft); color: var(--held); }
.dir-chip { display: inline-block; padding: 1px 7px; border-radius: var(--radius-sm); background: var(--chip-bg); color: var(--ink-2); font-size: var(--fs-11-5); font-weight: var(--fw-500); }
.dir-chip.info { background: var(--info-soft); color: var(--info); }
.dir-chip.warn { background: var(--warn-soft); color: var(--warn); }

/* Колонки строк по экранам. */
/* Узкая строка заказчика (макет): «имя | пилюля», надбавка второй строкой слева. */
.dir-list-clients { --dir-cols: minmax(0, 1fr) auto; }
.dir-list-clients.wide { --dir-cols: minmax(0, 1.6fr) 150px 110px 60px minmax(0, 1fr); }
.dir-list-clients:not(.wide) .dir-cell-num { text-align: left; }
.dir-list-clients .dir-sub { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; overflow-wrap: normal; }
/* 15 · строка подрядчика — flex: имя и подпись, пилюля, «Изменить» 30 px. */
.dir-list.dir-list-contractors > .dir-row:not(:has(> .dir-row-open)):not(.dir-row-head) { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2) 14px; }
.dir-list-contractors .dir-name-cell { flex: 1 1 240px; }
.dir-list-contractors .dir-row-acts button { height: 30px; padding: 0 var(--sp-2-5); font-size: var(--fs-12-5); }
.dir-list-couriers { --dir-cols: 32px minmax(0, 1fr) auto auto auto; }
/* 17 · Техники: строка-flex 56 px, аватар 34 px индиго. */
.dir-list-techs .dir-row-open { display: flex; flex-wrap: wrap; gap: var(--sp-2) var(--sp-3); min-height: 56px; }
.dir-list-techs .dir-name-cell { flex: 1 1 180px; }
.dir-avatar.tech { width: 34px; height: 34px; flex: none; background: var(--indigo-50); color: var(--indigo-700); }
.dir-list-ops { --dir-cols: 56px minmax(0, 1fr) 100px; }
.dir-list-ops .dir-row-open { min-height: 48px; padding-block: var(--sp-1-5); }
.dir-list-ops .dir-name, .dir-list-materials .dir-name, .dir-list-works .dir-name { font-weight: var(--fw-500); }
.dir-group-head .dir-count { font-size: var(--fs-11-5); letter-spacing: 0; text-transform: none; font-weight: var(--fw-400); }
.dir-list-materials { --dir-cols: minmax(0, 1fr) auto; }
.dir-list-works { --dir-cols: 52px minmax(0, 1fr) 110px; }

/* Состояния списка: загрузка, ошибка с «Повторить», пусто с кнопкой, ничего не нашлось. */
.dir-loading { margin: 0; padding: var(--sp-6); color: var(--muted); text-align: center; }
.dir-error { display: flex; gap: var(--sp-2-5) var(--sp-4); align-items: center; flex-wrap: wrap; justify-content: space-between; padding: var(--sp-3) 14px; border: 1px solid var(--danger-line); border-radius: var(--radius-card); background: var(--danger-soft); color: var(--danger); line-height: 1.45; }
.dir-error > span { flex: 1 1 14rem; }
.dir-empty { display: flex; flex-direction: column; align-items: center; gap: var(--sp-2-5); padding: 40px var(--sp-6); border: 1px solid var(--card-border); border-radius: var(--radius-panel); background: var(--dialog-footer-bg); text-align: center; }
.dir-empty b { font-size: var(--fs-17); font-weight: var(--fw-600); }
.dir-empty p { margin: 0; max-width: 460px; color: var(--ink-2); line-height: 1.5; }
.dir-empty .blank-acts { margin-top: var(--sp-1); justify-content: center; }
.dir-empty button.action { height: var(--control-h-lg); padding: 0 var(--sp-4); }
.dir-nothing { padding: var(--sp-6); border: 1px dashed var(--rule-strong); border-radius: var(--radius-panel); text-align: center; color: var(--ink-2); }

/* Панель карточки: липкая справа, своя прокрутка тела, футер на подложке. */
.dir-panel { position: sticky; top: 72px; min-width: 0; max-height: calc(100vh - 96px); display: flex; flex-direction: column; border: 1px solid var(--card-border); border-radius: var(--radius-panel); background: var(--surface); overflow: hidden; }
.dir-panel[hidden] { display: none; }
.dir-form { display: flex; flex-direction: column; min-height: 0; flex: 1 1 auto; margin: 0; padding: 0; gap: 0; }
.dir-panel-head { flex: none; display: flex; align-items: flex-start; gap: var(--sp-2-5); padding: 14px var(--sp-4) var(--sp-2-5); }
.dir-panel-titles { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.dir-kicker.code { font: var(--fw-500) var(--fs-12) var(--mono); letter-spacing: 0; text-transform: none; }
.dir-kicker, .dir-caps { font-size: var(--fs-10-5); font-weight: var(--fw-600); letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.dir-panel-head h2 { margin: 0; font-size: var(--fs-17); font-weight: var(--fw-600); overflow-wrap: anywhere; }
.dir-panel-head h2:focus { outline: none; }
.dir-close { flex: none; width: 32px; height: 32px; border: 1px solid var(--button-border); border-radius: var(--radius); background: var(--surface); color: var(--ink-2); font: inherit; font-size: var(--fs-17); cursor: pointer; }
.dir-close:hover { background: var(--hover-bg); }
.dir-tabs { display: flex; flex: none; margin: 0 var(--sp-4); }
.dir-tabs > button { flex: 1; justify-content: center; height: 30px; color: var(--ink); }
.dir-panel-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 14px var(--sp-4) var(--sp-4); display: flex; flex-direction: column; gap: 14px; }
.dir-pane { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
/* Карточка без вкладок (техник): тело сразу под заголовком, как в макете 17. */
.dir-form:not(:has(> .dir-tabs)) > .dir-panel-body { padding-top: 0; }
.dir-pane[hidden] { display: none; }
.dir-panel-foot { flex: none; display: flex; justify-content: flex-end; gap: var(--sp-2); padding: var(--sp-3) var(--sp-4); border-top: 1px solid var(--card-border); background: var(--dialog-footer-bg); }
.dir-panel-foot[hidden] { display: none; }
.dir-panel-foot button { height: 36px; padding: 0 var(--sp-4); }
.dir-save-error { margin: 0; padding: var(--sp-2-5) var(--sp-3); border-radius: var(--radius); background: var(--danger-soft); color: var(--danger); line-height: 1.45; }
.dir-save-error[hidden] { display: none; }
.dir-form .form-group.dir-group { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--sp-2-5); margin: 0; padding: 0; border: 0; }
.dir-form .form-group.dir-group > legend { padding: 0 0 var(--sp-1-5); font-size: var(--fs-10-5); font-weight: var(--fw-600); letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.dir-form .span-all { grid-column: 1 / -1; }
.dir-field { display: flex; flex-direction: column; gap: var(--sp-1); font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--ink-2); min-width: 0; }
.dir-field[hidden] { display: none; }
.dir-field > input, .dir-field > textarea, .dir-field > select { font-weight: var(--fw-400); color: var(--ink); }
.dir-field > textarea { line-height: 1.45; resize: vertical; }
.dir-hint { margin: 0; font-size: var(--fs-12); font-weight: var(--fw-400); color: var(--muted); line-height: 1.4; }
.dir-field-error { font-size: var(--fs-12); font-weight: var(--fw-400); color: var(--danger); line-height: 1.4; }
.dir-field-error[hidden] { display: none; }
input.invalid, select.invalid, textarea.invalid { border-color: var(--danger); }
.dir-form input:disabled, .dir-form textarea:disabled, .dir-form select:disabled { background: var(--table-head-bg); color: var(--ink-2); }
.dir-check { display: flex; align-items: flex-start; gap: var(--sp-2-5); cursor: pointer; }
.dir-check input { width: 18px; height: 18px; margin: 1px 0 0; accent-color: var(--ink); flex: none; }
.dir-check-text { display: flex; flex-direction: column; gap: 2px; }
.dir-check-text b { font-weight: var(--fw-500); }
.dir-grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: var(--sp-2-5); }
.dir-grid-code { display: grid; grid-template-columns: 110px minmax(0, 1fr); gap: var(--sp-2-5); }
.dir-block { display: flex; flex-direction: column; gap: var(--sp-1-5); }
.dir-label { font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--ink-2); }
.dir-note { padding: var(--sp-2-5) var(--sp-3); border: 1px solid var(--info-line); border-radius: var(--radius-card); background: var(--info-soft); color: var(--ink-2); font-size: var(--fs-12-5); line-height: 1.45; }
.dir-x { width: 32px; height: 32px; flex: none; border: 1px solid var(--button-border); border-radius: var(--radius); background: var(--surface); color: var(--ink-2); font: inherit; cursor: pointer; }
.dir-x:hover:not(:disabled) { background: var(--hover-bg); }
.link-button { padding: 0; border: 0; background: none; color: var(--info); font: inherit; font-size: inherit; text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }
/* Ссылки макетов справочников — цветом текста (a { color: #17181a }). */
.link-button.ink { color: var(--ink); }
.link-button.ink:hover { color: var(--ink-2); }
.doc-empty { padding: 14px; color: var(--muted); }
.doc-empty.warn { color: var(--warn); }

/* Узкий контент: панель поверх списка с затемнением, прижата к правому краю окна;
   телефон — во весь экран. Ширина поверх — --dir-overlay-w (440–480 по макету). */
.dir-layout.dir-overlay > .dir-panel { position: fixed; top: var(--sp-3); right: 0; bottom: var(--sp-3); z-index: 50; width: min(var(--dir-overlay-w, 480px), calc(100% - 24px)); max-height: none; box-shadow: var(--shadow-panel); }
body.dir-panel-open { overflow: hidden; }
@media (max-width: 600px) {
  .dir-layout.dir-overlay > .dir-panel { inset: 0; width: 100%; }
  .dir-layout.dir-overlay.dir-phone-square > .dir-panel { border-radius: 0; }
  .dir-tools > input[type="search"] { flex-basis: 100%; }
  .dir-list-couriers .dir-row-open, .dir-list-couriers .dir-row:not(:has(> .dir-row-open)):not(.dir-row-head) { padding-inline: var(--sp-3); }
  .dir-list-couriers { --dir-cols: 32px minmax(0, 1fr) auto; }
  .dir-list-couriers .dir-cell-text { display: none; }
  .dir-list-couriers .dir-row-acts { grid-column: 2 / -1; justify-content: flex-start; }
  .dir-list-ops, .dir-list-works { --dir-cols: 48px minmax(0, 1fr) auto; }
}

/* 14 · Заказчики: врачи и цены во вкладках профиля. */
.doc-list, .price-list, .norm-list { border: 1px solid var(--card-border); border-radius: var(--radius-card); overflow: hidden; }
.doc-row { display: grid; grid-template-columns: minmax(0, 1fr) 130px auto; gap: var(--sp-1-5); align-items: center; padding: var(--sp-1-5) var(--sp-2); border-top: 1px solid var(--row-rule); }
.doc-row:first-child, .price-row:first-child, .norm-row:first-child { border-top: 0; }
.doc-row.archived > input { opacity: .55; }
.doc-row > input { height: 32px; padding: 0 var(--sp-2); border: 1px solid transparent; border-radius: var(--radius-sm); background: transparent; min-width: 0; }
.doc-row > input:focus { border-color: var(--field-border); background: var(--surface); }
.doc-row > input.mono { font-size: var(--fs-12); }
.doc-row > .doc-row-error { grid-column: 1 / -1; }
.doc-row > button.tiny { height: 28px; padding: 0 var(--sp-2); border-radius: var(--radius-sm); font-size: var(--fs-12); }
/* Подсказки во вкладках карточек (макеты 14, 19, 21): 12,5 px. */
.dir-tab-hint { margin: 0; font-size: var(--fs-12-5); color: var(--ink-2); line-height: 1.45; }
.dir-tab-hint.muted { color: var(--muted); }
.price-row > input::placeholder, .pp-row > input::placeholder, .pp-rate > input::placeholder, .norm-row > input::placeholder { font-family: var(--mono); }
.doc-tab, .price-tab { display: flex; flex-direction: column; gap: 14px; }
.doc-add { display: flex; gap: var(--sp-1-5); flex-wrap: wrap; }
.doc-add > input { flex: 1 1 200px; height: 34px; padding: 0 var(--sp-2-5); min-width: 0; }
.doc-add > button { height: 34px; }
.doc-status:empty { display: none; }
.price-row { display: grid; grid-template-columns: minmax(0, 1fr) 110px; gap: var(--sp-1) var(--sp-2-5); align-items: center; padding: var(--sp-2) var(--sp-2-5); border-top: 1px solid var(--row-rule); }
.price-row.own { background: var(--info-tint); }
.price-row .link-button { font-size: var(--fs-12); }
.price-row.own > input { border-color: var(--info-line); }
.price-row > input { height: 32px; padding: 0 var(--sp-2); text-align: right; font-size: var(--fs-12-5); min-width: 0; }
.price-row > .dir-field-error { grid-column: 1 / -1; }
.price-name { font-weight: var(--fw-500); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.struck { text-decoration: line-through; }

/* 16 · Курьеры: окно ссылки с подтверждением встроенным красным блоком. */
dialog.dir-dialog { width: min(440px, calc(100vw - 2rem)); }
/* 15 · окно подрядчика по макету: 440 px, радиус 14, футер на подложке. */
dialog.contractor-dialog { padding: 0; border-radius: 14px; overflow: hidden; }
dialog.contractor-dialog > form { display: block; margin: 0; padding: 0; }
dialog.contractor-dialog .dir-dialog-body { padding: 18px 20px 14px; gap: var(--sp-3); }
dialog.contractor-dialog h2 { font-size: var(--fs-17); font-weight: var(--fw-600); }
dialog.contractor-dialog .dir-field > input { height: 36px; }
.contractor-active { align-items: center; }
.contractor-active input { margin: 0; }
.dir-dialog-foot { display: flex; justify-content: flex-end; gap: var(--sp-2); margin: 0; padding: var(--sp-3) 20px; border-top: 1px solid var(--card-border); background: var(--dialog-footer-bg); }
.dir-dialog-foot > button { height: 32px; padding: 0 14px; }
.dir-dialog-body { display: flex; flex-direction: column; gap: var(--sp-3); }
.dir-dialog-body h2 { margin: 0; }
.courier-link-box { display: flex; flex-direction: column; gap: var(--sp-2-5); }
.courier-link-row { display: flex; gap: var(--sp-1-5); }
.courier-link-row > input { flex: 1; min-width: 0; font-size: var(--fs-12); background: var(--fill-soft); color: var(--ink-2); }
.courier-link-empty { display: flex; justify-content: space-between; align-items: center; gap: var(--sp-2-5); flex-wrap: wrap; padding: 14px; border: 1px dashed var(--rule-strong); border-radius: var(--radius-card); color: var(--ink-2); }
.confirm-block { display: flex; flex-direction: column; gap: var(--sp-2); padding: var(--sp-3) 14px; border: 1px solid var(--danger-line); border-radius: var(--radius-card); background: var(--danger-soft); line-height: 1.45; color: var(--ink-2); }
.confirm-block > b { color: var(--danger); font-weight: var(--fw-600); }
.confirm-block > .row { position: static; display: flex; justify-content: flex-end; gap: var(--sp-2); margin: 0; padding: 0; border: 0; background: none; }
button.danger-action { font: inherit; font-size: var(--fs-12-5); font-weight: var(--fw-600); height: var(--control-h); padding: 0 var(--sp-3); border: 0; border-radius: var(--radius); background: var(--danger); color: var(--ink-inverse); cursor: pointer; }
button.danger-action:hover:not(:disabled) { filter: brightness(.92); }

/* 17 · Техники: готовность к работе. */
.tech-ready { display: flex; flex-direction: column; border: 1px solid var(--card-border); border-radius: var(--radius-card); overflow: hidden; }
.tech-ready-head { padding: var(--sp-2) var(--sp-3); background: var(--table-head-bg); font-size: var(--fs-10-5); font-weight: var(--fw-600); letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.tech-check { display: flex; align-items: center; gap: var(--sp-2-5); padding: var(--sp-2-5) var(--sp-3); border-top: 1px solid var(--row-rule); }
.tech-check > .dir-name-cell { flex: 1; }
.tech-check b { font-weight: var(--fw-500); }
.tech-mark { width: 20px; height: 20px; flex: none; border-radius: var(--radius-pill); display: grid; place-items: center; background: var(--decor); color: var(--ink-inverse); font-size: var(--fs-11); font-weight: var(--fw-700); }
.tech-mark.ok { background: var(--ok); }
.tech-mark.warn { background: var(--warn); }
.tech-check > .link-button { font-size: var(--fs-12-5); white-space: nowrap; }

/* 19 · Операции: нормы материалов. */
.norm-row { display: grid; grid-template-columns: minmax(0, 1fr) 92px 40px 32px; gap: var(--sp-2); align-items: center; padding: var(--sp-1-5) var(--sp-2-5); border-top: 1px solid var(--row-rule); }
.norm-row > input { height: 30px; padding: 0 var(--sp-2); border-radius: var(--radius-sm); text-align: right; font-size: var(--fs-12-5); min-width: 0; }
.norm-row > .dir-x { width: 28px; height: 28px; border-radius: var(--radius-sm); }
.norm-row > .dir-field-error { grid-column: 1 / -1; }
.norm-name { overflow-wrap: anywhere; }
.dir-used { margin: 0; padding: var(--sp-2) var(--sp-2-5); border-radius: var(--radius); background: var(--table-head-bg); font-size: var(--fs-12-5); color: var(--ink-2); }
input.dir-w160 { width: 160px; max-width: 100%; }
input.dir-w180 { width: 180px; max-width: 100%; }
.dir-field:has(> input.dir-w160, > input.dir-w180) { align-items: flex-start; }

/* 20 · Материалы: «Как считаем» — три карточки-переключателя. */
.mode-cards { display: flex; flex-direction: column; gap: var(--sp-1-5); }
.mode-card { display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: var(--sp-2-5); align-items: start; padding: var(--sp-2-5) var(--sp-3); border: 1px solid var(--button-border); border-radius: var(--radius-card); background: var(--dialog-footer-bg); color: inherit; font: inherit; text-align: left; cursor: pointer; }
.mode-card[aria-checked="true"] { border-color: var(--ink); background: var(--surface); }
.mode-card b { font-weight: var(--fw-500); }
.mode-dot { width: 16px; height: 16px; margin-top: 1px; border-radius: var(--radius-pill); border: 2px solid var(--gray-400); box-shadow: inset 0 0 0 3px var(--surface); background: var(--surface); }
.mode-card[aria-checked="true"] .mode-dot { border-color: var(--ink); box-shadow: inset 0 0 0 3px var(--surface); background: var(--ink); }
.mode-card:disabled { cursor: not-allowed; opacity: 1; }
.ru-pane { display: flex; flex-direction: column; gap: var(--sp-3); }
.ru-pane > button { align-self: flex-start; height: 32px; padding: 0 var(--sp-3); }
.ru-pane > [hidden] { display: none; }
.ru-note { padding: var(--sp-2-5) var(--sp-3); border-radius: var(--radius); background: var(--table-head-bg); font-size: var(--fs-12-5); color: var(--ink-2); line-height: 1.45; }
.ru-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2-5); }
.ru-grid .span-all { grid-column: 1 / -1; }
.ru-required { color: var(--warn); }
.dir-field.ru-reason { flex-direction: row; flex-wrap: wrap; align-items: baseline; gap: var(--sp-1) 0; white-space: pre; }
.dir-field.ru-reason > textarea { flex: 1 1 100%; white-space: normal; resize: vertical; padding: var(--sp-2) var(--sp-2-5); }
.dir-field.ru-reason[hidden] { display: none; }
.dir-grid-half { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2-5); }
.dir-hint-tight { margin-top: -6px; }

/* 21 · Прайс: шаги состава с ↑↓ и подсветкой дубля. */
.work-steps { display: flex; flex-direction: column; gap: var(--sp-2); }
.work-op { display: flex; flex-direction: column; gap: var(--sp-2); padding: var(--sp-2-5) var(--sp-3); border: 1px solid var(--card-border); border-radius: var(--radius-card); }
.work-op.dup { border-color: var(--danger-line); }
.work-step-top { display: flex; gap: var(--sp-2); align-items: center; }
.work-step-top > select { flex: 1; min-width: 0; height: 32px; }
.work-step-top > .dir-x { width: 28px; height: 28px; border-radius: var(--radius-sm); }
.work-step-n { width: 22px; height: 22px; flex: none; border-radius: var(--radius-pill); background: var(--ink); color: var(--ink-inverse); display: grid; place-items: center; font: var(--fw-600) var(--fs-11) var(--mono); }
.work-step-mode { display: flex; gap: var(--sp-2); flex-wrap: wrap; align-items: center; padding-left: 30px; }
.work-qty { display: inline-flex; align-items: center; gap: var(--sp-1-5); font-size: var(--fs-12-5); color: var(--ink); }
.work-qty[hidden] { display: none; }
.work-qty > input { width: 52px; height: 28px; padding: 0 var(--sp-1-5); border-radius: var(--radius-sm); text-align: right; }
.work-op > .dir-field-error { padding-left: 30px; }
.work-empty { padding: 14px; border-radius: var(--radius-card); background: var(--warn-soft); color: var(--warn); line-height: 1.45; }
button.dir-add-step { align-self: flex-start; height: 32px; padding: 0 var(--sp-3); border: 1px dashed var(--gray-500); border-radius: var(--radius); background: var(--surface); color: var(--ink); font: inherit; cursor: pointer; }
.dir-seg.dir-seg-step { padding: 2px; border-radius: var(--radius); }
.dir-seg.dir-seg-step > button { height: 26px; padding: 0 var(--sp-2); border-radius: var(--radius-sm); color: var(--ink); }
.dir-seg.dir-seg-fill { display: flex; }
.dir-seg.dir-seg-fill > button { flex: 1; justify-content: center; height: 30px; padding: 0 var(--sp-2); color: var(--ink); }

/* 18 · Зарплатные прайсы: список прайсов слева, редактор справа. */
.pp-status:empty { display: none; }
.pp-layout { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 14px; align-items: start; }
.pp-list { display: flex; flex-direction: column; gap: var(--sp-1-5); }
.pp-card { display: flex; flex-direction: column; gap: 2px; padding: var(--sp-2-5) var(--sp-3); border: 1px solid var(--card-border); border-radius: var(--radius-card); background: var(--dialog-footer-bg); color: inherit; font: inherit; text-align: left; cursor: pointer; }
.pp-card[aria-pressed="true"] { border-color: var(--ink); background: var(--surface); }
.pp-card.archived { opacity: .6; }
.pp-card-top { display: flex; justify-content: space-between; gap: var(--sp-2); }
.pp-list > button.pp-add { height: 36px; border: 1px dashed var(--gray-500); border-radius: var(--radius-card); background: var(--surface); color: var(--ink); font: inherit; cursor: pointer; box-shadow: none; }
.pp-editor { display: flex; flex-direction: column; gap: var(--sp-3); min-width: 0; border: 1px solid var(--card-border); border-radius: var(--radius-panel); padding: var(--sp-4); }
.pp-groups { border: 1px solid var(--card-border); border-radius: var(--radius-card); max-height: 460px; overflow-y: auto; }
.pp-group-head { position: sticky; top: 0; z-index: 1; padding: var(--sp-1-5) var(--sp-3); background: var(--table-head-bg); border-top: 1px solid var(--card-border); font-size: var(--fs-10-5); font-weight: var(--fw-600); letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.pp-row { display: grid; grid-template-columns: 52px minmax(0, 1fr) 92px 130px; gap: var(--sp-2-5); align-items: center; padding: var(--sp-1-5) var(--sp-3); border-top: 1px solid var(--row-rule); }
.pp-row > .dir-code { font-weight: var(--fw-400); }
.pp-row > .pp-chip { justify-self: end; }
.pp-row.changed { background: var(--changed-bg); }
.pp-row.changed > input { border-color: var(--changed-line); }
.pp-row.archived > .pp-op { color: var(--muted); }
.pp-row > input { height: 32px; padding: 0 var(--sp-2); text-align: right; font-size: var(--fs-12-5); min-width: 0; background: var(--surface); }
.pp-op { min-width: 0; overflow-wrap: anywhere; }
/* Узкая строка ставки — как в макете: колонка названия может сжаться до нуля, текст
   переносится по словам и заходит под колонку признака, а не ломается по буквам. */
.pp-row > .pp-op { overflow-wrap: normal; }
.pp-editor > .dir-grid-2 { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
.pp-editor .dir-tool-check input { width: 18px; height: 18px; margin: 0; accent-color: var(--ink); }
.pp-editor .pp-tools > input[type="search"] { height: 34px; flex: 1 1 200px; }
.pp-chip { padding: 1px 7px; border-radius: var(--radius-pill); font-size: var(--fs-11); font-weight: var(--fw-600); color: var(--decor); }
.pp-chip.free { background: var(--info-soft); color: var(--info); }
.pp-summary { display: flex; gap: var(--sp-2-5) 14px; align-items: center; flex-wrap: wrap; padding: var(--sp-2-5) var(--sp-3); border-radius: var(--radius-card); background: var(--warn-soft); }
.pp-summary > button { height: 32px; padding: 0 14px; }
.pp-summary > button.ghost { border-color: var(--changed-button-line); background: var(--surface); }
.pp-summary[hidden] { display: none; }
.pp-summary-text { flex: 1 1 280px; color: var(--ink-2); line-height: 1.45; }
.pp-summary-text b { color: var(--ink-2); font-weight: var(--fw-600); }
.pp-summary > .dir-field-error { flex-basis: 100%; }
.pp-techs, .pp-rates { border: 1px solid var(--card-border); border-radius: var(--radius-panel); overflow: hidden; }
.pp-techs { max-width: 820px; }
.pp-rates { max-width: 900px; }
.pp-note { margin: 0; color: var(--ink-2); }
.pp-rates-hint { margin: 0; max-width: 760px; font-size: var(--fs-12-5); color: var(--ink-2); line-height: 1.45; }
.pp-tech { display: flex; flex-wrap: wrap; gap: var(--sp-2) 14px; align-items: center; padding: var(--sp-2-5) 14px; border-top: 1px solid var(--row-rule); }
.pp-tech > b { flex: 1 1 160px; font-weight: var(--fw-600); }
.pp-tech > .pp-pick { flex: 0 1 280px; min-width: 200px; }
.pp-tech > .pp-pick > select { width: 100%; height: 34px; }
.pp-tech > .dir-field-error { flex-basis: 100%; }
.pp-tech:first-child, .pp-rate:first-child { border-top: 0; }
.pp-tech > .dir-field-error, .pp-rate > .dir-field-error { grid-column: 1 / -1; }
.pp-rate-head { display: flex; gap: var(--sp-2-5); align-items: center; flex-wrap: wrap; }
.pp-rate-head > select { width: 240px; max-width: 100%; height: 34px; }
.pp-rate-head > .dir-sub { font-size: var(--fs-12-5); }
.pp-rate { display: grid; grid-template-columns: minmax(0, 1fr) 200px 140px; gap: 6px var(--sp-3); align-items: center; padding: var(--sp-2) 14px; border-top: 1px solid var(--row-rule); }
.pp-rate .dir-code { font-weight: var(--fw-400); }
.pp-eff .dir-sub { font-size: var(--fs-11-5); }
.pp-rate > input { height: 32px; padding: 0 var(--sp-2); text-align: right; min-width: 0; }
.pp-rate > input.own { border-color: var(--info-line); }
.pp-eff { display: flex; flex-direction: column; gap: 1px; }
.pp-eff b.muted { color: var(--muted); font-weight: var(--fw-400); }
/* Пороги макета по ширине контента: 760 (окно ≤ 992 без меню) — список прайсов над
   редактором; 640 — ставка в две колонки. */
@media (max-width: 991.98px) and (min-width: 800.02px), (max-width: 760px) {
  .pp-layout { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 871.98px) and (min-width: 800.02px), (max-width: 639.98px) {
  .pp-rate { grid-template-columns: minmax(0, 1fr) 110px; }
}

/* 16 · Курьеры по макету «Курьеры»: страница до 1000 px, строка — флекс с переносом
   (аватар · имя и телефон · поездки сегодня · ссылка · кнопки), сегмент 8/2,
   окна 500 px. Все правила под .dir-couriers — общий движок справочников не трогают. */
.dir-couriers { max-width: 944px; gap: 14px; }
.dir-couriers .dir-head { align-items: flex-end; margin: 0; }
.dir-couriers .dir-head .section-sub { line-height: 1.45; }
.dir-couriers .dir-tools > input[type="search"] { flex: 1 1 240px; }
.dir-couriers .dir-seg { gap: 2px; padding: 2px; border-radius: var(--radius); }
.dir-couriers .dir-seg > button { height: 32px; padding: 0 10px; border-radius: var(--radius-sm); font-size: var(--fs-13); color: var(--ink); }
.dir-couriers .dir-seg .dir-count { font-size: 11.5px; }
.dir-couriers .dir-list:empty { display: none; }
.dir-couriers .dir-list-couriers > .dir-row:not(.dir-row-head) {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2) 14px;
  min-height: 56px; padding: var(--sp-2) 14px;
}
.dir-couriers .dir-list-couriers .dir-avatar { width: 34px; height: 34px; flex: none; background: var(--teal-soft); color: var(--teal); }
.dir-couriers .dir-list-couriers .dir-name-cell { flex: 1 1 200px; }
.dir-couriers .dir-list-couriers .dir-sub.mono { font-size: var(--fs-12); color: var(--ink-2); }
.dir-couriers .dir-list-couriers .dir-cell-text { display: inline; font-size: var(--fs-12-5); color: var(--ink-2); overflow: visible; }
.dir-couriers .dir-list-couriers .dir-row-acts { flex-wrap: nowrap; gap: var(--sp-1-5); }
.dir-couriers .dir-list-couriers .dir-row-acts > button { height: 32px; min-height: 32px; padding: 0 10px; font-size: var(--fs-13); font-weight: var(--fw-400); background: var(--surface); }
.dir-couriers .dir-list-couriers .dir-row-acts > button:first-child { padding: 0 12px; font-weight: var(--fw-500); }
dialog.dir-dialog.courier-dialog, dialog.courier-link-dialog { width: min(500px, calc(100vw - 32px)); }
dialog.courier-link-dialog .courier-link-lead { margin: 0; color: var(--ink-2); font-size: var(--fs-13); line-height: 1.5; }
dialog.courier-dialog label.check { display: flex; align-items: center; gap: var(--sp-2-5); }
dialog.courier-dialog label.check > input { width: 18px; height: 18px; margin: 0; accent-color: var(--ink); }
dialog.courier-link-dialog .courier-link-empty {
  flex-direction: column; align-items: flex-start; justify-content: flex-start;
  border: 0; border-radius: var(--radius-card); background: var(--gray-50); color: var(--ink);
}
dialog.courier-link-dialog .courier-link-row > input { height: 36px; background: var(--gray-50); }
dialog.courier-link-dialog .confirm-block { padding: var(--sp-3); border-radius: var(--radius-card); gap: var(--sp-2); }
dialog.courier-link-dialog .confirm-block button { height: 30px; }

/* «Производство · Порядок этапов» (макет 27 этапа 3, ADR-0047). */
main[data-view="settings"] .settings-lab > .settings-route-order { grid-column: 1 / -1; }
main[data-view="settings"] .settings-route-head { display: flex; flex-direction: column; gap: 2px; }
main[data-view="settings"] .settings-route-eyebrow { font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--muted); }
main[data-view="settings"] .settings-route-lead { margin: 0; font-size: var(--fs-12-5); color: var(--ink-2); line-height: 1.45; }
main[data-view="settings"] .settings-route-segment { align-self: flex-start; flex-wrap: wrap; max-width: 100%; border-radius: 10px; }
main[data-view="settings"] .settings-route-segment > button { flex: none; height: 32px; padding: 0 14px; font-size: var(--fs-13); }
main[data-view="settings"] .settings-route-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: var(--sp-2); }
main[data-view="settings"] .settings-route-card {
  display: flex; flex-direction: column; gap: var(--sp-1); padding: var(--sp-2-5) var(--sp-3);
  border: 1px solid var(--card-border); border-radius: 10px; background: var(--surface);
}
main[data-view="settings"] .settings-route-card.is-selected { border-color: var(--ink); background: var(--lime-50); }
main[data-view="settings"] .settings-route-card > b { font-weight: var(--fw-600); }
main[data-view="settings"] .settings-route-card > span { font-size: var(--fs-12-5); color: var(--ink-2); line-height: 1.45; }
main[data-view="settings"] .settings-route-head > h2.sect {
  margin: 0; padding: 0; border: 0; font-size: var(--fs-14); font-weight: var(--fw-600); letter-spacing: 0; text-transform: none; color: var(--ink);
}
/* Без права менять (макет: приёмщик) сегмент выглядит как у всех, только не нажимается. */
main[data-view="settings"] .settings-route-segment > button:disabled { opacity: 1; color: var(--ink); cursor: default; }

/* 32 · «Бейджи, посты и правила» (макет «Бейджи и посты.dc.html», ADR-0044 Q1).
   Вкладки этапа Q1: «Карточка техника», «Посты и места», «Печать». */
main[data-view="badges"] { line-height: normal; }
.badges-page { display: flex; flex-direction: column; gap: 16px; min-width: 0; max-width: 1080px; }
.badges-head { display: flex; flex-direction: column; gap: 4px; }
.badges-head h1 { margin: 0; font-size: var(--fs-26); font-weight: var(--fw-600); letter-spacing: -.01em; }
.badges-head p { margin: 0; color: var(--gray-600); line-height: 1.45; max-width: 720px; }
.badges-ro { padding: 10px 14px; border-radius: 10px; background: var(--gray-100); color: var(--gray-700); }
.badges-muted { color: var(--gray-600); }
.badges-body { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.badges-failed { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; color: var(--danger); }
.badges-seg { display: flex; width: fit-content; gap: 2px; padding: 2px; background: var(--gray-100); border-radius: 8px; align-self: flex-start; flex-wrap: wrap; max-width: 100%; }
.badges-seg > button { height: 32px; padding: 0 12px; border: 0; border-radius: 6px; background: transparent; box-shadow: none; font: inherit; font-weight: 400; color: var(--gray-900); cursor: pointer; }
.badges-seg > button:is([aria-selected="true"], [aria-checked="true"]) { background: var(--gray-0); box-shadow: var(--shadow-tab); font-weight: 600; }
.badges-max-select { width: 96px; font-family: var(--mono); }

.badges-techs { border: 1px solid var(--gray-200); border-radius: 12px; overflow: hidden; }
.badges-tech { width: 100%; display: flex; align-items: center; gap: 12px; min-height: 56px; padding: 8px 14px; border: 0; border-top: 1px solid var(--gray-150); background: var(--gray-0); text-align: left; font: inherit; color: inherit; cursor: pointer; }
.badges-tech.is-open { background: var(--gray-50); }
.badges-ini { width: 34px; height: 34px; flex: none; border-radius: var(--radius-pill); background: var(--indigo-50); color: var(--indigo-700); display: grid; place-items: center; font-weight: 600; font-size: 12px; }
.badges-ini.is-lg { width: 40px; height: 40px; font-size: var(--fs-13); }
.badges-tech-name { flex: 1; display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.badges-tech-name b { font-weight: 600; }
.badges-tech-name span { font-size: 12px; color: var(--gray-600); }
.badges-pill { display: inline-flex; align-items: center; gap: 6px; padding: 2px 8px; border-radius: var(--radius-pill); font-size: 12px; font-weight: 500; background: var(--gray-100); color: var(--gray-700); }
.badges-pill.is-line { align-self: flex-start; padding: 3px 10px; font-size: var(--fs-12-5); }
.badges-pill.is-ok { background: var(--green-50); color: var(--green-700); }
.badges-pill.is-bad { background: var(--red-50); color: var(--red-700); }
.badges-dot { width: 6px; height: 6px; border-radius: var(--radius-pill); background: currentColor; flex: none; }

.badges-layer { position: fixed; inset: 0; z-index: 55; }
.badges-scrim { position: fixed; inset: 0; z-index: 55; background: var(--scrim-light); }
.badges-drawer { position: fixed; top: 0; right: 0; bottom: 0; z-index: 56; width: 480px; background: var(--gray-0); box-shadow: var(--shadow-drawer-right); display: flex; flex-direction: column; }
@media (max-width: 640px) { .badges-drawer { width: 100%; } }
.badges-drawer-head { padding: 16px 20px; border-bottom: 1px solid var(--gray-200); display: flex; align-items: center; gap: 12px; }
.badges-drawer-name { flex: 1; display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.badges-drawer-name h2 { margin: 0; font-size: var(--fs-17); font-weight: 600; }
.badges-drawer-name span { color: var(--gray-600); }
.badges-close { width: 32px; height: 32px; border: 1px solid var(--gray-250); border-radius: 8px; background: var(--gray-0); font: inherit; cursor: pointer; }
.badges-drawer-body { flex: 1; min-height: 0; overflow: auto; padding: 18px 20px; display: flex; flex-direction: column; gap: 22px; }
.badges-sec { display: flex; flex-direction: column; gap: 10px; }
.badges-sec-title { font-size: var(--fs-14); font-weight: 600; }
.badges-card { width: 255px; height: 162px; border: 1px solid var(--gray-300); border-radius: 10px; padding: 12px 14px; display: flex; gap: 10px; }
.badges-card.is-revoked { opacity: .45; }
.badges-card-left { flex: 1; display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.badges-card-brand { font: 700 11px var(--mono); }
.badges-card-ini { width: 44px; height: 44px; border-radius: var(--radius-pill); background: var(--indigo-50); color: var(--indigo-700); display: grid; place-items: center; font-weight: 700; font-size: 15px; }
.badges-card-left b { font-size: var(--fs-13); font-weight: 600; line-height: 1.2; }
.badges-card-note { margin-top: auto; font-size: 9px; color: var(--gray-600); }
.badges-card-qr { width: 100px; height: 100px; align-self: center; flex: none; }
.badges-card-qr.is-hidden { border: 1px dashed var(--gray-300); border-radius: 6px; background: repeating-linear-gradient(135deg, var(--gray-100) 0 6px, var(--gray-0) 6px 12px); }
.badges-acts { display: flex; gap: 6px; flex-wrap: wrap; }
.badges-btn { height: 32px; padding: 0 12px; border: 1px solid var(--gray-250); border-radius: 8px; background: var(--gray-0); font: inherit; color: var(--gray-900); cursor: pointer; }
.badges-btn.is-bad { border-color: var(--red-200); color: var(--red-700); }
.badges-none { display: flex; flex-direction: column; gap: 10px; padding: 14px; border-radius: 10px; border: 1px dashed var(--gray-300); background: var(--gray-25); line-height: 1.45; }
.badges-none b { font-weight: 600; }
.badges-none > .action { align-self: flex-start; padding: 0 14px; font-weight: 500; }
.badges-ask { padding: 12px; border-radius: 10px; display: flex; flex-direction: column; gap: 8px; line-height: 1.4; }
.badges-ask.is-bad { background: var(--red-50); }
.badges-ask.is-bad b { color: var(--red-700); font-weight: 600; }
.badges-ask.is-warn { background: var(--amber-50); }
.badges-ask.is-warn b { color: var(--amber-700); font-weight: 600; }
.badges-ask-acts { display: flex; gap: 6px; justify-content: flex-end; }
.badges-ask-no { height: 30px; padding: 0 12px; border: 1px solid var(--gray-250); border-radius: 8px; background: var(--gray-0); font: inherit; cursor: pointer; }
.badges-ask-yes { height: 30px; padding: 0 12px; border: 0; border-radius: 8px; background: var(--gray-900); color: var(--gray-0); font: inherit; font-weight: 500; cursor: pointer; }
.badges-ask-yes.is-bad { background: var(--red-700); }

.badges-posts { display: flex; flex-direction: column; gap: 10px; }
.badges-h2 { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.badges-h2 h2 { flex: 1; margin: 0; font-size: var(--fs-17); font-weight: 600; }
.badges-h2 .action, .badges-cmds .action { padding: 0 14px; font-weight: 500; }
.badges-warn { display: flex; gap: 10px; align-items: flex-start; padding: 10px 14px; border-radius: 10px; background: var(--amber-50); color: var(--gray-900); line-height: 1.45; }
.badges-warn b { font-weight: 600; }
.badges-warn .badges-warn-mark { color: var(--amber-700); font-weight: 700; }
.badges-post-list { border: 1px solid var(--gray-200); border-radius: 12px; overflow: hidden; }
.badges-post { display: flex; align-items: center; gap: 8px 16px; flex-wrap: wrap; min-height: 52px; padding: 8px 14px; border-top: 1px solid var(--gray-150); }
.badges-post-name { flex: 1 1 180px; font-weight: 600; }
.badges-post-shop { flex: 0 1 160px; color: var(--gray-700); }
.badges-post-net { flex: 0 1 200px; display: inline-flex; align-items: center; gap: 6px; font-weight: 500; }
.badges-post-net.is-ok { color: var(--green-700); }
.badges-post-net.is-off { color: var(--orange-700); }
.badges-post-dev { flex: 0 1 140px; color: var(--gray-600); }
.badges-cmds { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 14px 16px; border: 1px solid var(--gray-200); border-radius: 12px; }
.badges-cmds > div { flex: 1 1 300px; display: flex; flex-direction: column; gap: 4px; }
.badges-cmds > div b { font-size: var(--fs-14); font-weight: 600; }
.badges-cmds > div span { color: var(--gray-700); line-height: 1.45; }

.badges-printview { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.badges-print-row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.badges-print-row > .badges-print { margin-left: auto; padding: 0 14px; font-weight: 500; }
.badges-sheet-box { padding: 24px; border-radius: 12px; background: var(--gray-100); display: flex; justify-content: center; overflow: auto; }
.badges-sheet { width: 520px; flex: none; aspect-ratio: 210 / 297; background: var(--gray-0); box-shadow: var(--shadow-sheet); padding: 26px 22px; display: grid; grid-template-columns: 1fr 1fr; grid-auto-rows: min-content; gap: 10px; }
.badges-sheet.is-cards { grid-auto-rows: 1fr; }
.badges-mini { aspect-ratio: 85 / 54; border: 1px dashed var(--gray-500); border-radius: 8px; padding: 8px 10px; display: flex; gap: 8px; }
.badges-mini.is-empty { border-color: var(--gray-300); }
.badges-mini-left { flex: 1; display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.badges-mini-brand { font: 700 9px var(--mono); }
.badges-mini-ini { width: 30px; height: 30px; border-radius: var(--radius-pill); background: var(--indigo-50); color: var(--indigo-700); display: grid; place-items: center; font-weight: 700; font-size: 11px; }
.badges-mini-left b { font-size: 10px; font-weight: 600; line-height: 1.2; }
.badges-mini-note { margin-top: auto; font-size: 7px; color: var(--gray-600); }
.badges-qr-cap { display: inline-flex; flex-direction: column; align-items: center; gap: 2px; flex: none; align-self: center; }
.badges-mini-qr { display: block; width: 70px; height: 70px; }
.badges-cap { display: block; max-width: 70px; font: 500 4.5px/1.2 var(--mono); color: var(--gray-700); word-break: break-all; text-align: center; }
.badges-cap.is-6 { max-width: 86px; font-size: 6px; }
.badges-cmd { border: 1px dashed var(--gray-500); border-radius: 12px; padding: 12px; display: flex; align-items: center; gap: 12px; }
.badges-cmd-left { flex: 1; display: flex; flex-direction: column; gap: 4px; }
.badges-cmd-icon { font-size: 38px; line-height: 1; font-weight: 700; }
.badges-cmd-icon[data-i="0"] { color: var(--orange-700); }
.badges-cmd-icon[data-i="1"] { color: var(--amber-700); }
.badges-cmd-icon[data-i="2"] { color: var(--blue-700); }
.badges-cmd-icon:is([data-i="3"], [data-i="7"]) { color: var(--green-700); }
.badges-cmd-icon:is([data-i="4"], [data-i="5"]) { color: var(--gray-700); }
.badges-cmd-icon[data-i="6"] { color: var(--red-700); }
.badges-cmd-left b { font-size: 17px; font-weight: 700; }
.badges-cmd-qr { display: block; width: 86px; height: 86px; }

.badges-dlg-layer { position: fixed; inset: 0; z-index: 60; background: var(--overlay); display: grid; place-items: center; padding: 16px; }
.badges-dlg { width: min(520px, 100%); max-height: calc(100vh - 32px); overflow: auto; background: var(--gray-0); border-radius: 14px; box-shadow: var(--shadow-dialog); line-height: normal; }
.badges-dlg-body { padding: 18px 20px 14px; display: flex; flex-direction: column; gap: 14px; }
.badges-dlg-body h2 { margin: 0; font-size: var(--fs-17); font-weight: 600; }
.badges-field { display: flex; flex-direction: column; gap: 4px; }
.badges-field > span:first-child { font-size: 12px; color: var(--gray-700); font-weight: 500; }
.badges-field > .badges-seg { align-self: flex-start; }
.badges-input { height: 36px; padding: 0 10px; border: 1px solid var(--gray-300); border-radius: 8px; background: var(--gray-0); font: inherit; }
select.badges-input { padding: 0 8px; }
.badges-input.mono { font-family: var(--mono); }
.badges-hint { font-size: 12px; color: var(--gray-600); }
.badges-check { display: flex; align-items: flex-start; gap: 10px; cursor: pointer; }
.badges-check > input { width: 16px; height: 16px; margin: 2px 0 0; accent-color: var(--gray-900); flex: none; }
.badges-check > span { display: flex; flex-direction: column; gap: 2px; }
.badges-sub { font-size: 12px; color: var(--gray-600); line-height: 1.4; }
.badges-dlg-foot { padding: 12px 20px; background: var(--gray-25); border-top: 1px solid var(--gray-200); display: flex; justify-content: flex-end; gap: 8px; }
.badges-dlg-foot > .action { padding: 0 16px; font-weight: 500; }
.badges-dlg-foot > .ghost { padding: 0 14px; color: var(--gray-900); box-shadow: none; }

/* Q1b: телефоны техника, «Сканирование из приложения», коды мест, лист «Код места · A5»,
   «Мои устройства · техник» (макет «Бейджи и посты»). */
.badges-phone { display: flex; flex-direction: column; gap: 8px; padding: 10px 12px; border: 1px solid var(--gray-200); border-radius: 10px; }
.badges-phone-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.badges-phone-row > span { flex: 1 1 220px; display: flex; flex-direction: column; gap: 1px; }
.badges-phone-row b { font-weight: 500; }
.badges-phone-row span span { font-size: 12px; color: var(--gray-600); }
.badges-phone-row .badges-btn { height: 30px; padding: 0 10px; }
.badges-ask.is-phone { padding: 10px 12px; border-radius: 8px; }
.badges-mode-text { color: var(--gray-700); line-height: 1.45; }
.badges-ask.is-plain > span { color: var(--gray-900); }
.badges-pair { display: flex; gap: 14px; align-items: center; padding: 12px; border-radius: 10px; background: var(--gray-50); line-height: 1.5; color: var(--gray-700); }
.badges-pair b { font-weight: 600; color: var(--gray-900); }
.badges-pair-qr { width: 120px; height: 120px; flex: none; display: block; }
.badges-sec .badges-btn.is-self { align-self: flex-start; }
.badges-seg.badges-modes > button { height: 30px; }
.badges-seg > button:disabled { cursor: default; opacity: 1; }
.badges-check.is-row { align-items: center; }
.badges-check.is-row > input { margin: 0; }
.badges-check.is-row > span { display: inline; }
.badges-check .badges-muted { display: inline; }
.badges-places { display: flex; flex-direction: column; gap: 10px; }
.badges-places-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.badges-places-head h2 { flex: 1; margin: 0; font-size: var(--fs-17); font-weight: 600; }
.badges-places > .badges-lead { color: var(--gray-600); line-height: 1.45; }
.badges-place-add { display: flex; align-items: flex-end; gap: 8px; flex-wrap: wrap; padding: 12px; border-radius: 10px; background: var(--gray-50); }
.badges-place-add select { height: 32px; min-width: 200px; padding: 0 8px; border: 1px solid var(--gray-300); border-radius: 8px; background: var(--gray-0); font: inherit; }
.badges-place-add .ghost { height: 32px; padding: 0 12px; border: 0; background: transparent; box-shadow: none; color: var(--gray-900); }
.badges-place-add .action { height: 32px; padding: 0 14px; font-weight: 500; }
.badges-place-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 10px; }
.badges-place { padding: 14px; border: 1px solid var(--gray-200); border-radius: 10px; display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
.badges-place-qr { width: 72px; height: 72px; border: 1px solid var(--gray-300); border-radius: 6px; overflow: hidden; background: var(--gray-0); display: grid; place-items: center; }
.badges-place-qr > svg { width: 70px; height: 70px; display: block; }
.badges-place-qr.is-hidden { background: repeating-linear-gradient(135deg, var(--gray-100) 0 6px, var(--gray-0) 6px 12px); }
.badges-place-name { display: flex; flex-direction: column; gap: 2px; }
.badges-place-name b { font-weight: 600; }
.badges-place-name span { font-size: 12px; color: var(--gray-600); }
.badges-place .badges-acts .badges-btn { height: 28px; padding: 0 10px; }
.badges-place .badges-ask { align-self: stretch; padding: 10px; border-radius: 8px; }
.badges-place .badges-ask-no, .badges-place .badges-ask-yes { height: 28px; padding: 0 10px; }
.badges-a5 { width: 420px; flex: none; aspect-ratio: 148 / 210; background: var(--gray-0); box-shadow: var(--shadow-sheet); padding: 36px 32px; display: flex; flex-direction: column; align-items: center; gap: 22px; text-align: center; }
.badges-a5-kicker { font: 700 12px var(--mono); letter-spacing: .08em; }
.badges-a5-name { display: flex; align-items: center; gap: 10px; font-size: 40px; font-weight: 700; letter-spacing: -.01em; }
.badges-a5-name svg { width: 36px; height: 36px; flex: none; }
.badges-a5-qr { display: block; width: 230px; height: 230px; }
.badges-a5-qr.is-hidden { background: repeating-linear-gradient(135deg, var(--gray-100) 0 8px, var(--gray-0) 8px 16px); }
.badges-cap.is-8 { max-width: 230px; font-size: 8px; }
.badges-a5-text { font-size: 15px; line-height: 1.45; color: var(--gray-700); max-width: 300px; }
.badges-a5-foot { margin-top: auto; font: 500 11px var(--mono); color: var(--gray-600); }
.badges-mine { display: flex; gap: 24px; flex-wrap: wrap; align-items: flex-start; }
.badges-mine > section { flex: 1 1 380px; display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.badges-mine h2 { margin: 0; font-size: var(--fs-17); font-weight: 600; }
.badges-mine .badges-phone { padding: 12px 14px; }
.badges-mine .badges-phone-row b { font-weight: 600; }
.badges-mine .badges-phone-row .badges-btn { height: 32px; padding: 0 12px; }
.badges-mine-badge { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-radius: 10px; background: var(--gray-50); line-height: 1.45; }
.badges-mine-badge > span:last-child { color: var(--gray-700); }
.badges-phone-frame { width: 300px; height: 600px; flex: none; border: 8px solid var(--gray-900); border-radius: 40px; background: var(--gray-75); overflow: hidden; display: flex; flex-direction: column; }
.badges-phone-bar { height: 36px; flex: none; display: flex; align-items: center; justify-content: space-between; padding: 0 22px; font: 600 12px var(--mono); }
.badges-phone-bar span:nth-child(2) { width: 80px; height: 22px; border-radius: var(--radius-pill); background: var(--gray-900); margin-top: -4px; }
.badges-phone-bar span:last-child { font-size: 10px; }
.badges-phone-body { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 14px; padding: 22px; }
.badges-phone-ok { width: 56px; height: 56px; border-radius: var(--radius-pill); background: var(--green-50); color: var(--green-700); display: grid; place-items: center; font-size: 28px; font-weight: 700; }
.badges-phone-body strong { font-size: 22px; font-weight: 600; line-height: 1.25; }
.badges-phone-body > span:not(.badges-phone-ok) { font-size: 14px; line-height: 1.5; color: var(--gray-700); }
.badges-phone-body a { margin-top: 8px; height: 52px; border-radius: 14px; background: var(--gray-900); color: var(--gray-0); display: grid; place-items: center; font-size: 16px; font-weight: 600; text-decoration: none; }

/* 27 · Настройки → «Посты, бейджи и места» (строка вкладки «Лаборатория»). */
main[data-view="settings"] .settings-lab > .settings-scan { grid-column: 1 / -1; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px 16px; }
main[data-view="settings"] .settings-scan-text { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
main[data-view="settings"] .settings-scan-text h2.sect { margin: 0; padding: 0; border: 0; font-size: var(--fs-14); font-weight: 600; letter-spacing: 0; text-transform: none; color: var(--ink); }
main[data-view="settings"] .settings-scan-text span { font-size: var(--fs-12-5); color: var(--gray-700); line-height: 1.45; }
main[data-view="settings"] .settings-scan-open { padding: 0 14px; color: var(--ink); box-shadow: none; }

/* 17 · Техники → «Бейдж и телефоны». */
.tech-badge-link { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid var(--gray-200); border-radius: 10px; background: var(--gray-0); text-align: left; font: inherit; color: var(--ink); cursor: pointer; }
.tech-badge-link-text { flex: 1; display: flex; flex-direction: column; gap: 1px; }
.tech-badge-link-text b { font-weight: 500; }
.tech-badge-link-text span { font-size: 12px; color: var(--gray-600); }

/* 02 · С чего начать → «Сканирование этапов»: подсказка «Как выглядит пост». */
main[data-view="setup"] .setup-links { display: flex; gap: 4px 14px; flex-wrap: wrap; font-size: var(--fs-12-5); }
main[data-view="setup"] .setup-links a { color: var(--ink); text-underline-offset: 2px; }

/* «Разбор возврата» экрана 32 (R1): правило, запас до визита, таймер возврата. */
.badges-rules { border: 1px solid var(--gray-200); border-radius: 12px; overflow: hidden; }
.badges-rules-head { padding: 12px 16px; background: var(--gray-50); border-bottom: 1px solid var(--gray-200); display: flex; align-items: center; gap: 10px; }
.badges-rules-head b { font-size: 14px; font-weight: 600; }
.badges-rules-head span { color: var(--gray-600); }
.badges-rules-body { padding: 16px; display: flex; flex-direction: column; gap: 16px; }
.badges-rules-col { display: flex; flex-direction: column; gap: 8px; }
.badges-rules-label { font-weight: 500; color: var(--gray-700); }
.badges-rules-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px; }
.badges-rules-cards > button { padding: 12px; border: 1px solid var(--gray-250); border-radius: 10px; background: var(--gray-0); text-align: left; display: flex; flex-direction: column; gap: 4px; cursor: pointer; font: inherit; color: var(--gray-900); }
.badges-rules-cards > button[aria-checked="true"] { border: 2px solid var(--gray-900); background: var(--lime-50); }
.badges-rules-cards > button:disabled { cursor: default; }
.badges-rules-cards b { font-weight: 600; }
.badges-rules-cards span { font-size: 12.5px; color: var(--gray-700); line-height: 1.4; }
.badges-rules-row { display: flex; gap: 12px 24px; flex-wrap: wrap; align-items: center; }
.badges-rules-inline { display: flex; align-items: center; gap: 8px; }
.badges-rules-num { width: 52px; height: 32px; padding: 0 8px; border: 1px solid var(--gray-300); border-radius: 8px; font-family: var(--mono); text-align: right; }
.badges-rules-num.is-wide { width: 56px; }
.badges-dot { width: 8px; height: 8px; border-radius: 999px; }
.badges-dot.is-warn { background: var(--amber-700); }
.badges-dot.is-red { background: var(--red-700); }
/* R2 · «Разбор возврата»: «Деньги подтверждает директор», «Подсказки оплаты
   доработки»; вкладка «Коррекции в прайсе». */
.badges-rules-row.is-wide { gap: 16px 32px; }
.badges-rules-dir { display: flex; align-items: flex-start; gap: 10px; cursor: pointer; }
.badges-rules-dir > input { width: 16px; height: 16px; margin: 2px 0 0; accent-color: var(--gray-900); }
.badges-rules-dir > span { display: flex; flex-direction: column; gap: 2px; }
.badges-rules-dir > span > span { font-size: 12px; color: var(--gray-600); }
.badges-rules-col.is-tight { gap: 6px; }
/* R3 · исключение правила разбора: «Исключение: CAD-дизайн → сразу исполнителю». */
.badges-rules-exc { display: flex; flex-direction: column; gap: 6px; }
.badges-rules-exc-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 8px 12px; border-radius: 8px; background: var(--gray-50); }
.badges-rules-exc-row b { font-weight: 500; }
.badges-rules-exc-note { font-size: 12px; color: var(--gray-600); }
.badges-rules-exc-add { margin-left: auto; height: 28px; padding: 0 10px; border: 1px solid var(--gray-250); border-radius: 8px; background: var(--gray-0); font: inherit; color: var(--gray-900); cursor: pointer; }
.badges-rules-exc-x { width: 24px; height: 24px; border: 0; border-radius: 6px; background: transparent; color: var(--gray-600); cursor: pointer; }
.badges-rules-exc-form { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; padding: 8px 12px; border: 1px solid var(--gray-200); border-radius: 8px; }
.badges-rules-exc-form select, .badges-rules-exc-form input { height: 32px; padding: 0 8px; border: 1px solid var(--gray-300); border-radius: 8px; background: var(--gray-0); font: inherit; }
.badges-rules-exc-form input { flex: 1 1 160px; width: auto; }
.badges-btn.is-dark { border: 0; background: var(--gray-900); color: var(--gray-0); font-weight: 500; }
.badges-hints { border: 1px solid var(--gray-200); border-radius: 10px; overflow: hidden; }
.badges-hints-row { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 10px; align-items: center; padding: 8px 12px; border-top: 1px solid var(--gray-150); }
.badges-hints-row > span { line-height: 1.4; }
.badges-hints-row.is-head { border-top: 0; background: var(--gray-50); font-size: 12px; color: var(--gray-600); font-weight: 500; }
.badges-hints-row select { height: 32px; padding: 0 8px; border: 1px solid var(--gray-300); border-radius: 8px; background: var(--gray-0); font: inherit; font-weight: 500; color: var(--gray-900); }
.badges-hints-note { font-size: 12px; color: var(--gray-600); line-height: 1.45; }
.badges-price-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.badges-price-head > span { flex: 1 1 300px; color: var(--gray-700); line-height: 1.45; }
.badges-price-head a { color: var(--gray-900); text-underline-offset: 2px; }
.badges-price-make { height: 32px; padding: 0 14px; border: 0; border-radius: 8px; background: var(--brand-ink); color: var(--gray-0); font: inherit; font-weight: 500; cursor: pointer; }
.badges-price-make:disabled { opacity: .5; cursor: default; }
.badges-lime { color: var(--brand-lime); }
.badges-price { border: 1px solid var(--gray-200); border-radius: 12px; overflow: hidden; }
.badges-price-row { display: grid; grid-template-columns: minmax(0, 1fr) 110px 130px; gap: 10px; align-items: center; min-height: 48px; padding: 6px 14px; border-top: 1px solid var(--gray-150); background: var(--gray-0); }
.badges-price-row.is-head { min-height: 0; padding: 8px 14px; border-top: 0; background: var(--gray-50); font-size: 12px; color: var(--gray-600); font-weight: 500; }
.badges-price-row.is-head > span:last-child { text-align: right; }
.badges-price-row.is-new { background: var(--gray-25); }
.badges-price-name { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.badges-price-unset { padding: 1px 8px; border-radius: 999px; background: var(--amber-50); color: var(--amber-700); font-size: 12px; font-weight: 500; }
.badges-price-flag { display: flex; align-items: center; gap: 8px; cursor: pointer; }
.badges-price-flag > input { width: 16px; height: 16px; margin: 0; accent-color: var(--gray-900); }
.badges-price-flag > span { font-size: 12px; color: var(--gray-700); }
.badges-price-sum { text-align: right; font: 500 12.5px var(--mono); color: var(--gray-900); }
.badges-price-sum.is-none { color: var(--gray-600); }
