/* === Neon shell (ТЗ 1711, 01 §4–6) ================================================= */
body[data-design="command-core"]{
  font-family:var(--ds-font);font-size:14px;line-height:20px;color:var(--ds-text);
  background:var(--ds-canvas);
}
/* два статичных луча в правой верхней зоне (01 §4.3): не под таблицами, клики не ловят.
   z-index:-1 (а не --ds-z-base=0 + `body > *{position:relative;z-index:0}`) — тот приём
   поднимал КАЖДОГО прямого ребёнка body в свой стек с (0,1,1), что перебивало position:fixed
   модалок/ассистента (.modal-bg/.ai-panel из panel.css, специфичность (0,1,0)) и рвало
   фиксированное позиционирование (#ygModal/#metricModal/#priceCalcModal/#priceHistModal,
   #aiPanel). Отрицательный z-index на fixed-псевдоэлементах красит их НИЖЕ всего обычного
   контента страницы (body своего стека не создаёт), но ВЫШЕ фона html/body — без правила
   на `> *` вовсе. */
body[data-design="command-core"]::before,
body[data-design="command-core"]::after{
  content:"";position:fixed;top:-120px;pointer-events:none;z-index:-1;
  opacity:var(--ds-ray-opacity);
  background:linear-gradient(180deg,transparent,var(--ds-edge-violet) 45%,var(--ds-edge-cyan) 70%,transparent);
}
body[data-design="command-core"]::before{right:180px;width:100px;height:520px;transform:rotate(35deg);transform-origin:top}
body[data-design="command-core"]::after{right:40px;width:160px;height:560px;transform:rotate(50deg);transform-origin:top}
body[data-design="command-core"] :where(.kbig,.tnum,td,.ksub b,.prow b){font-variant-numeric:tabular-nums lining-nums}
:where(body[data-design="command-core"] :is(button,a,input,select,textarea,[tabindex]):focus-visible){
  outline:2px solid var(--ds-focus);outline-offset:2px;
}
/* шапка страницы ≥64px, прозрачная, слой header. Высота — ТОЛЬКО шапке оболочки (body > header):
   раньше min-height 64 получал любой <header> экрана, и над заголовками панелей стояли пустые
   полосы (РНП, W5). Прозрачность — как раньше всем, кроме шапки окна C08 (.ds-drawer-head —
   своя геометрия в ds-primitives.css); :where — специфичность прежняя. */
body[data-design="command-core"] header:where(:not(.ds-drawer-head)){
  border-bottom:0;background:transparent;box-shadow:none;
}
body[data-design="command-core"] > header{min-height:var(--ds-header-h)}
body[data-design="command-core"] header.tc-bell-open{position:relative;z-index:var(--ds-z-drawer);}
body[data-design="command-core"] .brand-orbit{display:block;border-radius:0}
body[data-design="command-core"] .brand-orbit-dot{transform-origin:16px 16px}
body[data-design="command-core"] h1.brand-name{font-size:23px;line-height:28px;font-weight:750;letter-spacing:-.3px;color:var(--ds-text)}
body[data-design="command-core"] header .refresh,
body[data-design="command-core"] header .month-chip{
  height:var(--ds-control-h);padding:0 14px;border-radius:var(--ds-radius-sm);
  color:var(--ds-text);background:var(--ds-surface);border:1px solid var(--ds-line-strong);
}
body[data-design="command-core"] .motion-wrap{position:relative;display:inline-block}
body[data-design="command-core"] .motion-menu{
  position:absolute;right:0;top:calc(100% + 6px);min-width:240px;padding:8px;z-index:var(--ds-z-drawer);
  color:var(--ds-text);background:var(--ds-surface-raised);border:1px solid var(--ds-line-strong);
  border-radius:var(--ds-radius);box-shadow:0 12px 30px var(--ds-shadow);
}
body[data-design="command-core"] .motion-menu label{display:flex;gap:8px;align-items:flex-start;padding:8px 10px;border-radius:var(--ds-radius-sm);cursor:pointer}
body[data-design="command-core"] .motion-menu label:hover{background:var(--ds-hover)}
body[data-design="command-core"] .motion-menu .mp{display:block;font-size:12px;line-height:18px;color:var(--ds-muted)}
/* Подпись #motionSysNote стоит в разметке с `hidden` и показывается ui.js только при reduce ОС.
   Пара ниже обязательна: правило с `display` выше перебивает браузерный `[hidden]{display:none}`
   независимо от специфичности, и без неё подпись видна на каждом устройстве (задача 1736,
   сторож tests/_core/test_design_motion_note_hidden_browser.py). */
body[data-design="command-core"] .motion-menu .mp[hidden]{display:none}
body[data-design="command-core"] .nav-topbar{
  /* доменная полоса ≥48px, скроллится, активный домен — selected */
  min-height:var(--ds-domainbar-h);border:1px solid var(--ds-line);background:var(--ds-surface);
  box-shadow:0 8px 24px var(--ds-shadow);padding:var(--ds-shell-topbar-block-inset) var(--ds-shell-topbar-inline-inset);
}
body[data-design="command-core"] .nav-domains{margin-bottom:0;overflow-x:auto;scrollbar-width:thin;overscroll-behavior-inline:contain}
body[data-design="command-core"] .nav-dom,
body[data-design="command-core"] .nav-collapse-btn,
body[data-design="command-core"] .nav-editbtn,
body[data-design="command-core"] .nav-cmdk{color:var(--ds-muted);border:1px solid transparent;background:transparent;border-radius:var(--ds-radius-sm)}
body[data-design="command-core"] .nav-dom.active{
  color:var(--ds-text);background:var(--ds-selected);border-color:var(--ds-indigo);
  box-shadow:0 0 12px var(--ds-glow);
}
body[data-design="command-core"] .nav-side{
  /* sidebar 224 / 64, пункты — кнопки */
  width:var(--ds-sidebar-w);color:var(--ds-text);background:var(--ds-sidebar);
  border:1px solid var(--ds-line);box-shadow:0 8px 24px var(--ds-shadow);padding:var(--ds-shell-side-inset);
}
body[data-design="command-core"] .nav-shell{gap:var(--ds-content-gap)}
body[data-design="command-core"] .nav-content{padding:var(--ds-shell-content-inset);}
body[data-design="command-core"] .nav-item,
body[data-design="command-core"] button.nav-sec-h{
  display:flex;width:100%;align-items:center;gap:10px;text-align:left;font:inherit;font-size:13px;line-height:18px;font-weight:500;
  color:var(--ds-muted);background:transparent;border:1px solid transparent;border-radius:var(--ds-radius-sm);cursor:pointer;
}
body[data-design="command-core"] .nav-item:hover{background:var(--ds-hover);color:var(--ds-text)}
body[data-design="command-core"] .nav-item.active{
  color:var(--ds-text);background:var(--ds-selected);border-color:var(--ds-indigo);box-shadow:0 0 12px var(--ds-glow);
}
body[data-design="command-core"] .nav-badge{
  color:var(--ds-semantic-red-text);background:var(--ds-semantic-red-bg);border:1px solid var(--ds-semantic-red-line);box-shadow:none;
}
/* мобильная шторка: слои 200/210. Скрим — с квалификатором .mob-nav-open в ТОМ ЖЕ компаунде,
   что и у .nav-side ниже (не голый body[data-design=…] .mob-nav-scrim): та форма даёт
   специфичность (0,2,1), ровно как у mobile.css `body.mob-nav-open .mob-nav-scrim`
   (загружается ПОСЛЕДНИМ в index.html) — при равной специфичности порядок в документе решает
   исход, и литеральный z-index:55/background:var(--overlay) из mobile.css побеждал токен
   здесь безусловно. Найдено 20.09.2026 (задача 1711, Task 13): шапка получила
   z-index:var(--ds-z-header)=100 (Task 5) — ВЫШЕ старого скрима 55, и на мобильной шторке
   колокольчик/меню профиля торчали сквозь затемнение неприкрытыми. На origin/master шапка
   без z-index (position не задан) — скрим 55/60 её перекрывал всегда; регрессия ветки, не
   pre-existing. */
body[data-design="command-core"].mob-nav-open .mob-nav-scrim{z-index:var(--ds-z-mobile-scrim);background:var(--ds-overlay)}
body[data-design="command-core"].mob-nav-open .nav-side{z-index:var(--ds-z-mobile-menu);width:min(320px,calc(100vw - 48px))}
/* кнопки (01 §6.2): primary — градиент 110°, secondary — поверхность, ghost, destructive */
:root{--ds-btn-radius:var(--ds-radius-sm,10px);--ds-btn-pad:0 16px;--ds-btn-size:13px}
body[data-design="command-core"] :where(.btn,.rv-regen,.rv-mini,.care-btn,.rpx-btn,.ig-btn,.dbx-btn,.tst-btn,.mtg-btn,.bdr-btn,.tct-btn,.opop-btn,.ib-btn,.ns-btn,.sv-pill,button.refresh){
  height:var(--ds-control-h);padding:var(--ds-btn-pad);border-radius:var(--ds-btn-radius);font-weight:500;font-size:var(--ds-btn-size);line-height:18px;
  color:var(--ds-text);background:var(--ds-surface);border:1px solid var(--ds-line-strong);
}
body[data-design="command-core"] :where(.btn-primary,.rv-send,.proc-create-btn,.ib-btn.ib-ok,.sv-pill.accent,.nav-editbar .save){
  color:var(--ds-on-accent);background:linear-gradient(110deg,var(--ds-action-start),var(--ds-action-end));border:1px solid var(--ds-edge-violet);
}
/* panel.css:1378 красит .rv-send жёстким #0f7a37 ТОЛЬКО в html[data-theme="light"]
   ((0,2,1) — сильнее :where() выше) — «Применить выбранным» («Цены») оставался зелёным
   в светлой теме, хотя в тёмной уже фиолетовый градиент primary (задача 1711, Task 10
   Step 2). Явные (не :where) правила той же специфичности бьют panel.css порядком
   подключения (design-system.css идёт последним в index.html). */
