/* Единая тема ERP (11.09.2026). Подключается ПОСЛЕ <style> страницы и перекрывает её :root-токены.
   Светлая — по умолчанию; тёмная — по системной настройке (без явного выбора) или data-theme="dark".
   Переключатель — snab-theme.js (localStorage snabTheme: light | dark | system). Палитра daisyUI bumblebee. */
/* Open Sans лежит в самом ERP (02.10.2026): раньше шрифт только назывался, и у кого он не установлен,
   страницы рисовались системным. Вариативный файл на начертания 400–800; подмножества — как у Google Fonts. */
@font-face{font-family:"Open Sans"; font-style:normal; font-weight:400 800; font-display:swap; src:url(/fonts/opensans-cyrillic.woff2) format("woff2");
  unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Open Sans"; font-style:normal; font-weight:400 800; font-display:swap; src:url(/fonts/opensans-latin-ext.woff2) format("woff2");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Open Sans"; font-style:normal; font-weight:400 800; font-display:swap; src:url(/fonts/opensans-latin.woff2) format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
:root{
  color-scheme:light;
  --bg:oklch(97% 0 0); --surface:oklch(100% 0 0); --surface2:oklch(98.5% 0 0);
  --line:oklch(92% 0 0); --line-soft:oklch(95% 0 0);
  --ink:oklch(20% 0 0); --ink-soft:oklch(45% 0.01 67.558); --ink-faint:oklch(64% 0.008 67.558); --muted:oklch(64% 0.008 67.558);
  --accent:oklch(85% 0.199 91.936); --accent-dark:oklch(74% 0.17 84.429); --accent-soft:oklch(96.5% 0.055 92); --accent-ink:oklch(42% 0.095 57.708);
  --b24:oklch(85% 0.199 91.936); --b24-dark:oklch(78% 0.185 91.936); --link:oklch(50% 0.11 240.876);
  --danger:oklch(70% 0.191 22.216); --danger-soft:oklch(96% 0.03 22); --sroch-bg:oklch(98.5% 0.015 22);
  --ok:oklch(60% 0.15 163.223); --ok-soft:oklch(95% 0.04 163);
  --warn:oklch(62% 0.16 55); --warn-soft:oklch(96% 0.05 70); --part:oklch(55% 0.14 55.934);
  --req:oklch(50% 0.11 240.876); --req-soft:oklch(95% 0.03 240);
  --on-danger:#fff; --logo-g:#333; --shadow:oklch(0% 0 0/.05);
  --chat-bg:oklch(96% 0.004 92); --b-other:oklch(100% 0 0); --b-me:oklch(93% 0.09 92); --b-line:oklch(88% 0 0);
  /* ряды графиков: синий и бирюзовый — различимы при дальтонизме и на светлом, и на тёмном фоне
     (проверено валидатором палитры); красный и оранжевый заняты статусами и в рядах не участвуют */
  --c1:#2a78d6; --c2:#1baf7a;
  --r-box:1rem; --r-field:.5rem;
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:oklch(18% 0 0); --surface:oklch(23% 0 0); --surface2:oklch(26% 0 0);
  --line:oklch(32% 0 0); --line-soft:oklch(28% 0 0);
  --ink:oklch(93% 0 0); --ink-soft:oklch(72% 0.01 67); --ink-faint:oklch(58% 0.01 67); --muted:oklch(58% 0.01 67);
  --accent-soft:oklch(32% 0.06 92); --accent-ink:oklch(88% 0.12 92); --link:oklch(75% 0.1 240.876);
  --danger-soft:oklch(30% 0.06 22); --sroch-bg:oklch(24% 0.03 22); --chat-bg:oklch(14% 0 0); --b-other:oklch(31% 0 0); --b-me:oklch(45% 0.09 92); --b-line:oklch(40% 0 0);
  --ok-soft:oklch(28% 0.05 163); --warn-soft:oklch(30% 0.06 70); --req:oklch(75% 0.1 240.876); --req-soft:oklch(28% 0.04 240);
  --logo-g:#ddd; --shadow:oklch(0% 0 0/.35);
  --c1:#3987e5; --c2:#199e70;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --bg:oklch(18% 0 0); --surface:oklch(23% 0 0); --surface2:oklch(26% 0 0);
    --line:oklch(32% 0 0); --line-soft:oklch(28% 0 0);
    --ink:oklch(93% 0 0); --ink-soft:oklch(72% 0.01 67); --ink-faint:oklch(58% 0.01 67); --muted:oklch(58% 0.01 67);
    --accent-soft:oklch(32% 0.06 92); --accent-ink:oklch(88% 0.12 92); --link:oklch(75% 0.1 240.876);
    --danger-soft:oklch(30% 0.06 22); --sroch-bg:oklch(24% 0.03 22); --chat-bg:oklch(14% 0 0); --b-other:oklch(31% 0 0); --b-me:oklch(45% 0.09 92); --b-line:oklch(40% 0 0);
    --ok-soft:oklch(28% 0.05 163); --warn-soft:oklch(30% 0.06 70); --req:oklch(75% 0.1 240.876); --req-soft:oklch(28% 0.04 240);
    --logo-g:#ddd; --shadow:oklch(0% 0 0/.35);
    --c1:#3987e5; --c2:#199e70;
  }
}
/* общие элементы, у которых в страницах были зашитые цвета */
.logo .logo-y{fill:var(--accent)} .logo .logo-w{fill:var(--accent-dark)} .logo .logo-g{fill:var(--logo-g)}
.pill.bad, .doc.no, .flag.no, .btn.no{background:var(--danger-soft)}
tr.sroch td{background:var(--sroch-bg)}
#toast.err{background:var(--danger); color:var(--on-danger)}
.del.arm{color:var(--on-danger)}
.card, .pane, .gridwrap, .paytable-wrap{box-shadow:0 1px 3px var(--shadow)}
/* переключатель темы в шапке */
.theme-btn{border:1px solid var(--line); background:var(--surface); color:var(--ink-soft); border-radius:var(--r-field); padding:4px 8px; font:inherit; font-size:12px; cursor:pointer; margin-left:10px; white-space:nowrap}
.theme-btn:hover{color:var(--accent-ink); background:var(--accent-soft)}

