.tabs{display:flex;gap:var(--space-4);overflow:auto;padding:var(--space-4) 0;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--bg);z-index:1}.phase-line,.tracking-line{display:grid;grid-template-columns:repeat(4,1fr);list-style:none;padding:0;margin:var(--space-8) 0}.phase-line li,.tracking-line li{border-top:2px solid var(--line);padding:var(--space-3) var(--space-2) 0;position:relative}.phase-line li:before,.tracking-line li:before{content:"";position:absolute;width:8px;height:8px;border-radius:50%;background:var(--line-strong);top:-5px;left:0}.phase-line li.active:before,.tracking-line li.done:before,.status.ok:before{background:var(--ok)}.status.warn:before{background:var(--warn)}.status.bad:before{background:var(--bad)}.phase-line small,.tracking-line small{display:block;color:var(--ink-3)}.tracking-line{grid-template-columns:repeat(7,1fr)}.checklist{list-style:none;padding:0}.checklist li{min-height:40px;display:grid;grid-template-columns:2fr 2fr 1fr;align-items:center;border-bottom:1px solid var(--line)}.password{font:300 32px JetBrains Mono,monospace;margin-right:var(--space-4)}.public{margin:0}.public .content{margin:auto}@media(max-width:768px){.phase-line,.tracking-line{display:block}.phase-line li,.tracking-line li{border-top:0;border-left:2px solid var(--line);padding:var(--space-2) var(--space-4)}.checklist li{grid-template-columns:1fr}.metrics{gap:var(--space-6)}}
.sparkline{display:block;width:100%;height:160px;margin:var(--space-6) 0}.sparkline polyline{fill:none;stroke:var(--ink);stroke-width:1;vector-effect:non-scaling-stroke}

.metrics-sm{padding-top:0;gap:var(--space-8)}.metrics-sm strong{font-size:clamp(24px,2.6vw,32px)}
/* Аудит v0.43: убрана плавающая кнопка-дублёр «Помощник» (position:fixed) — она перекрывала
   поля форм и контент на 390/1280 px (владелец: «плашки налезают друг на друга»). Тот же
   переключатель уже есть в шапке (base.html, .content не задета) — без потери функции. */
.assistant-panel{position:fixed;right:var(--space-6);bottom:var(--space-16);width:min(420px,calc(100vw - 32px));max-height:72vh;overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--space-6);box-shadow:var(--shadow-md);z-index:5}.assistant-panel[hidden]{display:none}.assistant-prompts{display:flex;gap:var(--space-2);flex-wrap:wrap;margin:var(--space-4) 0}.assistant-answer{padding:var(--space-3) 0;border-bottom:1px solid var(--line)}

.details{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-4) var(--space-6)}.details>div{display:grid;gap:var(--space-1)}.details small{color:var(--ink-3);font-size:11px;text-transform:uppercase;letter-spacing:.08em}
.kb-layout{display:grid;grid-template-columns:232px minmax(0,1fr);gap:var(--space-6);align-items:start}.kb-toc{position:sticky;top:var(--space-6);display:grid;gap:var(--space-2)}.kb-markdown{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;line-height:1.5}@media(max-width:800px){.kb-layout{grid-template-columns:1fr}.kb-toc{position:static}}
.task-overdue:before{background:var(--bad)}
.task-today:before{background:var(--warn)}
.task-future:before{background:var(--ok)}
.task-none:before{background:var(--line-strong)}
.leads-kanban{grid-template-columns:repeat(3,minmax(260px,1fr))}
/* PUNCHLIST v0.48b §4 — «Экономика заказа»: «Заменить вручную»/«Изменить» выровнены по
   правому краю ячейки-действий и не переносятся на две строки (при нехватке места
   .table-wrap уже даёт горизонтальный скролл — см. app.css). Скоуп по #order-economy,
   чтобы не менять .row-actions на других экранах (users.html, task_card.html и т.д.). */
#order-economy td.row-action-cell{text-align:right;white-space:nowrap}
#order-economy .row-action-cell .row-actions{flex-wrap:nowrap;justify-content:flex-end;display:inline-flex}
/* PUNCHLIST v0.58 §2 — компактная строка «Где груз · Участники» в шапке карточки
   заказа, рядом со статусом; подробности остаются ниже как раньше (order_tracking_block.html,
   order_participants_block.html). */
