/* Раздел «Склады» и адресное хранение (wms.js, этап 4.1): список складов, остатки склада, зоны и ячейки, настройки
   складов - классы wh-*; места хранения (places.js, этап 4.2) - классы pl-*; компоненты - ui.css, страница отчета -
   reports.css (ro-*). Цвет - только у меток (.ui-tag), заметок состояния и кнопки основного действия: выбранная ячейка,
   открытая ячейка и выбранный чип окна места выделены рамкой цвета текста, без акцента. */

.wh-none { font-size: var(--fs-sm); color: var(--text-3); white-space: nowrap; }
.wh-list .wh-go { min-width: 44px; padding-inline: 0; justify-content: flex-end; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--text); }      /* число - кнопка без отступов: стоит в столбце вровень с нулями */
@media (min-width: 761px) and (pointer: fine) {      /* переключатель отбора - высотой с поля выбора (44 px); на телефоне и при касании кнопки сами 44 px */
  .wh-page .ro-tools .ui-seg button { min-height: 36px; }
}
.wh-page .ui-seg button[aria-pressed="true"] { background: var(--surface-2); color: var(--text); box-shadow: inset 0 0 0 1px var(--text-2); }      /* выбранный отбор - без цвета */
.wh-tab .lead .wh-item { height: auto; min-height: var(--h-sm); padding-inline: 0; font-weight: 600; text-align: left; white-space: normal; color: var(--text); }
@media (max-width: 760px) {      /* «Остатки склада» на телефоне - карточки: вне окна браузер их не раскладывает (300 строк при замедлении x4 -
  1,7 с стилей и раскладки, замер 4.3.8 ops_perf.mjs); высота до первой раскладки - карточка с колонкой «Факт» */
  .wh-tab.stack tbody tr { content-visibility: auto; contain-intrinsic-height: auto 237px; }
}
.wh-tags { display: inline-flex; flex-wrap: wrap; gap: var(--s-2); }
/* перемещения (этап 5.4): «в пути» и «ожидается» строками, метка «1С: N» под фактическим остатком */
.wh-way { display: block; }
.wh-tab .sub.wh-1c { color: var(--st-warn); }
.wh-rules { margin: var(--s-10) 0 0; }
.wh-rules h2 { margin: 0 0 var(--s-4); font-size: var(--fs-lg); }
.wh-rules ul { display: grid; gap: var(--s-3); margin: 0; padding-left: 1.2em; color: var(--text-2); }
.wh-acts { display: flex; flex-wrap: wrap; gap: var(--s-3); margin: 0 0 var(--s-6); }

/* зоны, стеллажи и ячейки */
.wh-zones { display: grid; gap: var(--s-8); }
.wh-zone .ui-card-h { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-3) var(--s-6); }
.wh-zone .ui-card-h h2 { margin: 0; font-size: var(--fs-xl); }
.wh-zone .ui-card-h .ui-btn, .wh-rack-h .ui-btn { margin-left: auto; }
.wh-zn { font-size: var(--fs-sm); color: var(--text-2); font-variant-numeric: tabular-nums; }
.wh-rack + .wh-rack { margin-top: var(--s-8); padding-top: var(--s-8); border-top: 1px solid var(--line); }
/* стеллажи вне окна браузер не раскладывает (решение 19b): до первой раскладки и у стеллажа без ячеек (дорисовка,
   wms.js) высота - оценка по числу ячеек --wh-n, столбцам --wh-cols и высоте ряда --wh-row (wms.js меряет первый
   построенный стеллаж); ошибка оценки сдвигает только полосу прокрутки */
.wh-zones { --wh-cols: 6; --wh-row: 52px; }
.wh-rack { content-visibility: auto; contain-intrinsic-height: auto calc((var(--wh-n, 1) / var(--wh-cols) + 0.5) * var(--wh-row) + 48px); }
.wh-rack[data-lazy] .wh-cells { min-height: calc((var(--wh-n, 1) / var(--wh-cols) + 0.5) * var(--wh-row)); }
.wh-rack-h { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-5); margin: 0 0 var(--s-4); }
.wh-cells { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 136px), 1fr)); gap: var(--s-3); }
.wh-cell { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-1) var(--s-4); min-height: 44px; padding: var(--s-3) var(--s-5);
  background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); user-select: none; }