body[data-design="command-core"] .rv-send,
body[data-design="command-core"] .rv-send:hover{
  color:var(--ds-on-accent);background:linear-gradient(110deg,var(--ds-action-start),var(--ds-action-end));border:1px solid var(--ds-edge-violet);
}
body[data-design="command-core"] :where(.btn-ghost){background:transparent;border-color:transparent}
body[data-design="command-core"] :where(.btn-ghost):hover{background:var(--ds-hover)}
body[data-design="command-core"] :where(.btn-danger,.ib-btn.ib-no){color:var(--ds-semantic-red-text);background:var(--ds-semantic-red-bg);border-color:var(--ds-semantic-red-line)}
body[data-design="command-core"] :where(button,[role="button"]):disabled{opacity:.52;cursor:not-allowed}
/* поля (01 §6.4) */
body[data-design="command-core"] input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
body[data-design="command-core"] select,
body[data-design="command-core"] textarea{
  color:var(--ds-text);background:var(--ds-surface-soft);border:1px solid var(--ds-line-strong);border-radius:var(--ds-radius-sm);
  font:inherit;min-height:var(--ds-field-h);padding:0 12px;
}
body[data-design="command-core"] textarea{padding:8px 12px;min-height:80px}
body[data-design="command-core"] :where(td,th) :where(input,select){min-height:var(--ds-field-h-dense)}
/* таблицы (01 §6.5) */
body[data-design="command-core"] table{color:var(--ds-text);background:var(--ds-surface)}
body[data-design="command-core"] th{height:var(--ds-table-head-h);padding:8px 12px;color:var(--ds-muted);font-size:12px;font-weight:500;background:var(--ds-surface);border-bottom:1px solid var(--ds-line)}
body[data-design="command-core"] td{min-height:var(--ds-row-h);padding:8px 12px;border-bottom:1px solid var(--ds-line)}
body[data-design="command-core"] tbody tr:hover>td{background:var(--ds-hover)}
body[data-design="command-core"] tbody tr.sel>td,
body[data-design="command-core"] tbody tr.selected>td{background:var(--ds-selected)}
/* Выбранная строка ПОВЕРХ зебры (аудит 1722 A18, задача 1727): зебра panel.css
   `.dlang table:not(.tx-table) tbody tr:nth-child(even) > *` и её вариант
   `.dlang table.proc-table-lined …` — обе (0,3,3) — били правило выше (0,2,4), и токен
   --ds-selected был виден только на нечётных строках. Как у hover (panel.css даёт ему
   свою .dlang-версию): своя .dlang-версия сильнее обеих зебр — (0,3,5). */
body[data-design="command-core"] .dlang table tbody tr:is(.sel,.selected)>td{background:var(--ds-selected)}
/* панели/карточки/KPI (01 §6.1): непрозрачные, тонкая грань, тень 0 8 24 */
body[data-design="command-core"] :where(.panel,.card,.kcard,.pcard){
  color:var(--ds-text);background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);box-shadow:0 8px 24px var(--ds-shadow);
}
body[data-design="command-core"] :where(.kcard,.card){padding:16px;min-height:116px}
body[data-design="command-core"] .klabel{font-size:12px;line-height:18px;font-weight:500;color:var(--ds-muted)}
body[data-design="command-core"] .kbig{font-size:28px;line-height:34px;font-weight:700}
body[data-design="command-core"] .kpis--r1 .kbig{font-size:24px;line-height:30px}
body[data-design="command-core"] .ksub{font-size:12px;line-height:18px;color:var(--ds-muted)}
/* Значение KPI на «Основной» (01 §4.1, аудит 1716 F02): panel.css `.dash .kpis--r1 .card .big`
   (0,4,0) ставил clamp(19px,1.55vw,30px) → 22.32 px на 1440 и nowrap, а overflow:hidden карточки
   резал хвост суммы. Владелец типографики теперь здесь (0,4,1): 28/34 у обычной карточки,
   24/30 в ряду шести; шрифт не ужимается (аудит 1722 R01). Перенос — только по пробелу:
   dsFitKpiValues (dashboard-ui.js) заменяет NBSP Intl(ru-RU) между разрядными группами обычным
   пробелом, поэтому длинная сумма ложится строками «123 456 / 789 ₽» — группа и знак целы,
   overflow-wrap:normal запрещает рвать группу изнутри (04 §5.1: переносы при fallback-шрифте
   допустимы, перекрытия/обрезка — нет). Padding ряда шести — 12 px (01 §6.1: 12–16 по ширине). */
body[data-design="command-core"] .dash .card{padding:16px}
body[data-design="command-core"] .dash .kpis--r1 .card{padding:12px}
body[data-design="command-core"] .dash .card .big{font-size:28px;line-height:34px;font-weight:700;letter-spacing:-.3px;white-space:normal;overflow-wrap:normal;word-break:normal;min-width:0}
body[data-design="command-core"] .dash .kpis--r1 .card .big{font-size:24px;line-height:30px}
/* «Основная» (01 §7): hero, фильтры, 6+4 KPI по брейкпоинтам, график:пульс = 2:1 */
body[data-design="command-core"] .sv-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:20px 24px;margin-bottom:16px;
  background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);box-shadow:0 8px 24px var(--ds-shadow)}
body[data-design="command-core"] .sv-hero h1{margin:0;font-size:30px;line-height:38px;font-weight:700}
body[data-design="command-core"] .sv-hero-sub{font-size:14px;line-height:20px;color:var(--ds-muted);margin-top:4px}
body[data-design="command-core"] .sv-actions{display:flex;gap:8px;flex-wrap:wrap}
body[data-design="command-core"] .sv-pill.sv-ai{border-color:var(--ds-violet);color:var(--ds-violet)}
body[data-design="command-core"] .kpis{display:grid;gap:12px;margin-bottom:16px}
body[data-design="command-core"] .kpis--r1{grid-template-columns:repeat(6,minmax(0,1fr))}
body[data-design="command-core"] .kpis--r2{grid-template-columns:repeat(4,minmax(0,1fr))}
/* модификатор без права на строки ниже валовой прибыли (panel.css:98) — 4 плашки вместо 6,
   иначе .kpis--r1{repeat(6)} той же специфичности побеждает по порядку правил (C2, ревью) */
body[data-design="command-core"] .kpis--r1.kpis--r1-4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media(max-width:1439px){
  body[data-design="command-core"] .kpis--r1{grid-template-columns:repeat(3,minmax(0,1fr))}
  body[data-design="command-core"] .kpis--r1.kpis--r1-4{grid-template-columns:repeat(2,minmax(0,1fr))}
}
/* Мобильные ряды (01 §7, аудит 1716 F01): раньше стояли через :where() с нулевым вкладом
   селектора — (0,1,1) проигрывало и базовому .kpis--r1 выше (0,2,1), и panel.css
   `.dash .kpis--r1` (0,2,0), поэтому на 390 px оставалось 3/4 колонки с обрезанными суммами.
   Та же специфичность (0,2,1)/(0,3,1), что у базовых правил, и позже по файлу — побеждают. */
