/* board.css — доски рабочего дня. Значения — только из theme.css, своих цветовых
   литералов здесь нет. Файл подключается после app.css и orders.css и задаёт вид
   «Производства» по макету этапа 2 (Производство.dc.html) целиком: шапка, плашка
   неподтверждённых отметок, «Ждут исполнителя», панель, доска и карточка.

   Разметку рисует openProductionBoard в app.js; DOM-контракты прогонов:
   main > p[role=status] — живой счётчик (UX04); .production-toolbar,
   .production-meta, .production-column[data-stage] h2 с маркером ::before
   (semanticStatusProbe), .production-card[data-operation-id], .production-details
   (раскрывается с клавиатуры, UX02), nav.production-stage-nav. Подписи кнопок
   «Взял», «Сделал», «Отменить» и счётчики вкладок — без лишних символов в
   textContent: значки и числа рисуются ::before/::after. */

/* ============================================================ производство === */

header.production-page-header { align-items: flex-end; gap: var(--sp-3) var(--sp-4); margin-bottom: var(--sp-4); }
header.production-page-header > div:first-child { display: grid; gap: var(--sp-1); flex: 1 1 260px; min-width: 0; }
header.production-page-header h1 { margin: 0; font-size: var(--fs-26); font-weight: var(--fw-600); letter-spacing: -.01em; }
header.production-page-header .section-sub { margin: 0; color: var(--muted); }
header.production-page-header .head-actions { gap: var(--sp-2); }
.production-updated { font-size: var(--fs-12); color: var(--muted); }
.production-updated:empty { display: none; }

/* ---- неподтверждённые отметки (общий приём 8) ----------------------------- */

.operation-pending-recovery {
  display: flex; flex-direction: column; gap: var(--sp-2-5);
  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-border); box-shadow: none;
}
.operation-pending-recovery[hidden] { display: none; }
.operation-pending-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2-5) var(--sp-4); }
.operation-pending-text { flex: 1 1 320px; min-width: 0; display: flex; flex-direction: column; gap: 3px; line-height: 1.45; }
.operation-pending-text > strong { color: var(--warn); font-weight: var(--fw-600); }
.operation-pending-text > span { color: var(--ink-2); }
.operation-pending-text b { font-weight: var(--fw-600); }
.operation-pending-text .mono { font-family: var(--mono); }
.operation-pending-row > .operation-status-controls { display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; gap: var(--sp-1-5) var(--sp-3); }
.operation-pending-row .operation-status-controls > button {
  display: inline-flex; align-items: center; gap: var(--sp-1-5);
  height: 36px; padding: 0 14px; border: 0; border-radius: var(--radius);
  background: var(--button-primary-bg); color: var(--button-primary-ink); font-weight: var(--fw-500);
}
.operation-pending-row .operation-status-controls > button::before { content: "↻"; color: var(--button-primary-icon); }
.operation-pending-row .operation-status-controls > .subline:empty { display: none; }
.operation-pending-row .operation-status-controls > .danger-text { flex: 1 1 100%; font-size: var(--fs-12); }

/* ---- «Ждут исполнителя» --------------------------------------------------- */

.production-inbox { margin: 0 0 var(--sp-4); border: 1px solid var(--rule); border-radius: var(--radius-panel); overflow: hidden; background: var(--surface); }
.production-inbox-head {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2-5) 14px;
  padding: var(--sp-2-5) 14px; background: var(--fill-soft); border-bottom: 1px solid var(--rule);
}
.production-inbox-head > h2 { margin: 0; font-size: var(--fs-14); font-weight: var(--fw-600); }
.production-inbox-tabs, .production-sort {
  display: flex; gap: 2px; padding: 2px; border-radius: var(--radius); background: var(--chip-bg);
}
.production-inbox-tabs { background: var(--rule); max-width: 100%; overflow-x: auto; scrollbar-width: none; }
.production-inbox-head .production-inbox-tabs > button { height: 28px; }
.production-inbox-tabs > button, .production-sort > button {
  display: inline-flex; align-items: center; gap: var(--sp-1-5); height: var(--control-h); padding: 0 var(--sp-2-5);
  border: 0; border-radius: var(--radius-sm); background: transparent; color: var(--ink);
  font: inherit; font-size: var(--fs-13); font-weight: var(--fw-400); white-space: nowrap; cursor: pointer;
}
.production-inbox-tabs > button[aria-selected="true"], .production-sort > button[aria-checked="true"] {
  background: var(--surface); box-shadow: var(--shadow-tab); font-weight: var(--fw-600);
}
.production-inbox-tabs > button::after { content: attr(data-count); font: var(--fw-600) var(--fs-11)/1 var(--mono); color: var(--muted); }
.production-inbox-hint { margin-left: auto; font-size: var(--fs-12); color: var(--muted); }
.production-inbox[hidden] { display: none; }
.production-inbox-note { margin: 0; padding: var(--sp-4) 14px; color: var(--muted); }
/* Ошибка загрузки — карточка danger-soft с «Повторить» (общий приём 9). */
.production-inbox-error, .production-inbox .plan-queue > .error {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2) var(--sp-3); margin: var(--sp-3) 14px; padding: var(--sp-3) 14px;
  border: 1px solid var(--danger-border); border-radius: var(--radius-card); background: var(--danger-soft); color: var(--danger);
}
.production-inbox-error > span { flex: 1 1 260px; }
/* Номер наряда в строке «Ждут исполнителя» — моноширинная ссылка. */
.production-order-link {
  display: inline; height: auto; min-height: 0; padding: 0; border: 0; background: none; cursor: pointer;
  font: var(--fw-500) var(--fs-12)/1.3 var(--mono); color: var(--ink-2); text-decoration: underline; text-underline-offset: 2px;
}
.production-order-link:hover { color: var(--ink); background: none; }

/* Номер наряда — моно-чип-ссылка (на карточке и в строке очереди). */
.production-order-no {
  flex: none; display: inline-flex; align-items: center; height: auto; padding: 2px 7px;
  border: 0; border-radius: var(--radius-sm); background: var(--chip-bg); color: var(--ink);
  font: var(--fw-500) var(--fs-11)/1.5 var(--mono); white-space: nowrap; cursor: pointer;
}
.production-order-no:hover { background: var(--rule); }

/* ---- панель, счётчик и страницы ------------------------------------------- */

.production-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); margin: 0 0 var(--sp-3); }
.production-toolbar > input[type="search"] {
  flex: 1 1 280px; min-width: 0; height: 36px; padding: 0 var(--sp-3);
  border: 1px solid var(--field-border); border-radius: var(--radius); background: var(--surface);
}
.production-free-filter { display: inline-flex; align-items: center; gap: var(--sp-2); height: 36px; white-space: nowrap; cursor: pointer; }
.production-free-filter > input { width: 18px; height: 18px; margin: 0; accent-color: var(--ink); }

/* Счётчик — непосредственный main > p[role=status] (UX04); страницы стоят справа
   на той же строке за счёт обтекания. */
/* Счётчик слева, страницы справа той же строкой; не помещаются — страницы
   переносятся вниз вправо (макет: flex-wrap, margin-left:auto). */
.production-meta { display: flex; justify-content: flex-end; align-items: center; overflow: hidden; min-height: var(--control-h); margin: 0 0 var(--sp-3); }
.production-meta[hidden] { display: none; }
.production-pagination { flex: none; display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-12-5); color: var(--ink-2); white-space: nowrap; }
.production-page-range { font-family: var(--mono); font-size: var(--fs-12); }
p.production-found { float: left; min-height: var(--control-h); display: flex; align-items: center; margin: 0 var(--sp-3) var(--sp-1-5) 0; font-size: var(--fs-12-5); color: var(--ink-2); }
p.production-found[hidden], .production-toolbar[hidden], .production-board[hidden], .production-stage-nav[hidden], .production-state[hidden] { display: none; }
.production-stage-nav, .production-board, .production-state { clear: both; }

/* ---- доска ------------------------------------------------------------------ */

.production-board { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; align-items: start; }
.production-column {
  --stage-color: var(--info); --stage-soft: var(--info-soft); --stage-mark: var(--stage-pending);
  position: relative; display: flex; flex-direction: column; gap: var(--sp-2); min-width: 0;
  padding: 0; margin: 0; border: 0; border-radius: 0; background: none;
}
.production-column[data-stage="in_work"] { --stage-color: var(--warn); --stage-soft: var(--warn-soft); --stage-mark: var(--stage-working); }
.production-column[data-stage="completed"] { --stage-color: var(--ok); --stage-soft: var(--ok-soft); --stage-mark: var(--stage-ready); }
.production-column > h2 {
  position: relative; display: flex; align-items: center; gap: var(--sp-2); min-height: 38px; margin: 0;
  padding: var(--sp-2) var(--sp-3); border-radius: 4px 4px var(--radius-card) var(--radius-card);
  background: var(--stage-soft); color: var(--stage-color);
  font-size: var(--fs-13); font-weight: var(--fw-600); line-height: 1.2; letter-spacing: 0; scroll-margin-top: 64px;
}
/* Верхняя полоса 3 px цвета стадии — маркер, который проверяет semanticStatusProbe. */
.production-column > h2::before {
  content: ""; position: absolute; inset: 0 0 auto; width: auto; height: 3px; border-radius: 4px 4px 0 0;
  background: var(--stage-mark);
}
.production-count { font: var(--fw-600) var(--fs-12)/1 var(--mono); }
.production-column > h2:focus-visible { outline: 3px solid var(--focus-ring); outline-offset: 2px; }
.production-fold {
  position: absolute; top: 3px; right: var(--sp-2); height: var(--control-h); padding: 0 var(--sp-2);
  border: 0; border-radius: var(--radius-sm); background: var(--surface); color: var(--ink);
  font: inherit; font-size: var(--fs-12); cursor: pointer;
}
.production-cards { display: flex; flex-direction: column; gap: var(--sp-2); min-width: 0; }
.production-stage-empty {
  margin: 0; padding: var(--sp-4) var(--sp-3); border: 1px dashed var(--rule-strong); border-radius: var(--radius-card);
  color: var(--muted); text-align: center; font-size: var(--fs-13);
}
.production-column.is-folded > .production-cards { display: none; }

/* ---- карточка операции ------------------------------------------------------ */

.production-card {
  display: flex; flex-direction: column; gap: var(--sp-2); min-width: 0; margin: 0; padding: var(--sp-3);
  border: 1px solid var(--card-border); border-radius: var(--radius-card); background: var(--surface); box-shadow: none;
}
.production-card.is-late, .production-card.is-error { border-color: var(--danger-border); }
.production-card[hidden] { display: none; }
.production-card-head { display: flex; align-items: flex-start; gap: var(--sp-2-5); }
.production-card-title { flex: 1; min-width: 0; display: grid; gap: 2px; }
.production-card-title > b { font-size: var(--fs-14); font-weight: var(--fw-600); line-height: 1.3; color: var(--ink); overflow-wrap: anywhere; }
.production-qty { font-family: var(--mono); font-weight: var(--fw-500); color: var(--ink-2); }
.production-card-title > .subline { margin: 0; color: var(--muted); font-size: var(--fs-13); line-height: 1.35; }
.production-chips { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-1-5); }
.production-due, .production-contractor {
  display: inline-flex; align-items: center; gap: 5px; padding: 2px var(--sp-2); border-radius: var(--radius-pill);
  font-size: var(--fs-12); font-weight: var(--fw-500); line-height: 1.5; white-space: nowrap;
  background: var(--chip-bg); color: var(--ink-2);
}
.production-due::before { content: ""; width: 6px; height: 6px; border-radius: var(--radius-pill); background: currentColor; flex: none; }
.production-due[data-tone="danger"] { background: var(--danger-soft); color: var(--danger); }
.production-due[data-tone="warn"] { background: var(--warn-soft); color: var(--warn); }
.production-due[data-tone="info"] { background: var(--info-soft); color: var(--info); }
.production-due[data-tone="held"] { background: var(--held-soft); color: var(--held); }
.production-due[data-tone="none"] { color: var(--muted); }
.production-contractor { background: var(--violet-soft); color: var(--violet); }

.production-card .production-assignment { display: flex; min-width: 0; }
.production-card .production-assignment select,
.production-inbox select, .production-dialog select {
  width: 100%; min-width: 0; height: var(--control-h); padding: 0 var(--sp-2);
  border: 1px solid var(--field-border); border-radius: var(--radius); background: var(--surface); font-size: var(--fs-13);
}
.production-card select.is-free {
  border-color: color-mix(in srgb, var(--warn) 40%, var(--warn-soft));
  background: color-mix(in srgb, var(--warn-soft) 45%, var(--surface));
}
.production-person { display: flex; align-items: center; gap: var(--sp-1-5); margin: 0; font-size: var(--fs-13); color: var(--ink); }
.production-person.is-free { color: var(--warn); }
.production-person.is-mine { font-weight: var(--fw-600); }
.production-avatar {
  display: grid; place-items: center; flex: none; width: 20px; height: 20px; border-radius: var(--radius-pill);
  background: var(--chip-bg); color: var(--ink-2); font-size: 10px; font-weight: var(--fw-600);
}
.production-person.is-mine .production-avatar { background: var(--indigo-50); color: var(--indigo-700); }

.production-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-1-5); min-width: 0; }
.production-actions-gap { flex: 1 1 0; min-width: 0; }
.production-card.is-confirming .production-actions > :not(.operation-status-controls) { display: none; }
.production-card.is-confirming .production-actions > .operation-status-controls { flex: 1 1 100%; }
.production-actions > button.ghost { height: var(--control-h); padding: 0 var(--sp-2-5); color: var(--ink); }