.wh-cbl { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 32px; height: 32px; margin: -6px; cursor: pointer; }      /* флажок с полем касания больше самого флажка */
.wh-cb { flex: none; width: 20px; height: 20px; margin: 0; cursor: pointer; accent-color: var(--text-2); }      /* флажок браузера без акцента, как в каталоге (items.css) */.wh-cell:hover { background: var(--hover); }
.wh-cell:has(input:checked) { background: var(--surface-2); border-color: var(--text-2); }
.wh-cell.hit { border-color: var(--text); box-shadow: inset 0 0 0 1px var(--text); }      /* ячейка из ссылки (QR этикетки) */
.wh-addr { font-family: var(--mono); font-weight: 600; font-variant-numeric: tabular-nums; white-space: nowrap; }
.wh-cell .wh-addr { flex: 1 1 auto; min-height: 32px; padding: 0 var(--s-1); background: none; border: 0; border-radius: var(--r-sm); color: var(--text);
  font-size: inherit; text-align: left; text-decoration: underline; text-decoration-color: var(--line-2); text-underline-offset: 3px; cursor: pointer; }      /* кнопка адреса открывает ячейку (этап 4.2) */
.wh-cell .wh-addr:hover { text-decoration-color: var(--text-2); }
.wh-cell .wh-addr:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }
.wh-n { flex-basis: 100%; padding-left: calc(20px + var(--s-4)); font-size: var(--fs-xs); color: var(--text-2); }