@media(max-width:1023px){
  body[data-design="command-core"] .kpis--r1,
  body[data-design="command-core"] .kpis--r2,
  body[data-design="command-core"] .kpis--r1.kpis--r1-4{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:359px){
  body[data-design="command-core"] .kpis--r1,
  body[data-design="command-core"] .kpis--r2,
  body[data-design="command-core"] .kpis--r1.kpis--r1-4{grid-template-columns:minmax(0,1fr)}
}
body[data-design="command-core"] .dash .sv-row{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:16px;margin-bottom:16px}
@media(max-width:1279px){body[data-design="command-core"] .dash .sv-row{grid-template-columns:minmax(0,1fr)}}
@media(max-width:768px){body[data-design="command-core"] .sv-hero h1{font-size:24px;line-height:32px}}
/* hero-KPI: без сплошного градиента под белыми цифрами (01 §6.1) */
body[data-design="command-core"] .dash .card--hero{
  background:var(--ds-surface);border:1px solid var(--ds-line);color:var(--ds-text);
  border-top:2px solid var(--ds-indigo);
}
body[data-design="command-core"] .dash .card--hero :where(.label,.sub,.sub b){color:var(--ds-muted)}
body[data-design="command-core"] .dash .card--hero .pos{color:var(--ds-green)}
body[data-design="command-core"] .dash .card--hero .neg{color:var(--ds-coral)}
body[data-design="command-core"] .dash .card--hero .warn{color:var(--ds-amber)}
/* диалоги/слои (01 §6.7–6.8) */
body[data-design="command-core"] :where(.modal-bg,#uiConfirm){z-index:var(--ds-z-modal-scrim);background:var(--ds-overlay)}
/* Закупки (01 §6.8, аудит 1722 A12, задача 1727): #procModal (procOpenModal) — скрим и окно
   одним узлом, слой модалки; список комбобокса товара .art-combo-list (procArtcOpen) —
   popover ВНУТРИ модалки: position:fixed, но дочерний узел #procModal, поэтому его z-index
   считается в stacking context модалки и должен быть выше её содержимого (elementFromPoint
   по строке списка — строка списка, а не форма). Раньше оба стояли inline 10000/9999 из
   procurement.js. Запасное значение — та же ступень шкалы для легаси-темы (?design=legacy,
   A46), где токенов --ds-z-* на body нет и модалка ушла бы под sticky-шапки таблиц. */
#procModal{z-index:var(--ds-z-modal,410)}
.art-combo-list{z-index:var(--ds-z-modal-popover,420)}
body[data-design="command-core"] :where(.modal,.drawer,.popover,.dropdown){
  color:var(--ds-text);background:var(--ds-surface-raised);border:1px solid var(--ds-line-strong);border-radius:var(--ds-radius-lg);
}
/* .modal геометрия по 01 §6.7 (задача 1711, Task 13 — отложено Task 5, держал старый
   контракт test_design_workflows_static::WORKFLOW_SURFACES max-width:94vw/max-height:90vh):
   обычная модалка ≤560, отступ от viewport 16px на сторону (calc(100vw - 32px)), высота —
   calc(100dvh - 32px) с собственной прокруткой. Карточка документа шире (.modal.wide,
   ygModal/metricModal/priceCalcModal/priceHistModal в index.html) — до 960 той же формулой. */
body[data-design="command-core"] :where(.modal,.drawer,.popover,.dropdown){
  max-width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow:auto;
}
body[data-design="command-core"] .modal.wide{max-width:min(960px,calc(100vw - 32px))}
/* I4 (ревью 20.09): rnp-giveaways.css:41 `.modal.gw-form{width:min(720px,95vw)}` — width, а
   генерик max-width выше той же специфичности (0,2,0) идёт ПОЗЖЕ по каскаду и режет форму
   раздач до 560. Свой max-width для варианта, аналогично .modal.wide. */
body[data-design="command-core"] .modal.gw-form{max-width:min(720px,calc(100vw - 32px))}
/* Ассистент (02 §6.3): системная плашка гарда и ошибка сети — семантические токены темы,
   не литеральный светлый hex из panel.css (#fef2f2/#fffbeb — правило легаси-темы, не трогаем).
   Без этого dark-тема получала яркие бледные плашки поверх тёмной панели (найдено кадром
   20.09.2026, Task 13, стаб /api/assistant/history тремя ролями) — фон уже был ≠ фону
   пользователя классом, но не следовал теме. */
body[data-design="command-core"] .ai-msg-err{background:var(--ds-semantic-red-bg);color:var(--ds-semantic-red-text)}
body[data-design="command-core"] .ai-msg-warn{
  background:var(--ds-semantic-amber-bg);color:var(--ds-semantic-amber-text);border-color:var(--ds-semantic-amber-line);
}
body[data-design="command-core"] #uiToasts{z-index:var(--ds-z-toast)}
body[data-design="command-core"] .acct-drop{z-index:var(--ds-z-drawer)}
/* .ai-panel (01 §6.7, 01 §6.8): базовая ширина 440, немодальный слой drawer (300) вместо
   старого 901 (Task 13, задача 1711 — отложено Task 5). right/bottom оставлены panel.css
   (20px/20px) — контракт геометрии test_design_workflows_static.py::WORKFLOW_SURFACES не
   различает медиа-условия, любое переопределение right/z-index здесь ловится как
   безусловное для ВСЕХ ширин; полноэкранный вариант ≤768 — в mobile.css (файл не входит в
   STATIC_CSS того теста, поэтому медиа-override там не путается с этим безусловным). */
body[data-design="command-core"] .ai-panel{width:440px;max-width:calc(100vw - 24px);z-index:var(--ds-z-drawer)}
/* Отступ контента от края окна (01 §4.2, аудит 1716 F14): 24/20/16/12 по диапазонам. Раньше
   body держал panel.css `clamp(12px,3vw,36px)` — 36 px на 1440, 30.72 на 1024. Токен
   --ds-content-inset переопределяется по media прямо на body, чтобы владелец был один. */
body[data-design="command-core"]{padding:20px var(--ds-content-inset)}
/* значения, а не переопределение токена: html[data-theme="light"] body[...] в design-tokens.css
   объявляет --ds-content-inset:24px с большей специфичностью и перебил бы media-токен на body */
@media(max-width:1279px){body[data-design="command-core"]{padding-inline:20px}}
@media(max-width:1023px){body[data-design="command-core"]{padding-inline:16px}}
@media(max-width:768px){
  body[data-design="command-core"]{padding:10px 12px 24px}
  /* Кнопки шапки на тач-экране ≥44×44 (01 §4.2, аудит 1716 F13): бургер, тема, движение,
     обновление, колокольчик, аккаунт сидели на десктопных 36 px. С задачи 2964 они внизу
     колонки меню (.nav-side-foot, на телефоне — шторка). */
  body[data-design="command-core"] header .refresh,
  body[data-design="command-core"] header button,
  body[data-design="command-core"] .nav-side-foot button,
  body[data-design="command-core"] #mobNavBtn{min-width:var(--ds-control-h-touch);min-height:var(--ds-control-h-touch);height:auto;display:inline-flex;align-items:center;justify-content:center}
}
/* Свёрнутый sidebar — компактная полоса 64 px с иконками (01 §5.2, аудит 1716 F14), а не
   display:none. Только desktop: на ≤768 sidebar — мобильная шторка (mobile.css), а nav-autohide
   (домен с одной вкладкой) по-прежнему прячет его целиком. Подписи пунктов остаются в
   доступном дереве (клавиатура, скринридер), визуально скрыты; секции — разделителем. */
@media(min-width:769px){
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-side{display:block;width:var(--ds-sidebar-w-collapsed);overflow-x:hidden}
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-sec{margin-bottom:6px;padding-top:6px;border-top:1px solid var(--ds-line)}
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-sec:first-child{border-top:0;padding-top:0}
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-sec-h,
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-grip,
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) #navSideExtension,
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-editbar,
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-item.active::after{display:none}
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-sec.collapsed .nav-item{display:flex}
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-item{position:relative;justify-content:center;gap:0;padding:10px 0}
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-item .tab-ico{width:20px;height:20px;flex:0 0 20px}
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-item > span:not(.nav-badge){position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  body[data-design="command-core"] .nav-shell.nav-collapsed:not(.nav-autohide) .nav-item .nav-badge{position:absolute;top:2px;right:3px;margin:0;font-size:10px;line-height:14px;padding:0 4px}
}
/* === /Neon shell ==================================================================== */

body[data-design="command-core"] #tcBellBtn{position:relative}
/* Колокольчик поднимается над содержимым ТОЛЬКО пока раскрыт его список. Безусловный
   z-index:1400 держал кнопку выше любой модалки и дровера (1100–1250): открытая задача,
   подтверждение, ввод — сквозь них торчал 🔔 (разбор вкладки CRM 14.08.2026). Класс
   tc-bell-open вешает teamchat-widget на <header> ровно на время раскрытого списка. */
body[data-design="command-core"] #tcBellWrap{position:relative}
body[data-design="command-core"] header.tc-bell-open #tcBellWrap{z-index:1400}
body[data-design="command-core"] #tcBellDrop{
  color:var(--ds-text);background:var(--ds-surface-raised);border-color:var(--ds-line-strong);
  box-shadow:0 18px 52px var(--ds-shadow);
}
body[data-design="command-core"] .user-menu{color:var(--ds-muted)}
body[data-design="command-core"] .acct-drop{
  border-color:var(--ds-line-strong);box-shadow:0 18px 52px var(--ds-shadow);
}
body[data-design="command-core"] .acct-drop a,body[data-design="command-core"] .acct-drop .acct-logout button{color:var(--ds-text)}
body[data-design="command-core"] .acct-ava{background:var(--ds-indigo);color:var(--ds-on-accent)}
body[data-design="command-core"] .proj-stripe{
  height:3px;border-radius:2px;margin:0 var(--ds-shell-topbar-inline-inset) 6px;
  background:var(--proj-stripe, var(--proj-tint));
}
/* Режим одного кабинета: тон разливается по рамке — кромка и подложка, без заливок.
   При нескольких выбранных проектах правила не применяются вовсе (data-proj-mode="multi"). */
body[data-design="command-core"][data-proj-mode="single"] .nav-topbar{
  border-color:var(--proj-tint-line);
  background:color-mix(in srgb, var(--proj-tint-soft) 60%, transparent);
}
body[data-design="command-core"][data-proj-mode="single"] .nav-side{
  border-color:var(--proj-tint-line);
}
/* Общего класса .kicker в разметке нет: у каждого модуля свой префиксованный класс
   (supd-/wbc-/ozc-/adv-command-/rpb-kicker) — поэтому список селекторов, а не .kicker.
   Гард tests/_misc/test_project_tint_shell.py::test_every_kicker_class_is_covered_by_the_single_mode_tint
   сканирует app/static/js, app/static/css и app/templates на новые *-kicker и валит
   сьют, если появившийся класс забыли добавить сюда либо перебить по специфичности
   каждое конкурирующее правило, задающее ему color. Специфичность двух атрибутов на
   body перебивает .adv-command-kicker{color:var(--ds-cyan)} ниже по каскаду — только
   в режиме single; в multi правило не применяется, и прежний цвет возвращается сам.*/
body[data-design="command-core"][data-proj-mode="single"] .supd-kicker,
body[data-design="command-core"][data-proj-mode="single"] .wbc-kicker,
body[data-design="command-core"][data-proj-mode="single"] .ozc-kicker,
body[data-design="command-core"][data-proj-mode="single"] .adv-command-kicker,
body[data-design="command-core"][data-proj-mode="single"] .rpb-kicker,
body[data-design="command-core"][data-proj-mode="single"] .vpn-kicker,
body[data-design="command-core"][data-proj-mode="single"] .ff-kicker,
body[data-design="command-core"][data-proj-mode="single"] .ffi-kicker,
body[data-design="command-core"][data-proj-mode="single"] .ffo-kicker,
body[data-design="command-core"][data-proj-mode="single"] .mpa-kicker,
body[data-design="command-core"][data-proj-mode="single"] .trainmod-kicker,
body[data-design="command-core"][data-proj-mode="single"] .ds-kicker,
body[data-design="command-core"][data-proj-mode="single"] .agb-kicker,
body[data-design="command-core"][data-proj-mode="single"] .p2-kicker,
body[data-design="command-core"][data-proj-mode="single"] .agb-brain-kicker{
  color:var(--proj-tint-ink);
}
/* Светлая тема имеет свой конкурирующий цвет для этого kicker'а
   (html[data-theme="light"] body… .adv-command-kicker{color:var(--ds-blue)} ниже по
   файлу): у него специфичность (0,3,2) — 2 типа селектора (html,body) против 1 у общего
   правила выше (0,3,1), поэтому в светлой теме он победил бы каскад без этой строки.
   Правило по той же идиоме, которой уже пользуется конкурент, а не !important. */
html[data-theme="light"] body[data-design="command-core"][data-proj-mode="single"] .adv-command-kicker{
  color:var(--proj-tint-ink);
}
body[data-design="command-core"] .nav-editbtn.on{
  color:#fff;border-color:var(--ds-cyan);
  background:linear-gradient(110deg,var(--ds-indigo),var(--ds-blue));
  box-shadow:0 0 18px color-mix(in srgb,var(--ds-indigo) 32%,transparent);
}
body[data-design="command-core"] .nav-item.edit{
  cursor:grab;border-style:dashed;border-color:var(--ds-line-strong);
  background:color-mix(in srgb,var(--ds-surface-soft) 72%,transparent);
}
body[data-design="command-core"] .nav-item.edit:hover{
  color:var(--ds-text);border-color:var(--ds-cyan);
  background:color-mix(in srgb,var(--ds-cyan) 10%,var(--ds-surface-raised));
}
body[data-design="command-core"] .nav-item.dragging{
  opacity:.45;border-color:var(--ds-amber);background:var(--ds-surface-soft);
}
body[data-design="command-core"] .nav-sec.edit{
  border-style:dashed;border-color:var(--ds-line-strong);
  background:color-mix(in srgb,var(--ds-surface-soft) 60%,transparent);
}
body[data-design="command-core"] .nav-sec.drop{
  border-color:var(--ds-cyan);
  background:color-mix(in srgb,var(--ds-cyan) 12%,var(--ds-surface-raised));
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ds-cyan) 28%,transparent);
}
body[data-design="command-core"] .nav-dom.drop{
  outline:2px dashed var(--ds-cyan);outline-offset:2px;
  color:var(--ds-text);background:color-mix(in srgb,var(--ds-cyan) 14%,var(--ds-surface));
}

/* Dynamic notifications, chats, tasks, and assistant surfaces. */
body[data-design="command-core"] #tcBellDrop,
body[data-design="command-core"] .tc-drawer,
body[data-design="command-core"] .tct-modal,
body[data-design="command-core"] .tct-card,
body[data-design="command-core"] .ai-panel{
  color:var(--ds-text);background:var(--ds-surface-raised);
  border-color:var(--ds-line-strong);box-shadow:0 22px 65px var(--ds-shadow);
}
body[data-design="command-core"] .tc-msg,
body[data-design="command-core"] .chat-msg,
body[data-design="command-core"] .ai-msg-bot{
  color:var(--ds-text);background:var(--ds-surface-soft);border-color:var(--ds-line);
}
body[data-design="command-core"] .tc-msg.mine,
body[data-design="command-core"] .ai-msg-user{
  color:var(--ds-text);
  background:linear-gradient(135deg,color-mix(in srgb,var(--ds-cyan) 16%,var(--ds-surface)),color-mix(in srgb,var(--ds-indigo) 15%,var(--ds-surface)));
  border-color:color-mix(in srgb,var(--ds-cyan) 32%,var(--ds-line));
}
body[data-design="command-core"] .tc-comp,
body[data-design="command-core"] .chat-confirm{border-color:var(--ds-line);background:var(--ds-surface)}
body[data-design="command-core"] .tc-inp,
body[data-design="command-core"] .tct-inp,
body[data-design="command-core"] .tct-sel{
  color:var(--ds-text);background:var(--ds-surface-soft);border-color:var(--ds-line);
}
body[data-design="command-core"] .tct-pill{box-shadow:inset 0 0 0 1px color-mix(in srgb,currentColor 22%,transparent)}
body[data-design="command-core"] .chat-card,
body[data-design="command-core"] .chat-thread{
  color:var(--ds-text);background:var(--ds-surface);border-color:var(--ds-line);
}
body[data-design="command-core"] .ai-fab{
  color:var(--ds-canvas);background:linear-gradient(135deg,var(--ds-cyan),var(--ds-indigo));
  box-shadow:0 10px 32px color-mix(in srgb,var(--ds-cyan) 24%,transparent);
}
/* Ореол дыхания в палитре Neon (задача 1724). До 22.09 кейфреймы `ai-fab-breathe` анимировали
   box-shadow, а анимация сильнее обычного объявления — циановое свечение строкой выше на
   экране не появлялось вовсе. Теперь дышит opacity ореола, а цвет берётся из токена. */
