/* «Склад» (warehouse.js): только переменные темы app.css, без style-атрибутов (CSP). app.css красит p в muted -
   цвет текста задаём явно там, где он нужен. Синего в app.css нет, а FBW в МоёмСкладе синяя («Плановая», msg 21659):
   свой --wh-blue в обеих темах (контраст текста на плашке не ниже 4.5). */
.warehouse { --wh-blue: #2f6aa6; --wh-blue-soft: #e6eef7; --wh-quiet: #5f665c; --wh-over: #99601f; }
html[data-theme=dark] .warehouse { --wh-blue: #9cc3ea; --wh-blue-soft: #233142; --wh-quiet: var(--muted); --wh-over: var(--orange); }
/* --wh-quiet и --wh-over (02.11, опровергатель экрана): --muted на фоне светлой темы 4,1-4,36, --orange на белом 3,8 при норме
   4,5; свои тихий и «излишек» дают 5,1-5,4 и 4,6-5,2 (на --bg, --surface, --orange-soft), тёмная тема - цвета темы (≥ 6,4) */

/* ── шапка раздела (msg 21634) ── */
.warehouse .wh-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
/* меню группами, как меню МоегоСклада (обход 19.10): группы значками, активная залита; вкладки группы текстом под ними */
.warehouse .wh-groups { display: flex; flex-wrap: wrap; gap: 4px; margin: 0 0 2px; }
.warehouse .wh-group { display: inline-flex; align-items: center; gap: 7px; padding: 7px 12px; border-radius: 8px; color: var(--muted); white-space: nowrap; font-weight: 500; }
.warehouse .wh-group:hover { color: var(--text); background: var(--green-soft); }
.warehouse .wh-group.on { color: var(--green); background: var(--green-soft); font-weight: 600; }
.warehouse .wh-tabs { display: flex; flex-wrap: wrap; gap: 2px 18px; margin: 0 0 10px; padding: 0 4px; border-bottom: 1px solid var(--line); }
.warehouse .wh-tab { display: inline-flex; align-items: center; padding: 7px 0 6px; margin-bottom: -1px; color: var(--muted); border-bottom: 2px solid transparent; white-space: nowrap; font-size: 13px; }
.warehouse .wh-tab:hover { color: var(--text); }
.warehouse .wh-tab.on { color: var(--text); border-bottom-color: var(--green); font-weight: 600; }
.warehouse .wh-lead { margin: 4px 0 10px; font-size: 13px; }
.warehouse .wh-ico { width: 16px; height: 16px; flex: none; }
.warehouse .wh-trial { color: var(--text); background: var(--orange-soft); border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; margin: 0 0 10px; font-size: 13px; }
.warehouse .wh-lock { margin: 0 0 8px; font-size: 12px; }
.warehouse .wh-howto { margin: 18px 0 4px; }
.warehouse .wh-howto summary { cursor: pointer; color: var(--muted); font-size: 12px; }
.warehouse .wh-howto p { color: var(--muted); font-size: 13px; margin: 6px 0 0; max-width: 760px; }

/* ── общее ── */
.warehouse .wh-muted { color: var(--muted); }
.warehouse .wh-error { color: var(--red); margin: 10px 0; }
.warehouse .wh-total { color: var(--text); margin: 10px 0; }
.warehouse .wh-note { color: var(--muted); font-size: 12px; margin: 2px 0 8px; }
.warehouse .wh-empty { color: var(--muted); padding: 18px; margin: 8px 0; text-align: center; background: var(--surface); border: 1px dashed var(--line); border-radius: 10px; }
.warehouse .wh-pre { white-space: pre-wrap; }
.warehouse .wh-nowrap { white-space: nowrap; }
.warehouse .wh-debt { color: var(--red); font-weight: 600; }
.warehouse .wh-over { color: var(--green); font-weight: 600; }
.warehouse .wh-minus { color: var(--red); }
/* «Заявлено поставщиком» / «Принято ФФ» (msg 22036): расхождение - недостача красным, излишек оранжевым, ноль приглушён */
.warehouse .wh-sub { display: block; font-size: 11px; line-height: 14px; color: var(--muted); font-weight: 400; white-space: nowrap; }
.warehouse .wh-diff { font-weight: 600; white-space: nowrap; }
.warehouse .wh-diff.short { color: var(--red); }
.warehouse .wh-diff.over { color: var(--wh-over); }
.warehouse .wh-diff.even { color: var(--muted); font-weight: 500; }
.warehouse .wh-pl.diff-short { background: var(--red-soft); color: var(--red); }
.warehouse .wh-pl.diff-over, .warehouse .wh-pl.diff-even { background: var(--orange-soft); color: var(--orange); }
.warehouse .wh-pl.diff-none { background: var(--green-soft); color: var(--green); }
.warehouse .wh-posbar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin: 16px 0 8px; }
.warehouse .wh-posbar .wh-h3 { margin: 0; }
.warehouse .wh-fill { padding: 5px 12px; font-size: 12px; }
.warehouse .wh-export { margin-left: auto; gap: 6px; padding: 7px 12px; font-size: 13px; }
/* Список приёмок с «Заявлено» и «Расхождением» - 11 столбцов: на компьютере «Комментарий» остаётся в кадре без
   прокрутки (сезон и комментарий сокращаются многоточием, полный текст - в подсказке) */
@media (min-width: 721px) {
  .warehouse .wh-table.wh-list-receipts th, .warehouse .wh-table.wh-list-receipts td { padding-left: 7px; padding-right: 7px; }
  .warehouse .wh-list-receipts .wh-season a { display: inline-block; max-width: 118px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; }
  .warehouse .wh-list-receipts .wh-cmt { max-width: 200px; }
}
.warehouse .wh-h3 { font-size: 14px; font-weight: 600; color: var(--text); margin: 16px 0 8px; }
.warehouse .wh-n { display: inline-block; min-width: 18px; padding: 0 6px; border-radius: 9px; background: var(--bg); border: 1px solid var(--line); color: var(--muted); font-size: 11px; font-weight: 500; line-height: 16px; text-align: center; }
.warehouse label { display: inline-flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--muted); }
.warehouse input, .warehouse select, .warehouse textarea { padding: 7px 10px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface); color: var(--text); min-width: 0; font-size: 13px; }
.warehouse textarea { width: 100%; resize: vertical; }
/* ── поля: одна сетка во всех формах «Склада» (Комрон msg 21705: «где-то больше, где-то меньше») ──
   Одна высота поля, один шаг между полями по горизонтали и вертикали, подпись над полем одним шрифтом (12/16,
   приглушённая), значение 13 px. До правки ряд подписей ломался: поля дата, список и строка разной высоты, а сетка
   прижимала их по низу. Замер в DOM - /tmp/wh_redo/fields_*.json (measure_fields.py). */
