/* Полная карточка товара — отдельный верхний слой, экран остатков остаётся на месте. */
.pc-open { display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; margin-left: 7px; padding: 5px; border: 1px solid var(--border); border-radius: 5px;
  background: var(--surface-2); color: var(--text-dim); font: inherit; font-size: 11px; cursor: pointer; white-space: nowrap; }
.pc-open:hover { color: var(--accent); border-color: var(--accent); }
.product-card-dialog { box-sizing: border-box; width: min(960px, calc(100vw - 40px)); max-width: none;
  max-height: calc(100dvh - 48px); padding: 0; border: 1px solid var(--border); border-radius: 16px;
  background: var(--surface); color: var(--text); box-shadow: 0 24px 100px #0008; overflow: hidden; }
.product-card-dialog[open] { display: flex; flex-direction: column; }
.product-card-dialog::backdrop { background: #080c14b8; backdrop-filter: blur(3px); }
.pc-header { display: flex; flex-shrink: 0; align-items: flex-start; justify-content: space-between; gap: 24px; padding: 24px 28px 18px; border-bottom: 1px solid var(--border); }
.pc-header h2 { margin: 8px 0; font-size: 23px; line-height: 1.35; overflow-wrap: anywhere; }
.pc-origin { display: inline-block; padding: 3px 8px; border-radius: 5px; background: var(--accent-dim);
  color: var(--accent); font-size: 11px; font-weight: 600; }
.pc-origin.pc-copy { background: var(--warn-dim); color: var(--warn); }
.pc-subtitle { margin: 0; color: var(--text-dim); font-size: 12px; }
.pc-close { flex: 0 0 44px; width: 44px; height: 44px; border: 1px solid var(--border); border-radius: 8px;
  color: var(--text); background: var(--surface-2); font-size: 25px; cursor: pointer; }
.product-card-dialog button:focus-visible, .product-card-dialog a:focus-visible, .pc-open:focus-visible,
.product-card-dialog summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.pc-body { overflow: auto; overscroll-behavior: contain; padding: 28px; min-height: 0; }
.pc-body [hidden] { display: none; }
.pc-plan { display: grid; grid-template-columns: minmax(120px, 1fr) 2fr; gap: 12px; }
.pc-plan dd { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
.product-card-dialog .pc-required { border-color: #b45309; box-shadow: inset 3px 0 #b45309; }
.pc-unit-change { padding: 14px; border: 2px solid var(--accent); background: var(--accent-dim); }
.pc-lookup-hint { display: block; color: var(--muted); font-size: 12px; }
.pc-candidate { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin: 16px 0; }
.pc-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px 28px; margin: 0; }
.pc-fields .pc-wide { grid-column: 1 / -1; }
.pc-field { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.pc-field > span { color: var(--text-dim); font-size: 14px; line-height: 1.4; }
.product-card-dialog input, .product-card-dialog textarea, .product-card-dialog select {
  box-sizing: border-box; width: 100%; min-width: 0; min-height: 46px; padding: 11px 13px;
  border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text);
  font-family: var(--font-ui); font-size: 16px; line-height: 1.5; }
.product-card-dialog textarea { resize: vertical; min-height: 104px; }
.product-card-dialog input[readonly] { background: var(--surface-2); color: var(--text-dim); }
.product-card-dialog input:focus-visible, .product-card-dialog textarea:focus-visible,
.product-card-dialog select:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.product-card-dialog .pc-changed { border-color: var(--accent); box-shadow: inset 3px 0 var(--accent); }
.pc-section { margin-top: 32px; padding-top: 26px; border-top: 1px solid var(--border); }
.pc-form > .pc-section:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
.pc-body h3 { margin: 0 0 20px; font-size: 19px; font-weight: 600; }
.pc-barcode-row { display: grid; grid-template-columns: minmax(120px, 1fr) minmax(180px, 2fr) auto; gap: 14px; align-items: end; margin-bottom: 16px; }
.pc-pack-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px;
  padding: 20px; margin-bottom: 16px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-2); }
.pc-pack-main { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; align-items: end; }
.pc-pack-row .pc-remove { justify-self: end; grid-column: 1 / -1; }
.pc-pack-row.pc-pack-invalid { border-color: var(--warn); }
.pc-pack-error, .pc-pack-extra { grid-column: 1 / -1; font-size: 13px; }
.pc-pack-error { color: var(--warn); }
.pc-pack-extra { color: var(--text-dim); }
[data-pc-list] { border-left: 3px solid transparent; padding-left: 10px; margin-left: -13px; }
.pc-changed-list { border-left-color: var(--accent); min-height: 16px; }
.pc-add, .pc-remove, .pc-dismiss { min-height: 44px; padding: 10px 16px; border: 1px solid var(--border);
  border-radius: 8px; background: var(--surface-2); color: var(--text); font: inherit; font-size: 15px; cursor: pointer; }
.pc-add:hover:not(:disabled), .pc-dismiss:hover { border-color: var(--accent); }
.pc-remove { color: var(--warn); }
.product-card-dialog button:disabled { cursor: not-allowed; opacity: .55; }
.pc-link-preview { display: inline-block; margin-top: 12px; font-size: 14px; }
.pc-empty, .pc-source, .pc-footer { color: var(--text-dim); font-size: 12px; line-height: 1.6; }
.pc-empty { margin: 8px 0; }
.pc-source { margin: 0 0 20px; }
.pc-barcodes { display: flex; flex-wrap: wrap; gap: 8px 20px; margin: 0; padding: 0; list-style: none; }
.pc-barcodes li { display: flex; align-items: center; gap: 8px; }
.pc-tag { color: var(--text-dim); font-size: 10px; }
.pc-photos { display: flex; flex-flow: row wrap; align-items: flex-start; gap: var(--photo-gap); margin: 8px 0; padding: 0; list-style: none; }
.pc-photos:empty { display: none; }
.pc-photos > li { box-sizing: border-box; flex: 0 0 var(--photo-size); min-width: 0;
  display: flex; flex-direction: column; gap: var(--photo-gap); padding: 0; border: 0;
  border-radius: 8px; overflow-wrap: anywhere; }
.pc-photos .pc-remove { box-sizing: border-box; width: 100%; padding: 10px 8px; }
.pc-photo-count { margin: 0 0 12px; color: var(--text-dim); font-size: 13px; }
.pc-photo-thumb { box-sizing: border-box; display: grid; place-items: center; width: var(--photo-size); height: var(--photo-size); padding: 0;
  border: 1px solid var(--border); border-radius: 5px; overflow: hidden; background: var(--surface-2); cursor: zoom-in; }
.pc-photo-thumb img { width: 100%; height: 100%; object-fit: contain; }
.pc-photo-placeholder { padding: 12px; color: var(--text-dim); font-size: 13px; }
.pc-photo-name { width: 100%; font-size: 13px; overflow-wrap: anywhere; }
.pc-photo-viewer { box-sizing: border-box; width: min(1200px, calc(100vw - 32px)); max-width: none;
  max-height: calc(100dvh - 32px); padding: 18px; border: 1px solid var(--border); border-radius: 10px;
  color: var(--text); background: var(--surface); overflow: auto; }
.pc-photo-viewer[open] { display: flex; flex-direction: column; gap: 12px; }
.pc-photo-viewer::backdrop { background: #080c14e6; }
.pc-photo-viewer .pc-close { align-self: flex-end; }
.pc-photo-viewer img { display: block; min-height: 0; max-height: calc(100dvh - 190px); object-fit: contain; }
.pc-photo-viewer [hidden] { display: none; }
.pc-photo-viewer .pc-photo-name { margin: 0; }
.pc-photos small, .pc-table small { display: block; margin-top: 4px; color: var(--text-dim); font-size: 11px; }
.pc-table-wrap { overflow-x: auto; }
.pc-table { width: 100%; border-collapse: collapse; font-size: 12px; text-align: left; }
.pc-table th { color: var(--text-dim); font-weight: 500; }
.pc-table th, .pc-table td { padding: 12px 10px; border-bottom: 1px solid var(--border); vertical-align: top; }
.pc-negative { color: var(--warn); }
.pc-warning { margin: 0 0 20px; padding: 10px 14px; border-left: 3px solid var(--accent); background: var(--accent-dim); font-size: 12px; }
.pc-error { padding: 20px 0; }
.pc-loading { display: flex; align-items: center; justify-content: center; gap: 12px; min-height: 160px; color: var(--text-dim); }
.pc-spinner { width: 18px; height: 18px; border: 2px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: pc-spin 1s linear infinite; }
.pc-footer { display: flex; flex-shrink: 0; align-items: center; justify-content: space-between; flex-wrap: wrap;
  gap: 14px; padding: 18px 28px; border-top: 1px solid var(--border); background: var(--surface-2); }
.pc-footer-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 12px; margin-left: auto; }
.pc-save { min-height: 44px; padding: 10px 24px; font-size: 16px; }
[data-pc-dirty] { color: var(--accent); font-size: 14px; }
@keyframes pc-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .pc-spinner { animation: none; } }
@media (max-width: 600px) {
  .product-card-dialog { width: calc(100vw - 16px); max-height: calc(100dvh - 16px); border-radius: 10px; }
  .pc-header, .pc-body { padding: 18px; }
  .pc-header h2 { font-size: 18px; }
  .pc-fields, .pc-barcode-row, .pc-pack-row, .pc-pack-main { grid-template-columns: minmax(0, 1fr); }
  .pc-barcode-row .pc-remove { justify-self: end; }
  .pc-footer { padding: 10px 18px; }
}

:root {
  --photo-size: 96px;
  --photo-gap: 8px;
  --bg: #14171C;
  --surface: #1E232B;
  --surface-2: #262C36;
  --border: #333B47;
  --text: #E8EAED;
  --text-dim: #8B93A1;
  --accent: #E8A33D;
  --accent-dim: #4A3A20;
  --ok: #4CAF7D;
  --ok-dim: #1E2E26;
  --ok-text: #4CAF7D;   /* зелёный текст на --ok-dim: контраст 5,2:1 */
  --warn: #D9614F;
  --warn-dim: #332120;
  --radius: 10px;
  --font-ui: 'IBM Plex Sans', system-ui, sans-serif;
  --font-data: 'IBM Plex Mono', ui-monospace, monospace;
}
:root:not([data-theme="light"]) {
  color-scheme: dark;
}
:root[data-theme="light"] {
  --bg: #F3F1EC;
  --surface: #FFFFFF;
  --surface-2: #ECE9E2;
  --border: #DAD5C9;
  --text: #21201C;
  --text-dim: #6B6659;
  --accent: #B4762A;
  --accent-dim: #F1E2C8;
  --ok: #2F7D55;
  --ok-dim: #E1F0E7;
  --ok-text: #23633F;   /* на --ok-dim 6,1:1 (у --ok — 4,3, мало для мелкого текста) */
  --warn: #B4402F;
  --warn-dim: #F5E1DE;
  color-scheme: light;
}
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) {
    --bg: #F3F1EC;
    --surface: #FFFFFF;
    --surface-2: #ECE9E2;
    --border: #DAD5C9;
    --text: #21201C;
    --text-dim: #6B6659;
    --accent: #B4762A;
    --accent-dim: #F1E2C8;
    --ok: #2F7D55;
    --ok-dim: #E1F0E7;
    --ok-text: #23633F;   /* на --ok-dim 6,1:1 (у --ok — 4,3, мало для мелкого текста) */
    --warn: #B4402F;
    --warn-dim: #F5E1DE;
    color-scheme: light;
  }
}

* { box-sizing: border-box; }
html {
  /* прокрутка к элементу (якорь, scrollIntoView) — не под закреплённую панель: 46 px, на телефоне — 88 */
  scroll-padding-top: calc(env(safe-area-inset-top, 0px) + 56px);
}
@media (max-width: 520px) {
  html { scroll-padding-top: calc(env(safe-area-inset-top, 0px) + 98px); }
}
html, body {
  height: 100%;
  margin: 0;
}
body {
  background: var(--bg);
  color: var(--text);
  font-family: var(--font-ui);
  padding-top: env(safe-area-inset-top, 0px);
  padding-bottom: env(safe-area-inset-bottom, 0px);
  -webkit-font-smoothing: antialiased;
}

.app {
  max-width: 1100px;   /* от 1280 px — шире, см. ниже */
  margin: 0 auto;
  min-height: 100%;
  display: flex;
  flex-direction: column;
}

/* ---- Верхняя панель: одна строка 46 px (телефон — две), закреплена при прокрутке ---- */
/* тёмная панель в обеих темах: белый текст, активная вкладка — акцентная плашка (контраст текста ≥ 6:1) */
:root {
  --topbar-h: 46px;
  --topbar-bg: #1F2833;
  --topbar-text: #FFFFFF;
  --topbar-dim: #C9D1DB;      /* вкладки и значки: 9,6:1 на фоне */
  --topbar-faint: #A9B4C2;    /* время данных, «РСУ»: 7:1 */
  --topbar-hover: rgba(255, 255, 255, 0.10);
  --topbar-line: rgba(255, 255, 255, 0.14);
  --topbar-accent: #E8A33D;   /* одна в обеих темах: на ней тёмный текст — 6,9:1 */
}
.icon-sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.icon { width: 16px; height: 16px; flex: 0 0 auto; fill: none; stroke: currentColor; stroke-width: 1.5;
  stroke-linecap: round; stroke-linejoin: round; }
.topbar {
  position: sticky;
  top: 0;
  top: env(safe-area-inset-top, 0px);
  z-index: 10;
  display: flex;
  align-items: stretch;
  gap: 4px;
  min-height: var(--topbar-h);
  padding: 0 12px;
  background: var(--topbar-bg);
  color: var(--topbar-text);
  border-bottom: 1px solid var(--topbar-bg);
  /* фон полосы — на всю ширину окна, содержимое — в колонке приложения */
  box-shadow: 0 0 0 100vmax var(--topbar-bg), 0 1px 3px 100vmax rgba(0, 0, 0, 0.18);
  clip-path: inset(0 -100vmax -4px);
}
.topbar .brand-sub { color: var(--topbar-faint); }
.brand {
  display: flex;
  align-items: baseline;
  gap: 8px;
}
.topbar .brand {
  align-items: center;
  gap: 6px;
  padding: 0 12px 0 4px;
  white-space: nowrap;
}
.brand-mark {
  font-family: var(--font-data);
  font-weight: 600;
  font-size: 14px;
  letter-spacing: 0.04em;
}
.brand-sub {
  color: var(--text-dim);
  font-size: 12px;
}
.top-icon {
  align-self: center;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  padding: 0;
  background: none;
  border: 1px solid transparent;
  border-radius: 8px;
  color: var(--topbar-dim);
  cursor: pointer;
}
.top-icon:hover { color: var(--topbar-text); background: var(--topbar-hover); }
.top-icon[hidden] { display: none; }
.top-icon:focus-visible { outline: 2px solid var(--topbar-accent); outline-offset: 1px; }
/* «Назад» — заметнее остальных значков: обводка, чтобы не потерялась рядом с названием */
.nav-back { border-color: var(--topbar-line); color: var(--topbar-text); }

