/* Рейки — интерфейс (реш. 70): тема «Apple, как у Романа» и тема «Тёплый камень». */
:root, [data-theme="light"] {
  --bg:#f5f5f7; --surface:#ffffff; --text:#1d1d1f; --muted:#6e6e73; --line:#e5e5ea;
  --accent:#0071e3; --accent-tint:#e8f2ff; --ok:#1a7f37; --warn:#b25000; --warn-tint:#fff2e3; --danger:#d70015;
  --nav-bg:rgba(255,255,255,.86); --nav-active:#1d1d1f; --nav-active-text:#fff;
  --ok-tint:#dff3e4; --danger-tint:#fde2e2; --info:#1d4ed8; --info-tint:#dbe9fb;
  --radius:16px;
}
[data-theme="warm"] {
  --bg:#f4f1ec; --surface:#fffdf9; --text:#2b2722; --muted:#7a7268; --line:#e7e1d8;
  --accent:#4f7a6a; --accent-tint:#e6efeb; --ok:#4f7a6a; --warn:#a0652d; --warn-tint:#f6ebdf; --danger:#b3261e;
  --nav-bg:color-mix(in srgb, var(--surface) 90%, transparent); --nav-active:#4f7a6a; --nav-active-text:#fff;
  --ok-tint:#e0ebe5; --danger-tint:#f6dfdc; --info:#3f6277; --info-tint:#e1eaee;
  --radius:18px;
}

body { margin:0; background:var(--bg); color:var(--text);
       font:15px/1.45 -apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,sans-serif; }
a { color:var(--accent); text-decoration:none; }
.muted { color:var(--muted); }
h1 { font-size:24px; margin:0 0 4px; letter-spacing:-.01em; }
h3 { font-size:15px; margin:0 0 10px; }

/* шапка */
.nav { position:sticky; top:0; z-index:10; display:flex; align-items:center; gap:4px; padding:10px 16px;
       background:var(--nav-bg); border-bottom:1px solid var(--line); backdrop-filter:blur(12px); flex-wrap:wrap; }


.linkbtn { background:none; border:none; color:var(--muted); font:inherit; cursor:pointer; padding:6px 8px; border-radius:980px; }
.linkbtn:hover { background:var(--line); }

/* общее */
.page { max-width:1500px; margin:0 auto; padding:20px 16px 48px; display:grid; gap:16px; }
.page > * { min-width:0; }  /* элементы сетки сжимаются по ширине экрана, а не распирают его */
.card { background:var(--surface); border:1px solid var(--line); border-radius:var(--radius); padding:16px; }