.warehouse { --wh-h: 36px; --wh-gx: 16px; --wh-gy: 12px; }
.warehouse .wh-fields { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: var(--wh-gy) var(--wh-gx); align-items: start; margin: 8px 0 14px; }
.warehouse .wh-fields > label { display: flex; flex-direction: column; gap: 4px; min-width: 0; margin: 0; font-size: 12px; line-height: 16px; color: var(--muted); }
.warehouse .wh-fields input:not([type=checkbox]), .warehouse .wh-fields select { width: 100%; max-width: none; height: var(--wh-h); margin: 0; padding: 0 10px; font-size: 13px; line-height: normal; box-sizing: border-box; }
.warehouse .wh-fields textarea { width: 100%; min-height: calc(var(--wh-h) * 2); margin: 0; padding: 8px 10px; font-size: 13px; line-height: 18px; box-sizing: border-box; }
/* фильтры, поиск и строки добавления справочников - той же высоты, что поля форм */
.warehouse .wh-panel select, .warehouse .wh-panel input, .warehouse .wh-search input, .warehouse .wh-inline input,
.warehouse .wh-inline select, .warehouse .wh-filters > label > select, .warehouse .wh-filters > label > input { height: var(--wh-h); padding: 0 10px; font-size: 13px; box-sizing: border-box; }
.warehouse .wh-inline .secondary { height: var(--wh-h); padding: 0 14px; }
.warehouse .wh-hint { color: var(--muted); font-size: 11px; line-height: 14px; }
.warehouse .wh-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 8px 0 10px; }
.warehouse .wh-actions .secondary, .warehouse .wh-primary { padding: 7px 14px; font-size: 13px; }
.warehouse .wh-primary { display: inline-flex; align-items: center; justify-content: center; gap: 8px; border: 1px solid var(--green); border-radius: 7px; font-weight: 600; background: var(--green); color: var(--bg); white-space: nowrap; cursor: pointer; }
.warehouse .wh-primary:hover { filter: brightness(1.1); }
.warehouse .wh-danger { color: var(--red); }
.warehouse .wh-link-btn { border: 0; background: none; color: var(--green); padding: 4px 6px; font-size: 12px; text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }
.warehouse .wh-check { flex-direction: row; align-items: center; gap: 6px; color: var(--text); font-size: 13px; }
.warehouse .wh-check input { accent-color: var(--green); }

/* ── плашки статуса: FBW синяя и FBS зелёная заливкой, как «Плановая» и «ФБС» в МоёмСкладе ── */
.warehouse .wh-pl { display: inline-block; margin: 0 4px 0 0; padding: 0 8px; border-radius: 10px; font-size: 11px; font-weight: 600; line-height: 19px; white-space: nowrap; vertical-align: middle; background: var(--bg); color: var(--muted); border: 1px solid transparent; }
.warehouse .wh-pl.fbw { background: var(--wh-blue); color: var(--surface); }
.warehouse .wh-pl.fbs { background: var(--green); color: var(--surface); }
.warehouse .wh-pl.draft, .warehouse .wh-pl.part { background: var(--orange-soft); color: var(--wh-over); }
.warehouse .wh-pl.paid, .warehouse .wh-pl.k-receipt, .warehouse .wh-pl.k-enter { background: var(--green-soft); color: var(--green); }
.warehouse .wh-pl.unpaid, .warehouse .wh-pl.quiet, .warehouse .wh-pl.k-move, .warehouse .wh-pl.k-sale { background: var(--bg); color: var(--muted); border-color: var(--line); }
.warehouse .wh-pl.k-shipment, .warehouse .wh-pl.k-payment { background: var(--wh-blue-soft); color: var(--wh-blue); }
.warehouse .wh-pl.k-return { background: var(--orange-soft); color: var(--orange); }
.warehouse .wh-pl.k-loss { background: var(--red-soft); color: var(--red); }