main {
  flex: 1;
  padding: 12px 20px 16px;
  display: flex;
  flex-direction: column;
  gap: 14px;
}

form.query {
  display: flex;
  gap: 10px;
}
.query input {
  flex: 1;
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-ui);
  font-size: 15px;
  padding: 14px 16px;
  border-radius: var(--radius);
  outline: none;
}
.query input:focus {
  border-color: var(--accent);
}
.query input::placeholder { color: var(--text-dim); }
.query button {
  background: var(--accent);
  color: #14171C;
  border: none;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 14px;
  padding: 0 18px;
  border-radius: var(--radius);
  cursor: pointer;
}
.query button:focus-visible,
.chip:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* .chip — кнопка «другой маршрут вопроса» в ответе («Движения по товару», data-alt) */
.chip {
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--text-dim);
  font-size: 12.5px;
  padding: 6px 11px;
  border-radius: 999px;
  cursor: pointer;
}
.chip:hover { color: var(--text); }

.panel {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
}
.panel-head {
  padding: 14px 16px;
  border-bottom: 1px solid var(--border);
  font-size: 13px;
  color: var(--text-dim);
}
.answer {
  padding: 16px;
  font-size: 15px;
  line-height: 1.5;
}
.answer .clarify {
  color: var(--accent);
}

.item-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 16px;
  border-top: 1px solid var(--border);
}
.item-row:first-child { border-top: none; }
.item-name {
  font-size: 14.5px;
}
.item-meta {
  color: var(--text-dim);
  font-size: 12.5px;
  margin-top: 3px;
}
.item-qty {
  font-family: var(--font-data);
  font-weight: 600;
  font-size: 15px;
  white-space: nowrap;
  padding: 4px 10px;
  border-radius: 6px;
}
.qty-ok { color: var(--ok); background: var(--ok-dim); }
.qty-low { color: var(--warn); background: var(--warn-dim); }

.hist {
  display: none;
  flex-direction: column;
  gap: 2px;
}
.hist.open { display: flex; }
.hist-item {
  padding: 11px 16px;
  border-top: 1px solid var(--border);
  font-size: 13.5px;
  color: var(--text-dim);
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  gap: 10px;
}
.hist-item:first-child { border-top: none; }
.hist-item:hover { color: var(--text); }
.hist-item time {
  font-family: var(--font-data);
  font-size: 11.5px;
  white-space: nowrap;
  opacity: 0.7;
}

.empty {
  padding: 40px 16px;
  text-align: center;
  color: var(--text-dim);
  font-size: 14px;
}
#resultArea .empty { padding: 24px 16px; }   /* «Задайте вопрос выше…» — без лишней высоты */

footer {
  padding: 10px 20px 16px;
  text-align: center;
  color: var(--text-dim);
  font-size: 11.5px;
}

@media (prefers-reduced-motion: no-preference) {
  .panel { animation: rise 0.18s ease-out; }
  @keyframes rise {
    from { opacity: 0; transform: translateY(4px); }
    to { opacity: 1; transform: translateY(0); }
  }
}

.header-right {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-left: auto;
  padding-left: 8px;
}
.data-time {
  color: var(--topbar-faint);
  font-family: var(--font-data);
  font-size: 11px;
  white-space: nowrap;
  margin-right: 6px;
}

.answer p { margin: 0 0 8px; }
.answer-list { margin: 8px 0 8px 20px; padding: 0; }
.answer-list li { margin-bottom: 4px; }

.more-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 12px 16px;
  border-top: 1px solid var(--border);
  color: var(--text-dim);
  font-size: 13px;
}
.link-btn {
  background: none;
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-ui);
  font-size: 13px;
  padding: 6px 12px;
  border-radius: 999px;
  cursor: pointer;
}
.link-btn:hover { border-color: var(--accent); }
.link-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }


/* ---- Таблица результата ---- */
.table-panel { overflow: visible; }
.table-tools {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--border);
}
.table-count {
  color: var(--text-dim);
  font-size: 13px;
}
.table-filter {
  flex: 0 1 280px;
  min-width: 160px;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-ui);
  font-size: 13.5px;
  padding: 8px 12px;
  border-radius: 8px;
  outline: none;
}
.table-filter:focus { border-color: var(--accent); }
.table-scroll {
  overflow-x: auto;
  max-height: 70vh;
  overflow-y: auto;
}
table.data {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
table.data th,
table.data td {
  padding: 8px 12px;
  border-bottom: 1px solid var(--border);
  text-align: left;
  vertical-align: top;
}
table.data th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--surface-2);
  color: var(--text-dim);
  font-weight: 500;
  white-space: nowrap;
  cursor: pointer;
  user-select: none;
}
table.data th:hover { color: var(--text); }
table.data th:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
table.data th[aria-sort="ascending"],
table.data th[aria-sort="descending"] { color: var(--accent); }
table.data td.num,
table.data th.num {
  text-align: right;
  font-family: var(--font-data);
  white-space: nowrap;
}
table.data td.neg { color: var(--warn); }
table.data tbody tr:hover { background: var(--surface-2); }
.table-warning {
  padding: 10px 16px;
  border-top: 1px solid var(--border);
  color: var(--accent);
  font-size: 13px;
}
.more-row .link-btn + .link-btn { margin-left: 6px; }
.totals {
  padding: 12px 16px;
  border-top: 1px solid var(--border);
  font-size: 13px;
}
.totals-head {
  color: var(--text-dim);
  margin-bottom: 6px;
}
.totals ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 6px 18px;
}
.totals li { display: flex; gap: 6px; align-items: baseline; }
.totals b { font-family: var(--font-data); font-weight: 600; }
.totals small { color: var(--text-dim); }
.table-actions {
  display: flex;
  gap: 8px;
  align-items: center;
  flex: 0 1 380px;
}
.table-actions .table-filter { flex: 1; }
.export-btn:disabled { opacity: 0.5; cursor: progress; }
.export-status {
  flex-basis: 100%;
  color: var(--accent);
  font-size: 12.5px;
}
.export-status:empty { display: none; }

/* ---- Вкладки (в верхней панели): значок и подпись; активная — подложка и акцентная линия снизу ---- */
.tabs {
  display: flex;
  align-items: stretch;
  gap: 2px;
  min-width: 0;
}
.tab {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: none;
  border: none;
  color: var(--topbar-dim);
  font-family: var(--font-ui);
  font-size: 13.5px;
  padding: 0 10px;
  cursor: pointer;
  white-space: nowrap;
}
.tab:hover { color: var(--topbar-text); background: var(--topbar-hover); }
.tab[aria-selected="true"] {
  color: var(--topbar-bg);
  font-weight: 600;
  background: var(--topbar-accent);
}
.tab[aria-selected="true"]:hover { color: var(--topbar-bg); background: var(--topbar-accent); }
.tab:focus-visible { outline: 2px solid var(--topbar-text); outline-offset: -3px; }
.tab { flex-shrink: 0; }
/* до 1280 px (приложение не шире 1100): вкладки плотнее, время без «данные на» (полностью — в подсказке) */
@media (max-width: 1279px) {
  .tab { padding: 0 8px; }
  .tabs { gap: 0; }
  .data-time .dt-label { display: none; }
}
/* средняя ширина: подпись только у активной вкладки, у остальных — значок с подсказкой */
@media (max-width: 1040px) {
  .tab:not([aria-selected="true"]) .tab-label { display: none; }
  .tab { padding: 0 10px; }
}
/* телефон: две строки — сверху «Назад», название, время, кнопки; снизу 7 значков на всю ширину */
@media (max-width: 520px) {
  .topbar { flex-wrap: wrap; padding: 0 6px; row-gap: 0; }
  .topbar .brand { min-height: 42px; padding-right: 4px; }
  .topbar .brand-sub { display: none; }
  .tabs { order: 10; flex: 1 0 100%; justify-content: space-between; border-top: 1px solid var(--topbar-line); margin: 0 -6px; }
  .tab { flex: 1 1 0; justify-content: center; min-height: 44px; padding: 0; }
  .tab .tab-label { display: none; }
  .tab .icon { width: 18px; height: 18px; }
  .top-icon { width: 40px; height: 40px; }
}
.tab-panel {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
/* пустые места под ответ (панель ИИ, таблица до загрузки) не добавляют промежутков */
.tab-panel > div:empty { display: none; }
.tab-panel[hidden] { display: none; }

/* ---- Фильтры экрана «Остатки» ---- */
.filters {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 8px 14px;
  padding: 10px 14px;
}
.filter {
  display: flex;
  flex-direction: column;
  gap: 5px;
  font-size: 12.5px;
  color: var(--text-dim);
}
.filter[hidden] { display: none; }
.filter select {
  min-width: 180px;
  max-width: 100%;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-ui);
  font-size: 14px;
  padding: 8px 10px;
  border-radius: 8px;
}
.filter select:focus-visible,
.filter input:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
#stockWh { min-width: 260px; }
.filter.check {
  flex-direction: row;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  color: var(--text);
  padding-bottom: 8px;
  cursor: pointer;
}
.filter.check input { width: 16px; height: 16px; accent-color: var(--accent); }
/* «Остатки», «С ИИ»: поле запроса и кнопка «Найти» в одну строку */
.stock-ai-field { flex: 1 1 360px; max-width: 640px; }
.stock-ai-row { display: flex; gap: 8px; }
.stock-ai-row textarea {
  flex: 1 1 auto; min-width: 0; background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 14px; line-height: 20px; padding: 8px 10px; border-radius: 8px;
  resize: none; min-height: 38px; max-height: 140px; overflow-y: auto; box-sizing: border-box;
}
.stock-ai-row .primary-btn { align-self: flex-start; min-height: 38px; }
.stock-search-options { margin-top: 6px; font-size: 13px; }
.stock-search-options > summary { cursor: pointer; color: var(--text-dim); }
.stock-search-options .filter.check { margin-top: 8px; }
.stock-name2-badge { font-size: 11px; font-weight: 500; color: var(--text-dim); }
.stock-name-fallback, .stock-name-fallback .card-link { color: var(--text-dim); }
.stock-ai-field { flex-basis: 520px; max-width: 820px; }
/* поиск по позициям: сводка и группы (позиция → таблица остатков) */
.stock-pos-summary { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; padding: 10px 16px; font-size: 13.5px; }
.stock-pos-summary b { font-weight: 600; }
.stock-pos-summary .stock-pos-tools { margin-left: auto; display: flex; flex-wrap: wrap; gap: 6px; }
.stock-pos { padding: 0; overflow: visible; }
.stock-pos > summary {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding: 10px 16px; cursor: pointer;
  list-style: none; font-size: 14px;
}
.stock-pos > summary::-webkit-details-marker { display: none; }
.stock-pos > summary::before { content: "▸"; color: var(--text-dim); width: 10px; }
.stock-pos[open] > summary::before { content: "▾"; }
.stock-pos-title { font-weight: 600; overflow-wrap: anywhere; }
.stock-pos-meta { color: var(--text-dim); font-size: 13px; }
.stock-pos-variants { color: var(--text-dim); font-size: 12.5px; flex-basis: 100%; padding-left: 22px; }
.stock-pos-body { border-top: 1px solid var(--border); }
.stock-pos-body .table-panel { border: none; border-radius: 0 0 var(--radius) var(--radius); box-shadow: none; animation: none; }
.table-panel.compact .table-tools { display: none; }
.table-panel.compact .table-scroll { max-height: none; overflow-y: visible; }   /* группы — общей прокруткой страницы */
.stock-pos-absent { padding: 10px 16px 12px; font-size: 13.5px; }
.stock-pos-absent .warn-text { color: var(--warn); font-weight: 600; }
.stock-pos-absent ul { margin: 6px 0 0; padding-left: 18px; }
.stock-pos-absent li { margin: 3px 0; }
/* группы наличия в панели ИИ */
.stock-ai-group { padding: 10px 16px 2px; font-size: 13px; font-weight: 600; color: var(--text-dim);
  border-top: 1px solid var(--border); }
.stock-ai-group:first-child { border-top: none; }
.stock-ai-list { list-style: none; margin: 0; padding: 4px 0; }
.stock-ai-list li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; padding: 6px 16px; font-size: 14px; }
.stock-ai-list li:hover { background: var(--surface-2); }
.stock-ai-list label { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; }
.stock-ai-list input { accent-color: var(--accent); width: 16px; height: 16px; }
.stock-ai-where { flex-basis: 100%; padding-left: 24px; font-size: 13px; }
.stock-ai-where.none { color: var(--warn); }
.stock-ai-note { padding: 10px 16px; font-size: 13px; }
/* подбор аналогов: блок под товаром / запросом / позицией */
.analog-slot { flex-basis: 100%; }
.analog-slot:empty { display: none; }
.analog-btn { margin-left: 24px; font-size: 12.5px; padding: 4px 10px; }
.analog-btn:disabled { opacity: 0.5; cursor: progress; }
.stock-ai-query-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 10px 16px;
  border-top: 1px solid var(--border); font-size: 13.5px; }
.stock-ai-query-row .analog-btn { margin-left: 0; }
.stock-pos > summary .analog-btn { margin-left: 4px; }
.stock-pos-body > .analog-slot { padding: 0 16px; }
.stock-pos-body > .analog-slot > .analog-box { margin: 10px 0; }
/* «Аналоги» в строке таблицы: блок — строкой под ней */
tr.analog-row > td { background: var(--surface); padding: 4px 12px 10px; }
tr.analog-row .analog-box { margin: 4px 0; }
td.row-action .link-btn { font-size: 12px; padding: 3px 9px; white-space: nowrap; }
.analog-here { margin: 2px 14px 6px; font-size: 13px; }
.analog-basis { color: var(--accent); border-color: var(--accent); }
.analog-batch[hidden] { display: none; }
.j-ai-analogs[hidden] { display: none; }
.analog-box { margin: 8px 0 4px 24px; border: 1px solid var(--border); border-left: 3px solid var(--accent);
  border-radius: 8px; background: var(--bg); }