/* Подробности — тихая свёртка слева; раскрытая уходит строкой под кнопки. */
.production-card .production-details { flex: 0 0 auto; margin: 0; padding: 0; border: 0; }
.production-card .production-details > summary {
  display: inline-flex; align-items: center; gap: var(--sp-1); min-height: var(--control-h); padding: 0 var(--sp-1);
  border-radius: var(--radius-sm); list-style: none; cursor: pointer;
  color: var(--ink-2); font-size: var(--fs-12-5); font-weight: var(--fw-400);
}
.production-card .production-details > summary::-webkit-details-marker { display: none; }
.production-card .production-details > summary::before { content: "▸"; color: var(--muted); }
.production-card .production-details[open] { order: 10; flex: 1 1 100%; }
.production-card .production-details[open] > summary::before { content: "▾"; }
.production-card .production-details > summary:hover { background: var(--hover-bg); color: var(--ink); }
.production-card .production-details dl {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--sp-1) var(--sp-2-5);
  margin: var(--sp-1) 0 0; padding-top: var(--sp-2); border-top: 1px solid var(--row-rule); font-size: var(--fs-12);
}
.production-card .production-details dt { color: var(--muted); }
.production-card .production-details dd { margin: 0; color: var(--ink-2); overflow-wrap: anywhere; }
.production-card .production-details dd.mono { font-family: var(--mono); }

/* Кнопки этапа: «Взял»/«Сделал» — крупные 38 px, «Отменить» — вторичная. */
.production-card .operation-status-controls { flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--sp-1-5); min-width: 0; }
.production-card .operation-status-controls > button.action,
.production-card .production-done-actions > button.action,
.production-card .moves > button.action {
  height: var(--control-h-lg); min-height: var(--control-h-lg); padding: 0 var(--sp-4); font-size: var(--fs-13); font-weight: var(--fw-600);
}
.production-card button[data-target="in_work"]::before { content: "▸"; color: var(--button-primary-icon); }
.production-card button[data-target="completed"]::before { content: "✓"; color: var(--button-primary-icon); }
.production-card button[data-target="replay"]::before { content: "↻"; color: var(--button-primary-icon); }
.production-card .operation-status-controls > button.ghost { height: var(--control-h); color: var(--ink); }
.production-card .operation-status-controls > .subline { flex: 1 1 100%; margin: 0; font-size: var(--fs-12); text-align: right; }
.production-card .operation-status-controls > .danger-text { text-align: left; }
.production-card .moves:not(.operation-status-controls) { display: flex; }
.production-card .moves > button.action { white-space: normal; }
.production-card .production-external > button.action[data-mark="pass"]::before { content: "→"; color: var(--button-primary-icon); }
.production-card .production-external > button.action[data-mark="done"]::before { content: "✓"; color: var(--button-primary-icon); }
.production-card .production-external > button.ghost { height: var(--control-h); color: var(--ink); white-space: nowrap; }

/* «Сделал» спрашивает минуты прямо в карточке. */
.production-done {
  flex: 1 1 100%; display: flex; flex-direction: column; gap: var(--sp-2);
  padding: var(--sp-2-5); border-radius: var(--radius); background: var(--fill-soft);
}
.production-done > label { display: flex; flex-direction: column; gap: var(--sp-1); font-weight: var(--fw-500); }
.production-done > label small { color: var(--muted); font-size: inherit; font-weight: var(--fw-400); }
.production-done input {
  width: 100%; height: 36px; padding: 0 var(--sp-2-5); border: 1px solid var(--field-border); border-radius: var(--radius);
  background: var(--surface); font: var(--fs-12-5) var(--mono);
}
.production-done input[aria-invalid="true"] { border-color: var(--danger); }
.production-done > .danger-text { font-size: var(--fs-12); }
.production-done > .danger-text:empty { display: none; }
.production-done > .subline { margin: 0; color: var(--muted); font-size: var(--fs-12); line-height: 1.4; text-align: left; }
.production-done-actions { display: flex; gap: var(--sp-1-5); }
.production-done-actions > button.ghost { flex: 1; height: var(--control-h-lg); }
.production-done-actions > button.action { flex: 2; }

.production-card > .danger-text { margin: 0; font-size: var(--fs-12); line-height: 1.4; }
.production-card > .danger-text:empty { display: none; }

/* ---- состояния экрана: загрузка, ошибка, пусто ------------------------------ */
.production-state { display: flex; flex-direction: column; gap: var(--sp-2); }
.production-board > .production-skeleton { grid-column: 1 / -1; }
.production-blank {
  display: flex; flex-direction: column; align-items: center; gap: var(--sp-2); padding: 56px var(--sp-5);
  border: 1px solid var(--rule); border-radius: var(--radius-panel); background: var(--dialog-footer-bg); text-align: center;
}
.production-blank > strong { font-size: var(--fs-17); font-weight: var(--fw-600); }
.production-blank > span { max-width: 420px; color: var(--muted); }
.production-error {
  display: flex; flex-direction: column; align-items: center; gap: var(--sp-2); padding: var(--sp-6) var(--sp-5);
  border: 1px solid var(--danger-border); border-radius: var(--radius-panel);
  background: var(--danger-soft); text-align: center;
}
.production-error > strong { font-size: 15px; font-weight: var(--fw-600); color: var(--danger); }
.production-error > span { max-width: 460px; color: var(--ink-2); }
.production-error > button { height: 36px; margin-top: var(--sp-1); padding: 0 var(--sp-4); }
.production-skeleton { display: flex; flex-direction: column; gap: var(--sp-4); }
.production-skeleton-cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
.production-skeleton-cols > div { display: flex; flex-direction: column; gap: var(--sp-2); }
.production-skeleton i { display: block; height: 118px; border: 1px solid var(--rule); border-radius: var(--radius-card); background: var(--dialog-footer-bg); }
.production-skeleton i:first-child { height: 38px; border: 0; border-radius: var(--radius); background: var(--chip-bg); }
.production-skeleton i:last-child { opacity: .6; }
.production-loading { margin: 0; color: var(--muted); font-size: var(--fs-12-5); }
/* ---- окна доски: «Исполнитель этапа», «Отменить …?» --------------------------- */
dialog.production-dialog { width: min(460px, calc(100vw - 32px)); padding: 0; border: 0; border-radius: 14px; box-shadow: var(--shadow-dialog); overflow: hidden; }
.production-dialog-body { display: flex; flex-direction: column; gap: var(--sp-2-5); padding: 18px var(--sp-5) 14px; }
.production-dialog-body > h2 { margin: 0; font-size: var(--fs-17); font-weight: var(--fw-600); }
.production-dialog-body > p { margin: 0; color: var(--ink-2); line-height: 1.45; }
.production-dialog-foot {
  display: flex; justify-content: flex-end; flex-wrap: wrap; gap: var(--sp-2); padding: var(--sp-3) var(--sp-5);
  background: var(--dialog-footer-bg); border-top: 1px solid var(--rule);
}
.production-dialog-foot > button { height: var(--control-h); padding: 0 14px; }
.production-dialog-foot > button.action { padding: 0 var(--sp-4); }
.production-dialog-foot > button.action.danger { background: var(--danger); border-color: var(--danger); }
.production-dialog-foot > button.action.danger:hover:not(:disabled) { background: var(--danger); filter: brightness(.92); }
.production-kind { display: flex; gap: 2px; padding: 3px; border-radius: var(--radius-card); background: var(--chip-bg); }
.production-kind > button {
  flex: 1; height: var(--control-h); border: 0; border-radius: var(--radius); background: transparent; color: var(--ink);
  font: inherit; font-weight: var(--fw-400); cursor: pointer;
}
.production-kind > button[aria-checked="true"] { background: var(--surface); box-shadow: var(--shadow-tab); font-weight: var(--fw-600); }
.production-contractor-field { display: flex; flex-direction: column; gap: var(--sp-1); }
.production-contractor-field[hidden] { display: none; }
.production-contractor-field > span { font-size: var(--fs-12); color: var(--ink-2); font-weight: var(--fw-500); }
.production-dialog select { height: 36px; }
.production-dialog-error { font-size: var(--fs-12); color: var(--danger); }
.production-dialog-error:empty { display: none; }

/* ---- узкая колонка контента: одна стадия и липкий переключатель ------------- */
/* Макет: одна колонка, когда ширина контента < 760 px (контент = окно − меню 232 px,
   при окне ≤ 800 px меню выезжает, контент = окно). */
.production-stage-nav { display: none; }
@media (max-width: 759.98px), (min-width: 800.02px) and (max-width: 991.98px) {
  .production-stage-nav:not([hidden]) {
    position: sticky; top: 0; z-index: 5; display: flex; gap: 2px; margin: 0 0 var(--sp-4); padding: 3px;
    border-radius: var(--radius-card); background: var(--chip-bg); box-shadow: 0 0 0 6px var(--surface);
  }
  .production-stage-nav > button {
    flex: 1 1 0; min-width: 0; display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-1-5);
    height: 36px; padding: 0 var(--sp-1-5); border: 0; border-radius: var(--radius); background: transparent;
    color: var(--ink); font: inherit; font-size: var(--fs-13); font-weight: var(--fw-400); cursor: pointer; white-space: nowrap;
  }
  .production-stage-nav > button[aria-selected="true"] { background: var(--surface); box-shadow: var(--shadow-tab); font-weight: var(--fw-600); }
  .production-stage-nav > button::before { content: ""; flex: none; width: 8px; height: 8px; border-radius: var(--radius-pill); background: var(--stage-pending); }
  .production-stage-nav > button[data-for="in_work"]::before { background: var(--stage-working); }
  .production-stage-nav > button[data-for="completed"]::before { background: var(--stage-ready); }
  .production-stage-nav > button::after { content: attr(data-count); font: var(--fw-600) var(--fs-11)/1 var(--mono); color: var(--muted); }
  .production-board, .production-skeleton-cols { grid-template-columns: minmax(0, 1fr); }
  .production-skeleton-cols > div + div { display: none; }
  .production-board[data-active-stage="pending"] > .production-column:not([data-stage="pending"]),
  .production-board[data-active-stage="in_work"] > .production-column:not([data-stage="in_work"]),
  .production-board[data-active-stage="completed"] > .production-column:not([data-stage="completed"]) { display: none; }
  /* Шапка колонки в одной колонке не видна (макет: только при нескольких
     колонках); заголовок остаётся для чтения с экрана. */
  .production-column > h2 { position: absolute; width: 1px; height: 1px; min-height: 0; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
  .production-fold { display: none; }
  .production-column.is-folded > .production-cards { display: flex; }
}
/* Строка «Ждут исполнителя» в три колонки, пока контент ≥ 720 px (process.css
   сворачивает общую очередь плана уже 48rem). */
@media (min-width: 720px) and (max-width: 800px) {
  .production-inbox .plan-queue-item { grid-template-columns: minmax(0, 1fr) auto minmax(220px, 300px); }
}
/* Строка «Ждут исполнителя» в одну колонку, когда контент < 720 px. */
@media (max-width: 719.98px), (min-width: 800.02px) and (max-width: 951.98px) {
  .production-inbox .plan-queue-item { grid-template-columns: minmax(0, 1fr); }
  .production-inbox .plan-queue-item .shadow-pill { justify-self: start; }
}

/* board.css — область досок рабочего дня: календарь сдач (openCalendar в app.js).
   Токены — в theme.css, свои цветовые литералы здесь не заводятся.

   Макет «Календарь сдач» (этап 2): три вида — «Неделя», «Месяц», «Очередь сдач».
   Неделя — семь карточек-дней с полосой смены 8 px; на узком экране — лента из
   семи плиток и список выбранного дня. Числа, номера и часы — JetBrains Mono,
   цвет всегда рядом с подписью, состояние сдачи — формой метки.

   Границы, которые держит браузерная приёмка:
   - main > * не выходит за ширину экрана: широкие разрезы прокручиваются внутри
     .cal-scroll, как таблицы внутри .table-wrap;
   - вкладки разрезов остаются вкладками createWorkspace — здесь только вид;
   - у анимаций нет собственных переходов: reduced motion проверяется на nav.

   Правила ограничены своим экраном (main[data-view="calendar"]) и своими классами
   .cal-*: имена .card, .empty и .hint живут ещё у десятка областей. Строка периода
   (.cal-bar) общая с «Людьми и сменами», которые живут в «Нагрузке» —
   main[data-view="load"]. */

/* ============================================================== календарь === */

main[data-view="calendar"] [data-workspace="calendar"] {
  display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--sp-3) var(--sp-4); min-width: 0;
}
main[data-view="calendar"] .cal-head { flex: 1 1 260px; min-width: 0; margin: 0; }
main[data-view="calendar"] .cal-head > div { display: flex; flex-direction: column; gap: var(--sp-1); min-width: 0; }
main[data-view="calendar"] .cal-head h1 { margin: 0; font-size: var(--fs-26); font-weight: var(--fw-600); letter-spacing: -.01em; }
main[data-view="calendar"] .cal-head .section-sub { margin: 0; color: var(--muted); }
main[data-view="calendar"] [data-workspace="calendar"] > .workspace-tabs {
  flex: none; margin: 0; padding: 3px; border-radius: var(--radius-card);
}
main[data-view="calendar"] [data-workspace="calendar"] > .workspace-tabs [role="tab"] {
  min-height: 30px; padding: 0 var(--sp-3); border-radius: var(--radius); font-size: var(--fs-13); color: var(--ink-2);
}
main[data-view="calendar"] [data-workspace="calendar"] > .workspace-tabs [aria-selected="true"] { color: var(--ink); }
main[data-view="calendar"] .workspace-panel {
  flex: 0 0 100%; display: flex; flex-direction: column; gap: var(--sp-4); min-width: 0;
}
main[data-view="calendar"] .cal-link,
main[data-view="load"] .cal-link {
  display: inline; padding: 0; margin: 0; border: 0; background: none; cursor: pointer;
  font: inherit; color: var(--ink); text-decoration: underline; text-underline-offset: 2px;
}
main[data-view="calendar"] .cal-link:hover,
main[data-view="load"] .cal-link:hover { color: var(--ink-2); }

/* ---- строка периода (общая с «Людьми и сменами» в «Нагрузке») ------------- */