/* ── списки: строка поиска, фильтры, таблица с итогами ── */
.warehouse .wh-top { margin-top: 2px; }
.warehouse .wh-listbar { display: flex; align-items: center; justify-content: space-between; gap: 10px 16px; flex-wrap: wrap; margin: 6px 0; }
.warehouse .wh-count { color: var(--text); margin: 0; }
.warehouse .wh-search input { width: 280px; max-width: 100%; }
.warehouse .wh-filters { display: flex; flex-wrap: wrap; gap: 10px 14px; margin: 6px 0 10px; align-items: flex-end; }
.warehouse .wh-panel label { flex-direction: row; align-items: center; gap: 6px; }
.warehouse .wh-panel { background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 8px 12px; }
.warehouse .wh-period { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-right: auto; }
.warehouse .wh-dates { display: flex; align-items: center; gap: 6px; }
.warehouse .wh-dates input { padding: 5px 8px; font-size: 12px; }
/* «Фильтр» стоит в строке «Всего N · период · поиск», раскрытый блок уходит на свою строку под ней */
.warehouse .wh-filterbox { margin: 0; }
.warehouse .wh-filterbox[open] { order: 10; flex-basis: 100%; }
.warehouse .wh-search { margin-left: auto; }
.warehouse .wh-filterbox summary { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; list-style: none; padding: 5px 12px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface); color: var(--text); font-size: 12px; }
.warehouse .wh-filterbox summary::-webkit-details-marker { display: none; }
.warehouse .wh-filterbox summary::after { content: "▾"; font-size: 10px; color: var(--muted); }
.warehouse .wh-filterbox[open] summary::after { content: "▴"; }
.warehouse .wh-filterbox .wh-panel { margin: 6px 0 0; }
.warehouse .wh-clear { padding: 4px 2px; }
/* комментарий забирает остаток ширины и режется многоточием: таблица не вылезает за край */
.warehouse .wh-list td.wh-cmt-cell { width: 100%; max-width: 0; }
.warehouse .wh-list td.wh-cmt-cell .wh-cmt { display: block; max-width: 100%; }
.warehouse .wh-chip { border: 1px solid var(--line); background: var(--bg); color: var(--text); border-radius: 14px; padding: 4px 11px; font-size: 12px; line-height: 16px; cursor: pointer; }
.warehouse .wh-chip.on { background: var(--green); border-color: var(--green); color: var(--bg); }
.warehouse .wh-wrap { overflow-x: auto; background: var(--surface); border: 1px solid var(--line); border-radius: 10px; }
.warehouse .wh-table { width: 100%; border-collapse: collapse; }
.warehouse .wh-table th { font-size: 12px; font-weight: 500; color: var(--muted); text-align: left; padding: 7px 10px; border-bottom: 1px solid var(--line); white-space: nowrap; background: var(--surface); }
.warehouse .wh-table td { padding: 7px 10px; border-bottom: 1px solid var(--line); color: var(--text); vertical-align: middle; font-size: 13px; }
.warehouse .wh-table tbody tr:last-child td { border-bottom: 0; }
.warehouse .wh-table tfoot td { border-top: 2px solid var(--line); border-bottom: 0; background: var(--bg); }
.warehouse .wh-num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.warehouse .wh-table th.wh-num { text-align: right; }
/* Закреплённая шапка (msg 25073): строка заголовков липнет к верху окна (wh-fit: у обёртки нет своей прокрутки - clip держит
   скругление и не мешает sticky) или к верху прокрутки обёртки (wh-wide: таблица шире - шапка едет вбок вместе со строками).
   Фон непрозрачный (th - var(--surface)); линия под шапкой - тенью: рамка ячейки при border-collapse за шапкой не едет. */
.warehouse .wh-table thead th { position: sticky; top: 0; z-index: 3; border-bottom: 0; box-shadow: inset 0 -1px 0 var(--line); }
.warehouse .wh-wrap.wh-fit { overflow: visible; overflow: clip; }
.warehouse .wh-wrap.wh-wide { overflow: auto; max-height: calc(100vh - 16px); max-height: calc(100dvh - 16px); }
/* строка списка - одна строка, как в МоёмСкладе: склад, поставщик и сезон не переносятся; товар и комментарий - свои правила */
.warehouse .wh-list td { white-space: nowrap; }
.warehouse .wh-list td.wh-prod, .warehouse .wh-list td.wh-cmt-cell { white-space: normal; }
.warehouse .wh-sort { border: 0; background: none; padding: 0; font: inherit; color: inherit; cursor: pointer; white-space: nowrap; }
.warehouse .wh-sort:hover { color: var(--text); }
.warehouse .wh-row-link { cursor: pointer; }
.warehouse .wh-row-link:hover td { background: var(--green-soft); }
.warehouse .wh-no a { font-weight: 600; }
.warehouse .wh-clip { color: var(--muted); }
.warehouse .wh-clip .wh-ico { width: 13px; height: 13px; vertical-align: -2px; }
.warehouse .wh-cmt { display: inline-block; max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; color: var(--muted); }
.warehouse .wh-paid.paid { background: var(--green-soft); color: var(--green); }
.warehouse .wh-paid.part { background: var(--orange-soft); color: var(--orange); }
.warehouse .wh-draft td, .warehouse .wh-muted-row td { color: var(--muted); }
.warehouse .wh-legacy td { color: var(--muted); }
.warehouse .wh-size td { background: var(--bg); font-size: 13px; }
.warehouse .wh-toggle { border: 0; background: none; padding: 0 4px; color: var(--muted); }
/* поиск в шапке «Артикул» у остатков (msg 21781) - в строке заголовка. Ширина в px и max-width: none (в app.css 100%):
   иначе ячейка таблицы сжимает поле. На телефоне поле под подписью и 130 px: в строку с подписью и шире столбец раздувался
   с 106 до 277 px, и «Себестоимость за шт.» уезжала с первого экрана (опровергатель 19.10) */