.analog-box .empty { padding: 14px 16px; }
/* подбор не удался: причина и «Повторить» */
.analog-box.analog-error { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; padding: 12px 16px;
  border-left-color: var(--warn); }
.analog-error-text { color: var(--warn); font-size: 13px; }
.analog-head { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 10px 14px 6px;
  font-weight: 600; font-size: 13.5px; }
/* Пометки ИИ в шапках («ИИ недоступен — это лучшие совпадения поиска, проверьте сами» и т. п.): на телефоне
   длиннее экрана — переносятся внутри плашки, а не растягивают страницу; короткие остаются в одну строку */
.analog-head .badge, .j-ai-box > .answer .badge, .j-ai-box > .panel-head .badge { white-space: normal; max-width: 100%; }
.analog-same { margin: 4px 14px 8px; padding: 8px 12px; border-radius: 6px; background: var(--ok-dim); font-size: 13px; }
.analog-same ul { margin: 4px 0 0; padding-left: 18px; }
.analog-empty { padding: 4px 14px 10px; font-size: 13px; color: var(--text-dim); }
.analog-box .stock-ai-list li { padding: 5px 14px; }
.analog-box .j-ai-foot { padding: 8px 14px; }
.analog-table:empty { display: none; }
.analog-table { border-top: 1px solid var(--border); }
.analog-table .table-panel { border: none; box-shadow: none; animation: none; border-radius: 0 0 8px 8px; }
@media (max-width: 520px) {
  .analog-box { margin-left: 0; }
  .analog-btn { margin-left: 0; }
}

@media (max-width: 520px) {
  .filter, .filter select, #stockWh { width: 100%; min-width: 0; }
  .stock-ai-field { flex-basis: 100%; }
  .stock-ai-list li { padding: 10px 12px; }
}

/* ---- Вкладка «Потребность» ---- */
.need-form { padding: 14px 16px; display: flex; flex-direction: column; gap: 12px; overflow: visible; position: relative; z-index: 5; }
.need-text { display: flex; flex-direction: column; gap: 6px; font-size: 12.5px; color: var(--text-dim); }
.need-text textarea {
  width: 100%;
  min-height: 150px;
  resize: vertical;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-data);
  font-size: 13px;
  line-height: 1.5;
  padding: 10px 12px;
  border-radius: 8px;
  outline: none;
}
.need-text textarea:focus { border-color: var(--accent); }
.need-controls { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px 16px; }
.primary-btn {
  background: var(--accent);
  color: #14171C;
  border: none;
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 14px;
  padding: 9px 18px;
  border-radius: 8px;
  cursor: pointer;
}
.primary-btn:disabled { opacity: 0.5; cursor: progress; }
.primary-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.need-status { color: var(--accent); font-size: 13px; padding-bottom: 9px; }
.need-memory-link { margin-left: auto; text-decoration: none; }
/* экран «Запомненные соответствия» (#matches) — вместо формы и результатов «Потребности» */
.need-form[hidden], #needArea[hidden], #matchesArea[hidden] { display: none; }
/* кнопка действия в строке таблицы (mountTable, options.action): «Удалить» у запомненного соответствия */
table.data td.row-action { white-space: nowrap; }
.row-action .link-btn { padding: 3px 10px; font-size: 12px; }
.row-action .link-btn:hover { border-color: var(--warn); color: var(--warn); }
.row-action .link-btn:disabled { opacity: 0.5; cursor: progress; }
.need-note { padding: 10px 16px; border-bottom: 1px solid var(--border); font-size: 13px; color: var(--text-dim); }
.need-note .link-btn { margin-left: 8px; }
.need-note.warn { color: var(--accent); }
.search-scope.fallback-note, .need-note.fallback-note { color: var(--warn); }  /* ответ через резервную модель — заметно, но не ошибка */
.need-actions { display: flex; justify-content: space-between; gap: 10px; padding: 12px 16px; flex-wrap: wrap; }
table.need-edit input[type="text"] {
  width: 100%;
  min-width: 70px;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-ui);
  font-size: 13px;
  padding: 6px 8px;
  border-radius: 6px;
}
table.need-edit input[type="text"]:focus { outline: none; border-color: var(--accent); }
table.need-edit td:nth-child(4) input { min-width: 200px; }
table.need-edit input.qty { width: 80px; min-width: 60px; text-align: right; font-family: var(--font-data); }
table.need-edit input.unit { width: 64px; min-width: 50px; }
table.need-edit input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--accent); }
table.need-edit th { cursor: default; }
table.need-edit tr.off td { opacity: 0.45; }
.need-raw { color: var(--text-dim); min-width: 180px; }
.icon-btn {
  background: none;
  border: 1px solid transparent;
  color: var(--text-dim);
  font-size: 18px;
  line-height: 1;
  padding: 4px 8px;
  border-radius: 6px;
  cursor: pointer;
}
.icon-btn:hover { color: var(--warn); border-color: var(--border); }
.icon-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }

.need-summary { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.need-legend { padding: 10px 16px; font-size: 12.5px; color: var(--text-dim); }
.need-line-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 12px;
  padding: 12px 16px;
  border-bottom: 1px solid var(--border);
  font-size: 14.5px;
}
.need-line-status { text-align: right; flex-shrink: 0; max-width: 45%; }
.dim { color: var(--text-dim); }
.need-cand {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 12px 16px;
  border-top: 1px solid var(--border);
}
.need-line-head + .need-cand, .need-note + .need-cand { border-top: none; }
.need-cand.accepted { background: var(--ok-dim); }
.need-cand-main { min-width: 0; }
.need-cand-side { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; flex-shrink: 0; }
.need-why { font-size: 13px; margin-top: 4px; }
.badge, .status {
  display: inline-block;
  font-size: 11.5px;
  font-weight: 500;
  padding: 2px 8px;
  border-radius: 999px;
  border: 1px solid var(--border);
  color: var(--text-dim);
  white-space: nowrap;
}
.status.ok { color: var(--ok); border-color: var(--ok); background: var(--ok-dim); }
.status.units, .status.noqty { color: var(--accent); border-color: var(--accent); background: var(--accent-dim); }
.badge.unverified { color: var(--accent); border-style: dashed; }
.status.short, .status.none, .status.absent, .status.failed { color: var(--warn); border-color: var(--warn); background: var(--warn-dim); }
/* пометка ИИ и нерешённая строка — нейтрально, без «вроде подходит» */
.badge.ai, .status.pending { color: var(--text-dim); border-color: var(--border); background: none; }
/* «точно» в «Потребности» — зелёным; «аналог», «найдено поиском» и прочие — нейтрально, как были */
.badge.ai.exact { color: var(--ok-text); border-color: var(--ok); background: var(--ok-dim); }
.status.pending { border-style: dashed; }

@media (max-width: 520px) {
  .need-line-head, .need-cand { flex-direction: column; }
  .need-line-status { text-align: left; max-width: none; }
  .need-cand-side { flex-direction: row; align-items: center; justify-content: space-between; }
}

/* ---- Выбор складов (вкладка «Потребность») ---- */
.wh-picker { position: relative; }
.wh-picker details { position: relative; }
.wh-picker summary {
  list-style: none;
  min-width: 260px;
  max-width: 420px;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-size: 14px;
  padding: 8px 30px 8px 10px;
  border-radius: 8px;
  cursor: pointer;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  position: relative;
}
.wh-picker summary::-webkit-details-marker { display: none; }
.wh-picker summary::after { content: "▾"; position: absolute; right: 10px; color: var(--text-dim); }
.wh-picker details[open] summary { border-color: var(--accent); }
.wh-picker summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.wh-panel {
  position: absolute;
  z-index: 20;
  top: calc(100% + 4px);
  left: 0;
  width: 360px;
  max-width: calc(100vw - 32px);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 8px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.wh-panel input[type="search"] {
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-ui);
  font-size: 13.5px;
  padding: 7px 10px;
  border-radius: 6px;
  outline: none;
}
.wh-panel input[type="search"]:focus { border-color: var(--accent); }
.wh-actions { display: flex; gap: 6px; }
.wh-list { max-height: 300px; overflow-y: auto; display: flex; flex-direction: column; }
.wh-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 4px;
  font-size: 13.5px;
  color: var(--text);
  cursor: pointer;
  border-radius: 6px;
}
.wh-item[hidden] { display: none; }
.wh-item:hover { background: var(--surface-2); }
.wh-item input { width: 16px; height: 16px; accent-color: var(--accent); flex-shrink: 0; }
.wh-item span { flex: 1; }
.wh-item small { color: var(--text-dim); font-family: var(--font-data); }
.need-elsewhere { padding: 10px 16px; border-bottom: 1px solid var(--border); }
.need-elsewhere ul { margin: 6px 0 0; padding-left: 18px; font-size: 13.5px; }
.need-elsewhere li { margin-bottom: 4px; }

@media (max-width: 520px) {
  .wh-picker, .wh-picker details, .wh-picker summary { width: 100%; min-width: 0; max-width: none; }
  .wh-panel { width: 100%; max-width: none; }
}

/* ---- Решения по строкам «Потребности» ---- */
.qty-neutral { color: var(--text); background: var(--surface-2); }
.need-line.decided { border-left: 4px solid var(--ok); }
.need-line.decided .need-line-head { background: var(--ok-dim); }
.need-line.decided-absent { border-left-color: var(--warn); }
.need-line.decided-absent .need-line-head { background: var(--warn-dim); }
.need-line-status .absent-btn { margin-top: 8px; }
.need-line-status .absent-btn[aria-pressed="true"] { border-color: var(--warn); color: var(--warn); }
.need-bulk { display: flex; flex-wrap: wrap; gap: 8px; padding: 10px 16px; border-bottom: 1px solid var(--border); }
.need-bulk [aria-pressed="true"] { border-color: var(--accent); color: var(--accent); }
.need-breakdown { list-style: none; margin: 6px 0 0; padding: 0; font-size: 12.5px; display: flex; flex-wrap: wrap; gap: 2px 14px; }
.need-breakdown b { font-family: var(--font-data); font-weight: 600; }

/* ---- «Потребность»: акценты и склады кандидата ---- */
.need-line-title { min-width: 0; }
.need-num { color: var(--text-dim); font-family: var(--font-data); font-size: 14px; margin-right: 4px; }
.need-name { font-size: 16px; font-weight: 600; color: var(--text); }
.need-qty { margin-top: 4px; font-size: 13px; color: var(--text-dim); }
.need-qty b { font-family: var(--font-data); font-size: 15px; font-weight: 600; color: var(--text); }
/* решённые — тише, чтобы взгляд уходил на нерешённые (цвет не тусклее вторичного текста — читаемо в обеих темах) */
.need-line.decided .need-name { font-weight: 500; color: var(--text-dim); }
.need-line.decided .need-qty b { color: var(--text-dim); }
.need-line-actions { display: flex; gap: 6px; justify-content: flex-end; flex-wrap: wrap; margin-top: 8px; }
.need-line-status .absent-btn { margin-top: 0; color: var(--text-dim); }
.need-line-status .absent-btn:hover { border-color: var(--warn); color: var(--warn); }
.need-line-status .absent-btn[aria-pressed="true"] { border-color: var(--border); color: var(--text-dim); }
.delete-btn {
  background: none;
  border: none;
  color: var(--text-dim);
  font-family: var(--font-ui);
  font-size: 12.5px;
  padding: 6px 4px;
  cursor: pointer;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.delete-btn:hover { color: var(--warn); }
.delete-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.accept-btn {
  background: var(--ok);
  color: var(--bg);
  border: 1px solid var(--ok);
  font-family: var(--font-ui);
  font-weight: 600;
  font-size: 13px;
  padding: 6px 14px;
  border-radius: 999px;
  cursor: pointer;
}
.accept-btn:disabled { opacity: 0.4; cursor: not-allowed; }
.accept-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

.need-cand { flex-direction: column; gap: 6px; }
.need-cand-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; }
.need-cand-head .item-meta { margin-top: 0; }
.need-cand-head .reject-btn { margin-left: auto; padding: 2px 10px; font-size: 12px; color: var(--text-dim); }
.need-cand-head .reject-btn:hover { border-color: var(--warn); color: var(--warn); }
/* склады кандидата — друг под другом, одинаковые колонки: цифры встают в столбик */
.wh-rows { display: flex; flex-direction: column; margin-top: 4px; border-top: 1px dashed var(--border); }
.wh-row {
  display: grid;
  grid-template-columns: minmax(150px, 1.3fr) 90px minmax(120px, 1.2fr) auto;
  align-items: center;
  gap: 4px 14px;
  padding: 6px 0;
  border-bottom: 1px dashed var(--border);
  font-size: 13px;
}
.wh-qty { font-family: var(--font-data); font-variant-numeric: tabular-nums; font-weight: 600; text-align: right; }
.wh-row.empty .wh-name, .wh-row.empty .wh-qty { color: var(--text-dim); font-weight: 400; }
.wh-cell { color: var(--text-dim); font-size: 12.5px; }
.wh-action { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; }
.wh-take { display: flex; align-items: center; gap: 6px; color: var(--text-dim); font-size: 12.5px; }
.wh-take input {
  width: 72px;
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-data);
  font-size: 13px;
  text-align: right;
  padding: 5px 8px;
  border-radius: 6px;
}
.wh-take input:focus { outline: none; border-color: var(--accent); }
.wh-over { display: none; color: var(--accent); font-size: 12px; flex-basis: 100%; text-align: right; }
.wh-row.over .wh-over { display: block; }
.wh-row.over .wh-take input { border-color: var(--accent); }
.wh-row.taken { background: var(--ok-dim); }
.wh-taken { font-size: 13px; }
.wh-taken b { font-family: var(--font-data); }
.need-cand.accepted { background: none; }
.need-views { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.need-views [aria-pressed="true"], .need-bulk [aria-pressed="true"] { border-color: var(--accent); color: var(--accent); }
.need-deleted { display: inline-flex; align-items: center; gap: 8px; color: var(--text-dim); font-size: 13px; }
.need-done { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; padding: 4px 0 8px; font-size: 13px; }

@media (max-width: 620px) {
  .wh-row { grid-template-columns: 1fr auto; }
  .wh-cell { grid-column: 1 / -1; }
  .wh-action { grid-column: 1 / -1; justify-content: flex-start; }
  .wh-over { text-align: left; }
}

/* «Искал: …» над ответом на вопрос */
.search-scope { padding: 10px 16px 0; font-size: 13px; color: var(--text-dim); }
.search-alt { padding: 10px 16px 0; }

/* ---- Вкладка «Товар»: поиск, карточка товара и документа ---- */
.card-link { color: inherit; text-decoration: underline; text-decoration-color: var(--accent); text-underline-offset: 3px; }
.card-link:hover { color: var(--accent); }
.card-link:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 3px; }
.card-head { padding: 16px; display: flex; flex-direction: column; gap: 12px; }
.card-head h2 { margin: 0; font-size: 18px; font-weight: 600; line-height: 1.35; overflow-wrap: anywhere; }
.card-meta { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 8px 16px; font-size: 14px; }
.card-meta > div { overflow-wrap: anywhere; }
.card-label { display: block; font-size: 12px; color: var(--text-dim); margin-bottom: 2px; }
.ms-link { align-self: flex-start; text-decoration: none; }
.card-lasts { display: flex; flex-direction: column; }
.card-last { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding: 10px 16px;
  border-top: 1px solid var(--border); font-size: 14px; }