body[data-design="command-core"] .ai-fab::after{
  box-shadow:0 10px 32px 8px color-mix(in srgb,var(--ds-cyan) 30%,transparent);
}

body[data-design="command-core"] .adv-command{display:grid;gap:14px}
body[data-design="command-core"] .adv-command-hero{
  min-height:240px;display:grid;grid-template-columns:minmax(190px,.55fr) minmax(0,1.45fr);
  align-items:center;overflow:hidden;background:
  radial-gradient(circle at 20% 50%,color-mix(in srgb,var(--ds-cyan) 20%,transparent),transparent 31%),
  radial-gradient(circle at 72% 20%,color-mix(in srgb,var(--ds-indigo) 17%,transparent),transparent 38%),
  var(--ds-surface);
}
body[data-design="command-core"] .adv-core{
  width:170px;height:170px;margin:auto;position:relative;display:grid;place-items:center;
  border-radius:50%;color:var(--ds-text);
}
body[data-design="command-core"] .adv-core::before{
  content:"";position:absolute;inset:48px;border-radius:50%;
  background:radial-gradient(circle,var(--ds-text) 0 8%,var(--ds-cyan) 26%,var(--ds-blue) 54%,transparent 70%);
  box-shadow:0 0 28px var(--ds-cyan),0 0 70px color-mix(in srgb,var(--ds-indigo) 46%,transparent);
}
body[data-design="command-core"] .adv-core b{position:relative;color:var(--ds-canvas);font:800 17px ui-monospace,SFMono-Regular,Menlo,monospace}
body[data-design="command-core"] .adv-core-ring{position:absolute;border:1px solid color-mix(in srgb,var(--ds-cyan) 46%,transparent);border-radius:50%}
body[data-design="command-core"] .adv-core-ring--one{inset:20px;border-style:dashed}
body[data-design="command-core"] .adv-core-ring--two{inset:36px;border-color:color-mix(in srgb,var(--ds-indigo) 54%,transparent)}
body[data-design="command-core"] .adv-command-copy h2{margin:5px 0;font-size:clamp(24px,3vw,42px)}
body[data-design="command-core"] .adv-command-kicker{color:var(--ds-cyan);font-size:10px;letter-spacing:.16em;text-transform:uppercase}
html[data-theme="light"] body[data-design="command-core"] .adv-command-kicker{color:var(--ds-blue)}
body[data-design="command-core"] .adv-kpi-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}
body[data-design="command-core"] .adv-kpi,
body[data-design="command-core"] .adv-rec{background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius)}
@media(max-width:960px){
  body[data-design="command-core"] .adv-command-hero{grid-template-columns:1fr}
  body[data-design="command-core"] .adv-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}


/* Marketplace, finance, procurement, promotion, knowledge, HR, care, and robots. */
body[data-design="command-core"] :where(.rv-card,.pcard,.price-subtab,
.fd-w,.fin-piv,.payment-calendar,.proc-card-table-wrap,.proc-orders-tech,
.bdr,.rpx > .panel,.pos-card,.kb-card,.ig-card,.hr-stat,.hr-org-card,
.care-card,.kcard,.opop-card,.crm-card,.sal-card){
  color:var(--ds-text);border-color:var(--ds-line);
}
body[data-design="command-core"] :where(.rv-card,.pcard,.fd-w,.payment-calendar,
.proc-card-table-wrap,.bdr,.rpx > .panel,.pos-card,.kb-card,.ig-card,.hr-stat,
.hr-org-card,.care-card:not(.care-card--hero),.kcard,.opop-card,.crm-card,.sal-card){
  background:var(--ds-surface);
  box-shadow:0 10px 30px color-mix(in srgb,var(--ds-shadow) 42%,transparent);
}
body[data-design="command-core"] :where(.fin-piv,.proc-orders-tech,.hr-tab){
  background:var(--ds-surface);border:1px solid var(--ds-line);
  border-radius:var(--ds-radius);
}
body[data-design="command-core"] :where(.badge,.chip,.mini-chip,.eng-badge){
  color:var(--ds-text);background:var(--ds-surface-soft);border-color:var(--ds-line);
}

/* Module-aware rules outrank styles appended by Finance, Bider, and Positions. */
body[data-design="command-core"] .fd-w table{color:var(--ds-text)}
body[data-design="command-core"] .fd-w table th{
  color:var(--ds-muted);background:var(--ds-surface-raised);border-color:var(--ds-line);
}
body[data-design="command-core"] .fd-w table td{border-color:var(--ds-line)}

body[data-design="command-core"] .bdr input,
body[data-design="command-core"] .bdr select,
body[data-design="command-core"] .bdr textarea{
  color:var(--ds-text);background:var(--ds-surface-soft);border-color:var(--ds-line);
}
body[data-design="command-core"] .bdr,
body[data-design="command-core"] .bdr .bdr-body{
  color:var(--ds-text);background:var(--ds-surface);
}
body[data-design="command-core"] .bdr .bdr-top,
body[data-design="command-core"] .bdr .bdr-tabs,
body[data-design="command-core"] .bdr .bdr-logbar{
  background:var(--ds-surface-raised);border-color:var(--ds-line);
}
body[data-design="command-core"] .bdr .bdr-tab,
body[data-design="command-core"] .bdr .bdr-fbtn,
body[data-design="command-core"] .bdr .bdr-suggest,
body[data-design="command-core"] .bdr .bdr-card-desc,
body[data-design="command-core"] .bdr .bdr-newcamp{
  color:var(--ds-muted);background:var(--ds-surface-soft);border-color:var(--ds-line);
}
body[data-design="command-core"] .bdr .bdr-detail,
body[data-design="command-core"] .bdr .bdr-log,
body[data-design="command-core"] .bdr .bdr-chars td{
  border-color:var(--ds-line);
}
body[data-design="command-core"] .bdr .bdr-balance,
body[data-design="command-core"] .bdr h3{
  color:var(--ds-text);
}
body[data-design="command-core"] .bdr .bdr-log{
  color:var(--ds-semantic-green-text);background:var(--ds-semantic-green-bg);
  border-color:var(--ds-semantic-green-line);
}
body[data-design="command-core"] .bdr .mut,
body[data-design="command-core"] .bdr .bdr-stub,
body[data-design="command-core"] .bdr .bdr-card-desc,
body[data-design="command-core"] .bdr .price-old,
body[data-design="command-core"] .bdr .bdr-serp-rating,
body[data-design="command-core"] .bdr .bdr-serp-nm,
body[data-design="command-core"] .bdr .bdr-sugg .f{
  color:var(--ds-semantic-muted-text);
}
body[data-design="command-core"] .bdr .bdr-tab.on,
body[data-design="command-core"] .bdr .bdr-fbtn.on{
  color:var(--ds-semantic-active-text);background:var(--ds-semantic-active-bg);
  border-color:var(--ds-semantic-active-line);
}
body[data-design="command-core"] .bdr .bdr-sugg:hover,
body[data-design="command-core"] .bdr .bdr-sugg.on{
  color:var(--ds-semantic-active-text);background:var(--ds-semantic-active-bg);
}
body[data-design="command-core"] .bdr .bdr-sugg:hover .f,
body[data-design="command-core"] .bdr .bdr-sugg.on .f{
  color:var(--ds-semantic-active-text);
}
body[data-design="command-core"] .bdr .grn,
body[data-design="command-core"] .bdr .bdr-status-on{
  color:var(--ds-semantic-green-text);
}
body[data-design="command-core"] .bdr .org,
body[data-design="command-core"] .bdr .bdr-status-off,
body[data-design="command-core"] .bdr .spp-chip,
body[data-design="command-core"] .bdr .bdr-log .err{
  color:var(--ds-semantic-amber-text);
}
body[data-design="command-core"] .bdr .bdr-adchip{
  color:var(--ds-semantic-green-text);background:var(--ds-semantic-green-bg);
  border-color:var(--ds-semantic-green-line);
}
body[data-design="command-core"] .bdr .mag,
body[data-design="command-core"] .bdr th[data-sort]:hover,
body[data-design="command-core"] .bdr th.sort-on{
  color:var(--ds-semantic-active-text);
}
body[data-design="command-core"] .bdr .bdr-phrases{background:var(--ds-surface-soft)}
body[data-design="command-core"] .bdr th{
  color:var(--ds-muted);background:var(--ds-surface-raised);border-color:var(--ds-line);
}
body[data-design="command-core"] .bdr td{border-color:var(--ds-line)}
body[data-design="command-core"] .bdr tr.bdr-row:hover td{
  background:color-mix(in srgb,var(--ds-cyan) 8%,var(--ds-surface));
}
body[data-design="command-core"] .bdr tr.bdr-row.sel td{
  background:color-mix(in srgb,var(--ds-indigo) 30%,var(--ds-surface));
}
body[data-design="command-core"] .bdr-ctx{
  color:var(--ds-text);background:var(--ds-surface-raised);border-color:var(--ds-line-strong);
  box-shadow:0 16px 38px var(--ds-shadow);
}
body[data-design="command-core"] .bdr-ctx .mi:hover{
  color:var(--ds-on-accent);background:var(--ds-indigo);
}
body[data-design="command-core"] .bdr-ctx .sep{background:var(--ds-line)}