:is(main[data-view="calendar"], main[data-view="load"]) .cal-bar {
  display: flex; align-items: center; gap: var(--sp-2) var(--sp-3); flex-wrap: wrap; min-width: 0;
}
:is(main[data-view="calendar"], main[data-view="load"]) .cal-bar h2 {
  margin: 0; font-size: var(--fs-17); font-weight: var(--fw-600); white-space: nowrap;
}
:is(main[data-view="calendar"], main[data-view="load"]) .cal-steps { display: flex; gap: var(--sp-1); }
:is(main[data-view="calendar"], main[data-view="load"]) .cal-step {
  width: var(--control-h); height: var(--control-h); flex: none; cursor: pointer;
  display: inline-grid; place-items: center; color: var(--ink); font: inherit;
  border: 1px solid var(--button-border); border-radius: var(--radius); background: var(--surface);
}
:is(main[data-view="calendar"], main[data-view="load"]) .cal-step:hover { background: var(--hover-bg); color: var(--ink); }
:is(main[data-view="calendar"], main[data-view="load"]) .cal-step .ui-icon { width: 15px; height: 15px; }
:is(main[data-view="calendar"], main[data-view="load"]) .cal-bar-sum { color: var(--ink-2); font-size: var(--fs-13); }
:is(main[data-view="calendar"], main[data-view="load"]) .cal-job-gap { flex: 1 1 auto; min-width: 0; }
:is(main[data-view="calendar"], main[data-view="load"]) .cal-num {
  font-family: var(--mono); font-size: var(--fs-12); font-weight: var(--fw-500);
  color: var(--ink); white-space: nowrap; font-variant-numeric: tabular-nums;
}
:is(main[data-view="calendar"], main[data-view="load"]) .cal-num.quiet { color: var(--muted); }
:is(main[data-view="calendar"], main[data-view="load"]) .cal-num.strong { font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-bar > .cal-num.quiet { font-size: var(--fs-13); font-weight: var(--fw-400); }
main[data-view="calendar"] .cal-num.plain { color: var(--ink-2); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-num.danger { color: var(--danger); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-num.ok { color: var(--ok); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-num.id { color: var(--ink); font-weight: var(--fw-600); font-size: var(--fs-11); }
main[data-view="calendar"] .cal-state { font-size: var(--fs-11); color: var(--muted); white-space: nowrap; }
main[data-view="calendar"] .cal-state.ready { color: var(--ok); font-weight: var(--fw-600); font-family: var(--mono); }
main[data-view="calendar"] .cal-state.done { color: var(--teal); font-weight: var(--fw-600); font-family: var(--mono); }
main[data-view="calendar"] .cal-off { font-size: var(--fs-12); color: var(--muted); }

/* ---- когда обещать --------------------------------------------------------- */

main[data-view="calendar"] .cal-promise {
  display: flex; flex-direction: column; gap: var(--sp-2);
  padding: 14px var(--sp-4); border-radius: var(--radius-panel);
  background: var(--brand-soft); border: 1px solid var(--brand-soft-line);
}
main[data-view="calendar"] .cal-promise-row { display: flex; align-items: center; gap: var(--sp-2) 14px; flex-wrap: wrap; }
main[data-view="calendar"] .cal-promise h2 { margin: 0; font-size: var(--fs-14); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-promise-field { display: inline-flex; align-items: center; gap: var(--sp-2); color: var(--ink); }
main[data-view="calendar"] .cal-promise-field input {
  width: 64px; height: var(--control-h); padding: 0 var(--sp-2); text-align: right;
  border: 1px solid var(--brand-soft-field); border-radius: var(--radius); background: var(--surface);
  font-family: var(--mono); font-size: var(--fs-13); font-weight: var(--fw-600);
}
main[data-view="calendar"] .cal-promise-arrow { color: var(--brand-soft-ink); }
main[data-view="calendar"] .cal-promise-day { font-size: var(--fs-17); font-weight: var(--fw-600); color: var(--ink); }
main[data-view="calendar"] .cal-promise-said { color: var(--brand-soft-ink); }
main[data-view="calendar"] .cal-promise-toggle {
  margin-left: auto; min-height: 28px; padding: 0 var(--sp-2-5); cursor: pointer;
  border: 1px solid var(--brand-soft-field); border-radius: var(--radius); background: var(--surface);
  font: inherit; font-size: var(--fs-12-5); color: var(--ink);
}
main[data-view="calendar"] .cal-promise-toggle:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 1px; }
main[data-view="calendar"] .cal-promise-why {
  display: flex; flex-direction: column; gap: var(--sp-1); font-size: var(--fs-12-5); line-height: 1.5; color: var(--ink-2);
}
main[data-view="calendar"] .cal-promise-why[hidden] { display: none; }
main[data-view="calendar"] .cal-promise-caveat { color: var(--muted); }

/* ---- плашки: мощность не задана, обзор техника, ошибка, пусто -------------- */

main[data-view="calendar"] .cal-banner {
  display: flex; align-items: center; gap: var(--sp-2-5) var(--sp-4); flex-wrap: wrap;
  padding: var(--sp-3) 14px; border-radius: var(--radius-card);
  background: var(--warn-soft); border: 1px solid var(--warn-line); line-height: 1.45;
}
main[data-view="calendar"] .cal-banner-text { flex: 1 1 320px; display: flex; flex-direction: column; gap: 3px; min-width: 0; }
main[data-view="calendar"] .cal-banner-text b { color: var(--warn); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-banner p { margin: 0; color: var(--ink-2); }
main[data-view="calendar"] .cal-banner-who { font-size: var(--fs-12-5); color: var(--ink-2); }
main[data-view="calendar"] .cal-banner.own { background: var(--fill-soft); border-color: var(--rule); }
main[data-view="calendar"] .cal-banner.own b { color: var(--ink); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-error {
  display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; padding: var(--sp-5);
  border: 1px solid var(--danger-line); border-radius: var(--radius-panel); background: var(--danger-soft);
}
main[data-view="calendar"] .cal-error p { flex: 1 1 280px; margin: 0; color: var(--ink-2); }
main[data-view="calendar"] .cal-error b { color: var(--danger); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-empty {
  padding: 48px var(--sp-5); border: 1px dashed var(--hatch-line); border-radius: var(--radius-panel);
  text-align: center; color: var(--ink-2);
}
main[data-view="calendar"] .cal-skeleton { display: grid; gap: var(--sp-2); }
main[data-view="calendar"] .cal-skeleton.week { grid-template-columns: repeat(7, minmax(0, 1fr)); }
main[data-view="calendar"] .cal-skeleton span { height: 240px; border-radius: var(--radius-card); background: var(--fill-soft); }

/* ---- метки состояния: форма, а не только цвет ----------------------------- */

main[data-view="calendar"] .cal-mark {
  flex: none; display: inline-grid; place-items: center; width: 10px; height: 10px; box-sizing: border-box;
  border: 2px solid var(--decor); border-radius: 2px; background: var(--surface);
  font-size: 8px; line-height: 1; font-weight: var(--fw-700);
}
main[data-view="calendar"] .cal-mark.late { border-color: var(--danger); background: var(--danger); }
main[data-view="calendar"] .cal-mark.held { border-color: var(--held); color: var(--held); }
main[data-view="calendar"] .cal-mark.ready { border-color: var(--ok); border-radius: var(--radius-pill); }
main[data-view="calendar"] .cal-mark.done {
  border-color: var(--teal); background: var(--teal); border-radius: var(--radius-pill); color: var(--ink-inverse);
}
main[data-view="calendar"] .cal-mark.run { border-color: var(--warn); background: var(--warn-soft); }

/* ---- полосы дня -------------------------------------------------------------- */

main[data-view="calendar"] .cal-day-bar {
  position: relative; display: block; height: 8px; border-radius: var(--radius-pill); background: var(--rule);
}
main[data-view="calendar"] .cal-day-bar > span { position: absolute; top: 0; bottom: 0; }
main[data-view="calendar"] .cal-day-fill { left: 0; border-radius: var(--radius-pill); background: var(--warn); }
main[data-view="calendar"] .cal-day-fill.over { background: var(--load-over-fill); }
main[data-view="calendar"] .cal-day-over { border-radius: 0 var(--radius-pill) var(--radius-pill) 0; background: var(--danger); }
main[data-view="calendar"] .cal-day-ghost {
  border-radius: 2px; background: repeating-linear-gradient(135deg, var(--brand-soft-ink) 0 2px, var(--brand-lime) 2px 5px);
}
main[data-view="calendar"] .cal-day-bar > .cal-day-notch { top: -3px; bottom: -3px; width: 2px; background: var(--ink); }
main[data-view="calendar"] .cal-mini-bar {
  position: relative; display: block; height: 5px; border-radius: var(--radius-pill); background: var(--rule); overflow: hidden;
}
main[data-view="calendar"] .cal-mini-bar > span { position: absolute; left: 0; top: 0; bottom: 0; background: var(--warn); }
main[data-view="calendar"] .cal-mini-bar > span.over { background: var(--danger); }

/* ---- сдача ---------------------------------------------------------------- */

main[data-view="calendar"] .cal-job {
  display: flex; flex-direction: column; gap: 1px; width: 100%; min-width: 0; margin: 0; text-align: left;
  padding: var(--sp-1-5) 7px; border: 0; border-radius: var(--radius); cursor: pointer;
  background: var(--fill-soft); font: inherit; color: var(--ink);
}
main[data-view="calendar"] .cal-job:hover { background: var(--surface-2); }
main[data-view="calendar"] .cal-job.late { background: var(--danger-soft); }
main[data-view="calendar"] .cal-job.held { background: var(--held-soft); }
main[data-view="calendar"] .cal-job:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -2px; }
main[data-view="calendar"] .cal-job-top { display: flex; align-items: center; gap: var(--sp-1-5); min-width: 0; }
main[data-view="calendar"] .cal-job-top .cal-num:last-child { margin-left: auto; }
main[data-view="calendar"] .cal-job-what {
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-12); line-height: 1.3;
}
main[data-view="calendar"] .cal-job-who {
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-11); color: var(--muted);
}
main[data-view="calendar"] .cal-job .cal-num { font-size: var(--fs-11); }
main[data-view="calendar"] .cal-job .cal-num.strong { font-weight: var(--fw-700); }
/* Строка списка дня: метка, номер с пациентом и клиника, часы справа. */
main[data-view="calendar"] .cal-job-row { flex-direction: row; align-items: center; gap: var(--sp-2-5); min-height: 48px; padding: var(--sp-1-5) var(--sp-2); }
main[data-view="calendar"] .cal-job-main { flex: 1 1 auto; display: flex; flex-direction: column; gap: 1px; min-width: 0; }
main[data-view="calendar"] .cal-job-row .cal-num { font-size: var(--fs-12); }
/* Короткая строка клетки месяца. */
main[data-view="calendar"] .cal-job-mini {
  flex-direction: row; align-items: center; gap: var(--sp-1); padding: 1px 2px; background: none; white-space: nowrap;
}
main[data-view="calendar"] .cal-job-mini .cal-mark { width: 8px; height: 8px; font-size: 6px; }
main[data-view="calendar"] .cal-job-mini .cal-num.id { font-weight: var(--fw-400); }
main[data-view="calendar"] .cal-job-mini .cal-job-what { color: var(--ink-2); font-size: var(--fs-11); }
main[data-view="calendar"] .cal-jobs { display: flex; flex-direction: column; gap: var(--sp-1); min-width: 0; }
main[data-view="calendar"] .cal-more {
  min-height: 26px; padding: 0 var(--sp-2); border: 0; border-radius: var(--radius-sm); cursor: pointer;
  background: var(--chip-bg); font: inherit; font-size: var(--fs-12); color: var(--ink-2);
}
main[data-view="calendar"] .cal-more:hover { color: var(--ink); }

/* ---- 1. неделя: семь карточек-дней ----------------------------------------- */

main[data-view="calendar"] .cal-week {
  display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: var(--sp-2); align-items: start; min-width: 0;
}
main[data-view="calendar"] .cal-col {
  display: flex; flex-direction: column; gap: var(--sp-2); min-width: 0; min-height: 240px; padding: var(--sp-2-5);
  border: 1px solid var(--rule); border-radius: var(--radius-card); background: var(--surface);
}
main[data-view="calendar"] .cal-col.off { background: var(--gray-25); }
main[data-view="calendar"] .cal-col.promised { border-color: var(--brand-promise); background: var(--brand-promise-bg); }
main[data-view="calendar"] .cal-col.today { border-color: var(--ink); }
main[data-view="calendar"] .cal-col-head { display: flex; flex-direction: column; gap: 2px; }
main[data-view="calendar"] .cal-col-wd { font-size: var(--fs-12); color: var(--muted); }
main[data-view="calendar"] .cal-col.today .cal-col-wd { color: var(--ink); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-col.promised .cal-col-wd { color: var(--brand-soft-ink); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-col-date { display: flex; align-items: baseline; gap: var(--sp-1-5); }
main[data-view="calendar"] .cal-num.day { font-size: var(--fs-22); font-weight: var(--fw-600); line-height: 1; }
main[data-view="calendar"] .cal-col-load { display: flex; flex-direction: column; gap: var(--sp-1); }
main[data-view="calendar"] .cal-num.load { font-size: 11.5px; font-weight: var(--fw-400); color: var(--ink-2); white-space: normal; }
main[data-view="calendar"] .cal-col-note { font-size: var(--fs-12); line-height: 1.35; color: var(--muted); }
main[data-view="calendar"] .cal-ghost-note { color: var(--brand-soft-ink); }

/* Узкий вид недели — лента плиток и список дня. Ширина рабочей области меньше
   900 px (экран уже 1132 px, а при выезжающем меню — любой до 800). */
main[data-view="calendar"] .cal-narrow { display: none; flex-direction: column; gap: var(--sp-3); min-width: 0; }
main[data-view="calendar"] .cal-strip {
  display: flex; gap: var(--sp-1-5); overflow-x: auto; padding: 2px var(--sp-1); margin: 0 calc(-1 * var(--sp-1));
}
main[data-view="calendar"] .cal-tile {
  flex: 0 0 64px; display: flex; flex-direction: column; align-items: stretch; gap: var(--sp-1);
  padding: var(--sp-2) var(--sp-1-5); cursor: pointer; text-align: center; font: inherit; color: var(--ink);
  border: 1px solid var(--rule); border-radius: var(--radius-card); background: var(--gray-25);
}
main[data-view="calendar"] .cal-tile[aria-pressed="true"] { border-color: var(--ink); background: var(--surface); }
main[data-view="calendar"] .cal-tile.promised:not([aria-pressed="true"]) { border-color: var(--brand-promise); }
main[data-view="calendar"] .cal-tile:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 1px; }
main[data-view="calendar"] .cal-tile-wd { font-size: 11.5px; color: var(--muted); }
main[data-view="calendar"] .cal-num.tile { font-size: var(--fs-17); font-weight: var(--fw-600); line-height: 1; }
main[data-view="calendar"] .cal-tile .cal-num:last-child { font-size: var(--fs-11); font-weight: var(--fw-600); min-height: 1em; }
main[data-view="calendar"] .cal-pick {
  display: flex; flex-direction: column; gap: var(--sp-2); padding: var(--sp-3);
  border: 1px solid var(--rule); border-radius: var(--radius-panel);
}
main[data-view="calendar"] .cal-pick-head { display: flex; align-items: baseline; gap: var(--sp-2); flex-wrap: wrap; }
main[data-view="calendar"] .cal-pick-head strong { font-size: var(--fs-14); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-pick > .cal-num.load { font-size: var(--fs-12); }

/* ---- 2. месяц ---------------------------------------------------------------- */

main[data-view="calendar"] .cal-scroll { overflow-x: auto; min-width: 0; max-width: 100%; }
main[data-view="calendar"] .cal-frame { border: 1px solid var(--rule); border-radius: var(--radius-panel); }
main[data-view="calendar"] .cal-month { display: grid; min-width: 0; }
main[data-view="calendar"] .cal-month-row {
  display: grid; grid-template-columns: 64px repeat(7, minmax(0, 1fr)); min-width: 0;
}
main[data-view="calendar"] .cal-month-row.head > span {
  padding: var(--sp-2); background: var(--table-head-bg); border-bottom: 1px solid var(--rule);
  font-size: var(--fs-11); font-weight: var(--fw-600); letter-spacing: .05em; color: var(--muted);
}
main[data-view="calendar"] .cal-month-row.head > span:first-child { font-weight: var(--fw-400); letter-spacing: 0; }
main[data-view="calendar"] .cal-rail {
  display: flex; flex-direction: column; gap: 2px; padding: var(--sp-2); min-width: 0;
  border-top: 1px solid var(--divider); background: var(--gray-25); font-size: 11.5px; color: var(--ink-2);
}
main[data-view="calendar"] .cal-month-row:nth-child(2) > * { border-top: 0; }
main[data-view="calendar"] .cal-rail .cal-num.strong { font-size: var(--fs-12); }
main[data-view="calendar"] .cal-rail-note { font-size: 11.5px; line-height: 1.3; }
main[data-view="calendar"] .cal-rail > .cal-state { max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
main[data-view="calendar"] .cal-cell {
  display: flex; flex-direction: column; gap: var(--sp-1); min-width: 0; min-height: 104px; padding: var(--sp-1-5);
  border-top: 1px solid var(--divider); border-left: 1px solid var(--divider); background: var(--surface);
}
main[data-view="calendar"] .cal-cell.off { background: var(--gray-25); }
main[data-view="calendar"] .cal-cell.outside { opacity: .45; }
main[data-view="calendar"] .cal-cell-head { display: flex; align-items: center; gap: var(--sp-1); }
main[data-view="calendar"] .cal-cell-head .cal-num { font-size: var(--fs-11); font-weight: var(--fw-600); }
main[data-view="calendar"] .cal-cell-head .cal-state { white-space: normal; text-align: right; line-height: 1.2; }
main[data-view="calendar"] .cal-daynum {
  display: inline-grid; place-items: center; min-width: 22px; height: 22px; padding: 0 var(--sp-1); border-radius: var(--radius-sm);
}
main[data-view="calendar"] .cal-cell-head .cal-daynum .cal-num { font-size: var(--fs-12); }
main[data-view="calendar"] .cal-daynum.today { background: var(--ink); }
main[data-view="calendar"] .cal-daynum.today .cal-num { color: var(--ink-inverse); }
main[data-view="calendar"] .cal-cell .cal-off { font-size: var(--fs-11); }
main[data-view="calendar"] .cal-cell .cal-jobs { gap: 1px; }
main[data-view="calendar"] .cal-cell .cal-more { align-self: flex-start; min-height: 20px; padding: 0 var(--sp-1); font-size: var(--fs-11); background: none; color: var(--muted); text-decoration: underline; }

/* ---- 3. очередь сдач --------------------------------------------------------- */

main[data-view="calendar"] .cal-lanes { display: flex; flex-direction: column; min-width: 760px; }
main[data-view="calendar"] .cal-lane-row {
  display: grid; grid-template-columns: 220px minmax(0, 1fr) 110px; align-items: center;
  min-height: 40px; padding: var(--sp-1) var(--sp-3); min-width: 0;
}
main[data-view="calendar"] .cal-lane-row:hover:not(.head) { background: var(--gray-25); }
main[data-view="calendar"] .cal-lane-row.head {
  align-items: end; min-height: 0; padding: var(--sp-2) var(--sp-3);
  background: var(--table-head-bg); border-bottom: 1px solid var(--rule); font-size: 11.5px; color: var(--muted);
}
main[data-view="calendar"] .cal-axis-note { font-size: 11.5px; color: var(--muted); }
main[data-view="calendar"] .cal-axis-note.right { text-align: right; }
main[data-view="calendar"] .cal-lane-axis { display: grid; grid-template-columns: repeat(var(--days), minmax(0, 1fr)); }
main[data-view="calendar"] .cal-lane-day { display: block; line-height: 1.3; text-align: center; font-family: var(--mono); font-size: var(--fs-11); color: var(--muted); white-space: nowrap; }
main[data-view="calendar"] .cal-lane-day.off { color: var(--decor); }
main[data-view="calendar"] .cal-lane-day.today { color: var(--ink); font-weight: var(--fw-700); }
main[data-view="calendar"] .cal-lane-group {
  display: flex; align-items: baseline; gap: var(--sp-2-5); flex-wrap: wrap;
  padding: var(--sp-2-5) var(--sp-3) var(--sp-1); border-top: 1px solid var(--divider);
}
main[data-view="calendar"] .cal-lane-group.more { border-top: 0; padding-top: var(--sp-1); }
main[data-view="calendar"] .cal-group-title {
  font-size: var(--fs-11); font-weight: var(--fw-700); letter-spacing: .06em; text-transform: uppercase; color: var(--ink-2);
}
main[data-view="calendar"] .cal-group-title.danger { color: var(--danger); }
main[data-view="calendar"] .cal-group-title.warn { color: var(--warn); }
main[data-view="calendar"] .cal-group-title.ok { color: var(--ok); }
main[data-view="calendar"] .cal-group-title.teal { color: var(--teal); }
main[data-view="calendar"] .cal-group-hint { font-size: var(--fs-12); color: var(--muted); }
main[data-view="calendar"] .cal-job-lane { padding: var(--sp-1) var(--sp-2-5) var(--sp-1) 0; background: none; }
main[data-view="calendar"] .cal-job-lane .cal-job-top .cal-num:last-child { margin-left: 0; }
main[data-view="calendar"] .cal-job-lane .cal-job-who { font-size: var(--fs-12); }
main[data-view="calendar"] .cal-rail-box {
  position: relative; height: 22px; min-width: 0;
  background: repeating-linear-gradient(90deg, transparent 0, transparent calc(100% / var(--days) - 1px),
    var(--divider) calc(100% / var(--days) - 1px), var(--divider) calc(100% / var(--days)));
}
main[data-view="calendar"] .cal-rail-box > span { position: absolute; }
main[data-view="calendar"] .cal-lead { top: 7px; height: 8px; border-top: 2px dotted var(--decor); }
main[data-view="calendar"] .cal-own { top: 5px; height: 12px; border-radius: 3px; background: var(--warn); }
main[data-view="calendar"] .cal-own.held { background: var(--load-held-fill); }
main[data-view="calendar"] .cal-own.late,
main[data-view="calendar"] .cal-own.over { background: var(--danger); }
main[data-view="calendar"] .cal-own.over { border-radius: 0 3px 3px 0; }
main[data-view="calendar"] .cal-due { top: 0; bottom: 0; width: 2px; background: var(--ink); }
main[data-view="calendar"] .cal-verdict {
  justify-self: end; display: flex; flex-direction: column; align-items: flex-end; gap: 1px; text-align: right;
  font-family: var(--mono); font-size: var(--fs-12); font-weight: var(--fw-600); color: var(--ink-2); white-space: nowrap;
}
main[data-view="calendar"] .cal-verdict small { font-family: var(--font); font-size: var(--fs-11); font-weight: var(--fw-400); color: var(--muted); }
main[data-view="calendar"] .cal-verdict.danger { color: var(--danger); }
main[data-view="calendar"] .cal-verdict.warn { color: var(--warn); }
main[data-view="calendar"] .cal-verdict.ok { color: var(--ok); }
main[data-view="calendar"] .cal-verdict.teal { color: var(--teal); }
main[data-view="calendar"] .cal-verdict.plain { color: var(--ink-2); }
main[data-view="calendar"] .cal-more-note { font-size: var(--fs-11); color: var(--muted); }
main[data-view="calendar"] .cal-job-row .cal-job-what,
main[data-view="calendar"] .cal-job-row .cal-job-who { white-space: normal; overflow: visible; }
main[data-view="calendar"] .cal-job-row .cal-job-what { font-size: var(--fs-13); }
main[data-view="calendar"] .cal-job-row .cal-job-who { font-size: var(--fs-12); }

/* ---- легенда, пояснения, наряды без срока ------------------------------------ */

main[data-view="calendar"] .cal-legend {
  display: flex; align-items: center; gap: var(--sp-1-5) var(--sp-4); flex-wrap: wrap;
  padding: var(--sp-2-5) var(--sp-3); border-radius: var(--radius-card); background: var(--fill-soft);
  font-size: var(--fs-12); color: var(--ink-2);
}
main[data-view="calendar"] .cal-legend-item { display: inline-flex; align-items: center; gap: var(--sp-1-5); white-space: nowrap; }
main[data-view="calendar"] .cal-chip { flex: none; width: 14px; height: 10px; border-radius: var(--radius-pill); }
main[data-view="calendar"] .cal-chip.load { width: 18px; background: var(--warn); }
main[data-view="calendar"] .cal-chip.over { background: var(--danger); }
main[data-view="calendar"] .cal-chip.ghost {
  box-sizing: border-box; border: 2px solid var(--brand-soft-ink); border-radius: 2px; background: var(--brand-lime);
}
main[data-view="calendar"] .cal-chip.queue { width: 18px; border-radius: 3px; background: var(--warn); }
main[data-view="calendar"] .cal-legend .cal-chip.over.lane { border-radius: 3px; }
main[data-view="calendar"] .cal-chip.due { width: 2px; border-radius: 0; background: var(--ink); }
main[data-view="calendar"] .cal-notes { display: flex; flex-direction: column; gap: var(--sp-1); max-width: 820px; }
main[data-view="calendar"] .cal-notes p { margin: 0; font-size: var(--fs-12); line-height: 1.5; color: var(--muted); }

main[data-view="calendar"] .cal-open { border: 1px solid var(--rule); border-radius: var(--radius-card); padding: 0 14px; }
main[data-view="calendar"] .cal-open > summary {
  min-height: 44px; display: flex; align-items: center; gap: var(--sp-1); cursor: pointer; font-weight: var(--fw-500);
}
main[data-view="calendar"] .cal-open > .hint { margin: 0 0 var(--sp-2); font-size: var(--fs-12-5); color: var(--muted); }
main[data-view="calendar"] .cal-open-list { display: flex; flex-direction: column; padding-bottom: var(--sp-1); }
main[data-view="calendar"] .cal-job-open {
  flex-direction: row; align-items: baseline; gap: var(--sp-2-5); padding: var(--sp-2) 0; border-radius: 0;
  border-top: 1px solid var(--divider); background: none;
}
main[data-view="calendar"] .cal-job-open:hover { background: var(--gray-25); }
main[data-view="calendar"] .cal-job-open .cal-job-what { flex: 1 1 auto; font-size: var(--fs-13); }
main[data-view="calendar"] .cal-job-open .cal-num.id { font-size: var(--fs-12); }
main[data-view="calendar"] .cal-job-open .cal-state { font-size: var(--fs-13); }

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

@media (max-width: 70.74rem) {
  main[data-view="calendar"] .cal-week { display: none; }
  main[data-view="calendar"] .cal-narrow { display: flex; }
  main[data-view="calendar"] .cal-skeleton.week { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 50rem) {
  main[data-view="calendar"] [data-workspace="calendar"] > .workspace-tabs [role="tab"] { min-height: 36px; }
}
@media (max-width: 37.5rem) {
  main[data-view="calendar"] .cal-month { min-width: 560px; }
  main[data-view="calendar"] .cal-month-row { grid-template-columns: 44px repeat(7, minmax(0, 1fr)); }
  main[data-view="calendar"] .cal-cell { min-height: 68px; }
}

/* ---- движение по этапам (ADR-0047, макет 07 этапа 3) ------------------------- */
.production-route { display: inline-flex; align-items: center; gap: 6px; font-size: var(--fs-12-5); font-weight: var(--fw-500); color: var(--ink-2); }
.production-route::before { content: ""; flex: none; width: 7px; height: 7px; border-radius: var(--radius-pill); background: var(--decor); }
.production-route.is-ready { color: var(--ok); }
.production-route.is-ready::before { background: var(--ok); }
.production-lock { font-size: var(--fs-12); color: var(--muted); }
.production-ooo {
  align-self: flex-start; padding: 2px var(--sp-2); border-radius: var(--radius-pill);
  background: var(--warn-soft); color: var(--warn); font-size: var(--fs-12); font-weight: var(--fw-500);
}
.production-card .operation-status-controls > button.action.is-secondary,
.production-card .production-actions > button.production-release {
  height: var(--control-h); min-height: var(--control-h); padding: 0 var(--sp-2-5);
  border: 1px solid var(--button-border); background: var(--surface); color: var(--ink); font-weight: var(--fw-500);
}
.production-card .operation-status-controls > button.action.is-secondary:hover:not(:disabled) { background: var(--hover-bg); }
.production-card .production-actions > button.production-release { color: var(--danger); }
.production-card .production-actions > button.production-release:hover:not(:disabled) { background: var(--danger-soft); color: var(--danger); }

/* «Не сданы» в окне вопроса о порядке — доска и карточка наряда. */
.route-waits { border: 1px solid var(--rule); border-radius: 10px; overflow: hidden; }
.route-waits-head { padding: 6px var(--sp-3); background: var(--table-head-bg); font-size: var(--fs-12); font-weight: var(--fw-500); color: var(--muted); }
.route-waits-row { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2) var(--sp-3); min-height: 44px; padding: 6px var(--sp-3); border-top: 1px solid var(--divider); }
.route-waits-row > b { flex: 1 1 140px; font-weight: var(--fw-600); }
.route-waits-who { color: var(--ink-2); }
.route-waits-state {
  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-500); background: var(--info-soft); color: var(--info);
}
.route-waits-state::before { content: ""; width: 6px; height: 6px; border-radius: var(--radius-pill); background: currentColor; }
.route-waits-state.is-in_work { background: var(--warn-soft); color: var(--warn); }

/* =================================================================== */
/* Пост участка (макет 28 «Пост участка», ADR-0044 Q1) — страница /post.
   Планшет 1280 × 800 без меню программы: шапка 72, тело 760 px | остаток.
   Размеры, кегли и радиусы — из разметки макета дословно; цвета — токены. */
body.post-page { margin: 0; background: var(--gray-0); overflow: hidden; }
.post-kiosk { position: fixed; inset: 0; background: var(--gray-0); color: var(--gray-900); line-height: normal; font-size: var(--fs-13); }
.post-kiosk .post-view { height: 100%; display: flex; flex-direction: column; }
.post-kiosk :where(button) { font: inherit; color: inherit; cursor: pointer; }
.post-kiosk .post-mono { font-family: var(--mono); }
.post-scan-input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.post-head { height: 72px; flex: none; display: flex; align-items: center; gap: 16px; padding: 0 32px; border-bottom: 1px solid var(--gray-200); }
.post-logo { width: 40px; height: 40px; border-radius: 10px; background: var(--gray-900); color: var(--lime-400); display: grid; place-items: center; font-size: 20px; }
.post-title { font-size: 24px; font-weight: 600; }
.post-net { margin-left: auto; display: inline-flex; align-items: center; gap: 8px; height: 36px; padding: 0 14px; border-radius: var(--radius-pill); font-size: 18px; font-weight: 500; }
.post-net.is-online { background: var(--green-50); color: var(--green-700); }
.post-net.is-offline { background: var(--orange-50); color: var(--orange-700); }
.post-net-dot { width: 10px; height: 10px; border-radius: var(--radius-pill); background: currentColor; }
.post-clock { margin-left: 0; font: 500 22px var(--mono); color: var(--gray-700); }
.post-head.is-unpaired .post-clock { margin-left: auto; }
.post-offline { flex: none; display: flex; align-items: center; gap: 14px; padding: 10px 32px; background: var(--orange-700); color: var(--gray-0); font-size: 20px; font-weight: 500; }
.post-offline-icon { font-size: 22px; }
.post-offline-note { margin-left: auto; font-weight: 400; font-size: 18px; }

.post-unpaired { flex: 1; display: flex; align-items: center; justify-content: center; gap: 56px; padding: 40px; }
.post-unpaired-qr { width: 280px; height: 280px; flex: none; border-radius: 16px; border: 1px solid var(--gray-300); background: var(--gray-0); overflow: hidden; display: grid; place-items: center; }
.post-unpaired-qr-inner { width: 276px; height: 276px; }
.post-unpaired-text { display: flex; flex-direction: column; gap: 16px; max-width: 560px; }
.post-unpaired-text strong { font-size: 36px; font-weight: 600; line-height: 1.15; }
.post-unpaired-text span { font-size: 22px; line-height: 1.45; color: var(--gray-700); }
.post-unpaired-text .post-unpaired-code { font: 600 40px var(--mono); letter-spacing: .08em; color: var(--gray-900); line-height: normal; }

.post-body { flex: 1; min-height: 0; display: grid; grid-template-columns: 760px 1fr; }
.post-left { position: relative; display: flex; flex-direction: column; padding: 36px 40px; background: var(--gray-0); color: var(--gray-900); transition: background .2s; min-height: 0; }
.post-left.is-ok { background: var(--green-700); color: var(--gray-0); }
.post-left.is-neutral { background: var(--gray-700); color: var(--gray-0); }

.post-wait { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 20px; text-align: center; }
.post-wait-badge { width: 168px; height: 120px; border-radius: 16px; border: 3px solid var(--gray-900); display: flex; align-items: center; gap: 16px; padding: 0 18px; position: relative; }
.post-wait-ini { width: 52px; height: 52px; border-radius: var(--radius-pill); background: var(--indigo-50); color: var(--indigo-700); display: grid; place-items: center; font-weight: 700; font-size: 18px; }
.post-wait-lines { flex: 1; display: flex; flex-direction: column; gap: 8px; }
.post-wait-lines span { height: 8px; border-radius: 4px; background: var(--gray-900); }
.post-wait-lines span + span { width: 60%; background: var(--gray-500); }
.post-wait-scan { position: absolute; right: -14px; bottom: -14px; width: 40px; height: 40px; border-radius: 10px; background: var(--lime-400); display: grid; place-items: center; font-size: 20px; }
.post-wait-title { font-size: 40px; font-weight: 600; letter-spacing: -.01em; }
.post-wait-sub { font-size: 26px; color: var(--gray-700); }
.post-cards-line { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; font-size: 18px; color: var(--gray-700); }
.post-cards-line b { font-weight: 600; }

.post-person { flex: 1; display: flex; flex-direction: column; gap: 28px; justify-content: center; }
.post-person-head { display: flex; align-items: center; gap: 24px; }
.post-person-ini { width: 104px; height: 104px; flex: none; border-radius: var(--radius-pill); background: var(--indigo-50); color: var(--indigo-700); display: grid; place-items: center; font-weight: 700; font-size: 38px; }
.post-person-name { display: flex; flex-direction: column; gap: 8px; }
.post-person-name strong { font-size: 34px; font-weight: 600; }
.post-person-name span { font-size: 24px; color: var(--gray-700); }
.post-rule { border-top: 1px solid var(--gray-200); }
.post-scan-ask { display: flex; align-items: center; gap: 20px; }
.post-scan-ask-icon { width: 72px; height: 72px; border-radius: 14px; background: var(--gray-900); color: var(--lime-400); display: grid; place-items: center; font-size: 34px; }
.post-scan-ask strong { font-size: 40px; font-weight: 600; }
.post-timer { display: flex; flex-direction: column; gap: 10px; }
.post-timer-bar { height: 14px; border-radius: var(--radius-pill); background: var(--gray-100); overflow: hidden; }
.post-timer-bar > div { height: 100%; background: var(--gray-900); transition: width 1s linear; }
.post-timer-note { display: flex; justify-content: space-between; font-size: 20px; color: var(--gray-700); }
.post-cancel-me { height: 80px; border: 2px solid var(--gray-300); border-radius: 14px; background: var(--gray-0); font-size: 26px; font-weight: 500; }

.post-choose-head { display: flex; flex-direction: column; gap: 6px; }
.post-order-no { font: 600 24px var(--mono); }
.post-order-work { font-size: 24px; color: var(--gray-700); }
.post-choose-q { margin: 28px 0 18px; font-size: 34px; font-weight: 600; }
.post-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.post-tile { height: 200px; padding: 22px; border: 2px solid var(--gray-900); border-radius: 16px; background: var(--gray-0); display: flex; flex-direction: column; align-items: flex-start; justify-content: space-between; text-align: left; }
.post-tile-n { width: 56px; height: 56px; border-radius: 12px; background: var(--gray-900); color: var(--lime-400); display: grid; place-items: center; font: 700 30px var(--mono); }
.post-tile-text { display: flex; flex-direction: column; gap: 4px; }
.post-tile-text b { font-size: 30px; font-weight: 600; }
.post-tile-text span { font-size: 22px; color: var(--gray-700); }
.post-choose-hint { margin-top: auto; font-size: 20px; color: var(--gray-700); }

.post-confirm-head { display: flex; flex-direction: column; gap: 8px; }
.post-confirm-no { font: 600 26px var(--mono); }
.post-confirm-work, .post-confirm-stage { font-size: 26px; }
.post-confirm-stage b { font-weight: 600; }
.post-confirm-sub { font-size: 22px; color: var(--gray-700); }
.post-notes { margin-top: 18px; display: flex; flex-direction: column; gap: 8px; }
.post-note { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-radius: 12px; background: var(--orange-50); color: var(--orange-700); font-size: 21px; font-weight: 500; }
.post-note-icon { font-weight: 700; }
.post-main { margin-top: auto; height: 112px; border: 0; border-radius: 18px; background: var(--gray-900); color: var(--gray-0); display: flex; align-items: center; justify-content: center; gap: 20px; font-size: 46px; font-weight: 600; }
.post-main-icon { color: var(--lime-400); }
.post-main-cd { min-width: 64px; height: 64px; border-radius: var(--radius-pill); background: var(--lime-400); color: var(--gray-900); display: grid; place-items: center; font: 700 30px var(--mono); }
.post-alts { margin-top: 14px; display: flex; gap: 12px; }
.post-alt { flex: 1; height: 80px; border: 2px solid var(--gray-300); border-radius: 14px; background: var(--gray-0); font-size: 24px; font-weight: 500; }
.post-confirm-hint { margin-top: 10px; font-size: 18px; color: var(--gray-700); text-align: center; }

.post-res { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 22px; text-align: center; }
.post-res-icon { width: 128px; height: 128px; border-radius: var(--radius-pill); background: var(--gray-0); color: var(--green-700); display: grid; place-items: center; font-size: 68px; font-weight: 700; }
.post-left.is-neutral .post-res-icon { color: var(--gray-700); }
.post-res-title { font-size: 38px; font-weight: 600; line-height: 1.2; max-width: 660px; }
.post-res-sub { font-size: 26px; line-height: 1.35; max-width: 660px; }
.post-undo { align-self: center; height: 80px; padding: 0 32px; border: 2px solid var(--post-undo-line); border-radius: 14px; background: transparent; color: var(--gray-0); font-size: 28px; font-weight: 600; }
.post-res-foot { margin-top: 14px; text-align: center; font-size: 18px; }

.post-err { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 24px; }
.post-err-card { padding: 28px; border-radius: 18px; background: var(--red-50); border: 2px solid var(--red-700); display: flex; flex-direction: column; gap: 14px; }
.post-err-card.is-warn { background: var(--amber-50); border-color: var(--amber-700); }
.post-err-title { display: flex; align-items: center; gap: 14px; color: var(--red-700); font-size: 34px; font-weight: 700; }
.post-err-card.is-warn .post-err-title { color: var(--amber-700); }
.post-err-icon { width: 56px; height: 56px; flex: none; border-radius: var(--radius-pill); background: var(--red-700); color: var(--gray-0); display: grid; place-items: center; font-size: 30px; }
.post-err-card.is-warn .post-err-icon { background: var(--amber-700); }
.post-err-text { font-size: 24px; line-height: 1.45; color: var(--gray-900); }
.post-err-acts { display: flex; gap: 14px; }
.post-force { flex: 1; height: 96px; border: 0; border-radius: 16px; background: var(--gray-900); color: var(--gray-0); font-size: 32px; font-weight: 600; }
.post-err-btn { flex: 1; height: 96px; border: 2px solid var(--gray-300); border-radius: 16px; background: var(--gray-0); font-size: 30px; font-weight: 500; }

.post-right { background: var(--gray-50); border-left: 1px solid var(--gray-200); padding: 28px 30px; display: flex; flex-direction: column; gap: 14px; overflow: hidden; min-height: 0; }
.post-cap { font-size: 16px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--gray-600); }
.post-cap-queue { margin-top: 10px; }
.post-now { display: flex; flex-direction: column; gap: 8px; }
.post-now-row { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 12px; background: var(--gray-0); border: 1px solid var(--gray-200); }
.post-now-dot { color: var(--amber-700); font-size: 20px; }
.post-now-text { flex: 1; font-size: 19px; line-height: 1.3; }
.post-now-text b { font-weight: 600; }
.post-now-time { font: 600 22px var(--mono); color: var(--amber-700); }
.post-queue { display: flex; flex-direction: column; border-top: 1px solid var(--gray-250); }
.post-queue-row { display: flex; flex-direction: column; gap: 5px; padding: 11px 2px; border-bottom: 1px solid var(--gray-250); }
.post-queue-top { display: flex; align-items: center; gap: 8px; }
.post-queue-no { font: 600 18px var(--mono); }
.post-queue-stage { font-size: 18px; font-weight: 600; }
.post-queue-due { margin-left: auto; font: 500 18px var(--mono); color: var(--gray-700); }
.post-queue-due.is-hot { color: var(--amber-700); }
.post-queue-tags { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.post-tag { padding: 1px 9px; border-radius: var(--radius-pill); background: var(--red-50); color: var(--red-700); font-size: 15px; font-weight: 600; }
.post-queue-work { font-size: 17px; color: var(--gray-700); }
.post-queue-more { padding: 10px 2px; font-size: 18px; color: var(--gray-600); }
.post-empty { font-size: 19px; color: var(--gray-700); }
/* Q2: участие в этапе — «Присоединиться к …?», доля и передача, «Сейчас на участке». */
.post-join-q { margin-top: 22px; font-size: 34px; font-weight: 600; }
.post-share-head { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.post-share-no { font: 600 22px var(--mono); }
.post-share-ctx { font-size: 22px; color: var(--gray-700); }
.post-share-body { flex: 1; display: grid; grid-template-columns: 1fr 300px; gap: 28px; margin-top: 20px; min-height: 0; }
.post-share-body.is-equal { grid-template-columns: 1fr; }
.post-share-main { display: flex; flex-direction: column; gap: 16px; }
.post-share-q { font-size: 34px; font-weight: 600; line-height: 1.15; }
.post-share-num { display: flex; align-items: center; gap: 14px; }
.post-share-step { width: 80px; height: 96px; border: 2px solid var(--gray-300); border-radius: 14px; background: var(--gray-0); font-size: 40px; }
.post-share-value { flex: 1; height: 96px; border-radius: 14px; background: var(--gray-50); display: grid; place-items: center; font: 700 64px var(--mono); }
.post-share-hint { font-size: 22px; color: var(--gray-700); }
.post-next { display: flex; flex-direction: column; gap: 10px; }
.post-next-cap { font-size: 20px; color: var(--gray-700); }
.post-next-list { display: flex; gap: 10px; flex-wrap: wrap; }
.post-next-btn { height: 60px; padding: 0 18px; border: 2px solid var(--gray-300); border-radius: 12px; background: var(--gray-0); font-size: 22px; font-weight: 500; }
.post-next-btn.is-on { border-color: var(--gray-900); background: var(--lime-50); }
.post-share-submit { margin-top: auto; height: 96px; border: 0; border-radius: 16px; background: var(--gray-900); color: var(--gray-0); font-size: 40px; font-weight: 600; }
.post-keys { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; align-content: start; }
.post-key { height: 84px; border: 2px solid var(--gray-300); border-radius: 14px; background: var(--gray-0); font: 600 32px var(--mono); }
.post-now-dot.is-pause { color: var(--orange-700); font-weight: 700; }
.post-now-dot.is-hand { color: var(--blue-700); font-weight: 700; }
.post-now-time.is-pause { color: var(--orange-700); }
.post-now-at { font: 500 18px var(--mono); color: var(--gray-700); }
.post-tag.is-hand { background: var(--blue-50); color: var(--blue-700); }

/* Приложение техника (макет 29 «Приложение техника», ADR-0044 Q1b) — страница /app.
   Телефон 390 × 844: главная, шторки снизу (радиус 22), нижняя панель 88 с круглой
   кнопкой скана 68. Размеры, кегли и радиусы — из разметки макета дословно; цвета —
   токены. Строка состояния телефона (47 px в макете) — системная: отступ сверху —
   безопасная зона устройства. */
body.tapp-page { margin: 0; background: var(--gray-75); }
.tapp { position: relative; max-width: 430px; height: 100vh; height: 100dvh; margin: 0 auto; overflow: hidden; display: flex; flex-direction: column;
  padding-top: env(safe-area-inset-top); background: var(--gray-75); color: var(--gray-900); font-size: 14px; line-height: normal; }
.tapp :where(button) { font: inherit; color: inherit; cursor: pointer; }
.tapp .tapp-mono { font-family: var(--mono); }
.tapp-scroll { flex: 1; min-height: 0; overflow: auto; padding: 6px 16px 20px; display: flex; flex-direction: column; gap: 12px; }
.tapp-head { display: flex; align-items: center; gap: 10px; }
.tapp-head strong { flex: 1; font-size: 24px; font-weight: 600; }
.tapp-pending { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border-radius: var(--radius-pill); background: var(--app-quiet); color: var(--gray-700); font-size: 12.5px; font-weight: 500; }
.tapp-bell { position: relative; width: 44px; height: 44px; flex: none; border: 0; border-radius: var(--radius-pill); background: var(--gray-0); display: grid; place-items: center; }
.tapp-bell svg { width: 20px; height: 20px; }
.tapp-bell-count { position: absolute; top: 2px; right: 2px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: var(--radius-pill); background: var(--red-700); color: var(--gray-0); font: 600 11px/18px var(--mono); }
.tapp-avatar { width: 44px; height: 44px; flex: none; border: 0; border-radius: var(--radius-pill); background: var(--indigo-50); color: var(--indigo-700) !important; display: grid; place-items: center; font-weight: 600; font-size: 14px; }
.tapp-offline { padding: 10px 12px; border-radius: 12px; background: var(--orange-50); color: var(--orange-700); font-size: 13.5px; font-weight: 500; line-height: 1.4; }
.tapp-conflict { display: flex; align-items: center; gap: 10px; padding: 12px; border-radius: 12px; background: var(--orange-50); border: 1px solid var(--app-conflict-line); }
.tapp-conflict > span { flex: 1; font-size: 14px; line-height: 1.4; color: var(--gray-900); }
.tapp-conflict b { font-weight: 600; color: var(--orange-700); }
.tapp-conflict button { height: 44px; padding: 0 14px; border: 0; border-radius: 10px; background: var(--gray-900); color: var(--gray-0) !important; font-weight: 600; }
.tapp-place { display: flex; align-items: center; gap: 10px; height: 48px; padding: 0 6px 0 14px; border-radius: 12px; background: var(--gray-0); }
.tapp-place svg { width: 18px; height: 18px; flex: none; }
.tapp-place > span { flex: 1; font-size: 14.5px; }
.tapp-place b, .tapp-labnet b { font-weight: 600; }
.tapp-link { height: 40px; padding: 0 12px; border: 0; border-radius: 8px; background: transparent; color: var(--gray-700) !important; text-decoration: underline; text-underline-offset: 2px; }
.tapp-labnet { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 6px 6px 6px 14px; border-radius: 12px; background: var(--gray-0); }
.tapp-labnet .tapp-dot { width: 8px; height: 8px; flex: none; border-radius: var(--radius-pill); background: var(--green-700); }
.tapp-labnet > span:not(.tapp-dot) { flex: 1; font-size: 14px; line-height: 1.4; }
.tapp-labnet .tapp-link { padding: 0 10px; border-radius: 0; }
.tapp-noplace { display: flex; flex-direction: column; gap: 10px; padding: 12px 14px; border-radius: 12px; background: var(--amber-50); border: 1px solid var(--approval-warn-line); }
.tapp-noplace > span { font-size: 14px; line-height: 1.45; }
.tapp-noplace b { font-weight: 600; color: var(--amber-700); }
.tapp-noplace button { height: 44px; border: 0; border-radius: 10px; background: var(--gray-900); color: var(--gray-0) !important; font-weight: 600; }
.tapp-lime { color: var(--lime-400); }
.tapp-remote { height: 44px; padding: 0 14px; border-radius: 12px; background: var(--gray-0); display: flex; align-items: center; font-size: 14px; color: var(--gray-700); }
.tapp-empty { margin-top: 40px; padding: 28px 20px; border-radius: 12px; background: var(--gray-0); display: flex; flex-direction: column; gap: 8px; text-align: center; }
.tapp-empty strong { font-size: 17px; font-weight: 600; }
.tapp-empty span { font-size: 14.5px; line-height: 1.5; color: var(--gray-700); }
.tapp-cap { margin-top: 4px; font-size: 12px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--gray-600); }
.tapp-card { padding: 14px; border-radius: 12px; background: var(--gray-0); display: flex; flex-direction: column; gap: 8px; }
.tapp-card-top { display: flex; align-items: center; gap: 8px; }
.tapp-pill { display: inline-flex; align-items: center; gap: 5px; padding: 2px 8px; border-radius: var(--radius-pill); font-size: 12px; font-weight: 600; }
.tapp-pill.is-work { background: var(--amber-50); color: var(--amber-700); }
.tapp-pill.is-net { background: var(--app-quiet); color: var(--gray-700); font-weight: 500; }
.tapp-card-time { margin-left: auto; font: 600 16px var(--mono); color: var(--amber-700); }
.tapp-card-title { font-size: 15.5px; }
.tapp-card-title b { font-weight: 600; }
.tapp-card-title .tapp-no { font: 600 15px var(--mono); }
.tapp-card-work { font-size: 13.5px; color: var(--gray-700); }
.tapp-card-acts { display: flex; gap: 8px; }
.tapp-card-main { flex: 1; height: 48px; border: 0; border-radius: 10px; background: var(--gray-900); color: var(--gray-0) !important; font-size: 15px; font-weight: 600; }
.tapp-card-main:disabled { background: var(--gray-500); cursor: default; }
.tapp-card-more { width: 96px; height: 48px; border: 1px solid var(--gray-300); border-radius: 10px; background: var(--gray-0); font-size: 15px; font-weight: 500; }
.tapp-card-more:disabled { cursor: default; }
/* Q2: участие в этапе на карточке «В работе» — пауза, «ваша часть сдана», сдано,
   вдвоём (инициалы), шторка «Присоединиться», экран доли и передачи. */
.tapp-pill.is-pause { background: var(--orange-50); color: var(--orange-700); }
.tapp-pill.is-done { background: var(--green-50); color: var(--green-700); }
.tapp-card-time.is-pause { color: var(--orange-700); }
.tapp-card-time.is-done { color: var(--green-700); }
.tapp-card.is-faded { opacity: .6; }
.tapp-card-row { display: flex; align-items: center; gap: 8px; }
.tapp-card-row .tapp-card-work { flex: 1; }
.tapp-faces { display: flex; }
.tapp-face { width: 26px; height: 26px; border-radius: var(--radius-pill); background: var(--indigo-50); color: var(--indigo-700); display: grid; place-items: center; font-size: 10.5px; font-weight: 600; border: 2px solid var(--gray-0); }
.tapp-face.is-second { margin-left: -6px; background: var(--teal-50); color: var(--teal-700); }
.tapp-card-note { font-size: 13.5px; font-weight: 500; color: var(--green-700); }
.tapp-join-q { font-size: 20px; font-weight: 600; }
.tapp[data-screen="share"] { background: var(--gray-0); }
.tapp-share { flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 14px; padding: 4px 16px 28px; background: var(--gray-0); }
.tapp-share-head > span { font-size: 15px; }
.tapp-share-head b { font: 600 15px var(--mono); }
.tapp-share-q { font-size: 24px; font-weight: 600; }
.tapp-share-num { display: flex; align-items: center; gap: 10px; }
.tapp-share-num button { width: 64px; height: 72px; border: 1px solid var(--gray-300); border-radius: 14px; background: var(--gray-0); font-size: 28px; }
.tapp-share-num span { flex: 1; height: 72px; border-radius: 14px; background: var(--gray-75); display: grid; place-items: center; font: 700 44px var(--mono); }
.tapp-share-hint { font-size: 14.5px; color: var(--gray-700); }
.tapp-keys { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.tapp-keys button { height: 56px; border: 1px solid var(--gray-300); border-radius: 12px; background: var(--gray-0); font: 600 22px var(--mono); }
.tapp-next { border-radius: 12px; border: 1px solid var(--gray-200); overflow: hidden; }
.tapp-next-row { width: 100%; min-height: 56px; padding: 0 14px; border: 0; border-top: 1px solid var(--gray-150); background: var(--gray-0); display: flex; align-items: center; gap: 10px; text-align: left; font-size: 15.5px; }
.tapp-next-row.is-on { background: var(--lime-50); }
.tapp-radio { width: 20px; height: 20px; border-radius: var(--radius-pill); border: 2px solid var(--gray-500); display: grid; place-items: center; }
.tapp-radio > span { width: 10px; height: 10px; border-radius: var(--radius-pill); background: transparent; }
.tapp-next-row.is-on .tapp-radio { border-color: var(--gray-900); }
.tapp-next-row.is-on .tapp-radio > span { background: var(--gray-900); }
.tapp-next-name { flex: 1; }
.tapp-next-sub { font-size: 13px; color: var(--gray-600); }
.tapp-share-submit { margin-top: auto; height: 60px; border: 0; border-radius: 14px; background: var(--gray-900); color: var(--gray-0) !important; font-size: 19px; font-weight: 600; }
.tapp-postonly { font-size: 13px; color: var(--gray-600); line-height: 1.45; }
.tapp-queue { border-radius: 12px; background: var(--gray-0); overflow: hidden; }
.tapp-queue-row { width: 100%; display: flex; align-items: center; gap: 10px; min-height: 56px; padding: 8px 14px; border: 0; border-top: 1px solid var(--gray-150); background: var(--gray-0); text-align: left; }
.tapp-queue-row > span:first-child { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.tapp-queue-row .tapp-q-title { font-size: 14px; }
.tapp-queue-row .tapp-q-title b { font: 600 13.5px var(--mono); }
.tapp-queue-row .tapp-q-work { font-size: 12.5px; color: var(--gray-700); }
.tapp-queue-row .tapp-q-due { font: 500 13px var(--mono); color: var(--gray-700); }
.tapp-today { padding: 12px 14px; border-radius: 12px; background: var(--gray-0); font-size: 14px; color: var(--gray-700); }
.tapp-today b { font-weight: 600; color: var(--gray-900); }

.tapp-page-title { font-size: 24px; font-weight: 600; }
.tapp-earn-total { padding: 16px; border-radius: 12px; background: var(--gray-0); display: flex; flex-direction: column; gap: 6px; }
.tapp-earn-total span:first-child { font-size: 13px; color: var(--gray-600); }
.tapp-earn-total b { font: 600 26px var(--mono); }
.tapp-earn-total span:last-child { font-size: 13px; color: var(--gray-700); }
.tapp-list { border-radius: 12px; background: var(--gray-0); overflow: hidden; }
.tapp-earn-row { display: flex; gap: 10px; align-items: center; min-height: 52px; padding: 8px 14px; border-top: 1px solid var(--gray-150); }
.tapp-earn-row span:first-child { flex: 1; font-size: 14px; }
.tapp-earn-row span:last-child { font: 500 14px var(--mono); }
.tapp-sheet-link { align-self: flex-start; padding: 0; border: 0; background: transparent; font-size: 14px; text-decoration: underline; text-underline-offset: 2px; color: var(--gray-900); }

.tapp-sub { flex: 1; min-height: 0; overflow: auto; padding: 4px 16px 20px; display: flex; flex-direction: column; gap: 12px; }
.tapp-back { display: flex; align-items: center; gap: 6px; }
.tapp-back button:first-child { width: 44px; height: 44px; margin-left: -8px; border: 0; background: transparent; font-size: 22px; }
.tapp-back strong { font-size: 22px; font-weight: 600; }
.tapp-notes-head strong { flex: 1; }
.tapp-readall { height: 44px; padding: 0 4px; border: 0; background: transparent; color: var(--gray-700) !important; font-size: 14px; text-decoration: underline; text-underline-offset: 2px; }
.tapp-lead { font-size: 14px; line-height: 1.45; color: var(--gray-700); }
.tapp-dev { display: flex; flex-direction: column; gap: 10px; padding: 12px 14px; border-top: 1px solid var(--gray-150); }
.tapp-dev-row { display: flex; align-items: center; gap: 10px; }
.tapp-dev-row > span { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.tapp-dev-row b { font-size: 15px; font-weight: 600; }
.tapp-dev-row span span { font-size: 12.5px; color: var(--gray-700); }
.tapp-dev-row button { height: 40px; padding: 0 12px; border: 1px solid var(--gray-300); border-radius: 10px; background: var(--gray-0); font-weight: 500; }
.tapp-ask { display: flex; flex-direction: column; gap: 10px; padding: 12px; border-radius: 10px; background: var(--red-50); }
.tapp-ask > span { font-size: 14px; line-height: 1.45; }
.tapp-ask b { font-weight: 600; }
.tapp-ask div { display: flex; gap: 8px; }
.tapp-ask button { flex: 1; height: 44px; border: 1px solid var(--gray-300); border-radius: 10px; background: var(--gray-0); font-weight: 500; }
.tapp-ask button.is-bad { border: 0; background: var(--red-700); color: var(--gray-0) !important; font-weight: 600; }
.tapp-note-row { width: 100%; display: flex; gap: 12px; align-items: flex-start; min-height: 64px; padding: 12px 14px; border: 0; border-top: 1px solid var(--gray-150); background: var(--gray-0); text-align: left; }
.tapp-note-row.is-unread { background: var(--gray-25); }
.tapp-note-dot { width: 9px; height: 9px; margin-top: 6px; flex: none; border-radius: var(--radius-pill); background: var(--gray-300); }
.tapp-note-row.is-unread .tapp-note-dot { background: var(--indigo-700); }
.tapp-note-text { flex: 1; display: flex; flex-direction: column; gap: 3px; }
.tapp-note-text > span:first-child { font-size: 15px; line-height: 1.4; font-weight: 400; }
.tapp-note-row.is-unread .tapp-note-text > span:first-child { font-weight: 600; }
.tapp-note-at { font-size: 13px; color: var(--gray-600); }
.tapp-note-tag { align-self: flex-start; padding: 2px 8px; border-radius: 6px; background: var(--amber-50); color: var(--amber-700); font-size: 13px; font-weight: 500; }
.tapp-error { margin-top: 40px; padding: 24px 20px; border-radius: 12px; background: var(--red-50); display: flex; flex-direction: column; gap: 10px; text-align: center; }
.tapp-error strong { font-size: 17px; font-weight: 600; color: var(--red-700); }
.tapp-error span { font-size: 14.5px; color: var(--gray-700); }
.tapp-error button { height: 48px; border: 0; border-radius: 12px; background: var(--gray-900); color: var(--gray-0) !important; font-weight: 600; }

.tapp-manual { flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 14px; padding: 4px 16px 28px; }
.tapp-manual .tapp-back strong { font-size: 20px; }
.tapp-number { display: flex; align-items: center; height: 64px; padding: 0 16px; border: 1px solid var(--gray-300); border-radius: 14px; background: var(--gray-0); font: 600 26px var(--mono); }
.tapp-number > span { color: var(--gray-600); }
.tapp-number input, .tapp-number input:focus { flex: 1; min-width: 0; height: auto; border: 0; outline: 0; box-shadow: none; background: transparent; font: 600 26px var(--mono); color: var(--gray-900); padding: 0; }
.tapp-manual-err { font-size: 14px; color: var(--red-700); }
.tapp-recent { display: flex; flex-direction: column; gap: 8px; }
.tapp-recent > span { font-size: 13px; color: var(--gray-600); }
.tapp-recent div { display: flex; gap: 8px; flex-wrap: wrap; }
.tapp-recent button { height: 44px; padding: 0 14px; border: 1px solid var(--gray-300); border-radius: 10px; background: var(--gray-0); font: 500 14px var(--mono); }
.tapp-find { margin-top: auto; height: 60px; border: 0; border-radius: 14px; background: var(--gray-900); color: var(--gray-0) !important; font-size: 18px; font-weight: 600; }
.tapp-loading { flex: 1; display: flex; flex-direction: column; gap: 12px; padding: 20px 16px; }
.tapp-loading > span { font-size: 15px; color: var(--gray-700); }
.tapp-loading div { background: var(--app-quiet); }
.tapp-loading div:nth-of-type(1) { height: 22px; width: 60%; border-radius: 6px; }
.tapp-loading div:nth-of-type(2) { height: 14px; width: 80%; border-radius: 6px; }
.tapp-loading div:nth-of-type(3) { height: 84px; border-radius: 12px; }
.tapp-loading div:nth-of-type(4) { height: 60px; border-radius: 14px; }

.tapp-cam { position: absolute; inset: 0; z-index: 5; background: var(--app-camera); color: var(--gray-0); display: flex; flex-direction: column; padding: 56px 20px 28px; gap: 16px; }
.tapp-cam-top { display: flex; align-items: center; justify-content: space-between; }
.tapp-cam-close { width: 48px; height: 48px; border: 0; border-radius: var(--radius-pill); background: var(--app-camera-button); color: var(--gray-0) !important; font-size: 20px; }
.tapp-torch { height: 48px; padding: 0 16px; border: 0; border-radius: var(--radius-pill); background: var(--app-camera-button); color: var(--gray-0) !important; font-weight: 600; }
.tapp-torch[aria-pressed="true"] { background: var(--lime-400); color: var(--gray-900) !important; }
.tapp-finder { margin: 40px auto 0; width: 260px; height: 260px; position: relative; flex: none; }
.tapp-finder video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border-radius: 4px; }
.tapp-corner { position: absolute; width: 48px; height: 48px; border: 0 solid var(--lime-400); }
.tapp-corner.is-tl { left: 0; top: 0; border-left-width: 4px; border-top-width: 4px; border-radius: 14px 0 0 0; }
.tapp-corner.is-tr { right: 0; top: 0; border-right-width: 4px; border-top-width: 4px; border-radius: 0 14px 0 0; }
.tapp-corner.is-bl { left: 0; bottom: 0; border-left-width: 4px; border-bottom-width: 4px; border-radius: 0 0 0 14px; }
.tapp-corner.is-br { right: 0; bottom: 0; border-right-width: 4px; border-bottom-width: 4px; border-radius: 0 0 14px 0; }
.tapp-cam-hint { text-align: center; font-size: 17px; font-weight: 500; line-height: 1.4; }
.tapp-denied { margin-top: 60px; display: flex; flex-direction: column; gap: 10px; }
.tapp-denied strong { font-size: 22px; font-weight: 600; }
.tapp-denied span { font-size: 15px; line-height: 1.5; color: var(--app-camera-text); }
.tapp-cam-err { padding: 14px; border-radius: 12px; background: var(--red-50); color: var(--gray-900); display: flex; flex-direction: column; gap: 4px; }
.tapp-cam-err b { font-weight: 600; color: var(--red-700); }
.tapp-cam-err span { font-size: 14px; line-height: 1.45; }
.tapp-cam-manual { margin-top: auto; height: 56px; border: 1px solid var(--app-camera-line); border-radius: 14px; background: transparent; color: var(--gray-0) !important; font-size: 16px; font-weight: 600; }

.tapp-scrim { position: absolute; inset: 0; z-index: 6; background: var(--app-sheet-scrim); }
.tapp-drawer { position: absolute; left: 0; right: 0; bottom: 0; z-index: 7; background: var(--gray-0); border-radius: 22px 22px 0 0; padding: 10px 18px 34px; display: flex; flex-direction: column; gap: 12px; }
.tapp-grab { width: 40px; height: 5px; border-radius: var(--radius-pill); background: var(--gray-300); align-self: center; }
.tapp-drawer-head { display: flex; flex-direction: column; gap: 4px; }
.tapp-drawer-head b { font: 600 20px var(--mono); }
.tapp-drawer-head span { font-size: 15px; color: var(--gray-700); }
.tapp-drawer > strong { font-size: 20px; font-weight: 600; }
.tapp-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.tapp-tile { height: 128px; padding: 14px; border: 1.5px solid var(--gray-900); border-radius: 14px; background: var(--gray-0); display: flex; flex-direction: column; align-items: flex-start; justify-content: space-between; text-align: left; }
.tapp-tile-n { width: 32px; height: 32px; border-radius: 8px; background: var(--gray-900); color: var(--lime-400); display: grid; place-items: center; font: 700 16px var(--mono); }
.tapp-tile > span:last-child { display: flex; flex-direction: column; gap: 2px; }
.tapp-tile b { font-size: 16px; font-weight: 600; }
.tapp-tile span span { font-size: 13px; color: var(--gray-700); }
.tapp-alt { flex: 1; height: 52px; border: 1px solid var(--gray-300); border-radius: 12px; background: var(--gray-0); font-size: 15px; font-weight: 500; }
.tapp-stage { padding: 12px 14px; border-radius: 12px; background: var(--gray-75); display: flex; flex-direction: column; gap: 2px; }
.tapp-stage b { font-size: 17px; font-weight: 600; }
.tapp-stage span { font-size: 14px; color: var(--gray-700); }
.tapp-alert { padding: 12px 14px; border-radius: 12px; background: var(--amber-50); border: 1px solid var(--approval-warn-line); font-size: 14.5px; line-height: 1.45; }
.tapp-alert b { font-weight: 600; color: var(--amber-700); }
.tapp-note { display: flex; gap: 8px; padding: 10px 12px; border-radius: 10px; font-size: 14px; font-weight: 500; line-height: 1.4; }
.tapp-note > span:first-child { font-weight: 700; }
.tapp-note.is-pause { background: var(--orange-50); color: var(--orange-700); }
.tapp-note.is-mark { background: var(--gray-75); color: var(--gray-700); }
.tapp-needplace { padding: 10px 12px; border-radius: 10px; background: var(--amber-50); color: var(--amber-700); font-size: 14px; font-weight: 500; }
.tapp-main { height: 60px; border: 0; border-radius: 14px; background: var(--gray-900); color: var(--gray-0) !important; font-size: 20px; font-weight: 600; }
.tapp-alts { display: flex; gap: 8px; }
.tapp-alt.is-solo { flex: none; }
.tapp button:disabled { opacity: 1; }

.tapp-tabbar { flex: none; height: 88px; padding: 8px 24px 26px; background: var(--gray-0); border-top: 1px solid var(--gray-200); display: flex; align-items: center; justify-content: space-between; position: relative; z-index: 1; }
.tapp-tab { width: 96px; height: 48px; border: 0; background: transparent; font-size: 13px; font-weight: 500; color: var(--gray-600) !important; }
.tapp-tab[aria-current="page"] { font-weight: 700; color: var(--gray-900) !important; }
.tapp-scan { width: 68px; height: 68px; margin-top: -30px; border: 4px solid var(--gray-75); border-radius: var(--radius-pill); background: var(--gray-900); color: var(--lime-400) !important; display: grid; place-items: center; }
.tapp-scan svg { width: 28px; height: 28px; }
.tapp-tab-post { font-size: 12px; color: var(--gray-600); text-align: center; }
.tapp-toast { position: absolute; left: 16px; right: 16px; bottom: 104px; z-index: 9; padding: 8px 8px 8px 16px; min-height: 52px; border-radius: 12px; background: var(--gray-900); color: var(--gray-0); font-size: 14.5px; display: flex; gap: 10px; align-items: center; }
.tapp-toast-dot { width: 8px; height: 8px; flex: none; border-radius: var(--radius-pill); background: var(--lime-400); }
.tapp-toast > span:nth-child(2) { flex: 1; line-height: 1.35; }
.tapp-toast button { height: 40px; padding: 0 12px; border: 0; border-radius: 8px; background: var(--app-toast-button); color: var(--lime-400) !important; font-weight: 600; }

.tapp-center { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 16px; padding: 24px; }
.tapp-center strong { font-size: 24px; font-weight: 600; line-height: 1.25; }
.tapp-center > span:not(.tapp-mark) { font-size: 15px; line-height: 1.5; color: var(--gray-700); }
.tapp-mark { width: 56px; height: 56px; border-radius: 16px; background: var(--red-50); color: var(--red-700); display: grid; place-items: center; font-size: 26px; font-weight: 700; }
.tapp-mark.is-ok { width: 64px; height: 64px; border-radius: var(--radius-pill); background: var(--green-50); color: var(--green-700); font-size: 32px; }
.tapp-center.is-bound strong { font-size: 26px; }
.tapp-center .tapp-cta { height: 56px; border: 0; border-radius: 14px; background: var(--gray-900); color: var(--gray-0) !important; display: grid; place-items: center; font-size: 17px; font-weight: 600; text-decoration: none; }
.tapp-center.is-bound .tapp-cta { margin-top: 12px; }
.tapp-scan-input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }

/* Пост участка — возвраты R1: «Замечание врача», «✓ Прочитал», карта «Возврат»,
   строка «↻ Возврат · № … · ждёт N мин · срочно», плашка очереди «↻ возврат». */
.post-remark { padding: 18px 22px; border-radius: 16px; background: var(--red-50); border: 2px solid var(--red-700); display: flex; flex-direction: column; gap: 12px; }
.post-remark-head { display: flex; align-items: center; gap: 12px; color: var(--red-700); font-size: 26px; font-weight: 700; }
.post-remark-at { margin-left: auto; font-size: 20px; font-weight: 600; }
.post-remark-tags { display: flex; gap: 8px; flex-wrap: wrap; }
.post-remark-tags span { padding: 4px 12px; border-radius: var(--radius-pill); background: var(--gray-0); color: var(--red-700); font-size: 18px; font-weight: 600; }
.post-remark-quote { font-size: 30px; font-weight: 500; line-height: 1.3; color: var(--gray-900); }
.post-remark-photos { margin-top: 18px; display: flex; gap: 14px; }
.post-remark-photos > div { width: 220px; height: 150px; border-radius: 12px; border: 1px solid var(--gray-200); background: repeating-linear-gradient(135deg, var(--gray-100) 0 8px, var(--gray-50) 8px 16px); display: flex; align-items: flex-end; padding: 8px; }
.post-remark-photos span { font: 15px var(--mono); background: var(--gray-0); padding: 2px 6px; border-radius: 6px; }
.post-remark-line { margin-top: 18px; font-size: 22px; color: var(--gray-700); }
.post-remark-pay { margin-top: 8px; font-size: 22px; }
.post-remark-pay b { font-weight: 600; }
.post-read { margin-top: auto; height: 104px; border: 0; border-radius: 18px; background: var(--gray-900); color: var(--gray-0); font-size: 44px; font-weight: 600; }
.post-read-hint { margin-top: 10px; font-size: 18px; color: var(--gray-700); text-align: center; }
.post-retcard { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 24px; }
.post-retcard-pill { display: inline-flex; align-self: flex-start; align-items: center; gap: 10px; padding: 8px 16px; border-radius: var(--radius-pill); background: var(--red-50); color: var(--red-700); font-size: 22px; font-weight: 600; }
.post-retcard strong { font-size: 40px; font-weight: 600; line-height: 1.15; }
.post-retcard > span:last-child { font-size: 24px; line-height: 1.45; color: var(--gray-700); }
.post-now-row.is-return { background: var(--red-50); border-color: var(--red-200); color: var(--red-700); }
.post-now-row.is-return .post-now-dot { color: var(--red-700); font-size: 22px; font-weight: 700; }
.post-now-row.is-return .post-now-text { font-weight: 600; }
.post-ret-hot { padding: 2px 10px; border-radius: var(--radius-pill); background: var(--red-700); color: var(--gray-0); font-size: 16px; font-weight: 600; }
.post-tag.is-return { background: var(--red-700); color: var(--gray-0); }
/* Пост участка — карта «Согласен» (R2): вопрос о переносе с виновника. */
.post-agree-head { display: flex; align-items: center; gap: 18px; }
.post-agree-mark { width: 72px; height: 72px; border-radius: 14px; background: var(--gray-900); color: var(--lime-400); display: grid; place-items: center; font-size: 34px; flex: none; }
.post-agree-head > span:last-child { display: flex; flex-direction: column; gap: 4px; }
.post-agree-head > span:last-child > span { font-size: 20px; color: var(--gray-700); }
.post-agree-head b { font-size: 26px; font-weight: 600; }
.post-agree-q { margin-top: 28px; font-size: 38px; font-weight: 600; line-height: 1.2; }
.post-agree-sub { margin-top: 14px; font-size: 22px; line-height: 1.45; color: var(--gray-700); }
.post-agree-yes { margin-top: auto; height: 112px; border: 0; border-radius: 18px; background: var(--gray-900); color: var(--gray-0); font-size: 46px; font-weight: 600; }
.post-agree-alts { margin-top: 14px; display: flex; gap: 12px; }
.post-agree-alt { flex: 1; height: 80px; border: 2px solid var(--gray-300); border-radius: 14px; background: var(--gray-0); font-size: 24px; font-weight: 500; }

/* Приложение техника — возврат R1: карточка «↻ Возврат от врача» на главной,
   экран возврата («Прочитал» → «Начать доработку»), шторка «Попросить фото». */
.tapp-ret { padding: 14px; border-radius: 12px; background: var(--red-50); border: 1px solid var(--red-200); display: flex; flex-direction: column; gap: 6px; }
.tapp-ret-top { display: flex; align-items: center; gap: 8px; }
.tapp-ret-cap { color: var(--red-700); font-size: 12px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; }
.tapp-ret-hot { padding: 1px 8px; border-radius: var(--radius-pill); background: var(--red-700); color: var(--gray-0); font-size: 11.5px; font-weight: 600; }
.tapp-ret-wait { margin-left: auto; font: 500 12.5px var(--mono); color: var(--red-700); }
.tapp-ret-title { font-size: 15px; }
.tapp-ret-title .tapp-no { font: 600 15px var(--mono); }
.tapp-ret-quote { font-size: 14.5px; color: var(--gray-900); }
.tapp-ret-ph { color: var(--gray-700); }
.tapp-ret-asked { align-self: flex-start; padding: 3px 10px; border-radius: var(--radius-pill); background: var(--gray-0); color: var(--blue-700); font-size: 12.5px; font-weight: 600; }
.tapp-ret-asked.is-block { align-self: stretch; padding: 10px 12px; border-radius: 12px; background: var(--blue-50); font-size: 14px; }
.tapp-ret-row { display: flex; align-items: center; gap: 10px; margin-top: 4px; }
.tapp-ret-visit { flex: 1; font-size: 13.5px; color: var(--gray-700); }
.tapp-ret-visit b { font-weight: 600; color: var(--gray-900); }
.tapp-ret-btn { height: 44px; padding: 0 18px; border: 0; border-radius: 10px; background: var(--red-700); color: var(--gray-0); font-weight: 600; }
.tapp-retview { padding-top: 4px; }
.tapp-ret-head { display: flex; align-items: center; gap: 6px; font-size: 15px; }
.tapp-ret-head > span:nth-child(2) { flex: 1; }
.tapp-ret-head .tapp-no { font: 600 15px var(--mono); }
.tapp-ret-head .tapp-ret-hot { font-size: 12px; padding: 2px 8px; }
.tapp-ret-back { width: 44px; height: 44px; margin-left: -8px; border: 0; background: transparent; font-size: 22px; }
.tapp-ret-taken { padding: 10px 12px; border-radius: 12px; background: var(--amber-50); color: var(--amber-700); font-size: 14px; font-weight: 500; line-height: 1.4; }
.tapp-ret-box { padding: 14px; border-radius: 12px; background: var(--gray-0); display: flex; flex-direction: column; gap: 10px; }
.tapp-ret-tags { display: flex; gap: 6px; align-items: center; }
.tapp-ret-tag { padding: 4px 10px; border-radius: var(--radius-pill); background: var(--red-50); color: var(--red-700); font-size: 13px; font-weight: 600; }
.tapp-ret-teeth { margin-left: auto; font-size: 13px; color: var(--gray-700); }
.tapp-ret-doc { font-size: 13px; color: var(--gray-600); }
.tapp-ret-text { font-size: 17px; line-height: 1.4; }
.tapp-ret-photos { display: flex; gap: 8px; overflow-x: auto; scroll-snap-type: x mandatory; margin: 0 -14px; padding: 0 14px; }
.tapp-ret-photos > div { flex: none; width: 290px; height: 190px; scroll-snap-align: start; border-radius: 10px; background: repeating-linear-gradient(135deg, var(--gray-100) 0 8px, var(--gray-50) 8px 16px); display: flex; align-items: flex-end; justify-content: space-between; padding: 8px; }
.tapp-ret-photos span { font: 12px var(--mono); background: var(--gray-0); padding: 2px 6px; border-radius: 6px; }
.tapp-ret-due { padding: 12px 14px; border-radius: 12px; background: var(--green-50); display: flex; flex-direction: column; gap: 2px; font-size: 14.5px; }
.tapp-ret-due b { font-weight: 600; }
.tapp-ret-due .tapp-ret-ok { color: var(--green-700); }
.tapp-ret-due.is-late { background: var(--red-50); }
.tapp-ret-due.is-late .tapp-ret-ok { color: var(--red-700); }
.tapp-ret-due-sub { font-size: 13px; color: var(--gray-700); }
.tapp-ret-pay { padding: 14px; border-radius: 12px; background: var(--gray-0); display: flex; flex-direction: column; gap: 8px; }
.tapp-ret-pay .tapp-cap { margin: 0; }
.tapp-ret-mode { font-size: 16px; }
.tapp-ret-mode b { font-weight: 600; }
.tapp-ret-who { font-size: 13.5px; line-height: 1.45; color: var(--gray-700); }
/* R2 · «Оплата доработки»: источник суммы, «Согласен / Не согласен», ответ;
   виновник-не-исполнитель — строка над замечанием. */
.tapp-ret-src { font: 13px/1.45 var(--mono); color: var(--gray-700); }
.tapp-ret-agree { display: flex; gap: 8px; }
.tapp-ret-agree > button { flex: 1; height: 48px; border-radius: 10px; font: inherit; cursor: pointer; }
.tapp-ret-yes { border: 0; background: var(--gray-900); color: var(--gray-0) !important; font-weight: 600 !important; }
.tapp-ret-no { border: 1px solid var(--gray-300); background: var(--gray-0); color: var(--gray-900) !important; font-weight: 500 !important; }
.tapp-ret-done { display: inline-flex; align-self: flex-start; padding: 4px 10px; border-radius: 8px; font-size: 13px; font-weight: 600; line-height: 1.4; }
.tapp-ret-done.is-ok { background: var(--ok-soft); color: var(--ok); }
.tapp-ret-done.is-warn { background: var(--warn-soft); color: var(--warn); }
.tapp-ret-culprit { font-size: 14px; line-height: 1.45; color: var(--gray-700); }
.tapp-ret-acts { margin-top: auto; display: flex; flex-direction: column; gap: 8px; }
.tapp-ret-acts .tapp-main { height: 56px; font-size: 17px; }
.tapp-ret-askbtn { height: 52px; border: 1px solid var(--gray-300); border-radius: 14px; background: var(--gray-0); font-size: 15px; font-weight: 500; }
.tapp-ask strong { font-size: 20px; font-weight: 600; }
.tapp-ask-field { display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: var(--gray-700); }
.tapp-ask-field textarea { padding: 12px; border: 1px solid var(--gray-300); border-radius: 12px; font-size: 15px; line-height: 1.4; color: var(--gray-900); resize: none; }
.tapp-ask-note { font-size: 13px; color: var(--gray-600); }
.tapp-ask .tapp-main { height: 56px; font-size: 17px; }
.tapp-note.is-warn { background: var(--amber-50); color: var(--amber-700); }

/* «Работа приостановлена» (ADR-0049, макет 41): пост участка и приложение техника
   при неоплаченной подписке. Сканы не принимаются; скан — «Скан не принят». */
.post-paused { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 22px; padding: 40px; text-align: center; background: var(--gray-0); }
.post-paused.is-error { background: var(--red-50); }
.post-paused-mark { width: 120px; height: 120px; border-radius: 999px; background: var(--gray-700); color: var(--gray-0); display: grid; place-items: center; font-size: 56px; font-weight: 700; }
.post-paused strong { font-size: 46px; font-weight: 600; line-height: 1.15; }
.post-paused-sub { font-size: 26px; color: var(--gray-700); }
.post-paused-note { padding: 10px 20px; border-radius: 12px; background: var(--gray-100); color: var(--gray-700); font-size: 21px; font-weight: 500; }
.post-paused.is-error .post-paused-note { background: var(--red-700); color: var(--gray-0); }
.tapp-mark.is-paused { border-radius: 999px; background: var(--gray-700); color: var(--gray-0); }
.tapp-paused-note { align-self: flex-start; padding: 8px 12px; border-radius: 10px; background: var(--gray-100); color: var(--gray-700) !important; font-size: 14px !important; font-weight: 500; }

/* Q3.2 (фрагмент 28): утренняя плашка автозакрытия и «параллельно ×3». */
.post-autoclosed-wrap { display: flex; flex-direction: column; gap: 14px; }
.post-autoclosed { display: flex; flex-direction: column; gap: 18px; padding: 24px; border-radius: 16px; background: var(--gray-100); }
.post-autoclosed-tag { display: inline-flex; align-items: center; gap: 10px; font-size: 20px; font-weight: 600; color: var(--gray-700); }
.post-autoclosed-ico { font-size: 22px; }
.post-autoclosed-q { font-size: 30px; font-weight: 600; line-height: 1.3; }
.post-autoclosed-go { height: 96px; border: 0; border-radius: 16px; background: var(--gray-900); color: var(--gray-0); display: flex; align-items: center; justify-content: center; gap: 16px; font-size: 32px; font-weight: 600; cursor: pointer; }
.post-autoclosed-go .post-go-ico { color: var(--lime-400); }
.post-autoclosed-done { height: 80px; border: 2px solid var(--gray-300); border-radius: 14px; background: var(--gray-0); font-size: 24px; font-weight: 500; cursor: pointer; }
.post-autoclosed-hint { font-size: 20px; color: var(--gray-700); }
.post-res-note { font-size: 22px; line-height: 1.4; max-width: 660px; }
.post-tile-nw { display: flex; align-items: center; gap: 12px; width: 100%; }
.post-tile-par { margin-left: auto; padding: 6px 14px; border-radius: var(--radius-pill); background: var(--blue-50); color: var(--blue-700); font-size: 21px; font-weight: 500; white-space: nowrap; }
.post-par-hint { margin-top: 18px; display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-radius: 12px; background: var(--blue-50); color: var(--blue-700); font-size: 21px; font-weight: 500; }
.post-par-x { font-weight: 700; }

/* Q3.2 (фрагмент 29): плашка автозакрытия в приложении над «В работе». */
.tapp .tapp-autoclosed { padding: 14px; border-radius: 12px; background: var(--gray-0); border: 1px solid var(--gray-300); display: flex; flex-direction: column; gap: 10px; }
.tapp .tapp-autoclosed-tag { align-self: flex-start; display: inline-flex; align-items: center; gap: 5px; padding: 2px 8px; border-radius: var(--radius-pill); background: var(--gray-100); color: var(--gray-700); font-size: 12px; font-weight: 600; }
.tapp .tapp-autoclosed-q { font-size: 15px; line-height: 1.45; }
.tapp .tapp-autoclosed-q b { font: 600 15px var(--mono); }
.tapp .tapp-autoclosed-btns { display: flex; gap: 8px; }
.tapp .tapp-autoclosed-btns button { flex: 1; height: 48px; border-radius: 10px; font-size: 15px; cursor: pointer; }
.tapp .tapp-autoclosed-go { border: 0; background: var(--gray-900); color: var(--gray-0); font-weight: 600; }
.tapp .tapp-autoclosed-done { border: 1px solid var(--gray-300); background: var(--gray-0); color: var(--ink); font-weight: 500; }