.warehouse .wh-thfind { display: inline-block; margin-left: 12px; vertical-align: middle; }
.warehouse .wh-thfind input { width: 260px; max-width: none; height: 30px; padding: 0 10px; font-size: 13px; font-weight: 400; }
.warehouse .wh-stock td.wh-none { text-align: center; color: var(--muted); padding: 18px; }

/* ── открытый документ и карточки ── */
.warehouse .wh-docbar { display: flex; align-items: center; gap: 8px 16px; flex-wrap: wrap; margin: 2px 0 6px; }
.warehouse .wh-back { white-space: nowrap; }
.warehouse .wh-pager { display: inline-flex; align-items: center; gap: 6px; }
.warehouse .wh-arrow { padding: 4px 6px; line-height: 0; }
.warehouse .wh-arrow.off { opacity: .4; }
.warehouse .wh-changed { margin: 0 0 0 auto; font-size: 12px; color: var(--muted); }
.warehouse .wh-changed b { color: var(--text); font-weight: 500; }
.warehouse .wh-dochead { display: flex; align-items: center; gap: 8px 12px; flex-wrap: wrap; margin: 4px 0 6px; }
.warehouse .wh-dochead h2 { margin: 0; color: var(--text); font-size: 20px; }
.warehouse .wh-from { font-weight: 400; color: var(--muted); }
.warehouse .wh-pls { display: inline-flex; flex-wrap: wrap; gap: 4px; }
.warehouse .wh-fieldset { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 4px 24px; margin: 6px 0 10px; padding: 8px 12px; background: var(--surface); border: 1px solid var(--line); border-radius: 10px; }
.warehouse .wh-field { display: grid; grid-template-columns: 118px minmax(0, 1fr); gap: 8px; align-items: baseline; padding: 6px 0; color: var(--text); font-size: 13px; line-height: 18px; }
.warehouse .wh-field > span { color: var(--muted); font-size: 12px; line-height: 16px; }
.warehouse .wh-subtabs { display: flex; gap: 2px; border-bottom: 1px solid var(--line); margin: 10px 0; overflow-x: auto; scrollbar-width: none; }
.warehouse .wh-subtabs::-webkit-scrollbar { display: none; }
.warehouse .wh-subtabs a { padding: 7px 12px; color: var(--muted); border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap; }
.warehouse .wh-subtabs a.on { color: var(--text); border-bottom-color: var(--green); font-weight: 600; }
.warehouse .wh-prod { min-width: 260px; }
.warehouse .wh-pname { color: var(--muted); }
/* Баркод размера под артикулом и названием (msg 25063): своей строкой, моноширинно, --wh-quiet (контраст не ниже 4,5 в обеих
   темах); код - кнопка «скопировать» без рамки, перенос между кодами, не внутри кода; поле нажатия выше строки на 3px */
.warehouse .wh-bc { display: block; margin-top: 1px; color: var(--wh-quiet); font: 12px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; white-space: normal; letter-spacing: 0; }
.warehouse .wh-bc-copy { margin: -3px 0; padding: 3px 0; border: 0; border-radius: 3px; background: none; color: inherit; font: inherit; white-space: nowrap; cursor: copy; }
.warehouse .wh-bc-copy:hover { color: var(--text); text-decoration: underline dotted; text-underline-offset: 3px; }
.warehouse .wh-prod > .wh-bc { padding-left: 30px; }   /* под текстом артикула: фото .thumb.sm 24 px + отступ 6 px */
.warehouse .wh-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
/* «Размеры и привязка к карточке WB»: баркод в строке размера, не отдельной строкой */
.warehouse .wh-bind .wh-bc { display: inline; margin: 0 6px; }
/* найдено по баркоду: размер подсвечен (строку «Остатков» экран раскрыл сам) */
.warehouse .wh-size.wh-codehit td { background: var(--green-soft); }
.warehouse .wh-links, .warehouse .wh-filelist, .warehouse .wh-history { list-style: none; padding: 0; margin: 0; background: var(--surface); border: 1px solid var(--line); border-radius: 10px; }
.warehouse .wh-links li, .warehouse .wh-filelist li, .warehouse .wh-history li { padding: 8px 12px; border-bottom: 1px solid var(--line); color: var(--text); font-size: 13px; }
.warehouse .wh-links li:last-child, .warehouse .wh-filelist li:last-child, .warehouse .wh-history li:last-child { border-bottom: 0; }
.warehouse .wh-filelist li { display: flex; align-items: center; gap: 6px 14px; flex-wrap: wrap; }
.warehouse .wh-filelist a { display: inline-flex; gap: 6px; align-items: center; font-weight: 500; }
.warehouse .wh-history li { display: grid; grid-template-columns: 128px 140px minmax(0, 1fr); gap: 10px; }
.warehouse .wh-files { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 8px 0; font-size: 12px; }
.warehouse .wh-upload { flex-direction: row; align-items: center; gap: 8px; color: var(--text); cursor: pointer; }
.warehouse .wh-upload.busy { opacity: .6; cursor: wait; }