/* плитки-счётчики (KPI) — один вид на всех экранах; строка .kpis.tiles идёт над таблицей,
   плитка-кнопка ставит соответствующий отбор */
.kpis{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:4px 22px}
.kpi{padding:6px 0}
.kpi .l{display:block; font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.07em; color:var(--ink-faint)}
.kpi .v{display:block; font-size:23px; font-weight:800; font-variant-numeric:tabular-nums; margin-top:2px}
.kpi .v .u{font-size:13px; font-weight:600; color:var(--ink-faint)}
.kpi .s{display:block; font-size:12px; color:var(--ink-soft); margin-top:2px; font-variant-numeric:tabular-nums}
.kpi.hero .v{color:var(--accent-ink)}
.kpi.good .v{color:var(--ok)}
.kpi.over .v,.kpi.over .s{color:var(--warn)}
.kpi.bad .v{color:var(--danger)}
.kpis.tiles{display:flex; flex-wrap:wrap; gap:10px; margin-bottom:10px}
.kpis.tiles .kpi{flex:1 1 150px; min-width:140px; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-box); padding:9px 14px; box-shadow:0 1px 3px var(--shadow)}
.kpis.tiles .kpi .v{font-size:21px}
button.kpi{font:inherit; color:inherit; text-align:left; cursor:pointer}
button.kpi:hover{border-color:var(--accent-dark)}
button.kpi.on{border-color:var(--accent-dark); background:var(--accent-soft)}
button.kpi.on .l{color:var(--accent-ink)}
/* телефон: плитки компактные, по три в ряд, без поясняющей строки — чтобы таблица была видна сразу */
@media (max-width: 760px){
  .kpis.tiles{gap:6px}
  .kpis.tiles .kpi{flex:1 1 28%; min-width:0; padding:6px 9px}
  .kpis.tiles .kpi .l{font-size:10px; letter-spacing:.04em}
  .kpis.tiles .kpi .v{font-size:17px}
  .kpis.tiles .kpi .s{display:none}
}

/* подпись-счётчик страницы (бывшая надпись в шапке) — под заголовком, а не в меню */
#stat{font-size:12px; font-weight:400; color:var(--ink-faint); white-space:nowrap}