.summary-line{color:var(--ink-3);font-size:14px}
.avatar-list{display:inline-flex;gap:var(--space-2);align-items:center;flex-wrap:wrap}
.avatar{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;flex:none;
  border-radius:50%;background:var(--paper);border:1px solid var(--line-strong);
  font:600 11px Onest,sans-serif;color:var(--ink-2)}
/* Зона перетаскивания документов: видна как область, а не как абзац; подсветка при переносе файла */
.dropzone{border:2px dashed var(--line);border-radius:var(--r-lg);text-align:center;padding:var(--space-6) var(--space-4);transition:border-color var(--dur-fast),background var(--dur-fast)}
.dropzone.is-dragging{border-color:var(--accent);background:rgba(200,65,43,.05)}
.dropzone>input[type="file"]{display:none}
.dropzone progress{width:100%;margin-top:8px}
.dropzone [data-results]{margin-top:var(--space-2);color:var(--ink-3)}

/* v0.65 dashboard: operational map, with the numbers kept in one quiet column. */
.cargo-map-panel{display:grid;grid-template-columns:minmax(0,3fr) minmax(320px,1fr);gap:var(--space-8);padding:0;overflow:hidden}
.cargo-map-visual{position:relative;min-width:0;padding:var(--space-6);border-right:1px solid var(--line);display:flex;flex-direction:column}
.cargo-map-visual h2{margin-top:0}.cargo-map{display:block;width:100%;height:auto;margin:auto 0}.cargo-map-sea{fill:var(--card)}
.cargo-map-land path{fill:var(--paper);stroke:var(--line);stroke-width:.5;vector-effect:non-scaling-stroke}
.cargo-map-routes path{fill:none;stroke:var(--ink-3);stroke-width:1.5;opacity:.35;vector-effect:non-scaling-stroke}
.cargo-map-points circle{fill:var(--ink);stroke:var(--card);stroke-width:2;vector-effect:non-scaling-stroke}.cargo-map-points .accent circle{fill:var(--accent)}
.cargo-map-points text{fill:var(--ink);font:500 16px "JetBrains Mono",monospace;paint-order:stroke;stroke:var(--card);stroke-width:3px}
.cargo-map-empty{position:absolute;inset:50% auto auto 50%;transform:translate(-50%,-50%);margin:0;background:rgba(252,253,254,.9);padding:var(--space-2) var(--space-3)}
.cargo-map-summary{padding:var(--space-8) var(--space-6) var(--space-6) 0;align-self:center}.cargo-map-total{display:block}
.cargo-map-total strong{display:block;font:300 clamp(64px,8vw,96px)/.9 "JetBrains Mono",monospace;letter-spacing:-.07em}.cargo-map-total span{display:block;margin-top:var(--space-3);font-size:18px}
.cargo-map-caption{color:var(--ink-3);font-size:12px;margin:var(--space-2) 0 var(--space-8)}
.cargo-map-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-6) var(--space-4);border-top:1px solid var(--line);padding-top:var(--space-6)}
.cargo-map-metrics strong{display:block;font:300 clamp(22px,2.4vw,32px)/1 "JetBrains Mono",monospace}.cargo-map-metrics small{display:block;margin-top:var(--space-2);color:var(--ink-3);font-size:12px;line-height:1.25}
@media(max-width:768px){.cargo-map-points text{display:none}.cargo-map-panel{grid-template-columns:1fr}.cargo-map-visual{border-right:0;border-bottom:1px solid var(--line);padding:var(--space-4)}.cargo-map-summary{padding:var(--space-6)}.cargo-map-total strong{font-size:64px}}

/* v0.67: парящий помощник использует знак AB из фирменного SVG. */
.mascot{position:fixed;right:var(--space-6);bottom:var(--space-6);z-index:4;display:flex;align-items:center;gap:var(--space-3);height:auto;min-height:48px;padding:0;border:0;background:transparent;color:var(--ink);font:inherit;cursor:pointer}
.mascot-figure{display:block;width:48px;height:55px;overflow:visible;transition:transform var(--dur-base) var(--ease-out)}
.mascot-bubble{position:relative;padding:var(--space-3) var(--space-4);border:1px solid var(--line);border-radius:var(--r-md);background:var(--card);box-shadow:var(--shadow-sm);color:var(--ink);font:400 14px/1.4 Onest,sans-serif;white-space:nowrap;transition:opacity var(--dur-base) var(--ease-out)}
.mascot-bubble:after{content:"";position:absolute;right:-5px;top:50%;width:8px;height:8px;background:var(--card);border-top:1px solid var(--line);border-right:1px solid var(--line);transform:translateY(-50%) rotate(45deg)}
.mascot:hover .mascot-figure,.mascot:focus-visible .mascot-figure{transform:scale(1.04)}
.mascot:active .mascot-figure{transform:scale(.98)}
.mascot:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-md)}
.mascot:disabled{cursor:not-allowed;opacity:.45}.mascot[aria-busy="true"]{cursor:wait}.mascot.is-error .mascot-figure{outline:1px solid var(--bad)}
.assistant-open .mascot-bubble,.mascot-seen .mascot-bubble{opacity:0;pointer-events:none}
@media(max-width:768px){.mascot{right:var(--space-4);bottom:var(--space-4)}.mascot-bubble{display:none}}
@media(prefers-reduced-motion:reduce){.mascot-figure,.mascot-bubble{transition:none}}

