:root{
  --bg:#f4f6f9; --card:#ffffff; --ink:#1e293b; --muted:#64748b;
  --line:#e5e9f0; --accent:#0ea5a4; --accent-ink:#0b7c7b;
  --shadow:0 1px 3px rgba(16,24,40,.06), 0 1px 2px rgba(16,24,40,.04);
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;font-size:14px}

/* ---- каркас: меню слева + контент ---- */
.app{display:flex;min-height:100vh}

.sidebar{width:232px;flex-shrink:0;background:var(--card);border-right:1px solid var(--line);
  display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.side-brand{padding:18px 20px;border-bottom:1px solid var(--line);display:flex;align-items:baseline;gap:9px}
.brand-mark{font-weight:800;letter-spacing:.5px;color:var(--accent-ink);font-size:20px}
.brand-sub{color:var(--muted);font-size:13px}
.nav{padding:12px 10px;flex:1;overflow-y:auto}
.nav-group{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);padding:8px 12px 6px}
.nav-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:9px;color:var(--ink);
  text-decoration:none;font-size:14px;margin-bottom:2px}
.nav-ico{width:20px;text-align:center}
.nav-item:hover{background:#f1f5f9}
.nav-item.active{background:#e6f6f5;color:var(--accent-ink);font-weight:600}
.nav-item.soon{color:#9aa6b2;cursor:default}
.nav-item.soon:hover{background:transparent}
.nav-item.soon em{margin-left:auto;font-style:normal;font-size:10px;background:#eef1f5;color:#94a3b8;
  padding:2px 7px;border-radius:20px}
/* раскрывающийся родительский пункт (напр. «Склад») + вложенные подпункты */
.nav-parent{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:9px;color:var(--ink);
  cursor:pointer;font-size:14px;margin-bottom:2px;user-select:none}
.nav-parent:hover{background:#f1f5f9}
.nav-parent.has-active{color:var(--accent-ink);font-weight:600}
.nav-parent-label{flex:1}
.nav-caret{font-size:10px;color:#94a3b8;transition:transform .15s;flex:0 0 auto}
.nav-parent.expanded .nav-caret{transform:rotate(90deg)}
.nav-children.collapsed{display:none}
.nav-item.nav-child{padding-left:42px;font-size:13px}
.nav-logout{margin:10px;padding:9px 12px;text-align:center;color:var(--muted);text-decoration:none;
  border:1px solid var(--line);border-radius:9px;font-size:13px}
.nav-logout:hover{color:var(--ink);border-color:var(--muted)}

.main{flex:1;min-width:0;display:flex;flex-direction:column}

/* ---- панель фильтров ---- */
.filters{position:sticky;top:0;z-index:5;background:var(--card);border-bottom:1px solid var(--line);
  padding:12px 22px;display:flex;gap:14px;align-items:end;flex-wrap:wrap}
.fld{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}
.fld select{min-width:180px;max-width:260px;padding:8px 10px;border:1px solid var(--line);
  border-radius:8px;font-size:14px;color:var(--ink);background:#fff}
.fld select:focus{outline:none;border-color:var(--accent)}
.f-reset{align-self:end;padding:9px 14px;border:1px solid var(--line);background:#fff;border-radius:8px;
  color:var(--muted);font-size:13px;cursor:pointer}
.f-reset:hover{color:var(--ink);border-color:var(--muted)}

.content{padding:20px 22px 40px;max-width:1200px}
.note{background:#fff8ec;border:1px solid #fde3b3;color:#8a5a12;
  padding:10px 14px;border-radius:10px;margin-bottom:18px;font-size:13px}

/* KPI */
.kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-bottom:18px}
.kpis-sub{grid-template-columns:repeat(4,1fr)}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px;box-shadow:var(--shadow)}
.kpi-label{color:var(--muted);font-size:12px;margin-bottom:6px}
.kpi-val{font-size:24px;font-weight:700;letter-spacing:.2px}
.kpi-note{color:var(--muted);font-size:11px;margin-top:4px;min-height:14px}
.kpi-alert{cursor:pointer;transition:box-shadow .12s,transform .12s}
.kpi-alert:hover{box-shadow:0 4px 12px rgba(16,24,40,.12);transform:translateY(-1px)}
.kpi-alert.on{border-color:#f4c4c4;background:#fef6f6}
.kpi-alert.on .kpi-val{color:#b42318}

/* ряд-формула: остаток всего = на складах + к клиентам + возвраты */
.kpis-formula{display:flex;align-items:stretch;gap:10px;margin-bottom:18px;flex-wrap:wrap}
.kpis-formula .kpi{flex:1 1 150px}
.kpi-op{display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:700;
  color:#94a3b8;flex:0 0 auto;padding:0 2px}
.kpi-total{background:#e6f6f5;border-color:var(--accent)}
.kpi-total .kpi-val{color:var(--accent-ink)}

/* блок «замороженные деньги» */
.frozen-summary{font-size:13px;font-weight:600;color:#9a6b00;white-space:nowrap}
.note-sub{color:var(--muted);font-size:12px;margin:-2px 0 14px;line-height:1.4}

/* карточки */
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;
  padding:16px 18px;box-shadow:var(--shadow);margin-bottom:18px}
.card-title{font-weight:600;margin-bottom:12px;color:var(--ink)}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.card-head .card-title{margin-bottom:0}
.card-select{padding:6px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;
  font-family:inherit;color:var(--ink);background:#fff;max-width:230px}
.card-select:focus{outline:none;border-color:var(--accent)}
/* поле-поиск артикула (input+datalist) в один рост с сегментами рядом */
input.card-select{height:34px;min-width:180px}

/* блок детализации: переключатель режима + селектор артикула */
.detail-ctrls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
/* чекбокс «Показать остатки» на вкладке «Сезонность» — в один ряд с сегментами и селектором */
.seas-chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:#475569;
  white-space:nowrap;cursor:pointer;user-select:none}
.seas-chk input{cursor:pointer;margin:0}
/* ячейки «Спрос»/«Рост» с подсказкой-формулой по наведению */
.has-formula{cursor:help;text-decoration:underline dotted rgba(71,85,105,.45);text-underline-offset:3px}
/* полоса выбора года на вкладке «Сезонность» (общая для графика и таблицы) */
.seas-toolbar{margin:2px 0 12px}
.seas-hint{font-size:12px;color:#94a3b8}
.seg{display:inline-flex;background:#f1f5f9;border:1px solid var(--line);border-radius:9px;padding:3px;gap:2px}
.seg-btn{border:0;background:transparent;color:var(--muted);font-size:13px;padding:6px 14px;
  border-radius:7px;cursor:pointer;font-weight:500;white-space:nowrap}
.seg-btn:hover{color:var(--ink)}
.seg-btn.active{background:var(--card);color:var(--accent-ink);font-weight:600;box-shadow:var(--shadow)}
.detail-empty{color:var(--muted);text-align:center;padding:24px;font-size:13px}

.chart-box{position:relative;height:300px}
.chart-box.donut{height:260px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:18px}

/* ===== вкладка «Риски» — Exposure по складам ===== */
.risk-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;
  flex-wrap:wrap;margin-bottom:16px}
.risk-title{font-weight:800;letter-spacing:.4px;font-size:16px;color:var(--ink)}
.risk-sub{color:var(--muted);font-size:12.5px}
/* KPI-плитки: всего · складов · крупнейший · тёмная «концентрация» */
.risk-tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.risk-tile{border:1px solid var(--line);border-radius:12px;padding:14px 16px;background:#fbfcfe}
.rt-cap{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:6px}
.rt-val{font-size:22px;font-weight:800;color:var(--ink);line-height:1.1}
.rt-sub{font-size:12px;color:var(--muted);margin-top:5px}
/* плитка «Концентрация риска» — цвет по % (пороги Vladi): <15 зелёный · 15–20 жёлтый · >20 красный */
.risk-tile.lvl-green{background:#e9f7ef;border-color:#c6ebd5}
.risk-tile.lvl-green .rt-val{color:#0f9d6b}
.risk-tile.lvl-yellow{background:#fef6e5;border-color:#f5e1a8}
.risk-tile.lvl-yellow .rt-val{color:#b7791f}
.risk-tile.lvl-red{background:#fdecec;border-color:#f5c7c7}
.risk-tile.lvl-red .rt-val{color:#d64545}
/* колаут «крупнейшая точка риска» — ИНДИГО (намеренно вне шкалы зелёный/жёлтый/красный) */
.risk-callout{display:flex;align-items:center;justify-content:space-between;gap:20px;
  background:#eef0fc;border:1px solid #d7dbf6;border-radius:12px;padding:16px 20px;margin-bottom:18px}
.rc-text{font-size:14px;line-height:1.5;color:#2a2e4a;max-width:70ch}
.rc-num{text-align:center;flex-shrink:0}
.rc-big{font-size:30px;font-weight:800;color:#5b5bd6;line-height:1}
.rc-cap{font-size:12px;color:#6b6ea8;margin-top:4px}
/* ранжированный список складов */
.risk-list{display:flex;flex-direction:column;gap:8px}
.risk-row{display:grid;grid-template-columns:46px minmax(130px,1.5fr) minmax(90px,3fr) auto 48px;
  align-items:center;gap:14px;border:1px solid var(--line);border-radius:11px;padding:11px 16px;background:#fff}
.ch-badge{display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;
  color:#fff;border-radius:20px;padding:3px 0;width:44px}
.ch-badge.wb{background:#7c5cf0}
.ch-badge.ozon{background:#2f77e6}
.rr-name{min-width:0}
.rr-wh{font-weight:600;font-size:14px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rr-reg{font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.3px}
.rr-bar{height:9px;border-radius:6px;background:#eceaf6;overflow:hidden}
.rr-bar-fill{display:block;height:100%;border-radius:6px;background:#7c5cf0}
.rr-bar-fill.ozon{background:#2f77e6}
/* 🔥 сгоревшие склады: баннер-пометка (остаток обнулён → «Потери») + список под Exposure */
.burned-banner{display:flex;align-items:center;gap:12px;background:#fff4f0;border:1px solid #f6c6b4;
  border-left:4px solid #e0562f;border-radius:10px;padding:11px 14px;margin-bottom:12px;font-size:13px;color:#7a3418;line-height:1.4}
.burned-banner[hidden]{display:none}
.bb-fire{font-size:20px;line-height:1;flex:none}
.bb-text{flex:1}
.bb-text b{color:#c0392b}
.bb-btn{flex:none;border:1px solid #e0562f;background:#fff;color:#c0392b;border-radius:8px;
  padding:6px 12px;font-size:12.5px;font-weight:600;cursor:pointer;white-space:nowrap}
.bb-btn:hover{background:#fdeee9}
.burned-wh{margin-top:10px;border-top:1px dashed var(--line);padding-top:10px}
.burned-wh[hidden]{display:none}
.burned-wh-head{font-size:12px;font-weight:600;color:#9a4a2a;margin-bottom:8px}
.burned-wh-row{opacity:.9}
.ch-badge.burned{background:#fdece5}
.rr-bar-fill.burned{background:#e7a58f}
.rr-val{font-variant-numeric:tabular-nums;font-weight:600;font-size:14px;color:var(--ink);text-align:right;white-space:nowrap}
.rr-pct{font-variant-numeric:tabular-nums;font-size:13px;color:var(--muted);text-align:right}
#risk_note{text-align:left;padding:14px 2px 0}
@media (max-width:760px){
  .risk-tiles{grid-template-columns:1fr 1fr}
  .risk-callout{flex-direction:column;align-items:flex-start;gap:10px}
  .risk-row{grid-template-columns:40px 1fr auto;row-gap:6px}
  .risk-row .rr-bar{grid-column:1 / -1;order:5}
}

/* ===== блок «Куда грузить» (план поставок) ===== */
.supply-callout{background:#eef4ff;border-color:#d3e0f7}
.supply-callout .rc-text{color:#26324a;max-width:none}
#tbl_supply th{white-space:nowrap}
.conc-badge{display:inline-block;padding:2px 8px;border-radius:20px;font-weight:700;font-size:12px}
.conc-badge.lvl-green{background:#e9f7ef;color:#0f9d6b}
.conc-badge.lvl-yellow{background:#fef6e5;color:#b7791f}
.conc-badge.lvl-red{background:#fdecec;color:#d64545}
.act-pill{display:inline-block;padding:3px 10px;border-radius:20px;font-size:12px;font-weight:600;white-space:nowrap}
.act-refill{background:#e7f0ff;color:#2f66d0}
.act-ok{background:#e9f7ef;color:#0f9d6b}
.act-over{background:#fdecec;color:#c23b3b}
.act-none{background:#eef1f5;color:#8a95a3}
.burn-mark{font-size:12px;cursor:help}

/* ===== вкладка «🔥 Потери» ===== */
.loss-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  flex-wrap:wrap;margin-bottom:14px}
.excel-btn{border:1px solid #d7ac9c;background:#fff4f0;color:#b23c17;border-radius:9px;
  padding:8px 14px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}
.excel-btn:hover{background:#ffe9e0}
.loss-banner{background:#fff4f0;border:1px solid #f3cebf;border-radius:12px;
  padding:14px 18px;margin-bottom:12px}
.lb-big{font-size:16px;color:#7a2e12}
.lb-sub{font-size:12.5px;color:#9c5a41;margin-top:6px}
/* группа-заголовок по пожару + строка «Итого» */
#tbl_loss th.loss-grp{text-align:center;background:#fff4f0;color:#b23c17;
  border-bottom:2px solid #f0c9bb;font-size:12px}
#tbl_loss tr.loss-total{background:#f5f7fa;font-weight:700}
#tbl_loss tr.loss-total td{border-bottom:2px solid var(--line);color:var(--ink)}
#tbl_loss thead th{position:sticky;top:0;background:#f8fafc;z-index:1}
#tbl_loss thead tr:nth-child(2) th{top:31px}

/* детализация склада по клику в пончике */
#chart_wh, #chart_cat{cursor:pointer}
.wh-hint{color:var(--muted);font-size:11px;margin-top:8px;text-align:center}
.wh-detail{margin-top:12px;padding:12px 14px;background:#f8fafc;border:1px solid var(--line);border-radius:10px}
.wh-detail-title{font-weight:600;margin-bottom:6px;color:var(--accent-ink);font-size:14px}
.wh-detail-row{display:flex;gap:16px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.wh-detail-row b{color:var(--ink);font-weight:700}
.wh-arts{height:280px;overflow-y:auto;margin-top:12px;border-top:1px solid var(--line)}

/* «Структура остатков» — склады и категории должны быть строго симметричны:
   шапка одной высоты (слева селектор региона + заголовок в 2 строки при выборе),
   подсказка тоже, список артикулов фиксированной высоты → панели совпадают по уровню */
.grid2 .card-head{min-height:46px}
.grid2 .wh-hint{min-height:30px;display:flex;align-items:center;justify-content:center}
.wh-arts thead th{position:sticky;top:0;background:#f8fafc}

/* таблица */
.table-box{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line)}
th{color:var(--muted);font-weight:600;font-size:12px}
td.num,th.num{text-align:right}
td.empty{text-align:center;color:var(--muted);padding:18px}
.pill{display:inline-block;min-width:34px;text-align:center;padding:2px 8px;border-radius:20px;font-weight:600}
.pill.ok{background:#e7f7f0;color:#0b7a4b}
.pill.warn{background:#fff3d6;color:#9a6b00}
.pill.bad{background:#fde5e5;color:#b42318}
.pill.none{background:#eef1f5;color:#94a3b8}

/* статус оборачиваемости (излишки / норма / внимание / поставка) */
.status{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px;font-weight:600;white-space:nowrap}
.status.ok{background:#e7f7f0;color:#0b7a4b}
.status.warn{background:#fff3d6;color:#9a6b00}
.status.bad{background:#fde5e5;color:#b42318}
.status.none{background:#eef1f5;color:#94a3b8}

/* ширины столбцов «Оборачиваемости» зафиксированы: иначе при листании страниц
   колонки «Хватит дней» и «Статус» съезжают под ширину содержимого страницы */
#tbl_cov{table-layout:fixed}
#tbl_cov th:nth-child(1){width:130px}
#tbl_cov th:nth-child(3){width:90px}
#tbl_cov th:nth-child(4){width:85px}
#tbl_cov th:nth-child(5){width:115px}
#tbl_cov th:nth-child(6){width:160px}
#tbl_cov th:nth-child(7){width:150px}
#tbl_cov td:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cov-act{padding-left:24px}

/* сортируемый заголовок таблицы */
th.sortable{cursor:pointer;user-select:none}
th.sortable:hover{color:var(--ink)}
.sort-ind{font-size:10px;color:#94a3b8;margin-left:3px}

/* блок покрытия: фильтр по дням + постраничная навигация */
.cov-filter{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.cov-filter input{width:84px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;
  font-size:13px;color:var(--ink);background:#fff}
.cov-filter input:focus{outline:none;border-color:var(--accent)}
.cov-pager{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:14px;
  font-size:13px;color:var(--muted)}
.cov-pager button{padding:6px 13px;border:1px solid var(--line);background:#fff;border-radius:8px;
  color:var(--ink);font-size:13px;cursor:pointer}
.cov-pager button:hover:not(:disabled){border-color:var(--muted)}
.cov-pager button:disabled{opacity:.45;cursor:default}

.foot{color:var(--muted);font-size:12px;text-align:center;margin-top:24px}

/* ---- вкладки левого меню ---- */
.tab-panel[hidden]{display:none}
.filters[hidden]{display:none}   /* иначе .filters{display:flex} перебивает атрибут hidden */
.tab-stub{max-width:560px;margin:56px auto;text-align:center;background:var(--card);
  border:1px dashed #cdd5e0;border-radius:16px;padding:44px 34px;box-shadow:var(--shadow)}
.tab-stub .stub-ico{font-size:44px;line-height:1;margin-bottom:16px}
.tab-stub h2{margin:0 0 10px;font-size:20px;font-weight:700;color:var(--ink)}
.tab-stub p{margin:0 auto;max-width:420px;color:var(--muted);font-size:14px;line-height:1.55}
.tab-stub .stub-badge{display:inline-block;margin-top:18px;font-size:12px;font-weight:600;
  color:var(--accent-ink);background:#e6f6f5;padding:5px 14px;border-radius:20px}

/* login */
.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--bg)}
.login-card{background:var(--card);border:1px solid var(--line);border-radius:16px;
  box-shadow:var(--shadow);padding:34px 32px;width:320px;text-align:center}
.login-logo{font-weight:800;font-size:28px;color:var(--accent-ink);letter-spacing:.5px}
.login-sub{color:var(--muted);margin:4px 0 22px}
.login-input{width:100%;padding:11px 13px;border:1px solid var(--line);border-radius:10px;font-size:15px;margin-bottom:12px}
.login-input:focus{outline:none;border-color:var(--accent)}
.login-btn{width:100%;padding:11px;border:0;border-radius:10px;background:var(--accent);
  color:#fff;font-size:15px;font-weight:600;cursor:pointer}
.login-btn:hover{background:var(--accent-ink)}
.login-error{background:#fde5e5;color:#b42318;padding:8px 12px;border-radius:8px;margin-bottom:14px;font-size:13px}

@media(max-width:900px){
  .kpis{grid-template-columns:repeat(2,1fr)}
  .kpis-sub{grid-template-columns:repeat(2,1fr)}
  .grid2{grid-template-columns:1fr}
}
@media(max-width:820px){
  .sidebar{display:none}
  .fld select{min-width:140px}
}

/* ===== блок «Что везти» — план поставок по артикулам и размерам ===== */
#tbl_plan th{white-space:nowrap}
.plan-row{cursor:pointer}
.plan-row:hover{background:#f8fafc}
.plan-row.open{background:#f1f5f9}
.plan-row td:nth-child(2)::after{content:" ▸";color:var(--muted);font-size:11px}
.plan-row.open td:nth-child(2)::after{content:" ▾"}
.plan-size{background:#fbfcfe;font-size:12px;color:#475569}
.plan-size td{border-bottom:1px dashed var(--line)}
.size-cell{padding-left:22px}
.dim{color:var(--muted);font-weight:400;font-size:12px}
.cover-fire{color:#b42318;font-weight:700}
.cover-warn{color:#9a6b00;font-weight:600}

/* ===== «Что везти»: разрез по складам + переключатель видов + модалка складов ===== */
/* атрибут hidden должен побеждать любые display у наших блоков/модалки (класс/ID иначе перебивают) */
[hidden]{display:none !important}
.plan-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.plan-seg{display:inline-flex;background:#f1f5f9;border:1px solid var(--line);border-radius:9px;padding:3px;gap:2px}
.pseg-btn{border:0;background:transparent;color:var(--muted);font-size:13px;padding:6px 12px;border-radius:7px;cursor:pointer}
.pseg-btn:hover{color:var(--ink)}
.pseg-btn.active{background:var(--card);color:var(--accent-ink);font-weight:600;box-shadow:var(--shadow)}
.wh-btn{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:9px;padding:8px 12px;font-size:13px;cursor:pointer}
.wh-btn:hover{border-color:var(--accent);color:var(--accent-ink)}
.plan-days{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
.plan-days input{width:56px;padding:7px 8px;border:1px solid var(--line);border-radius:8px;font-size:13px;text-align:right;color:var(--ink);font-weight:600}
.plan-days input:focus{outline:none;border-color:var(--accent)}
.plan-recalc{border-color:#b8e6e4;background:#f0faf9;color:var(--accent-ink);font-weight:600}
.plan-recalc:hover{background:#e2f5f4;border-color:var(--accent)}
.plan-ts{font-size:11.5px;color:var(--muted);margin-top:4px}
.plan-ts.plan-ts-warn{color:#b7791f;font-weight:600}
/* фильтр «размеры в нуле» + сводка склада + вид «Отгрузки» */
.pz-link{color:var(--accent-ink);font-weight:800;text-decoration:underline;cursor:pointer}
.pz-link.active{background:#fde8e8;border-radius:4px;padding:0 4px}
.pz-reset{margin-left:8px;padding:3px 10px;border:1px solid var(--line);border-radius:14px;background:#fff;cursor:pointer;font-size:12px;font-weight:600;color:var(--ink)}
.pz-reset:hover{border-color:var(--accent)}
.wh-stats{font-size:11.5px;color:var(--muted);margin-left:10px;white-space:nowrap}
.wh-stats b{color:var(--ink)}
.ship-items{padding:4px 10px 10px 26px;overflow-x:auto}
.ship-tbl{border-collapse:collapse;font-size:12.5px;min-width:520px}
.ship-tbl th,.ship-tbl td{padding:5px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.ship-tbl th{font-size:11px;color:var(--muted);font-weight:600;text-align:left}
.ship-tbl th.num,.ship-tbl td.num{text-align:right}
.ship-tbl .ship-total td{border-top:2px solid var(--line);border-bottom:none;background:#fafafa}
/* 📦 учёт отгрузок (подсвеченная область во вкладке «Отгрузки») */
.ship-entry{background:#f0f7ee;border:1px solid #cfe5c8;border-radius:10px;padding:14px 16px;margin-bottom:12px}
.se-head{font-weight:800;font-size:14px;margin-bottom:6px}
.se-text{font-size:12.5px;color:var(--ink);line-height:1.55;margin-bottom:10px}
.se-list-head{font-size:12px;font-weight:700;color:var(--muted);margin:12px 0 6px}
.se-batch{display:flex;align-items:center;gap:12px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:7px 12px;margin-bottom:6px;flex-wrap:wrap}
.se-batch-name{font-size:13px}
.se-batch-info{font-size:12px;color:var(--muted)}
.se-batch.se-stale{background:#fdf6e3;border-color:#e0c778}
.se-stale-warn{font-size:12px;color:#b7791f;font-weight:600}
.se-btn{padding:4px 10px;border:1px solid var(--line);border-radius:14px;background:#fff;cursor:pointer;font-size:12px;font-weight:600}
.se-btn.se-recv{color:#1e7c37}.se-btn.se-recv:hover{border-color:#1e7c37}
.se-btn.se-del{color:#c0392b}.se-btn.se-del:hover{border-color:#c0392b}
.se-num{display:block;font-size:12.5px;font-weight:600;color:var(--muted);margin:6px 0 10px}
.se-num input{margin-left:6px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;font-size:13px;width:220px}
.ship-form-list{max-height:52vh;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:0 8px}
.ship-qty{width:74px;padding:5px 8px;border:1px solid var(--accent);border-radius:6px;font-size:13px;font-weight:700;text-align:right;background:#f4f8ff}
/* «Цена ↔ Оборачиваемость» · вид по складам */
#pt_wh_result{margin-top:12px}
.ptw-rec{font-size:12px;white-space:normal;min-width:260px}
#price_turn .loss-head{margin-bottom:10px}
.ptw-sum{font-size:12.5px;line-height:1.6;background:#f4f8ff;border:1px solid #d5e3f5;border-radius:8px;padding:9px 12px;margin:2px 0 10px}
.ptw-sum b{color:var(--accent-ink)}

/* вид «по складам» — карточки складов с раскрытием до размеров */
#plan_by_wh{display:flex;flex-direction:column;gap:8px}
.wh-block{border:1px solid var(--line);border-radius:11px;overflow:hidden;background:#fff}
.wh-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 15px;cursor:pointer}
.wh-row:hover{background:#f8fafc}
.wh-row.open{background:#f1f7f7}
.wh-row-main{display:flex;align-items:center;gap:10px;min-width:0}
.wh-caret{color:#94a3b8;font-size:11px;transition:transform .15s}
.wh-row.open .wh-caret{transform:rotate(90deg)}
.wh-name{font-weight:700;color:var(--ink)}
.wh-reg{font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.3px}
.wh-row-nums{display:flex;align-items:center;gap:16px;flex-shrink:0}
.wh-share{font-size:12px;padding:3px 10px;border-radius:20px;font-weight:600;white-space:nowrap}
.wh-share.over{background:#fdecec;color:#b42318}
.wh-share.under{background:#eafaf1;color:#0f9d6b}
.wh-share.ok{background:#eef1f5;color:#64748b}
.wh-need{font-variant-numeric:tabular-nums;font-size:13px;color:var(--ink);white-space:nowrap}
.wh-items{border-top:1px solid var(--line);background:#fbfcfe}
.dest-cell{color:#334155}
/* по складам: склад → артикул → размеры (три уровня раскрытия) */
.wa-block{border-top:1px solid var(--line)}
.wa-block:first-child{border-top:0}
.wa-row{display:flex;align-items:center;gap:10px;padding:8px 12px 8px 26px;cursor:pointer;font-size:12.5px}
.wa-row:hover{background:#f4f8f8}
.wa-row.open{background:#eef5f5}
.wa-caret{color:#94a3b8;font-size:10px;transition:transform .15s;flex:0 0 auto}
.wa-row.open .wa-caret{transform:rotate(90deg)}
.wa-art{flex:1;min-width:0}
.wa-sizes{color:var(--muted);white-space:nowrap}
.wa-need{font-variant-numeric:tabular-nums;color:var(--ink);white-space:nowrap;min-width:130px;text-align:right}
.wa-sztbl{width:100%;background:#fff}
.wa-sztbl td{padding:5px 8px;border-bottom:1px dashed var(--line);font-size:12px;color:#475569}
.wa-sztbl td:first-child{padding-left:44px}
.wa-sztbl tr:last-child td{border-bottom:0}
.was-bc,.bc-cell{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted);font-size:11.5px}

/* модалка складов (просмотр карты риска + редактор состава) */
.wh-modal{position:fixed;inset:0;background:rgba(15,23,42,.42);display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}
.wh-modal-box{background:var(--card);border-radius:14px;box-shadow:0 20px 50px rgba(16,24,40,.25);width:min(640px,100%);max-height:86vh;display:flex;flex-direction:column;overflow:hidden}
.wh-modal-head{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--line)}
.wh-modal-title{font-weight:700;font-size:15px}
.wh-modal-x{border:0;background:transparent;font-size:18px;color:var(--muted);cursor:pointer;line-height:1}
.wh-modal-x:hover{color:var(--ink)}
.wh-modal-body{padding:16px 18px;overflow-y:auto}
.wh-modal-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 18px;border-top:1px solid var(--line);background:#fbfcfe}
.wh-view-tbl th,.wh-view-tbl td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left}
.wh-view-tbl th.num,.wh-view-tbl td.num{text-align:right;font-variant-numeric:tabular-nums}
.wh-view-note{color:var(--muted);font-size:12px;margin-top:12px;line-height:1.45}
.wh-edit-hint{color:var(--muted);font-size:12.5px;margin-bottom:12px;line-height:1.45}
.wh-edit-list{display:flex;flex-direction:column;gap:4px}
.wh-edit-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:9px}
.wh-edit-row.burned{opacity:.5;background:#fafbfc}
.wh-edit-lbl{display:flex;align-items:center;gap:9px;cursor:pointer;flex:1;min-width:0}
.wh-edit-lbl input{width:16px;height:16px;flex-shrink:0}
.wh-edit-name{font-weight:600;color:var(--ink)}
.wh-edit-reg{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.3px}
.wh-edit-stat{font-size:12px;color:var(--muted);white-space:nowrap}
.wh-edit-share{display:flex;align-items:center;gap:3px;font-size:12px;color:var(--muted);white-space:nowrap}
.wh-share-in{width:52px;padding:5px 7px;border:1px solid var(--line);border-radius:7px;font-size:13px;text-align:right}
.wh-share-in:disabled{background:#f1f5f9;color:#cbd5e1}
.wh-sum{font-size:13px;font-weight:600}
.wh-sum.ok{color:#0f9d6b}
.wh-sum.bad{color:#b42318}
.wh-save-btn{border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:9px;padding:9px 16px;font-size:13px;font-weight:600;cursor:pointer}
.wh-save-btn:hover{background:var(--accent-ink)}
.wh-save-btn:disabled{opacity:.6;cursor:default}
@media (max-width:640px){
  .wh-row{flex-direction:column;align-items:flex-start;gap:8px}
  .wh-edit-row{flex-wrap:wrap}
}

/* «Всего потеряно» — в две строки, столбец уже (освобождает место для «Себест. ₽/ед» в одну строку) */
#tbl_loss th.col-narrow{white-space:normal;line-height:1.15;min-width:64px}

/* ===== вкладка «Unit-экономика» ===== */
.unit-controls{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.unit-controls select{padding:8px 12px;border:1px solid var(--line);border-radius:9px;background:#fff;font-size:13px}
.unit-art-input{padding:8px 12px;border:1px solid var(--line);border-radius:9px;background:#fff;font-size:13px;min-width:190px}
.unit-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.unit-chips:empty{display:none}
.uchip{display:inline-flex;align-items:center;gap:6px;background:#e6f6f5;color:var(--accent-ink);border:1px solid #b8e6e4;border-radius:16px;padding:3px 5px 3px 10px;font-size:12px;font-weight:600}
.uchip b{cursor:pointer;font-weight:700;color:#4d7d7c;background:#cdeceb;border-radius:50%;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;line-height:1;font-size:13px}
.uchip b:hover{background:#b3dddb;color:var(--accent-ink)}
/* П2.2 — панель массовой правки цены */
.unit-massprice{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ump-lbl{font-size:12px;color:var(--muted);font-weight:600}
.ump-btn{padding:6px 11px;border:1px solid #e3b3b3;background:#fdf2f2;color:#c0392b;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer}
.ump-btn:hover{background:#fbe6e6}
.ump-btn.ump-up{border-color:#b3d9c4;background:#f0faf4;color:#0f9d6b}
.ump-btn.ump-up:hover{background:#e2f5ea}
.ump-hint{font-size:12px;color:var(--muted)}
.ut-delta{font-size:12px;font-weight:700;margin-left:5px}
/* П4.1 — сортировка кликом по заголовку */
#tbl_unit th.u-sortable{cursor:pointer}
#tbl_unit th.u-sortable:hover{background:#eef7f7}
#tbl_unit th.u-sorted{color:var(--accent-ink)}
.u-arr{margin-left:3px;font-size:10px}
/* П4.2 — кликабельная плитка «убыточных» */
.u-tile-clk{cursor:pointer;transition:border-color .15s,box-shadow .15s}
.u-tile-clk:hover{border-color:var(--accent)}
.u-tile-clk.active{border-color:var(--accent);box-shadow:0 0 0 2px rgba(14,165,164,.2)}
/* П3.3 — плашка «Склад/Предмет пока не влияют на тарифы» */
.unit-warn{background:#fff8e1;border:1px solid #ffe082;border-left:4px solid #f5a623;border-radius:9px;padding:9px 13px;font-size:12.5px;color:#7a5f12;margin-bottom:10px;line-height:1.45}
.unit-assume-card{padding:12px 16px;margin-bottom:10px}
/* П1.4 — «Допущения» в аккордеоне (свёрнуты по умолчанию → таблице больше высоты) */
summary.ua-head{cursor:pointer;list-style:none;user-select:none;margin-bottom:0;display:flex;align-items:center;gap:7px}
summary.ua-head::-webkit-details-marker{display:none}
summary.ua-head::before{content:'▸';color:var(--muted);font-size:11px}
details.unit-assume-card[open] summary.ua-head::before{content:'▾'}
details.unit-assume-card[open] .ua-grid{margin-top:12px}
details.unit-massprice-card[open] .unit-massprice{margin-top:12px}
.ua-head{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:10px}
.ua-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.ua-item{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}
.ua-in{display:flex;align-items:center;gap:5px}
.ua-in input{width:100%;padding:6px 8px;border:1px solid var(--line);border-radius:7px;font-size:13px;text-align:right}
.ua-in i{color:var(--muted);font-style:normal;font-size:12px;min-width:16px}
.unit-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:10px}
.unit-tile{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 14px;box-shadow:var(--shadow)}
.ut-val{font-size:18px;font-weight:700;color:var(--ink)}
.ut-lbl{font-size:12px;color:var(--muted);margin-top:3px}
#tbl_unit th{white-space:normal;overflow-wrap:break-word;vertical-align:top;text-align:center;line-height:1.25;position:sticky;top:0;background:var(--card);z-index:1}
#tbl_unit thead th{text-align:center;vertical-align:top;height:54px}   /* все заголовки выровнены ПО ВЕРХУ (первая строка у всех на одном уровне) */
#tbl_unit td{white-space:nowrap}
/* колонки сами подбирают ширину под заголовок (авто-раскладка), в разумных пределах — читабельно и без разнобоя */
#tbl_unit thead th:not([class*="u-stick"]){min-width:60px;max-width:112px}
input.unit-price{width:78px;padding:5px 7px;border:1px solid #cbd5e1;border-radius:7px;font-size:13px;text-align:right;font-weight:600}
input.unit-price.changed{border-color:var(--accent);background:#effcfb;color:var(--accent-ink)}
.u-pos{color:#0f9d6b}
.u-neg{color:#d64545}

/* сворачиваемые группы столбцов (как «+» в Excel) */
#tbl_unit th.ug-plus{cursor:pointer;color:var(--accent-ink);background:#eef7f7;font-weight:700;text-align:center;min-width:24px;padding:9px 4px}
#tbl_unit th.ug-plus:hover{background:#dcefef}
#tbl_unit td.ug-plus{background:#f6fafa;border-left:1px dashed var(--line);border-right:1px dashed var(--line)}
.ug-min{border:none;background:#e6eef0;color:#5a6b72;border-radius:4px;font-weight:700;cursor:pointer;position:absolute;left:4px;top:6px;padding:1px 5px;line-height:1.2;font-size:12px}
#tbl_unit thead th.has-min{padding-left:28px;min-width:94px}   /* слева — место под «−» (по центру полосы); шире, чтобы имя группы не рвалось по слогам */
.ug-min:hover{background:#d3dee1}
#tbl_unit{font-size:12px}
#tbl_unit td,#tbl_unit th{padding:7px 8px}

/* Unit-экономика: фиксированная шапка + всегда доступный скролл (по обеим осям внутри блока) */
.unit-scroll{max-height:calc(100vh - 200px);overflow:auto}
.unit-scroll #tbl_unit thead th{position:sticky;top:0;z-index:3;background:var(--card);box-shadow:0 1px 0 var(--line)}
/* редактируемые поля в таблице */
.u-edit{border:1px solid #cbd5e1;border-radius:6px;font-size:12px;padding:4px 5px;background:#fff}
input.u-edit{width:82px;text-align:right;font-weight:600}
.u-edm{color:var(--accent);font-size:10px;margin-left:3px;opacity:.75;font-weight:400}
select.u-edit{max-width:120px;font-weight:500}
.u-edit.changed{border-color:var(--accent);background:#effcfb;color:var(--accent-ink)}
.u-edit:focus{outline:2px solid var(--accent);outline-offset:-1px}
/* фикс. колонки: слева Артикул(E)/Статус(F)/Литры(B), справа Прибыль(AP)/Маржа(AQ) — не уезжают при скролле */
#tbl_unit td.u-stick-a,#tbl_unit th.u-stick-a{position:sticky;left:0;width:96px;min-width:96px;max-width:96px}
#tbl_unit td.u-stick-b,#tbl_unit th.u-stick-b{position:sticky;left:96px;width:124px;min-width:124px;max-width:124px;overflow:hidden;text-overflow:ellipsis}
#tbl_unit td.u-stick-y,#tbl_unit th.u-stick-y{position:sticky;right:68px;width:76px;min-width:76px;max-width:76px}   /* Прибыль: под «Прибыль,» (53px) + число */
#tbl_unit td.u-stick-z,#tbl_unit th.u-stick-z{position:sticky;right:0;width:68px;min-width:68px;max-width:68px}       /* Маржа: под «−170.8%» */
#tbl_unit tbody td.u-stick-a,#tbl_unit tbody td.u-stick-b,#tbl_unit tbody td.u-stick-y,#tbl_unit tbody td.u-stick-z{z-index:2;background:var(--card)}
#tbl_unit thead th.u-stick-a,#tbl_unit thead th.u-stick-b,#tbl_unit thead th.u-stick-y,#tbl_unit thead th.u-stick-z{z-index:4}
#tbl_unit td.u-stick-b{box-shadow:2px 0 0 var(--line)}                       /* правый край левого фикс-блока (Артикул) */
#tbl_unit th.u-stick-b{box-shadow:2px 0 0 var(--line),0 1px 0 var(--line)}
#tbl_unit td.u-stick-y{box-shadow:-2px 0 0 var(--line)}                      /* левый край правого фикс-блока */
#tbl_unit th.u-stick-y{box-shadow:-2px 0 0 var(--line),0 1px 0 var(--line)}
/* зебра + подсветка строки (sticky-ячейкам фон дублируем, иначе сквозь них просвечивает контент) */
#tbl_unit tbody tr:nth-child(even){background:#fafbfc}
#tbl_unit tbody tr:nth-child(even) td.u-stick-a,#tbl_unit tbody tr:nth-child(even) td.u-stick-b,#tbl_unit tbody tr:nth-child(even) td.u-stick-y,#tbl_unit tbody tr:nth-child(even) td.u-stick-z{background:#fafbfc}
#tbl_unit tbody tr:hover{background:#eef6f7}
#tbl_unit tbody tr:hover td.u-stick-a,#tbl_unit tbody tr:hover td.u-stick-b,#tbl_unit tbody tr:hover td.u-stick-y,#tbl_unit tbody tr:hover td.u-stick-z{background:#eef6f7}

/* 🎯 Калькулятор скидки для акции (виджет под юниткой) */
.promo-calc{margin-top:14px}
.pc-note{font-size:12.5px;color:var(--muted);line-height:1.5;margin-bottom:14px}
.pc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:4px}
.pc-field{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted);font-weight:600}
.pc-field input{padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:15px;font-weight:700;color:var(--ink);text-align:right;background:#fff}
.pc-field input:focus{outline:2px solid var(--accent);outline-offset:-1px}
.pc-result{margin-top:16px;border-top:1px solid var(--line);padding-top:14px}
.pc-big{font-size:15px;color:var(--ink)}
.pc-big b{font-size:24px;color:var(--accent-ink);font-weight:800;margin-left:4px}
.pc-line{font-size:13px;color:var(--ink);line-height:1.55;margin-top:9px}
.pc-line b{color:var(--accent-ink)}
.pc-table{border-collapse:collapse;margin:12px 0 2px;font-size:13px}
.pc-table th,.pc-table td{padding:7px 14px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap}
.pc-table th{font-size:11px;color:var(--muted);font-weight:600}
.pc-table td:first-child,.pc-table th:first-child{text-align:left;color:var(--muted)}
.pc-mut{color:var(--muted);font-weight:400;font-size:11px}
.pc-hl{color:var(--accent-ink);font-weight:700}
.pc-warn{color:#c0392b;font-size:13px;font-weight:600}
/* 📉 Цена ↔ Оборачиваемость */
.pc-field select{padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:15px;font-weight:700;color:var(--ink);background:#fff}
.pc-field select:focus{outline:2px solid var(--accent);outline-offset:-1px}
.pt-hint{color:var(--muted);font-size:12.5px}
.pt-table td,.pt-table th{padding:7px 12px}
/* лучшая по прибыли/день — зелёная, текущая цена — голубая (правка Vladi 28.07) */
.pt-table tr.pt-cur td{background:#e8f1fb;font-weight:700}
.pt-table tr.pt-best td{background:#e8f6ec;font-weight:700}
.pt-table tr.pt-loss td{color:#c0392b}

/* 🏆 Куда грузить артикул — склады-продавцы (вкладка «Остатки») */
.ws-norm{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);white-space:nowrap}
.ws-norm input{width:64px;height:34px;padding:6px 8px;border:1px solid var(--line);border-radius:8px;
  font-size:13px;font-weight:600;color:var(--ink);text-align:right;background:#fff}
.ws-norm input:focus{outline:none;border-color:var(--accent)}
.ws-region{margin:0 0 14px}
.ws-reghead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:8px 10px;
  background:#f1f5f9;border:1px solid var(--line);border-radius:9px 9px 0 0}
.ws-regname{font-weight:700;font-size:13.5px}
.ws-regstats{color:var(--muted);font-size:12.5px}
.ws-conflict{margin-left:auto;font-size:12px;font-weight:700;color:#9a3412;background:#ffedd5;
  border:1px solid #fdba74;border-radius:7px;padding:3px 9px;cursor:help}
.ws-table{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed;
  border:1px solid var(--line);border-top:0;border-radius:0 0 9px 9px}
.ws-table th,.ws-table td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-table th{font-size:11px;color:var(--muted);font-weight:600}
.ws-table th.num,.ws-table td.num{text-align:right}
.ws-table th:nth-child(1){width:15%}.ws-table th:nth-child(2),.ws-table th:nth-child(3),
.ws-table th:nth-child(4),.ws-table th:nth-child(5){width:9%}
.ws-table th:nth-child(6){width:17%}.ws-table th:nth-child(7){width:32%}
tr.ws-row{cursor:pointer}
tr.ws-row:hover td{background:#f8fafc}
.ws-sparkcell{padding:3px 10px}
.ws-spark{width:130px;height:30px}
.ws-verdict{font-weight:600;font-size:12.5px}
.ws-verdict.bad{color:#c0392b}
.ws-verdict.ok{color:#1e7e34}
.ws-verdict.idle{color:#9a3412}
.ws-verdict.dead{color:var(--muted)}
.ws-bigbox{height:220px;padding:6px 2px}
/* конфликт складов: строка-пояснение под шапкой региона + кромки у участников */
.ws-confline{padding:7px 10px;font-size:12.5px;color:#7c2d12;background:#fff7ed;
  border:1px solid var(--line);border-top:0;line-height:1.45}
tr.ws-cd td:first-child{box-shadow:inset 3px 0 0 #dc2626}   /* продаёт и пустеет */
tr.ws-cs td:first-child{box-shadow:inset 3px 0 0 #f59e0b}   /* сидит на запасе */
/* «Замороженные деньги»: столбец «Что делать» + кнопка перехода в виджет цены */
.illiq-act{font-size:12.5px;line-height:1.4;white-space:normal}
.illiq-btn{border:1px solid var(--line);background:transparent;color:var(--muted);font-size:11px;
  font-weight:500;border-radius:6px;padding:1px 7px;cursor:pointer;white-space:nowrap}
.illiq-btn:hover{border-color:var(--accent);background:var(--accent);color:#fff}
/* фикс-раскладка: колонки не прыгают при листании страниц (грабля как у оборачиваемости) */
#tbl_illiq{table-layout:fixed}
#tbl_illiq th:nth-child(1){width:16%}
#tbl_illiq th:nth-child(2),#tbl_illiq th:nth-child(3){width:11%}
#tbl_illiq th:nth-child(4),#tbl_illiq th:nth-child(5){width:16%}
#tbl_illiq th:nth-child(6){width:30%}
/* короткий ярлык действия: пунктир = «наведи, будет пояснение» */
.illiq-short{font-weight:600;white-space:nowrap;cursor:help;
  border-bottom:1px dotted var(--muted);padding-bottom:1px}
/* воздух между «Хранение» и «Что делать» — числа не липнут к тексту (скрин Vladi) */
#tbl_illiq th:nth-child(6),#tbl_illiq td:nth-child(6){padding-left:64px}
/* плитки-сводки оборачиваемости: те же цвета, что статусы; клик — фильтр */
.cov-tiles{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}
.cov-tile{cursor:pointer;border:1px solid transparent;font-size:12.5px;padding:4px 12px}
.cov-tile:hover{border-color:currentColor}
.cov-tile.on{border-color:currentColor;box-shadow:0 0 0 1px currentColor inset}
/* строка «Шкала, дней»: видимые и редактируемые пороги статусов + сброс */
.cov-scale{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 10px;
  font-size:12.5px;color:var(--muted)}
.cov-scale-cap{font-weight:600;color:var(--ink)}
/* сегмент шкалы: своя рамка+фон — смысловые блоки читаются раздельно (скрин Vladi) */
.sc-seg{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;
  border:1px solid var(--line);border-radius:9px;background:#f8fafc;white-space:nowrap}
.sc-echo{font-weight:600;color:var(--ink)}
.cov-scale input{width:56px;height:28px;padding:3px 7px;border:1px solid var(--line);
  border-radius:7px;font-size:12.5px;font-weight:600;color:var(--ink);text-align:right;background:#fff}
.cov-scale input:focus{outline:none;border-color:var(--accent)}
.cov-scale input.sc-bad{border-color:#dc2626;background:#fef2f2}
.cov-sep{color:var(--line)}
/* Цена↔Оборачиваемость: артикул в складском виде кликабелен → вид «По товарам» */
.ptw-art{cursor:pointer;font-weight:700;color:var(--accent-ink);border-bottom:1px dotted var(--accent-ink)}
.ptw-art:hover{color:var(--accent)}
/* виджет цены: значок ⓘ у эластичности + строка-калькулятор ручного подбора */
.info-i{cursor:help;color:var(--accent-ink);font-weight:700;margin:0 2px 0 4px;font-size:13px}
/* спокойный серый вместо жёлтого + компенсация отступов инпута, чтобы цифры
   строки-калькулятора стояли РОВНО под цифрами столбца (правки Vladi по скрину) */
.pt-table tr.pt-calc td{background:#f3f5f7;border-top:2px solid var(--line);font-weight:600}
/* поле-«невидимка»: без рамки/фона, шрифт строки — цифры стоят ровно по столбцу;
   пунктир снизу = «можно править» (правка Vladi по скрину: значения съезжали) */
.ptc-inp{padding:0;border:0;border-bottom:1px dashed #94a3b8;border-radius:0;
  font:inherit;font-weight:700;color:var(--ink);text-align:right;background:transparent;margin:0;
  appearance:textfield;-moz-appearance:textfield}
.ptc-inp::-webkit-outer-spin-button,.ptc-inp::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.ptc-inp:focus{outline:none;border-bottom:1px dashed var(--accent)}
.ptc-inp:disabled{opacity:.4}
/* стрелочки-шаг калькулятора: СПРАВА от числа, но АБСОЛЮТНО в зоне отступа ячейки —
   в потоке контента их нет, поэтому правый край цифр остаётся ровно по столбцу */
.pt-table tr.pt-calc td{position:relative}
.ptc-step{position:absolute;right:1px;top:50%;transform:translateY(-50%);
  display:flex;flex-direction:column;gap:1px}
.ptc-step button{border:0;background:transparent;padding:0;margin:0;cursor:pointer;
  font-size:9px;line-height:8px;color:var(--muted)}
.ptc-step button:hover{color:var(--accent-ink)}
/* заголовки таблицы сценариев — серые, как были, но жирнее и чуть крупнее (правка Vladi) */
.pt-table th{font-weight:700;color:var(--muted);font-size:12px}

/* ===== вкладка «Unit Ozon» (v46) — свои селекторы, WB-таблицу не трогаем ===== */
#tbl_ozu{font-size:12px}
#tbl_ozu td,#tbl_ozu th{padding:7px 8px}
#tbl_ozu td{white-space:nowrap}
#tbl_ozu th{white-space:normal;overflow-wrap:break-word;vertical-align:top;text-align:center;line-height:1.25}
#tbl_ozu thead th{position:sticky;top:0;z-index:3;background:var(--card);box-shadow:0 1px 0 var(--line);height:44px}
#tbl_ozu thead th:not([class*="oz-stick"]){min-width:60px;max-width:112px}
/* фикс. колонки: слева Артикул+Предмет, справа Прибыль+Маржа (как в WB-юнитке) */
#tbl_ozu td.oz-stick-a,#tbl_ozu th.oz-stick-a{position:sticky;left:0;width:110px;min-width:110px;max-width:110px}
#tbl_ozu td.oz-stick-b,#tbl_ozu th.oz-stick-b{position:sticky;left:110px;width:124px;min-width:124px;max-width:124px;overflow:hidden;text-overflow:ellipsis}
#tbl_ozu td.oz-stick-y,#tbl_ozu th.oz-stick-y{position:sticky;right:68px;width:80px;min-width:80px;max-width:80px}
#tbl_ozu td.oz-stick-z,#tbl_ozu th.oz-stick-z{position:sticky;right:0;width:68px;min-width:68px;max-width:68px}
#tbl_ozu tbody td.oz-stick-a,#tbl_ozu tbody td.oz-stick-b,#tbl_ozu tbody td.oz-stick-y,#tbl_ozu tbody td.oz-stick-z{z-index:2;background:var(--card)}
#tbl_ozu thead th.oz-stick-a,#tbl_ozu thead th.oz-stick-b,#tbl_ozu thead th.oz-stick-y,#tbl_ozu thead th.oz-stick-z{z-index:4}
#tbl_ozu td.oz-stick-a{font-weight:600}
#tbl_ozu td.oz-stick-b{box-shadow:2px 0 0 var(--line)}
#tbl_ozu th.oz-stick-b{box-shadow:2px 0 0 var(--line),0 1px 0 var(--line)}
#tbl_ozu td.oz-stick-y{box-shadow:-2px 0 0 var(--line)}
#tbl_ozu th.oz-stick-y{box-shadow:-2px 0 0 var(--line),0 1px 0 var(--line)}
#tbl_ozu tbody tr:nth-child(even){background:#fafbfc}
#tbl_ozu tbody tr:nth-child(even) td.oz-stick-a,#tbl_ozu tbody tr:nth-child(even) td.oz-stick-b,#tbl_ozu tbody tr:nth-child(even) td.oz-stick-y,#tbl_ozu tbody tr:nth-child(even) td.oz-stick-z{background:#fafbfc}
#tbl_ozu tbody tr:hover{background:#eef6f7}
#tbl_ozu tbody tr:hover td.oz-stick-a,#tbl_ozu tbody tr:hover td.oz-stick-b,#tbl_ozu tbody tr:hover td.oz-stick-y,#tbl_ozu tbody tr:hover td.oz-stick-z{background:#eef6f7}
#ozu_assume select.u-edit{width:100%;padding:6px 8px}

/* ===== Unit Ozon v47 (аудит): выравнивание, справка WB, сортировка, флаги ===== */
#tbl_ozu td.oz-num{text-align:right}
#tbl_ozu td.oz-ref,#tbl_ozu th.oz-ref{background:#f4f6f9}
#tbl_ozu tbody tr:nth-child(even) td.oz-ref{background:#eef1f5}
#tbl_ozu th.oz-sortable{cursor:pointer}
#tbl_ozu th.oz-sortable:hover{background:#eef7f7}
#tbl_ozu th.oz-sorted{color:var(--accent-ink)}
input.u-edit.oz-miss{border-color:#d64545;background:#fdf2f2}
.excel-btn.ozu-2808.active{background:#0b7c7b;color:#fff;border-color:#0b7c7b}

/* «Потери»: свой вертикальный скролл — иначе sticky-шапка не работает (скроллила вся страница) */
.loss-scroll{max-height:calc(100vh - 200px);overflow:auto}
#tbl_loss thead th{z-index:2}
#tbl_loss tr.loss-total td{background:#f5f7fa}   /* липкой ячейке нужен свой фон, фон tr не едет */

/* «Куда грузить»: регион «н/д» (склады без региона) — справочный, сворачиваемый, последний */
details.ws-nd summary.ws-reghead{cursor:pointer;list-style:none;user-select:none}
details.ws-nd summary.ws-reghead::-webkit-details-marker{display:none}
details.ws-nd summary.ws-reghead::before{content:'▸';color:var(--muted);font-size:11px;margin-right:6px}
details.ws-nd[open] summary.ws-reghead::before{content:'▾'}
details.ws-nd .ws-regname{color:var(--muted)}
.ws-ndhint{font-size:11px;color:var(--muted);border:1px dashed var(--line);border-radius:8px;padding:2px 8px;margin-left:auto}

/* «Пользователи» (v49): админка ролей — в общем стиле дашборда */
.usr-box{border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:12px;background:#fff}
.usr-top{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.usr-login-b{min-width:80px;font-size:14px}
.usr-box .u-login,.usr-box .u-name,.usr-box .u-pass{padding:8px 10px;border:1px solid var(--line);
  border-radius:8px;font-size:13px;color:var(--ink);background:#fff}
.usr-box input:focus{outline:none;border-color:var(--accent)}
.usr-flag{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;font-size:12.5px;
  color:var(--ink);cursor:pointer;user-select:none}
.usr-tabs{display:flex;gap:6px 16px;flex-wrap:wrap;margin-top:10px;padding-top:8px;border-top:1px dashed var(--line)}
.usr-tabs label{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;font-size:12.5px;
  color:var(--ink);cursor:pointer;user-select:none}
.usr-box input[type="checkbox"]{accent-color:var(--accent);width:15px;height:15px}
.usr-box input[type="checkbox"]:disabled+span,.usr-tabs input:disabled{opacity:.55}
.u-status{font-size:12px}

/* v50: галочки «берём в поставку» в виде «Отгрузки» («Что везти») */
.ship-pick-l{display:inline-flex;align-items:center;margin-right:8px;cursor:pointer}
.ship-pick-l input{width:16px;height:16px;accent-color:var(--accent);cursor:pointer}
.wh-block.ship-selected>.wh-row{background:#f0faf9}
.wh-block.ship-selected .wh-name::after{content:' ✓ в поставку';color:var(--accent-ink);font-size:11px;font-weight:600}
.ship-selbar{border:1px solid var(--line);background:#fafbfc;border-radius:10px;padding:10px 14px;
  margin:0 0 12px;font-size:13px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.ship-selbar b{color:var(--accent-ink)}
.ship-selbar .wh-btn{padding:5px 10px;font-size:12px}

/* v51: галочки по складам в виде «Отгрузки» */
.ship-whbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;width:100%;padding-top:8px;
  border-top:1px dashed var(--line);margin-top:2px}
.ship-wh-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);
  border-radius:16px;padding:4px 12px;font-size:12.5px;cursor:pointer;user-select:none;background:#fff}
.ship-wh-chip input{width:14px;height:14px;accent-color:var(--accent);cursor:pointer}
.ship-wh-chip.on{border-color:#b8e6e4;background:#f0faf9;font-weight:600}
th.ship-wh-off{opacity:.4;text-decoration:line-through}
td.ship-wh-off{opacity:.35}

/* v52: размеры без потребности в матрице «Отгрузок» — видны, но приглушены */
.ship-zero-row td{opacity:.55}

/* v53: колонка «ост.» (текущий остаток склада) рядом с «везти» в матрице «Отгрузок» */
.ship-tbl th.ship-st,.ship-tbl td.ship-st{color:var(--muted);background:#fafbfc;font-size:12px;
  border-left:1px dashed var(--line)}

/* v53.1: «везти»+«ост.» = визуальный блок склада (двухэтажная шапка, границы, чередование фона) */
.ship-tbl th.ship-whgrp{text-align:center;border-left:2px solid #d8dee6;border-bottom:1px dashed var(--line)}
.ship-tbl .ship-sub{font-weight:500;font-size:11px;color:var(--muted)}
.ship-tbl .ship-grp-l{border-left:2px solid #d8dee6}
.ship-tbl .ship-st{border-left:1px dashed var(--line)}
.ship-tbl .ship-alt{background:#f4f8fb}
.ship-tbl td.ship-st.ship-alt,.ship-tbl th.ship-st.ship-alt{background:#eef4f9}