/* ИНН поставщика: номер копируется по клику, «СБИС» ведёт на публичную карточку компании */
.innline{font-size:12px; color:var(--ink-faint); font-variant-numeric:tabular-nums; white-space:nowrap}
.innline .inn-card{color:inherit; text-decoration:none; border-bottom:1px dashed var(--ink-faint)} .innline .inn-card:hover{color:var(--accent-ink); border-bottom-color:var(--accent-dark)}
.innline .inn-copy{border:0; background:none; color:var(--ink-faint); font:inherit; cursor:pointer; padding:0 2px; border-radius:4px}
.innline .inn-copy:hover{background:var(--surface2); color:var(--ink)}
.innline .inn-sbis{color:var(--req); text-decoration:none}
.innline .inn-sbis:hover{text-decoration:underline}

/* балл надёжности контрагента 0–5 (ТЗ 11) */
.dd-dot{display:inline-flex; align-items:center; justify-content:center; min-width:18px; height:18px; padding:0 5px; border-radius:99px; font-size:11px; font-weight:800; line-height:1; font-variant-numeric:tabular-nums; vertical-align:middle; cursor:default}
.dd-dot.big{min-width:44px; height:44px; font-size:22px; border-radius:12px}
.dd-dot.dd-green{background:var(--ok-soft); color:var(--ok)}
.dd-dot.dd-amber{background:var(--warn-soft); color:var(--warn)}
.dd-dot.dd-red{background:var(--danger-soft); color:var(--danger)}
.dd-warn{display:inline-block; margin-left:4px; padding:1px 6px; border-radius:4px; background:var(--warn-soft); color:var(--warn); font-size:10.5px; font-weight:700; vertical-align:middle; cursor:default}
.dd-dot.dd-grey{background:var(--surface2); color:var(--ink-faint); border:1px dashed var(--line)}
a.dd-link{text-decoration:none}
a.dd-link:hover .dd-dot{outline:2px solid var(--accent-dark)}

/* все экраны ERP — во всю ширь окна (Алексей 29.09: таблицы на широком мониторе не должны прятаться
   за горизонтальной прокруткой); ограничения ширины в страницах перекрываем здесь */
main{max-width:none!important}
/* на широком экране плитки — сеткой: последняя в ряду не растягивается на всю строку */
@media (min-width:761px){ .kpis.tiles{display:grid; grid-template-columns:repeat(auto-fill,minmax(160px,1fr))} }

/* телефон: карточки в столбец, таблицы прокручиваются внутри (шапку ведёт snab-nav.js) */
@media (max-width: 760px){
  .trail{padding:4px 12px}
  main{padding:10px 10px 70px}
  .payhead{gap:8px}
  .payhead h1{font-size:15px}
  .payhead .actions{margin-left:0; width:100%}
  .payhead .actions .btn{flex:1 1 auto; text-align:center}
  .grid, .paysummary{grid-template-columns:1fr !important}
  .fields{grid-template-columns:1fr 1fr}
  .fgrid{grid-template-columns:1fr}
  .kpis{grid-template-columns:1fr 1fr}
  .tblwrap, .paytable-wrap, .gridwrap, .card{overflow-x:auto}
  dialog{width:96vw; padding:12px}
  .theme-btn{padding:3px 6px; font-size:11px}
}