/* v0.69: таблица слежения на 16 колонок — плотнее, без переносов дат; горизонтальная прокрутка внутри блока */
.table-wrap.compact table{font-size:13px}.table-wrap.compact th,.table-wrap.compact td{padding:6px 8px;white-space:nowrap}.table-wrap.compact td .status{margin-left:4px}
.digest-outlook{color:var(--ink-2);background:var(--paper)}

.page-sub{margin:calc(-1*var(--space-2)) 0 var(--space-4);color:var(--ink-2);max-width:72ch}
.details fieldset[data-mode],.details fieldset[data-service],.details fieldset.services{grid-column:1/-1;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:var(--space-3) var(--space-6);margin:0;padding:var(--space-4) var(--space-5);border:1px solid var(--line);border-radius:var(--r-md);background:var(--paper)}.details fieldset[data-mode][hidden],.details fieldset[data-service][hidden]{display:none}.details fieldset[data-mode] label,.details fieldset[data-service] label{display:grid;gap:var(--space-1)}.details fieldset.services{display:flex;flex-wrap:wrap;gap:var(--space-3) var(--space-6);background:var(--card)}.details fieldset.services label{display:flex;align-items:center;gap:var(--space-2);white-space:nowrap;font-weight:500}.details fieldset.services input{min-height:0;width:18px;height:18px;margin:0}.details fieldset[data-mode] legend,.details fieldset[data-service] legend,.details fieldset.services legend{padding:0 var(--space-2);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}
.table-wrap.compact .sub-row td{height:auto;padding:var(--space-1) var(--space-3) var(--space-2);font-size:12px;color:var(--ink-2);border-bottom:1px solid var(--line)}.sub-row summary{cursor:pointer;color:var(--ink-3);font-size:12px;font-weight:500;padding:0}.sub-row details[open] summary{margin-bottom:var(--space-1)}td.num small{display:block;color:var(--ink-3);font-size:11px}
.table-wrap.compact th,.table-wrap.compact td{white-space:normal}.table-wrap.compact th{height:auto;padding-top:var(--space-2);padding-bottom:var(--space-2);line-height:1.25}.table-wrap.compact td{height:auto;padding-top:var(--space-2);padding-bottom:var(--space-2)}td.rates-route{min-width:180px;max-width:280px}td.rates-route small{display:block;color:var(--ink-3);font-size:11px;white-space:normal}
.digest-heading td{color:var(--ink-2);font-weight:600;background:var(--paper)}.digest-outlook .markdown h1,.digest-outlook .markdown h2,.digest-outlook .markdown h3{font-size:16px;margin:var(--space-3) 0 var(--space-1)}.digest-outlook .markdown p,.digest-outlook .markdown li{font-size:14px}

.tnved-tree details{border-left:2px solid var(--line);margin:2px 0 2px var(--space-3);padding-left:var(--space-3)}.tnved-tree summary{cursor:pointer;padding:var(--space-1) 0;font-size:14px;line-height:1.35;list-style:none}.tnved-tree summary::-webkit-details-marker{display:none}.tnved-tree summary:before{content:"▸";display:inline-block;width:14px;color:var(--ink-3)}.tnved-tree details[open]>summary:before{content:"▾"}.tnved-tree summary:hover{background:var(--hover)}.tnved-tree .mono{font-family:"JetBrains Mono",monospace;white-space:nowrap}.tnved-open{font-size:12px;color:var(--ink-3);margin-left:var(--space-2)}.tnved-tree>details{border-left:none;margin-left:0;padding-left:0}.tnved-tree>details>summary{font-weight:600;font-size:14px}