.card-last:first-child { border-top: none; }
.card-last .card-label { width: 100%; margin: 0; }
.card-last b { font-family: var(--font-data); }
.card-neg { padding: 10px 16px; font-size: 13px; color: var(--warn); border-top: 1px solid var(--border); }
#cardArea, #movesArea { display: flex; flex-direction: column; gap: 14px; }
.filters[hidden] { display: none; }
.card-hint { font-size: 12.5px; padding: 0 4px; }
.card-found .badge { margin-left: 6px; vertical-align: 1px; }
.badge.warn { color: var(--warn); border-color: var(--warn); background: var(--warn-dim); }
table.data tfoot td { font-weight: 600; border-top: 1px solid var(--border); }
.filter input[type="date"] {
  background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 14px; padding: 7px 10px; border-radius: 8px;
}
.period-btns { display: flex; flex-wrap: wrap; gap: 6px; padding-bottom: 4px; }
@media (max-width: 520px) {
  .filter input[type="date"] { width: 100%; }
  .card-meta { grid-template-columns: 1fr 1fr; }
}
.panel.similar .panel-head { color: var(--warn); }
.card-tools { display: flex; flex-wrap: wrap; gap: 8px; margin-top: -8px; }
.card-tools .link-btn { text-decoration: none; }

/* «Назад» — стрелка в верхней панели (history.back); на первом экране скрыта */
.nav-back { margin-left: -4px; }

/* «Сбросить» / «Сбросить фильтры» — видны, только когда есть что сбрасывать */
.reset-btn[hidden] { display: none; }
.filters > .reset-btn { margin-bottom: 4px; }
.filters.inline { padding: 10px 0 0; }

/* Копирование кода/артикула/штрихкода: значение выделяется целиком одним щелчком, рядом иконка */
.copy { white-space: nowrap; }
.copy-val { user-select: all; -webkit-user-select: all; }
/* Название товара + иконка: последнее слово и иконка — одной строкой (Chrome переносит перед кнопкой
   по стилю конца ссылки, поэтому nowrap и у ссылки), всё до последнего слова (.name-head) переносится
   как обычно; лишних символов в тексте нет */
.name-copy, .name-copy > :first-child { white-space: nowrap; }
.name-head { white-space: normal; }
.copy-btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  margin-left: 2px;
  padding: 0;
  vertical-align: -4px;
  background: none;
  border: 1px solid transparent;
  border-radius: 4px;
  color: var(--text-dim);
  cursor: pointer;
}
.copy-btn:hover { color: var(--accent); border-color: var(--border); }
.copy-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.copy-btn svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.copy-btn .copy-done { display: none; }
.copy-btn.copied { color: var(--ok); }
.copy-btn.copied .copy-icon { display: none; }
.copy-btn.copied .copy-done { display: block; stroke-width: 2; }
.copy-btn.copy-failed { color: var(--warn); }
.copy-btn[data-tip]::after {
  content: attr(data-tip);
  position: absolute;
  bottom: calc(100% + 4px);
  left: 50%;
  transform: translateX(-50%);
  padding: 2px 6px;
  font: 12px/1.4 var(--font-ui);
  white-space: nowrap;
  color: var(--text);
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: 4px;
  pointer-events: none;
  z-index: 5;
}

/* Вход: поверх страницы, пока нет сессии */
.login {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  background: var(--bg);
}
.login[hidden] { display: none; }
.login-box {
  display: flex;
  flex-direction: column;
  gap: 14px;
  width: 100%;
  max-width: 340px;
  padding: 24px;
}
.login-box .filter input {
  width: 100%;
  background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 16px; padding: 9px 10px; border-radius: 8px;
}
.login-error { min-height: 1.2em; color: var(--warn); font-size: 14px; }
.login-error:empty { display: none; }
.login-hint { font-size: 13px; }

/* Ссылки на товар (карточка товара, product_links.py) */
.prod-links { list-style: none; margin: 0; padding: 0; }
.prod-link { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px 16px;
  padding: 12px 16px; border-top: 1px solid var(--border); }
.prod-link:first-child { border-top: none; }
.prod-link-main { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.prod-link-domain { font-size: 16px; font-weight: 600; overflow-wrap: anywhere; }
.prod-link-title { font-size: 14px; overflow-wrap: anywhere; }
.prod-link-note { font-size: 13.5px; white-space: pre-line; overflow-wrap: anywhere; }
.prod-link-url { font-family: var(--font-data); font-size: 12px; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; max-width: 60ch; }
.prod-link-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.prod-link-actions a.link-btn { text-decoration: none; }
.prod-link-actions .link-delete:hover { border-color: var(--warn); color: var(--warn); }
.prod-link-actions .link-delete:disabled { opacity: 0.5; cursor: progress; }
.prod-links-empty { padding: 14px 16px; font-size: 14px; }
.link-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 12px; padding: 14px 16px;
  border-top: 1px solid var(--border); }
.link-form[hidden] { display: none; }
.link-form input {
  background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 14px; padding: 8px 10px; border-radius: 8px; min-width: 180px;
}
.link-form .link-url { flex: 1 1 280px; }
.link-form .link-url input { width: 100%; box-sizing: border-box; }
.link-form button { margin-bottom: 2px; }
.link-status { padding: 0 16px; font-size: 13px; color: var(--warn); }
.link-status:not(:empty) { padding-bottom: 12px; }
@media (max-width: 520px) {
  .prod-link { flex-direction: column; }
  .prod-link-url { max-width: 100%; }
  .link-form .filter, .link-form input { width: 100%; min-width: 0; box-sizing: border-box; }
}
.prod-link-actions .copy-btn { width: 30px; height: 30px; margin: 0; vertical-align: 0; }

/* Карточка товара: «Под какой объект привозили» (резервы, задача 21) — свёрнуто, грузится при раскрытии */
.reserves-panel > summary { cursor: pointer; list-style: revert; }
.reserves-panel .reserve-count { color: var(--accent); font-weight: 700; margin-left: 6px; }
.reserves-panel .empty, .reserve-none { padding: 14px 16px; }
.reserve-storage { padding: 12px 16px; display: flex; flex-direction: column; gap: 4px; font-size: 14px; }
.reserve-table td { vertical-align: top; }
.reserve-table tr.reserve-closed td { color: var(--muted, inherit); opacity: .75; }
.reserve-short { color: var(--warn); font-weight: 600; }
.reserve-active { background: var(--ok-dim); color: var(--ok-text); }
.reserve-actions { display: flex; flex-direction: column; gap: 4px; align-items: flex-start; }
.reserve-actions .link-btn { white-space: nowrap; }
.reserve-cancel { color: var(--warn); }
.reserve-history { margin: 4px 0; padding-left: 18px; font-size: 14px; display: flex; flex-direction: column; gap: 3px; }
.reserve-history .reserve-derived { color: var(--muted, inherit); }
.reserve-hdate { font-family: var(--font-mono, monospace); font-size: 13px; margin-right: 6px; }
.reserve-form, .reserve-act-form { padding: 12px 16px; border-top: 1px solid var(--border); }
.reserve-act-form { border-top: 0; padding: 6px 0; }
.reserve-form-head { padding: 0 0 8px; border: 0; background: none; }
.reserve-form .filters, .reserve-act-form .filters { padding: 0; align-items: flex-end; gap: 10px 12px; }
.reserve-form input, .reserve-form select, .reserve-act-form input {
  background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 14px; padding: 8px 10px; border-radius: 8px; box-sizing: border-box;
}
.reserve-object { min-width: 260px; }
.reserve-qty { width: 110px; text-align: right; }
.reserve-comment { flex: 1 1 220px; }
.reserve-comment input { width: 100%; }
/* «Остатки» с «Показать резервы»: число резерва — кнопка, разбивка — строкой под товаром */
.reserve-num { font: inherit; font-weight: 700; color: var(--accent); text-decoration: underline dotted; text-underline-offset: 3px; }
.reserve-num[aria-expanded="true"] { text-decoration-style: solid; }
tr.reserve-row > td { background: var(--surface); padding: 6px 12px 10px; }
.reserve-break { border-left: 3px solid var(--accent); padding: 4px 0 4px 12px; max-width: 980px; }
.reserve-break-head { font-size: 14px; margin-bottom: 6px; }
.reserve-break .reserve-table { width: auto; min-width: 560px; }
.reserve-break-foot { margin-top: 6px; font-size: 14px; }
.link-status.ok { color: var(--ok-text); }

/* Шапка карточки: «Открыть в МойСклад», «Посмотреть в интернете» и меню «Искать: …» */
.card-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; }
.card-actions .ms-link { align-self: auto; }
.web-search { text-decoration: none; }
.web-search.disabled { opacity: 0.45; cursor: not-allowed; }
.web-search.disabled:hover { border-color: var(--border); }
.web-search-pick { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-dim); }
.web-search-pick select {
  background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 13px; padding: 5px 8px; border-radius: 8px; max-width: 100%;
}
.web-search-pick select:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
@media (max-width: 520px) {
  .card-actions { flex-direction: column; align-items: stretch; }
  .card-actions .link-btn { text-align: center; }
  .web-search-pick { width: 100%; }
  .web-search-pick select { flex: 1; min-width: 0; }
}

/* Вкладка «Товар»: отбор по архиву рядом с полем поиска */
.query .archive-select {
  background: var(--surface); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 14px; padding: 0 12px; border-radius: var(--radius); cursor: pointer;
}
.query .archive-select:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.archive-hint .link-btn { margin-left: 4px; }
@media (max-width: 520px) {
  #cardForm { flex-wrap: wrap; }
  #cardForm input { flex: 1 1 100%; }
  #cardForm .archive-select { flex: 1; padding: 10px 12px; }
  #cardForm button { padding: 10px 18px; }
}

