/* СОБРАНО ИЗ apps/web/public/shared/zontium.html — руками не править.
   Пересборка: node scripts/фундамент-разложить.mjs
   Правки вносятся в главный файл, здесь они будут затёрты. (токены) */
/* ============================================================
   apps/web/public/shared/tokens.css
   ИСТОЧНИК ВИЗУАЛЬНЫХ ЗНАЧЕНИЙ ZONTIUM · версия 0.3 · 12.09.2026
   статус: DESIGNED CANDIDATE — утверждает владелец.
   Значения сняты с принятых макетов (a0210914, 83c62a28, 1583d50b, 65908742);
   «предложено» = носителя в макете нет, и значение без носителя живёт в файле
   ТОЛЬКО с этой пометкой (движение, flow, силуэт, hover осей, тёмные cyan/warm,
   тёмные триады accent-soft). backdrop-filter не объявлен: носителя нет, стекло
   даёт вуаль. Ярусы: --z-c-* примитив (только здесь) → --z-* смысл →
   компонентные. --owner-* — мост восьми приложений: мост меняет ЦВЕТ и НЕ меняет
   МЕТРИКУ (space/control/shadow держат сегодняшние значения дословно),
   --owner-surface/-bg/-soft непрозрачны и плоски при любом значении transparency.
   ТЕМА — по data-preference-theme; data-theme читается лишь там, где
   preference-theme не выставлен (статичный HTML): appearance.js:34 ставит
   data-theme из устаревшего ключа arena.dispatcher.appearance.v1 (:3) ПОСЛЕ
   applyOwnerPreferences, а preferences.js:75-77 — data-preference-theme и
   data-theme из zontium.owner.preferences.v2; ключи не синхронизируются, порядок
   вызовов зависит от носителя (apps/dashboard-web/public/main.js:64-65), поэтому
   пара deep_evening + data-theme="hybrid" достижима, и в ней data-theme несёт
   более старое значение. Без этого правила бумажный фон получил бы тёмное стекло
   и тёмные поля ввода. ПРАВКА ЧАСТИ А §1 (конфликт не оставляем молча,
   appearance.js не правим): абзац «Привязывать темы к data-theme» и обе пары
   селекторов А §1 заменяются на пары из этого файла. ПРАВКА ЧАСТИ А §5:
   «Mobile ≤ 640» → «≤ 767» (совпадает с В3).
   Каждый блок темы объявляет полный набор: color-scheme, ink-inverse, glass-*,
   grain-*, bloom.
   ============================================================ */

/* ---------- ЯРУС 1 · ПРИМИТИВЫ · light_horizon (по умолчанию, a0210914) ---------- */
:root{
--z-c-canvas:#E9EBEE;--z-c-bg:#FBFCFD;--z-c-bg-flat:#FBFCFD;--z-c-surface:rgba(255,255,255,.9);--z-c-surface-border:rgba(255,255,255,.9);--z-c-surface-opaque:#FFFFFF;--z-c-nested:#FFFFFF;
--z-c-rail:rgba(255,255,255,.76);--z-c-chip:rgba(255,255,255,.86);--z-c-panel:rgba(255,255,255,.96);--z-c-unproven:rgba(255,255,255,.5);
--z-c-soft:#F7F9FB;--z-c-soft-2:#EFF1F4;--z-c-soft-accent:#F2F6FD;
/* dash-strong (В4): несущий пунктир — знак, рядом с которым нет слова. Замеры:
   свет #C6CED8 1,59 · #B9C2CD 1,80 · тьма #3B4A66 1,96 · тепло #E0D5C4 1,39 —
   все ниже 3:1, поэтому такие знаки рисуются dash-strong, а не dash/dash-2. */
--z-c-line:#E2E6EB;--z-c-line-2:#DCE1E7;--z-c-line-3:#E8ECF1;--z-c-divider:#EDEFF2;--z-c-dash:#C6CED8;--z-c-dash-2:#B9C2CD;--z-c-dash-strong:#84909F;
--z-c-ink:#14243A;--z-c-ink-2:#3E4A59;--z-c-ink-3:#5A6675;--z-c-ink-4:#5A6675;--z-c-ink-inverse:#FFFFFF;--z-c-shadow-rgb:20,36,58;
/* Краски «на тёмном»: белила поверх тёмного поля. Тёмная карточка остаётся
   тёмной в любой теме — поэтому объявлены один раз и в тематических блоках
   не повторяются. Модуль со своим тёмным полем переопределяет их в профиле.
   Три ступени линии, а не одна: обводка знака (.18) и печать (.23) на тёмном
   расходятся на десять единиц по каналу — это видно, сводить нельзя. */
--z-c-ink-inverse-soft:#F2F4F7;--z-c-ink-2-inverse:rgba(255,255,255,.66);
--z-c-line-inverse:rgba(255,255,255,.12);--z-c-line-inverse-2:rgba(255,255,255,.18);--z-c-line-inverse-3:rgba(255,255,255,.23);
/* полотно 65908742: светлое — БЕЗ рамки, только тройная тень; рамка только в тёмной */
--z-c-polotno:#FBFCFD;--z-c-polotno-line:transparent;
/* стекло 65908742: вуаль — ФОН блока, три остановки 0/62/100 %, НЕ слой поверх текста.
   Цена ошибки измерена: белая вуаль .46 поверх текста роняет ink 15.63→3.55,
   ink-2 9.02→2.73, ink-3 5.85→2.29, accent 4.74→2.22 — каждая карточка мимо 4.5:1.
   Три плотности: база .46/.22/.32, приглушённая .44/.20/.30, акцентная .50/.24/.34.
   glass-flat — режим opaque: альфы нет, иначе ось не делает свою работу. */
--z-c-glass-1:rgba(255,255,255,.46);--z-c-glass-2:rgba(255,255,255,.22);--z-c-glass-3:rgba(255,255,255,.32);
--z-c-glass-1m:rgba(255,255,255,.44);--z-c-glass-2m:rgba(255,255,255,.20);--z-c-glass-3m:rgba(255,255,255,.30);
--z-c-glass-1a:rgba(255,255,255,.50);--z-c-glass-2a:rgba(255,255,255,.24);--z-c-glass-3a:rgba(255,255,255,.34);
--z-c-glass-edge:rgba(255,255,255,.62);--z-c-glass-edge-accent:rgba(14,140,168,.2);
--z-c-glass-top:rgba(255,255,255,.95);--z-c-glass-top-nested:rgba(255,255,255,.82);--z-c-glass-bottom:rgba(20,36,58,.045);
--z-c-glass-flat:#FFFFFF;--z-c-glass-flat-nested:#FFFFFF;--z-c-hairline:rgba(26,37,56,.07);
--z-c-veil-0:rgba(251,252,253,.3);--z-c-veil-1:rgba(251,252,253,.62);--z-c-veil-2:rgba(251,252,253,.88);
--z-c-blob-warm:rgba(255,226,186,.5);--z-c-blob-warm-0:rgba(255,226,186,0);
--z-c-blob-cool:rgba(190,216,255,.48);--z-c-blob-cool-0:rgba(190,216,255,0);
--z-c-blob-violet:rgba(206,198,250,.24);--z-c-blob-violet-0:rgba(206,198,250,0);
--z-c-bloom:rgba(255,255,255,.9);--z-c-bloom-0:rgba(255,255,255,0);
--z-c-route-branch:rgba(168,53,31,.5);            /* ветка «не получилось», 65908742 */
--z-grain-blend:multiply;--z-grain-opacity:.055;--z-btn-weight:500;--z-btn-weight-small:400;
/* Основная кнопка — градиент (решение владельца 13.09). Направление подобрано под
   читаемость: на светлой теме вниз, к более глубокому акценту, текст белый. Буквальный
   макет 65908742 светлел кверху (#2A80F5), но белый на нём даёт 3.81 — ниже AA. */
--z-c-btn-primary-bg:linear-gradient(180deg,var(--z-accent) 0%,var(--z-accent-active) 100%);
--z-c-btn-primary-hover:linear-gradient(180deg,var(--z-accent-hover) 0%,var(--z-accent-active) 100%);
color-scheme:light}

/* ---------- ЯРУС 1 · deep_evening (a0210914, 83c62a28, 1583d50b, 65908742) ---------- */
:root:is([data-preference-theme="deep_evening"],:not([data-preference-theme])[data-theme="dark"]){
--z-c-canvas:#080D17;--z-c-bg:#080D17;--z-c-bg-flat:#080D17;--z-c-polotno:#080D17;--z-c-polotno-line:#1B2637;
--z-c-surface:rgba(19,27,43,.9);--z-c-surface-border:#27364F;--z-c-surface-opaque:#131B2B;
--z-c-nested:rgba(13,19,32,.7);--z-c-rail:rgba(16,23,37,.82);--z-c-chip:rgba(22,31,48,.9);--z-c-panel:rgba(19,27,43,.96);--z-c-unproven:rgba(13,19,32,.5);
--z-c-soft:#1A2333;--z-c-soft-2:#1D2740;--z-c-soft-accent:#17294A;
--z-c-line:#27364F;--z-c-line-2:#37465F;--z-c-line-3:#2E3C56;--z-c-divider:#1B2637;--z-c-dash:#3B4A66;--z-c-dash-2:#4B5B74;--z-c-dash-strong:#667694;
--z-c-ink:#EDF2FA;--z-c-ink-2:#C3D0E2;--z-c-ink-3:#93A4BC;--z-c-ink-4:#9FB0C8;--z-c-ink-inverse:#08121F;--z-c-shadow-rgb:0,0,0;
--z-c-glass-1:rgba(26,37,56,.46);--z-c-glass-2:rgba(26,37,56,.22);--z-c-glass-3:rgba(26,37,56,.32);
--z-c-glass-1m:rgba(26,37,56,.44);--z-c-glass-2m:rgba(26,37,56,.20);--z-c-glass-3m:rgba(26,37,56,.30);
--z-c-glass-1a:rgba(26,37,56,.50);--z-c-glass-2a:rgba(26,37,56,.24);--z-c-glass-3a:rgba(26,37,56,.34);
--z-c-glass-edge:rgba(26,37,56,.07);--z-c-glass-edge-accent:rgba(69,200,224,.2);
--z-c-glass-top:rgba(26,37,56,.05);--z-c-glass-top-nested:rgba(26,37,56,.04);--z-c-glass-bottom:rgba(0,0,0,.35); /* глубина задаётся снизу: .35 против .045 */
--z-c-glass-flat:#131B2B;--z-c-glass-flat-nested:#0D1320;--z-c-hairline:rgba(255,255,255,.06);
--z-c-veil-0:rgba(8,13,23,.3);--z-c-veil-1:rgba(8,13,23,.62);--z-c-veil-2:rgba(8,13,23,.84);
--z-c-blob-warm:rgba(88,60,150,.34);--z-c-blob-warm-0:rgba(88,60,150,0);
--z-c-blob-cool:rgba(45,92,190,.42);--z-c-blob-cool-0:rgba(45,92,190,0);
--z-c-blob-violet:rgba(120,72,40,.3);--z-c-blob-violet-0:rgba(120,72,40,0);
--z-c-bloom:rgba(95,210,230,.2);--z-c-bloom-0:rgba(95,210,230,0);
--z-grain-blend:screen;--z-grain-opacity:.05;--z-btn-weight:600;--z-btn-weight-small:600;
/* В тёмной теме акцент светлый: белый текст на нём не проходит ни в одном из четырёх
   акцентов (1.98–3.68). Поэтому градиент идёт вверх, к светлому концу, а текст — тёмные
   чернила: контраст 5.11–11.98. Градиент есть в обеих темах, направление разное. */
--z-c-btn-primary-bg:linear-gradient(180deg,var(--z-accent-light) 0%,var(--z-accent) 100%);
--z-c-btn-primary-hover:linear-gradient(180deg,var(--z-accent-light) 0%,var(--z-accent-hover) 100%);
color-scheme:dark}

/* ---------- ЯРУС 1 · warm_focus (a0210914; hybrid — псевдоним, не своя палитра) ---------- */
:root:is([data-preference-theme="warm_focus"],:not([data-preference-theme])[data-theme="hybrid"]){
--z-c-canvas:#EDE6DA;--z-c-bg:#F7F2EA;--z-c-bg-flat:#F7F2EA;--z-c-polotno:#F7F2EA;--z-c-polotno-line:transparent;
--z-c-surface:rgba(253,250,246,.9);--z-c-surface-border:rgba(253,250,246,.9);--z-c-surface-opaque:#FDFAF6;
--z-c-nested:#FDFAF6;--z-c-rail:rgba(253,250,246,.76);--z-c-chip:rgba(253,250,246,.86);--z-c-panel:rgba(253,250,246,.96);--z-c-unproven:rgba(253,250,246,.5);
--z-c-soft:#F1EADF;--z-c-soft-2:#EAE1D3;--z-c-soft-accent:#EEE7F8;
--z-c-line:#EAE1D3;--z-c-line-2:#E0D5C4;--z-c-line-3:#EFE8DC;--z-c-divider:#EFE8DC;--z-c-dash:#E0D5C4;--z-c-dash-2:#D6C9B5;--z-c-dash-strong:#948468;
--z-c-ink:#2A2218;--z-c-ink-2:#4A4033;--z-c-ink-3:#6B5E4C;--z-c-ink-4:#6B5E4C;--z-c-ink-inverse:#FFFFFF;--z-c-shadow-rgb:42,34,24;
--z-c-glass-1:rgba(253,250,246,.46);--z-c-glass-2:rgba(253,250,246,.22);--z-c-glass-3:rgba(253,250,246,.32);
--z-c-glass-1m:rgba(253,250,246,.44);--z-c-glass-2m:rgba(253,250,246,.20);--z-c-glass-3m:rgba(253,250,246,.30);
--z-c-glass-1a:rgba(253,250,246,.50);--z-c-glass-2a:rgba(253,250,246,.24);--z-c-glass-3a:rgba(253,250,246,.34);
--z-c-glass-edge:rgba(253,250,246,.62);--z-c-glass-edge-accent:rgba(107,79,208,.2);
--z-c-glass-flat:#FDFAF6;--z-c-glass-flat-nested:#FDFAF6;
--z-c-blob-warm:rgba(232,202,158,.6);--z-c-blob-warm-0:rgba(232,202,158,0);
--z-c-blob-cool:rgba(206,192,236,.46);--z-c-blob-cool-0:rgba(206,192,236,0);
--z-c-blob-violet:rgba(206,192,236,.2);--z-c-blob-violet-0:rgba(206,192,236,0);
--z-c-veil-0:rgba(247,242,234,.3);--z-c-veil-1:rgba(247,242,234,.62);--z-c-veil-2:rgba(247,242,234,.88);
color-scheme:light}