body[data-design="command-core"] .pos-mod .pos-card{
  color:var(--ds-text);background:var(--ds-surface);border-color:var(--ds-line);
  box-shadow:0 10px 30px color-mix(in srgb,var(--ds-shadow) 42%,transparent);
}
body[data-design="command-core"] .pos-mod :where(input,select){
  color:var(--ds-text);background:var(--ds-surface-soft);border-color:var(--ds-line);
}
body[data-design="command-core"] .pos-mod :where(.pos-seg,.pos-help,.pos-chip,.pos-stock){
  background:var(--ds-surface-soft);border-color:var(--ds-line);
}
body[data-design="command-core"] .pos-mod :where(.pos-pick-dd,.pos-seg button.on){
  color:var(--ds-text);background:var(--ds-surface-raised);border-color:var(--ds-line);
}
body[data-design="command-core"] .pos-mod thead th{
  color:var(--ds-muted);background:var(--ds-surface-raised);border-color:var(--ds-line);
}
body[data-design="command-core"] .pos-mod :where(th.pos-qh,td.pos-q){
  background:var(--ds-surface);
}
body[data-design="command-core"] .pos-mod tr.pos-qrow>td{
  background:var(--ds-surface-soft);
}
body[data-design="command-core"] .pos-mod .pos-top{
  color:var(--ds-semantic-green-text);background:var(--ds-semantic-green-bg);
  box-shadow:inset 0 0 0 1px var(--ds-semantic-green-line);
}
body[data-design="command-core"] .pos-mod .pos-good{
  color:var(--ds-semantic-cyan-text);background:var(--ds-semantic-cyan-bg);
  box-shadow:inset 0 0 0 1px var(--ds-semantic-cyan-line);
}
body[data-design="command-core"] .pos-mod .pos-mid{
  color:var(--ds-semantic-amber-text);background:var(--ds-semantic-amber-bg);
  box-shadow:inset 0 0 0 1px var(--ds-semantic-amber-line);
}
body[data-design="command-core"] .pos-mod .pos-ok{
  color:var(--ds-semantic-orange-text);background:var(--ds-semantic-orange-bg);
  box-shadow:inset 0 0 0 1px var(--ds-semantic-orange-line);
}
body[data-design="command-core"] .pos-mod .pos-bad{
  color:var(--ds-semantic-red-text);background:var(--ds-semantic-red-bg);
  box-shadow:inset 0 0 0 1px var(--ds-semantic-red-line);
}
body[data-design="command-core"] .pos-mod .pos-none{
  color:var(--ds-semantic-muted-text);background:var(--ds-semantic-muted-bg);
  box-shadow:inset 0 0 0 1px var(--ds-semantic-muted-line);
}
body[data-design="command-core"] .pos-mod .pos-stock.ok,
body[data-design="command-core"] .pos-mod .pos-badge-ok{
  color:var(--ds-semantic-green-text);background:var(--ds-semantic-green-bg);
  border:1px solid var(--ds-semantic-green-line);
}
body[data-design="command-core"] .pos-mod .pos-stock.zero,
body[data-design="command-core"] .pos-mod .pos-badge-bad{
  color:var(--ds-semantic-red-text);background:var(--ds-semantic-red-bg);
  border:1px solid var(--ds-semantic-red-line);
}
body[data-design="command-core"] .pos-mod .pos-badge-none,
body[data-design="command-core"] .pos-mod .pos-stock:not(.ok):not(.zero){
  color:var(--ds-semantic-muted-text);background:var(--ds-semantic-muted-bg);
  border:1px solid var(--ds-semantic-muted-line);
}
html[data-theme="light"] body[data-design="command-core"] .pos-mod .pos-stock.ok,
html[data-theme="light"] body[data-design="command-core"] .pos-mod .pos-badge-ok{
  color:var(--ds-semantic-green-text);background:var(--ds-semantic-green-bg);
  border-color:var(--ds-semantic-green-line);
}
html[data-theme="light"] body[data-design="command-core"] .pos-mod .pos-stock.zero,
html[data-theme="light"] body[data-design="command-core"] .pos-mod .pos-badge-bad{
  color:var(--ds-semantic-red-text);background:var(--ds-semantic-red-bg);
  border-color:var(--ds-semantic-red-line);
}

/* Payment Calendar carries an ID scope; match it without changing sticky layout. */
body[data-design="command-core"] #finCalendar .payment-calendar{
  color:var(--ds-text);border-color:var(--ds-line);
}
body[data-design="command-core"] #finCalendar .pc-shell{
  background:var(--ds-surface);
  box-shadow:0 10px 30px color-mix(in srgb,var(--ds-shadow) 42%,transparent);
}

@media(max-width:759px){
  body[data-design="command-core"] :where(.nav-shell,.nav-content,.dash){
    width:100%;min-width:0;max-width:100%;
  }
  body[data-design="command-core"] .dash .sv-row{
    grid-template-columns:minmax(0,1fr);width:100%;min-width:0;max-width:100%;
  }
  body[data-design="command-core"] .dash .sv-row > .panel{
    width:100%;min-width:0;max-width:100%;
  }
  body[data-design="command-core"] .nav-topbar{
    width:100%;max-width:100%;min-width:0;flex-wrap:wrap;
  }
  body[data-design="command-core"] .nav-domains{
    min-width:0;max-width:100%;flex:1 1 100%;overflow-x:auto;flex-wrap:nowrap;
    overscroll-behavior-inline:contain;scrollbar-width:thin;
  }
  body[data-design="command-core"] .nav-dom{
    flex:0 0 auto;
  }
  body[data-design="command-core"] :where(.dash .sv-pill,.nav-dom,.nav-collapse-btn,.nav-editbtn,.nav-cmdk){
    min-width:44px;min-height:44px;
  }
  body[data-design="command-core"] .mtg-cal{
    width:100%;min-width:0;max-width:100%;
    overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:thin;
  }
  /* сетка календаря на узком экране не сжимается в кашу — колонки дней держат ширину,
     а горизонтально скроллится сам .mtg-cal */
  body[data-design="command-core"] :where(.mtg-head,.mtg-body){
    grid-template-columns:56px repeat(7,minmax(120px,1fr));
  }
  body[data-design="command-core"] :where(.care-shell,.care-head,.care-grid,.care-panel){
    width:100%;min-width:0;max-width:100%;
  }
  body[data-design="command-core"] .care-grid{
    grid-template-columns:minmax(0,1fr);
  }
  body[data-design="command-core"] .care-nav{
    width:100%;min-width:0;max-width:100%;overflow-x:auto;flex-wrap:nowrap;
    overscroll-behavior-inline:contain;scrollbar-width:thin;
  }
  body[data-design="command-core"] :where(.adv-command,.adv-command-hero,.adv-kpi-row,.adv-command > .panel){
    width:100%;min-width:0;max-width:100%;
  }
  body[data-design="command-core"] .adv-command-hero,
  body[data-design="command-core"] .adv-kpi-grid{
    grid-template-columns:minmax(0,1fr);
  }
  body[data-design="command-core"] :where(.adv-command-copy,.adv-head,.adv-toolbar,.adv-settings-grid){
    min-width:0;max-width:100%;
  }
  body[data-design="command-core"] .adv-table-wrap{
    max-width:100%;overflow-x:auto;
  }
  body[data-design="command-core"] :where(#advRunBtn,.adv-command .rv-send,.adv-command .rv-regen){
    min-width:44px;min-height:44px;
  }
  body[data-design="command-core"] .tcm-wrap{
    display:grid;grid-template-columns:minmax(0,1fr);
    width:100%;min-width:0;max-width:100%;
  }
  body[data-design="command-core"] :where(.tcm-left,.tcm-right){
    width:100%;min-width:0;max-width:100%;
  }
  body[data-design="command-core"] .tcm-empty{
    min-width:0;max-width:100%;padding-inline:12px;overflow-wrap:anywhere;text-align:center;
  }
}

/* Вход / смена пароля / приглашение партнёра (ТЗ 1711, 03 §3.2): форма ≤400px, обе темы */
body[data-design="command-core"].login-page{
  margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px;
  font:14px/20px var(--ds-font);
}
body[data-design="command-core"].login-page .box{
  width:100%;max-width:400px;padding:32px;border:1px solid var(--ds-line-strong);border-radius:var(--ds-radius-lg);
  color:var(--ds-text);background:var(--ds-surface);box-shadow:0 8px 24px var(--ds-shadow);
}
body[data-design="command-core"].login-page .brand{display:flex;align-items:center;gap:10px;margin-bottom:6px;text-decoration:none}
body[data-design="command-core"].login-page .brand-orbit{width:40px;height:40px}
body[data-design="command-core"].login-page h1.brand-name{font-size:23px;line-height:28px;font-weight:750;color:var(--ds-text);letter-spacing:-.3px;margin:0}
body[data-design="command-core"].login-page .sub{color:var(--ds-muted);font-size:13px;margin-bottom:22px}
body[data-design="command-core"].login-page label{display:block;color:var(--ds-muted);font-size:12px;line-height:18px;margin:14px 0 6px}
body[data-design="command-core"].login-page input{
  width:100%;height:var(--ds-field-h);padding:0 13px;font:inherit;font-size:16px;
  color:var(--ds-text);background:var(--ds-surface-soft);border:1px solid var(--ds-line-strong);border-radius:var(--ds-radius-sm);
}
body[data-design="command-core"].login-page input:focus-visible{outline:2px solid var(--ds-focus);outline-offset:2px;border-color:var(--ds-indigo)}
body[data-design="command-core"].login-page button[type="submit"]{
  width:100%;margin-top:22px;height:var(--ds-control-h-touch);border:1px solid var(--ds-edge-violet);border-radius:var(--ds-radius-sm);
  color:var(--ds-on-accent);background:linear-gradient(110deg,var(--ds-action-start),var(--ds-action-end));font:inherit;font-weight:600;cursor:pointer;
}
body[data-design="command-core"].login-page .err{
  color:var(--ds-semantic-red-text);background:var(--ds-semantic-red-bg);border:1px solid var(--ds-semantic-red-line);
  border-radius:var(--ds-radius-sm);padding:9px 12px;font-size:13px;margin-bottom:16px;
}
body[data-design="command-core"].login-page .pwd-wrap{position:relative}
body[data-design="command-core"].login-page .pwd-wrap input{padding-right:42px}
body[data-design="command-core"].login-page button.pwd-eye{
  position:absolute;right:5px;top:50%;width:32px;height:32px;margin:0;padding:0;transform:translateY(-50%);
  background:none;border:0;color:var(--ds-muted);font-size:15px;line-height:1;cursor:pointer;
}
body[data-design="command-core"].login-page button.pwd-eye:hover{color:var(--ds-text);transform:translateY(-50%)}