/* Выпадающий список с поиском по словам (mountPicker в app.js) */
.picker { position: relative; display: inline-block; min-width: 200px; max-width: 100%; }
.picker-box { display: flex; align-items: stretch; }
.picker-btn {
  flex: 1; min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: 8px;
  background: var(--bg); border: 1px solid var(--border); color: var(--text); text-align: left;
  font-family: var(--font-ui); font-size: 14px; padding: 8px 10px; border-radius: 8px; cursor: pointer;
}
.picker-chosen .picker-btn { border-color: var(--accent); border-top-right-radius: 0; border-bottom-right-radius: 0; }
.picker-value { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.picker-caret { color: var(--text-dim); font-size: 11px; }
.picker-clear {
  background: var(--bg); border: 1px solid var(--accent); border-left: none; color: var(--text-dim);
  font-size: 16px; line-height: 1; padding: 0 10px; border-radius: 0 8px 8px 0; cursor: pointer;
}
.picker-clear:hover { color: var(--warn); }
.picker-btn:focus-visible, .picker-clear:focus-visible, .picker-search:focus-visible {
  outline: 2px solid var(--accent); outline-offset: 2px;
}
/* панель — в конце body, position: fixed (место считает pickerPlacement): поверх всего, не обрезается */
.picker-panel {
  position: fixed; z-index: 1000; display: flex; flex-direction: column;
  background: var(--surface); border: 1px solid var(--border); border-radius: 8px;
  box-shadow: 0 10px 28px rgba(0, 0, 0, 0.28); padding: 6px; overflow: hidden;
}
.picker-panel[hidden] { display: none; }
.picker-panel .picker-list { flex: 1 1 auto; min-height: 0; max-height: none; }
.picker-search {
  width: 100%; box-sizing: border-box; background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 14px; padding: 8px 10px; border-radius: 6px; margin-bottom: 4px;
}
.picker-search[hidden] { display: none; }
.picker-status { font-size: 12px; color: var(--text-dim); padding: 0 4px; }
.picker-status:not(:empty) { padding: 2px 4px 6px; }
.picker-list { list-style: none; margin: 0; padding: 0; max-height: 360px; overflow-y: auto; }
.picker-item { padding: 7px 10px; border-radius: 6px; cursor: pointer; font-size: 14px; overflow-wrap: anywhere; }
.picker-item.active { background: var(--surface-2); }
.picker-item[aria-selected="true"] { color: var(--accent); font-weight: 600; }
.picker-empty { color: var(--text-dim); }
.picker-hint { color: var(--text-dim); font-size: 12px; font-weight: 400; margin-left: 4px; }
/* выбор нескольких: флажок у каждой строки (кроме «Все») */
.picker-multiple .picker-item:not(.picker-empty) { display: flex; gap: 8px; align-items: baseline; }
.picker-multiple .picker-item:not(.picker-empty)::before {
  content: ""; flex: 0 0 auto; width: 14px; height: 14px; border: 1.5px solid var(--text-dim); border-radius: 3px;
  align-self: center; box-sizing: border-box;
}
.picker-multiple .picker-item[aria-selected="true"]:not(.picker-empty)::before {
  background: var(--accent); border-color: var(--accent);
  box-shadow: inset 0 0 0 2px var(--surface, #fff);
}
@media (max-width: 520px) {
  .picker { display: block; width: 100%; }
  /* на телефоне — в потоке страницы, не поверх: клавиатура не закрывает список */
  .picker-panel.inflow { position: static; width: auto; max-width: none; margin-top: 4px; box-shadow: none; }
  .picker-panel.inflow .picker-list { max-height: 45vh; }
  .picker-item { padding: 12px 10px; font-size: 15px; }
  .picker-list { max-height: 45vh; }
  .picker-btn { padding: 11px 12px; font-size: 15px; }
  .picker-search { padding: 11px 12px; font-size: 16px; }   /* 16px — iOS не увеличивает страницу */
}

/* ---- Вкладки «Перемещения», «Отгрузки», «Приёмки» ---- */
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.journal { display: flex; flex-direction: column; gap: 12px; }
.journal > div:empty { display: none; }
/* фильтры журналов — сетка: поля тянутся по ширине, на компьютере — в 1–2 строки; панель не обрезает списки */
.panel.j-filters {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 8px 14px;
  align-items: end; overflow: visible;
}
.j-filters .filter { min-width: 0; }
.j-filters .filter > span { line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.j-filters .filter input, .j-filters .filter select, .j-filters .picker, .j-filters .picker-btn {
  width: 100%; min-width: 0; box-sizing: border-box; min-height: 38px;
}
.j-filters .filter input[type="search"], .j-filters .filter input[type="date"] {
  background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 14px; padding: 8px 10px; border-radius: 8px;
}
.j-filters .period-btns { grid-column: span 2; align-self: end; padding-bottom: 4px; }
.j-filters .j-product { grid-column: span 2; }
/* «Найти» (акцентная) и «Сбросить фильтры» — рядом, в конце последней строки фильтров */
.j-filters .j-actions {
  grid-column: auto / -1; display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px 10px;
  align-self: end; padding-bottom: 1px;
}
.j-filters .j-actions .primary-btn { min-height: 38px; padding: 0 22px; }
.j-filters .j-actions .reset-btn { white-space: nowrap; }
.j-filters-toggle { display: none; align-self: flex-start; }
.j-summary { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; font-size: 13px; color: var(--text-dim); padding: 0 4px; }
/* «Обновляю список…»: строка под надпись зарезервирована — появление и исчезновение текста не двигает
   список. Отрицательные отступы съедают лишние промежутки flex-сетки (.journal gap: 12px). */
.journal > div.j-refresh-status { display: block; min-height: 17px; margin: -12px 0; font-size: 12.5px; line-height: 17px; }
.j-summary .j-export[hidden] { display: none; }
/* список документов — карточки: слева тип крупно, ярлыки (№, дата, откуда → куда) и товары; справа — плашки
   и комментарий документа */
.j-cards { display: flex; flex-direction: column; }
.j-card {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 6px 24px; align-items: start;
  padding: 14px 18px; border-top: 1px solid var(--border); cursor: pointer;
}
/* есть комментарий — правая колонка ограничена: не уже 220 px и не шире 30% карточки,
   чтобы список позиций слева не сжимался слишком сильно */
.j-card.j-card-commented { grid-template-columns: minmax(0, 1fr) minmax(220px, 30%); }
.j-card:first-child { border-top: none; }
.j-card:hover { background: var(--surface-2); }
.j-card:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.j-card-type { font-size: 18px; font-weight: 700; line-height: 1.25; }
.j-card-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin: 6px 0 8px; font-size: 13px; }
.j-num {
  font-family: var(--font-ui); font-variant-numeric: tabular-nums; font-size: 14.5px; font-weight: 600;
  padding: 2px 9px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg); white-space: nowrap;
}
.j-date { color: var(--text-dim); white-space: nowrap; }
.j-route { display: inline-flex; flex-wrap: wrap; align-items: baseline; gap: 6px; min-width: 0; }
.j-from { color: var(--text-dim); overflow-wrap: anywhere; }
.j-arrow { color: var(--accent); font-weight: 600; }
.j-to { font-weight: 600; overflow-wrap: anywhere; }
.j-card-items { list-style: none; margin: 0; padding: 0; font-size: 13px; color: var(--text-dim); line-height: 1.45; }
.j-card-items li { overflow-wrap: anywhere; }
.j-card-items li.matched { color: var(--text); background: var(--accent-dim); border-radius: 4px; padding: 0 6px; margin: 1px 0 1px -6px; width: fit-content; }
.j-card-more { font-size: 12.5px; color: var(--text-dim); margin-top: 2px; font-style: italic; }
/* комментарий документа — в правой колонке под плашками: целиком, приглушённо, по левому краю,
   с переносами (pre-wrap — как набрано, anywhere — длинное слово не растягивает карточку) */
.j-card-comment {
  width: 100%; font-size: 12.5px; line-height: 1.45; color: var(--text-dim); text-align: left;
  white-space: pre-wrap; overflow-wrap: anywhere;
}
/* правая колонка: сверху плашки (по правому краю), ниже комментарий (по левому краю колонки) */
.j-card-side {
  display: flex; flex-direction: column; align-items: flex-end; gap: 6px; min-width: 0; padding-top: 3px;
}
.j-card-marks { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; max-width: 260px; }
.j-mark {
  font-size: 11.5px; font-weight: 500; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--border);
  color: var(--text-dim); white-space: nowrap;
}
.j-mark-return { color: var(--accent); border-color: var(--accent); background: var(--accent-dim); }
.j-sort { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; }
.j-sort select {
  background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 13px; padding: 5px 8px; border-radius: 8px; margin-left: 4px;
}
@media (max-width: 520px) {
  .j-filters-toggle { display: inline-block; }
  .journal:not(.j-filters-open) .j-filters { display: none; }
  .j-filters .filter, .j-filters .filter input, .j-filters .filter select { width: 100%; min-width: 0; box-sizing: border-box; }
  .j-filters .j-actions { grid-column: 1 / -1; justify-content: flex-start; }
  .j-card, .j-card.j-card-commented { grid-template-columns: 1fr; padding: 12px 14px; }
  .j-card-side { align-items: flex-start; padding-top: 0; }
  .j-card-marks { justify-content: flex-start; max-width: none; }
  .j-sort { margin-left: 0; }
}

/* Компьютер: от 1280 px приложение занимает почти всю ширину (поля по 24 px), не шире 1700 px */
@media (min-width: 1280px) {
  .app { max-width: min(1700px, calc(100% - 48px)); }
}

/* Общие окна подтверждения, версий и правки 0ж (<dialog>, верхний слой браузера) */
.doc-modal {
  padding: 0; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); color: var(--text);
  width: min(1100px, calc(100vw - 48px)); max-height: 90vh; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
}
.doc-modal::backdrop { background: rgba(10, 12, 16, 0.55); }
.doc-modal-box { display: flex; flex-direction: column; gap: 8px; padding: 18px 22px; max-height: 90vh; box-sizing: border-box; }
.doc-modal-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
.doc-modal-head h2 { margin: 0; font-size: 20px; font-weight: 700; }
.doc-modal-when { font-size: 13px; color: var(--text-dim); margin-top: 2px; }
.doc-modal-tools { display: flex; gap: 6px; flex-shrink: 0; }
.doc-modal-tools .link-btn { min-width: 36px; font-size: 16px; padding: 4px 10px; }
.doc-modal-tools .link-btn:disabled { opacity: 0.35; cursor: default; }
.doc-modal-route { font-size: 15px; font-weight: 600; }
.doc-modal-marks { display: flex; flex-wrap: wrap; gap: 6px; }
.doc-modal-comment { font-size: 13.5px; overflow-wrap: anywhere; }
.doc-modal-sum { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; font-size: 13.5px; }
.doc-modal-sum .ms-link { text-decoration: none; }
.badge.doc-refreshed { color: var(--ok-text); border-color: var(--ok); background: var(--ok-dim); margin-left: 6px; }
.doc-live-error { margin: 6px 0; }
.doc-modal-body { flex: 1 1 auto; min-height: 0; overflow: auto; border: 1px solid var(--border); border-radius: 8px; }
.doc-modal-body .empty { padding: 24px 16px; }
.doc-exit-body { padding: 0 12px; }
.doc-lines { font-size: 13px; }
.doc-lines tr.doc-wanted td { background: var(--accent-dim); }
.doc-positions tr.doc-wanted td { background: var(--accent-dim); }
.doc-page-nav, .doc-page-neighbors { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.doc-page-view { display: flex; flex-direction: column; gap: 12px; padding: 18px 22px; }
.doc-page-view .doc-modal-body { overflow: visible; }
.doc-page-view .doc-modal-head { align-items: center; }
.doc-page-neighbors .link-btn:disabled { opacity: 0.35; cursor: default; }
@media (max-width: 520px) {
  .doc-modal { width: 100vw; max-width: 100vw; height: 100dvh; max-height: 100dvh; border-radius: 0; margin: 0; }
  .doc-modal-box { max-height: 100dvh; height: 100%; padding: 14px; }
  .doc-modal-tools .link-btn { min-width: 44px; min-height: 40px; }
}

/* Умный поиск по словам: пометка «совпало 1 из 2» и разделитель «Совпали не все слова» */
.hits-mark { font-size: 11.5px; color: var(--text-dim); font-style: italic; margin-left: 6px; white-space: nowrap; }
li.matched .hits-mark { color: var(--accent); }
.hits-divider {
  display: flex; align-items: center; gap: 10px; padding: 8px 18px; font-size: 12px; color: var(--text-dim);
  border-top: 1px solid var(--border);
}
.hits-divider::before, .hits-divider::after { content: ""; flex: 1; border-top: 1px dashed var(--border); }

/* «С ИИ» в журналах: переключатель у поля товара и список товаров с флажками */
.j-filters .j-ai-toggle { flex-direction: row; align-items: center; gap: 8px; align-self: end; padding-bottom: 9px;
  font-size: 14px; color: var(--text); cursor: pointer; white-space: nowrap; }
.j-filters .j-ai-toggle input { width: 16px; height: 16px; min-height: 0; accent-color: var(--accent); }
.j-ai-box .panel-head { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; }
.j-ai-list { list-style: none; margin: 0; padding: 4px 0; max-height: 420px; overflow-y: auto; }
.j-ai-list li label { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; padding: 6px 16px; cursor: pointer; font-size: 14px; }
.j-ai-list li label:hover { background: var(--surface-2); }
.j-ai-list input { accent-color: var(--accent); width: 16px; height: 16px; align-self: center; }
.j-ai-name { overflow-wrap: anywhere; }
.j-ai-why { font-size: 12.5px; }
.j-ai-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 10px 16px; border-top: 1px solid var(--border); font-size: 13px; }
.j-ai-foot .primary-btn:disabled { opacity: 0.5; cursor: default; }
.j-ai-notes { padding: 0 16px 10px; font-size: 12.5px; }
@media (max-width: 520px) {
  .j-ai-list li label { padding: 10px 12px; }
  .j-ai-foot .primary-btn { width: 100%; }
}

/* «Результаты от 14:05, обновить?» — сохранённые результаты старше синхронизации; сами не перезапрашиваем */
.stale-slot:empty { display: none; }
.stale-note {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px;
  margin-bottom: 14px; padding: 9px 14px; font-size: 13px;
  border-color: var(--accent); background: var(--accent-dim);
}