.pill.primary { background:var(--accent); border-color:var(--accent); color:#fff; }
.pill.ghost { background:var(--accent-tint); border-color:transparent; color:var(--accent); }

/* табло */
.status { display:inline-flex; align-items:center; gap:7px; font-weight:600; font-size:13px; }
.dot { width:9px; height:9px; border-radius:50%; display:inline-block; flex:none; }
/* синий акцент: кнопки-ссылки, строки разделов таблиц (была метка «новое, очередь 2», реш. 78 — снята 20.10) */
:root { --q2:var(--info); }
/* «Операции» — плашки как в таблице учёта ss: приход зелёный, расход красный */
.chip2 { display:inline-block; padding:2px 10px; border-radius:980px; font-size:12px; white-space:nowrap; background:#eef0f3; color:#3a3f47; }
.chip2.in { background:var(--ok-tint); color:var(--ok); } .chip2.out { background:var(--danger-tint); color:var(--danger); }
.chip2.warn { background:#fde8d4; color:#a0521d; }
.chip2.blue { background:var(--info-tint); color:var(--info); } .chip2.neutral { background:#eef0f3; color:#3a3f47; }
.tag { font-size:11px; padding:3px 8px; border-radius:980px; white-space:nowrap; background:var(--accent-tint); color:var(--accent); }
.tag.warn { background:var(--warn-tint); color:var(--warn); }

/* кнопка скана и сообщения */
.messages { max-width:1500px; margin:12px auto 0; padding:0 16px; display:grid; gap:8px; }
.msg { padding:10px 14px; border-radius:12px; background:var(--accent-tint); color:var(--accent); font-size:14px; }
.msg.error { background:var(--danger-tint); color:var(--danger); }
.msg.success { background:#e8f8ee; color:var(--ok); }
.msg.warning { background:var(--warn-tint); color:var(--warn); }  /* проверить: новый номер OEM и т. п. */


/* карточки объектов */
.head { display:flex; justify-content:space-between; align-items:baseline; gap:12px; flex-wrap:wrap; }
.kv { display:grid; grid-template-columns:150px 1fr; gap:8px 12px; font-size:15px; }
.kv .k { color:var(--muted); }
.actions { display:flex; gap:8px; flex-wrap:wrap; }

.list .item b { white-space:nowrap; }
.list .item:first-child { border-top:none; }
.money { background:var(--accent-tint); border-color:transparent; }
.reader { width:100%; max-width:420px; border-radius:16px; overflow:hidden; background:#1c1c1e; min-height:60px; }
.inline-form { display:flex; gap:8px; flex-wrap:wrap; }
.inline-form > * { min-width:0; }
.inline-form input, select { flex:1; padding:11px 14px; border:1px solid var(--line); border-radius:12px; font:inherit;
                             background:var(--surface); color:var(--text); }
@media (max-width:820px) { .kv { grid-template-columns:110px 1fr; } }

/* наряд и стенд (телефон мастера) */
.seg { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); background:var(--line); border-radius:12px; padding:3px; gap:3px; }
.seg button { border:none; background:none; font:inherit; font-size:13px; padding:9px 2px; border-radius:9px;
       color:var(--muted); cursor:pointer; text-align:center; }
.seg button.on { background:var(--surface); color:var(--text); font-weight:600; box-shadow:0 1px 3px rgba(0,0,0,.1); }
.check { display:flex; align-items:center; gap:12px; width:100%; padding:11px 2px; border:none; border-top:1px solid var(--line);
         background:none; font:inherit; font-size:14px; color:var(--text); text-align:left; cursor:pointer; }
form:first-child > .check { border-top:none; }
.box { width:22px; height:22px; border-radius:7px; border:2px solid var(--line); flex:none; position:relative; }
.box.on { background:var(--accent); border-color:var(--accent); }
.box.on::after { content:""; position:absolute; left:6px; top:2px; width:6px; height:11px; border:solid #fff; border-width:0 2px 2px 0; transform:rotate(45deg); }
.field textarea { width:100%; padding:11px 14px; border:1px solid var(--line); border-radius:12px; font:inherit; background:var(--surface); color:var(--text); }
a.item { color:var(--text); }

/* вход */
.login { max-width:360px; margin:12vh auto; }
.login form { display:grid; gap:12px; }
.field label { display:block; font-size:13px; color:var(--muted); margin-bottom:4px; }
.field input { width:100%; padding:11px 14px; border:1px solid var(--line); border-radius:12px; font:inherit; background:var(--surface); color:var(--text); }
.error { color:var(--danger); font-size:14px; }


/* склад (П7.4) */
.pill.danger { color:var(--danger); border-color:var(--danger); }
details.card > summary { cursor:pointer; font-weight:600; }
.grid-form { display:grid; grid-template-columns:repeat(auto-fit, minmax(160px, 1fr)); gap:10px; }
.grid-form input, .grid-form select { width:100%; box-sizing:border-box; padding:11px 14px; border:1px solid var(--line);
                                       border-radius:12px; font:inherit; background:var(--surface); color:var(--text); }
.table { width:100%; border-collapse:collapse; font-size:14px; }
.table th { text-align:left; color:var(--muted); font-weight:500; font-size:12px; padding:6px 4px; }
.table td { border-top:1px solid var(--line); padding:6px 4px; }
.table input, .table select { width:100%; box-sizing:border-box; padding:8px 10px; border:1px solid var(--line); border-radius:10px;
                              font:inherit; background:var(--surface); color:var(--text); }
.scroll-x { overflow-x:auto; }

/* подписи полей и подсказки «?» */

.fl > span:first-child { font-size:13px; color:var(--muted); display:flex; align-items:center; gap:6px; }
.fl input, .fl select { width:100%; box-sizing:border-box; }
/* подсказка — на самой надписи (реш. 90): курсор «?» и тонкое пунктирное подчёркивание; облачко через 1 с */
.hint { display:none; }
.has-hint { cursor:help; text-decoration:underline dotted; text-decoration-color:color-mix(in srgb, currentColor 35%, transparent);
            text-underline-offset:3px; }
.has-hint .has-hint, label.has-hint, .toggle-box.has-hint { text-decoration:none; }
/* облачко подсказки — одно на страницу, ставит ui/app.js: всегда в пределах экрана (реш. 84) */
.tip { position:fixed; z-index:1000; max-width:280px; padding:8px 10px; border-radius:10px; pointer-events:none;
       background:var(--text); color:var(--bg); font-size:12px; line-height:1.35; white-space:normal;
       box-shadow:0 4px 14px rgba(0,0,0,.18); }
.tip.sheet { left:16px !important; right:16px; bottom:16px; top:auto !important; max-width:none; font-size:14px; padding:12px 14px; }

/* период одним полем и календарь (реш. 84) */
.drp { display:flex; min-width:0; }
.drp-btn { display:flex; align-items:center; width:100%; box-sizing:border-box; padding:11px 14px; border:1px solid var(--line);
           border-radius:12px; background:var(--surface); color:var(--text); font:inherit; text-align:left; cursor:pointer;
           white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

/* отчёты: цифры рядом с названиями, новые месяцы добавляются вправо (реш. 85) */
.table.report { width:auto; }
.table.report th, .table.report td { padding:6px 10px; white-space:nowrap; }
.table.report td:first-child, .table.report th:first-child { min-width:220px; }

.drp-pop { position:fixed; z-index:900; background:var(--surface); color:var(--text); border:1px solid var(--line);
           border-radius:14px; box-shadow:0 8px 28px rgba(0,0,0,.18); padding:12px; }
.drp-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:8px 10px; margin-bottom:10px;
            border-radius:10px; background:var(--accent-tint); }
.drp-head input { width:110px; height:26px; padding:0 10px; border:1px solid var(--line); border-radius:999px; background:var(--surface);
  font:inherit; font-size:13px; color:var(--text); }  /* овальные, как все поля (ss 23.10) */
.drp-body { display:flex; gap:16px; }
.drp-months { display:flex; gap:18px; }
.drp-title { display:flex; align-items:center; justify-content:space-between; margin-bottom:6px; text-transform:none; }
.drp-title button, .drp-title span { width:28px; height:28px; border:0; background:none; font-size:18px; cursor:pointer; color:var(--text); }
.drp-grid { display:grid; grid-template-columns:repeat(7, 34px); gap:2px; }
.drp-grid i { font-style:normal; font-size:11px; color:var(--muted); text-align:center; padding:4px 0; }
.drp-grid button { height:32px; border:0; border-radius:8px; background:none; color:var(--text); font:inherit; font-size:13px; cursor:pointer; }
.drp-grid button:hover { background:var(--line); }
.drp-grid button.today { font-weight:700; }
.drp-grid button.in { background:var(--accent-tint); }
.drp-grid button.edge { background:var(--accent); color:#fff; }
.drp-side { display:flex; flex-direction:column; gap:6px; border-left:1px solid var(--line); padding-left:14px; min-width:140px; }
.drp-reset { margin-top:auto; }
@media (max-width:640px) {
  .drp-pop { left:8px !important; right:8px; top:auto !important; bottom:8px; }
  .drp-body { flex-direction:column; }
  .drp-months .drp-month + .drp-month { display:none; }  /* на телефоне — один месяц */
  .drp-side { flex-direction:row; flex-wrap:wrap; border-left:0; padding-left:0; }
}
/* «× Сбросить» у фильтров */
.reset { color:var(--accent); text-decoration:none; font-size:14px; white-space:nowrap; }

/* меню раздела (Склад, Продажи) — всегда видно, текущий пункт подсвечен */
.subnav { max-width:1500px; margin:16px auto 0; padding:0 16px; display:flex; gap:8px; flex-wrap:wrap; }

/* выпадающий список с поиском (марка → модель → кузов) */
.fl { display:grid; gap:4px; min-width:0; position:relative; }
.pk-dd.combo-list { position:absolute; top:100%; left:0; margin-top:4px; width:300px; max-width:calc(100vw - 16px); max-height:240px;
  overflow-y:auto; overflow-x:hidden; z-index:30; }  /* остальное — .pk-dd */
.combo-list .pk-opt span { margin-left:auto; padding-left:8px; color:var(--muted); font-size:11px; white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; }
.intake ::placeholder { color:var(--muted); opacity:.55; font-style:italic; }
.field select { width:100%; box-sizing:border-box; }

/* «Поступления» (реш. 75, вид как реестр — ss 26.10): шапка партии плашками в одну полосу; рейки и запчасти — таблица,
   первая (голубая) строка — ввод, добавленные ниже правятся на месте; на узком экране строка — карточка */
.intake .head4 { display:flex; flex-wrap:wrap; gap:8px 12px; align-items:center; }
.intake .head4 > .fl { display:flex; align-items:center; gap:6px; flex:none; min-width:0; }
.intake .head4 > .fl > span { font-size:12px; color:var(--muted); white-space:nowrap; }
.intake .head4 input, .intake .head4 select { box-sizing:border-box; border:1px solid var(--line); font:inherit; background:var(--surface); color:var(--text); }
.intake .head4 input { width:150px; } .intake .head4 .pk { width:170px; }
.intake .head4 #supplier { width:190px; } .intake .head4 [name="order_comment"] { width:340px; } .intake .head4 #party { width:110px; }
.intake .head4 input[disabled] { background:var(--bg); color:var(--muted); }
.intake .sec-t { display:flex; align-items:center; gap:12px; margin-bottom:6px; } .intake .sec-t h3 { margin:0; }
.intake .sec-t .muted { font-size:12px; font-variant-numeric:tabular-nums; }
.intake .grid { display:grid; gap:6px; align-items:center; }
/* строки реек и запчастей: два размера (реш. 91) — широкие поля и узкие «Год, Цена, Кол-во, Место»; комментарий — последним */
.intake .racks .grid, .intake .parts .grid {
  grid-template-columns:repeat(7, minmax(0, 1.4fr)) repeat(4, minmax(0, 1fr)) repeat(2, minmax(0, 1.4fr)) 76px; }
/* строки дозаказа (ss 17.10): та же сетка, что «Запчасти», — описание из карточки ЗЧ серым, правятся «Сколько» и «Цена» */
.intake .grid.olines { grid-template-columns:repeat(5, minmax(0, 1.4fr)) repeat(3, minmax(0, 1fr)); }
.intake .olines .num-link { padding-left:6px; }
.intake .row { padding:3px 6px; border-bottom:1px solid var(--line); }
.intake .row:hover { background:var(--bg); }
.intake .row.entry, .intake .row.entry:hover { background:var(--accent-tint); border-radius:10px; border-bottom:0; margin-bottom:4px; }
.intake .row.transit { background:var(--warn-tint); }
.intake .row.entry .go { height:26px; background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600; justify-content:center; width:100%; }
/* добавленные строки: поля как ячейки таблицы — рамка появляется при наведении и вводе */
.intake #rack-rows .row input, .intake #rack-rows .row select, .intake #rack-rows .row .pk-btn,
.intake #part-rows .row input, .intake #part-rows .row select, .intake #part-rows .row .pk-btn { border-color:transparent; background:transparent; }
.intake #rack-rows .row input:hover, .intake #rack-rows .row .pk-btn:hover, .intake #part-rows .row input:hover, .intake #part-rows .row .pk-btn:hover,
.intake #rack-rows .row input:focus, .intake #part-rows .row input:focus { border-color:var(--line); background:var(--surface); }
.intake .headrow { padding:0 6px; background:var(--bg); border-radius:10px; }
.intake .headrow .lbl { font-weight:600; }
.intake .cell { position:relative; min-width:0; }
.intake .row input, .intake .row select { width:100%; box-sizing:border-box; padding:0 8px; border:1px solid var(--line); border-radius:999px;
                                          font:inherit; font-size:13px; background:var(--surface); color:var(--text); min-width:0; flex:none;
                                          height:26px; }
.intake .row select[disabled], .intake .row input[disabled] { background:var(--bg); color:var(--muted); }
.intake .lbl.mlbl { display:none; }
.intake .lbl { font-size:12px; color:var(--muted); display:flex; align-items:center; gap:4px; white-space:nowrap; }
.intake .req { color:var(--danger); font-style:normal; }
.intake .x { border:none; background:none; color:var(--muted); font-size:18px; cursor:pointer; padding:0 4px; justify-self:start; }
.intake .sum { display:flex; justify-content:space-between; align-items:center; gap:12px; margin-top:10px; flex-wrap:wrap; }
@media (max-width:1400px) {
  .intake .headrow { display:none; }
  .intake .lbl.mlbl { display:flex; margin-bottom:2px; }
  .intake .grid.row { grid-template-columns:1fr 1fr; padding:10px; border:1px solid var(--line); border-radius:12px; margin-bottom:8px; }
  .intake .wide { grid-column:1 / -1; }
  .intake .head4 .pk, .intake .head4 input, .intake #supplier, .intake .head4 [name="order_comment"] { flex:1; width:auto; min-width:0; }
  .intake .head4 > .fl { flex:1 1 220px; }
  .intake #rack-rows .row input, .intake #rack-rows .row select, .intake #rack-rows .row .pk-btn,
  .intake #part-rows .row input, .intake #part-rows .row select, .intake #part-rows .row .pk-btn { border-color:var(--line); background:var(--surface); }
}
/* «Приехало»: на узком экране номер сверху, выбор места и действия — под ним */
@media (max-width:600px) { .list.accept .item { flex-wrap:wrap; } .list.accept .item > span:first-child { flex:1 1 100%; } .list.accept select { max-width:none !important; flex:1; } }

/* Финансы → Операции (реш. 86): плашки строки ввода одного размера; ✎ и пометка «исправлена» — у правого края */
.new-article-form { display:grid; gap:6px; margin-top:6px; }

/* «Партия / рейка / ЗЧ» — выбор нескольких изделий (реш. 87–88) */
.tp-btn { width:144px; height:44px; box-sizing:border-box; padding:0 12px; border:1px solid var(--line); border-radius:12px;
          background:var(--surface); color:var(--text); font:inherit; text-align:left; cursor:pointer;
          white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.tp-btn:disabled { opacity:.5; cursor:default; }
#op-edit .tp-btn { width:100%; }
/* окно «Партия · рейка» — общий вид списка (.pk-dd, ss 23.10), ниже — деление суммы и предпросмотр (только Операции) */
.tp-pop { max-height:calc(100vh - 16px); overflow-y:auto; overflow-x:hidden; display:grid; gap:4px; font-size:12px; }
.tp-results .pk-opt { cursor:pointer; }
.tp-row { display:flex; align-items:center; gap:6px; height:24px; padding:0 6px; white-space:nowrap; }
.tp-row > span { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; }
.tp-row .tp-amt { width:90px; height:22px; padding:0 8px; border:1px solid var(--line); border-radius:999px; text-align:right; font:inherit; }
.tp-row button { border:0; background:none; font-size:15px; cursor:pointer; color:var(--muted); padding:0 2px; }
.tp-title { font-size:11px; font-style:italic; color:var(--muted); padding:6px 6px 1px; display:flex; gap:6px; align-items:center; }
.tp-picked .muted { padding:0 6px; }
.tp-split { display:flex; gap:6px; flex-wrap:wrap; padding:0 6px; }
.tp-preview { background:var(--accent-tint); border-radius:10px; padding:6px 8px; }
.tp-preview:empty { display:none; }
.tp-error { color:var(--danger); }
.new-article-dialog { border:1px solid var(--line); border-radius:14px; padding:16px; background:var(--surface); color:var(--text); width:min(360px, calc(100vw - 32px)); }
.new-article-dialog::backdrop { background:rgba(0,0,0,.25); }
.new-article-dialog input, .new-article-dialog select { width:100%; box-sizing:border-box; padding:10px 12px; border:1px solid var(--line); border-radius:10px; font:inherit; }

/* дашборд (Ф6.6, реш. 97): четыре узкие плашки в ряд, строки одной высоты; пастельные цвета диаграмм */
.dash-form { display:grid; gap:16px; min-width:0; }
.dash-form > * { min-width:0; }
.dash-groups { display:grid; grid-template-columns:repeat(4, minmax(0, 350px)); gap:12px; align-items:start; }
.dash-card { padding:14px 16px; }
.dash-card h3 { margin:0 0 6px; }
.dk { display:grid; grid-template-columns:minmax(0,1fr) auto; grid-template-rows:22px 22px; gap:2px 8px; align-items:center;
      padding:7px 0; border-top:1px solid var(--line); font-size:14px; }
.dash-card h3 + .dk { border-top-color:transparent; }
.dk > .lab, .dk > .sub { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0; }
.dk .sub { font-size:12px; color:var(--muted); }
.dk .v { font-weight:600; text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.dk.child > .lab, .dk.child > .sub { padding-left:14px; }
.dk .chips { display:flex; gap:4px; justify-content:flex-end; }
.dtag { font-size:10px; color:var(--muted); border:1px solid var(--line); border-radius:6px; padding:0 5px; margin-left:4px; }
.dash .d { display:inline-flex; align-items:center; gap:3px; font-size:12px; font-weight:600; padding:2px 8px; border-radius:980px;
           white-space:nowrap; font-variant-numeric:tabular-nums; }
.dash .d.good { color:var(--ok); background:#e6f4ea; }
.dash .d.bad { color:var(--danger); background:#fde8ea; }
.dash .d.same { color:var(--muted); background:var(--bg); }
@media (max-width:1280px) {  /* узкие плашки: название — своей линией, сумма и метки — второй, пояснение — третьей */
  .dash-card { padding:14px 12px; } .dash .d { padding:2px 6px; }
  .dk { grid-template-columns:auto minmax(0,1fr); grid-template-rows:20px 22px 18px; }
  .dk > .lab { grid-column:1 / -1; grid-row:1; } .dk > .v { grid-column:1; grid-row:2; text-align:left; }
  .dk > .chips { grid-column:2; grid-row:2; } .dk > .sub { grid-column:1 / -1; grid-row:3; }
}
@media (max-width:900px) { .dash-groups { grid-template-columns:repeat(2, minmax(0, 350px)); } }
@media (max-width:640px) { .dash-groups { grid-template-columns:1fr; } }
.dash .chead { display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin-bottom:6px; }
.dash .chead h3 { margin:0 auto 0 0; }
.dash .legend { display:flex; gap:14px; flex-wrap:wrap; font-size:13px; }
.dash .legend i { display:inline-block; width:10px; height:10px; border-radius:50%; margin-right:6px; }
.dash .legend .ln { display:inline-block; width:16px; height:2px; background:#48484a; vertical-align:middle; margin-right:6px; }
.dash .sel { width:auto; padding:7px 10px; border:1px solid var(--line); border-radius:10px; font:inherit; font-size:13px;
             font-weight:600; background:var(--surface); color:var(--text); cursor:pointer; }
.dash-chart svg text { font-size:11px; fill:var(--muted); font-family:inherit; }
.dash-two { display:grid; grid-template-columns:repeat(auto-fit, minmax(380px, 1fr)); gap:12px; }
@media (max-width:640px) { .dash-two { grid-template-columns:1fr; } }
.dseg { display:inline-flex; background:var(--bg); border-radius:980px; padding:2px; }
.dseg label { cursor:pointer; }
.dseg input { position:absolute; opacity:0; pointer-events:none; }
.dseg span { display:block; padding:4px 10px; border-radius:980px; font-size:12px; color:var(--muted); }
.dseg input:checked + span { background:var(--surface); color:var(--text); box-shadow:0 1px 2px rgba(0,0,0,.12); }
.dash .hb { display:grid; grid-template-columns:150px minmax(0,1fr) 90px; gap:10px; align-items:center; padding:5px 0; font-size:13px; }
.dash .hb .nm { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dash .hb .fill { height:14px; background:#86cf9c; border-radius:0 4px 4px 0; min-width:2px; }
.dash .hb .n { text-align:right; font-weight:600; font-variant-numeric:tabular-nums; }
.dash .hb:hover .fill { filter:brightness(.92); }
.dash .stack { display:flex; height:22px; gap:2px; margin:6px 0 8px; }
.dash .stack div:first-child { border-radius:4px 0 0 4px; } .dash .stack div:last-child { border-radius:0 4px 4px 0; }
.dash .sl { margin-bottom:14px; }
.dash-tip i { display:inline-block; width:8px; height:8px; border-radius:50%; margin-right:5px; }
@media (max-width:640px) { .dash .hb { grid-template-columns:96px minmax(0,1fr) 70px; } }

/* поле «период со сравнением»: сверху период, под ним серым сравнение; окно — период справа, сравнение слева */
.drp-two { flex-direction:column; align-items:flex-start; justify-content:center; line-height:1.25; }
.drp-two small { display:block; font-size:12px; color:var(--muted); font-weight:400; }
.drp-pop.cmp .drp-head { background:none; padding:0; gap:10px; }
.drp-pop .rng { flex:1 1 220px; border:1px solid var(--line); border-radius:10px; padding:8px 10px; cursor:pointer; }
.drp-pop .rng .t { font-size:11px; color:var(--muted); display:flex; justify-content:space-between; gap:6px; align-items:center; }
.drp-pop .rng .t i { display:inline-block; width:9px; height:9px; border-radius:2px; margin-right:5px; }
.drp-pop .rng input { width:105px; height:26px; padding:0 10px; font-size:13px; border:1px solid var(--line); border-radius:999px; background:var(--surface); }
.drp-pop .rng.per .t i { background:var(--accent); } .drp-pop .rng.cmp .t i { background:#f97316; }
.drp-pop .rng.act.per { border-color:var(--accent); box-shadow:0 0 0 1px var(--accent); }
.drp-pop .rng.act.cmp { border-color:#f97316; box-shadow:0 0 0 1px #f97316; }
.drp-pop .auto { border:0; background:none; color:var(--accent); cursor:pointer; font:inherit; font-size:11px; padding:0; }
.drp-pop.cmp .drp-grid { grid-template-columns:30px repeat(7, 34px); }
.drp-grid .wk { font-style:normal; font-size:10px; color:var(--muted); text-align:center; cursor:pointer; border-radius:6px; padding:9px 0; }
.drp-grid .wk:hover { background:var(--line); color:var(--text); }
.drp-title.pick b { cursor:pointer; padding:2px 8px; border-radius:6px; }
.drp-title.pick b:hover { background:var(--line); }
.drp-grid button.cin { background:#ffedd5; }
.drp-grid button.cedge { background:#f97316; color:#fff; }
.drp-foot { display:flex; justify-content:space-between; align-items:center; gap:10px; margin-top:10px; font-size:12px; color:var(--muted); }
.drp-grid button.dis { color:#c7c7cc; cursor:default; }

/* Финансы → Операции (реш. 99): фильтры, строка ввода и список — одна сетка из 8 равных ячеек + колонка кнопки */

.ops-page .req { color:var(--danger); font-style:normal; }
.ops-page .ctl { height:44px; width:100%; box-sizing:border-box; border:1px solid var(--line); border-radius:12px; background:var(--surface);
                 color:var(--text); font:inherit; font-size:14px; padding:0 12px; display:flex; align-items:center; gap:6px; min-width:0; }
.ops-page select.ctl, .ops-page input.ctl { display:block; }
.ops-page .ctl.dis, .ops-page select.ctl:disabled { background:var(--bg); color:var(--muted); }
.ops-page .ctl .v { flex:1; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; text-align:left; }
.ops-page .ctl .v.ph { color:var(--muted); }
.ops-page .ctl .caret { color:var(--muted); font-size:11px; }
.ops-page .dd-btn { cursor:pointer; }
.ops-page .ctl-btn { height:44px; width:100%; }
.ops-page .tp-btn { height:44px; width:100%; box-sizing:border-box; text-align:left; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ops-note { margin-top:8px; font-size:13px; color:var(--accent); }

.ops-page .dd.open { display:block; }


.ops-page .dd .new { color:var(--accent); font-weight:600; }
.ops-page .dot { width:10px; height:10px; border-radius:50%; flex:none; border:1px solid rgba(0,0,0,.08); }
.ops-page optgroup { font-style:italic; }
/* плашки: характер — красный / зелёный / оранжевый; статья — пастель по группе */
.chip3 { display:inline-block; padding:2px 10px; border-radius:980px; font-size:12px; white-space:nowrap; max-width:100%; overflow:hidden; text-overflow:ellipsis; }
.chip3.k-out { background:var(--danger-tint); color:var(--danger); } .chip3.k-in { background:var(--ok-tint); color:var(--ok); } .chip3.k-tr { background:#fde8d4; color:#a0521d; }
.chip3.a-tax { background:#fbf0bf; color:#7a5b00; } .chip3.a-fix { background:#d9e2fb; color:#2f4fae; }
.chip3.a-var { background:#d3eff7; color:#0e6680; } .chip3.a-inc { background:#e4f4c9; color:#4b7414; }
.chip3.a-rs { background:#f7d9e7; color:#a1245e; } .chip3.a-cost { background:#e6e7ea; color:#4c515a; }
.ops-list .num { text-align:left; font-weight:600; font-variant-numeric:tabular-nums; }
.ops-list .num.in { color:var(--ok); } .ops-list .num.out { color:var(--danger); } .ops-list .num.tr { color:#a0521d; }
/* ===== Компактная вёрстка — сквозные правила для всех разделов (ss 14.10, вариант A; превью docs/дизайн/архив/компактность.html) ===== */
/* 1. Пункты верхнего меню, подменю и вкладки отчётов — одной ширины и одной формы; сужаются вместе, потом переносятся */

/* 2. Плашки статусов — одного размера, текст по центру, можно в 2 строки */
.chip2, .tag { display:inline-flex; align-items:center; justify-content:center; width:auto; height:17px; padding:0 8px; align-self:center;
  border-radius:9px; font-size:11px; line-height:17px; text-align:center; white-space:nowrap; vertical-align:middle; flex:none; }  /* п. 8а: 17 / 11 px, одной строкой */
/* 3. Блок не шире содержимого: сумма рядом с названием, а не у края экрана */
.list .item { display:flex; justify-content:space-between; align-items:center; padding:10px 0; border-top:1px solid var(--line); font-size:14px; gap:24px; }
@media (min-width:1100px) {
  .page.cols { display:flex; flex-wrap:wrap; align-items:flex-start; align-content:flex-start; }
  .page.cols > * { flex:0 1 auto; width:fit-content; min-width:320px; max-width:640px; }
  .page.cols > :first-child, .page.cols > .span { flex:1 1 100%; width:100%; max-width:none; }
  .page.cols > .wide, .page.cols > .card.span { flex:0 1 auto; width:fit-content; max-width:100%; }  /* бывшие «во всю ширину» — по содержимому */
}
.page:not(.cols):not(.dash):not(.intake):not(.ops-page):not(.home-page) > .card { justify-self:start; width:fit-content; min-width:min(320px, 100%);
  max-width:100%; }

/* пояснения внутри блока не растягивают его — переносятся по ширине таблицы или списка */
.card > p, .card > div.muted, .card > .muted { width:0; min-width:100%; }
/* шапка страницы: статус рядом с заголовком, а не у правого края экрана */
.page > .head:first-child, .page > :first-child > .head, .page > .span > .head { justify-content:flex-start; column-gap:14px;
  align-items:center; }
.page.cols > .actions { min-width:0; }
/* правки ss 14.10 (второй круг) */

/* дашборд: метки сравнения одной ширины — столбиком друг под другом во всех строках */
.dk .chips .d { justify-content:center; padding:2px 4px; }
.dk .chips .d:first-child { width:124px; } .dk .chips .d:last-child { width:60px; }
/* «Авито» — плашка справа от продажи, высотой с поле (реш. 129): пустая серая, отмеченная — цвета Авито */
/* ✎ — правка в строке (реш. 131): «Сохранить» и «×», подсказка под строкой, недоступное в списках — серым */
.ops-entry .entry-acts { display:flex; gap:4px; }
.ops-entry .entry-acts .ctl-btn { flex:1; min-width:0; }
.ops-entry .entry-acts .entry-x { width:auto; flex:none; padding:0 10px; background:none; border-color:transparent; color:var(--muted); }
.ops-entry .entry-x[hidden] { display:none; }
.ops-entry.editing td { background:var(--accent-tint); }
.ops-edit-tip td { background:var(--accent-tint); font-size:12px; color:var(--accent); padding:2px 8px 6px; white-space:normal; }
.ops-page .dd .opt.off { color:var(--muted); opacity:.5; cursor:default; }
.ops-page .dd .opt.off:hover { background:none; }
.ops-entry .ctx-line { display:flex; gap:6px; align-items:center; }
.ops-entry .ctx-line > .ctl { flex:1; min-width:0; }
.ops-entry .avito-chip { position:relative; flex:none; height:26px; padding:0 10px; display:flex; gap:5px; align-items:center;
  border:1px solid var(--line); border-radius:999px; background:var(--surface); font-size:12px; color:var(--muted); cursor:pointer; user-select:none; white-space:nowrap; }
.ops-entry .avito-chip[hidden] { display:none; }
.ops-entry .avito-chip input { position:absolute; opacity:0; width:1px; height:1px; pointer-events:none; }
.ops-entry .avito-chip .box { width:12px; height:12px; border:1px solid #b9b9c0; border-radius:3px; display:inline-grid; place-items:center; font-size:9px; line-height:1; }
.ops-entry .avito-chip:has(input:checked) { border-color:#8f7cf0; background:#f0edfd; color:#5b47c9; }
.ops-entry .avito-chip:has(input:checked) .box { background:#5b47c9; border-color:#5b47c9; color:#fff; }
.ops-entry .avito-chip:has(input:checked) .box::after { content:"✓"; }
#intake [hidden] { display:none !important; }
/* реш. 103: решение по рейке — маленькие овальные плашки, как статусы; счётчики дней в шапке */
.decide { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.decide form { margin:0; }

.pill-sm:hover:not([disabled]) { border-color:var(--accent); }
.pill-sm.on { background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600; }
.pill-sm[disabled] { opacity:.45; cursor:not-allowed; }
.wait-pick summary::-webkit-details-marker { display:none; }
.wait-pick[open] { flex-basis:100%; }
.pill-sm.on[disabled] { opacity:1; cursor:default; }  /* текущее решение — ярко, даже если повторно нельзя */
/* реш. 103: карточка рейки — «Ход работ» (чат, слева) и «Финансы» (справа, мастер не видит) */
.rack-main { display:grid; grid-template-columns:minmax(0,1fr) 360px; gap:16px; align-items:start; width:100%; }
.rack-main:not(:has(.fin-card)) { grid-template-columns:minmax(0,1fr); }

@media (max-width:900px) { .rack-main { grid-template-columns:1fr; } .rack-main .fin-card { position:static; order:-1; } }
.page.cols > .rack-main { flex:1 1 100%; max-width:none; width:100%; }
.feed-filters { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:8px; }
.feed-filters span { font-size:12px; padding:3px 10px; border-radius:999px; border:1px solid var(--line); color:var(--muted); cursor:pointer; }
.feed-filters span.on { background:var(--accent-tint); color:var(--accent); border-color:var(--accent); }
.chat { display:flex; flex-direction:column; gap:8px; }
.chat .day { align-self:center; font-size:12px; color:var(--muted); background:var(--bg); padding:2px 10px; border-radius:999px; margin:6px 0 2px; }
.chat .sys { align-self:center; max-width:92%; font-size:13px; color:var(--muted); text-align:center; }
.chat .sys .note { color:var(--text); }
.chat .sys .t, .chat .msg .t { font-size:11px; color:var(--muted); margin-left:6px; }
.chat .sys.alert { background:#fff7e0; border:1px solid #a0521d; color:var(--text); border-radius:12px; padding:6px 12px; }
.chat .msg { max-width:78%; padding:7px 11px 5px; border-radius:14px; background:var(--bg); align-self:flex-start; font-size:14px; }
.chat .msg.me { align-self:flex-end; background:var(--accent-tint); }
.chat .msg .who { font-size:12px; font-weight:700; color:var(--accent); }
.chat .msg .t { display:block; text-align:right; margin:0; }
/* правка записи (ss 17.10): «изменено» — бордово-красным текстом с пунктиром, прежний текст во всплывашке */
.chat .edited { position:relative; color:var(--danger); border-bottom:1px dashed var(--danger); cursor:help; margin-right:6px; }
.chat .edited .old { display:none; position:absolute; z-index:15; bottom:130%; right:0; width:min(280px, 70vw); background:var(--surface);
  color:var(--muted); text-decoration:line-through; border:1px solid var(--line); border-radius:10px; padding:8px 10px;
  box-shadow:0 8px 20px rgba(0,0,0,.15); font-size:13px; text-align:left; white-space:normal; }
.chat .edited .old .was { display:block; text-decoration:none; font-size:11px; margin-top:4px; }
.chat .edited:hover .old, .chat .edited:focus .old { display:block; }
.chat .msg-edit { margin-right:6px; } .chat .msg-edit summary { color:var(--muted); }
.chat .msg-edit[open] form { top:auto; bottom:22px; left:auto; right:0; display:grid; gap:6px; width:min(320px, 80vw); }
.chat .msg-edit textarea { font:inherit; font-size:14px; padding:6px 8px; border:1px solid var(--line); border-radius:8px; resize:vertical; }
.chat .msg .work { border-left:3px solid #a0521d; padding-left:8px; }
.chat .msg-title { display:block; font-size:13px; }
.chat .msg video, .chat .msg-img { max-width:100%; max-height:260px; border-radius:10px; display:block; margin-top:4px; }
.chat .msg-file { display:block; margin-top:4px; }
.compose { display:flex; gap:8px; margin-top:12px; align-items:flex-end; }  /* поле растёт — кнопки внизу, как в Telegram */
.compose [name=text] { flex:1; min-width:0; resize:none; overflow-y:hidden; line-height:22px; box-sizing:border-box; padding:10px 12px; border:1px solid var(--line); border-radius:12px; font:inherit; background:var(--surface); color:var(--text); }
.compose .cbtn { width:44px; height:44px; flex:none; display:inline-flex; align-items:center; justify-content:center; border-radius:12px;
  border:1px solid var(--line); background:var(--surface); font-size:18px; cursor:pointer; color:var(--text); }
.compose .cbtn.send { background:var(--accent); border-color:var(--accent); color:#fff; }
.compose-files { font-size:12px; margin-top:4px; min-height:0; }
.fin-card .fin { width:100%; border-collapse:collapse; font-size:14px; }
.fin-card .fin td { padding:6px 0; border-top:1px solid var(--line); vertical-align:top; }
.fin-card .fin td:last-child { text-align:right; white-space:nowrap; padding-left:16px; font-variant-numeric:tabular-nums; }
.fin-card .fin .src { display:block; font-size:12px; color:var(--muted); }
.fin-card .fin tr.total td { font-weight:700; border-top:2px solid var(--text); }
/* голос → текст (реш. 115, ui/voice.js): 🎤 у поля с data-voice; 44 px — попасть пальцем в перчатке */
.vbtn { width:44px; height:44px; flex:none; display:inline-flex; align-items:center; justify-content:center; border-radius:12px;
  border:1px solid var(--line); background:var(--surface); font-size:18px; cursor:pointer; color:var(--text);
  user-select:none; -webkit-user-select:none; touch-action:none; vertical-align:top; }
.vbtn.rec-on { background:var(--danger); border-color:var(--danger); color:#fff; transform:scale(1.12); }
.vstatus { font-size:13px; color:var(--muted); margin-top:6px; contain:inline-size; }  /* длинная строка «● 0:05…» не раздвигает блок — иначе 🎤 уезжает из-под пальца (ss 23.10) */
.vstatus.bad { color:var(--danger); }
/* 🎤 значком в коротком поле (data-voice="in", ss 23.10 вариант В) и панель ввода на телефоне */
.vin { position:absolute; width:20px; height:20px; padding:0; border:0; border-radius:50%; background:var(--accent-tint);
  font-size:11px; line-height:1; display:inline-flex; align-items:center; justify-content:center; cursor:pointer; z-index:2;
  user-select:none; -webkit-user-select:none; touch-action:none; }
.vin[hidden] { display:none; }
.vin.rec-on { background:var(--danger); color:#fff; transform:scale(1.15); }
.vstatus.vfloat { position:fixed; z-index:300; contain:none; width:max-content; margin:0; padding:4px 8px; max-width:min(420px, 90vw); font-size:12px;
  background:var(--surface); border:1px solid var(--line); border-radius:8px; box-shadow:0 4px 14px rgba(0,0,0,.12); }
.vrow { display:flex; gap:8px; align-items:flex-end; }
.vrow textarea { flex:1; min-width:0; box-sizing:border-box; padding:10px 12px; border:1px solid var(--line); border-radius:12px;
  font:inherit; font-size:14px; line-height:22px; resize:none; background:var(--surface); color:var(--text); }
.vsheet { position:fixed; left:0; right:0; bottom:0; z-index:200; background:var(--surface); border-top:1px solid var(--line);
  border-radius:18px 18px 0 0; box-shadow:0 -6px 24px rgba(0,0,0,.14); padding:12px 16px calc(12px + env(safe-area-inset-bottom)); }
.vsheet[hidden] { display:none; }
.vsheet-h { font-size:12px; color:var(--muted); margin-bottom:6px; }
.vsheet textarea { font-size:16px; }  /* 16 px — телефон не увеличивает страницу при вводе */
.vsheet-act { display:flex; justify-content:flex-end; margin-top:8px; }
/* карточка рейки строго по макету (реш. 103): шапка → решение → «Ход работ» | «Финансы» */
.page.rack-page { display:grid; grid-template-columns:minmax(0,1fr); gap:16px; }

.rack-head { display:grid; gap:10px; }
.rack-head .rh-top { display:flex; flex-wrap:wrap; align-items:center; gap:8px 14px; }
.rack-head h1 { margin:0; font-size:26px; }
.rack-head .rh-model { font-size:14px; }
.rack-head .facts { display:flex; flex-wrap:wrap; gap:4px 18px; font-size:14px; color:var(--muted); }
.rack-head .facts b { color:var(--text); font-weight:600; }
.rack-head .path { display:flex; flex-wrap:wrap; gap:6px; align-items:center; font-size:12px; }
.rack-head .path span { padding:3px 10px; border-radius:999px; background:var(--bg); color:var(--muted); }
.rack-head .path span.now { background:var(--accent); color:#fff; font-weight:600; }
.rack-head .path i { color:var(--muted); font-style:normal; }

.rack-head .rh-actions form { margin:0; }
.chip2.violet { background:#e8e2f6; color:#5b3fa0; }
.rack-side { display:grid; gap:16px; align-content:start; min-width:0; }
.rack-main .rack-side .card { width:auto; }
.rack-main .rack-side { position:sticky; top:12px; }
@media (max-width:900px) { .rack-main .rack-side { position:static; order:-1; } }
.page.rack-page > .card,.page.rack-page > .rack-main { justify-self:stretch !important; width:auto !important; max-width:none !important; }  /* сильнее правила «блок по содержимому» */
/* финальный макет карточки: «ещё» в шапке, голосовое; заголовки — цветом темы (ss 19.10) */

.chat .sys b { color:var(--text); font-weight:600; }
/* ss 17.10: действия — второй строкой в «Решении по рейке»; характеристики — второй строкой шапки */
.decide-actions { display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; margin-top:12px; padding-top:10px; border-top:1px solid var(--line); font-size:13px; }
.decide-actions .rh-actions { display:flex; flex-wrap:wrap; gap:8px; }
.decide-actions .rh-actions form { margin:0; }
.rack-head .rh-actions { display:flex; flex-wrap:wrap; gap:8px; }
/* правка на месте в шапке карточки: цена продажи, «будет готова», Авито (ss 17.10) */
.inline-edit { display:inline-block; position:relative; }
.inline-edit summary { list-style:none; cursor:pointer; } .inline-edit summary::-webkit-details-marker { display:none; }
.inline-edit summary b { color:var(--text); font-weight:600; }

.price-edit summary { font-size:14px; color:var(--muted); }
.inline-edit[open] form { position:absolute; z-index:20; top:26px; left:0; background:var(--surface); border:1px solid var(--line); border-radius:12px; padding:8px; box-shadow:0 8px 24px rgba(0,0,0,.12); white-space:nowrap; display:flex; align-items:center; gap:8px; }
.inline-edit[open] form input { flex:0 0 auto; width:150px; max-width:none !important; }  /* поле не сжимается в кружок (ss 19.10) */
/* Склад → таблицы (ss 17.10, превью docs/дизайн/архив/закрепление.html): плотность Google-таблиц — строка 21 px,
   фильтр у каждой колонки, закрепление до «Кузова» с тенью при прокрутке, ширина колонок мышкой */
.sheet-bar { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.sheet-bar .pill-sm { padding:5px 12px; font-weight:600; }
.sheet-bar [hidden] { display:none !important; }
.pill-sm.primary { background:var(--accent); border-color:var(--accent); color:#fff; }
.link-btn { border:0; background:none; padding:0; font:inherit; color:var(--q2); cursor:pointer; }
.fchip { padding:3px 10px; border-radius:999px; border:1px solid var(--line); font-size:12px; color:var(--muted); cursor:pointer; background:var(--surface); }
.fchip.on { background:var(--accent-tint); color:var(--accent); border-color:var(--accent); }
/* «Настройки таблицы»: плотный список, галочка строго слева от названия */
.set-wrap { position:relative; }
.setmenu { position:absolute; z-index:30; top:32px; left:0; background:var(--surface); border:1px solid var(--line); border-radius:10px;
  box-shadow:0 8px 24px rgba(0,0,0,.14); padding:4px 0; min-width:210px; max-height:min(460px, 70vh); overflow:auto; font-size:13px; }
.setmenu[hidden] { display:none; }
.setmenu .grp { font-size:11px; color:var(--muted); padding:6px 12px 2px; }
.setmenu label { display:grid; grid-template-columns:14px 1fr; align-items:center; gap:8px; padding:0 12px; line-height:22px; cursor:pointer; white-space:nowrap; }
.setmenu label:hover { background:var(--bg); }
.setmenu input { margin:0; width:14px; height:14px; accent-color:var(--accent); }
.setmenu .foot { border-top:1px solid var(--line); margin-top:4px; padding:6px 12px 2px; display:flex; gap:14px; font-size:12px; }
/* таблица */

table.sheet { border-collapse:separate; border-spacing:0; font-size:12.5px; }
.sheet th, .sheet td { border-right:1px solid var(--line); border-bottom:1px solid var(--line); padding:0 6px; height:21px; line-height:20px;
  white-space:nowrap; background:var(--surface); max-width:260px; overflow:hidden; text-overflow:ellipsis; }
.sheet th { position:sticky; top:0; z-index:2; background:var(--bg); color:var(--muted); font-weight:600; font-size:12px; text-align:left; height:24px; overflow:visible; }
.sheet th .h { display:flex; align-items:center; justify-content:space-between; gap:4px; overflow:hidden; }
.sheet th .t { overflow:hidden; text-overflow:ellipsis; }
.sheet th .fb { flex:none; width:18px; height:18px; padding:0; border:0; border-radius:4px; background:transparent; color:var(--muted);
  cursor:pointer; display:inline-flex; align-items:center; justify-content:center; }
.sheet th .fb:hover { background:var(--line); }
.sheet th .fb.on { background:var(--accent); color:#fff; }
.sheet th .fb svg { width:11px; height:11px; }
.sheet th .rz { position:absolute; top:0; right:-3px; width:6px; height:100%; cursor:col-resize; z-index:4; }
.sheet th .rz:hover, .sheet th .rz.drag { background:var(--accent); opacity:.5; }
.sheet th:last-child .rz { right:0; }  /* ручка последней колонки не вылезает за край — иначе лишний ползунок на 3 px */
body.resizing { cursor:col-resize; user-select:none; }
.sheet .num { text-align:left; font-variant-numeric:tabular-nums; }  /* всё в таблицах — от левого края (ss 20.10) */
.sheet .stick { position:sticky; z-index:1; } .sheet th.stick { z-index:3; }
.sheet .edge { transition:box-shadow .15s; }
.sheet-wrap.scrolled .sheet .edge { box-shadow:6px 0 8px -4px rgba(0,0,0,.18); }
.sheet .pick { width:26px; padding:0; text-align:center; }
.sheet .pick input { margin:0; vertical-align:middle; accent-color:var(--accent); }
.sheet tbody tr:hover td { background:var(--bg); }
.sheet .col-off { display:none; }
.sheet td.long { color:var(--danger); font-weight:700; }
.sheet .st { display:inline-flex; align-items:center; justify-content:center; min-width:78px; height:17px; padding:0 6px; border-radius:9px; font-size:11px; line-height:17px; }
.st.s-diag { background:var(--info-tint); color:var(--info); } .st.s-clean { background:#e8e2f6; color:#5b3fa0; }
.st.s-repair { background:#fde8d4; color:#a0521d; } .st.s-wait { background:var(--danger-tint); color:var(--danger); }
.st.s-sale, .st.s-res { background:var(--ok-tint); color:var(--ok); } .st.s-res { outline:1px dashed var(--ok); }
.st.s-transit, .st.s-gone { background:var(--bg); color:var(--muted); }
.edit-price { cursor:text; border-bottom:1px dashed var(--line); }
.price-in { width:90px; height:18px; padding:0 4px; border:1px solid var(--accent); border-radius:4px; font:inherit; text-align:left; }
.price-in.bad { border-color:var(--danger); }
/* комментарий в ячейке Склада → «Ход работ» (ss 20.10) */
.edit-comment { cursor:text; display:block; }
.comment-in { width:100%; min-width:180px; height:18px; padding:0 4px; border:1px solid var(--accent); border-radius:4px; font:inherit; }
.comment-in.bad { border-color:var(--danger); }
.comment-in + .vin { width:16px; height:16px; font-size:9px; }  /* 🎤 в ячейке Склада: поле 18 px */
.sheet-note { font-size:12px; margin-top:6px; }
.sheet .low { color:var(--danger); font-weight:700; }
/* фильтр у колонки — устройство как в Google-таблицах */
.fpop { position:fixed; z-index:50; width:270px; background:var(--surface); border:1px solid var(--line); border-radius:10px;
  box-shadow:0 10px 28px rgba(0,0,0,.16); font-size:13px; padding:6px 0; }
.fpop[hidden] { display:none; }
.fpop .it { display:flex; align-items:center; gap:10px; padding:0 14px; height:30px; cursor:pointer; }
.fpop .it:hover { background:var(--bg); }
.fpop .ico { width:14px; color:var(--muted); text-align:center; }
.fpop hr { border:0; border-top:1px solid var(--line); margin:6px 0; }
.fpop .sec { display:flex; align-items:center; gap:6px; padding:0 14px; height:30px; cursor:pointer; font-weight:600; }
.fpop .sec .ar { color:var(--muted); width:12px; transition:transform .15s; }
.fpop .sec.open .ar { transform:rotate(90deg); }
.fpop .body { padding:2px 14px 6px; display:none; } .fpop .sec.open + .body { display:block; }
.fpop select, .fpop input[type=text] { font:inherit; font-size:13px; width:100%; height:30px; padding:0 8px; border:1px solid var(--line);
  border-radius:6px; background:var(--surface); color:var(--text); box-sizing:border-box; }
.fpop .cx { margin-top:6px; }
.fpop .sa { display:flex; gap:12px; font-size:12px; margin:2px 0 6px; }
.fpop .vals { max-height:190px; overflow:auto; border:1px solid var(--line); border-radius:6px; margin-top:6px; padding:2px 0; }
.fpop .vals label { display:grid; grid-template-columns:14px 1fr auto; gap:8px; align-items:center; padding:0 8px; line-height:22px; cursor:pointer; }
.fpop .vals label[hidden] { display:none; }
.fpop .vals label:hover { background:var(--bg); }
.fpop .vals span:nth-child(2) { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.fpop .vals input { margin:0; width:14px; height:14px; accent-color:var(--accent); }
.fpop .vals .c { color:var(--muted); font-size:11px; }
.fpop .act { display:flex; justify-content:flex-end; gap:8px; padding:8px 14px 4px; }
.fpop .act .pill-sm { padding:5px 14px; }

/* карточка партии (ss 17.10, превью docs/дизайн/архив/карточка_партии.html): слева состав и «Ход партии», справа статистика */
.batch-left { display:grid; grid-template-columns:minmax(0, 1fr); gap:16px; min-width:0; align-content:start; }
.batch-head .supp { margin-top:8px; font-size:13px; background:var(--bg); border-radius:10px; padding:6px 10px; color:var(--muted); }
.batch-head .supp b { color:var(--text); }
.batch-page .bad { color:var(--danger); }
.comp-wrap { overflow-x:auto; }
table.comp { width:100%; border-collapse:collapse; font-size:13px; }
table.comp th { text-align:left; font-size:12px; color:var(--muted); font-weight:600; padding:4px 6px; border-bottom:1px solid var(--line); white-space:nowrap; }
table.comp td { padding:4px 6px; border-bottom:1px solid var(--line); white-space:nowrap; }
table.comp .num { text-align:left; font-variant-numeric:tabular-nums; }
table.comp tr.grp-row td { background:var(--bg); font-weight:700; font-size:12px; color:var(--muted); }
table.comp .st { display:inline-flex; align-items:center; justify-content:center; min-width:82px; height:19px; padding:0 6px; border-radius:10px; font-size:11px; }
.comp-note { font-size:12px; margin-top:6px; }
.feed-pay { display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-top:10px; font-size:12px; }
.chat .sys.money { align-self:stretch; max-width:none; text-align:left; background:var(--surface); border:1px solid var(--line);
  border-left:3px solid var(--q2); border-radius:10px; padding:6px 10px; }
.chat .sys.money .sum { float:right; font-weight:700; color:var(--text); font-variant-numeric:tabular-nums; margin-left:10px; }
.stat-card .hero { display:grid; gap:8px; }
.stat-card .hero .big { font-size:34px; font-weight:700; color:var(--ok); line-height:1; }
.stat-card .hero .lbl { font-size:13px; }
.stat-card .bar { height:8px; border-radius:4px; background:var(--bg); overflow:hidden; }
.stat-card .bar i { display:block; height:100%; background:var(--ok); border-radius:4px; }
.stat-card .fc { font-size:13px; background:var(--accent-tint); color:var(--accent); border-radius:10px; padding:6px 10px; }
.stat-card .grp { margin-top:14px; }
.stat-card h4 { margin:0 0 6px; font-size:12px; text-transform:uppercase; letter-spacing:.04em; color:var(--muted); }
.stat-card .kv2 { display:flex; justify-content:space-between; gap:10px; font-size:14px; padding:3px 0; border-top:1px solid var(--line); }
.stat-card .kv2 b { font-variant-numeric:tabular-nums; white-space:nowrap; text-align:right; }
.stat-card .avg { display:block; font-size:11px; color:var(--muted); font-weight:400; }
.stat-card .better { color:var(--ok); } .stat-card .worse { color:var(--danger); }
.stat-card .steps { display:flex; gap:6px; margin-bottom:8px; }
.stat-card .steps div { flex:1; background:var(--bg); border-radius:10px; padding:6px 8px; text-align:center; font-size:12px; color:var(--muted); }
.stat-card .steps b { display:block; font-size:18px; color:var(--text); }
.stat-card .steps i { font-style:normal; font-size:11px; }
.stat-card .fate { display:flex; height:22px; border-radius:6px; overflow:hidden; gap:2px; margin:4px 0 6px; }
.stat-card .fate span { display:flex; align-items:center; justify-content:center; font-size:11px; color:#fff; }
.stat-card .legend { display:flex; flex-wrap:wrap; gap:4px 12px; font-size:12px; color:var(--muted); margin-bottom:6px; }
.stat-card .legend i { display:inline-block; width:9px; height:9px; border-radius:2px; margin-right:4px; }
.f-sold { background:#8c847a; } .f-sale { background:var(--ok); } .f-repair { background:#a0521d; } .f-diag { background:var(--info); }
.f-transit { background:#b7b0a5; } .f-donor { background:#5b3fa0; } .f-off { background:var(--danger); }
.batch-page .rack-main { grid-template-columns:minmax(0, 1fr) 380px; }
@media (max-width:900px) { .batch-page .rack-main { grid-template-columns:minmax(0, 1fr); } }

/* ===== Реш. 105 — единый стиль сайта (ss 17.10, превью docs/дизайн/архив/компактное_меню.html) =====
   Меню и подменю — плашки 26 px в одной полосе, выбранное — одного цвета; поля форм и кнопки — 26 px.
   Заменяет размеры меню реш. 100 (блок «Компактная вёрстка» выше). Исключения: поле и кнопки чата
   («Ход работ», «Ход партии») — 44 px, чтобы удобно держать 🎤 на телефоне. */
.topbar { position:sticky; top:0; z-index:10; background:var(--nav-bg); border-bottom:1px solid var(--line); backdrop-filter:blur(12px); }
.topbar .nav { position:static; border-bottom:0; background:none; backdrop-filter:none; padding:8px 16px; gap:6px; }
.topbar .subnav { max-width:none; margin:0; padding:0 16px 8px; gap:6px; }
.nav .item,.subnav .pill { text-align:center; flex:none; min-width:0; height:26px; padding:0 12px; border-radius:999px; border:1px solid var(--line); background:var(--surface); color:var(--text); font-size:13px; font-weight:400; line-height:1; display:inline-flex; align-items:center; justify-content:center; white-space:nowrap; }
.nav .item.on, .subnav .pill.primary {
  background:var(--nav-active); border-color:var(--nav-active); color:var(--nav-active-text); }
.nav .right { margin-left:auto; display:flex; align-items:center; font-size:12px; gap:4px; } .nav .right .linkbtn { padding:2px 8px; }
@media (max-width:640px) {
  .nav .item, .subnav .pill { flex:none; height:26px; font-size:12px; }
  .nav { gap:6px; } .nav .right { flex:1 1 100%; justify-content:flex-end; } }
/* поля форм и кнопки — 26 px */
.pill { border-radius:980px; font-weight:600; border:1px solid var(--line); background:var(--surface); color:var(--text); cursor:pointer; font-family:inherit; height:26px; padding:0 14px; font-size:13px; display:inline-flex; align-items:center; justify-content:center; line-height:1; }
.pill-sm { border-radius:999px; border:1px solid var(--line); background:var(--bg); font:inherit; font-size:12px; color:var(--text); cursor:pointer; list-style:none; height:26px; padding:0 12px; display:inline-flex; align-items:center; }
select, .inline-form input, .field input, .grid-form input, .grid-form select, .table input, .table select,
.new-article-dialog input, .new-article-dialog select,
.intake .head4 input, .intake .head4 select, .intake .row input, .intake .row select, .ops-page .ctl {
  height:26px; padding:0 10px; font-size:13px; border-radius:999px; }
.ops-page .ctl-btn, .ops-page .drp, .ops-page .drp-btn, .ops-page .tp-btn, .rack-head .rh-actions .pill, .decide-actions .pill { height:26px; }
.lbl, .intake .lbl { font-size:11px; }
textarea { border-radius:10px; }
/* общая таблица (реш. 105): .sheet-block — кнопки, плашки, итоги и таблица одной карточкой */
.sheet-block { display:grid; grid-template-columns:minmax(0, 1fr); gap:8px; min-width:0; }
.sheet-block .sheet-chips { display:flex; flex-wrap:wrap; gap:6px; }
.sheet-block .sheet-bar [hidden] { display:none !important; }
/* Операции (реш. 105): одна строка над таблицей, таблица как на Складе */
.ops-block { display:grid; grid-template-columns:minmax(0, 1fr); gap:10px; min-width:0; }
.ops-bar .sheet-bar, .ops-bar .ops-period { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.ops-bar .toggle-box { position:relative; cursor:pointer; user-select:none; }
.ops-bar .toggle-box input { position:absolute; opacity:0; width:1px; height:1px; pointer-events:none; }
.ops-bar .toggle-box:has(input:checked) { background:var(--accent-tint); border-color:var(--accent); color:var(--accent); font-weight:600; }
.ops-bar .sheet-chips { margin-top:8px; }  /* плашки не прилипают к кнопкам (ss 20.10) */
.ops-sums { display:flex; flex-wrap:wrap; gap:4px 16px; margin-left:auto; font-size:13px; color:var(--muted); }
.ops-sums b { color:var(--text); font-variant-numeric:tabular-nums; } .ops-sums .in { color:var(--ok); } .ops-sums .out { color:var(--danger); }
.ops-list .sheet .in { color:var(--ok); } .ops-list .sheet .out { color:var(--danger); } .ops-list .sheet .tr { color:#a0521d; }
.ops-list .sheet tr.cancelled td { opacity:.5; text-decoration:line-through; }
.sheet tr.late td[data-col="due"] { color:var(--danger); font-weight:600; }  /* просроченная задача (реш. 114) */
.ops-list .sheet .chip3 { height:17px; font-size:11px; }
/* реестры (реш. 105): кнопки действий прямо в строке таблицы */
.sheet .row-act { display:inline-block; margin:0 4px 0 0; }
/* кнопки действий в строке — размером с плашку статуса (ss 20.10) */
.sheet .row-act .pill-sm, .sheet td[data-col="act"] .pill-sm, .htbl .row-act .pill-sm { height:17px; min-width:78px; padding:0 8px; border-radius:9px;
  font-size:11px; line-height:17px; justify-content:center; }
.reg-page > .card { justify-self:stretch; width:auto; max-width:none; }
/* цифра в плашке-фильтре (ss 17.10, вариант А, docs/дизайн/архив/цифры_в_плашках.html) */
.fchip .n { opacity:.75; font-weight:400; }
.fchip.zero { opacity:.5; }

/* реш. 106: третий уровень меню (вкладки Отчётов) — в полосе шапки, как подменю */
.topbar .subnav.sub3 { padding-top:0; }
.reg-intro { font-size:13px; }
/* реш. 106: шапка карточки — три ровные строки; счётчики одной высоты с плашками, число справа */
.rack-head .facts2 { align-items:center; }
.rack-head .rh-top h1 { margin-right:4px; }
.rack-head .rh-state { width:auto; height:30px; padding:0 14px; gap:6px; font-size:13px; }
.rack-head .rh-state b { color:inherit; }
/* «Применяемость» — кнопкой в правом углу строки «Решения» (ss 19.10) */
.appl-pop { margin-left:auto; padding-left:28px; border-left:1px solid var(--line); position:relative; }
.appl-pop summary { list-style:none; cursor:pointer; } .appl-pop summary::-webkit-details-marker { display:none; }
.appl-pop[open] summary { background:var(--accent-tint); border-color:var(--accent); color:var(--accent); }
.appl-body { position:absolute; right:0; top:calc(100% + 6px); z-index:20; width:max-content; max-width:min(560px, 90vw);
  background:var(--surface); border:1px solid var(--line); border-radius:12px; padding:10px 14px; box-shadow:0 8px 24px rgba(0,0,0,.12);
  display:grid; gap:6px; font-size:13px; }
.appl-body .ap-row { display:grid; grid-template-columns:150px minmax(0,1fr); gap:10px; }
@media (max-width:700px) { .appl-pop { margin-left:0; padding-left:0; border-left:0; } .appl-body { left:0; right:auto; }
  .appl-body .ap-row { grid-template-columns:1fr; gap:0; } }
/* «Решение по рейке»: статус и действия одной строкой (ss 19.10) */
.decide-line { display:flex; flex-wrap:wrap; align-items:center; gap:8px 28px; }
.decide-line .decide-actions { margin-top:0; padding-top:0; border-top:0; padding-left:28px; border-left:1px solid var(--line); }
@media (max-width:700px) { .decide-line .decide-actions { padding-left:0; border-left:0; } }
.decide-lbl { min-width:64px; font-size:13px; }

/* реш. 106: один шрифт во всех плашках — меню, кнопки, период, переключатели; дата внутри плашки — без своей рамки */
.pill, .pill-sm, .drp-btn, .toggle-box, .fchip, .nav .item, .subnav .pill { font-family:inherit; }
.pill, .pill-sm, .drp-btn, .toggle-box.pill-sm, .on-date { font-size:13px; font-weight:600; }
.drp-btn { height:26px; padding:0 12px; border-radius:999px; background:var(--bg); color:var(--text); width:auto; }
.ops-period .drp, .sheet-bar .drp { width:auto; }
.on-date { display:inline-flex; align-items:center; gap:6px; }
.on-date input { border:0; background:none; padding:0; height:auto; font:inherit; color:inherit; width:auto; border-radius:0; }
/* ss 20.10: все таблицы-реестры — во всю ширину экрана; шапка с кнопками и плашками — отдельной карточкой
   той же ширины (было реш. 106 «не шире содержимого») */
.page:has(> .sheet-block) { max-width:none; }
.sheet-block, .ops-block { justify-items:stretch; }
.sheet-block > .card, .ops-block > .card { width:auto !important; max-width:none !important; min-width:0; }
.sheet-block .sheet-wrap { width:auto; }
.sheet-block table.sheet { width:100%; }
.sheet-wrap { overflow:auto; max-height:calc(100vh - 230px); border:1px solid var(--line); border-radius:8px; width:fit-content; max-width:100%; }
/* строка ввода под заголовком таблицы — поле под своей колонкой (Задачи, ss 20.10) */

.sheet tr.entry select, .sheet tr.entry input { width:100%; min-width:0; box-sizing:border-box; height:26px; padding:0 10px;
  font:inherit; font-size:13px; border:1px solid var(--line); border-radius:999px; background:var(--surface); color:var(--text); }
.sheet tr.entry .pill-sm { justify-content:center; }
/* кнопка строки ввода («Добавить», «Провести») — как пункт меню: 26 px, шрифт 13, по надписи (ss 23.10, п. 8а) */
.sheet tr.entry td .pill-sm, .htbl tr.entry td .pill-sm { height:26px; min-width:0; padding:0 12px; border-radius:999px;
  font-size:13px; font-weight:600; line-height:normal; }
/* срок задачи: дата нашим календарём + время ЧЧ:ММ в одной ячейке (реш. 84, правило 12в) */
.due-pick { display:flex; gap:4px; min-width:0; } .due-pick .drp { flex:1 1 auto; min-width:0; }
.due-pick .drp-btn { width:100%; height:26px; font-weight:400; color:var(--text); background:var(--surface); border:1px solid var(--line); }
.due-pick .drp-btn span { overflow:hidden; text-overflow:ellipsis; }
.sheet tr.entry .due-pick input[name="due_time"], .htbl tr.entry .due-pick input[name="due_time"] { flex:0 0 64px; width:64px;
  padding:0 8px; text-align:center; }
.sheet tr.entry td { background:var(--accent-tint); height:32px; padding:3px 4px; max-width:none; overflow:visible; position:relative; }  /* выпадающие списки не обрезаются ячейкой */
.sheet tr.ops-entry .dd { z-index:30; }
/* прокрутка таблиц (ss 20.10): 7В — влезает в ширину: своей полосы нет, листается страница, шапка таблицы
   (с строкой ввода) прилипает под меню; 7А — широкая таблица или несколько таблиц: тонкая овальная полоса
   за рамкой таблицы. Режим ставит ui/sheet.js (класс .flow) */
.sheet-wrap.flow { overflow:visible; max-height:none; }
.sheet-wrap.flow thead { position:sticky; top:var(--sheet-top, 0px); z-index:5; }
.sheet-wrap.flow th { position:relative; top:auto; }
.sheet-wrap.flow th.stick { position:sticky; }
.sheet-wrap:not(.flow) { border:0; border-radius:0; padding:0 10px 10px 0; }
.sheet-wrap:not(.flow) table.sheet { border-top:1px solid var(--line); border-left:1px solid var(--line); }
/* все полосы прокрутки сайта — одинаковые (ss 20.10): тонкие, овальные, без серой дорожки; темнеют при наведении.
   Окно страницы, таблицы, списки, всплывающие окна — везде так */
* { box-sizing:border-box; scrollbar-width:thin; scrollbar-color:rgba(0,0,0,.25) transparent; }
::-webkit-scrollbar { width:8px; height:8px; }
::-webkit-scrollbar-track, ::-webkit-scrollbar-corner { background:transparent; }
::-webkit-scrollbar-thumb { background:rgba(0,0,0,.22); border-radius:999px; }
::-webkit-scrollbar-thumb:hover { background:rgba(0,0,0,.4); }
/* выпадающие списки — вариант 3Б (ss 20.10, превью docs/дизайн/архив/списки_и_прокрутка.html): матовое стекло, по ширине
   содержимого; значения — теми же плашками, что в таблице, шаг строк — как у строк таблицы */
.ops-page .dd { position:absolute; top:calc(100% + 4px); left:0; z-index:40; max-height:420px; overflow:auto; display:none; width:max-content; min-width:0; max-width:300px; padding:4px; border-radius:12px; background:color-mix(in srgb, var(--surface) 86%, transparent); backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px); border:1px solid rgba(0,0,0,.06); box-shadow:0 12px 32px rgba(0,0,0,.10); }
.ops-page .dd .opt { cursor:pointer; display:flex; align-items:center; height:24px; padding:0 6px; gap:6px; border-radius:7px; font-size:12px; }
.ops-page .dd .opt:hover { background:rgba(0,0,0,.05); } .ops-page .dd .opt.sel { background:var(--accent-tint); }
.ops-page .dd .opt .chip3 { height:17px; line-height:17px; padding:0 8px; font-size:11px; }
.ops-page .dd .grp { font-style:italic; color:var(--muted); padding:6px 6px 1px; font-size:11px; }
.ops-page .dd .sep { border-top:1px solid var(--line); margin:3px 4px; }
/* Операции — в один экран, без прокрутки вбок (ss 20.10): ширины колонок по умолчанию, длинное — с «…» */
.sheet-block[data-kind="ops"] table.sheet { table-layout:fixed; }
.sheet-block[data-kind="ops"] th[data-col="date"] { width:8%; } .sheet-block[data-kind="ops"] th[data-col="group"] { width:11%; }
.sheet-block[data-kind="ops"] th[data-col="type"] { width:12%; } .sheet-block[data-kind="ops"] th[data-col="from"] { width:12%; }
.sheet-block[data-kind="ops"] th[data-col="to"] { width:12%; } .sheet-block[data-kind="ops"] th[data-col="amount"] { width:8%; }
.sheet-block[data-kind="ops"] th[data-col="ctx"] { width:13%; } .sheet-block[data-kind="ops"] th[data-col="edit"] { width:128px; }  /* влезают «Сохранить» и «×» правки в строке (реш. 131) */
/* календарь периода в заголовке «Дата» — на месте воронки */
.sheet th .drp-icon { flex:none; display:inline-flex; }
.sheet th .drp-ico { width:18px; height:18px; padding:0; border:0; border-radius:4px; background:transparent; color:var(--muted);
  display:inline-flex; align-items:center; justify-content:center; cursor:pointer; }
.sheet th .drp-ico:hover { background:var(--line); } .sheet th .drp-ico.on { background:var(--accent); color:#fff; }
.sheet th .drp-ico svg { width:12px; height:12px; }
/* плашки в ячейках — в одну строку, высотой строки таблицы */
.sheet .chip2, .sheet .chip3 { width:auto; height:17px; padding:0 8px; font-size:11px; white-space:nowrap; line-height:17px; }
/* Операции: поля строки ввода под колонками таблицы (ширину ставит скрипт) */

.ops-list th[data-col="date"] { min-width:120px; } .ops-list th[data-col="amount"] { min-width:110px; }
.ops-list th[data-col="group"], .ops-list th[data-col="type"], .ops-list th[data-col="from"], .ops-list th[data-col="to"],
.ops-list th[data-col="ctx"] { min-width:150px; } .ops-list th[data-col="comment"] { min-width:160px; }

@media (max-width:900px) { .sheet-block > .card, .ops-block > .card { width:100% !important; } }
.ops-list th[data-col="edit"] { min-width:100px; }
.ops-list .sheet th, .ops-list .sheet td { max-width:200px; }
/* дата закреплена слева и в строке ввода — как колонка «Дата» в таблице */

@media (max-width:900px) { .rack-main { grid-template-columns:minmax(0, 1fr) !important; } .feed-card { min-width:0; } }

/* осмотр чек-листом (ss 19.10): «норма / дефект» — крупно, чтобы протыкать пальцем */
.inspect-card .insp-last { display:flex; flex-wrap:wrap; gap:6px; align-items:center; font-size:13px; margin-bottom:8px; }
.inspect-card .it { display:flex; justify-content:space-between; align-items:center; gap:8px; border-bottom:1px dashed var(--line); padding:3px 0; font-size:13px; }
.seg2 { display:inline-flex; border:1px solid var(--line); border-radius:999px; overflow:hidden; flex:none; }
.seg2 label { cursor:pointer; } .seg2 input { position:absolute; opacity:0; width:1px; height:1px; }
.seg2 span { display:inline-flex; align-items:center; height:26px; padding:0 12px; font-size:12px; color:var(--muted); }
.seg2 input:checked + span { background:var(--ok-tint); color:var(--ok); font-weight:600; }
.seg2 label.bad input:checked + span { background:var(--danger-tint); color:var(--danger); } 
.inspect-card .insp-form summary { list-style:none; cursor:pointer; display:inline-flex; }
/* «Осмотр / Стенд» (ss 19.10): три блока в ряд — пункты, пункты, данные стенда; переключатель сразу за словом */
.insp3 { display:grid; grid-template-columns:max-content max-content minmax(240px, 340px); gap:12px 44px; align-items:start; margin:10px 0; }
.insp3 .pts { display:grid; grid-template-columns:max-content max-content; gap:5px 14px; align-items:center; font-size:14px; }
.insp3 .fields { display:grid; grid-template-columns:max-content minmax(0,1fr); gap:5px 10px; align-items:center; font-size:14px; }
.insp3 .fields .blk { grid-column:1 / -1; font-size:12px; color:var(--muted); text-transform:uppercase; letter-spacing:.04em; }
.insp3 .fields input, .insp3 .fields select { width:100%; min-width:0; box-sizing:border-box; height:26px; padding:0 10px;
  font:inherit; font-size:13px; border:1px solid var(--line); border-radius:999px; background:var(--surface); color:var(--text); }
.insp3-files { display:flex; gap:8px; flex-wrap:wrap; }
.insp3-files label { cursor:pointer; } .insp3-files label.on { border-color:var(--accent); color:var(--accent); }
.insp3-files label.on::after { content:" ✓"; }
.insp3-foot { display:grid; grid-template-columns:minmax(0,1fr) auto auto; gap:10px; align-items:end; margin-top:10px; }  /* комментарий · 🎤 · Пройден */
.insp3-foot > .vstatus { grid-column:1 / -1; order:1; margin-top:0; }  /* «● 0:05…» — строкой под формой */
.insp3-foot textarea { width:100%; min-width:0; resize:vertical; box-sizing:border-box; padding:8px 12px; font:inherit; font-size:14px;
  border:1px solid var(--line); border-radius:10px; background:var(--surface); color:var(--text); }
@media (max-width:900px) { .insp3 { grid-template-columns:1fr; } .insp3 .pts { grid-template-columns:minmax(0,1fr) max-content; }
  .insp3-foot { grid-template-columns:minmax(0,1fr) auto; } .insp3-foot > button:not(.vbtn) { grid-column:1 / -1; } }
/* таблица с разделами (Мастерская, ss 19.10): строка-раздел на всю ширину; «Требует внимания» — красным */
.sheet tr.grp td { background:var(--bg); font-weight:700; font-size:12px; color:var(--text); height:24px; position:sticky; left:0; }  /* заголовки разделов — как все, без цвета (ss 20.10) */
.sheet tr.grp .n { color:var(--muted); font-weight:400; }
.sheet .chk { display:inline-flex; gap:4px; } .sheet .chk span { padding:0 6px; border-radius:8px; background:var(--bg); color:var(--muted); font-size:11px; }
.sheet .chk span.ok { background:var(--ok-tint); color:var(--ok); }
.sheet td[data-col="days"] { font-weight:400; }  /* дни — обычным текстом (ss 20.10) */
.why-bad { color:var(--danger); font-weight:600; }  /* «не заказан» (ss 19.10) */
/* Поступления → «Заказы партий» — строки высотой как в таблице (ss 20.10) */
.intake .order-row { font-size:13px; line-height:24px; border-top:1px solid var(--line); }
.intake .order-row .linkbtn { padding:0 6px; font-size:13px; }
/* Операции: выбранный характер / статья — той же плашкой, что в списке и в таблице (ss 20.10) */
.ops-page .dd-btn .chip3 { height:17px; line-height:17px; padding:0 8px; font-size:11px; }
/* «Таблица» и «Excel» над таблицей — значок и короткое слово (ss 20.10, превью docs/дизайн/значки_таблицы.html, Б) */
.ico-b { display:inline-flex; align-items:center; gap:6px; }
.ico-b svg { width:15px; height:15px; flex:none; }
.ico-b svg.xl { color:#1d7044; }

/* --- Главная — общее табло (реш. 114): размеры и вид — как утверждённое превью docs/дизайн/главная.html (вариант А).
   Свои классы (h…), чтобы общие правила (.chip2 96×30, .seg) их не задевали. --- */
.nav .home-period { margin-left:auto; display:inline-flex; align-items:center; gap:8px; }
.nav .home-period ~ .right { margin-left:0; }
.home-period .since { font-size:12px; color:var(--muted); white-space:nowrap; }
.hseg { display:inline-grid; grid-template-columns:1fr 1fr; height:26px; box-sizing:border-box; border:1px solid var(--line);
  border-radius:999px; overflow:hidden; background:var(--surface); }
.hseg > a, .hseg .drp-btn { display:inline-flex; align-items:center; justify-content:center; gap:6px; height:24px; min-width:0;
  padding:0 12px; border:0; border-radius:0; background:var(--surface); color:var(--text); font:inherit; font-size:13px;
  font-weight:600; white-space:nowrap; cursor:pointer; text-decoration:none; }
.hseg > a.on, .hseg .drp.on .drp-btn { background:var(--nav-active); color:var(--nav-active-text); }
.hseg .drp { display:flex; min-width:0; } .hseg .drp-btn { width:100%; } .hseg svg { width:13px; height:13px; flex:none; }

.home-page { gap:12px; }
.home-row { display:grid; grid-template-columns:1fr 1fr; gap:12px; align-items:start; }
.home-row.home-top { grid-template-columns:minmax(0,1.6fr) minmax(0,1fr); }
.home-col { display:grid; gap:12px; align-content:start; min-width:0; }
.home-card { padding:10px 12px; border-radius:16px; min-width:0; }
.home-card h3 { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:0 0 8px; font-size:14px; color:var(--accent); }
.home-card h3 .home-link { margin-left:auto; font-size:12px; font-weight:400; }
.home-card.alert { border-left:4px solid var(--danger); }
/* блок не выше 360 px; дальше — своя тонкая овальная полоса справа, не на тексте (правило 12а) */
.home-card .cbody { max-height:360px; overflow-y:auto; scrollbar-gutter:stable; padding-right:6px; margin-right:-8px; }
/* вид полосы — общий для сайта (правило оформления 12а, `*` и ::-webkit-scrollbar выше), здесь не переопределяется */
.home-card .sub { font-size:12px; font-weight:600; color:var(--text); margin:8px 0 3px; } .home-card .sub:first-child { margin-top:0; }
.home-card .muted { color:var(--muted); } .home-card .bad, .home-card a.bad { color:var(--danger); }
/* строки-события */
.hev { display:flex; gap:8px; align-items:baseline; padding:3px 0; min-height:21px; border-top:1px solid var(--line); font-size:13px; }
.hev:first-child, .sub + .hev { border-top:0; }
.hev .t { color:var(--muted); font-size:12px; white-space:nowrap; min-width:72px; }
.hev .x { flex:1; min-width:0; }
.hev .r { white-space:nowrap; }
.hev.cancelled { opacity:.5; text-decoration:line-through; }
/* плашки — как в превью: 18 px, в одну строку */
.hst { display:inline-flex; align-items:center; height:17px; line-height:17px; padding:0 8px; border-radius:9px; font-size:11px;
  font-weight:400; white-space:nowrap; background:#eef0f3; color:#3a3f47; vertical-align:baseline; }  /* как .sheet .chip2/.chip3 */
.hst.red { background:var(--danger-tint); color:var(--danger); } .hst.ok { background:#e3f3e7; color:var(--ok); }
.hst.warn { background:#fde8d4; color:#a0521d; } .hst.blue { background:var(--info-tint); color:var(--info); }
.hst.acc { background:var(--accent-tint); color:var(--accent); }
.home-card .total { font-size:12px; color:var(--muted); margin-top:6px; } .home-card .total b { color:var(--text); }
/* деньги */
.hkpi { display:grid; grid-template-columns:repeat(auto-fit,minmax(110px,1fr)); gap:6px 12px; }
.hkpi .k { display:block; font-size:12px; color:var(--muted); } .hkpi b { font-size:16px; } .hkpi .big b { font-size:20px; }
.hkpi + .hkpi { margin-top:8px; }
/* склад: числа под числами, всё от левого края (правило 12г) */
.hstk { width:100%; border-collapse:collapse; font-size:13px; font-variant-numeric:tabular-nums; }
.hstk th { text-align:left; font-size:12px; font-weight:600; color:var(--muted); padding:0 8px 4px; border-bottom:1px solid var(--line); }
.hstk td { text-align:left; padding:4px 8px; border-bottom:1px solid var(--line); white-space:nowrap; }
.hstk td:first-child { font-weight:600; padding-left:0; } .hstk tr.sum td { border-bottom:0; font-weight:700; font-size:15px; }
/* мастерская */
.hbar { display:flex; height:8px; border-radius:4px; overflow:hidden; margin:8px 0 4px; } .hbar i { display:block; }
.hstages { display:grid; gap:4px; }
.hstage { display:flex; gap:8px; align-items:baseline; font-size:13px; }
.hstage .hst { min-width:96px; justify-content:space-between; gap:6px; } .hstage .nums { flex:1; min-width:0; }
/* задачи — таблица как в превью */
.htabs { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:6px; }

.htbl { width:100%; border-collapse:collapse; font-size:13px; }
.htbl th { text-align:left; font-weight:600; font-size:12px; color:var(--muted); padding:4px 6px; border-bottom:1px solid var(--line); white-space:nowrap; }
.htbl td { text-align:left; padding:0 6px; height:21px; line-height:20px; border-bottom:1px solid var(--line); vertical-align:middle; }
.htbl tr.entry td { background:var(--accent-tint); height:32px; padding:3px 4px; }  /* как .sheet tr.entry */
.htbl tr.entry input, .htbl tr.entry select { width:100%; min-width:0; box-sizing:border-box; height:26px; padding:0 10px;
  font:inherit; font-size:13px; border:1px solid var(--line); border-radius:999px; background:var(--surface); color:var(--text); }
.htbl tr.entry .pill-sm { justify-content:center; }
.htbl tr.late td.due { color:var(--danger); font-weight:600; }
.htbl td.acts { white-space:nowrap; } .htbl .row-act { display:inline-block; margin:0; }
.htbl .who-at { color:var(--muted); font-size:11px; margin-left:4px; }
@media (max-width:900px) {
  .home-row, .home-row.home-top { grid-template-columns:1fr; }
  .nav .home-period { margin-left:0; flex-wrap:wrap; }
  .htbl .wide { display:none; }
}
@media (max-width:600px) {  /* телефон мастера: задача — карточкой; текст во всю ширину, ниже срок, кому, статус, кнопка */
  .htbl, .htbl tbody { display:block; } .htbl thead { display:none; }
  .htbl tr { display:grid; grid-template-columns:1fr auto; gap:4px 8px; padding:6px 0; border-bottom:1px solid var(--line); }
  .htbl td { display:block; height:auto; padding:0; border:0; min-width:0; } .htbl td:empty { display:none; }
  .htbl td:nth-child(2) { order:-1; grid-column:1 / -1; }
}

/* ===== Выпадающий список — один вид на весь сайт (ss 23.10; превью docs/дизайн/списки.html; picker.js) ===== */
.pk[hidden] { display:none; }
.pk { position:relative; display:inline-flex; width:100%; min-width:0; flex:1 1 auto; vertical-align:middle; }
.pk-btn { height:26px; width:100%; min-width:0; display:flex; align-items:center; gap:6px; padding:0 10px; box-sizing:border-box;
  border:1px solid var(--line); border-radius:999px; background:var(--surface); color:var(--text); font:inherit; font-size:13px;
  cursor:pointer; text-align:left; }
.pk-btn .v { flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.pk-btn .v.ph { color:var(--muted); }
.pk-btn .caret { color:var(--muted); font-size:11px; }
.pk.open .pk-btn, .pk-btn:focus-visible { border-color:var(--accent); outline:none; }
.pk.dis .pk-btn { background:var(--bg); color:var(--muted); cursor:default; } .pk.dis .caret { visibility:hidden; }
.pk.err .pk-btn { border-color:var(--danger); background:var(--danger-tint); } .pk.err .pk-btn .v.ph { color:var(--danger); }
.pk-dd { position:fixed; z-index:950; box-sizing:border-box; padding:4px; border-radius:12px; background:color-mix(in srgb, var(--surface) 92%, transparent);
  backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px); border:1px solid rgba(0,0,0,.06); box-shadow:0 12px 32px rgba(0,0,0,.10); }
.pk-q { width:100%; height:26px; box-sizing:border-box; border:1px solid var(--line); border-radius:999px; padding:0 10px; margin:2px 0 4px;
  font:inherit; font-size:13px; background:var(--surface); color:var(--text); }
.pk-list { max-height:240px; overflow-y:auto; }
.pk-opt { display:flex; align-items:center; gap:6px; height:24px; padding:0 6px; border-radius:7px; font-size:12px; cursor:pointer;
  white-space:nowrap; overflow:hidden; }
.pk-opt .t { min-width:0; overflow:hidden; text-overflow:ellipsis; }
.pk-opt:hover, .pk-opt.act { background:rgba(0,0,0,.05); } .pk-opt.sel { background:var(--accent-tint); }
.pk-opt.ph { color:var(--muted); } .pk-opt.dis { color:var(--muted); opacity:.5; cursor:default; }
.pk-opt input { margin:0; flex:none; width:auto; height:auto; }
.pk-grp { font-style:italic; color:var(--muted); padding:6px 6px 1px; font-size:11px; }
/* «Вид ЗЧ» деревом (ss 29.10): номер — колонкой слева, головной вид жирным и с отступом сверху */
.pk-opt .num { flex:none; width:48px; color:var(--muted); font-variant-numeric:tabular-nums; }
.pk-opt.pk-head { font-weight:700; margin-top:8px; } .pk-grp + .pk-opt.pk-head { margin-top:0; }
.pk-opt.pk-head .num { color:var(--text); }
.pk-empty { padding:6px; font-size:12px; color:var(--muted); }
.pk-foot { display:flex; justify-content:space-between; align-items:center; border-top:1px solid var(--line); margin-top:4px;
  padding:4px 2px 0; font-size:11px; color:var(--muted); }
.pk-foot a { color:var(--muted); }
.pk-foot button { height:22px; padding:0 10px; border-radius:999px; border:0; background:var(--accent); color:#fff; font-size:11px;
  font-weight:600; cursor:pointer; }
@media (max-width:640px) {
  .pk-btn { height:40px; font-size:15px; padding:0 14px; }
  .pk-q { height:40px; font-size:15px; padding:0 14px; }
  .pk-list { max-height:min(360px, 50vh); }
  .pk-opt { height:44px; font-size:15px; padding:0 10px; border-radius:10px; gap:10px; }
  .pk-opt input { width:20px; height:20px; }
  .pk-foot { font-size:13px; padding-top:8px; } .pk-foot button { height:36px; font-size:14px; padding:0 18px; }
}

/* ===== Отчёты — как реестр (реш. 125, превью docs/дизайн/отчёты.html, вариант А): полоса сверху, таблица ниже ===== */
.rep { border-collapse:collapse; width:100%; font-size:12px; }
.rep th, .rep td { padding:0 12px; height:21px; border-bottom:1px solid var(--line); white-space:nowrap; text-align:left; }
.rep th { color:var(--muted); font-weight:600; height:26px; }
.rep .num { text-align:right; font-variant-numeric:tabular-nums; }
.rep td.num.muted, .rep th.pct { font-size:11px; padding-left:0; padding-right:40px; }  /* после суммы — 40 px (реш. 124) */
.rep tr.section td { font-weight:600; }
.rep tr.total td, .rep tr.result td { font-weight:600; border-top:2px solid var(--text); }
/* отчёты (реш. 130, вариант А): разделы и итоги — 600, не 700; цифры статей — как название; строка под курсором —
   как в Склад → Рейки; ОПиУ и ДДС не растягиваются — «Итого» вплотную к статьям, месяцы — дальше вправо */
.rep b { font-weight:600; }
.rep tr:hover td { background:var(--bg); }
.rep.periods { width:auto; }
.rep a { color:inherit; } .rep a:hover { color:var(--accent); }
.rep-cols { display:grid; grid-template-columns:repeat(auto-fit, minmax(min(420px, 100%), 1fr)); gap:10px; }
.rep-cols > .card { padding:4px 0 8px; }
.ops-bar .rep-info { font-size:13px; }
.ops-bar .rep-push { margin-left:auto; }
.sheet-bar .pk, .ops-period .pk { width:190px; flex:0 0 auto; }  /* в полосе отчёта списки в строку, не на всю ширину */
@media (max-width:640px) { .sheet-bar .pk, .ops-period .pk { width:100%; flex:1 1 100%; } }
.ops-bar .chip2 { width:auto; min-width:0; height:25px; padding:0 11px; white-space:nowrap; font-size:12px; }  /* «Сходится» — в одну строку */
select.sel + .pk { width:150px; flex:0 0 auto; }  /* компактные переключатели графика Дашборда */
@media (max-width:640px) {  /* телефон: таблица отчёта прокручивается вбок, название строки на месте */
  .rep td:first-child, .rep th:first-child { position:sticky; left:0; z-index:1; background:var(--surface); }
}
.rep td.in { color:var(--ok); } .rep td.out { color:var(--danger); }  /* «Ход ЗЧ»: приход / расход, итог применяемости */
.appl-body .rep { width:auto; }
.appl-body { max-height:70vh; overflow:auto; }  /* длинная применяемость ЗЧ — с прокруткой */

/* «Продать» (ss 26.10, вид как реестр): покупатель и отгрузка плашками в одной шапке, ниже таблица позиций */
.sale-new .sheet-bar { gap:8px; }
.sale-new .fl { display:flex; align-items:center; gap:6px; flex:none; }
.sale-new .fl > span { font-size:12px; color:var(--muted); white-space:nowrap; }
.sale-new .fl input, .sale-new .sheet td input { height:26px; padding:0 10px; border:1px solid var(--line); border-radius:999px; font:inherit; font-size:13px; background:var(--surface); color:var(--text); }
.sale-new .fl input { width:108px; } .sale-new .fl .pk { width:112px; } .sale-new .fl input[name="phone"] { width:130px; }
.sale-new .fl input[name="name"] { width:84px; } .sale-new .fl input[name="track"] { width:84px; } .sale-new .fl input[name="delivery_cost"] { width:64px; }
.sale-new .req { color:var(--danger); font-style:normal; }
.sale-new .sale-sep { width:1px; height:18px; background:var(--line); }
.sale-new table.sheet { width:100%; }
.sale-new .sheet tr.entry td { background:var(--accent-tint); }
.sale-new .sheet td input { width:100%; box-sizing:border-box; }
.sale-new .sale-foot { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-top:10px; }

/* доводка «Поступлений» и «Продать» под превью (ss 26.10): плашка с подписью внутри, линии таблицы, нижняя полоса в одну линию */
.intake .head4 > .fl, .sale-new .sheet-bar > .fl { height:28px; border:1px solid var(--line); border-radius:999px; background:var(--bg); padding:0 2px 0 12px; }
.intake .head4 > .fl input, .intake .head4 > .fl .pk-btn, .intake .head4 > .fl .drp-btn,
.sale-new .sheet-bar > .fl input, .sale-new .sheet-bar > .fl .pk-btn, .sale-new .sheet-bar > .fl .drp-btn { border-color:transparent; background:transparent; }
.intake .head4 > .fl input[disabled] { background:transparent; }
.intake .racks .grid, .intake .parts .grid { gap:0; }
.intake .headrow > .lbl, .intake .row > .cell { padding:0 4px; border-right:1px solid var(--line); }
.intake .headrow > .lbl { padding-left:6px; min-height:24px; align-items:center; }
.intake .row > .cell { display:flex; align-items:center; min-height:26px; }
.intake .row.entry { border-bottom:0; }
.intake .row.entry > .cell { border-right-color:transparent; }
.intake .row:not(.entry):hover { background:var(--bg); }
.intake .sum { flex-wrap:nowrap; } .intake .sum > .muted { flex:1 1 0; min-width:0; }
@media (max-width:700px) { .intake .sum { flex-wrap:wrap; } .intake .sum > .muted { flex:1 1 100%; } }
@media (max-width:1400px) { .intake .row > .cell { display:block; border-right:0; padding:0; } }  /* узкий экран: строка — карточка, подпись над полем */
.intake .card:has(> .sum) .sum > span:last-child { flex:none; white-space:nowrap; }
.sale-new .sheet td { max-width:none; overflow:visible; height:34px; padding:3px 6px; }
.sale-new .sheet td.what { white-space:normal; }
.sale-new .sheet td .pk { width:100%; max-width:300px; }
.sale-new .sheet tbody:not(:first-of-type) tr:hover td { background:var(--bg); }
.sale-new #sale-rows input { border-color:transparent; background:transparent; }
.sale-new #sale-rows input:hover, .sale-new #sale-rows input:focus { border-color:var(--line); background:var(--surface); }
.sale-new .go { height:26px; width:100%; justify-content:center; background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600; }
.sale-new .x { border:none; background:none; color:var(--muted); font-size:18px; cursor:pointer; padding:0 4px; }
.sale-new .sale-go { display:flex; align-items:center; gap:14px; }
.sale-new .sale-foot > .muted { flex:1 1 0; min-width:0; }
/* телефон: плашки шапки — по одной в строку, таблица позиций листается вбок внутри карточки */
@media (max-width:640px) {
  .sale-new .sheet-bar > .fl { flex:1 1 100%; } .sale-new .sheet-bar > .fl input, .sale-new .sheet-bar > .fl .pk, .sale-new .sheet-bar > .fl .drp { flex:1; width:auto; min-width:0; }
  .sale-new .sale-sep { display:none; } .sale-new .card:has(.sale-rows) { overflow-x:auto; } .sale-new .sale-rows { min-width:560px; }
}

/* ТЕЛЕФОН 375 (финальный тест 27.10, блок 4): шапка не липнет и занимает по одной строке на уровень меню —
   меню, подменю и вкладки отчётов листаются вбок пальцем; широкая таблица отчёта листается внутри своей карточки */
@media (max-width:640px) {
  .topbar { position:static; }
  .topbar .nav, .topbar .subnav { flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none; }
  .topbar .nav::-webkit-scrollbar, .topbar .subnav::-webkit-scrollbar { display:none; }
  .topbar .nav .right { flex:none; margin-left:8px; white-space:nowrap; }
  .topbar .nav .home-period { flex:none; flex-wrap:nowrap; margin-left:8px; white-space:nowrap; }
  .rep-cols > .card, .page.cols > .card { overflow-x:auto; min-width:0; }
  .home-card .cbody { max-height:none; overflow-y:visible; margin-right:0; padding-right:0; }  /* без окон прокрутки в странице */
  .rep th, .rep td { padding:0 8px; } .rep td:first-child { white-space:normal; } .rep td:first-child span { padding-left:8px !important; }
  /* Операции и другие таблицы на много колонок: на телефоне — своей ширины, листаются вбок внутри карточки */
  .sheet-wrap.flow { overflow-x:auto; }
  .sheet-block:not([data-kind=workshop]) table.sheet, .ops-list table.sheet { min-width:960px; }
  /* Мастерская: на телефоне строка — карточка: номер, модель, статус; ниже — что делать и кнопка (остальное — на компьютере) */
  table.sheet[data-kind=workshop], table.sheet[data-kind=workshop] tbody { display:block; width:auto !important; min-width:0 !important; }
  table.sheet[data-kind=workshop] thead { display:none; }
  table.sheet[data-kind=workshop] tr:not(.grp) { display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:4px 10px;
    align-items:center; padding:8px 12px; border-bottom:1px solid var(--line); }
  table.sheet[data-kind=workshop] tr:not(.grp) td { display:block; width:auto !important; max-width:none; min-width:0; height:auto;
    padding:0; border:0; position:static !important; white-space:normal; }
  table.sheet[data-kind=workshop] [data-col=oem], table.sheet[data-kind=workshop] [data-col=brand],
  table.sheet[data-kind=workshop] [data-col=body], table.sheet[data-kind=workshop] [data-col=master],
  table.sheet[data-kind=workshop] [data-col=days] { display:none !important; }
  table.sheet[data-kind=workshop] tr.grp, table.sheet[data-kind=workshop] tr.grp td { display:block; width:auto !important; position:static !important; }
  table.sheet[data-kind=workshop] td[data-col=why] { grid-column:1 / 3; font-size:12px; color:var(--muted); }
  table.sheet[data-kind=workshop] td[data-col=act] { grid-column:3; }
  table.sheet[data-kind=workshop] td[data-col=act] .pill-sm { height:30px; padding:0 14px; font-size:13px; }
}

/* Профиль → Telegram и ошибка в отметке работы: были инлайн-стилями (приёмка 28.10) */
.tg-card { max-width:560px; }
.tg-code { font-size:20px; }
.check-err { font-size:12px; margin-top:2px; }

/* Склад → Выкуп (реш. 142): экран для телефона — поля 40 px под палец (исключение из 26 px, превью «быстрый_выкуп») */
.qb { max-width:520px; }
.qb-form { display:grid; gap:12px; }
.qb-card { display:grid; gap:10px; }
.qb-card h3 { margin:0; }
.qb-fld { display:grid; gap:4px; }
.qb-fld > span { font-size:12px; color:var(--muted); }
.qb-fld input, .qb-fld select { height:44px; font-size:16px; border-radius:14px; padding:0 12px; width:100%; box-sizing:border-box; }
.qb-two { display:grid; grid-template-columns:1fr 1fr; gap:8px; }  /* телефон и имя — в одну строку (ss 29.10) */
.qb-racks { display:grid; gap:8px; }
.qb-rack, .qb-heads { display:grid; grid-template-columns:110px minmax(0, 1fr) 22px; gap:6px; align-items:center; }  /* цена · что в объявлении · × */
.qb-heads { font-size:12px; color:var(--muted); }
.qb-rack input { height:44px; font-size:16px; border-radius:14px; padding:0 12px; width:100%; box-sizing:border-box; min-width:0; }
.qb-x { font-size:18px; padding:0; }
.qb-add { height:38px; border:1px dashed var(--accent); border-radius:12px; background:none; color:var(--accent); font:inherit; font-weight:600; cursor:pointer; }
.qb-seg { display:grid; grid-template-columns:1fr 1fr; gap:3px; padding:3px; border-radius:12px; background:var(--line); }
.qb-seg label { position:relative; }
.qb-seg input { position:absolute; inset:0; margin:0; opacity:0; cursor:pointer; }  /* радио — под плашкой, не за краем */
.qb-seg span { display:block; text-align:center; padding:8px 4px; border-radius:10px; font-size:14px; cursor:pointer; }
.qb-seg input:checked + span { background:var(--surface); font-weight:600; box-shadow:0 1px 2px rgba(0,0,0,.08); }
.qb-go { height:48px; border:0; border-radius:980px; background:var(--accent); color:#fff; font:inherit; font-size:16px; font-weight:700; cursor:pointer; }
.qb-note { text-align:center; font-size:12px; margin:0; }

/* Партия → «Принять»: рейка без номера (быстрый выкуп, реш. 142) — номер OEM и данные под строкой */
.accept-oem { display:grid; grid-template-columns:repeat(auto-fill, minmax(150px, 1fr)); gap:8px; padding:8px 10px 12px;
              border-radius:12px; background:var(--accent-tint); }
.accept-oem label { display:grid; gap:3px; }
.accept-oem label > span { font-size:12px; color:var(--muted); }
.accept-oem input, .accept-oem select { width:100%; box-sizing:border-box; }

/* Партия: оплата и затраты — в шапке, на виду (ss 29.10) */
.batch-acts { display:flex; flex-wrap:wrap; gap:8px; margin-left:auto; }  /* справа во второй строке шапки */
.batch-head .facts2 { align-items:center; }
/* приёмка строками «Поступлений» (реш. 145): «Принять» — зелёная, как «Добавить» в строке ввода */
/* строки приёмки — бирюзовые, как строка ввода «Поступлений» и «Операций» (ss 29.10): без бежевой подсветки */
.accept-sheet .row, .accept-sheet .row:hover { background:var(--accent-tint); border-radius:10px; border-bottom:0; margin-bottom:4px; }
.accept-sheet .row .go { height:26px; background:var(--accent); border-color:var(--accent); color:#fff; font-weight:600; justify-content:center; width:100%; }
.not-came summary { cursor:pointer; font-weight:600; }
.not-came .inline-form { margin-top:10px; }
.accept-sheet > .sec-t { flex-wrap:wrap; }