/* ---- общие блоки карточек (редизайн 02.10.2026): вердикт, сводка, «требует внимания», полоса стадий, линия «получено» ---- */
.verdict{display:flex; gap:10px 14px; align-items:center; flex-wrap:wrap; border-radius:var(--r-field); padding:11px 14px; border:1px solid var(--line)}
.verdict.no{background:var(--danger-soft); border-color:color-mix(in oklch,var(--danger) 35%,transparent)}
.verdict.yes{background:var(--ok-soft); border-color:color-mix(in oklch,var(--ok) 35%,transparent)}
.verdict.info{background:var(--accent-soft); border-color:var(--accent-dark)}
.verdict .ic{width:22px; height:22px; border-radius:50%; display:grid; place-items:center; font-weight:800; font-size:13px; color:var(--surface); flex:none; background:var(--ink-soft)}
.verdict.no .ic{background:var(--danger)} .verdict.yes .ic{background:var(--ok)} .verdict.info .ic{background:var(--accent-dark)}
.verdict .t{flex:1 1 260px; min-width:0} .verdict .t b{font-size:14.5px} .verdict .t div{font-size:12.5px; color:var(--ink-soft)}
.sum4{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); border:1px solid var(--line); border-radius:var(--r-field); background:var(--surface)}
.sum4>div{padding:11px 14px; display:flex; flex-direction:column; gap:3px; min-width:0}
.sum4>div+div{border-left:1px solid var(--line)}
.sum4 .l{font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.07em; color:var(--ink-faint)}
.sum4 .v{font-size:19px; font-weight:800; line-height:1.2; font-variant-numeric:tabular-nums} .sum4 .v small{font-size:12.5px; font-weight:600; color:var(--ink-faint)}
.sum4 .s{font-size:12.5px; color:var(--ink-soft)} .sum4 .s.warn{color:var(--warn); font-weight:600} .sum4 .s.okk{color:var(--ok); font-weight:600}
@media(max-width:1100px){ .sum4{grid-template-columns:repeat(2,minmax(0,1fr))} .sum4>div:nth-child(3){border-left:0} .sum4>div:nth-child(n+3){border-top:1px solid var(--line)} }
@media(max-width:700px){ .sum4{grid-template-columns:minmax(0,1fr)} .sum4>div+div{border-left:0; border-top:1px solid var(--line)} }
.attn{display:flex; flex-direction:column}
.attn>*{display:grid; grid-template-columns:18px minmax(0,1fr); gap:8px; padding:7px 0; border-bottom:1px solid var(--line-soft); font-size:13px; color:inherit; text-decoration:none}
.attn>*:last-child{border-bottom:0}
.attn a:hover b{text-decoration:underline}
.attn .mk{font-weight:800; color:var(--ink-faint)} .attn .bad .mk{color:var(--danger)} .attn .warn .mk{color:var(--warn)} .attn small{display:block; color:var(--ink-soft); font-size:12.5px}
.sbar{display:flex; gap:3px; padding:2px 8px; overflow-x:auto}
.sbar button{flex:1 0 auto; min-width:64px; border:0; padding:7px 9px; transform:skewX(-18deg); background:var(--line-soft); color:var(--ink-soft); cursor:pointer; font:inherit; font-weight:600; font-size:12.5px; line-height:1.25}
.sbar button>span{display:block; transform:skewX(18deg); text-align:center; white-space:nowrap}
.sbar button small{display:block; font-size:11px; font-weight:400}
.sbar button.done{background:var(--ok-soft); color:var(--ok)}
.sbar button.cur{background:var(--accent); color:oklch(20% 0 0); font-weight:800; box-shadow:0 2px 0 var(--accent-dark)}
.sbar button.fail{flex:0 0 auto; background:none; box-shadow:inset 0 0 0 1px var(--line); color:var(--ink-faint)}
.sbar button.fail.cur{background:var(--danger); color:#fff; box-shadow:none}
.sbar button:hover{filter:brightness(.96); color:var(--ink)} .sbar button.cur:hover{color:oklch(20% 0 0)} .sbar button.fail.cur:hover{color:#fff}
@media(max-width:1500px){ .sbar button{padding:7px 6px; font-size:12px; min-width:0} }
.sbar button.fail.cur.pod{background:var(--off-pod)} .sbar button.fail.cur.zak{background:var(--off-zak)}
/* позиция вне поставки снабжения — провальная стадия («Отмена», «Закупка подрядчик», «Закупка заказчик»):
   строка приглушена, чтобы не путалась с рабочими, а стадия — яркой меткой (.offst; pod — подрядчик, zak — заказчик) */
:root{--off-pod:oklch(54% 0.2 300); --off-zak:oklch(54% 0.14 235)}
.offst{display:inline-block; padding:2px 9px; border-radius:99px; font-size:11.5px; font-weight:800; line-height:1.45; white-space:nowrap; color:#fff; background:var(--danger)}
.offst.pod{background:var(--off-pod)} .offst.zak{background:var(--off-zak)}
tr.offrow td:not(:has(.offst)), tr.offrow td:has(.offst) a{opacity:.45}
tr.offrow:hover td:not(:has(.offst)), tr.offrow:hover td:has(.offst) a{opacity:.8}
.sbar.ro button{cursor:default} .sbar.ro button:hover{filter:none}
.sbar button:disabled{opacity:.6; cursor:progress}
.gp{display:flex; align-items:center; justify-content:flex-end; gap:6px}
.gp .ln{flex:1 1 24px; min-width:18px; max-width:84px; height:7px; border-radius:99px; background:var(--line-soft); overflow:hidden; box-shadow:inset 0 0 0 1px var(--line)}
.gp .ln i{display:block; height:100%; border-radius:99px; background:var(--accent)}
.gp.full .ln i{background:var(--ok)}
.gp .z{color:var(--ink-faint)}

/* текст на жёлтых кнопках — всегда тёмный (в тёмной теме наследовался светлый и не читался) */
.btn.primary, .btn.pri, .addrow button:not(.lnk), .bulk .addrow button{color:oklch(20% 0 0)}

/* окно вопроса snabAsk / snabConfirm (snab-nav.js) — вместо браузерных prompt/confirm */
dialog.snab-dlg{margin:auto; border:1px solid var(--line); border-radius:var(--r-box); padding:16px 18px; width:min(460px,94vw); background:var(--surface); color:var(--ink); box-shadow:0 12px 32px oklch(0% 0 0/.25); font:inherit}
dialog.snab-dlg::backdrop{background:oklch(0% 0 0/.35)}
dialog.snab-dlg h3{margin:0 0 8px; font-size:16px; line-height:1.3}
dialog.snab-dlg .dtext{font-size:14px; line-height:1.45; color:var(--ink-soft); margin-bottom:10px}
dialog.snab-dlg .dfield{display:block; margin:6px 0 2px}
dialog.snab-dlg .dfield span{display:block; font-size:12px; color:var(--ink-faint); margin-bottom:4px}
dialog.snab-dlg .dinp{width:100%; box-sizing:border-box; font:inherit; font-size:16px; padding:8px 10px; border:1px solid var(--line); border-radius:var(--r-field); background:var(--surface2); color:var(--ink); resize:vertical}
dialog.snab-dlg .dinp:focus{outline:2px solid var(--accent); outline-offset:1px}
dialog.snab-dlg .dhint{font-size:12px; color:var(--danger); margin-top:4px}
dialog.snab-dlg .dbtns{display:flex; justify-content:flex-end; gap:8px; margin-top:14px}
dialog.snab-dlg .dbtn{border:1px solid var(--line); background:var(--surface); color:var(--ink); border-radius:var(--r-field); padding:9px 16px; font:inherit; font-weight:600; cursor:pointer; min-width:96px}
dialog.snab-dlg .dbtn.ok{background:var(--accent); border-color:var(--accent); color:var(--accent-ink,oklch(20% 0 0))}
dialog.snab-dlg.danger .dbtn.ok{background:var(--danger); border-color:var(--danger); color:#fff}
@media(max-width:700px){ dialog.snab-dlg{width:92vw; padding:14px} dialog.snab-dlg .dbtns{flex-direction:column-reverse} dialog.snab-dlg .dbtn{width:100%; padding:12px} }

/* snab-table.js: сортировка по заголовку, строка поиска по столбцам (13.10.2026) */
th[data-k]{cursor:pointer; user-select:none; white-space:nowrap}
th[data-k]:hover{color:var(--ink)}
th[data-k].asc::after{content:" ▲"; font-size:9px; color:var(--accent-ink)} th[data-k].desc::after{content:" ▼"; font-size:9px; color:var(--accent-ink)}
thead tr.tf td{padding:3px 5px 6px; background:var(--surface); border-bottom:1px solid var(--line); position:sticky; top:30px; z-index:1}
thead tr.tf input{width:100%; min-width:56px; border:1px solid var(--line); border-radius:6px; padding:3px 7px; font:inherit; font-size:12px; background:var(--surface2); color:var(--ink); outline:none}
thead tr.tf input:focus{border-color:var(--accent-dark)} thead tr.tf input::placeholder{color:var(--ink-faint)}