/* ── вкладка «Черновики» (static/drafts_desk.js) ── */
.draft-status { white-space: nowrap; }
.draft-status-ready { background: var(--ok-dim); color: var(--ok-text); }
.draft-status-sent { background: var(--ok-dim); color: var(--ok-text); }
.draft-head .panel-head { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.draft-note { margin: 8px 0; color: var(--warn); }
.draft-fields { margin-top: 10px; }
.draft-fields .filter { min-width: 220px; }
.draft-basis input { min-width: 260px; }
.draft-ready ul { margin: 6px 0 0 18px; padding: 0; }
.draft-ready.ok { border-left: 4px solid var(--ok); }
.draft-ready.bad { border-left: 4px solid var(--warn); }
.draft-message { border-left: 4px solid var(--accent); }
.draft-actions { display: flex; gap: 8px; flex-wrap: wrap; margin: 8px 0; }
table.draft-lines td { vertical-align: top; }
table.draft-lines .draft-input { width: 100%; min-width: 160px; }
table.draft-lines .draft-input.short { min-width: 120px; }
table.draft-lines .draft-input.qty { width: 80px; min-width: 0; text-align: right; }
table.draft-lines tr.draft-row-bad td { background: var(--warn-dim); }
.draft-issues { margin-top: 4px; color: var(--warn); font-size: 13px; }
.draft-bad { color: var(--warn); }
.draft-line-actions { display: flex; flex-direction: column; gap: 4px; align-items: flex-start; }
.draft-line-actions .link-btn { white-space: nowrap; }
.photo-thumbs { display: flex; flex-flow: row wrap; align-items: flex-start; gap: var(--photo-gap); min-width: 0; max-width: 100%; margin-top: 8px; }
.draft-photos-cell .photo-thumbs { width: calc(3 * var(--photo-size) + 2 * var(--photo-gap)); }
.draft-thumb { box-sizing: border-box; display: block; flex: 0 0 var(--photo-size); width: var(--photo-size); height: var(--photo-size);
  padding: 0; border: 1px solid var(--border); border-radius: 6px; background: none; cursor: zoom-in; margin: 0; overflow: hidden; }
.draft-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; border-radius: 5px; }
.draft-link { display: flex; flex-direction: column; gap: 8px; padding: 6px 0; }
.draft-link-item { display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; padding: 2px 0; }
.draft-photo-dialog { padding: 0; border: none; background: transparent; max-width: 96vw; max-height: 96vh; }
.draft-photo-dialog::backdrop { background: rgba(0, 0, 0, .75); }
.draft-photo-box { display: flex; flex-direction: column; gap: 8px; align-items: flex-end; }
.draft-photo-box a { color: #fff; }
.draft-photo-box img { max-width: 94vw; max-height: 86vh; border-radius: 8px; background: #000; }
/* отступы внутри панелей черновиков: .filters.inline у других экранов — без своих полей */
#draftsFilters { padding: 10px 14px; }
.draft-head, .draft-ready, .draft-message { padding: 12px 16px; }
.draft-head .panel-head { padding: 0 0 6px; border: 0; background: none; }
.draft-head .draft-fields { padding: 10px 0 0; }
.draft-basis input, table.draft-lines .draft-input, table.draft-lines select, .draft-link-q {
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-ui);
  font-size: 14px;
  padding: 7px 9px;
  border-radius: 8px;
  box-sizing: border-box;
}
.draft-basis input { padding: 8px 10px; }
table.draft-lines tr.draft-row-bad .draft-input { border-color: var(--warn); }

/* отправка в МойСклад (этап Б) */
.draft-ready .link-btn { margin-left: 8px; }
.draft-preview-body { padding: 12px 16px; display: flex; flex-direction: column; gap: 8px; }
.draft-preview-body table.data { margin: 0; }
.draft-created { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 6px 0; }
.draft-created-name { font-weight: 600; }
.draft-created-code { font-family: var(--font-mono, monospace); font-size: 26px; font-weight: 800; letter-spacing: .02em; color: var(--accent); }
.draft-create-preview { padding: 8px 12px; border-radius: 8px; background: var(--surface-2); }

/* черновик целиком на компьютере (задача 21, этап А): новый черновик, добавить и удалить строку */
.draft-new-btns { display: flex; gap: 8px; align-items: flex-end; margin-left: auto; }
.draft-danger { color: var(--warn); }
.draft-add { padding: 12px 16px; }
.draft-add .panel-head { padding: 0 0 8px; border: 0; background: none; }
.draft-add .filters { padding: 0; align-items: flex-end; }
.draft-add-q { flex: 1 1 360px; }
.draft-add-name { flex: 1 1 320px; }
.draft-add input, .draft-add select, .draft-fields input {
  background: var(--bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-ui);
  font-size: 14px;
  padding: 8px 10px;
  border-radius: 8px;
  box-sizing: border-box;
  width: 100%;
}
.draft-add .draft-input.qty { width: 100px; text-align: right; }
#draftAddFound { margin-top: 8px; }
.draft-add-new { margin-top: 10px; }
.draft-add-new summary { cursor: pointer; color: var(--accent); font-weight: 600; padding: 4px 0; }
.draft-add-new .filters { margin-top: 8px; }

/* резерв под объект в черновике (задача 21) — только компьютер */
.draft-reserve-head { min-width: 260px; }
td.draft-reserve { min-width: 200px; }
.draft-reserve-pick { min-width: 190px; }
.draft-reserve-qty { display: flex; align-items: center; gap: 6px; margin-top: 6px; }
table.draft-lines .draft-reserve-qty .draft-input.qty { width: 80px; }

/* ── Компьютер от 1280 px: шрифт задачи 18 меньше на 1 px; ниже 1280 и /m/ — как было ── */
@media (min-width: 1280px) {
  :root {
    --desk-font-small: 12.5px;
    --desk-font-num: 14.5px;
    --desk-font-table: 13px;
    --desk-font-meta: 13.5px;
    --desk-font-input: 14px;
    --desk-font-text: 15px;
    --desk-font-name: 14px;
    --desk-font-name-text: 16px;
    --desk-font-name-list: 15px;
    --desk-font-name-meta: 14.5px;
    --desk-font-name-hint: 13.5px;
    --desk-font-name-title: 21px;
    --desk-font-name-scan: 20px;
    --desk-font-key: 14px;
    --desk-font-key-stock: 14.7px;
    --desk-font-qty: 14px;
    --desk-font-qty-input: 15px;
    --desk-font-qty-total: 16px;
    --desk-font-qty-meta: 14.5px;
    --desk-font-qty-small: 13.5px;
    --desk-font-qty-scan: 18px;
  }
  body { font-size: var(--desk-font-text); }
  /* таблицы: 14 → 13 px, отступы ячеек прежние */
  table.data, .doc-lines { font-size: var(--desk-font-table); }
  /* одна высота строки у текста и цифр (моноширинный 600 иначе садится ниже соседних ячеек) */
  table.data th, table.data td { line-height: 1.45; }
  /* шапки таблиц: цвет текста, вес 600, линия снизу; сортированный столбец — по-прежнему акцентом */
  table.data th { color: var(--text); font-weight: 600; box-shadow: inset 0 -2px 0 var(--border); }
  /* остатки: плюс — жирнее, ноль — приглушён, минус — красный и жирный */
  table.data td.num { font-weight: 600; }
  table.data td.num.zero { color: var(--text-dim); font-weight: 400; }
  table.data td.neg { font-weight: 600; }
  table.data tfoot td.num { font-weight: 600; }
  /* название товара — вес 500 (в заголовках карточки и «Потребности» — их вес) */
  table.data .name-copy > a, .stock-ai-list .name-copy > a, .j-ai-list .name-copy > a,
  .need-cand-head .name-copy > a, .card-found .name-copy > a { font-weight: 500; }
  /* код, артикул, штрихкод — моноширинным, цифры ровно */
  .copy-val, .product-key { font-family: var(--font-data); font-size: var(--desk-font-key); }
  .copy, .product-key { white-space: nowrap; overflow-wrap: normal; }

  /* заголовки */
  .card-head h2 { font-size: var(--desk-font-name-title); }
  .doc-modal-head h2 { font-size: 21px; }
  .panel-head { font-size: var(--desk-font-table); font-weight: 500; }
  .item-name { font-size: var(--desk-font-name-text); font-weight: 500; }

  /* текст и поля */
  .answer, .query input { font-size: var(--desk-font-text); }
  .query button, .primary-btn, .query .archive-select { font-size: var(--desk-font-input); }
  .filter { font-size: var(--desk-font-small); }
  .filter select, .filter input[type="date"], .filter.check, .picker-btn, .picker-search, .picker-item,
  .table-filter, .stock-ai-row textarea, .wh-picker summary, .link-form input,
  .j-filters .filter input[type="search"], .j-filters .filter input[type="date"], .j-filters .j-ai-toggle,
  .draft-basis input, table.draft-lines .draft-input, table.draft-lines select, .draft-link-q { font-size: var(--desk-font-input); }
  .link-btn, .accept-btn { font-size: var(--desk-font-table); }
  .table-count, .totals, .table-warning, .more-row, .search-scope, .need-note, .need-status,
  .j-summary, .stock-ai-note, .stock-ai-where, .card-neg, .link-status, .export-status { font-size: var(--desk-font-table); }
  .stock-pos-summary, .stock-pos-absent, .stock-ai-query-row, .doc-modal-comment, .doc-modal-sum { font-size: var(--desk-font-meta); }
  .stock-pos > summary, .stock-ai-list li, .j-ai-list li label, .card-meta, .card-last { font-size: var(--desk-font-input); }
  .hist-item, .wh-item, .wh-panel input[type="search"] { font-size: var(--desk-font-meta); }
  .card-label, .need-text, .need-legend, .card-hint, .j-ai-why, .j-ai-notes, .wh-cell, .wh-take { font-size: var(--desk-font-small); }
  .j-card-meta, .j-card-items, .j-card-comment, .doc-modal-when, .need-qty, .need-why, .wh-row, .wh-taken,
  .analog-head, .analog-same, .analog-empty, .analog-here, .analog-error-text, .stock-ai-group,
  .j-ai-foot, .stale-note, .need-deleted, .need-done, .draft-issues { font-size: var(--desk-font-table); }
  .need-text textarea, .wh-take input, table.need-edit input[type="text"] { font-size: var(--desk-font-table); }
  .j-num { font-size: var(--desk-font-num); }

  /* Только наименования: метки, количества и пояснения сохраняют уменьшенный шрифт. */
  .product-name, .name-copy { font-size: var(--desk-font-name-text); }
  .card-head h2 .name-copy { font-size: inherit; }
  :where(table.data) .name-copy, :where(table.data) a[href^="#product/"], :where(table.data) .product-name,
  .j-card-items .product-name, .analog-head .product-name, .analog-same .name-copy,
  table.need-edit input[data-f="name"] { font-size: var(--desk-font-name); }
  .j-summary .product-name, .j-summary .name-copy { font-size: var(--desk-font-name); }
  .stock-ai-list .name-copy, .j-ai-list .name-copy, .j-ai-list .j-ai-name,
  .stock-pos-title { font-size: var(--desk-font-name-list); }
  .stock-pos-absent .name-copy { font-size: var(--desk-font-name-meta); }
  .j-ai-notes .product-name, .card-hint .product-name { font-size: var(--desk-font-name-hint); }
  .doc-sg-name { font-size: var(--desk-font-name-text); }
  table.draft-lines .doc-unrec-name .draft-input { font-size: var(--desk-font-name-list); }
  table.draft-lines .doc-unrec-id input[data-field="barcode"] { font-family: var(--font-data); font-size: var(--desk-font-key); }
  table.data td[data-key="name"], table.data td.doc-card-name { min-width: 240px; }
  .doc-pos-code { min-width: 140px; }
  table.data td[data-key="code"], table.data td[data-key="barcode"],
  table.data td[data-label="Код"], table.data td[data-label="Штрихкод"] { min-width: 140px; }

  /* Количества по 42c3064: подписи и вложенные метаданные сохраняют свой размер. */
  table.data td.num, table.data td.num .reserve-num, .totals b, .wh-qty, .wh-taken b,
  .qty-value, table.need-edit input.qty, .wh-take input { font-size: var(--desk-font-qty); }
  table.draft-lines .draft-input.qty, .card-last b,
  .need-qty b, .item-qty { font-size: var(--desk-font-qty-input); }
  .docres-form input.reserve-qty { font-size: var(--desk-font-qty); }
  .doc-sg-stock { font-size: var(--desk-font-qty-total); }
  .qty-text, .doc-totals b { font-size: var(--desk-font-qty-total); }
  .doc-take .qty-post { font-size: var(--desk-font-qty-total); white-space: nowrap; }
  .qty-meta { font-size: var(--desk-font-qty-meta); }
  .qty-small { font-size: var(--desk-font-qty-small); }
  .qty-value, .qty-text, .qty-meta, .qty-small, .wh-qty { white-space: nowrap; }
  .doc-modal-sum b.qty-meta { white-space: normal; }
  /* Длинные дробные остатки расширяют колонку, а не накладываются на ячейку. */
  .wh-row { grid-template-columns: minmax(150px, 1.3fr) minmax(90px, max-content) minmax(120px, 1.2fr) auto; }

  /* верхняя панель: высота та же; активная вкладка — ещё и светлая полоса снизу */
  .tab { font-size: var(--desk-font-table); }
  .tab[aria-selected="true"] { box-shadow: inset 0 -2px 0 rgba(255, 255, 255, 0.85); }

  /* главные кнопки против второстепенных */
  .primary-btn, .query button, .accept-btn { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25); }
  .primary-btn:not(:disabled):hover, .query button:hover, .accept-btn:not(:disabled):hover { filter: brightness(1.08); }
  .link-btn:hover { background: var(--surface-2); }
}

/* ── «Остатки» (задача 19): Код, Название, Остаток, Ед., Группа, Склад, Ячейка, Штрихкод ──
   узкие столбцы — по содержимому (width: 1% + nowrap), остальное место — названию, складу и ячейке */
#tab-stock table.data [data-key="code"],
#tab-stock table.data [data-key="qty"],
#tab-stock table.data [data-key="unit"],
#tab-stock table.data [data-key="barcode"] { width: 1%; white-space: nowrap; }
#tab-stock table.data td[data-key="unit"] { color: var(--text-dim); padding-left: 6px; }
#tab-stock table.data th[data-key="unit"] { padding-left: 6px; }
/* от 1280 px — места хватает: название и склад не сжимаются в узкую колонку (уже — как было, без прокрутки) */
@media (min-width: 1280px) {
  #tab-stock table.data [data-key="name"] { min-width: 320px; }
  #tab-stock table.data [data-key="warehouse"] { min-width: 120px; }
}

/* «Остатки» от 1280 px (задача 20): цифры кода и штрихкода — не мельче текста соседних столбцов
   (прежние 14 × 1.05 = 14.7 px сохраняются при уменьшении текста таблиц; иконка прежняя) */
@media (min-width: 1280px) {
  #tab-stock table.data td[data-key="code"] .copy-val,
  #tab-stock table.data td[data-key="barcode"] .copy-val { font-size: var(--desk-font-key-stock); }
  /* код и штрихкод стали шире — ячейке оставляем место (иначе на 1280 px пометка «⚠ …» в столбик) */
  #tab-stock table.data [data-key="name"] { min-width: 240px; }
  #tab-stock table.data [data-key="cell"] { min-width: 130px; }
}

/* ---- Вкладка «Резервы» (static/reserves_desk.js, задача 21) ---- */
.res-head { padding: 12px 16px; display: flex; flex-direction: column; gap: 10px; }
.res-modes { display: flex; flex-wrap: wrap; gap: 6px; }
.res-mode { font: inherit; font-weight: 600; padding: 7px 14px; border-radius: 8px; border: 1px solid var(--border);
  background: var(--surface); color: inherit; cursor: pointer; }