/* окна: генератор, этикетки, свойства, порядок, отказ удаления */
.wh-dlg { display: grid; gap: var(--s-6); }
.wh-dlg p { margin: 0; }
.wh-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 120px), 1fr)); gap: var(--s-4) var(--s-6); }
.wh-pair { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-4) var(--s-6); }      /* «с» и «по» - в одной строке и на телефоне */
.wh-gen { min-height: 1.5em; font-variant-numeric: tabular-nums; }
.wh-odd { font-weight: 600; color: var(--text); }
.wh-lbprev { display: block; width: 100%; height: 300px; background: #e9ecf1; border: 1px solid var(--line); border-radius: var(--r-lg); }
.wh-order { display: grid; max-height: 55dvh; margin: 0; padding: 0; overflow: auto; list-style: none; counter-reset: wo;
  border: 1px solid var(--line); border-radius: var(--r-md); }
.wh-order li { display: flex; align-items: center; gap: var(--s-4); min-height: 44px; padding: var(--s-2) var(--s-2) var(--s-2) var(--s-5);
  border-bottom: 1px solid var(--line); counter-increment: wo; }
.wh-order li:last-child { border-bottom: 0; }
.wh-order li::before { content: counter(wo) "."; min-width: 2em; color: var(--text-3); font-variant-numeric: tabular-nums; }
.wh-on { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.wh-ob { display: inline-flex; gap: var(--s-1); }
.wh-busy { margin: var(--s-4) 0 0; }
.wh-busy td .ui-tag { margin-left: var(--s-3); }

/* места хранения (places.js, этап 4.2): окно места, блок «Хранение» карточки, карточка ячейки, окно размещения */
.pl-dlg { display: grid; gap: var(--s-5); }
.pl-dlg p { margin: 0; }
.pl-code { font-family: var(--mono); font-size: var(--fs-sm); color: var(--text-2); }
.pl-addr { font-family: var(--mono); font-weight: 600; font-variant-numeric: tabular-nums; white-space: nowrap; }
.pl-now { min-height: 1.4em; color: var(--text-2); }
.pl-chips { display: grid; gap: var(--s-2); }
.pl-ch { font-size: var(--fs-sm); font-weight: 600; color: var(--text-2); }
.pl-row { display: flex; flex-wrap: wrap; gap: var(--s-2); max-height: 40dvh; overflow: auto; }
.pl-chip { min-height: var(--h-sm); padding: 0 var(--s-4); background: var(--surface); border: 1px solid var(--line-2); border-radius: var(--r-md);
  color: var(--text); font-family: var(--mono); font-weight: 600; font-variant-numeric: tabular-nums; cursor: pointer; }
.pl-chip:hover { background: var(--hover); }
.pl-chip[aria-pressed="true"] { background: var(--surface-2); border-color: var(--text); box-shadow: inset 0 0 0 1px var(--text); }      /* выбранная ячейка - без цвета */
.pl-chip:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; }
.pl-more { justify-self: start; }
.pl-card .pl-st + .pl-st { margin-top: var(--s-6); padding-top: var(--s-6); border-top: 1px solid var(--line); }
.pl-card h4 { margin: 0 0 var(--s-3); font-size: var(--fs-md); }
.pl-card h4 small { font-weight: 400; color: var(--text-2); }
.pl-q { margin-left: var(--s-3); font-size: var(--fs-sm); font-weight: 400; color: var(--text-2); font-variant-numeric: tabular-nums; }
.pl-list { display: grid; gap: var(--s-3); margin: 0 0 var(--s-4); padding: 0; list-style: none; }
.pl-p { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-4); }
.pl-sub { font-size: var(--fs-sm); color: var(--text-2); }
.pl-acts { display: inline-flex; flex-wrap: wrap; gap: var(--s-2); margin-left: auto; }
.pl-none { margin: 0 0 var(--s-4); }
.pl-wait { margin: 0 0 var(--s-6); }
.pl-wait p { margin: 0 0 var(--s-3); }
.pl-cell { margin: 0 0 var(--s-8); }
.pl-cell .ui-card-h { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2) var(--s-6); }
.pl-cell h2 { margin: 0; font-size: var(--fs-xl); }
.pl-cell .ui-card-h .ui-btn { margin-left: auto; }
.pl-cs { font-size: var(--fs-sm); color: var(--text-2); }
.pl-cell .pl-sub { margin: 0 0 var(--s-4); }
.pl-cacts { margin-top: var(--s-6); }
.pl-tab .lead .pl-name { height: auto; min-height: var(--h-sm); padding-inline: 0; font-weight: 600; text-align: left; white-space: normal; color: var(--text); }
.pl-log { display: grid; gap: var(--s-2); max-height: 40dvh; margin: 0; padding: 0; overflow: auto; list-style: none; }
.pl-l { padding: var(--s-2) var(--s-4); border-left: 3px solid var(--line-2); font-size: var(--fs-sm); overflow-wrap: anywhere; }
.pl-l.ok { border-left-color: var(--st-ok); }
.pl-l.bad { border-left-color: var(--st-bad); }
.pl-l.info { border-left-color: var(--st-info); }
.pl-l.wait { color: var(--text-2); }      /* скан в очереди либо записывается */
.pl-pick { margin-top: var(--s-2); }
.pl-np .pl-cbc { width: 44px; padding-block: 0; text-align: center; }      /* флажок строки «Без места» */
.pl-cbl { display: inline-flex; align-items: center; justify-content: center; min-width: 44px; min-height: 44px; cursor: pointer; }      /* зона нажатия флажка */
.pl-arch { font-size: var(--fs-sm); }
@media (pointer: coarse), (max-width: 760px) {
  .pl-chip { min-height: 44px; }
  /* флажок и кнопка адреса ячейки - 44 px (сквозной критерий 5): поле флажка - в отступе ячейки слева, справа - вплотную
     к адресу, без наложения */
  .wh-cbl { width: 44px; height: 44px; margin: -12px 0 -12px -10px; }
  .wh-cell .wh-addr { min-height: 44px; }
  .wh-n { padding-left: calc(34px + var(--s-4)); }
}

@media (max-width: 760px) {
  .wh-lbprev { height: 240px; }
  .wh-mode { flex: 1 1 100%; }      /* отбор «С остатком» и «Минус» - своей строкой во всю ширину */
  .wh-mode .ui-seg { display: flex; width: 100%; }
  .wh-cells { grid-template-columns: repeat(auto-fill, minmax(min(100%, 120px), 1fr)); }
}