/* ---------- ЯРУС 2 · СМЫСЛ ---------- */
:root{
--z-canvas:var(--z-c-canvas);--z-polotno:var(--z-c-polotno);--z-polotno-line:var(--z-c-polotno-line);
--z-surface:var(--z-c-surface);--z-surface-border:var(--z-c-surface-border);--z-surface-opaque:var(--z-c-surface-opaque);--z-nested:var(--z-c-nested);--z-rail:var(--z-c-rail);--z-chip:var(--z-c-chip);--z-panel:var(--z-c-panel);--z-unproven:var(--z-c-unproven);
--z-soft:var(--z-c-soft);--z-soft-2:var(--z-c-soft-2);--z-soft-accent:var(--z-c-soft-accent);
--z-line:var(--z-c-line);--z-line-2:var(--z-c-line-2);--z-line-3:var(--z-c-line-3);--z-divider:var(--z-c-divider);--z-dash:var(--z-c-dash);--z-dash-2:var(--z-c-dash-2);--z-dash-strong:var(--z-c-dash-strong);
--z-ink:var(--z-c-ink);--z-ink-2:var(--z-c-ink-2);--z-ink-3:var(--z-c-ink-3);--z-ink-4:var(--z-c-ink-4);--z-ink-inverse:var(--z-c-ink-inverse);--z-hairline:var(--z-c-hairline);
--z-ink-inverse-soft:var(--z-c-ink-inverse-soft);--z-ink-2-inverse:var(--z-c-ink-2-inverse);
--z-line-inverse:var(--z-c-line-inverse);--z-line-inverse-2:var(--z-c-line-inverse-2);--z-line-inverse-3:var(--z-c-line-inverse-3);
/* акцент по умолчанию blue; ось accent — ниже. Прозрачность через color-mix:
   спутник --z-accent-rgb из производного цвета не выводится и живёт только
   мостом к --owner-accent-rgb (product-shell.css:23, redirect-web:12,20, nomen-web). */
--z-accent:#1B6BF0;--z-accent-hover:#114FBB;--z-accent-rgb:27,107,240;--z-accent-on:var(--z-c-ink-inverse);
--z-accent-active:oklch(from var(--z-accent) calc(l - .10) c h);
--z-accent-light:oklch(from var(--z-accent) calc(l + .18) calc(c * .9) h);
/* акцентная заливка — общий смысл, а не собственность кнопки: ею красятся и
   кнопка, и аватар, поэтому перекраска одной не тянет за собой другую. */
--z-accent-fill:var(--z-c-btn-primary-bg);--z-accent-fill-hover:var(--z-c-btn-primary-hover);
--z-btn-primary-bg:var(--z-accent-fill);--z-btn-primary-hover:var(--z-accent-fill-hover);
--z-glass-flat-x:var(--z-c-glass-flat);
--z-accent-ink:var(--z-accent-active);   /* акцент, годный как текст: на светлом — глубже заливки */
--z-accent-a04:color-mix(in srgb,var(--z-accent) 4%,transparent);--z-accent-a06:color-mix(in srgb,var(--z-accent) 6%,transparent);
--z-accent-a08:color-mix(in srgb,var(--z-accent) 8%,transparent);--z-accent-a12:color-mix(in srgb,var(--z-accent) 12%,transparent);
--z-accent-a10:color-mix(in srgb,var(--z-accent) 10%,transparent);--z-accent-a14:color-mix(in srgb,var(--z-accent) 14%,transparent);
--z-accent-a18:color-mix(in srgb,var(--z-accent) 18%,transparent);--z-accent-a28:color-mix(in srgb,var(--z-accent) 28%,transparent);
--z-accent-a45:color-mix(in srgb,var(--z-accent) 45%,transparent);--z-accent-a80:color-mix(in srgb,var(--z-accent) 80%,transparent);
--z-accent-soft:#E7F0FE;--z-accent-soft-line:#CFE0FC;--z-accent-selected-bg:#FBFDFF;
--z-focus-ring:var(--z-accent);   /* В4: фокус имеет собственный токен, не наследует акцент молча */
/* четыре уровня (§6, a0210914: цвет начинается с результата) */
--z-level-completion:#5A6675;--z-level-completion-soft:#EFF1F4;--z-level-completion-ink:#3E4A59;--z-level-completion-line:#DEE3EA;
--z-level-result:#1F6B44;--z-level-result-soft:#E6F4EC;--z-level-result-line:#CADFD2;--z-level-result-tile:#C9E5D5;--z-level-result-bg:#F1F8F4;--z-level-result-ink:#1F6B44;
--z-level-success:#4A3596;--z-level-success-soft:#F3EEFD;--z-level-success-line:#DFD3F8;--z-level-success-ink:#4A3596;
--z-level-value:#8A6A18;--z-level-value-soft:#FBF4E4;--z-level-value-line:#EDDCBE;--z-level-value-ink:#8A6A18; /* охра уровня ≠ янтарь состояний #8A4A12 */
/* состояния работы (ink · line · soft · dot) */
--z-state-pending-ink:#8A4A12;--z-state-pending-line:#E8D3B4;--z-state-pending-line-2:#F0DCBE;--z-state-pending-soft:#FDF4E8;--z-state-pending-dot:#C67E1C;
--z-state-blocker-ink:#A8351F;--z-state-blocker-line:#EACAC6;--z-state-blocker-soft:#FCF1EF;
--z-state-conflict-ink:#9B2F5E;--z-state-conflict-line:#EBC6D5;--z-state-conflict-soft:#FCF0F5;--z-state-conflict-dot:#9B2F5E;
--z-state-recommend-ink:#4A3596;--z-state-recommend-line:#9A8BD0;--z-state-recommend-soft:#FAF8FF;--z-state-recommend-text:#2E2A4A;--z-state-recommend-note:#4A4560;
--z-state-alt-line:#6B4FD0;--z-state-alt-ink:#4A3596;
--z-state-critical-soft:#FFFBF6;--z-state-critical-soft-2:#FFFBF4;--z-state-critical-line:#E8D3B4; /* 1583d50b: карточка #FFFBF6/#E8D3B4, полоса #FFFBF4/#F0DCBE */
--z-state-failed-ink:#A8351F;--z-state-failed-soft:#FCF1EF;
--z-danger:#A8351F;--z-danger-on:#FFFFFF;
--z-health-ok:#1F6B44;--z-health-degraded:#C67E1C;--z-health-denied:#9B2F5E; /* «недоступно» — не заливка, а полый пунктир dash-strong */
--z-honest-line:var(--z-dash);--z-honest-ink:var(--z-ink-3);
/* обратимость: a0210914 расходится сам с собой — «обратимо с усилием» #8A4A12 (l.290)
   и #A8351F (l.340); 83c62a28 и 1583d50b дают #A8351F. Берём #A8351F, расхождение открыто. */
--z-rev-ok:var(--z-level-result-ink);--z-rev-effort:var(--z-state-blocker-ink);--z-rev-no:var(--z-state-blocker-ink);
/* плитки иконок 155deg (65908742) */
--z-tile-angle:155deg;
--z-tile-green-0:#EAF6EE;--z-tile-green-1:#D6EBDE;--z-tile-green-line:rgba(202,223,210,.95);
--z-tile-cyan-0:#EAF3F6;--z-tile-cyan-1:#D5E7ED;--z-tile-cyan-line:rgba(213,231,237,.95);
--z-tile-amber-0:#FDF3E6;--z-tile-amber-1:#F7E4C9;--z-tile-amber-line:rgba(239,220,188,.95);
--z-tile-rose-0:#FDEEEA;--z-tile-rose-1:#F6D4CA;--z-tile-rose-line:rgba(235,205,198,.95);
--z-tile-pink-0:#FBF0F7;--z-tile-pink-1:#F2DDEB;--z-tile-pink-line:rgba(242,221,235,.95);
--z-tile-grey-0:#F4F6F9;--z-tile-grey-1:#E5EAF1;--z-tile-grey-line:rgba(219,224,230,.95);
--z-tile-white-0:#FFFFFF;--z-tile-white-1:#F3FAF6;--z-tile-solid-0:#3D9E6B;--z-tile-solid-1:#1F6B44;--z-tile-solid-ring:rgba(255,255,255,.35);
--z-tile-glow-cyan:0 8px 18px -12px rgba(14,140,168,.5);--z-tile-glow-blue:0 8px 18px -12px rgba(27,107,240,.5);
--z-tile-glow-violet:0 8px 18px -12px rgba(90,80,180,.44);--z-tile-glow-neutral:0 8px 18px -12px rgba(20,36,58,.32);--z-tile-glow-small:0 6px 14px -10px rgba(14,140,168,.5);
/* маршрут. ВНИМАНИЕ: 14/10/6 и «6 30» — из SVG-заглушки бандлера 65908742
   (#__bundler_thumbnail), не из макета. Реальные значения ниже. */
--z-route-done-0:#2F8F5F;--z-route-done-mid:#2C86A0;--z-route-done-1:#0E8CA8;
--z-route-halo-0:rgba(127,195,160,.38);--z-route-halo-mid:rgba(127,199,220,.45);--z-route-halo-1:var(--z-accent-a28);
--z-route-ahead-0:#A7B5C7;--z-route-ahead-1:rgba(197,208,222,.22);   /* дальний конец растворяется: предстоящее не обещано. в тёмной qAhead/qHalo НЕ перекрашены */
--z-route-compact-done:#1F6B44;--z-route-compact-ahead:#C6CED8;--z-route-compact-alt:#6B4FD0;
--z-route-w-halo:13;--z-route-w-halo-ahead:10;--z-route-halo-op:.55;
--z-route-w-done-1:4;--z-route-w-done-2:5;--z-route-w-ahead-1:5;--z-route-w-ahead-2:4;
--z-route-w-halo-c:11;--z-route-w-halo-ahead-c:9;--z-route-w-done-1c:2;--z-route-w-done-2c:3.2;--z-route-w-ahead-1c:2.4;--z-route-w-ahead-2c:1.6;
--z-route-w-compact:2.5;--z-route-w-flow:3;           /* flow — предложено */
--z-route-dash-ahead-1:1 10;--z-route-dash-ahead-2:1 12;--z-route-dash-ahead:2 7;--z-route-dash-alt:1 6;--z-route-dash-flow:3 54; /* flow — предложено */
--z-route-branch-w:2px;--z-route-branch-r:14px;--z-route-branch-line:var(--z-c-route-branch);
--z-link-affects:#1F6B44;--z-link-depends:#1B6BF0;--z-link-amplifies:#6B4FD0;--z-link-risk:#B4600F;--z-link-ahead:#C6CED8;
/* Связь как маршрут: та же плавная кривая, что и у пути, только тоньше и
   пунктиром. Точка у начала показывает, ОТКУДА связь, а не просто что она есть. */
--z-link-w:1.6;--z-link-dash:3 7;--z-link-dot:5px;--z-link-op:.85;
/* Ленты-потоки. Цвет растягивается вдоль ленты и к узлу выцветает: у истока
   работы много, у слияния она уже почти вошла в общий путь. Прозрачность
   нужна, чтобы перекрытие лент читалось как наложение, а не как загораживание. */
--z-flow-plan-0:rgba(122,199,160,.55);--z-flow-plan-1:rgba(140,205,175,.42);
--z-flow-risk-0:rgba(232,170,90,.55);--z-flow-risk-1:rgba(236,186,128,.42);
--z-flow-alt-0:rgba(155,132,245,.44);--z-flow-alt-1:rgba(176,158,247,.38);
--z-flow-forecast-0:rgba(160,190,225,.36);--z-flow-forecast-1:rgba(186,207,232,.3);
/* Линза: способ показать одно главное и сравнить ожидалось с полученным.
   Не карточка — у неё нет углов и нет рамки, она читается как объектив. */
--z-lens-bg:radial-gradient(60% 70% at 50% 45%,var(--z-c-glass-top) 0%,transparent 72%);
--z-lens-ring:inset 0 0 0 1px var(--z-hairline);
--z-lens-glow:0 26px 60px -30px rgba(20,36,58,.22),0 0 90px -40px rgba(90,150,235,.35);
--z-lens-inner:560px;--z-lens-sign:56px;--z-lens-h:420px;--z-fs-lens:calc(46px*var(--z-fu));
--z-link-depends-ink:var(--z-accent-ink);--z-link-affects-ink:var(--z-level-result-ink);
--z-link-amplifies-ink:var(--z-level-success-ink);--z-link-risk-ink:var(--z-state-pending-ink);
--z-link-ahead-ink:var(--z-ink-3);
/* Температура срока. Предмет не ждёт, пока на него посмотрят: чем ближе срок,
   тем теплее плашка. Четыре ступени, значения взяты из состояний — новой
   палитры не заводим, заводим новый СМЫСЛ поверх старых цветов. */
--z-heat-calm-ink:var(--z-ink-3);--z-heat-calm-line:var(--z-line);--z-heat-calm-soft:transparent;--z-heat-calm-dot:var(--z-dash-strong);
--z-heat-soon-ink:var(--z-state-pending-ink);--z-heat-soon-line:var(--z-state-pending-line);--z-heat-soon-soft:var(--z-state-pending-soft);--z-heat-soon-dot:var(--z-state-pending-dot);
--z-heat-now-ink:var(--z-state-blocker-ink);--z-heat-now-line:var(--z-state-blocker-line);--z-heat-now-soft:var(--z-state-blocker-soft);--z-heat-now-dot:var(--z-state-failed-ink);
--z-heat-over-ink:var(--z-state-failed-ink);--z-heat-over-line:var(--z-state-blocker-line);--z-heat-over-soft:var(--z-state-failed-soft);--z-heat-over-dot:var(--z-state-failed-ink);
--z-heat-glow-now:0 0 0 4px color-mix(in srgb,var(--z-state-blocker-ink) 10%,transparent);
--z-heat-glow-peak:0 0 0 7px color-mix(in srgb,var(--z-state-blocker-ink) 6%,transparent);
--z-heat-bar-w:3px;--z-dur-heat:3.2s;
/* Подсветка сцены и подтемнение соседей: смотреть надо в одно место. */
--z-bloom-scene:radial-gradient(46% 58% at 52% 76%,var(--z-accent-a10) 0%,transparent 72%);
--z-bloom-scene-warm:radial-gradient(52% 62% at 24% 84%,var(--z-state-pending-soft) 0%,transparent 70%);
--z-dim-op:.42;--z-dim-sat:.65;--z-dur-dim:420ms;
/* тени и кромки */
--z-shadow-none:0 0 0 0 transparent;                    /* «none» в списке из трёх убило бы всю декларацию */
--z-shadow-contact:0 1px 2px rgba(var(--z-c-shadow-rgb),.05);--z-shadow-contact-soft:0 1px 1px rgba(var(--z-c-shadow-rgb),.04);
--z-shadow-card:0 14px 34px -26px rgba(var(--z-c-shadow-rgb),.26);
--z-shadow-raised:0 18px 44px -26px rgba(var(--z-c-shadow-rgb),.28);
--z-shadow-far:0 30px 64px -30px rgba(var(--z-c-shadow-rgb),.34);
--z-shadow-panel:0 30px 64px -32px rgba(var(--z-c-shadow-rgb),.3);
--z-shadow-frame:0 34px 70px -34px rgba(var(--z-c-shadow-rgb),.26);
--z-shadow-polotno:0 1px 2px rgba(var(--z-c-shadow-rgb),.10),0 18px 36px -18px rgba(var(--z-c-shadow-rgb),.22),0 60px 110px -50px rgba(var(--z-c-shadow-rgb),.34);
--z-shadow-node-active:0 12px 26px -10px var(--z-accent-a80);
--z-ring-done:0 0 0 5px rgba(47,143,95,.10);--z-ring-plan:0 0 0 5px rgba(20,36,58,.035);
--z-ring-current:0 0 0 8px var(--z-accent-a14),0 0 0 17px var(--z-accent-a06);
--z-ring-selected:0 0 0 2px var(--z-surface-opaque),0 0 0 4px var(--z-accent); /* «выбран», не «в фокусе»; разрыв берёт поверхность, а не фон: элемент стоит на карточке (В4) */
--z-glass-top:inset 0 1px 0 var(--z-c-glass-top);--z-glass-top-nested:inset 0 1px 0 var(--z-c-glass-top-nested);--z-glass-bottom:inset 0 -1px 0 var(--z-c-glass-bottom);
--z-glass-edge:var(--z-c-glass-edge);--z-glass-edge-accent:var(--z-c-glass-edge-accent);
--z-glass-body:linear-gradient(168deg,var(--z-c-glass-1) 0%,var(--z-c-glass-2) 62%,var(--z-c-glass-3) 100%);
--z-glass-body-muted:linear-gradient(168deg,var(--z-c-glass-1m) 0%,var(--z-c-glass-2m) 62%,var(--z-c-glass-3m) 100%);
--z-glass-body-accent:linear-gradient(168deg,var(--z-c-glass-1a) 0%,var(--z-c-glass-2a) 62%,var(--z-c-glass-3a) 100%);
/* живой фон — форма экранов A/F; mobile: три пятна и без блика */
--z-bg-layer-1:radial-gradient(54% 44% at 16% 86%,var(--z-c-blob-warm) 0%,var(--z-c-blob-warm-0) 62%),radial-gradient(50% 42% at 86% 14%,var(--z-c-blob-cool) 0%,var(--z-c-blob-cool-0) 64%);
--z-bg-layer-2:radial-gradient(40% 32% at 62% 54%,var(--z-c-blob-violet) 0%,var(--z-c-blob-violet-0) 66%);
--z-bg-veil:linear-gradient(180deg,var(--z-c-veil-0) 0%,var(--z-c-veil-1) 58%,var(--z-c-veil-2) 100%);
--z-bg-bloom:radial-gradient(38% 40% at 80% 10%,var(--z-c-bloom) 0%,var(--z-c-bloom-0) 100%);
/* Пятна фона: два цветных облака, которыми модуль подкрашивает полотно под
   свой вид. Геометрию пятна задаёт сам экран — здесь только краска. */
--z-bg-blob-1:var(--z-c-blob-cool);--z-bg-blob-2:var(--z-c-blob-warm);
/* Картинка на фоне. Носитель ставит --z-bg-photo:url(…) — и слой появляется;
   значение none означает «картинки нет», а не «выключено». Ось background в
   значении plain прячет картинку: человек выбрал ровный фон.
   Вуаль обязательна: без неё текст на фотографии не проходит норму ни в одной
   теме, а проверить контраст на произвольной картинке нельзя. Вуаль
   непрозрачна настолько, чтобы держать AA при любой подложке. */
--z-bg-photo:none;--z-bg-photo-size:cover;--z-bg-photo-pos:center;
/* Образец темы. Карточка выбора показывает, КАК выглядит тема, поэтому её
   краски не зависят от текущей и в тематических блоках не переопределяются:
   иначе образец светлой темы темнеет вместе с интерфейсом и выбирать нечего.
   Это единственное место в словаре, где значение намеренно неподвижно. */
--z-theme-sample-light-bg:#FFFFFF;--z-theme-sample-light-rail:#F1F5F9;--z-theme-sample-light-panel:#FFFFFF;--z-theme-sample-light-mark:#2563EB;
--z-theme-sample-dark-bg:#0B1120;--z-theme-sample-dark-rail:#0B1120;--z-theme-sample-dark-panel:#111827;--z-theme-sample-dark-line:#263244;--z-theme-sample-dark-mark:#3B82F6;
--z-theme-sample-hybrid-bg:#071A2F;--z-theme-sample-hybrid-rail:#0D1930;--z-theme-sample-hybrid-panel:#102A43;--z-theme-sample-hybrid-line:#234B68;--z-theme-sample-hybrid-mark:#5B9DFF;
/* Те же три темы, показанные полосой перехода: витрина WorkOS рисует их не
   плиткой, а карточкой с градиентом и подписью. Значения неподвижны по той же
   причине — образец обязан выглядеть как его тема, а не как текущая. */
--z-theme-sample-light-gradient:linear-gradient(160deg,#fff,#f5f9ff);--z-theme-sample-light-ink:#102440;
--z-theme-sample-dark-gradient:linear-gradient(160deg,#102440,#061528);--z-theme-sample-dark-ink:#eef7ff;
--z-theme-sample-warm-gradient:linear-gradient(160deg,#fffdf9,#f5e9d9);--z-theme-sample-warm-ink:#302d37;
--z-bg-photo-op:1;--z-bg-photo-blur:0px;
--z-bg-photo-veil:linear-gradient(180deg,rgba(251,252,253,.78) 0%,rgba(251,252,253,.82) 100%);
--z-photo:none;--z-photo-size:cover;--z-photo-pos:center;--z-photo-op:1;
--z-photo-veil:linear-gradient(180deg,rgba(255,255,255,.14) 0%,rgba(255,255,255,.4) 100%);
--z-bg-drift-1:34s;--z-bg-drift-2:44s;--z-bg-bloom-dur:22s;--z-bg-blur:24px;
--z-grain:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='300'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.68' numOctaves='4' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/><feComponentTransfer><feFuncA type='linear' slope='3.4' intercept='-.5'/></feComponentTransfer></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
/* типографика: IBM Plex Sans — речь, IBM Plex Mono — время, суммы, уверенность */
--z-font-sans:"IBM Plex Sans","Segoe UI",system-ui,sans-serif;
--z-font-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
--z-fu:var(--owner-font-scale);
--z-fs-screen:calc(36px*var(--z-fu));--z-fs-goal:calc(30px*var(--z-fu));--z-fs-h2:calc(27px*var(--z-fu));--z-fs-decision:calc(22px*var(--z-fu));
--z-fs-shell:calc(20px*var(--z-fu));--z-fs-question:calc(19px*var(--z-fu));--z-fs-claim:calc(16px*var(--z-fu));--z-fs-15-5:calc(15.5px*var(--z-fu));--z-fs-15:calc(15px*var(--z-fu));
--z-fs-14-5:calc(14.5px*var(--z-fu));--z-fs-body:calc(14px*var(--z-fu));--z-fs-13-5:calc(13.5px*var(--z-fu));--z-fs-13:calc(13px*var(--z-fu));
--z-fs-12-5:calc(12.5px*var(--z-fu));--z-fs-12:calc(12px*var(--z-fu));--z-fs-11-5:calc(11.5px*var(--z-fu));--z-fs-11:calc(11px*var(--z-fu));--z-fs-eyebrow:calc(10.5px*var(--z-fu));
--z-lh-tight:1.14;--z-lh-h2:1.24;--z-lh-title:1.3;--z-lh-card-title:1.35;--z-lh-text:1.45;--z-lh-body:1.55;--z-lh-long:1.64;
--z-ls-screen:-.025em;--z-ls-goal:-.028em;--z-ls-h2:-.026em;--z-ls-decision:-.022em;--z-ls-title:-.02em;--z-ls-row:-.012em;--z-ls-num:-.03em;--z-ls-eyebrow:.13em;--z-ls-mono-eyebrow:.14em;
/* геометрия. --z-hit — минимальная цель указателя (В4); --z-control-small — высота
   малой кнопки, она не константа: comfortable 36, compact 32, ≤767 — 44. */
/* Четыре шкалы, которых не было: вес шрифта стоял числом в 28 местах,
   ширина рамки в 66, непрозрачность в 7, а точки останова разъехались на
   шесть значений (472 · 520 · 620 · 640 · 767 · 900). Точки останова живут
   здесь как запись решения: подставить их в @media нельзя, var() в условие
   не пускает, но единственное место, где они названы, теперь есть. */
/* Состояния взаимодействия. Наведение приподнимает, нажатие опускает, отказ
   гасит. Значения одни на всю систему: иначе каждая кнопка поедет по-своему. */
--z-hover-lift:-1px;--z-press-shift:1px;--z-hover-wash:var(--z-accent-a06);
--z-hover-line:var(--z-accent-soft-line);--z-busy-op:.7;
/* Длинный текст. Сколько строк оставляем, прежде чем оборвать многоточием. */
--z-clamp-1:1;--z-clamp-2:2;--z-clamp-3:3;
/* Липкость. Отступ сверху равен высоте шапки, иначе липкая строка её накроет. */
--z-sticky-top:0px;--z-sticky-z:30;   /* экран с закреплённой шапкой ставит свой отступ */
/* Высота сцены маршрута: широкий экран и узкий. */
--z-route-h:300px;--z-route-h-narrow:460px;
--z-fw-regular:400;--z-fw-medium:500;--z-fw-semibold:600;--z-fw-bold:700;
--z-op-full:1;--z-op-muted:.72;--z-op-ghost:.55;--z-op-disabled:.45;
--z-bw-hair:1px;--z-bw-1:1.5px;--z-bw-2:2px;--z-bw-3:3px;
--z-bp-mobile:767px;--z-bp-tablet:900px;--z-bp-wide:1280px;
--z-space-1:4px;--z-space-2:8px;--z-space-3:12px;--z-space-4:16px;--z-space-5:20px;--z-space-6:26px;--z-space-7:32px;--z-space-8:40px;--z-space-9:48px;--z-space-10:64px;
--z-space:20px;--z-control:40px;--z-control-small:36px;--z-hit:24px;--z-row:72px;--z-row-compact:42px;--z-polotno-pad:18px;--z-control-mobile:44px;
--z-r-2:2px;--z-r-3:3px;--z-r-4:4px;--z-r-5:5px;--z-r-6:6px;--z-r-7:7px;--z-r-8:8px;--z-r-9:9px;--z-r-10:10px;--z-r-11:11px;--z-r-12:12px;--z-r-13:13px;--z-r-14:14px;--z-r-15:15px;--z-r-16:16px;--z-r-18:18px;--z-r-22:22px;--z-r-24:24px;--z-r-26:26px;--z-r-pill:999px;
--z-rail-w:60px;--z-header-h:60px;--z-aside-w:336px;--z-panel-w:420px;--z-aside-w-fin:340px;--z-container:1560px;
/* --z-panel-w НЕ объявлен: 420 источником не подтверждается (В2). Ширина панели —
   min(92vw,38rem) в components.css через фолбэк var(--z-panel-w,38rem); точное
   число вносит владелец одной строкой, и тогда токен появляется здесь. */
--z-page-pad:32px;--z-content-pad:26px;--z-col-gap:18px;
/* Раскладка приложения с боковой колонкой: ширина колонки, высота строки,
   поля полотна и карточки, размер плотного управления. Это не палитра, а
   размеры, и меняются они по состояниям и ширине окна — поэтому объявления
   остаются в экране, а имя принадлежит словарю. */
--z-spine-w:264px;--z-row-h:44px;--z-pad-main:24px;--z-pad-card:18px;
--z-control-compact:34px;--z-r-20:20px;--z-r-pill:999px;
--z-card-outline:1px solid var(--z-line);
/* Среда, в которой открыт экран: свой оттенок, своё дыхание, своя виньетка.
   Это доменное понятие диспетчера — «на каком контуре я работаю», — и в
   словаре оно нейтрально: цвет среды по умолчанию равен акценту. */
--z-env-tint:27,107,240;--z-env-motion:6s;--z-env-pulse:6s;--z-env-vignette:transparent;
--z-workspace-accent-rgb:var(--z-accent-rgb);
--z-node:26px;--z-node-30:30px;--z-node-34:34px;--z-node-38:38px;--z-node-44:44px;--z-node-56:56px;--z-node-active:40px;--z-node-dot:12px;--z-node-dot-plan:7px;--z-node-mobile:20px; /* узла 32 нет */
--z-tile-22:22px;--z-tile-26:26px;--z-tile-30:30px;--z-tile-32:32px;--z-tile-34:34px;--z-tile-36:36px;--z-tile-40:40px;--z-tile-44:44px;--z-tile-54:54px;--z-tile-56:56px;
--z-icon-16:16px;--z-icon-17:17px;--z-icon-19:19px;--z-icon-20:20px;--z-icon-22:22px;--z-icon-26:26px;--z-icon-stroke:1.75;
--z-avatar-28:28px;--z-avatar-34:34px;--z-avatar-36:36px;--z-avatar-44:44px;
--z-dot-7:7px;--z-dot-9:9px;--z-dot-12:12px;--z-radio:19px;--z-level-square:12px;
--z-option-name-w:196px;--z-option-rev-w:132px;--z-option-tail-w:110px;--z-row-title-w:216px;--z-fact-label-w:110px;
/* движение (предложено) */
--z-dur-1:160ms;--z-dur-2:220ms;--z-dur-3:320ms;--z-dur-draw:900ms;--z-dur-breathe:2.4s;--z-dur-flow:1.4s;--z-ease:cubic-bezier(.2,.7,.2,1);
--z-z-silhouette:-1;--z-z-polotno:1;--z-z-card:10;--z-z-sticky:20;--z-z-drawer:100;--z-z-popover:200;--z-z-toast:300; /* силуэт — предложено */
font-family:var(--z-font-sans)}

/* ---------- ЯРУС 3 · РУЧКИ КОМПОНЕНТОВ ----------
   ПРАВИЛО. Цвет, фон, обводка и тень внутри правила ОДНОГО компонента берутся
   только через --z-<компонент>-*. Интервалы, типографика, радиусы и длительности
   остаются смысловыми: они общие по замыслу. Исключение одно — правило, чей
   селектор называет несколько семейств (:where(.z-btn,.z-option,…)), берёт общий
   смысловой токен: у такого правила нет одного хозяина.
   По умолчанию ручка равна смысловому токену, поэтому вид не меняется, а темы
   продолжают работать сами: var() разрешается на элементе, а не здесь.
   ЗАЧЕМ. Это то, чем модуль перекрашивает свою кнопку, не задевая ссылки,
   прогресс и ползунок. Модуль переопределяет названные ручки и не заводит своих
   имён.
   ИМЕНА. В --z-node-* и --z-option-* числовые суффиксы уже заняты размерами
   (--z-node-38, --z-option-name-w). Поэтому цветовая ручка ВСЕГДА несёт роль:
   bg · ink · line · shadow. */
:root{
/* кнопка */
--z-btn-line:transparent;
--z-btn-primary-ink:var(--z-accent-on);--z-btn-primary-active:var(--z-accent-active);
--z-btn-secondary-bg:var(--z-surface);--z-btn-secondary-ink:var(--z-ink);--z-btn-secondary-line:var(--z-line-2);
--z-btn-link-ink:var(--z-accent-ink);
--z-btn-danger-bg:var(--z-danger);--z-btn-danger-ink:var(--z-danger-on);
/* Опасная кнопка бывает и тихой: обводка с мягкой заливкой вместо сплошного
   красного. Без этих двух ручек модуль рисовал её своим цветом. */
--z-btn-danger-line:var(--z-state-blocker-line);--z-btn-danger-soft:var(--z-state-failed-soft);
--z-btn-line-hover:var(--z-line-2);
/* аватар */
--z-avatar-bg:var(--z-accent-fill);--z-avatar-ink:var(--z-accent-on);
/* приёмы, достроенные по реестру референсов */
--z-lock-ink:var(--z-ink-3);--z-lock-bg:var(--z-soft);--z-lock-line:var(--z-line);
--z-legend-ink:var(--z-ink-2);--z-legend-line:var(--z-line);
/* легенда повторяет цвета настоящих линий — иначе она врёт о том, что объясняет */
--z-legend-line-plan:var(--z-dash-strong);--z-legend-line-branch:var(--z-route-branch);
--z-legend-line-done:var(--z-route-compact-done);
--z-decision-mark-bg:var(--z-state-recommend-ink);
--z-freshness-bg:var(--z-soft-2);--z-freshness-fill:var(--z-level-result);
--z-freshness-fill-stale:var(--z-state-pending-dot);--z-freshness-fill-old:var(--z-state-blocker-ink);
--z-draft-line:var(--z-dash-strong);--z-draft-ink:var(--z-ink-3);--z-draft-bg:var(--z-soft);
--z-pin-bg:var(--z-accent);--z-pin-ink:var(--z-accent-on);--z-pin-shadow:var(--z-shadow-contact);
--z-btn-sub-ink:color-mix(in srgb,var(--z-btn-primary-ink) 78%,transparent);
--z-btn-sub-ink-secondary:var(--z-ink-3);
--z-stage-bg:var(--z-soft);--z-stage-ink:var(--z-ink-2);
--z-stage-bg-plan:var(--z-state-pending-soft);--z-stage-bg-work:var(--z-soft-accent);
--z-stage-bg-done:var(--z-level-result-soft);--z-stage-bg-risk:var(--z-state-blocker-soft);
--z-diff-line:var(--z-line);--z-diff-ink:var(--z-ink-2);
--z-diff-bg-was:var(--z-soft-2);--z-diff-bg-now:var(--z-level-result-soft);
--z-diff-ink-was:var(--z-ink-3);--z-diff-ink-now:var(--z-level-result-ink);
--z-link-label-ink:var(--z-ink-3);--z-link-label-halo:var(--z-surface-opaque);
/* ---------- РУЧКИ ОСТАЛЬНЫХ КОМПОНЕНТОВ ----------
   Заведено автоматически: node scripts/ручки-завести.mjs
   Каждая равна тому смысловому токену, что стоял в правиле до неё, поэтому
   вид не меняется. Смысл в другом: теперь компонент можно перекрасить, не
   задев соседей, и модуль может переопределить его в своём профиле. */
--z-bg-bg:var(--z-bg);
--z-photo-panel-line:var(--z-line);
--z-photo-panel-bg:var(--z-surface-opaque);
--z-photo-panel-shadow:var(--z-shadow-card);
--z-deep-mark-ink:var(--z-ink-3);
--z-deep-mark-line-mark:var(--z-dash-strong);
--z-route-node-line-bottom-classic:var(--z-divider);
--z-bg-grain-bg:var(--z-grain);
--z-polotno-bg:var(--z-polotno);
--z-polotno-shadow:var(--z-shadow-polotno);
--z-nested-line:var(--z-line);
--z-nested-bg:var(--z-nested);
--z-nested-shadow:var(--z-glass-top-nested);
--z-nested-line-unproven:var(--z-dash-strong);
--z-nested-bg-unproven:var(--z-unproven);
--z-panel-bg:var(--z-panel);
--z-panel-line-left:var(--z-line);
--z-panel-shadow:var(--z-shadow-panel);
--z-tile-shadow:var(--z-glass-top),var(--z-tile-glow-neutral);
--z-tile-ink:var(--z-ink-2);
--z-tile-shadow-30:var(--z-glass-top),var(--z-tile-glow-small);
--z-tile-ink-green:var(--z-level-result-ink);
--z-tile-shadow-cyan:var(--z-glass-top),var(--z-tile-glow-cyan);
--z-tile-ink-amber:var(--z-state-pending-ink);
--z-tile-ink-rose:var(--z-state-blocker-ink);
--z-tile-ink-pink:var(--z-state-conflict-ink);
--z-tile-bg-accent:var(--z-accent-soft);
--z-tile-line-accent:var(--z-accent-soft-line);
--z-tile-ink-accent:var(--z-accent);
--z-tile-shadow-accent:var(--z-glass-top),var(--z-tile-glow-blue);
--z-tile-ink-solid:var(--z-ink-inverse);
--z-tile-line-honest:var(--z-dash);
--z-tile-ink-honest:var(--z-honest-ink);
--z-route-ahead-stroke:var(--z-dash-strong);
--z-branch-line-left:var(--z-route-branch-w) solid var(--z-route-branch-line);
--z-branch-line-bottom:var(--z-route-branch-w) solid var(--z-route-branch-line);
--z-badge-bg-completion:var(--z-level-completion-soft);
--z-badge-ink-completion:var(--z-level-completion-ink);
--z-badge-bg-result:var(--z-level-result);
--z-badge-ink-result:var(--z-ink-inverse);
--z-badge-bg-success:var(--z-level-success);
--z-badge-ink-success:var(--z-ink-inverse);
--z-badge-bg-value:var(--z-level-value);
--z-badge-ink-value:var(--z-ink-inverse);
--z-badge-ink-pending:var(--z-state-pending-ink);
--z-badge-line-pending:var(--z-state-pending-line);
--z-badge-bg-pending:var(--z-state-pending-soft);
--z-badge-ink-blocked:var(--z-state-blocker-ink);
--z-badge-line-blocked:var(--z-state-blocker-line);
--z-badge-bg-blocked:var(--z-state-blocker-soft);
--z-badge-ink-conflict:var(--z-state-conflict-ink);
--z-badge-line-conflict:var(--z-state-conflict-line);
--z-badge-bg-conflict:var(--z-state-conflict-soft);
--z-badge-ink-hypothesis-no-route:var(--z-ink-3);
--z-badge-line-hypothesis-no-route:var(--z-dash);
--z-badge-ink-recommend:var(--z-state-recommend-ink);
--z-badge-line-recommend:var(--z-state-recommend-line);
--z-badge-bg-recommend:var(--z-state-recommend-soft);
/* Значок о ЖИЗНИ вещи, а не о её предметной роли. Экран знает слова своего
   дела — «контракт», «заглушка», «нужен владелец», — а словарь знает шесть
   состояний, в которые они складываются: подтверждено, черновик, идёт,
   выключено, скрыто, завершено. Экран сопоставляет своё слово смыслу, и тогда
   перекрасить «всё выключенное разом» можно одной строкой. */
--z-badge-line-result:var(--z-level-result-line);
--z-badge-line-completion:var(--z-level-completion-line);
--z-badge-bg-draft:var(--z-level-success-soft);--z-badge-ink-draft:var(--z-level-success-ink);--z-badge-line-draft:var(--z-level-success-line);
--z-badge-bg-busy:var(--z-state-pending-soft);--z-badge-ink-busy:var(--z-state-pending-ink);--z-badge-line-busy:var(--z-state-pending-line);
--z-badge-bg-off:var(--z-level-completion-soft);--z-badge-ink-off:var(--z-level-completion-ink);--z-badge-line-off:var(--z-level-completion-line);
--z-badge-bg-hidden:var(--z-level-completion-soft);--z-badge-ink-hidden:var(--z-ink-3);--z-badge-line-hidden:var(--z-dash);
--z-badge-ink-forecast:var(--z-state-pending-ink);
--z-badge-line-forecast:var(--z-state-pending-line);
--z-badge-bg-forecast:var(--z-state-pending-soft);
--z-badge-ink-failed:var(--z-state-failed-ink);
--z-badge-line-failed:var(--z-state-blocker-line);
--z-badge-bg-failed:var(--z-state-failed-soft);
--z-scope-line:var(--z-state-pending-line);
--z-scope-bg:var(--z-state-pending-soft);
--z-scope-ink:var(--z-state-pending-ink);
--z-scope-line-2:var(--z-state-blocker-line);
--z-scope-bg-2:var(--z-state-blocker-soft);
--z-scope-ink-2:var(--z-state-blocker-ink);
--z-pill-ink-milestone:var(--z-state-pending-ink);
--z-pill-bg-milestone:var(--z-state-pending-soft);
--z-pill-line-milestone:var(--z-state-pending-line-2);
--z-dot-bg:var(--z-ink-3);
/* Точка непрочитанного — не то же, что точка состояния: она говорит «здесь
   есть новое», а не «дело идёт так-то». Своим токеном она перекрашивается,
   не задев значки состояний. */
--z-dot-bg-unread:var(--z-accent);
--z-dot-bg-ok:var(--z-health-ok);
--z-dot-bg-degraded:var(--z-health-degraded);
--z-dot-bg-denied:var(--z-health-denied);
--z-dot-bg-blocked:var(--z-state-blocker-ink);
--z-dot-line-unavailable:var(--z-dash-strong);
--z-level-square-bg:var(--z-level-completion);
--z-level-square-bg-result:var(--z-level-result);
--z-level-square-line-unproven:var(--z-dash-strong);
--z-queue-row-line:var(--z-line);
--z-queue-row-line-due:var(--z-state-pending-line);
--z-queue-row-bg-due:var(--z-state-pending-soft);
--z-queue-row-line-attention:var(--z-state-blocker-line);
--z-goal-state-ink:var(--z-ink-3);
--z-goal-state-ink-active:var(--z-state-blocker-ink);
--z-goal-state-ink-pending:var(--z-state-pending-ink);
--z-goal-title-ink:var(--z-ink);
--z-goal-line-hypothesis:var(--z-dash);
--z-goal-bg-hypothesis:var(--z-soft);
--z-goal-title-ink-hypothesis:var(--z-ink-2);
--z-health-line:var(--z-state-critical-line);
--z-health-bg:var(--z-state-critical-soft-2);
--z-health-name-ink:var(--z-state-pending-ink);
--z-eyebrow-ink:var(--z-ink-3);
--z-empty-ink:var(--z-ink-3);
--z-empty-line:var(--z-dash);
--z-skeleton-bg:linear-gradient(90deg,var(--z-soft) 25%,var(--z-soft-2) 50%,var(--z-soft) 75%);
--z-skeleton-bg-reduced:var(--z-soft);
--z-skeleton-bg-full:var(--z-soft);
--z-swatch-shadow-picked:var(--z-ring-selected);
--z-swatch-ink-picked-mark:var(--z-ink-inverse);
--z-rail-bg:var(--z-rail);
--z-rail-line-right:var(--z-line);
--z-rail-mark-bg:var(--z-accent);
--z-rail-item-bg:var(--z-soft);
--z-rail-item-ink:var(--z-ink-3);
--z-rail-item-bg-current:var(--z-accent-soft);
--z-rail-item-line-current:var(--z-accent-soft-line);
--z-rail-item-ink-current:var(--z-accent);
--z-header-name-ink:var(--z-ink);
--z-header-name--marked-line-bottom:var(--z-accent);
--z-chip-ink:var(--z-ink-2);
--z-chip-bg:var(--z-chip);
--z-chip-line:var(--z-line-2);
--z-search-ink:var(--z-ink-3);
--z-search-bg:var(--z-chip);
--z-search-line:var(--z-line-2);
--z-skip-bg-focus:var(--z-surface-opaque);
--z-notice-line:var(--z-line);
--z-notice-bg:var(--z-surface);
--z-notice-shadow:var(--z-glass-top),var(--z-shadow-card);
--z-notice-line-due:var(--z-state-pending-line);
--z-notice-bg-due:var(--z-state-pending-soft);
--z-notice-line-attention:var(--z-state-blocker-line);
--z-notice-what-ink:var(--z-ink-2);
--z-toast-shadow:var(--z-shadow-far);
/* Семья тоста была из одной тени: фон и текст писали числом. Тост берёт
   чернильный фон и обратный текст — он всплывает поверх страницы и не
   притворяется её частью, а в тёмной теме переворачивается вместе с ней. */
--z-toast-bg:var(--z-ink);--z-toast-ink:var(--z-ink-inverse);--z-toast-bg-error:var(--z-danger);
/* Моноширинная вставка: ключ, код, квитанция. Плашка как у тоста. */
--z-code-bg:var(--z-ink);--z-code-ink:var(--z-ink-inverse-soft);
--z-goal-why-ink:var(--z-ink-2);
--z-goal-kicker-ink:var(--z-ink-2);
--z-dependency-item-line:var(--z-line);
--z-dependency-item-bg:var(--z-nested);
--z-dependency-item-line-active:var(--z-level-result-line);
--z-dependency-item-bg-active:var(--z-level-result-soft);
--z-dependency-item-line-pending:var(--z-state-pending-line);
--z-dependency-item-bg-pending:var(--z-state-pending-soft);
--z-dependency-item-line-next:var(--z-line);
--z-dependency-item-bg-next:var(--z-soft);
--z-dependency-name-ink:var(--z-ink);
--z-dependency-sub-ink:var(--z-ink-3);
--z-dependency-item-ink-active:var(--z-level-result-ink);
--z-dependency-item-ink-pending:var(--z-state-pending-ink);
--z-dependency-item-ink-next:var(--z-ink-3);
--z-dependency-note-ink:var(--z-state-pending-ink);
--z-decision-q-ink:var(--z-ink);
--z-decision-quiet-ink:var(--z-ink-3);
--z-recommendation-line:var(--z-state-recommend-line);
--z-recommendation-bg:var(--z-state-recommend-soft);
--z-recommendation-title-ink:var(--z-state-recommend-text);
--z-recommendation-note-ink:var(--z-state-recommend-note);
--z-fact-line:var(--z-line);
--z-fact-bg:var(--z-surface);
--z-fact-label-ink:var(--z-ink-3);
--z-fact-value-ink:var(--z-ink-2);
--z-confidence-track-bg:var(--z-line);
--z-confidence-fill-bg:var(--z-state-recommend-line);
--z-confidence-value-ink:var(--z-state-recommend-ink);
--z-dissent-line:var(--z-state-conflict-line);
--z-dissent-bg:var(--z-state-conflict-soft);
--z-dissent-who-ink:var(--z-state-conflict-ink);
--z-dissent-quote-ink:var(--z-ink-2);
--z-trace-line:var(--z-line);
--z-trace-bg:var(--z-surface);
--z-queue-row-title-ink:var(--z-ink);
--z-queue-row-why-ink-blocked:var(--z-state-blocker-ink);
--z-queue-row-why-ink-pending:var(--z-state-pending-ink);
--z-queue-row-why-ink-conflict:var(--z-state-conflict-ink);
--z-queue-row-why-ink-next:var(--z-ink-3);
--z-queue-note-ink:var(--z-ink-3);
--z-fact-row-line:var(--z-line);
--z-fact-row-bg:var(--z-surface);
--z-fact-row-label-ink:var(--z-ink-3);
--z-fact-row-value-ink:var(--z-ink);
--z-fact-row-line-pending:var(--z-state-pending-line);
--z-fact-row-bg-pending:var(--z-state-pending-soft);
--z-fact-row-value-ink-pending:var(--z-state-pending-ink);
--z-fact-row-line-conflict:var(--z-state-conflict-line);
--z-fact-row-bg-conflict:var(--z-state-conflict-soft);
--z-fact-row-value-ink-conflict:var(--z-state-conflict-ink);
--z-level-line:var(--z-line);
--z-level-bg:var(--z-surface);
--z-level-name-ink:var(--z-ink);
--z-level-fact-ink:var(--z-ink-2);
--z-level-line-unproven:var(--z-dash);
--z-level-bg-unproven:var(--z-unproven);
--z-level-name-ink-unproven:var(--z-ink-2);
--z-levels-note-ink:var(--z-ink-3);
--z-kpi-line:var(--z-line);
--z-kpi-bg:var(--z-surface);
--z-kpi-label-ink:var(--z-ink-3);
--z-kpi-value-ink:var(--z-ink);
--z-kpi-note-ink:var(--z-ink-2);
--z-kpi-line-attention:var(--z-state-pending-line);
--z-kpi-bg-attention:var(--z-state-pending-soft);
--z-kpi-note-ink-attention:var(--z-state-pending-ink);
--z-kpi-line-due:var(--z-state-blocker-line);
--z-kpi-bg-due:var(--z-state-blocker-soft);
--z-kpi-value-ink-due:var(--z-state-blocker-ink);
--z-intake-row-line:var(--z-line);
--z-intake-row-bg:var(--z-surface);
--z-intake-row-label-ink:var(--z-ink-3);
--z-intake-row-value-ink:var(--z-ink);
--z-intake-row-cell-ink-pending:var(--z-state-pending-ink);
--z-critical-line:var(--z-state-critical-line);
--z-critical-bg:var(--z-state-critical-soft);
--z-critical-name-ink:var(--z-ink);
--z-critical-what-ink:var(--z-ink-2);
--z-critical-rev-ink:var(--z-state-blocker-ink);
--z-recovery-note-ink:var(--z-ink-3);
--z-chain-dot-bg:var(--z-accent);
--z-chain-dot-bg-done:var(--z-level-result);
--z-chain-dot-bg-pending:var(--z-state-pending-dot);
--z-chain-dot-line-unproven:var(--z-dash-2);
--z-chain-line-line-left:var(--z-line-2);
--z-chain-label-ink:var(--z-ink-3);
--z-chain-value-ink:var(--z-ink);
--z-expected-num-ink:var(--z-ink);
--z-expected-side-ink-confirmed:var(--z-level-result-ink);
--z-expected-unit-ink:var(--z-ink-3);
--z-expected-verdict-ink:var(--z-ink-2);
--z-money-ink:var(--z-ink);
--z-money-ink-confirmed:var(--z-level-result-ink);
--z-money-ink-failed:var(--z-state-blocker-ink);
--z-money-unit-ink:var(--z-ink-3);
--z-ledger-row-line-bottom:var(--z-hairline);
--z-value-card-line:var(--z-dash);
--z-value-card-bg:var(--z-unproven);
--z-value-card-goal-ink:var(--z-ink);
--z-value-card-q-ink:var(--z-ink-2);
--z-spark-line-stroke:var(--z-accent);
--z-spark-area-fill:var(--z-accent-a14);
--z-field-label-ink:var(--z-ink-2);
--z-field-min-width:0;
--z-field-input-line:var(--z-line-2);
--z-field-input-bg:var(--z-surface-opaque);
--z-field-input-ink:var(--z-ink);
--z-field-error-ink:var(--z-state-blocker-ink);
--z-field-input-line-2:var(--z-state-blocker-line);
--z-field-input-bg-2:var(--z-state-blocker-soft);
--z-seg-item-line:var(--z-line-2);
--z-seg-item-ink:var(--z-ink-2);
--z-seg-item-bg-picked:var(--z-accent);
--z-seg-item-line-picked:var(--z-accent);
--z-seg-item-ink-picked:var(--z-accent-on);
--z-avatar-shadow:inset 0 0 0 1px var(--z-tile-solid-ring);
--z-tooltip-bg:var(--z-panel);
--z-tooltip-line:var(--z-line);
--z-tooltip-shadow:var(--z-shadow-panel);
--z-tooltip-ink:var(--z-ink-2);
--z-divider-bg-line:var(--z-hairline);
--z-kbd-line:var(--z-line-2);
--z-kbd-bg:var(--z-soft);
--z-kbd-ink:var(--z-ink-2);
--z-pill-line:var(--z-line-2);
--z-pill-bg:var(--z-surface);
--z-pill-ink:var(--z-ink-2);
--z-pill-ink-pinned:var(--z-accent-ink);
--z-pill-line-pinned:var(--z-accent-soft-line);
--z-pill-bg-pinned:var(--z-accent-soft);
--z-menu-head-ink:var(--z-ink);
--z-menu-why-ink:var(--z-ink-3);
--z-menu-item-line:var(--z-line-3);
--z-menu-item-ink:var(--z-ink-2);
--z-menu-item-bg-pinned:var(--z-soft-accent);
--z-menu-item-line-pinned:var(--z-accent-soft-line);
--z-menu-item-ink-pinned:var(--z-ink);
--z-menu-item-line-hidden:var(--z-dash);
--z-menu-item-bg-hidden:var(--z-unproven);
--z-menu-mark-ink:var(--z-ink-3);
--z-axis-name-ink:var(--z-ink-2);
--z-rail-line-bottom:var(--z-line);
--z-table-ink:var(--z-ink-3);
--z-table-line-bottom:var(--z-line);
--z-table-line-bottom-2:var(--z-hairline);
--z-table-ink-2:var(--z-ink-2);
--z-table-bg-hover:var(--z-soft);
--z-table-ink-3:var(--z-ink);
--z-list-row-line-bottom:var(--z-hairline);
--z-list-row-bg:var(--z-surface);--z-list-row-line-hover:var(--z-line-2);
--z-list-row-bg-hover:var(--z-soft);
--z-list-title-ink:var(--z-ink);

/* ---------- ВХОДЯЩИЕ ----------
   Поток обращений: список слева, разбор справа. Экран рисовал его сорока
   тремя красками, набранными числом, и шесть из них были шестью ступенями
   одного и того же серо-синего. Здесь у каждой своё имя, значение по
   умолчанию — ближайший общий смысл, а фирменные оттенки живут в профиле
   диспетчера. Лестница ink…ink-6 названа ступенями, а не местами: места её
   выбирают, но перекрашивается она целиком. */
--z-inbox-ink:var(--z-ink-2);--z-inbox-ink-2:var(--z-ink-3);--z-inbox-ink-3:var(--z-ink-3);
--z-inbox-ink-4:var(--z-ink-4);--z-inbox-ink-5:var(--z-ink-4);--z-inbox-ink-6:var(--z-ink-4);
--z-inbox-title-ink:var(--z-ink);--z-inbox-subtitle-ink:var(--z-ink-2);--z-inbox-strong-ink:var(--z-ink);
--z-inbox-value-ink:var(--z-ink-2);--z-inbox-received-ink:var(--z-ink-3);--z-inbox-action-ink:var(--z-ink-3);
--z-inbox-search-ink:var(--z-ink-4);--z-inbox-placeholder-ink:var(--z-ink-4);
--z-inbox-selector-strong-ink:var(--z-ink-2);--z-inbox-inspector-title-ink:var(--z-ink);
--z-inbox-card-shadow:var(--z-shadow-card);--z-inbox-line-active:var(--z-accent);
--z-inbox-row-line-selected:var(--z-accent-soft-line);--z-inbox-bell-mark-bg:var(--z-danger);
/* откуда пришло обращение */
--z-inbox-source-ink-secondary:var(--z-health-ok);--z-inbox-source-ink-call:var(--z-tag-teal);
--z-inbox-source-bg-web:var(--z-level-success-soft);--z-inbox-source-ink-web:var(--z-level-success-ink);
--z-inbox-source-bg-mail:var(--z-state-pending-soft);--z-inbox-source-ink-mail:var(--z-state-pending-ink);
/* риск и состояние строки */
--z-inbox-risk-ink-low:var(--z-health-ok);--z-inbox-risk-ink-medium:var(--z-state-pending-ink);--z-inbox-risk-ink-high:var(--z-state-blocker-ink);
--z-inbox-status-bg-review:var(--z-state-pending-soft);--z-inbox-status-ink-review:var(--z-state-pending-ink);
--z-inbox-status-bg-incomplete:var(--z-state-blocker-soft);--z-inbox-status-ink-incomplete:var(--z-state-blocker-ink);
/* предложенный машиной маршрут */
--z-inbox-ai-route-line:var(--z-accent-soft-line);--z-inbox-ai-route-ink:var(--z-level-success-ink);
--z-inbox-ai-route-mark-bg:var(--z-level-success-soft);--z-inbox-ai-route-mark-ink:var(--z-level-success-ink);
/* полнота обращения и заметка о действии */
--z-inbox-completeness-line:var(--z-state-pending-line);--z-inbox-completeness-bg:var(--z-state-pending-soft);
--z-inbox-completeness-ink:var(--z-state-pending-ink);--z-inbox-completeness-fill-bg:var(--z-state-pending-dot);
--z-inbox-action-notice-ink:var(--z-state-pending-ink);
/* цепочка обработки */
--z-inbox-workflow-ink:var(--z-ink-4);--z-inbox-workflow-strong-ink:var(--z-ink-2);
--z-inbox-workflow-line:var(--z-accent-soft-line);--z-inbox-workflow-mark-bg:var(--z-soft-2);

/* ---------- РЕШЕНИЯ ----------
   Экран, где заказ доводят до решения: шапка с показателями, очередь слева,
   разбор справа, цепочка проверок и предложенный маршрут. */
--z-decision-header-intro-title-ink:var(--z-ink);--z-decision-header-intro-text-ink:var(--z-ink-4);
--z-decision-header-selectors-button-ink:var(--z-ink-3);--z-decision-header-selectors-strong-ink:var(--z-ink-2);
--z-decision-header-selectors-text-ink:var(--z-ink-4);
--z-decision-search-ink:var(--z-ink-4);--z-decision-search-input-ink:var(--z-ink);--z-decision-placeholder-ink:var(--z-ink-4);
--z-decision-tool-ink:var(--z-ink-3);--z-decision-tool-line-active:var(--z-accent);--z-decision-tool-mark-bg-bell:var(--z-danger);
--z-decision-kpis-bg:var(--z-surface-opaque);--z-decision-kpis-shadow:var(--z-shadow-card);
--z-decision-metric-strong-ink:var(--z-ink);--z-decision-metric-icon-ink-health:var(--z-accent-ink);
--z-decision-metric-icon-bg-attention:var(--z-state-pending-soft);--z-decision-metric-icon-bg-failed:var(--z-state-blocker-soft);
--z-decision-alert-shadow:var(--z-shadow-card);
--z-decision-queue-item-line-selected:var(--z-accent);--z-decision-queue-item-shadow-selected:var(--z-shadow-card);
--z-decision-order-title-ink:var(--z-ink);--z-decision-subcard-value-ink:var(--z-ink-3);--z-decision-files-title-ink:var(--z-ink-2);
--z-decision-files-mark-ink:var(--z-ink-3);--z-decision-evidence-mark-ink:var(--z-health-ok);
--z-decision-check-chain-mark-line-left:var(--z-level-result-line);
--z-decision-route-line:var(--z-line-2);--z-decision-route-text-ink:var(--z-ink-2);--z-decision-route-title-mark-ink:var(--z-level-success-ink);
--z-decision-note-mark-ink:var(--z-ink-4);

/* ---------- СПРАВОЧНЫЕ ЭКРАНЫ ----------
   Витрина диспетчера: как выглядит заказ, маршрут, правило, проверка, поиск,
   сводка. Сто две краски, набранные числом, — больше, чем во всём остальном
   экране вместе. Значения по умолчанию подобраны по смыслу цвета: зелёный —
   подтверждение, тёплый — внимание, розовый — сбой, фиолетовый —
   предположение, синий — акцент, а серо-синий любой густоты — нейтральный
   текст, потому что у него оттенок, а не цвет. */
--z-ref-button-shadow-primary:var(--z-shadow-card);--z-ref-card-shadow:var(--z-shadow-card);
--z-ref-check-line-mark-ink:var(--z-health-ok);--z-ref-compact-result-mark-ink:var(--z-state-pending-ink);
--z-ref-condition-row-mark-ink:var(--z-accent-ink);--z-ref-context-flow-item-bg:var(--z-accent);
--z-ref-context-flow-mark-bg-success:var(--z-level-result-soft);--z-ref-context-flow-text-ink:var(--z-ink-2);
--z-ref-evidence-row-mark-ink:var(--z-health-ok);--z-ref-field-label-ink:var(--z-ink);
--z-ref-filter-chips-mark-ink:var(--z-ink-3);--z-ref-flow-line-icon-bg:var(--z-accent);
--z-ref-flow-line-icon-line-warning:var(--z-state-pending-line);--z-ref-flow-line-icon-shadow-warning:var(--z-shadow-card);
--z-ref-flow-line-line-warning:var(--z-state-pending-line);--z-ref-flow-signals-strong-ink:var(--z-state-pending-ink);
--z-ref-hourglass-bg:var(--z-state-pending-soft);--z-ref-hourglass-ink:var(--z-state-pending-ink);
--z-ref-human-control-line:var(--z-state-pending-line);--z-ref-human-result-ink:var(--z-state-pending-ink);
--z-ref-human-result-line:var(--z-state-pending-line);--z-ref-info-strip-ink:var(--z-accent-ink);
--z-ref-info-strip-line:var(--z-line-2);--z-ref-knowledge-bg:var(--z-state-pending-soft);
--z-ref-knowledge-line:var(--z-state-pending-line);--z-ref-knowledge-mark-bg:var(--z-state-pending-dot);
--z-ref-knowledge-small-ink:var(--z-ink-3);--z-ref-kv-small-ink:var(--z-ink-4);
--z-ref-kv-value-ink:var(--z-ink);--z-ref-list-row-small-ink:var(--z-ink-3);
--z-ref-logic-nodes-item-line-left:var(--z-line);--z-ref-logic-nodes-item-shadow:var(--z-shadow-card);
--z-ref-logic-nodes-line-dashed:var(--z-line);--z-ref-logic-nodes-line-human:var(--z-state-pending-line);
--z-ref-logic-nodes-mark-bg-human:var(--z-state-pending-dot);--z-ref-logic-nodes-mark-line:var(--z-level-result-line);
--z-ref-logic-nodes-mark-line-human:var(--z-state-pending-line);--z-ref-object-icon-ink:var(--z-ink);
--z-ref-order-row-ink:var(--z-ink);--z-ref-page-header-title-ink:var(--z-ink);
--z-ref-person-mark-ink:var(--z-ink-3);--z-ref-process-strip-ink:var(--z-ink-3);
--z-ref-process-strip-mark-line-active:var(--z-accent);--z-ref-route-mini-icon-line-active:var(--z-accent);
--z-ref-route-nodes-item-line-left:var(--z-line);--z-ref-route-nodes-line:var(--z-line-2);
--z-ref-route-nodes-line-approved:var(--z-line);--z-ref-route-nodes-line-human:var(--z-state-pending-line);
--z-ref-route-nodes-mark-line-top:var(--z-line-2);--z-ref-route-template-item-line-left:var(--z-line);
--z-ref-route-template-line-human:var(--z-state-pending-line);--z-ref-rule-point-mark-ink-human:var(--z-state-pending-ink);
--z-ref-saved-views-line-selected:var(--z-accent);--z-ref-scenario-check-strong-ink:var(--z-health-ok);
--z-ref-scenario-compare-icon-bg:var(--z-level-result);--z-ref-search-input-ink:var(--z-ink-2);
--z-ref-search-line-large:var(--z-line);--z-ref-search-results-strong-ink:var(--z-accent-ink);
--z-ref-search-results-strong-line:var(--z-line-2);--z-ref-search-row-ink-amber:var(--z-state-pending-ink);
--z-ref-search-row-ink-green:var(--z-health-ok);--z-ref-search-row-small-ink:var(--z-ink-2);
--z-ref-search-shadow-large:var(--z-shadow-card);--z-ref-secret-note-small-ink:var(--z-ink-3);
--z-ref-sla-cell-icon-line-left:var(--z-line);--z-ref-sla-legend-ink:var(--z-ink-3);
--z-ref-sla-legend-mark-bg:var(--z-soft-2);--z-ref-sla-legend-mark-bg-amber:var(--z-state-pending-dot);
--z-ref-sla-legend-mark-bg-green:var(--z-soft-2);--z-ref-sla-legend-mark-bg-red:var(--z-danger);
--z-ref-source-row-mark-ink:var(--z-accent-ink);--z-ref-source-row-mark-ink-2:var(--z-ink-3);
--z-ref-state-change-ink-current:var(--z-accent-ink);--z-ref-state-change-line-current:var(--z-line);
--z-ref-state-dot-bg:var(--z-soft-2);--z-ref-state-dot-bg-amber:var(--z-state-pending-dot);
--z-ref-state-dot-bg-blue:var(--z-accent);--z-ref-state-dot-bg-green:var(--z-level-result);
--z-ref-status-bg:var(--z-soft);--z-ref-status-bg-amber:var(--z-state-pending-soft);
--z-ref-status-bg-red:var(--z-state-blocker-soft);--z-ref-status-ink-amber:var(--z-state-pending-ink);
--z-ref-status-ink-green:var(--z-health-ok);--z-ref-status-ink-neutral:var(--z-ink-3);
--z-ref-status-ink-red:var(--z-state-blocker-ink);--z-ref-success-box-line:var(--z-line-2);
--z-ref-success-box-small-ink:var(--z-ink-3);--z-ref-success-title-mark-bg:var(--z-level-result);
--z-ref-success-title-mark-line:var(--z-line);--z-ref-success-title-mark-line-2:var(--z-level-result-line);
--z-ref-test-row-small-ink:var(--z-ink-2);--z-ref-timeline-item-icon-line:var(--z-line);
--z-ref-timeline-item-ink:var(--z-ink-4);--z-ref-toast-ink:var(--z-accent-ink);
--z-ref-toast-line:var(--z-line-2);--z-ref-toast-shadow:var(--z-shadow-card);
--z-ref-unknown-ink:var(--z-state-pending-ink);--z-ref-variant-switch-ink-active:var(--z-accent-ink);
--z-ref-variant-switch-shadow:var(--z-shadow-card);--z-ref-warning-strip-bg:var(--z-state-pending-soft);
--z-ref-warning-strip-ink:var(--z-state-pending-ink);--z-ref-warning-strip-line:var(--z-state-pending-line);

/* ---------- ОСТАЛЬНОЕ В ДИСПЕТЧЕРЕ ----------
   Оболочка приложения, полотно со свечением, переключатель мест, настройщик
   раскладки, шаги проверки, предложение цепочки, поле, ползунок прокрутки.
   Цвет среды — rgb(var(--env-tint)) — разобрать числом нельзя, но смысл его
   известен по самой переменной: это акцент рабочего окружения, и умолчанием
   ему ставится акцент словаря. */
--z-ai-hero-line:var(--z-line);--z-ai-hero-shimmer-bg:var(--z-accent);
--z-ai-orb-bg:var(--z-accent);--z-ai-orb-line:var(--z-line);
--z-app-shell-shadow:var(--z-shadow-card);--z-app-switcher-bg-active:var(--z-accent-a14);
--z-app-switcher-ink-active:var(--z-accent);--z-appearance-swatch-mark-bg:var(--z-accent);
--z-appearance-swatch-mark-bg-cyan:var(--z-accent);--z-appearance-swatch-mark-bg-violet:var(--z-accent);
--z-appearance-swatch-mark-bg-warm:var(--z-state-pending-dot);--z-atmosphere-chip-ink:var(--z-accent);
--z-atmosphere-chip-line:var(--z-accent-a28);--z-button-ink-primary:var(--z-ink);
--z-button-line:var(--z-accent-a28);--z-button-line-danger:var(--z-state-blocker-line);
--z-check-step-line-waiting:var(--z-state-pending-line);--z-check-step-mark-bg-waiting:var(--z-state-pending-soft);
--z-check-step-small-ink:var(--z-ink-4);--z-confidence-bar-bg:var(--z-wash-3);
--z-connect-callout-bg:var(--z-state-pending-dot);--z-connect-callout-bg-2:var(--z-wash-3);
--z-connect-callout-line:var(--z-state-pending-line);--z-context-panel-backdrop-bg:var(--z-soft-2);
--z-count-ink:var(--z-ink);--z-dispatcher-advanced-json-ink:var(--z-ink-3);
--z-dispatcher-candidate-bg:var(--z-wash-1);--z-dispatcher-draft-bg:var(--z-soft-2);
--z-dispatcher-message-bg:var(--z-level-result);--z-dispatcher-message-bg-error:var(--z-danger);
--z-dispatcher-message-line:var(--z-level-result-line);--z-dispatcher-message-line-error:var(--z-state-blocker-line);
--z-dispatcher-operations-head-text-ink:var(--z-ink-3);--z-dispatcher-operations-head-title-ink:var(--z-ink);
--z-dispatcher-preview-banner-ink:var(--z-ink-3);--z-dispatcher-preview-banner-line:var(--z-line-2);
--z-dispatcher-preview-banner-mark-bg:var(--z-accent);--z-dispatcher-preview-banner-mark-shadow:var(--z-shadow-card);
--z-dispatcher-reference-page-ink:var(--z-ink);--z-dispatcher-row-bg-selected:var(--z-accent-a14);
--z-dispatcher-row-shadow-selected:var(--z-shadow-card);--z-dispatcher-standardization-editor-checks-ink:var(--z-ink-2);
--z-edit-toggle-bg:var(--z-wash-1);--z-explanation-box-bg:var(--z-accent);
--z-explanation-box-line:var(--z-line);--z-fab-shadow-agentera:var(--z-shadow-card);
--z-fab-shadow-command:var(--z-shadow-card);--z-field-hint-bg:var(--z-level-result);
--z-field-ink:var(--z-ink);--z-field-input-ring-focus:var(--z-focus-ring);
--z-filter-chip-bg:var(--z-wash-1);--z-focus-ring-app:var(--z-focus-ring);
--z-foundation-strip-bg:var(--z-soft-2);--z-icon-btn-bg:var(--z-wash-1);
--z-icon-btn-bg-2:var(--z-wash-3);--z-layout-block-controls-bg:var(--z-surface-opaque);
--z-layout-block-controls-line:var(--z-line-2);--z-layout-block-controls-shadow:var(--z-shadow-card);
--z-layout-block-line-layout-editing:var(--z-line);--z-layout-canvas-toolbar-line:var(--z-line-2);
--z-layout-canvas-toolbar-shadow:var(--z-shadow-card);--z-layout-config-backdrop-bg:var(--z-soft-2);
--z-layout-config-button-line-active:var(--z-accent);--z-layout-config-item-shadow-drag-over:var(--z-shadow-card);
--z-layout-configurator-ink:var(--z-ink);--z-layout-configurator-shadow:var(--z-shadow-card);
--z-layout-configurator-title-ink:var(--z-ink);--z-layout-empty-state-line:var(--z-line-2);
--z-owner-tools-block-bg:var(--z-state-pending-dot);--z-owner-tools-block-line:var(--z-state-pending-line);
--z-palette-backdrop-bg:var(--z-soft-2);--z-palette-item-bg:var(--z-wash-2);
--z-person-avatar-bg:var(--z-accent);--z-person-avatar-line:var(--z-line);
--z-raw-json-bg:var(--z-soft-2);--z-review-accept-bg:var(--z-accent);
--z-review-accept-bg-done:var(--z-level-result);--z-review-accept-line:var(--z-line);
--z-review-accept-line-done:var(--z-level-result-line);--z-ring-line:var(--z-line-2);
--z-scene-preset-line-active:var(--z-accent-a28);--z-scenery-orb-bg-a:var(--z-accent-a14);
--z-scenery-orb-bg-b:var(--z-accent-a14);--z-scenery-shade-bg:var(--z-soft-2);
--z-scrollbar-thumb-bg:var(--z-wash-4);--z-seg-bg-on:var(--z-accent-a14);
--z-spine-backdrop-bg:var(--z-soft-2);--z-swatch-bg:var(--z-accent);
--z-table-row-bg:var(--z-wash-1);--z-tone-ink-amber:var(--z-state-pending-ink);
--z-tone-ink-green:var(--z-health-ok);--z-topbar-bg:var(--z-soft-2);
--z-topbar-bg-2:var(--z-surface-opaque);--z-widget-handle-line:var(--z-line);
--z-workflow-proposal-ink:var(--z-ink-2);--z-workflow-proposal-line:var(--z-line-2);
--z-workflow-stage-ink:var(--z-ink-3);--z-workflow-stage-line-active:var(--z-accent);
--z-workflow-stage-mark-line:var(--z-line-2);--z-workflow-stage-strong-ink:var(--z-ink-2);
--z-workflow-stage-value-ink:var(--z-ink-3);

/* ---------- РАБОТА С КЛИЕНТАМИ ----------
   Вход, боковая колонка, сделки по столбцам, доказательства переноса,
   сводка о клиенте. Пятнадцать мест взяли уже существующие имена — значок
   состояния, чип, кольцо фокуса, поле, полотно, — и в словарь добавились
   только те сорок шесть, которых в нём не было. */
--z-auth-card-shadow:var(--z-shadow-card);--z-automation-policy-line:var(--z-line-2);
--z-automation-policy-line-denied:var(--z-line-2);--z-brand-panel-bg:var(--z-soft-2);
--z-brand-panel-text-ink:var(--z-ink-4);--z-customer360-section-bg:var(--z-state-pending-soft);
--z-discard-box-line-top:var(--z-line-2);--z-error-banner-ink:var(--z-state-pending-ink);
--z-error-banner-line:var(--z-line-2);--z-field-input-line-focus:var(--z-line);
--z-field-input-shadow-focus:var(--z-shadow-card);--z-icon-button-bg:var(--z-soft);
--z-lead-row-line-bottom:var(--z-line-2);--z-lead-row-small-ink:var(--z-ink-3);
--z-locale-toggle-button-line:var(--z-line-2);--z-locale-toggle-button-line-2:var(--z-line);
--z-logout-ink:var(--z-ink-4);--z-logout-line:var(--z-line-2);
--z-metrics-panel-bg:var(--z-state-pending-soft);--z-object-evidence-bg:var(--z-level-result-soft);
--z-object-evidence-line:var(--z-line-2);--z-operational-view-badge-bg:var(--z-level-result-soft);
--z-operational-view-badge-ink:var(--z-ink-2);--z-opportunity-card-line:var(--z-line-2);
--z-opportunity-card-mark-ink:var(--z-ink-3);--z-opportunity-card-shadow:var(--z-shadow-card);
--z-pipeline-column-bg:var(--z-state-pending-soft);--z-pipeline-column-text-ink:var(--z-ink-4);
--z-preview-bad-ink:var(--z-state-pending-ink);--z-preview-evidence-bg:var(--z-level-result-soft);
--z-preview-evidence-line:var(--z-line-2);--z-preview-evidence-strong-ink:var(--z-ink-2);
--z-projection-current-bg:var(--z-level-result-soft);--z-projection-current-ink:var(--z-ink-2);
--z-projection-partial-bg:var(--z-state-pending-soft);--z-projection-partial-ink:var(--z-state-pending-ink);
--z-row-arrow-ink:var(--z-ink-4);--z-security-note-ink:var(--z-ink-3);
--z-status-ok-ink:var(--z-health-ok);--z-step-up-note-bg:var(--z-state-pending-soft);
--z-transfer-note-bg:var(--z-state-pending-soft);--z-transfer-progress-bg:var(--z-soft-2);
--z-transfer-progress-fill-bg:var(--z-soft-2);--z-transfer-tabs-button-bg:var(--z-soft-2);
--z-trust-row-mark-line:var(--z-line-2);--z-version-ledger-item-line-bottom:var(--z-line-2);

/* ---------- WORK OS ----------
   Полотно с тремя настроениями, кнопки и знаки витрины, окно настроек,
   свечение вех. Градиент здесь — одно значение вида, а не набор красок:
   разобрать его по цветам значит рассыпать переход на куски, порознь
   ничего не значащие. Умолчанием такой ручке ставится ровный цвет по
   первой краске. */
--z-wos-bg:var(--z-state-pending-dot);--z-wos-bg-2:var(--z-accent);
--z-wos-bg-3:var(--z-state-pending-dot);--z-wos-flow-milestone-icon-shadow:var(--z-shadow-card);
--z-wos-graph-node-filter:none;--z-wos-icon-btn-shadow:var(--z-shadow-card);
--z-wos-inbox-signal-shadow-selected:var(--z-shadow-card);--z-wos-mark-bg:var(--z-accent);
--z-wos-mission-core-bg:var(--z-surface-opaque);--z-wos-ref-brand-mark-bg:var(--z-accent);
--z-wos-ref-brand-mark-shadow:var(--z-shadow-card);--z-wos-ref-btn-bg-orange:var(--z-state-pending-dot);
--z-wos-ref-btn-bg-primary:var(--z-accent);--z-wos-ref-btn-shadow:var(--z-shadow-card);
--z-wos-ref-btn-shadow-primary:var(--z-shadow-card);--z-wos-ref-compass-bg:var(--z-surface-opaque);
--z-wos-ref-compass-line-bottom:var(--z-wash-3);--z-wos-ref-dialog-shadow:var(--z-shadow-card);
--z-wos-ref-stage-icon-shadow:var(--z-shadow-card);--z-wos-ref-stage-icon-shadow-current:var(--z-shadow-card);
--z-wos-settings-aside-shadow:var(--z-shadow-card);
--z-wos-theme-card-icon-bg-deep-evening:var(--z-soft-2);--z-wos-theme-card-icon-bg-light-horizon:var(--z-state-pending-soft);
--z-wos-theme-card-icon-bg-warm-focus:var(--z-state-pending-soft);--z-wos-understood-card-shadow:var(--z-shadow-card);

/* ---------- ЛАБОРАТОРИЯ ВИДА ----------
   Стенд, где показывают замысел экрана до того, как он написан: полоса
   пояснения, боковая колонка, лента этапов, значок состояния. */
--z-concept-hero-bg:var(--z-ink-2);--z-concept-hero-line:var(--z-ink-2);
--z-confidence-track-icon-bg:var(--z-state-pending-dot);--z-hero-context-bg:var(--z-soft-2);
--z-hero-context-ink:var(--z-ink-4);--z-hero-context-mark-ink:var(--z-ink-4);
--z-lab-banner-bg:var(--z-soft-2);--z-lab-banner-ink:var(--z-ink);
--z-lab-banner-line-bottom:var(--z-line-2);--z-lab-banner-mark-ink:var(--z-ink-3);
--z-lab-brand-mark-bg:var(--z-soft-2);--z-lab-main-bg:var(--z-ink-2);
--z-lab-sidebar-bg-active:var(--z-ink-2);--z-lab-sidebar-line-active:var(--z-ink-2);
--z-lab-sidebar-ring:var(--z-focus-ring);--z-primary-action-bg:var(--z-soft-2);
--z-primary-action-button-bg:var(--z-level-result-soft);--z-primary-action-button-ink:var(--z-ink);
--z-primary-action-button-line:var(--z-line-2);--z-primary-action-text-ink:var(--z-ink-4);
--z-state-callout-bg-conflict:var(--z-state-pending-soft);--z-state-callout-bg-denied:var(--z-state-blocker-soft);
--z-state-callout-ink-denied:var(--z-accent-ink);--z-state-callout-line-conflict:var(--z-state-pending-line);
--z-state-callout-line-denied:var(--z-line-2);--z-status-pill-bg:var(--z-level-result-soft);
--z-status-pill-bg-danger:var(--z-state-blocker-soft);--z-status-pill-bg-warn:var(--z-state-pending-soft);
--z-status-pill-ink:var(--z-health-ok);--z-status-pill-ink-danger:var(--z-state-blocker-ink);
--z-status-pill-ink-warn:var(--z-state-pending-ink);--z-timeline-bg-done:var(--z-level-result-soft);
--z-timeline-bg-gap:var(--z-state-pending-soft);--z-timeline-line-done:var(--z-line-2);
--z-timeline-line-gap:var(--z-state-pending-line);

/* ---------- ПОДДЕРЖКА ----------
   Вход, тёмная колонка, список обращений, переписка, здоровье связей.
   Семья берётся по первому классу последнего звена селектора: у «.badge.P0»
   семья — значок, а «P0» его модификатор. Иначе в словаре заводится имя
   вроде --z-warning-bg, звучащее общим смыслом, а красящее один значок. */
--z-app-notice-bg:var(--z-level-result-soft);--z-app-notice-bg-danger:var(--z-state-blocker-soft);
--z-app-notice-ink:var(--z-accent-ink);--z-app-notice-line:var(--z-line-2);
--z-app-notice-line-danger:var(--z-line-2);--z-badge-bg:var(--z-soft-2);
--z-badge-bg-priority:var(--z-state-blocker-soft);--z-badge-bg-system:var(--z-state-blocker-soft);
--z-badge-ink-system:var(--z-level-success-ink);--z-brand-line-bottom:var(--z-line-2);
--z-case-row-bg-active:var(--z-level-result-soft);--z-case-row-text-ink:var(--z-ink-2);
--z-case-toolbar-bg:var(--z-surface-opaque);--z-case-toolbar-button-ink:var(--z-ink-4);
--z-catalog-item-bg-active:var(--z-soft-2);--z-connection-ink:var(--z-ink-4);
--z-data-card-bg:var(--z-surface-opaque);--z-header-actions-bg:var(--z-level-result-soft);
--z-header-actions-ink:var(--z-accent-ink);--z-health-bg-failed:var(--z-soft);
--z-health-bg-ok:var(--z-level-result-soft);--z-health-ink:var(--z-state-pending-ink);
--z-health-ink-failed:var(--z-ink-3);--z-health-ink-ok:var(--z-health-ok);
--z-login-bg:var(--z-accent);--z-login-button-ink:var(--z-ink-4);
--z-login-card-bg:var(--z-surface-opaque);--z-login-card-shadow:var(--z-shadow-card);
--z-message-bg:var(--z-soft);--z-message-bg-note:var(--z-state-pending-soft);
--z-message-bg-staff:var(--z-level-result-soft);--z-message-line-note:var(--z-state-pending-line);
--z-notice-bg-warning:var(--z-state-pending-soft);--z-notice-ink-warning:var(--z-state-pending-ink);
--z-notice-line-warning:var(--z-state-pending-line);--z-owner-home-ink:var(--z-ink-4);
--z-product-catalog-line-bottom:var(--z-line-2);--z-shell-ink:var(--z-ink-4);
--z-shell-small-ink-brand:var(--z-ink-3);

/* ---------- ВХОД НА СТЕНД ----------
   Карточка входа, поле, кнопки, замечание о границе. Экран сам следит за
   системной темой, поэтому у части ручек есть тёмный близнец с суффиксом
   -dark: значение ему даёт профиль из-под своей @-обёртки. */
--z-access-card-bg:var(--z-surface-opaque);--z-access-card-bg-dark:var(--z-soft-2);
--z-access-card-line:var(--z-line-2);--z-access-card-line-dark:var(--z-line);
--z-boundary-note-ink:var(--z-accent-ink);--z-boundary-note-ink-dark:var(--z-ink-4);
--z-field-input-bg-dark:var(--z-soft-2);--z-field-input-line-dark:var(--z-line);
--z-field-label-ink-dark:var(--z-ink-4);--z-form-error-line:var(--z-line-2);
--z-password-toggle-ink:var(--z-accent-ink);--z-primary-button-bg:var(--z-accent);
--z-secondary-button-bg:var(--z-soft);--z-secondary-button-bg-dark:var(--z-soft-2);
--z-secondary-button-line:var(--z-line-2);--z-secondary-button-line-dark:var(--z-line);

/* ---------- ТЕЛЕВИЗОР ----------
   Экран для стены: крупный шаг, код подключения, показатель, дыхание текущего
   шага. Всё читается с трёх метров, поэтому у него свои размеры и свой вес. */
--z-tv-breathe-shadow:var(--z-shadow-card);--z-tv-button-bg:var(--z-surface-opaque);
--z-tv-button-bg-primary:var(--z-accent);--z-tv-button-line:var(--z-line);
--z-tv-button-ring:var(--z-focus-ring);--z-tv-button-shadow-primary:var(--z-shadow-card);
--z-tv-card-bg:var(--z-surface-opaque);--z-tv-card-line:var(--z-line);
--z-tv-card-mark-ink:var(--z-state-pending-ink);--z-tv-code-bg:var(--z-soft-2);
--z-tv-code-line:var(--z-line);--z-tv-code-shadow:var(--z-shadow-card);
--z-tv-goal-bg:var(--z-surface-opaque);--z-tv-goal-line:var(--z-line);
--z-tv-goal-text-ink:var(--z-ink-4);--z-tv-mark-bg:var(--z-accent);
--z-tv-mark-shadow:var(--z-shadow-card);--z-tv-metric-strong-ink:var(--z-health-ok);
--z-tv-metric-strong-ink-accent:var(--z-accent-ink);--z-tv-nav-button-bg:var(--z-surface-opaque);
--z-tv-status-bg:var(--z-soft-2);--z-tv-status-line:var(--z-level-result-line);
--z-tv-step-bg-current:var(--z-accent);--z-tv-step-shadow-current:var(--z-shadow-card);
--z-tv-step-small-ink:var(--z-ink-4);

/* ---------- СВОДКА ВЛАДЕЛЬЦА ----------
   Первый экран после входа: доступ, деньги, вкладки разделов, боковая
   колонка. Цвет владельца — rgba(var(--owner-accent-rgb),…) — числом не
   разобрать, но смысл его известен по самой переменной: это акцент. */
--z-access-hero-bg:var(--z-accent-a14);--z-access-secret-once-bg:var(--z-state-pending-dot);
--z-access-secret-once-line:var(--z-state-pending-line);--z-dashboard-hero-bg:var(--z-accent-a14);
--z-dashboard-hero-line:var(--z-accent-a28);--z-finance-callout-bg-info:var(--z-accent-a14);
--z-finance-callout-bg-warn:var(--z-state-pending-dot);--z-finance-callout-ink-warn:var(--z-state-pending-ink);
--z-finance-callout-line-info:var(--z-accent-a28);--z-finance-callout-line-warn:var(--z-state-pending-line);
--z-finance-hero-bg:var(--z-level-result);--z-finance-hero-line:var(--z-level-result-line);
--z-finance-status-bg-degraded:var(--z-state-pending-dot);--z-finance-status-ink-degraded:var(--z-state-pending-ink);
--z-finance-tabs-line-active:var(--z-accent-a28);--z-module-finance-widget-state-bg-degraded:var(--z-state-pending-dot);
--z-module-finance-widget-state-bg-error:var(--z-danger);--z-owner-sidebar-backdrop-bg:var(--z-soft-2);
--z-owner-sidebar-shadow:var(--z-shadow-card);

/* ---------- ПАРСЕР-ХАБ ----------
   Тёмный экран сбора: карточка источника, состояние разбора, вкладки,
   поле и кнопка. Живёт на тёмном поле, поэтому его карточка темнее фона. */
--z-parser-app-button-bg:var(--z-accent);--z-parser-app-button-ink:var(--z-ink-4);
--z-parser-app-button-line:var(--z-line);--z-parser-app-card-bg:var(--z-soft-2);
--z-parser-app-error-bg:var(--z-soft-2);--z-parser-app-error-ink:var(--z-ink-4);
--z-parser-app-hero-bg:var(--z-soft-2);--z-parser-app-hero-line:var(--z-line);
--z-parser-app-hero-mark-ink:var(--z-accent-ink);--z-parser-app-hero-text-ink:var(--z-ink-4);
--z-parser-app-ink:var(--z-ink-4);--z-parser-app-input-line:var(--z-line);
--z-parser-app-notice-bg:var(--z-soft-2);--z-parser-app-notice-ink:var(--z-ink-4);
--z-parser-app-shell-ink:var(--z-ink-4);--z-parser-app-state-bg:var(--z-soft-2);
--z-parser-app-state-bg-active:var(--z-soft-2);--z-parser-app-state-bg-degraded:var(--z-state-pending-dot);
--z-parser-app-state-bg-retired:var(--z-soft-2);--z-parser-app-state-ink-active:var(--z-health-ok);
--z-parser-app-state-ink-degraded:var(--z-state-pending-ink);--z-parser-app-state-ink-retired:var(--z-state-blocker-ink);
--z-parser-app-tab-ink-active:var(--z-ink-4);

/* ---------- ВИДЖЕТ ПОДДЕРЖКИ, ПОКАЗ И АГЕНТЫ ----------
   Всплывающее окно поддержки внутри приложения, страницы показа замысла и
   консоль агентов. Три небольших экрана, у каждого своя жизнь, но краски
   общие по смыслу. */
--z-agents-backdrop-bg:var(--z-soft-2);--z-agents-badge-bg-done:var(--z-soft-2);
--z-agents-button-ink:var(--z-ink-4);--z-agents-header-bg:var(--z-soft-2);
--z-agents-header-line-bottom:var(--z-line);--z-agents-header-mark-ink:var(--z-health-ok);
--z-agents-input-bg:var(--z-soft-2);--z-agents-input-ink:var(--z-ink-4);
--z-agents-input-line:var(--z-line);--z-agents-nav-button-ink:var(--z-ink-4);
--z-badge-ink:var(--z-health-ok);--z-callout-line-left:var(--z-level-result-line);
--z-card-small-ink:var(--z-ink-4);--z-item-bg-active:var(--z-soft-2);
--z-item-line-active:var(--z-accent);--z-presentation-control-ink:var(--z-ink);
--z-presentation-control-line:var(--z-line-2);--z-presentation-editor-bg:var(--z-surface-opaque);
--z-presentation-editor-bg-2:var(--z-soft-2);--z-presentation-editor-button-bg:var(--z-accent);
--z-presentation-editor-ink:var(--z-ink);--z-presentation-editor-line:var(--z-line-2);
--z-presentation-editor-ring:var(--z-focus-ring);--z-presentation-editor-text-ink:var(--z-ink-3);
--z-presentation-section-browser-bg:var(--z-soft-2);--z-scope-mark-ink:var(--z-ink-4);
--z-support-client-backdrop-bg:var(--z-soft-2);--z-support-client-form-ink:var(--z-ink-4);
--z-support-client-form-line:var(--z-line);--z-support-client-head-bg:var(--z-soft-2);
--z-support-client-head-line-bottom:var(--z-line);--z-support-client-input-bg:var(--z-soft-2);
--z-support-client-message-line-left-staff:var(--z-line);--z-support-client-meta-ink:var(--z-ink-4);
--z-support-client-panel-bg:var(--z-soft-2);--z-support-client-panel-button-bg:var(--z-soft-2);
--z-support-client-panel-button-line:var(--z-line);--z-support-client-panel-button-line-2:var(--z-line);
--z-support-client-panel-ink:var(--z-ink-4);--z-support-client-panel-line-left:var(--z-line);
--z-support-client-panel-ring:var(--z-focus-ring);--z-support-client-panel-shadow:var(--z-shadow-card);
--z-support-client-status-ink:var(--z-state-pending-ink);--z-timeline-line-left:var(--z-line);

/* ---------- ВЛАДЕЛЬЧЕСКИЕ ЭКРАНЫ МОДУЛЕЙ ----------
   Парсер-хаб и недвижимость, Рута, редирект, оценка заказа, номенклатура,
   передача исполнителю. Имена разведены по хозяину намеренно: «шапка» и
   «активный пункт» есть у каждого, и общее имя связало бы разные экраны в
   один — перекрасить один, не задев остальных, стало бы нечем. */
--z-executor-handoff-dialog-bg:var(--z-soft-2);--z-executor-handoff-dialog-button-bg:var(--z-soft);
--z-executor-handoff-dialog-button-line:var(--z-line-2);--z-executor-handoff-dialog-ink:var(--z-state-pending-ink);
--z-executor-handoff-dialog-line:var(--z-line-2);--z-executor-handoff-indicator-bg:var(--z-surface-opaque);
--z-executor-handoff-indicator-ink:var(--z-ink);--z-executor-handoff-indicator-line:var(--z-state-pending-line);
--z-executor-handoff-indicator-ring:var(--z-focus-ring);--z-executor-handoff-indicator-shadow:var(--z-shadow-card);
--z-nomen-brand-mark-bg:var(--z-accent);--z-nomen-brand-mark-ink:var(--z-accent-on);
--z-nomen-brand-mark-shadow:var(--z-shadow-card);--z-order-pricing-brand-mark-bg:var(--z-accent);
--z-order-pricing-brand-mark-ink:var(--z-ink-4);--z-order-pricing-hero-bg:var(--z-accent-a14);
--z-order-pricing-hero-line:var(--z-accent-a28);--z-order-pricing-nav-bg-active:var(--z-accent-a14);
--z-order-pricing-review-line-left:var(--z-state-pending-line);--z-parser-hub-branch-icon-bg:var(--z-accent-a45);
--z-parser-hub-branch-icon-line-right:var(--z-accent-a28);--z-parser-hub-branch-icon-line-top:var(--z-accent-a28);
--z-parser-hub-hero-bg:var(--z-soft-2);--z-parser-hub-hero-bg-2:var(--z-surface-opaque);
--z-parser-hub-hero-ink:var(--z-ink-4);--z-parser-hub-hero-label-ink:var(--z-ink-4);
--z-parser-hub-hero-line:var(--z-line-2);--z-parser-hub-hero-shadow:var(--z-shadow-card);
--z-parser-hub-hero-text-ink:var(--z-ink-4);--z-parser-hub-nav-bg-active:var(--z-accent-a14);
--z-parser-hub-nav-line-active:var(--z-accent-a28);--z-parser-hub-workspace-nav-button-bg:var(--z-accent-a14);
--z-parser-realty-hero-bg:var(--z-soft-2);--z-parser-realty-hero-ink:var(--z-ink-4);
--z-parser-realty-hero-shadow:var(--z-shadow-card);--z-parser-realty-hero-small-ink:var(--z-ink-4);
--z-parser-realty-hero-text-ink:var(--z-ink-4);--z-parser-realty-pill-icon-bg:var(--z-soft-2);
--z-parser-realty-pill-icon-bg-error:var(--z-danger);--z-parser-realty-pill-icon-bg-ok:var(--z-level-result);
--z-parser-realty-pill-icon-bg-warn:var(--z-state-pending-dot);--z-parser-realty-run-bg-selected:var(--z-accent-a14);
--z-redirect-button-bg-hover:var(--z-accent-a14);--z-redirect-button-line:var(--z-accent-a28);
--z-redirect-head-bg:var(--z-accent-a14);--z-redirect-head-line:var(--z-accent-a28);
--z-redirect-input-line-focus:var(--z-accent-a28);--z-redirect-input-ring:var(--z-focus-ring);
--z-redirect-kicker-ink:var(--z-accent);--z-redirect-metric-line:var(--z-accent-a28);
--z-redirect-nav-bg-active:var(--z-accent-a14);--z-redirect-nav-line-active:var(--z-accent-a28);
--z-ruta-owner-hero-bg:var(--z-soft-2);--z-ruta-owner-hero-ink:var(--z-ink-4);
--z-ruta-owner-hero-shadow:var(--z-shadow-card);--z-ruta-owner-hero-small-ink:var(--z-ink-4);
--z-ruta-owner-hero-text-ink:var(--z-ink-4);--z-ruta-owner-key-bg:var(--z-soft-2);
--z-ruta-owner-key-ink:var(--z-ink-4);--z-ruta-owner-key-ink-2:var(--z-ink-4);
--z-ruta-owner-plan-strong-bg:var(--z-accent);--z-ruta-owner-request-bg-selected:var(--z-accent-a14);
--z-ruta-owner-status-icon-bg:var(--z-soft-2);--z-ruta-owner-status-icon-bg-clarifying:var(--z-state-pending-dot);
--z-ruta-owner-status-icon-bg-qualified:var(--z-level-result);--z-ruta-owner-status-icon-bg-terminal:var(--z-soft-2);

/* ---------- ПЕРЕХОДЫ И СВЕЧЕНИЯ ДИСПЕТЧЕРА ----------
   Последние краски экрана, стоявшие числом: шапка помощника, кнопка вызова,
   плитка набора сцены, полоса срока, подсветка правки раскладки. Все они —
   переходы в несколько остановок, и каждый взят целиком одной ручкой. */
--z-agentera-head-bg:var(--z-accent);--z-ai-hero-bg:var(--z-accent);
--z-fab-bg-agentera:var(--z-accent);--z-layout-block-shadow:var(--z-shadow-card);
--z-ref-button-bg-primary:var(--z-accent);--z-ref-sla-cell-bg:var(--z-soft-2);
--z-ref-sla-cell-bg-bad:var(--z-soft-2);--z-ref-sla-cell-bg-warn:var(--z-soft-2);
--z-scene-preset-swatch-bg:var(--z-accent);--z-workspace-mark-bg:var(--z-accent);

/* ---------- ОЦЕНКА ЗАКАЗА, НОМЕНКЛАТУРА, НАСТРОЙКА CRM, ВИДЖЕТ РУТЫ ---------- */
--z-customization-evidence-bg:var(--z-level-result-soft);--z-customization-evidence-mark-ink:var(--z-ink-2);
--z-customization-tabs-button-bg:var(--z-soft-2);--z-definition-card-bg:var(--z-state-pending-soft);
--z-nomen-toast-bg:var(--z-soft-2);--z-nomen-toast-bg-error:var(--z-danger);
--z-nomen-toast-ink:var(--z-ink);--z-nomen-toast-ink-error:var(--z-danger-on);
--z-remove-button-ink:var(--z-state-pending-ink);--z-segment-rule-row-line:var(--z-line-2);
--z-widget-line:var(--z-wash-4);--z-widget-line-2:var(--z-wash-4);
--z-widget-line-top:var(--z-wash-3);--z-widget-shadow:var(--z-shadow-card);
--z-nomen-canvas-bg:var(--z-bg);--z-redirect-brand-mark-bg:var(--z-accent);
--z-list-sub-ink:var(--z-ink-3);
--z-tree-node-ink:var(--z-ink-2);
--z-tree-node-bg-current:var(--z-accent-soft);
--z-tree-node-ink-current:var(--z-ink);
--z-tabs-line-bottom:var(--z-line);
--z-tab-ink:var(--z-ink-3);
--z-tab-ink-2:var(--z-ink);
--z-tab-line-bottom:var(--z-accent);
--z-crumbs-ink:var(--z-ink-3);
--z-crumbs-sep-ink:var(--z-dash);
--z-crumbs-item-ink-current:var(--z-ink);
--z-step-line-top:var(--z-line);
--z-step-line-top-done:var(--z-level-result);
--z-step-line-top-active:var(--z-accent);
--z-step-line-top-failed:var(--z-state-failed-ink);
--z-step-name-ink:var(--z-ink);
--z-step-state-ink:var(--z-ink-3);
--z-step-state-ink-active:var(--z-accent-ink);
--z-step-state-ink-done:var(--z-level-result-ink);
--z-pagination-ink:var(--z-ink-3);
--z-pagination-page-line:var(--z-line-2);
--z-pagination-page-ink:var(--z-ink-2);
--z-pagination-page-bg-current:var(--z-accent);
--z-pagination-page-line-current:var(--z-accent);
--z-pagination-page-ink-current:var(--z-accent-on);
--z-textarea-line:var(--z-line-2);
--z-textarea-bg:var(--z-surface-opaque);
--z-textarea-ink:var(--z-ink);
--z-select-line:var(--z-line-2);
--z-select-bg:var(--z-surface-opaque);
--z-select-ink:var(--z-ink);
--z-check-ink:var(--z-ink-2);
--z-check-box-line:var(--z-dash-strong);
--z-check-box-bg:var(--z-surface-opaque);
--z-check-box-bg-2:var(--z-accent);
--z-check-box-line-2:var(--z-accent);
--z-check-mark-ink:var(--z-accent-on);
--z-check-focus-line:var(--z-focus-ring);
--z-check-focus-width:2px;
--z-check-focus-offset:2px;
--z-switch-bg:var(--z-line);
--z-switch-bg-picked:var(--z-accent);
--z-switch-bg-mark:var(--z-surface-opaque);
--z-progress-bg:var(--z-line);
--z-progress-fill-bg:var(--z-accent);
/* Второй конец заливки: полоса роста часто уходит из акцента в соседний тон,
   и без своей ручки этот конец писали цветом прямо в экране. */
--z-progress-fill-2:var(--z-accent-2);
--z-alert-line:var(--z-line);
--z-alert-bg:var(--z-surface);
--z-alert-ink:var(--z-ink-2);
--z-alert-line-pending:var(--z-state-pending-line);
--z-alert-bg-pending:var(--z-state-pending-soft);
--z-alert-line-blocked:var(--z-state-blocker-line);
--z-alert-bg-blocked:var(--z-state-blocker-soft);
--z-alert-line-done:var(--z-level-result-line);
--z-alert-bg-done:var(--z-level-result-soft);
/* Текст тревоги по состояниям. У семьи были фон и обводка, а текста не было —
   и его писали цветом в экране. Со значком состояния он не сводится: у
   тревоги крупный текст на мягкой заливке, у значка — мелкий на своей. */
--z-alert-ink-pending:var(--z-state-pending-ink);
--z-alert-ink-blocked:var(--z-state-blocker-ink);
--z-alert-ink-done:var(--z-level-result-ink);
--z-alert-title-ink:var(--z-ink);
--z-backdrop-bg:var(--z-canvas);
--z-modal-line:var(--z-line);
--z-modal-bg:var(--z-panel);
--z-modal-shadow:var(--z-shadow-far);
--z-modal-title-ink:var(--z-ink);
--z-disclosure-line:var(--z-line);
--z-disclosure-bg:var(--z-surface);
--z-disclosure-head-ink:var(--z-ink);
--z-disclosure-mark-line-right:var(--z-ink-3);
--z-disclosure-mark-line-bottom:var(--z-ink-3);
--z-disclosure-body-ink:var(--z-ink-2);
--z-slider-track-bg:var(--z-line);
--z-slider-fill-bg:var(--z-accent);
--z-slider-knob-bg:var(--z-surface-opaque);
--z-slider-knob-line:var(--z-accent);
--z-slider-knob-shadow:var(--z-shadow-contact);
--z-slider-ends-ink:var(--z-ink-3);
--z-upload-line:var(--z-dash-strong);
--z-upload-bg:var(--z-soft);
--z-upload-line-true:var(--z-accent);
--z-upload-bg-true:var(--z-accent-soft);
--z-upload-title-ink:var(--z-ink);
--z-upload-limit-ink:var(--z-ink-3);
--z-upload-file-line:var(--z-line);
--z-upload-file-bg:var(--z-surface-opaque);
--z-upload-file-ink:var(--z-ink-2);
--z-upload-file-line-failed:var(--z-state-blocker-line);
--z-upload-file-ink-failed:var(--z-state-failed-ink);
--z-date-line:var(--z-line-2);
--z-date-bg:var(--z-surface-opaque);
--z-date-ink:var(--z-ink);
--z-date-ic-ink:var(--z-ink-3);
--z-date-value-ink-true:var(--z-ink-3);
--z-date-line-overdue:var(--z-state-blocker-line);
--z-date-ink-overdue:var(--z-state-blocker-ink);
--z-spin-line:var(--z-line-2);
--z-spin-bg:var(--z-surface-opaque);
--z-spin-btn-ink:var(--z-ink-2);
--z-spin-btn-bg-hover:var(--z-soft-2);
--z-spin-value-ink:var(--z-ink);
--z-link-say-ink:var(--z-link-ahead-ink);
--z-link-say-ink-depends:var(--z-link-depends-ink);
--z-link-say-ink-risk:var(--z-link-risk-ink);
--z-link-say-ink-affects:var(--z-link-affects-ink);
--z-link-say-ink-amplifies:var(--z-link-amplifies-ink);
--z-link-say-ink-alt:var(--z-link-amplifies-ink);
--z-scene-bloom-bg:var(--z-bloom-scene);
--z-scene-bloom--warm-bg:var(--z-bloom-scene-warm);
--z-heat-name-ink:var(--z-ink);
--z-heat-why-ink:var(--z-ink-3);
--z-sticky-top-bg:var(--z-surface-opaque);
--z-sticky-bottom-bg:var(--z-surface-opaque);
--z-sticky-bottom-line-top:var(--z-line);
--z-table-bg-sticky:var(--z-surface-opaque);
--z-flow-start-name-ink:var(--z-ink);
--z-flow-start-fact-ink:var(--z-ink-3);
--z-flow-say-bg:var(--z-surface-opaque);
--z-flow-say-line:var(--z-state-pending-line);
--z-flow-say-ink:var(--z-state-pending-ink);
--z-flow-say-shadow:var(--z-shadow-contact);
--z-lens-split-bg:var(--z-line);
--z-lens-mark-ink:var(--z-ink-2);
--z-lens-num-ink:var(--z-ink);
--z-lens-side-ink-want:var(--z-accent-ink);
--z-lens-side-ink-got:var(--z-level-result-ink);
--z-lens-of-ink:var(--z-ink-3);
--z-lens-unit-ink:var(--z-ink-3);
--z-lens-sign-ink:var(--z-ink-2);
--z-lens-sign-bg:var(--z-surface-opaque);
--z-lens-sign-shadow:var(--z-shadow-contact);
--z-lens-say-ink:var(--z-ink-2);
--z-section-name-ink:var(--z-ink);
--z-section-why-ink:var(--z-ink-3);
--z-section-aside-ink:var(--z-ink-3);


/* ---------- СМЫСЛЫ, ПРИШЕДШИЕ ИЗ WorkOS ----------
   Девять значений, которых в фундаменте не было, а в живом WorkOS они несут
   смысл. Взяты его значениями, чтобы вид не сдвинулся. Ждут вашего слова:
   палитру меток и «на проверке» стоит утвердить или заменить — они станут
   общими для всех приложений.
   ДОЛГ: тёмного двойника у них пока нет; WorkOS тем не поддерживает. */
--z-accent-2:#5f55e8;            /* второй акцент: градиенты, вторичные выделения */
--z-review:#7650e9;              /* «на проверке» — ждёт подтверждения */
--z-warn:#e98919;                /* предупреждение, мягче опасности */
--z-tag-blue:#075bd2;--z-tag-green:#087a4a;--z-tag-orange:#a84f00;
--z-tag-red:#ed5148;--z-tag-teal:#08767b;--z-tag-violet:#b79cff;--z-tag-slate:#6884a5;

/* ---------- СМЫСЛЫ, ПРИШЕДШИЕ ИЗ ДИСПЕТЧЕРА ----------
   Четыре значения, которых в фундаменте не было. Взяты его значениями, чтобы
   вид не сдвинулся. «Среда» — фон рабочего поля диспетчера: две подложки и
   сетка поверх них; отдельный смысл, потому что это не полотно и не карточка.
   ДОЛГ: тёмного двойника нет — у диспетчера своя тёмная палитра в профиле. */
--z-accent-2-soft:#f3e8ff;       /* мягкая подложка второго акцента */
--z-env-a:#080f11;--z-env-b:#0c1a1e;  /* подложки рабочей среды */
--z-env-grid:rgba(36,193,210,.06);    /* сетка поверх среды */
/* Тёмная панель навигации: рельс или шапка, залитая почти чёрным, поверх
   светлого полотна. Не полотно и не карточка — отдельный смысл, пришёл из
   Поддержки, где вся навигация стоит на нём. */
--z-nav-bg:#101a22;--z-nav-ink:#FFFFFF;

/* Нейтральная плёнка. Серый 127 одинаково работает на светлом и на тёмном:
   он не красит, а притеняет. Этим держатся наведение, поле поиска в тёмной
   колонке и прочие места, где нужен «чуть темнее фона», какой бы фон ни был. */
--z-wash-1:rgba(127,127,127,.06);--z-wash-2:rgba(127,127,127,.08);--z-wash-3:rgba(127,127,127,.1);--z-wash-4:rgba(127,127,127,.3);

/* Боковая колонка: тёмная полоса с меню, поиском и знаком. Отличается от
   верхней навигации тем, что стоит вдоль, и её фон обычно градиент. */
--z-rail-bg:var(--z-nav-bg);--z-rail-ink:var(--z-ink-2);
--z-rail-field-bg:var(--z-wash-1);--z-rail-field-bg-hover:var(--z-wash-3);
--z-nav-item-ink:var(--z-ink-2);--z-nav-item-bg-hover:var(--z-wash-2);
--z-nav-item-bg-active:var(--z-accent-a14);--z-nav-item-line-active:var(--z-accent-a28);

/* Знак продукта: слои и подпись. Слои — не «синий, голубой, светлый», а
   первый, второй и третий: перекрасить знак целиком можно тремя строками. */
--z-brand-layer-1:var(--z-accent);--z-brand-layer-2:var(--z-accent-light);--z-brand-layer-3:var(--z-accent-soft);
--z-brand-mark-bg:var(--z-accent);--z-brand-mark-ink:var(--z-ink-inverse);--z-brand-mark-glow:none;
--z-brand-title-ink:var(--z-ink);

/* Точка состояния светится своим цветом: свечение — отдельная ручка, потому
   что это тень, а не заливка, и гасится оно независимо. */
--z-dot-bg-active:var(--z-accent);--z-dot-glow-active:none;
--z-dot-glow-ok:none;--z-dot-glow-warn:none;--z-dot-glow-err:none;--z-dot-glow-ai:none;
--z-dot-bg-future:var(--z-wash-4);

/* Врезка: короткое замечание в потоке. По умолчанию — внимание. */
--z-callout-bg:var(--z-state-pending-soft);--z-callout-line:var(--z-state-pending-line);
--z-callout-bg-info:var(--z-accent-soft);--z-callout-line-info:var(--z-accent-soft-line);
--z-callout-bg-warn:var(--z-state-pending-soft);--z-callout-line-warn:var(--z-state-pending-line);

/* ---------- КЛАССИЧЕСКИЙ ВАРИАНТ ВИДА ----------
   Второй вид продукта — «как обычный task manager». Имена --z-classic-*
   принадлежат словарю, а ЗНАЧЕНИЙ здесь нет намеренно: они собственность
   модуля и живут в его профиле, по контекстам. Объявишь их тут — и в
   документе без [data-dispatcher-view] появится цвет, которого не было:
   проверено, сдвинуло семь значений из 3120.
   Набор: bg surface surface-raised surface-soft rail hover line line-2
   line-3 ink ink-2 ink-3 accent accent-soft ok ok-soft warn warn-soft
   danger danger-soft shadow. Профиль: shared/profiles/dispatcher.css */
/* Тени оболочки продукта. Свои, а не из общей шкалы: переключатель приложений
   и диалог настроек сделаны шире и мягче остальных карточек, и подмена их
   ближайшим токеном сдвинула бы вид — проверено. */
--z-shell-shadow-switcher:0 14px 40px rgba(15,23,42,.16);
--z-shell-shadow-dialog:0 28px 80px rgba(15,23,42,.3);
/* узел маршрута */
--z-node-bg:var(--z-surface);--z-node-line:var(--z-route-compact-done);
--z-node-shadow:var(--z-ring-done),var(--z-glass-top),var(--z-shadow-card);
--z-node-bg-confirmed:var(--z-surface-opaque);--z-node-line-confirmed:var(--z-route-compact-done);
--z-node-shadow-confirmed:var(--z-ring-done),var(--z-glass-top),var(--z-shadow-contact);
--z-node-ink-confirmed:var(--z-level-result-ink);
--z-node-shadow-done:var(--z-ring-done),var(--z-glass-top),var(--z-shadow-contact);
--z-node-ink-done:var(--z-level-result-ink);
--z-node-line-next:var(--z-dash-strong);--z-node-shadow-next:var(--z-ring-plan);
--z-node-line-unproven:var(--z-dash-strong);
--z-node-line-failed:var(--z-state-failed-ink);--z-node-bg-failed:var(--z-state-failed-soft);
--z-node-bg-active:var(--z-accent);--z-node-line-active:transparent;
--z-node-shadow-active:var(--z-ring-current),var(--z-shadow-node-active);
--z-node-ink-active:var(--z-accent-ink);
--z-node-dot-ink:var(--z-accent-on);--z-node-dot-ink-next:var(--z-dash-strong);
--z-node-label-ink:var(--z-ink);--z-node-state-ink:var(--z-ink-3);
/* карточка */
--z-card-bg:var(--z-surface);--z-card-line:var(--z-surface-border);
/* Тёмная карточка: её текст светлее фона, а не темнее. Отдельная ручка нужна
   потому, что карточка и знак на тёмном поле — разные места: свести их в один
   мягкий тон значит подвинуть один из них на шесть единиц, а это видно. */
--z-card-dark-ink:var(--z-ink-inverse-soft);
--z-card-shadow:var(--z-glass-top),var(--z-glass-bottom),var(--z-shadow-card);
--z-card-shadow-main:var(--z-glass-top),var(--z-glass-bottom),var(--z-shadow-raised);
--z-card-shadow-hover:var(--z-glass-top),var(--z-glass-bottom),var(--z-shadow-raised);
--z-card-glass-bg:var(--z-glass-body);--z-card-glass-line:var(--z-glass-edge);
--z-card-shadow-glass:var(--z-glass-top),var(--z-glass-bottom),var(--z-shadow-contact);
--z-card-glass-bg-muted:var(--z-glass-body-muted);
--z-card-glass-bg-accent:var(--z-glass-body-accent);--z-card-glass-line-accent:var(--z-glass-edge-accent);
/* вариант решения */
--z-option-line:var(--z-line);--z-option-bg:transparent;
--z-option-line-picked:var(--z-accent);--z-option-bg-picked:var(--z-accent-selected-bg);
--z-option-radio-line:var(--z-dash);
--z-option-radio-bg-picked:var(--z-accent);--z-option-radio-line-picked:var(--z-accent);
--z-option-name-ink:var(--z-ink);--z-option-cost-ink:var(--z-ink-2);
--z-option-rev-ink-ok:var(--z-rev-ok);--z-option-rev-ink-effort:var(--z-rev-effort);--z-option-rev-ink-no:var(--z-rev-no);
--z-option-pay-line:var(--z-line);--z-option-pay-bg:var(--z-soft);--z-option-pay-ink:var(--z-ink-2);
--z-option-pay-line-ok:var(--z-level-result-line);--z-option-pay-bg-ok:var(--z-level-result-soft);--z-option-pay-ink-ok:var(--z-level-result-ink);
--z-option-pay-line-effort:var(--z-state-pending-line);--z-option-pay-bg-effort:var(--z-state-pending-soft);--z-option-pay-ink-effort:var(--z-state-pending-ink);
--z-option-pay-line-no:var(--z-state-blocker-line);--z-option-pay-bg-no:var(--z-state-blocker-soft);--z-option-pay-ink-no:var(--z-state-blocker-ink);
--z-option-card-bg:var(--z-surface);--z-option-proof-ink:var(--z-ink-3);
--z-option-card-line-ok:var(--z-level-result-line);--z-option-card-bg-ok:var(--z-level-result-bg);
--z-option-card-line-effort:var(--z-state-critical-line);--z-option-card-bg-effort:var(--z-state-critical-soft);
}

/* ---------- ФОН-РЕЦЕПТ (А §2.1а) ----------
   Три рецепта: градиент 176° в четыре стопа; плоский дубль --z-bg-flat/--z-canvas-flat
   для forced-colors, печати и моста; мобильная раскладка стопов. Стопы — единственные
   литералы вне яруса 1: рецепт меняется и темой, и шириной, поэтому живёт целиком
   в ярусе смысла. --z-c-bg-flat в каждой теме равен --z-c-bg (плоский дубль градиента). */
:root{--z-bg-flat:var(--z-c-bg-flat);--z-canvas-flat:var(--z-c-bg-flat);
--z-bg:linear-gradient(176deg,#FDFCFA 0%,#FBFCFD 34%,#F6F9FC 70%,#F3F6FB 100%)}
:root:is([data-preference-theme="deep_evening"],:not([data-preference-theme])[data-theme="dark"]){--z-bg:linear-gradient(176deg,#0B1220 0%,#080D17 40%,#070C15 72%,#060A12 100%)}
:root:is([data-preference-theme="warm_focus"],:not([data-preference-theme])[data-theme="hybrid"]){--z-bg:var(--z-bg-flat)} /* градиента для тёплой в макетах нет — плоско, носителя ждём */

/* ---------- ОСЬ accent · preferences.js:77 ставит data-accent, :78 — data-atmosphere ----------
   Блок оси задаёт только примитив, блок темы выводит из него смысл. */
:root:is([data-accent="cyan"],[data-atmosphere="cyan"]){--z-accent:#0A6F86;--z-accent-hover:#085566;--z-accent-rgb:10,111,134;--z-accent-soft:#E6F1F4;--z-accent-soft-line:#C9DFE6;--z-accent-selected-bg:#F7FBFC} /* hover предложено */
:root:is([data-accent="violet"],[data-atmosphere="violet"]){--z-accent:#6B4FD0;--z-accent-hover:#5639B8;--z-accent-rgb:107,79,208;--z-accent-soft:#F0ECFB;--z-accent-soft-line:#DBD2F4;--z-accent-selected-bg:#FBFAFF} /* hover предложено */
:root:is([data-accent="warm"],[data-atmosphere="warm"]){--z-accent:#B4600F;--z-accent-hover:#8F4C0B;--z-accent-rgb:180,96,15;--z-accent-soft:#FBF0E4;--z-accent-soft-line:#F0D9BE;--z-accent-selected-bg:#FFFBF6} /* hover предложено */
/* строки :root[data-preference-theme="warm_focus"]:not([data-accent]) НЕТ: preferences.js:75
   ставит preference-theme и тут же :77 — data-accent (умолчание blue, appearance-model.js:5),
   селектор не сработает никогда. Связка warm_focus+violet (#6B4FD0, a0210914) — пресет каталога. */

/* ---------- тёмная тема · акцент светлее, состояния своим тоном ---------- */
:root:is([data-preference-theme="deep_evening"],:not([data-preference-theme])[data-theme="dark"]){
--z-accent:#3B82F6;--z-accent-hover:#7FB2FF;--z-accent-rgb:59,130,246;--z-accent-on:#08121F;
--z-accent-soft:#17294A;--z-accent-soft-line:#2A4373;--z-accent-selected-bg:rgba(23,41,74,.6);--z-focus-ring:#7FB2FF;
--z-accent-ink:var(--z-accent-hover);
--z-level-success:#B9A6F5;--z-level-value:#E0BE72;
--z-level-completion:#5F6E84;--z-level-result:#4FBF85;--z-level-result-ink:#6FD39B;--z-level-result-soft:#16311F;--z-level-result-line:#2C5341;
--z-level-success-soft:#251E45;--z-level-success-line:#3D3270;--z-level-value-soft:#33280F;--z-level-value-line:#5C4720;
/* Одиннадцать значений светлой палитры не имели тёмного двойника: подложка
   «результат подтверждён», мягкая подложка «не получилось» и «завершено»
   оставались почти белыми, а чернила уровней, сноска рекомендации и четыре
   цвета связей — тёмными. На тёмном полотне это давало от 1,04 до 3,72 при
   норме 4,5 — светлый текст на светлой плашке и тёмная линия на тёмном фоне. */
--z-level-result-bg:#122A1C;--z-state-failed-soft:#33191A;--z-level-completion-soft:#1D2740;
--z-level-completion-ink:#A3B2C8;--z-level-success-ink:#B9A6F5;--z-level-value-ink:#E0BE72;
--z-state-recommend-note:#A99FC8;
--z-link-affects:#4FBF85;--z-link-depends:#5B9BFF;--z-link-amplifies:#9B84F5;--z-link-risk:#E8A24A;
--z-bg-photo-veil:linear-gradient(180deg,rgba(8,13,23,.78) 0%,rgba(8,13,23,.84) 100%);
--z-photo-veil:linear-gradient(180deg,rgba(8,13,23,.18) 0%,rgba(8,13,23,.48) 100%);
--z-flow-plan-0:rgba(79,191,133,.5);--z-flow-plan-1:rgba(79,191,133,.14);
--z-flow-risk-0:rgba(232,162,74,.5);--z-flow-risk-1:rgba(232,162,74,.14);
--z-flow-alt-0:rgba(155,132,245,.46);--z-flow-alt-1:rgba(155,132,245,.12);
--z-flow-forecast-0:rgba(91,155,255,.32);--z-flow-forecast-1:rgba(91,155,255,.1);
--z-lens-glow:0 26px 60px -30px rgba(0,0,0,.6),0 0 90px -40px rgba(59,130,246,.4);
--z-bloom-scene:radial-gradient(46% 58% at 52% 76%,var(--z-accent-a18) 0%,transparent 72%);
--z-bloom-scene-warm:radial-gradient(52% 62% at 24% 84%,rgba(70,48,20,.5) 0%,transparent 70%);
--z-dim-op:.34;
--z-state-pending-ink:#F2C089;--z-state-pending-line:#6B4A1E;--z-state-pending-line-2:#6B4A1E;--z-state-pending-soft:rgba(70,48,20,.55);--z-state-pending-dot:#E8A24A;
--z-state-blocker-ink:#FF9B86;--z-state-blocker-line:#6B2C22;--z-state-blocker-soft:rgba(74,26,20,.6);
--z-state-conflict-ink:#FFA8C8;--z-state-conflict-line:#6E2F4C;--z-state-conflict-soft:rgba(62,24,44,.5);--z-state-conflict-dot:#E06A9B;
--z-state-recommend-ink:#C7B8FF;--z-state-recommend-line:#6B5AA8;--z-state-recommend-soft:rgba(37,30,69,.6);--z-state-recommend-text:#E4DDFF;
--z-state-alt-line:#9B84F5;--z-state-alt-ink:#C7B8FF;
--z-state-critical-soft:rgba(56,30,14,.55);--z-state-critical-soft-2:rgba(56,38,14,.5);--z-state-critical-line:#6B4A1E;
--z-state-failed-ink:#FF9B86;--z-danger:#C2452C;--z-health-ok:#4FBF85;--z-health-degraded:#E8A24A;--z-health-denied:#E06A9B;--z-honest-ink:#9FB0C8;
--z-tile-green-0:#123324;--z-tile-green-1:#0D281C;--z-tile-cyan-0:#11333F;--z-tile-cyan-1:#0B2733;
--z-tile-amber-0:#3A2A12;--z-tile-amber-1:#2C1F0C;--z-tile-rose-0:#3A1E18;--z-tile-rose-1:#2C1410;
--z-tile-pink-0:#34203A;--z-tile-pink-1:#28182E;--z-tile-grey-0:#1A2333;--z-tile-grey-1:#141C2A;
--z-tile-white-0:#0D1A22;--z-tile-white-1:#0A151C;--z-tile-solid-0:#6FD6A0;--z-tile-solid-1:#4FBF85;
--z-route-done-0:#4FBF85;--z-route-done-mid:#49A8C4;--z-route-done-1:#45C8E0;--z-route-compact-done:#4FBF85;--z-route-compact-ahead:#667694;--z-route-compact-alt:#9B84F5; /* ahead поднят с #3B4A66 (1,96) до dash-strong: линия «впереди» — знак без слова */
--z-ring-done:0 0 0 5px rgba(79,191,133,.10);
--z-shadow-card:var(--z-shadow-none);--z-shadow-raised:var(--z-shadow-none); /* глубина рамкой и ступенью светлоты; highlight-top и кромка снизу остаются. Моста это не касается: --owner-shadow держит своё значение */
--z-shadow-node-active:0 12px 30px -8px var(--z-accent-a80)}
/* акцент в тёмной перекрывает ось: без этого блока выбор владельца съедается. Вместе с
   --z-accent идут все три производные подложки, иначе выбранный вариант и плитка остаются
   синими при violet/cyan/warm. Правило вывода (калибровано по a0210914: #1B6BF0 → l+.06,
   c*.88 = #3E81F6 ≈ #3B82F6; прежние l+.16 / c*.92 дают #58A1FF — слишком светло).
   cyan/violet/warm — предложено: #45C8E0 снят с тёмного 65908742, #9B84F5 и #E8A24A — из
   83c62a28; триады violet (#251E45/#3D3270/.6) сняты с a0210914, триады cyan и warm носителя
   не имеют и выведены формулой от --z-accent (подложка l≈.22, кромка l≈.34, selected-bg —
   подложка при .6). Тёплый акцент совпадает с --z-state-pending-dot/--z-health-degraded —
   проверить на слияние. */
:root:is([data-preference-theme="deep_evening"],:not([data-preference-theme])[data-theme="dark"]):is([data-accent="cyan"],[data-atmosphere="cyan"]){--z-accent:#45C8E0;--z-accent-hover:#7FDCEE;--z-accent-rgb:69,200,224;--z-accent-soft:#11333F;--z-accent-soft-line:#1F5162;--z-accent-selected-bg:rgba(17,51,63,.6)}
:root:is([data-preference-theme="deep_evening"],:not([data-preference-theme])[data-theme="dark"]):is([data-accent="violet"],[data-atmosphere="violet"]){--z-accent:#9B84F5;--z-accent-hover:#C7B8FF;--z-accent-rgb:155,132,245;--z-accent-soft:#251E45;--z-accent-soft-line:#3D3270;--z-accent-selected-bg:rgba(37,30,69,.6)}
:root:is([data-preference-theme="deep_evening"],:not([data-preference-theme])[data-theme="dark"]):is([data-accent="warm"],[data-atmosphere="warm"]){--z-accent:#E8A24A;--z-accent-hover:#F2C089;--z-accent-rgb:232,162,74;--z-accent-soft:#3A2A12;--z-accent-soft-line:#6B4A1E;--z-accent-selected-bg:rgba(58,42,18,.6)}

/* ---------- ФОЛБЭКИ относительного цвета (относительный цвет и фолбэки — только здесь) ---------- */
@supports not (color:color-mix(in srgb,#000,#fff)){
:root{--z-accent-a04:rgba(27,107,240,.04);--z-accent-a06:rgba(27,107,240,.06);--z-accent-a08:rgba(27,107,240,.08);--z-accent-a10:rgba(27,107,240,.1);--z-accent-a12:rgba(27,107,240,.12);--z-accent-a14:rgba(27,107,240,.14);--z-accent-a18:rgba(27,107,240,.18);--z-accent-a28:rgba(27,107,240,.28);--z-accent-a45:rgba(27,107,240,.45);--z-accent-a80:rgba(27,107,240,.8)}
:root:is([data-accent="cyan"],[data-atmosphere="cyan"]){--z-accent-a14:rgba(10,111,134,.14);--z-accent-a80:rgba(10,111,134,.8)}
:root:is([data-accent="violet"],[data-atmosphere="violet"]){--z-accent-a14:rgba(107,79,208,.14);--z-accent-a80:rgba(107,79,208,.8)}
:root:is([data-accent="warm"],[data-atmosphere="warm"]){--z-accent-a14:rgba(180,96,15,.14);--z-accent-a80:rgba(180,96,15,.8)}}
@supports not (color:oklch(from #000 l c h)){
:root{--z-accent-active:#114FBB;--z-accent-light:#7FB2FF}
:root{--z-btn-primary-bg:var(--z-c-btn-primary-bg);--z-btn-primary-hover:var(--z-c-btn-primary-hover)}
:root:is([data-accent="cyan"],[data-atmosphere="cyan"]){--z-accent-active:#085566;--z-accent-light:#45C8E0}
:root:is([data-accent="violet"],[data-atmosphere="violet"]){--z-accent-active:#5639B8;--z-accent-light:#9B84F5}
:root:is([data-accent="warm"],[data-atmosphere="warm"]){--z-accent-active:#8F4C0B;--z-accent-light:#E8A24A}}

/* ---------- прочие оси ---------- */
:root[data-density="compact"]{--z-space:12px;--z-control:36px;--z-control-small:32px;--z-row:var(--z-row-compact);--z-polotno-pad:12px;--z-col-gap:12px}
/* opaque снимает альфу везде, где она есть на поверхности, вложении, рейке, фишке, панели,
   недоказанном блоке, стекле и кромках. Фон-вуаль (--z-bg-veil) не трогаем: она лежит на
   полотне фона, а не на карточке. */
:root[data-transparency="opaque"]{--z-surface:var(--z-c-surface-opaque);--z-nested:var(--z-c-surface-opaque);--z-rail:var(--z-c-surface-opaque);--z-chip:var(--z-c-surface-opaque);--z-panel:var(--z-c-surface-opaque);--z-unproven:var(--z-c-surface-opaque);--z-surface-border:var(--z-c-line-2);--z-glass-body:var(--z-c-glass-flat);--z-glass-body-muted:var(--z-c-glass-flat);--z-glass-body-accent:var(--z-c-glass-flat);--z-glass-edge:var(--z-c-line)}
:root[data-font-scale="90"]{--owner-font-scale:.9}
:root[data-font-scale="100"]{--owner-font-scale:1}
:root[data-font-scale="110"]{--owner-font-scale:1.1}
/* Ось «кегль» кормит мост, а мост — множитель --z-fu, на котором стоят все
   двадцать размеров. Раньше ось была объявлена в модели, но ни одного правила
   под неё не существовало: переключатель двигался, кегль не менялся. */
:root[data-background="plain"]{--z-bg-layer-1:none;--z-bg-layer-2:none;--z-bg-bloom:none;--z-grain-opacity:0;--z-shadow-card:var(--z-shadow-none);--z-shadow-raised:var(--z-shadow-none)}
:root[data-background="contrast"]{--z-line:var(--z-c-dash-2);--z-surface-border:var(--z-c-line-2)}
/* motion: переменные гасят только наши анимации. Литеральные длительности живут в 10 из
   31 файла стилей (39 штук: apps/web/public/styles.css — 20 строк, workos — 4, ruta и
   ruta-web — по 2), поэтому оба правила ниже обязательны. Дословный дубль лежит в
   product-shell.css:28-29 и подключается рантаймом — правится синхронно.
   Явный motion="full" сознательно перекрывает системную настройку. */
:root[data-motion="reduced"]{scroll-behavior:auto;--z-bg-drift-1:0s;--z-bg-drift-2:0s;--z-bg-bloom-dur:0s;--z-dur-1:.01ms;--z-dur-2:.01ms;--z-dur-3:.01ms;--z-dur-draw:.01ms;--z-dur-breathe:.01ms;--z-dur-flow:.01ms;--z-dur-heat:.01ms;--z-dur-dim:.01ms}
:root[data-motion="reduced"] *,:root[data-motion="reduced"] *::before,:root[data-motion="reduced"] *::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
@media (prefers-reduced-motion:reduce){
:root:not([data-motion="full"]){scroll-behavior:auto;--z-bg-drift-1:0s;--z-bg-drift-2:0s;--z-bg-bloom-dur:0s;--z-dur-1:.01ms;--z-dur-2:.01ms;--z-dur-3:.01ms;--z-dur-draw:.01ms;--z-dur-breathe:.01ms;--z-dur-flow:.01ms;--z-dur-heat:.01ms;--z-dur-dim:.01ms}
:root:not([data-motion="full"]) *,:root:not([data-motion="full"]) *::before,:root:not([data-motion="full"]) *::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
/* шрифт объявлен на :root через var(); в оболочке те же оси заданы на body
   (product-shell.css:26-27) и перекрывают :root — apps/web/public/index.html tokens.css
   не подключает. Либо перевести обе точки на var(--z-font-sans), либо оставить
   product-shell.css источником для оболочки; молча заменять одну нельзя. */
:root[data-typography="signature"]{--z-font-sans:"Iowan Old Style","Palatino Linotype",Georgia,serif}
:root[data-typography="readability"]{--z-font-sans:"Atkinson Hyperlegible",Arial,ui-sans-serif,system-ui,sans-serif}
/* точка входа в мобильный режим — 767 (В3), не 640: цель пальца 44 и высота контролов
   поднимаются вместе, тут же перекладываются стопы фона (те же цвета, 30/72 % и 38/74 %). */
@media (max-width:767px){
:root,:root[data-density="compact"]{--z-control:var(--z-control-mobile);--z-control-small:var(--z-control-mobile)}
:root{--z-page-pad:16px;--z-content-pad:16px;--z-header-h:56px;--z-hit:44px;--z-fs-screen:calc(27px*var(--z-fu));--z-fs-goal:calc(23px*var(--z-fu));--z-bg:linear-gradient(176deg,#FDFCFA 0%,#FBFCFD 30%,#F6F9FC 72%,#F3F6FB 100%)}
:root:is([data-preference-theme="deep_evening"],:not([data-preference-theme])[data-theme="dark"]){--z-bg:linear-gradient(176deg,#0B1220 0%,#080D17 38%,#070C15 74%,#060A12 100%)}}
@media (forced-colors:active){:root{--z-bg:var(--z-bg-flat);--z-glass-body:none;--z-glass-body-muted:none;--z-glass-body-accent:none;--z-shadow-card:var(--z-shadow-none);--z-shadow-raised:var(--z-shadow-none);--z-grain-opacity:0}}
@media print{:root{--z-bg:var(--z-bg-flat);--z-polotno:var(--z-canvas-flat);--z-grain-opacity:0;--z-shadow-card:var(--z-shadow-none);--z-shadow-raised:var(--z-shadow-none)}}

/* ---------- МОСТ --owner-* (имена читают восемь приложений) ----------
   Цвет — наш, метрика — их. Поверхность и фон отдаются непрозрачными и плоскими:
   под --owner-surface стоят sticky-колонка матрицы доступа, список приложений,
   модаль настроек и футер презентации — просвечивать им нечем. Геометрия и тень
   держат сегодняшние значения девяти чужих файлов дословно; если владелец решит
   отдать мосту новую метрику и снятие теней в тёмной — это отдельная строка
   SCOPE-DELTA и ожидаемое расхождение в проверке 8.7, а не побочный эффект. */
:root{--owner-bg:var(--z-bg-flat);--owner-surface:var(--z-surface-opaque);--owner-soft:var(--z-soft);
--owner-text:var(--z-ink);--owner-muted:var(--z-ink-3);--owner-border:var(--z-line);
--owner-accent:var(--z-accent);--owner-accent-rgb:var(--z-accent-rgb);
--owner-danger:var(--z-danger);--owner-warning:var(--z-state-pending-ink);--owner-success:var(--z-level-result);
/* Опасность как ЧЕРНИЛА — отдельно от заливки. Один --owner-danger нёс обе роли:
   фоном кнопки он проходит (белый на нём 5.02), а текстом в тёмной теме даёт 3.43
   при норме 4.5. Девять мест в приложениях красили им текст. Сверка с макетом
   65908742 это и показала: там та же роль решена светлым #FF8A72. */
--owner-danger-ink:var(--z-state-blocker-ink);
--owner-shadow:0 16px 45px rgba(25,48,81,.09);--owner-space:16px;--owner-control:40px;
--owner-font-scale:1}   /* preferences.js:79 переписывает inline */
:root[data-density="compact"]{--owner-space:10px;--owner-control:34px}