/* coverage:shell */
body[data-design="command-core"] :where(.nav-topbar,.nav-side,#tcBellDrop,.acct-drop){
  color:var(--ds-text);background:var(--ds-surface-raised);border-color:var(--ds-line);
}
/* header и .user-menu заливки не имеют — шапка прозрачная, цвет текста наследуется от body */
/* coverage:marketplace */
body[data-design="command-core"] :where(
  #paneMain,.rnp-grid,#paneTovary,#panePrices,#paneBundles,
  .rmn-cats,.cost-mod,.ozr-mod,#paneReviews,#paneSupplies,#paneAbtest,.ctr-form,
  #paneExcluded,#whBody,.anp-mod,.mpa-mod,.r2,.pdl-mod,.p2
){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:finance */
body[data-design="command-core"] :where(#paneFinance,.fbp-mod){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:procurement */
body[data-design="command-core"] :where(#paneProcurement){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* panel.css:11-15/29-33 задаёт --proc-input-* своим хардкодом (hex/тени) в :root и
   html[data-theme="light"] — свой мини-контракт полей закупок в обход общих --ds-* токенов
   (ТЗ 1711, задача 1711, 01 §8). Переопределяем под Neon, чтобы .proc-card-project-select,
   .proc-order-toolbar и т.п. (div/label, не <input> — общее правило body[data-design=…]
   input,select,textarea их не ловит) сравнялись с остальными полями панели. */
body[data-design="command-core"]{
  --proc-input-bg:var(--ds-surface-soft);--proc-input-border:var(--ds-line-strong);
  --proc-input-placeholder:var(--ds-faint);--proc-input-shadow:none;--proc-control-height:var(--ds-field-h);
}
/* coverage:fulfillment — поверхность вкладки «Распределение грузов» (.ff-mod). Токены --ds-* сами
   меняются по теме, поэтому одного правила хватает и в тёмной, и в светлой. */
body[data-design="command-core"] :where(.ff-mod){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:fulfillment — поверхность вкладки «Проверка счетов от ФФ» (.ffi-mod) */
body[data-design="command-core"] :where(.ffi-mod){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:fulfillment — поверхность вкладки «ФБС → Заказы» (.ffo-mod, задача 2035); свои
   акценты экрана — токены --ffo-* в ff-orders.css */
body[data-design="command-core"] :where(.ffo-mod){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:promotion; .tfx-screen — экран «Потоков трафика» (modules/traffic-flow.js) */
body[data-design="command-core"] :where(.dbx,.rpx > .panel,.bdr,.pos-mod,.tst-mod,.tfx-screen){
  color:var(--ds-text);background:var(--ds-surface);border-color:var(--ds-line);
}
/* «Неоновые русла» (traffic-flow-svg.js, карточка 3645): HTML-карточки поверх SVG-русел. Цвета —
   токены (обе темы, без сырых hex). Слой линий выше фона контейнеров, карточки — выше линий; линии
   ловят мышь только телом ленты/дуги. Движение — путники (pathLength 400) и орбита котла под
   --ds-motion-play и секцией MPDesign; «Пауза» экрана — .is-paused; reduced — движения нет.
   Фаза путника — --tfx-d (классы tfx-spark--dN): шортхенд animation иначе сбрасывал задержку
   (аудит 3689, P5). Путники склейки в фокусе (--in): к заказам — зелёный, по дуге перелива — 4,5 с. */
.tfx-stage{position:relative;font-variant-numeric:tabular-nums}
.tfx-svg{position:absolute;left:0;top:0;z-index:1;display:block;overflow:visible;pointer-events:none}
.tfx-cards{position:absolute;inset:0}
.tfx-rib{fill:var(--ds-muted);fill-opacity:.3;stroke:none;pointer-events:visibleFill;transition:fill-opacity var(--ds-motion-hover,160ms)}
.tfx-rib:hover{fill-opacity:.55}
.tfx-rib--ads{fill:var(--ds-violet)}
.tfx-rib--organic{fill:var(--ds-cyan)}
.tfx-rib--external{fill:var(--ds-amber)}
.tfx-branch{fill:none;stroke:var(--ds-cyan);stroke-opacity:.55;stroke-linecap:round}
.tfx-wire{fill:none;stroke:var(--ds-green);stroke-opacity:.65;stroke-width:2;stroke-dasharray:6 6}
.tfx-arc{fill:none;stroke:var(--ds-violet);stroke-opacity:.85;stroke-dasharray:4 4;stroke-linecap:round;pointer-events:visibleStroke}
.tfx-arc:hover{stroke-opacity:1}
.tfx-arr{fill:var(--ds-violet)}
.tfx-arc-l{fill:var(--ds-violet);font-size:10.5px;font-weight:700;pointer-events:none;paint-order:stroke;stroke:var(--ds-surface);stroke-width:3px;stroke-linejoin:round}
.tfx-rib-na{fill:none;stroke:var(--ds-muted);stroke-opacity:.45;stroke-width:1.5;stroke-dasharray:2 6;stroke-linecap:round}
.tfx-stage.no-arcs .tfx-arcs{display:none}
.tfx-spark{display:none;fill:none;stroke-width:3;stroke-linecap:round;stroke-dasharray:6 394;stroke-opacity:.95;pointer-events:none}
.tfx-spark--ads{stroke:var(--ds-violet)}
.tfx-spark--organic{stroke:var(--ds-cyan)}
.tfx-spark--external{stroke:var(--ds-amber)}
.tfx-spark--none{stroke:var(--ds-text)}
.tfx-spark--orders{stroke:var(--ds-green);stroke-dasharray:14 386}
.tfx-spark--assoc{stroke:var(--ds-violet);stroke-width:2.5;stroke-dasharray:44 356}
.tfx-anim .tfx-spark{display:inline;animation:tfx-run 7s linear infinite;animation-delay:var(--tfx-d,0s);animation-play-state:var(--ds-motion-play,running)}
.tfx-anim .tfx-spark.tfx-spark--orders{animation-duration:6s}
.tfx-anim .tfx-spark.tfx-spark--assoc{animation-duration:4.5s}
.tfx-spark--d1{--tfx-d:-1.2s}.tfx-spark--d2{--tfx-d:-2.3s}.tfx-spark--d3{--tfx-d:-3.5s}
.tfx-spark--d4{--tfx-d:-4.7s}.tfx-spark--d5{--tfx-d:-5.8s}.tfx-spark--d6{--tfx-d:-.8s}.tfx-spark--d7{--tfx-d:-2.9s}
@keyframes tfx-run{from{stroke-dashoffset:0}to{stroke-dashoffset:-400}}
.tfx-card{position:absolute;z-index:2;box-sizing:border-box;margin:0;padding:10px 14px;border:1px solid color-mix(in srgb,var(--ds-cyan) 22%,var(--ds-line));
  border-radius:var(--ds-radius-sm);background:var(--ds-surface-raised);color:var(--ds-text);font:inherit;text-align:left;cursor:pointer;overflow:hidden;
  transition:border-color var(--ds-motion-hover,160ms),box-shadow var(--ds-motion-hover,160ms)}
.tfx-card:hover{border-color:var(--ds-cyan);box-shadow:0 0 18px var(--ds-glow)}
.tfx-card:focus-visible{outline:2px solid var(--ds-cyan);outline-offset:2px}
.tfx-kick{display:block;font-size:10.5px;font-weight:650;letter-spacing:.08em;text-transform:uppercase;color:var(--ds-muted)}
.tfx-stage .tfx-sub{display:block;font-size:11.5px;color:var(--ds-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tfx-src{display:flex;flex-direction:column;justify-content:center;gap:2px;padding:8px 14px}
.tfx-src-t{display:flex;gap:8px;align-items:center;font-size:13px}
.tfx-dot{flex:none;width:8px;height:8px;border-radius:50%;background:var(--ds-muted)}
.tfx-dot--ads{background:var(--ds-violet);box-shadow:0 0 8px var(--ds-violet)}
.tfx-dot--organic{background:var(--ds-cyan);box-shadow:0 0 8px var(--ds-cyan)}
.tfx-dot--external{background:var(--ds-amber);box-shadow:0 0 8px var(--ds-amber)}
.tfx-src-v{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.tfx-src-v strong{font-size:22px;line-height:1.15}
.tfx-src-v small{color:var(--ds-muted);font-size:11.5px;white-space:nowrap}
.tfx-src.is-na{opacity:.6;border-style:dashed}
.tfx-src.is-na .tfx-src-v strong{color:var(--ds-muted)}
.tfx-src.is-warn{border-color:var(--ds-semantic-amber-line)}
.tfx-hub{position:absolute;z-index:2;display:flex;flex-direction:column;align-items:center;text-align:center;pointer-events:none}
.tfx-hub-ring{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;width:112px;height:112px;box-sizing:border-box;
  border:2px solid var(--ds-cyan);border-radius:50%;background:radial-gradient(circle,var(--ds-surface-raised) 58%,color-mix(in srgb,var(--ds-indigo) 28%,var(--ds-surface)));
  box-shadow:0 0 28px var(--ds-glow),inset 0 0 18px color-mix(in srgb,var(--ds-violet) 22%,transparent)}
.tfx-hub-ring strong{font-size:20px;line-height:1.2}
.tfx-hub-orbit{position:absolute;top:-8px;left:50%;width:128px;height:128px;margin-left:-64px;box-sizing:border-box;border:1px dashed color-mix(in srgb,var(--ds-violet) 55%,transparent);border-radius:50%}
.tfx-anim .tfx-hub-orbit{animation:dsSpin 35s linear infinite;animation-play-state:var(--ds-motion-play,running)}
.tfx-stage.is-paused :is(.tfx-spark,.tfx-hub-orbit){animation-play-state:paused}
@media (prefers-reduced-motion:reduce){.tfx-anim .tfx-spark{display:none;animation:none}.tfx-anim .tfx-hub-orbit{animation:none}}
.tfx-hub-l{margin-top:16px;font-size:13px}
.tfx-box{position:absolute;box-sizing:border-box;border:1px solid color-mix(in srgb,var(--ds-cyan) 32%,var(--ds-line));border-radius:var(--ds-radius-lg);
  background:linear-gradient(180deg,color-mix(in srgb,var(--ds-cyan) 5%,var(--ds-surface)),var(--ds-surface));box-shadow:0 0 24px color-mix(in srgb,var(--ds-cyan) 10%,transparent)}
.tfx-box::before{content:"";position:absolute;left:18px;right:18px;top:-1px;height:2px;border-radius:2px;background:linear-gradient(90deg,transparent,var(--ds-cyan),transparent)}
.tfx-card.tfx-box-h{left:0;top:0;right:0;height:66px;padding:14px 44px 10px 20px;border:0;border-radius:var(--ds-radius-lg) var(--ds-radius-lg) 0 0;background:transparent}
.tfx-box-t{display:block;font-size:17px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tfx-go{position:absolute;top:14px;right:18px;color:var(--ds-muted)}
.tfx-info{position:absolute;z-index:2}
.tfx-info strong{display:block;font-size:24px;line-height:1.25}
.tfx-sku{display:flex;gap:10px;align-items:center;padding:8px 10px}
.tfx-sku .tfx-ph{width:34px;height:40px}
.tfx-sku .tfx-ph--none{box-sizing:border-box;border:1px dashed var(--ds-line)}
.tfx-sku-txt{min-width:0}
.tfx-sku-txt b{display:block;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tfx-card.tfx-more{padding:0 12px;border-style:dashed;background:transparent;color:var(--ds-cyan);font-size:12px}
.tfx-card.tfx-rest{padding:12px 20px;border-style:dashed;border-radius:var(--ds-radius-lg)}
.tfx-res{display:grid;grid-template-columns:minmax(0,1fr) auto;align-content:center;align-items:baseline;gap:1px 8px;padding:6px 12px;
  border-color:color-mix(in srgb,var(--ds-green) 30%,var(--ds-line))}
.tfx-res-v{white-space:nowrap}
.tfx-res-v strong{font-size:22px;line-height:1.15;color:var(--ds-green)}
.tfx-res-v small{margin-left:5px;color:var(--ds-muted);font-size:11.5px}
.tfx-res-r{text-align:right;white-space:nowrap}
.tfx-res-a{color:var(--ds-violet);font-size:13px}
.tfx-res-a small{color:var(--ds-muted);font-size:11px}
.tfx-res-by{display:flex;gap:9px;font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden}
.tfx-res-n{display:inline-flex;align-items:center;gap:4px}
.tfx-res-n .tfx-dot{width:6px;height:6px;box-shadow:none}
.tfx-res-bar{grid-column:1 / -1;display:flex;height:4px;margin-top:3px;border-radius:2px;overflow:hidden;
  background:color-mix(in srgb,var(--ds-line) 70%,transparent)}
.tfx-res-seg{display:block;height:100%}
.tfx-res-seg--ads,.tfx-dr-bar-f--ads{background:var(--ds-violet)}
.tfx-res-seg--organic,.tfx-dr-bar-f--organic{background:var(--ds-cyan)}
.tfx-res-seg--external,.tfx-dr-bar-f--external{background:var(--ds-amber)}
.tfx-sub.is-warn{color:var(--ds-semantic-amber-text)}
/* Панель карточки схемы (traffic-flow-drawer.js) */
.tfx-dr-sub{margin:0 0 8px;color:var(--ds-muted)}
.tfx-dr-big{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:14px 0;border-bottom:1px solid var(--ds-line)}
.tfx-dr-big b{font-size:24px;font-variant-numeric:tabular-nums}
.tfx-dr-big--in b{color:var(--ds-cyan)}
.tfx-dr-big--out b{color:var(--ds-green)}
.tfx-dr-big--assoc b{color:var(--ds-violet)}
.tfx-dr-h{margin:18px 0 6px;font-size:13px}
.tfx-dr-pairs{margin:0;padding:0;list-style:none}
.tfx-dr-pairs li{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--ds-line);font-size:13px}
.tfx-dr-pairs b{color:var(--ds-violet);white-space:nowrap}
.tfx-dr-pv{display:flex;flex-direction:column;align-items:flex-end;flex:none}
.tfx-dr-pv small{color:var(--ds-muted);font-size:11.5px;white-space:nowrap}
.tfx-dr-tag{margin-left:6px;padding:1px 6px;border-radius:999px;border:1px solid var(--ds-line);color:var(--ds-muted);
  font-size:11px;font-style:normal;white-space:nowrap}
.tfx-dr-big span small{display:block;margin-top:2px;color:var(--ds-muted);font-size:12px}
.tfx-dr-split{margin:0;padding:0;list-style:none}
.tfx-dr-src{padding:8px 0;border-bottom:1px solid var(--ds-line)}
.tfx-dr-src-h{display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:13px}
.tfx-dr-src-h span{display:flex;align-items:center;gap:8px}
.tfx-dr-src-h b{font-size:16px;font-variant-numeric:tabular-nums}
.tfx-dr-src-h b small{margin-left:4px;color:var(--ds-muted);font-size:12px;font-weight:500}
.tfx-dr-bar{height:6px;margin:6px 0 4px;border-radius:3px;overflow:hidden;background:color-mix(in srgb,var(--ds-line) 70%,transparent)}
.tfx-dr-bar-f{display:block;height:100%;border-radius:3px}
.tfx-dr-src-s{color:var(--ds-muted);font-size:12px}
.tfx-dr-av{font-variant-numeric:tabular-nums;white-space:nowrap}
.tfx-dr-warn{margin:8px 0;padding:8px 12px;border-radius:var(--ds-radius-sm);font-size:12.5px;
  background:var(--ds-semantic-amber-bg);
  color:var(--ds-semantic-amber-text)}
.tfx-dr-cmp{width:100%;border-collapse:collapse;font-size:13px}
.tfx-dr-cmp th,.tfx-dr-cmp td{padding:7px 4px;border-bottom:1px solid var(--ds-line);text-align:left}
.tfx-dr-cmp .num{text-align:right;font-variant-numeric:tabular-nums}
.tfx-dr-cmp td .tfx-dot{display:inline-block;margin-right:8px;vertical-align:middle}
.tfx-dr-cmp tr.is-cur td{font-weight:600}
.tfx-dr-note{margin:14px 0 4px;padding:12px 14px;border:1px solid color-mix(in srgb,var(--ds-violet) 40%,var(--ds-line));border-radius:var(--ds-radius-sm);
  background:color-mix(in srgb,var(--ds-violet) 8%,var(--ds-surface));font-size:12.5px;line-height:1.5}
.tfx-dr-muted{color:var(--ds-muted);font-size:12.5px}
.tfx-dr-lines .tfx-tip-row{padding:4px 0;font-size:13px}
.tfx-dr-open{width:100%;margin-top:18px}
/* Экран «Потоков трафика» (traffic-flow.js + traffic-flow-panels.js): шапка, крошки, схема с
   прокруткой внутри блока на телефоне, таблица, подсказка. Только токены. */
.tfx-screen{position:relative}
.tfx-screen .tfx-body{display:flex;flex-direction:column;gap:16px;min-width:0}
.tfx-screen .tfx-tools{display:flex;flex-wrap:wrap;gap:10px 24px;align-items:center}
.tfx-screen .tfx-tool{display:flex;flex-wrap:wrap;gap:8px;align-items:center;min-width:0}
.tfx-screen .tfx-tool-l{font-size:12px;font-weight:600;color:var(--ds-muted)}
.tfx-screen .tfx-seg{display:inline-flex;gap:2px;padding:2px;border:1px solid var(--ds-line);border-radius:var(--ds-radius-sm);background:var(--ds-surface)}
.tfx-screen .tfx-seg button{min-height:32px;padding:0 12px;border:0;border-radius:6px;background:transparent;color:var(--ds-muted);font:inherit;font-size:13px;cursor:pointer;white-space:nowrap}
.tfx-screen .tfx-seg button:hover{background:var(--ds-hover);color:var(--ds-text)}
.tfx-screen .tfx-seg button.is-on{background:var(--ds-selected);color:var(--ds-text);font-weight:650}
.tfx-screen .tfx-dates{display:inline-flex;gap:6px;align-items:center;color:var(--ds-muted)}
.tfx-screen :is(.tfx-dates input,.tfx-cab select){min-height:34px;padding:0 10px;border:1px solid var(--ds-line);border-radius:var(--ds-radius-sm);
  background:var(--ds-surface);color:var(--ds-text);font:inherit;font-size:13px}
.tfx-screen .tfx-crumbs{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:14px;color:var(--ds-muted)}
.tfx-screen .tfx-crumbs [aria-current]{color:var(--ds-text);font-weight:650}
.tfx-screen .tfx-crumb{min-height:32px;padding:0;border:0;background:none;color:var(--ds-text);font:inherit;text-decoration:underline;cursor:pointer}
.tfx-screen .tfx-scheme{overflow-x:auto;overscroll-behavior-x:contain;padding:8px 2px}
.tfx-screen .tfx-legend{display:flex;flex-wrap:wrap;gap:4px 6px;align-items:center;margin-top:8px;padding-top:10px;border-top:1px solid var(--ds-line);font-size:12px;color:var(--ds-muted)}
.tfx-screen .tfx-legend-r{margin-left:auto}
.tfx-screen .tfx-toggle[aria-pressed="true"]{border-color:var(--ds-violet);background:var(--ds-selected);color:var(--ds-text)}
.tfx-screen .tfx-key{display:inline-block;width:10px;height:10px;margin-left:8px;border-radius:2px;background:var(--ds-muted)}
.tfx-screen .tfx-key--ads{background:var(--ds-violet)}
.tfx-screen .tfx-key--organic{background:var(--ds-cyan)}
.tfx-screen .tfx-key--assoc{width:16px;height:0;border-top:2px dashed var(--ds-violet);border-radius:0;background:none}
.tfx-screen .tfx-key--orders{border-radius:50%;background:var(--ds-green)}
.tfx-screen .tfx-key--external{background:var(--ds-amber)}
.tfx-screen .kpi-row.tfx-kpi{margin:0;grid-template-columns:repeat(7,minmax(0,1fr))}
.tfx-screen .kpi-row.tfx-kpi .kcard{min-width:0}
.tfx-screen .kpi-row.tfx-kpi .kbig{overflow-wrap:anywhere}
@media (max-width:1280px){.tfx-screen .kpi-row.tfx-kpi{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:759px){.tfx-screen .kpi-row.tfx-kpi{grid-template-columns:repeat(2,minmax(0,1fr))}}
.tfx-kpi-note{color:var(--ds-muted);font-size:11.5px}
.tfx-kpi-by{display:flex;flex-wrap:wrap;gap:2px 10px;font-size:12px;color:var(--ds-muted)}
.tfx-kpi-s{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.tfx-kpi-s .tfx-dot{width:6px;height:6px;box-shadow:none}
.tfx-kpi-s b{color:var(--ds-text);font-weight:600;font-variant-numeric:tabular-nums}
.tfx-kpi-by + .tfx-kpi-note,.tfx-kpi-note + .tfx-kpi-note{display:block;margin-top:2px}
.tfx-tbl-wrap{overflow:auto;max-height:70vh;overscroll-behavior:contain}
.tfx-tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:13px;font-variant-numeric:tabular-nums}
.tfx-tbl th{position:sticky;top:0;z-index:1;padding:8px 10px;border-bottom:1px solid var(--ds-line);background:var(--ds-surface-raised);
  color:var(--ds-muted);font-size:11.5px;font-weight:600;text-align:left;white-space:nowrap}
.tfx-tbl td{padding:8px 10px;border-bottom:1px solid var(--ds-line);color:var(--ds-text)}
.tfx-tbl .num{text-align:right;white-space:nowrap}
.tfx-tbl tbody tr:hover>td{background:var(--ds-hover)}
.tfx-sort{padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer}
.tfx-cell{display:flex;gap:10px;align-items:center;min-width:220px}
.tfx-ph{flex:none;width:28px;height:36px;border-radius:4px;object-fit:cover;background:var(--ds-surface-soft)}
.tfx-open{padding:0;border:0;background:none;color:var(--ds-text);font:inherit;font-weight:600;text-align:left;cursor:pointer}
.tfx-open:hover{text-decoration:underline}
.tfx-name small{display:block;color:var(--ds-muted);font-size:11px}
.tfx-folded{font-weight:400}
.tfx-tbl tbody tr.tfx-row--hl>td{background:var(--ds-semantic-amber-bg)}
.tfx-tbl tbody tr.tfx-row--hl>td:first-child{box-shadow:inset 3px 0 0 var(--ds-semantic-amber-line)}
.tfx-tip{position:absolute;z-index:var(--ds-z-tooltip);min-width:200px;max-width:300px;padding:10px 12px;border:1px solid var(--ds-line);
  border-radius:var(--ds-radius-sm);background:var(--ds-surface-raised);color:var(--ds-text);font-size:12.5px;pointer-events:none;
  box-shadow:0 8px 24px color-mix(in srgb,var(--ds-shadow) 50%,transparent)}
.tfx-tip b{display:block;margin:0 0 6px}
.tfx-tip-row{display:flex;justify-content:space-between;gap:12px;font-variant-numeric:tabular-nums}
.tfx-tip-row span:first-child{color:var(--ds-muted)}
.tfx-tip-note{margin-top:6px;color:var(--ds-semantic-amber-text);font-size:12px}
@media (max-width:759px){
  .tfx-screen .tfx-tools{flex-direction:column;align-items:stretch}
  .tfx-screen .tfx-seg{overflow-x:auto;max-width:100%}
}
body[data-design="command-core"] .tst-mod{
  color:var(--ds-text);background:var(--ds-canvas);
}
body[data-design="command-core"] .tst-mod .tst-card{
  background:var(--ds-surface);border-color:var(--ds-line);
  box-shadow:0 10px 28px color-mix(in srgb,var(--ds-shadow) 58%,transparent);
}
body[data-design="command-core"] .tst-mod .tst-brow{
  background:var(--ds-surface-raised);border-color:var(--ds-line);
}
body[data-design="command-core"] .tst-mod :where(.tst-tabs,.tst-cap,.tst-grp,.rc-cell,.tst-bar2){
  background:var(--ds-surface-soft);border-color:var(--ds-line);
}
/* coverage:team */
body[data-design="command-core"] :where(#paneMyTasks,.ib-mod,.ns-mod,.tkm-top,.mtg-cal,.acad-wrap,.tcm-wrap){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:knowledge */
body[data-design="command-core"] :where(.kb-wrap){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:hr */
body[data-design="command-core"] :where(
  .hr-tab,.hr-vacrow,.hr-split,.hr-org-card,.dlang .proc-subtabs
){
  color:var(--ds-text);background:var(--ds-surface);border-color:var(--ds-line);
}
/* coverage:robots */
body[data-design="command-core"] :where(.dlang .kpi-row,.srvmon,.tga,.tgs,.cfx,.care-shell,.adv-command,.ag-mod){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:assistant */
body[data-design="command-core"] :where(.pa-page,.pa-admin-page){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
body[data-design="command-core"] :where(.ai-panel){
  color:var(--ds-text);background:var(--ds-surface-raised);border-color:var(--ds-line-strong);
}
/* coverage:saas */
body[data-design="command-core"] :where(.sugg,.sclients,.vpnmod,.cabmod){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:crm */
body[data-design="command-core"] :where(.crmmod){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:train — «Роботы → Поезд интеграции»: поверхность вкладки. Одно правило на
   токенах покрывает обе темы (--ds-* сами меняются по теме) — отдельный блок под
   data-theme="light" не нужен и заводить его нельзя. */
body[data-design="command-core"] :where(.trainmod){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:settings — домен «Настройки» (бывшая админка): поверхность вкладки-раздела и
   «Обзора». Одно правило на токенах покрывает обе темы. */
body[data-design="command-core"] :where(.settings-pane,.settings-overview){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:ozon-cabinet — поверхность вкладки «Аналитика Ozon» (.ozc-mod). Токены --ds-*
   сами меняются по теме, поэтому одного правила хватает и в тёмной, и в светлой. */
body[data-design="command-core"] :where(.ozc-mod){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:auth */
body[data-design="command-core"]:where(.login-page){
  color:var(--ds-text);background:var(--ds-canvas);border-color:var(--ds-line);
}
/* coverage:overlays */
body[data-design="command-core"] :where(.modal,.drawer,.popover,.dropdown,.toast){
  color:var(--ds-text);background:var(--ds-surface-raised);border-color:var(--ds-line-strong);
}
/* coverage:btn-utility — .btn-accent/.btn-danger/.btn-ok — общие утилитарные классы кнопок,
   стиль которых исторически инжектился ТОЛЬКО модулем rnp.js (#rnpCss) в первый его рендер.
   Другие модули (tg-announce.js и т.п.) заимствуют те же классы, и без RNP в сессии кнопка
   падала на UA-стиль (ButtonFace) — в тёмной теме светлый текст сливался с ним (задача 1711,
   Task 12). Копия ЗДЕСЬ побеждает копию rnp.js в теме Neon безусловно, по специфичности
   (0,2,1) у `body[data-design="command-core"] .btn-accent` против (0,1,0) у голого
   `.btn-accent` из #rnpCss — порядок вставки в DOM тут не участвует. Копия rnp.js не мертва:
   она обслуживает легаси-тему (`?design=legacy`), где `body[data-design="command-core"]`
   не совпадает и это правило не применяется вовсе. Значения намеренно идентичны rnp.js —
   тот же токен, тот же результат, чтобы обе темы не разъезжались визуально. */
body[data-design="command-core"] :where(.btn-accent,.btn-danger,.btn-ok){
  border:0;border-radius:9px;padding:7px 15px;cursor:pointer;font-size:12.5px;font-weight:600;
  color:var(--ds-on-accent);
}
body[data-design="command-core"] .btn-accent{background:var(--ds-indigo)}
body[data-design="command-core"] .btn-danger{background:var(--ds-coral)}
body[data-design="command-core"] .btn-ok{background:var(--ds-green)}
/* coverage:robots-status — «Требуют действий» (.rsb-go): голая кнопка/ссылка без своего CSS-файла
   красилась UA-стилем (ButtonFace, не меняется по теме) — в тёмной теме текст сливался с фоном
   (задача 1711, Task 12). */
body[data-design="command-core"] .rsb-go{
  display:inline-block;color:var(--ds-indigo);background:color-mix(in srgb,var(--ds-indigo) 10%,var(--ds-surface));
  border:1px solid color-mix(in srgb,var(--ds-indigo) 40%,var(--ds-line));border-radius:var(--ds-radius-pill);
  padding:4px 12px;font:inherit;font-size:12px;font-weight:600;text-decoration:none;cursor:pointer;
}

:where(body[data-design="command-core"] :is(button,[role="button"],a):not(:disabled):not([aria-disabled="true"]):hover){
  border-color:var(--ds-cyan);transform:translateY(-1px);
}
:where(body[data-design="command-core"] :is(button,[role="button"],a):not(:disabled):not([aria-disabled="true"]):active){
  filter:brightness(.96);transform:translateY(1px);
}
:where(body[data-design="command-core"] :is(button,input,select,textarea):disabled){
  cursor:not-allowed;opacity:.52;
}
:where(body[data-design="command-core"] .ui-toast-success),
:where(body[data-design="command-core"] .ui-toast-error){
  border-left-style:solid;border-left-width:4px;
}
:where(body[data-design="command-core"] .care-loading){
  cursor:progress;font-style:italic;
}
:where(body[data-design="command-core"] .care-empty){
  font-style:italic;
}

/* Уточнение в скобках при имени KPI-плашки («Выручка (продажи - возвраты)»):
   строчными и тише основного имени, чтобы подпись влезала в одну строку.
   Живёт здесь, а не в panel.css: тот упёрся в потолок test_file_size_ratchet. */
.card .label .label-note{ text-transform:none;font-weight:400;font-size:11px;letter-spacing:0;opacity:.75; }

/* Блок «Подписки» вкладки «Агенты» (задача 1448). Живёт здесь, а не в panel.css:
   тот упёрся в потолок test_file_size_ratchet. Цвета — только токены (трещотка
   test_inline_hex_ratchet_static), состояния берут общие пилюли .st.ok/.warn/.crit. */
.ag-acc .ag-acc-h{ margin:0 0 8px; }
.ag-acc .ag-acc-tbl{ width:100%;border-collapse:collapse;margin-top:10px; }
.ag-acc .ag-acc-tbl th{ text-align:center;font-size:12px;font-weight:600;opacity:.7;
  padding:4px 8px;border-bottom:1px solid var(--border); }
.ag-acc .ag-acc-tbl td{ padding:6px 8px;border-bottom:1px solid var(--border);
  text-align:center;vertical-align:middle; }
.ag-acc .ag-acc-lanes{ display:flex;flex-wrap:wrap;gap:12px;margin-top:12px; }
.ag-acc .ag-acc-lane{ display:flex;flex-direction:column;gap:4px;font-size:12.5px;
  color:var(--muted); }
.ag-acc .ag-acc-help{ margin-top:12px; }
.ag-acc .ag-acc-help summary{ cursor:pointer;font-weight:600;font-size:13px; }
.ag-acc .ag-acc-cmd{ margin:8px 0;padding:10px;border:1px solid var(--border);
  border-radius:8px;background:var(--card);color:var(--text);font-size:12px;
  white-space:pre-wrap;overflow-x:auto; }

/* Лимиты и мастер входа (задача 5 спеки 2026-09-23-agent-subs-ui) — тот же принцип: цвета
   только токенами, состояние ячейки лимита несут общие пилюли .st.ok/.warn/.crit. */
.ag-acc .ag-acc-refresh{ display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px; }
.ag-acc-wiz-box:empty{ display:none; }
.ag-acc-wiz{ margin-top:12px;padding:12px;border:1px solid var(--border);border-radius:8px;
  background:var(--card);max-width:420px; }
.ag-acc-wiz-devcode{ font-family:monospace;font-size:26px;font-weight:700;letter-spacing:2px;
  text-align:center;margin:10px 0; }

/* Живая ссылка в пользовательском тексте (uiRichText, ui.js; задача 1856): описание задачи,
   сообщения чата задачи. Длинный адрес без пробелов переносится, а не растягивает карточку.
   Дом — здесь, а не в panel.css: тот заморожен трещоткой размера файла. */
.ui-link { color:var(--accent); text-decoration:underline; overflow-wrap:anywhere; }
.ui-link:hover { text-decoration:none; }

/* ── Оболочка W5 (профиль 09): диалоги uiConfirm/uiPrompt, тост-ошибка, «Нет доступа» ──
   Разметка — ui.js::buildDialog и nav-shell.js::_showDenied. Только токены; запасное значение
   после запятой — легаси-переменная той же роли для ?design=legacy (там --ds-* нет). */
.ui-dialog-scrim{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;padding:16px;
  background:var(--ds-overlay,var(--overlay))}
.ui-dialog{width:min(440px,100%);max-height:calc(100dvh - 32px);overflow:auto;overscroll-behavior:contain;
  background:var(--ds-surface-raised,var(--card));color:var(--ds-text,var(--text));
  border:1px solid var(--ds-line-strong,var(--border));border-radius:var(--ds-radius,12px);padding:20px 22px;
  box-shadow:0 18px 48px var(--ds-shadow,var(--shadow))}
.ui-dialog:focus{outline:none}
/* pre-line: перевод строки в тексте окна — новая строка (список правок в окне отмены из журнала заказа, И4;
   перемещения «Сводки» склада). Прочие пробелы схлопываются как раньше. */
.ui-dialog-text{margin:0 0 16px;font-size:14.5px;line-height:1.45;overflow-wrap:anywhere;white-space:pre-line}
.ui-dialog-input{display:block;width:100%;margin:0 0 16px}
.ui-dialog-acts{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end}
@media (pointer:coarse){.ui-dialog .btn{min-height:var(--ds-control-h-touch,44px)}}
body[data-design="command-core"] .ui-dialog{animation:dsPanelIn var(--ds-motion-panel) var(--ds-ease-enter) 1}
/* тост-ошибка не уходит сам — закрывается кликом или «×» (ui.js::uiToast) */
.ui-toast-x{flex:none;margin-left:4px;width:28px;height:28px;border-radius:8px;border:1px solid var(--ds-line,var(--border));
  background:transparent;color:inherit;font-size:17px;line-height:1;cursor:pointer}
.ui-toast .ui-toast-t{overflow-wrap:anywhere}
@media (pointer:coarse){.ui-toast-x{width:40px;height:40px}}
/* действие в тосте («Отменить», задача 3525) — текстовая кнопка акцентом, крупная на таче */
.ui-toast-act{flex:none;margin-left:8px;border:0;background:none;color:var(--ds-semantic-cyan-text,var(--accent));font:inherit;
  font-weight:700;padding:4px 8px;border-radius:8px;cursor:pointer}
.ui-toast-act:hover{background:var(--ds-hover,rgba(127,127,127,.12))}
@media (pointer:coarse){.ui-toast-act{min-height:40px;padding:0 12px}}
/* прямая ссылка на недоступный экран: панели прячутся, адрес остаётся тем, по которому пришли */
.nav-content.is-denied > :not(#navDenied){display:none!important}
#navDenied{max-width:760px;padding:4px 0 28px}
#navDenied[hidden]{display:none}
#navDenied:focus{outline:none}
#navDenied .nav-denied-acts{display:flex;flex-wrap:wrap;gap:10px;margin-top:14px}
@media (pointer:coarse){#navDenied .nav-denied-acts .btn{min-height:var(--ds-control-h-touch,44px)}}
/* стек тостов: ширина по содержимому, а не половина окна (left:50% ужимал плашку до ~160 px на телефоне) */
#uiToasts{width:max-content;max-width:min(520px,calc(100vw - 24px))}
.ui-toast{max-width:100%}