/* ── карточка поставщика: слева о поставщике и реквизиты, справа сводка и вкладки (msg 21665) ── */
.warehouse .wh-supgrid { display: grid; grid-template-columns: minmax(260px, 340px) minmax(0, 1fr); gap: 16px; align-items: start; }
.warehouse .wh-about, .warehouse .wh-supside .wh-supform { background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 8px 14px 10px; }
.warehouse .wh-about-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 2px 0 6px; border-bottom: 1px solid var(--line); }
.warehouse .wh-about-head h3 { font-size: 14px; color: var(--text); margin: 0; }
.warehouse .wh-about .wh-field { border-bottom: 1px solid var(--line); overflow-wrap: anywhere; }
.warehouse .wh-req { margin: 10px 0 0; }
.warehouse details.wh-req summary { cursor: pointer; color: var(--text); font-weight: 600; font-size: 13px; padding: 4px 0; }
.warehouse fieldset.wh-req { border: 1px solid var(--line); border-radius: 8px; padding: 6px 12px 10px; }
.warehouse fieldset.wh-req legend { color: var(--text); font-weight: 600; font-size: 13px; padding: 0 4px; }
.warehouse .wh-supside .wh-fields { grid-template-columns: 1fr; }
.warehouse .wh-newsup .wh-fields { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.warehouse .wh-name input { font-size: 17px; font-weight: 600; }
.warehouse .wh-newsup { max-width: 720px; }
.warehouse .wh-newsup .wh-supform { background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 12px 14px; }
.warehouse .wh-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 10px; }
.warehouse .wh-tile { background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 9px 12px; min-width: 0; }
.warehouse .wh-tile span { display: block; color: var(--muted); font-size: 12px; }
.warehouse .wh-tile b { display: block; color: var(--text); font-size: 18px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.warehouse .wh-tile small { display: block; color: var(--muted); }
.warehouse .wh-tile.debt b { color: var(--red); }
.warehouse .wh-tile.over b { color: var(--green); }
.warehouse details.wh-menu { position: relative; }
.warehouse .wh-menu summary { list-style: none; }
.warehouse .wh-menu summary::-webkit-details-marker { display: none; }
.warehouse .wh-menu summary::after { content: "▾"; font-size: 11px; }
.warehouse .wh-menu-list { position: absolute; right: 0; top: calc(100% + 4px); z-index: 5; display: flex; flex-direction: column; min-width: 170px; padding: 4px 0; background: var(--surface); border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow); }
.warehouse .wh-menu-list a { padding: 8px 14px; color: var(--text); }
.warehouse .wh-menu-list a:hover { background: var(--green-soft); color: var(--green); }

/* ── карточка товара, справочники, оплата ── */
.warehouse .wh-itemhead { display: flex; gap: 14px; align-items: center; flex-wrap: wrap; margin: 4px 0 6px; }
.warehouse .wh-itemhead h2 { margin: 0; color: var(--text); }
.warehouse .wh-itemhead p { margin: 2px 0; }
.warehouse .wh-itemhead .wh-actions { margin-left: auto; }
.warehouse .wh-refsec { margin: 0 0 18px; }
.warehouse .wh-sechead { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 6px 0 8px; }
.warehouse .wh-sechead h2 { font-size: 16px; color: var(--text); margin: 0; }
.warehouse .wh-refs2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 18px; }
.warehouse .wh-inline { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.warehouse .wh-inline input { flex: 1 1 200px; }
.warehouse .wh-recpick { display: grid; gap: 6px; margin: 10px 0; padding: 8px 12px; border: 1px solid var(--line); border-radius: 8px; }
.warehouse .wh-recpick legend { color: var(--text); font-size: 13px; padding: 0 4px; }

/* ── форма документа ── */
/* форма во всю ширину, как открытый документ: строки позиций той же длины и высоты (msg 21686) */
.warehouse .wh-form { max-width: none; }
.warehouse .wh-fields > .wh-span2 { grid-column: 1 / -1; }
/* ── позиции: одна строка для документа и формы всех видов (msg 21686), как в МоёмСкладе ──
   Высота строки одна везде: фото .thumb.sm 32 px + отступы; поля кол-ва и цены той же высоты, что текст строки. */
.warehouse .wh-pos td { height: 44px; padding: 4px 10px; }
.warehouse .wh-pos .wh-prod { min-width: 280px; }
.warehouse .wh-pos .wh-prod .art-pic { vertical-align: middle; }
.warehouse .wh-pos .wh-prod { white-space: nowrap; }
.warehouse .wh-pos .wh-pname { display: inline-block; max-width: 440px; margin-left: 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; }
.warehouse .wh-inp { width: 84px; height: 30px; padding: 3px 8px; text-align: right; font-size: 13px; font-variant-numeric: tabular-nums; }
/* цена размера - в разрядах и с копейками до 4 знаков (msg 24443): «12 345,6667» не обрезается слева */
.warehouse .wh-inp.wh-price { width: 108px; }
.warehouse .wh-x { width: 26px; height: 26px; padding: 0; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); color: var(--muted); line-height: 1; cursor: pointer; }
.warehouse .wh-x:hover { color: var(--red); border-color: var(--red); }
.warehouse .wh-pos-empty td { color: var(--muted); text-align: center; }
.warehouse .wh-poswrap { overflow: visible; }
.warehouse .wh-poswrap .wh-table { border-radius: 10px 10px 0 0; }
.warehouse .wh-addpos { position: relative; padding: 8px 10px; border-top: 1px solid var(--line); }
.warehouse .wh-addinput { width: 100%; max-width: 560px; height: 34px; }
.warehouse .wh-results { position: absolute; left: 10px; top: calc(100% - 4px); z-index: 6; width: min(560px, calc(100% - 20px)); max-height: 340px; overflow-y: auto; display: flex; flex-direction: column; background: var(--surface); border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow); }
.warehouse .wh-results:empty { display: none; }
.warehouse .wh-hit { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border: 0; border-bottom: 1px solid var(--line); background: none; color: var(--text); text-align: left; cursor: pointer; min-height: 44px; }
.warehouse .wh-hit:last-child { border-bottom: 0; }
.warehouse .wh-hit:hover, .warehouse .wh-hit:focus-visible { background: var(--green-soft); }
.warehouse .wh-hit-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text); }
.warehouse .wh-hit .wh-muted { flex: none; font-size: 12px; }
.warehouse .wh-table .art-pic, .warehouse .wh-hit .art-pic { gap: 0; }