.res-mode.active { background: var(--accent); border-color: var(--accent); color: #1F2833; }
.res-mode-count { display: inline-block; min-width: 20px; padding: 0 6px; margin-left: 4px; border-radius: 10px;
  background: var(--warn); color: #fff; font-size: 12px; line-height: 18px; text-align: center; }
.res-filters { padding: 0; align-items: flex-end; gap: 10px 12px; }
.res-object { min-width: 280px; }
.res-product { flex: 1 1 260px; }
.res-product input { width: 100%; }
.res-hint { font-size: 13px; }
.res-found, .res-when { padding: 10px 16px; }
#resTable tbody tr:not(.res-docs-row) { cursor: pointer; }
#resTable tbody tr.res-open > td { background: var(--surface); }
tr.res-docs-row > td { background: var(--surface); padding: 6px 12px 10px; cursor: default; }
.res-docs { border-left: 3px solid var(--accent); padding: 4px 0 4px 12px; }
.res-docs .reserve-table { width: auto; min-width: 520px; }
.res-viol td { vertical-align: top; }
@media (max-width: 640px) {
  .res-object, .res-product { min-width: 0; flex: 1 1 100%; }
  .res-docs .reserve-table { min-width: 0; }
}
.res-filters .filter input[type="search"], .res-filters .filter input:not([type]) {
  background: var(--bg); border: 1px solid var(--border); color: var(--text); box-sizing: border-box;
  font-family: var(--font-ui); font-size: 14px; padding: 8px 10px; border-radius: 8px; min-height: 38px;
}
/* длинные заголовки отчёта («Фактически на складе хранения на дату») — в две строки, без прокрутки вбок */
#resTable table.data th { white-space: normal; vertical-align: bottom; min-width: 64px; }
#resTable td[data-key="comment"] { min-width: 100px; }
#resTable table.data th, #resTable table.data td { padding-left: 9px; padding-right: 9px; }
/* название товара — в 1–2 строки, объект — не столбиком; на телефоне таблица листается внутри своей рамки */
#resTable td[data-key="name"] { min-width: 360px; }
#resTable td[data-key="object"] { min-width: 160px; }
.res-viol td:nth-child(3) { min-width: 300px; }
.res-viol td:nth-child(5) { min-width: 200px; }
@media (max-width: 1040px) {
  #resTable td[data-key="name"], .res-viol td:nth-child(3) { min-width: 240px; }
  #resTable td[data-key="object"] { min-width: 160px; }
}
/* «Выдано другим»: подпись «из резерва N, восполнено M» под числом; строка с выдачей — слегка подсвечена */
.res-sub { font-size: 12px; font-weight: 400; color: var(--text-dim); white-space: nowrap; margin-top: 2px; }
#resTable tbody tr.res-given > td { background: color-mix(in srgb, var(--warn-dim) 45%, transparent); }
#resTable tbody tr.res-given:hover > td { background: var(--warn-dim); }
.res-warn { font: inherit; border: 0; background: none; padding: 0 2px; color: var(--warn); cursor: help; }
.res-warn-text { font-size: 12px; color: var(--warn); margin-top: 2px; }
/* выбор строк (mountTable options.select; «Снять выбранные» в «Резервах», «В архив» в «Черновиках») */
table.data th.row-select, table.data td.row-select { width: 1%; padding-right: 2px; }
.row-select input { width: 18px; height: 18px; margin: 0; cursor: pointer; vertical-align: middle; }
.res-batch, .drafts-batch { padding: 10px 16px; border-left: 4px solid var(--accent); }
.res-batch-bar, .drafts-batch-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.res-batch-confirm { display: flex; flex-direction: column; gap: 6px; }
.res-batch-confirm .filters { padding: 4px 0 0; align-items: flex-end; gap: 10px 12px; }
.res-batch-confirm input { background: var(--bg); border: 1px solid var(--border); color: var(--text); font: inherit;
  font-size: 14px; padding: 8px 10px; border-radius: 8px; min-height: 38px; box-sizing: border-box; }
.res-reason { flex: 1 1 260px; }
.res-reason input { width: 100%; }
.res-flash, .drafts-flash { padding: 10px 16px; }
.res-flash.ok, .drafts-flash.ok { color: var(--ok-text); background: var(--ok-dim); border-left: 4px solid var(--ok); }
.res-flash.error, .drafts-flash.error { color: var(--warn); background: var(--warn-dim); border-left: 4px solid var(--warn); }
/* «Доступно» (остаток − в резерве): ≥ 0 — приглушённо, < 0 — красным с минусом */
.free-ok { color: var(--text-dim); font-weight: 400; }
.free-minus { color: var(--warn); font-weight: 700; }

/* ── вкладка «Документы» (static/docs_desk.js): черновик = непроведённый документ МойСклад ── */
/* вкладки «Приёмки» и «Оприходования»: «Новая …», непроведённые — над журналом */
.doc-inbox { margin-bottom: 14px; }
.doc-inbox-head { display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; margin-bottom: 10px; }
.doc-inbox-head .draft-new-btns { margin-left: 0; flex-wrap: wrap; }
.doc-inbox-count span { color: var(--warn); font-weight: 700; }
.doc-inbox-panel .panel-head .badge { margin-left: 8px; }
.doc-inbox-all { margin: 8px 14px; }
.doc-old-link { margin: 8px 2px 0; }
/* выпадающий список под полем сканера */
/* панель поля сканера не обрезает список (у .panel — overflow: hidden) и лежит над панелью позиций */
.panel.doc-scan { overflow: visible; position: relative; z-index: 5; }
.doc-scan-field > label { font-size: 13px; color: var(--text-dim); }
.doc-suggest-wrap { position: relative; }
.doc-suggest { position: absolute; left: 0; right: 0; top: calc(100% + 4px); z-index: 20; max-height: 60vh; overflow-y: auto;
  background: var(--surface); border: 1px solid var(--border); border-radius: 8px; box-shadow: 0 8px 24px rgba(0, 0, 0, .25); }
.doc-sg-row { display: grid; grid-template-columns: minmax(90px, auto) 1fr auto; gap: 12px; align-items: baseline;
  padding: 8px 12px; cursor: pointer; border-bottom: 1px solid var(--border); }
.doc-sg-row:last-child { border-bottom: 0; }
.doc-sg-row:hover, .doc-sg-row.active { background: var(--surface-2); }
.doc-sg-row.active { box-shadow: inset 3px 0 0 var(--accent); }
.doc-sg-code { font-family: var(--font-data); color: var(--text-dim); white-space: nowrap; }
.doc-sg-name { min-width: 0; overflow-wrap: anywhere; }
.doc-sg-stock { font-family: var(--font-data); white-space: nowrap; padding: 1px 8px; border-radius: 6px; border: 1px solid; }
.doc-sg-stock.pos { color: var(--ok-text); border-color: var(--ok); background: var(--ok-dim); }
.doc-sg-stock.zero { color: var(--warn); border-color: var(--warn); background: var(--warn-dim); }
.doc-sg-new { grid-column: 1 / -1; color: var(--accent); }
.doc-sg-empty { padding: 8px 12px; border-bottom: 1px solid var(--border); }
@media (max-width: 520px) {
  .doc-sg-row { grid-template-columns: 1fr auto; }
  .doc-sg-code { grid-column: 1 / -1; }
}
/* остаток в позициях формы */
td.doc-stock { white-space: nowrap; }
.doc-stock-neg { color: var(--warn); }
.doc-title, .doc-header, .doc-scan, .doc-foot { padding: 12px 16px; }
.doc-title-row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.doc-title-row h2 { margin: 0; font-size: 20px; }
.doc-fixed { padding: 8px 0; font-weight: 600; }
.doc-comment { flex: 1 1 320px; }
.doc-comment textarea, .doc-header input { padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px;
  background: var(--surface); color: var(--text); font: inherit; }
.doc-comment textarea { width: 100%; resize: vertical; box-sizing: border-box; }
.doc-scan-row { padding: 0; align-items: flex-end; }
.doc-scan-field { flex: 1 1 420px; }
/* поле сканера: активно — акцентная рамка и подсветка, курсор мигает; нет — серое (static/docs_desk.js, showState) */
#docScanInput { font-size: 20px; padding: 10px 12px; border: 2px solid var(--border); border-radius: 8px;
  background: var(--surface-2); color: var(--text); width: 100%; box-sizing: border-box; caret-color: var(--accent); }
#docScanInput:focus { border-color: var(--accent); background: var(--surface); outline: none;
  box-shadow: 0 0 0 4px var(--accent-dim); }
#docScanInput:not(:focus)::placeholder { color: var(--text-dim); font-style: italic; }
#docScanInput:disabled { border-color: var(--border); opacity: .6; }
.doc-scan-state { margin-left: 8px; font-size: 12.5px; color: var(--text-dim); }
.doc-scan-field.active .doc-scan-state { color: var(--ok-text); font-weight: 600; }
#docScanQty { font-size: 18px; padding: 9px 10px; border: 1px solid var(--border); border-radius: 8px;
  background: var(--surface); color: var(--text); }
table.doc-queue { margin-top: 8px; }
table.doc-queue td { padding: 6px 10px; }
tr.doc-queue-sending td { color: var(--text-dim); }
tr.doc-queue-error td { background: var(--warn-dim); color: var(--warn); }
tr.doc-queue-error .link-btn { margin-right: 6px; }
.doc-spinner { display: inline-block; width: 10px; height: 10px; border: 2px solid var(--text-dim); border-top-color: transparent;
  border-radius: 50%; animation: doc-spin .8s linear infinite; vertical-align: -1px; }
@keyframes doc-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .doc-spinner { animation: none; } }
.doc-chooser { margin-top: 8px; padding: 10px 14px; }
.doc-chooser .panel-head { padding: 0 0 6px; border: 0; background: none; }
/* перемещение (этап B): проверка перед «Провести» и «Разбить по ячейкам» в строке позиции */
.doc-postcheck { margin-top: 10px; padding: 10px 14px; }
.doc-postcheck .panel-head { padding: 0 0 6px; border: 0; background: none; }
.doc-postcheck ul { margin: 6px 0; padding-left: 20px; }
.doc-postcheck .draft-bad, .doc-take { margin: 8px 0; }
.doc-take label { display: inline-flex; gap: 8px; align-items: center; font-weight: 600; }
.doc-postcheck .filter { margin: 8px 0; max-width: 360px; }
tr.doc-split-row td { padding-top: 0; border-top: 0; }
.doc-move-res div { white-space: nowrap; }
.doc-unrec { border-left: 4px solid var(--warn); }
.doc-unrec .panel-head .item-meta { margin-left: 8px; font-weight: normal; }
.doc-unrec .doc-unrec-name { width: 40%; min-width: 320px; }
.doc-unrec .doc-unrec-id { width: 14%; min-width: 140px; }
.doc-unrec-suggest { max-height: 320px; overflow-y: auto; margin-top: 6px; border: 1px solid var(--border); border-radius: 8px; }
.doc-unrec-suggest[hidden] { display: none; }
.doc-unrec-option { display: block; width: 100%; padding: 8px 10px; border: 0; border-bottom: 1px solid var(--border);
  background: var(--bg); color: var(--text); text-align: left; font: inherit; cursor: pointer; overflow-wrap: anywhere; }
.doc-unrec-option:last-child { border-bottom: 0; }
.doc-unrec-option:hover, .doc-unrec-option.active { background: var(--accent-dim); }
.doc-unrec-confirm { display: flex; flex-direction: column; gap: 8px; padding: 10px 0; overflow-wrap: anywhere; }
.doc-totals { font-size: 16px; margin-bottom: 8px; }
table.doc-list td { vertical-align: top; }
.doc-table-wrap { overflow-x: auto; }   /* на телефоне таблица прокручивается сама, страница — нет */
.move-cell-field { width: 100%; min-width: 0; padding: 7px 8px; border: 1px solid var(--border);
  border-radius: 6px; background: var(--surface); color: var(--text); font: inherit; text-align: left;
  white-space: normal; overflow-wrap: anywhere; cursor: pointer; }
.move-cell-field:disabled { opacity: .65; cursor: default; }
.move-cell-field:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.move-cell-popup { position: fixed; z-index: 100; box-sizing: border-box; padding: 6px;
  border: 1px solid var(--border); border-radius: 8px; background: var(--surface);
  box-shadow: 0 6px 24px #0003; }
.move-cell-tabs { display: flex; gap: 4px; margin-bottom: 6px; }
.move-cell-tabs button { flex: 1; padding: 7px 4px; border: 0; border-radius: 4px;
  background: var(--surface-2); color: var(--text); font: inherit; cursor: pointer; }
.move-cell-tabs [aria-selected="true"] { background: var(--accent-dim); font-weight: 600; }
.move-cell-list { max-height: min(280px, 40vh); overflow-y: auto; }
.move-cell-option { display: flex; flex-direction: column; gap: 2px; width: 100%; padding: 7px 8px;
  border: 0; background: var(--surface); color: var(--text); font: inherit; text-align: left;
  overflow-wrap: anywhere; cursor: pointer; }
.move-cell-option:hover, .move-cell-option.active { background: var(--accent-dim); }
@media (min-width: 761px) {
  /* Десять колонок перемещения делят ширину страницы, длинные подписи переносятся. */
  .doc-move-panel table.doc-positions { table-layout: fixed; width: 100%; }
  .doc-move-panel table.doc-positions th, .doc-move-panel table.doc-positions td {
    min-width: 0; padding: 8px 7px; white-space: normal; overflow-wrap: anywhere; }
  .doc-move-panel table.doc-positions th:nth-child(1) { width: 3%; }
  .doc-move-panel table.doc-positions th:nth-child(2) { width: 24%; }
  .doc-move-panel table.doc-positions th:nth-child(3) { width: 7%; text-align: right; }
  .doc-move-panel table.doc-positions th:nth-child(4) { width: 4%; }
  .doc-move-panel table.doc-positions th:nth-child(5),
  .doc-move-panel table.doc-positions th:nth-child(6) { width: 12%; }
  .doc-move-panel table.doc-positions th:nth-child(7),
  .doc-move-panel table.doc-positions th:nth-child(8) { width: 10%; text-align: right; }
  .doc-move-panel table.doc-positions th:nth-child(9) { width: 10%; }
  .doc-move-panel table.doc-positions th:last-child { width: 8%; }
  .doc-move-panel .doc-pos-code { min-width: 0; }
  .doc-move-panel .name-copy, .doc-move-panel .name-copy > :first-child { white-space: normal; }
  .doc-move-panel table.draft-lines .draft-input.qty { width: 100%; box-sizing: border-box; }
  .doc-move-panel .doc-move-res div, .doc-move-panel .draft-line-actions { white-space: normal; }
  .doc-move-panel .draft-line-actions { flex-wrap: wrap; }
  .doc-move-panel .link-btn { max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
}
/* Постоянная строка ввода остаётся внутри границ таблицы; список подсказок находится в body. */
#docScan[hidden], #docInputRow[hidden] { display: none; }
#docInputRow > td { padding: 10px 12px; border-top: 1px solid var(--border); }
table.doc-cards #docInputRow > td { display: table-cell; }
table.doc-cards #docInputRow > td::before { display: none; }
@media (max-width: 520px) {
  table.doc-cards tfoot, table.doc-cards #docInputRow, table.doc-cards #docInputRow > td { display: block; }
}
.doc-line-field { position: sticky; left: 0; max-width: calc(100vw - 80px); }
#docLineInput { font-family: inherit; font-size: var(--desk-font-name-scan, 20px); padding: 10px 12px;
  border: 2px solid var(--border); border-radius: 8px; background: var(--surface-2); color: var(--text);
  width: 100%; min-width: 0; box-sizing: border-box; caret-color: var(--accent); }
#docLineInput:focus { border-color: var(--accent); background: var(--surface); outline: none;
  box-shadow: 0 0 0 4px var(--accent-dim); }