/* ── телефон: вкладки одной строкой, списки карточками (подпись поля из data-label), карточки друг под другом ── */
@media (max-width: 720px) {
  .warehouse .wh-tabs, .warehouse .wh-groups { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; }
  .warehouse .wh-tabs::-webkit-scrollbar, .warehouse .wh-groups::-webkit-scrollbar { display: none; }
  .warehouse .wh-group { padding: 6px 10px; }
  .warehouse .wh-tabs { gap: 2px 16px; }
  .warehouse .wh-filters label { flex: 1 1 140px; }
  .warehouse .wh-fields, .warehouse .wh-newsup .wh-fields { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--wh-gy) 12px; }
  .warehouse .wh-supside .wh-fields { grid-template-columns: 1fr; }
  .warehouse .wh-filters select { max-width: none; width: 100%; }
  .warehouse .wh-export { margin-left: 0; flex: 1 1 100%; }
  .warehouse .wh-search { flex: 1 1 100%; }
  .warehouse .wh-search input { width: 100%; }
  .warehouse .wh-thfind { display: block; margin: 6px 0 0; }
  .warehouse .wh-thfind input { width: 130px; }
  .warehouse .wh-pos td { height: auto; }
  .warehouse .wh-pos .wh-prod { min-width: 0; }
  .warehouse .wh-addinput { max-width: none; }
  .warehouse .wh-changed { margin-left: 0; flex-basis: 100%; }
  .warehouse .wh-dochead h2 { font-size: 17px; }
  .warehouse .wh-field { grid-template-columns: 104px minmax(0, 1fr); }
  .warehouse .wh-supgrid { grid-template-columns: 1fr; }
  .warehouse .wh-history li { grid-template-columns: 1fr; gap: 2px; }
  .warehouse .wh-refs2 { grid-template-columns: 1fr; }
  .warehouse .wh-itemhead .wh-actions { margin-left: 0; }
  .warehouse .wh-wrap:has(.wh-list) { overflow: visible; background: none; border: 0; }
  .warehouse .wh-list, .warehouse .wh-list tbody, .warehouse .wh-list tfoot, .warehouse .wh-list tr { display: block; width: 100%; }
  .warehouse .wh-list thead { display: none; }
  .warehouse .wh-list tr { background: var(--surface); border: 1px solid var(--line); border-radius: 10px; padding: 8px 12px; margin: 0 0 8px; }
  /* подпись поля обтекается слева, значение (из нескольких кусков: дата и время, плашка и номер) - одной строкой справа */
  .warehouse .wh-list td { display: block; overflow: hidden; padding: 3px 0; border: 0; text-align: right; white-space: normal; }
  .warehouse .wh-list td::before { content: attr(data-label); float: left; margin-right: 12px; color: var(--muted); font-size: 12px; text-align: left; }
  .warehouse .wh-list td.wh-no { font-size: 15px; text-align: left; padding-bottom: 5px; }
  .warehouse .wh-list td.wh-no::before, .warehouse .wh-list tfoot td:first-child::before { content: none; }
  .warehouse .wh-list td.wh-prod { text-align: left; }
  .warehouse .wh-list td.wh-cmt-cell { width: auto; max-width: none; }
  .warehouse .wh-list td.wh-cmt-cell .wh-cmt { display: inline; }
  .warehouse .wh-pos td[data-label="№"] { display: none; }
  .warehouse .wh-pos .wh-prod { white-space: normal; }
  .warehouse .wh-pos .wh-pname { display: inline; max-width: none; white-space: normal; }
  .warehouse .wh-prod > .wh-bc { padding-left: 0; }   /* на телефоне название переносится от края - баркод под ним */
  .warehouse .wh-search { margin-left: 0; }
  .warehouse .wh-list td.wh-prod::before { content: none; }
  .warehouse .wh-period { margin-right: 0; }
  .warehouse .wh-panel label { flex: 1 1 140px; flex-direction: column; align-items: stretch; }
  .warehouse .wh-list td.wh-foot-empty, .warehouse .wh-list td:empty { display: none; }
  .warehouse .wh-list td.wh-paid.paid, .warehouse .wh-list td.wh-paid.part { padding: 3px 6px; border-radius: 6px; }
  .warehouse .wh-list tfoot tr { background: var(--bg); }
  /* «Итого» - карточка как у строки: заголовок слева, без линий между полями (линия tfoot с компьютера сильнее border: 0 выше) */
  .warehouse .wh-list tfoot td { border-top: 0; }
  .warehouse .wh-list tfoot td[data-label="Итого"] { font-size: 15px; text-align: left; padding-bottom: 5px; }
  .warehouse .wh-list tfoot td[data-label="Итого"]::before { content: none; }
  .warehouse .wh-list .wh-cmt { white-space: normal; max-width: none; text-align: right; }
  .warehouse .wh-list .wh-row-link:hover td { background: none; }
}
/* отборы одним нажатием и сохранённые фильтры (как закладка МоегоСклада, обход 19.10) */
.warehouse .wh-sep { width: 1px; height: 20px; margin: 0 4px; background: var(--line); }
.warehouse .wh-saved summary { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; font-size: 12px; cursor: pointer; }
.warehouse .wh-saved-list { left: 0; right: auto; min-width: 280px; padding: 6px 0; }
.warehouse .wh-saved-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 4px 12px; }
.warehouse .wh-saved-row a { padding: 4px 0; color: var(--text); }
.warehouse .wh-saved-new { display: flex; gap: 6px; padding: 8px 12px 4px; border-top: 1px solid var(--line); }
.warehouse .wh-saved-new input { flex: 1 1 auto; height: var(--wh-h); padding: 0 10px; font-size: 13px; }
.warehouse .wh-saved-new .secondary { height: var(--wh-h); padding: 0 12px; }
.warehouse .wh-saved-hint { margin: 6px 12px; font-size: 12px; }
/* «Обороты»: в ячейке штуки и под ними себестоимость */
.warehouse .wh-turn .wh-sub { display: block; color: var(--muted); font-size: 11px; font-weight: 400; }
/* «История» со значениями (msg 21804): под фразой записи - было -> стало по полям и строки документа по размерам; в
   «Журнале изменений» и у чужой сущности (оплата в истории поставщика) строка подписана объектом-ссылкой. Вложенный
   список не наследует сетку и линии строки истории. */