#docLineInput:disabled { opacity: .6; }
.doc-line-suggest { position: fixed; right: auto; z-index: 100; box-sizing: border-box; }

/* Резерв задним числом из документа (этап 0д, static/doc_reserves.js) */
.docres-panel .docres-body { display: flex; flex-direction: column; gap: 10px; padding: 0 16px 16px; }
.docres-form .filters, .docres-cancel .filters { padding: 0; align-items: flex-end; gap: 10px 12px; }
.docres-form input, .docres-cancel input {
  background: var(--bg); border: 1px solid var(--border); color: var(--text);
  font-family: var(--font-ui); font-size: 14px; padding: 8px 10px; border-radius: 8px; box-sizing: border-box;
}
.docres-form .panel-head { padding: 0 0 8px; border: 0; background: none; }
.docres-closed { color: var(--text-dim); }
.docres-intro { font-size: 14px; }
.docres-reserve { padding: 4px 0; font-size: 14px; }
.docres-reserve + .docres-reserve { border-top: 1px dashed var(--border); }
.docres-acts { margin-left: 6px; white-space: nowrap; }
.docres-sub { margin-top: 6px; }
.docres-form, .docres-cancel { border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 12px; }
.docres-preview-box { display: flex; flex-direction: column; gap: 8px; margin-top: 8px; }
.docres-list { padding: 8px 10px; border-radius: 8px; background: var(--accent-dim); font-size: 14px; }
.docres-list ul { margin: 4px 0 0; padding-left: 18px; }
.docres-list.bad { background: var(--warn-dim); }
.docres-list.ok { background: var(--ok-dim); color: var(--ok-text); }
.docres-choices { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 10px; margin-bottom: 8px; }
.docres-choice { display: flex; flex-direction: column; gap: 6px; align-items: flex-start;
  border: 1px solid var(--border); border-radius: 8px; padding: 10px; }
.primary-btn.danger { background: var(--warn); border-color: var(--warn); color: #fff; }

/* Правка проведённых и «Версии» (этап 0ж, static/doc_edit.js) */
.doc-view-tools { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 10px; }
.doc-edit-bar { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; padding: 10px 14px;
  border: 2px solid var(--accent); border-radius: 8px; background: var(--accent-dim); color: var(--text); }
.doc-edit-actions { display: flex; flex-wrap: wrap; gap: 10px 14px; align-items: flex-end; }
.doc-edit-actions .filter { margin: 0; }
.doc-edit-actions input { padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px;
  background: var(--surface); color: var(--text); font: inherit; min-width: 200px; }
.doc-edit-panel { border-left: 4px solid var(--accent); }
.doc-at-approx { color: var(--text-dim); }
.doc-at-reliable { color: var(--text); }
.doc-at-loading { opacity: .45; }
.doc-at-refresh { font-size: .85em; }
.doc-edit-panel .panel-head .item-meta { margin-left: 8px; font-weight: normal; }
tr.doc-edit-added td:first-child { box-shadow: inset 4px 0 var(--ok); }
tr.doc-edit-changed td:first-child { box-shadow: inset 4px 0 var(--accent); }
tr.doc-edit-removed td { color: var(--text-dim); }
.doc-edit-panel tr.doc-edit-removed td:nth-child(2), .doc-edit-panel tr.doc-edit-removed td:nth-child(3) { text-decoration: line-through; }
tr.doc-edit-unknown td { background: var(--warn-dim); }
.badge.doc-edit-added { color: var(--ok-text); border-color: var(--ok); background: var(--ok-dim); }
.badge.doc-edit-changed { border-color: var(--accent); }
.badge.doc-edit-removed, .badge.doc-edit-unknown { color: var(--warn); border-color: var(--warn); }
.doc-edit-create { padding: 6px 0; align-items: flex-end; gap: 8px 12px; }
.doc-edit-create input, .doc-edit-create select { padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px;
  background: var(--surface); color: var(--text); font: inherit; }
.doc-change-body { padding: 4px 0 10px; }
.doc-change-body h3 { margin: 12px 12px 6px; font-size: 15px; }
.doc-change-body > div { margin: 4px 12px; }
.doc-change-body table { width: 100%; }
.doc-change-res { margin: 4px 12px 0 32px; padding: 0; }
tr.doc-change-minus td { color: var(--warn); }
table.dim td, tr.dim td { color: var(--text-dim); }
.doc-change-foot { display: flex; flex-direction: column; gap: 8px; padding-top: 4px; }
.doc-change-ok { display: flex; gap: 8px; align-items: center; font-weight: 600; color: var(--warn); }
.doc-change-ok input { width: 18px; height: 18px; }
.doc-versions { margin-top: 8px; overflow-x: auto; }
.doc-change-dialog .doc-modal-comment { white-space: pre-line; }
@media (max-width: 520px) {
  .doc-edit-actions input { min-width: 0; width: 100%; }
  .doc-edit-actions .filter { flex: 1 1 100%; }
}

/* Подсказки по части кода/артикула/штрихкода (этап 0з): где совпало, совпавшая часть выделена */
.doc-sg-where { display: block; font-family: var(--font-data); font-size: 12.5px; color: var(--text-dim); margin-top: 2px; }
.doc-sg-where mark, .draft-link-item mark { background: var(--accent-dim); color: var(--text); font-weight: 700;
  border-radius: 3px; padding: 0 1px; }
.doc-sg-hint { color: var(--text); font-weight: 600; }

/* Резерв в строке позиции (этап 0з, static/doc_reserves.js: docResFill) */
.docres-cellbox { display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: center; }
.docres-chip { padding: 2px 8px; font-size: 13px; border: 1px solid var(--accent); border-radius: 999px; background: var(--accent-dim); color: var(--text); }
.docres-chip.dim { border-color: var(--border); background: transparent; color: var(--text-dim); }
.docres-left { font-size: 12.5px; }
.docres-cell { margin-top: 4px; }
.docres-number { width: 38px; text-align: center; }
.docres-row-pick { display: inline-grid; place-items: center; position: relative; min-width: 24px; min-height: 24px; cursor: pointer; }
.docres-row-pick input { position: absolute; margin: 0; width: 17px; height: 17px; opacity: 0; }
tr:hover > .docres-number .docres-row-pick input,
.docres-group-hover .docres-row-pick input,
.docres-selected .docres-row-pick input,
.docres-row-pick:focus-within input { opacity: 1; }
tr:hover > .docres-number .docres-row-pick > span,
.docres-group-hover .docres-row-pick > span,
.docres-selected .docres-row-pick > span,
.docres-row-pick:focus-within > span { visibility: hidden; }
tr.docres-selected > td, tr.docres-group-hover > td { background: var(--accent-dim); }
.docres-row-pick:has(input:disabled) { cursor: default; }
@media (hover: none) {
  .docres-row-pick input { opacity: 1; }
  .docres-row-pick > span { visibility: hidden; }
}
tr.docres-x > td { background: var(--surface-2); padding: 10px 14px; }
.docres-card { display: flex; flex-direction: column; gap: 8px; }
.docres-card .panel-head { padding: 0; border: 0; background: none; }
.docres-head:empty { display: none; }
.docres-head { display: flex; flex-direction: column; gap: 8px; }
.docres-head-form { padding: 0; }
.docres-head-panel { padding: 12px 16px; }
.doc-page-reshead { padding: 0; }
.docres-head > :empty { display: none; }
.docres-head-form > :not(:empty) { margin: 10px 16px; }

/* Таблицы позиций на телефоне — карточками (форма документа, правка, окно документа журнала) */
@media (max-width: 520px) {
  table.doc-cards, table.doc-cards tbody, table.doc-cards tr, table.doc-cards td { display: block; width: auto; }
  table.doc-cards thead { display: none; }
  table.doc-cards tbody tr { border-bottom: 1px solid var(--border); padding: 8px 2px; }
  table.doc-cards td { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; padding: 3px 6px;
    border: 0; text-align: right; overflow-wrap: anywhere; }
  table.doc-cards td::before { content: attr(data-label); flex: 0 0 auto; color: var(--text-dim); font-size: 12.5px; text-align: left; }
  table.doc-cards td.doc-card-name { display: block; text-align: left; font-weight: 600; }
  table.doc-cards td.doc-card-name::before, table.doc-cards td.doc-card-act::before { display: none; }
  table.doc-cards td.doc-card-no, table.doc-cards td:empty { display: none; }
  table.doc-cards td.doc-card-act { justify-content: flex-end; }
  table.doc-cards tr.docres-x td, table.doc-cards tr.doc-res-row td, table.doc-cards tr[data-ed-panel] td,
  table.doc-cards tr[data-unrec-panel] td { display: block; text-align: left; }
  table.doc-cards tr.docres-x td::before, table.doc-cards tr.doc-res-row td::before,
  table.doc-cards tr[data-ed-panel] td::before, table.doc-cards tr[data-unrec-panel] td::before { display: none; }
  table.doc-cards .docres-cellbox { justify-content: flex-end; }
  table.doc-cards input.qty { max-width: 120px; }
}

/* Снять проведение, корзина, журнал удалений (этап 0ж, выкладка 2) */
.doc-choice { display: flex; gap: 8px; align-items: center; margin: 4px 12px; }
.doc-action-fields { padding: 0; gap: 8px 14px; align-items: flex-end; }
.doc-action-fields input { padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface);
  color: var(--text); font: inherit; }
.doc-gone { margin-top: 8px; }
.primary-btn.danger:not(:disabled) { background: var(--warn); border-color: var(--warn); color: #fff; }
td.doc-need-target select { border-color: var(--warn); }   /* перемещение между ячейками: «на склад» не выбрана */
/* комментарий документа — под таблицей позиций, как в МойСклад */
.doc-comment-box { padding: 10px 16px; }
.doc-comment-field { display: flex; flex-direction: column; gap: 4px; font-size: 13px; color: var(--text-dim); }
.doc-comment-field textarea { width: 100%; min-height: 84px; resize: vertical; font: inherit; font-size: 15px; color: var(--text);
  padding: 8px 10px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); }
.doc-comment-field textarea:focus { border-color: var(--accent); outline: none; }
/* шапка документа как в МойСклад (п. 5): одна сетка, подписи мелко, без пустых отступов */
.doc-head-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 10px 16px; align-items: end; }
.doc-head-grid .filter { min-width: 0; }
.doc-head-grid .filter > span { display: flex; gap: 8px; align-items: baseline; font-size: 12px; min-height: 18px; }
.doc-head-grid .doc-now { padding: 0 6px; font-size: 12px; min-height: 0; line-height: 18px; }
/* поля шапки — как «Статус» (.filter select): фон и рамка темы, а не белый фон браузера */
.doc-head-grid input { width: 100%; box-sizing: border-box; background: var(--bg); border: 1px solid var(--border);
  color: var(--text); font-family: var(--font-ui); font-size: 14px; padding: 7px 10px; border-radius: 8px; }
/* только просмотр (проведённый документ, шапка не прочитана из МойСклад) — видно сразу */
.doc-head-grid input:disabled, .doc-head-grid select:disabled, .doc-comment-field textarea:disabled {
  background: var(--surface-2); color: var(--text-dim); cursor: default; }
.doc-head-grid .doc-fixed { padding: 8px 0; }
/* значения главных полей шапки (организация, склады) — крупнее подписей: у .doc-fixed своих размеров нет,
   он берёт 12,5 px от .filter; 15 px — это +20 %; в списке выбора (.picker-btn) значение того же размера */
.doc-head-grid .doc-head-main .doc-fixed,
.doc-head-grid .doc-head-main .picker-btn { font-size: 15px; }
.doc-header > .item-meta:empty { display: none; }
.doc-pos-code { margin-top: 2px; }
@media (max-width: 520px) { .doc-head-grid { grid-template-columns: 1fr; } }
/* смена склада: строки, где ячейка поменялась, — подсвечены до перезагрузки формы */
tr.doc-row-reset td { background: var(--warn-dim); }
.doc-store-hint { margin-top: 6px; }

/* Размеры формы документа заданы ниже общих правил задачи 18. */
@media (min-width: 1280px) {
  .doc-title-row h2 { font-size: 19px; }
  #docScanInput { font-size: var(--desk-font-name-scan); }
  #docScanQty { font-size: var(--desk-font-qty-scan); }
  .doc-totals { font-size: var(--desk-font-text); }
  .doc-comment-field textarea, .doc-change-body h3 { font-size: var(--desk-font-input); }
  .docres-form input, .docres-cancel input { font-size: var(--desk-font-table); }
}
/* Предпросмотр локальной правки — внутри настольной страницы документа. */
[data-edit-plan] { margin-top: 16px; border-top: 1px solid var(--border, #ddd); padding-top: 12px; }
[data-edit-plan] .doc-inline-plan { margin-top: 12px; }
[data-edit-plan] .doc-modal-head { position: static; }
[data-edit-plan] .doc-modal-body { max-height: none; overflow: visible; }
[data-edit-plan] table { overflow-wrap: anywhere; }
[data-edit-plan] .doc-plan-scroll { overflow-x: auto; }
[data-edit-plan] .doc-change-foot { position: static; }
/* Подготовленные изменения фотографий карточки. */
.pc-photo-change { display: block; color: var(--accent, #145a91); font-size: .85rem; }
.pc-photo-staged { box-sizing: border-box; display: block; width: var(--photo-size); height: var(--photo-size);
  border: 1px solid var(--border); border-radius: 5px; object-fit: contain; }
.pc-photo-upload { display: inline-block; cursor: pointer; margin-top: 10px; }
.pc-source-choice { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: var(--photo-gap); align-items: center; cursor: pointer; }
.pc-source-choice img { box-sizing: border-box; display: block; grid-column: 1 / -1; grid-row: 1;
  width: var(--photo-size); height: var(--photo-size); border: 1px solid var(--border); border-radius: 5px; object-fit: contain; }
.pc-source-choice input[type="checkbox"] { width: 18px; height: 18px; min-height: 18px; padding: 0; margin: 0; }
.pc-source-error { margin: 0; color: var(--danger, #b42318); font-size: .85rem; }