.warehouse .wh-hbody { min-width: 0; overflow-wrap: anywhere; }
.warehouse .wh-hobj { font-weight: 600; margin-right: 4px; }
.warehouse .wh-history .wh-changes { list-style: none; margin: 4px 0 0; padding: 0; background: none; border: 0; }
.warehouse .wh-history .wh-changes li { display: block; padding: 1px 0; border: 0; font-size: 12px; line-height: 17px; color: var(--text); }
.warehouse .wh-ch-l { color: var(--muted); }
.warehouse .wh-ch-l::after { content: ':'; margin-right: 4px; }
.warehouse .wh-jfilters { align-items: center; }
.warehouse .wh-bind { margin: 10px 0 4px; }
.warehouse .wh-bind .wh-links li { display: block; }
.warehouse .wh-bind .wh-inline { margin: 8px 0 4px; }
.warehouse .wh-bindcard { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; padding: 6px 0; border-top: 1px solid var(--line); }
/* поле, которое правкой не меняется (связь автодокумента с поставкой WB), видно сразу */
.warehouse .wh-fields input:disabled, .warehouse .wh-fields select:disabled { color: var(--muted); background: var(--bg); }
/* «Сверка с ФФ» (warehouse_ff.py, msg 21901): строка размера, «Почему» раскрывает статьи разницы под строкой */
.warehouse .wh-ff .wh-ffsz { padding-left: 26px; font-weight: 600; }
.warehouse .wh-ff .wh-ffcause { max-width: 260px; white-space: normal; }
/* строки «Склада» в списках не переносятся (.wh-list td nowrap), а статьи причины - фразы: переносим */
.warehouse .wh-ff .wh-ffwhyrow td { white-space: normal; }
.warehouse .wh-ff .wh-sub { display: block; color: var(--muted); font-size: 11px; font-weight: 400; }
.warehouse .wh-ffwhy { border: 0; background: none; padding: 0; margin: 0; color: var(--text); font: inherit; font-size: 13px; text-align: left; cursor: pointer; text-decoration: underline dotted; text-underline-offset: 3px; }
.warehouse .wh-ffwhy:hover { color: var(--green); }
.warehouse .wh-ffwhyrow td { background: var(--surface); padding: 6px 12px 10px 26px; }
.warehouse .wh-ffparts { list-style: none; margin: 0; padding: 0; }
.warehouse .wh-ffparts li { display: grid; grid-template-columns: 52px minmax(0, 1fr); gap: 10px; padding: 3px 0; font-size: 13px; line-height: 18px; color: var(--text); }
.warehouse .wh-ffparts b { text-align: right; font-variant-numeric: tabular-nums; }
/* текст плашек - var(--text): оранжевый и красный на своих мягких фонах дают 3,4 и 4,4 (нужно 4,5), цвет несёт полоса */
.warehouse .wh-ffstale { margin: 8px 0; padding: 8px 12px; border-radius: 8px; border-left: 3px solid var(--red); background: var(--red-soft); color: var(--text); }
.warehouse .wh-fffail { margin: 8px 0; padding: 8px 12px; border-radius: 8px; border-left: 3px solid var(--orange); background: var(--orange-soft); color: var(--text); }
.warehouse .wh-fftiles { margin: 10px 0 12px; }
@media (max-width: 720px) {
  .warehouse .wh-ff .wh-ffsz { padding-left: 0; font-size: 14px; text-align: left; }
  .warehouse .wh-ff .wh-ffcause { max-width: none; }
  .warehouse .wh-ff .wh-ffwhyrow td { padding: 4px 0; text-align: left; }
  .warehouse .wh-ff .wh-ffwhyrow td::before { content: none; }
  .warehouse .wh-ffparts li { grid-template-columns: 44px minmax(0, 1fr); }
}
/* «Сверка с ФФ»: комментарии к позиции и инвентаризация (warehouse_inventory.py, msg 24994, 25002, 25005). Сводка
   комментария - одна строка под размером (тихий текст, многоточие), разбор позиции - «Почему» и «Комментарии» рядом
   (на телефоне друг под другом). Строка подтверждения проведения - под кнопками, цвет несёт полоса, текст - var(--text). */
.warehouse .wh-ffact { margin: 2px 0 12px; }
.warehouse .wh-ffsz .wh-pl { margin-left: 6px; }
.warehouse .wh-ffnote { display: block; max-width: 340px; margin: 3px 0 0; padding: 0; border: 0; background: none; color: var(--wh-quiet); font: inherit; font-size: 12px; font-weight: 400; line-height: 16px; text-align: left; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-decoration: underline dotted; text-underline-offset: 3px; }
.warehouse .wh-ffnote:hover { color: var(--green); }
.warehouse .wh-ffnote .wh-ico { width: 13px; height: 13px; margin-right: 4px; vertical-align: -2px; }
.warehouse .wh-ffdetail { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px 28px; align-items: start; }
.warehouse .wh-ffdetail > :only-child { grid-column: 1 / -1; max-width: 760px; }
.warehouse .wh-h4 { margin: 2px 0 6px; font-size: 13px; font-weight: 600; color: var(--text); }
/* «Почему минус в остатках» (Комрон msg 25146): разбор ушёл в Котопульта, в раскрытии минуса - подсказка-вход в кота */
.warehouse .wh-minushint { grid-column: 1 / -1; margin: 6px 0 0; padding: 8px 12px; border-radius: 8px; border-left: 3px solid var(--wh-blue); background: var(--wh-blue-soft); color: var(--text); }
.warehouse .wh-ffnotelist { list-style: none; margin: 0 0 6px; padding: 0; }
.warehouse .wh-ffnotelist li { padding: 6px 0; border-top: 1px solid var(--line); font-size: 13px; line-height: 18px; color: var(--text); }
.warehouse .wh-ffnotelist li:first-child { border-top: 0; padding-top: 0; }
.warehouse .wh-ffnotelist small { display: block; }
.warehouse .wh-ffnote-form textarea { width: 100%; min-height: 56px; font: inherit; font-size: 13px; }
.warehouse .wh-ffnote-form .wh-actions { margin: 6px 0 0; }
.warehouse .wh-inv .wh-invnote { width: 220px; text-align: left; }
.warehouse .wh-inv .wh-invnotecell { white-space: normal; min-width: 160px; }
.warehouse .wh-invpick { display: inline-flex; align-items: center; gap: 8px; margin: 0 0 8px; font-size: 13px; color: var(--muted); }
.warehouse .wh-invpick select { max-width: 360px; }
.warehouse .wh-invask { margin: 8px 0 10px; padding: 10px 12px; border-radius: 8px; border-left: 3px solid var(--wh-blue); background: var(--wh-blue-soft); color: var(--text); }
.warehouse .wh-invask p { margin: 0 0 6px; }
.warehouse .wh-invask label { display: block; color: var(--text); }
.warehouse .wh-invask input { display: block; width: min(460px, 100%); margin-top: 6px; }
.warehouse .wh-pl.pending, .warehouse .wh-pl.k-inventory { background: var(--wh-blue-soft); color: var(--wh-blue); }
@media (max-width: 720px) {
  .warehouse .wh-ffdetail { grid-template-columns: minmax(0, 1fr); }
  .warehouse .wh-ffdetail > :only-child { max-width: none; }
  .warehouse .wh-ffnote { max-width: none; white-space: normal; }
  .warehouse .wh-inv .wh-invnote { width: 100%; }
  .warehouse .wh-invpick { display: flex; flex-direction: column; align-items: stretch; }
  .warehouse .wh-invpick select { max-width: none; }
}
/* контраст и длинные слова (опровергатель экрана 02.11): app.css красит <p> в --muted - у строки подтверждения свой цвет;
   ссылка на акт без пробелов переносится, а не раздувает таблицу сверки; на телефоне кнопки во всю ширину */
.warehouse .wh-invask p, .warehouse .wh-invask label { color: var(--text); }
.warehouse .wh-ffnotelist .wh-muted, .warehouse .wh-ffact .wh-hint, .warehouse .wh-ffnote-form .wh-hint,
.warehouse #wh-invform .wh-hint, .warehouse .wh-ffnotes > .wh-muted { color: var(--wh-quiet); }
.warehouse .wh-ffdetail > * { min-width: 0; }
.warehouse .wh-ffnotelist li, .warehouse .wh-ffnote, .warehouse .wh-inv .wh-invnotecell, .warehouse .wh-ffparts span { overflow-wrap: anywhere; }
@media (max-width: 720px) {
  .warehouse .wh-ffact .wh-primary, .warehouse #wh-invform > .wh-actions > .wh-primary, .warehouse #wh-invform > .wh-actions > .secondary,
  .warehouse .wh-invask .wh-actions > button, .warehouse .wh-invacts > * { flex: 1 1 100%; justify-content: center; text-align: center; }
}
