/* ===========================================================
   LUMEN v3 — слой компонентов  ·  lumen.css  ·  02.09.2026
   Канон: ../../DESIGN_SYSTEM.md (v3). Правила G1–G10 КАМЕРТОН.
   Требует: tokens.css → fonts.css → (tablo*.css, product.css, каркас.css — если
   экран старый) → lumen.css → <контур>.css.
   Все классы с префиксом lm- (G6): не пересекаются с product.css / tablo.css,
   поэтому слой ставится поверх любого старого экрана без дрейфа.
   Цвет — только var(--…) и color-mix от токенов (G4): тёмная тема приходит сама.
   Формула: QUIET PRECISION + DATA DENSITY + AMBIENT MOMENTS.
   =========================================================== */

/* ─── 0. Расширение словаря токенов (v3) ─────────────────────────────────
   tokens.css не трогается (G1). Всё новое живёт здесь под префиксом --lm-. */
:root{
  --lm-accent:var(--blue);                 /* интерактив: фокус, ссылки, активный фильтр */
  /* шкала по умолчанию для состава и порядка — нейтраль тёплого графита, а не пять цветов:
     цвет получает ОДНА серия, о которой заголовок (emphasis). Донор: codedvisuals.com, dataviz */
  --lm-mono-1:var(--surface-4); --lm-mono-2:var(--ink-5); --lm-mono-3:var(--ink-4); --lm-mono-4:var(--ink-3); --lm-mono-5:var(--ink-2);
  --lm-emph:var(--purple);                  /* единственный цвет данных на форме по умолчанию */
  --lm-emph-2:var(--orange);                /* вторая серия, когда сравниваются ровно две */
  --lm-accent-bg:color-mix(in srgb,var(--blue) 10%,transparent);
  --lm-primary:var(--ink);                 /* единственное primary-действие — тёмная кнопка */
  --lm-primary-ink:var(--surface);

  /* тинты статусов через color-mix: одинаково живут в обеих темах */
  --lm-ok-bg:color-mix(in srgb,var(--ok) 12%,transparent);
  --lm-warn-bg:color-mix(in srgb,var(--warm) 14%,transparent);
  --lm-bad-bg:color-mix(in srgb,var(--cold) 12%,transparent);
  --lm-info-bg:color-mix(in srgb,var(--info) 12%,transparent);
  --lm-neutral-bg:var(--surface-3);

  /* иконки: один набор, один размер, одна толщина */
  --lm-icon:18px; --lm-icon-sm:16px; --lm-icon-xs:14px; --lm-icon-stroke:1.75;

  /* типографика v3 */
  --lm-h1:24px; --lm-h2:18px; --lm-h3:15px;
  --lm-kpi:30px; --lm-kpi-w:560; --lm-display:40px;
  --lm-body:13.5px; --lm-small:12px; --lm-micro:11px;
  /* §41 Speculator: гарнитура Onest — кириллица родная, строка на 1 % уже Geist.
     Geist остаётся у слоя обслуживания: html[data-face="lumen"]. */
  --font-spec:'Onest','Geist',Inter,-apple-system,BlinkMacSystemFont,system-ui,sans-serif;

  /* геометрия */
  --r-md:var(--r-card);                    /* в tokens.css есть xs·sm·card·lg·xl; md = card (12px), найдено lumen-lint */
  --lm-side-w:264px; --lm-top-h:60px;
  --lm-card-pad:18px; --lm-card-r:var(--r-lg);
  --lm-gap:14px; --lm-row-h:52px; --lm-row-h-compact:42px;
  --lm-ctl:36px; --lm-ctl-sm:30px;

  /* графики */
  --lm-area-top:.22; --lm-area-bottom:0;   /* градиент под кривой: прозрачность верх/низ */
  --lm-spark-w:84px; --lm-spark-h:36px;

  /* фокус и слои */
  --lm-ring:0 0 0 3px color-mix(in srgb,var(--blue) 28%,transparent);
  --lm-z-sticky:30; --lm-z-menu:40; --lm-z-drawer:50; --lm-z-modal:60; --lm-z-toast:70; --lm-z-tip:80;
}

/* ─── 1. База (мягкая: не ломает старые экраны) ───────────────────────── */
.lm{font-family:var(--font-spec,var(--font));color:var(--ink-2);font-size:var(--lm-body);line-height:1.5;-webkit-text-size-adjust:100%;text-rendering:optimizeLegibility;
  font-size-adjust:.527;   /* §41: рост строчной Onest 0.527 em. Пока Onest не пришёл, фолбэк рисуется тем же ростом — текст не прыгает и сетка не едет */
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  font-feature-settings:'ss01','cv11';}
.lm *,.lm *::before,.lm *::after{box-sizing:border-box}
.lm :focus-visible{outline:2px solid var(--lm-emph);outline-offset:2px;box-shadow:none;border-radius:var(--r-sm)} /* КРАФТ п.1: один селектор фокуса */
.lm ::selection{background:color-mix(in srgb,var(--blue) 22%,transparent)}
.lm a{color:inherit;text-decoration:none}
.lm button{font:inherit;color:inherit}
.lm svg.lm-ic{width:var(--lm-icon);height:var(--lm-icon);stroke:currentColor;stroke-width:var(--lm-icon-stroke);
  fill:none;stroke-linecap:round;stroke-linejoin:round;flex:none;display:inline-block;vertical-align:-.2em}
.lm svg.lm-ic.sm{width:var(--lm-icon-sm);height:var(--lm-icon-sm)}
.lm svg.lm-ic.xs{width:var(--lm-icon-xs);height:var(--lm-icon-xs);stroke-width:var(--lm-icon-stroke)}
.lm-num,.lm .lm-num{font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.lm-muted{color:var(--ink-3)} .lm-faint{color:var(--ink-4)}
.lm-small{font-size:var(--lm-small)} .lm-micro{font-size:var(--lm-micro)}
.lm-ink{color:var(--ink)}
.lm-mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size-adjust:none} /* §41: у Geist Mono свой рост строчной, подгонку снимаем */
.lm :is(code,kbd,pre,samp){font-size-adjust:none}
.lm-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.lm-hide{display:none!important}

/* заголовки */
.lm-h1{font-size:var(--lm-h1);font-weight:600;letter-spacing:-.018em;color:var(--ink);line-height:1.2;margin:0}
.lm-h2{font-size:var(--lm-h2);font-weight:600;letter-spacing:-.015em;color:var(--ink);line-height:1.25;margin:0}
.lm-h3{font-size:var(--lm-h3);font-weight:600;letter-spacing:-.008em;color:var(--ink);line-height:1.3;margin:0}
.lm-eyebrow{font-size:var(--lm-micro);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-4);font-weight:500;
  display:inline-flex;align-items:center;gap:6px}
.lm-eyebrow i.dot{width:6px;height:6px;border-radius:50%;background:var(--orange);display:inline-block}
.lm-lead{font-size:15px;line-height:1.5;color:var(--ink-2);max-width:var(--lm-measure-lead);margin:0}

/* ─── 2. Каркас: шелл, сайдбар, шапка ─────────────────────────────────── */
.lm-shell{display:grid;grid-template-columns:var(--lm-side-w) minmax(0,1fr);min-height:100dvh;background:var(--bg)}
.lm-shell.framed{padding:16px;gap:0}
.lm-shell.framed>.lm-side{border-radius:var(--r-lg) 0 0 var(--r-lg);border:1px solid var(--border);border-right:0;height:calc(100dvh - 32px);top:16px}
.lm-shell.framed>.lm-main{border:1px solid var(--border);border-radius:0 var(--r-lg) var(--r-lg) 0;background:var(--surface-2);overflow:hidden}

.lm-side{position:sticky;top:0;height:100dvh;display:flex;flex-direction:column;background:var(--surface);
  border-right:1px solid var(--border);min-width:0}
.lm-brand{display:flex;align-items:center;gap:10px;padding:16px 16px 10px}
.lm-brand .mark{width:32px;height:32px;border-radius:9px;background:var(--ink);color:var(--surface);display:grid;place-items:center;
  font-weight:var(--w-semibold);font-size:14px;letter-spacing:-.02em;flex:none}
.lm-brand .name{font-size:15px;font-weight:var(--w-semibold);color:var(--ink);letter-spacing:-.02em;line-height:1.1}
.lm-brand .sub{font-size:var(--lm-micro);color:var(--ink-4);line-height:1.2;margin-top:2px}
.lm-brand .plan{margin-left:6px;font-size:var(--lm-micro);font-weight:600;padding:2px 7px;border-radius:var(--r-pill);
  background:var(--lm-warn-bg);color:var(--warm-ink);display:inline-flex;align-items:center;gap:4px}
.lm-brand .lm-ibtn{margin-left:auto}

.lm-search{margin:6px 12px 8px;height:var(--lm-ctl);display:flex;align-items:center;gap:8px;padding:0 10px;
  border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink-4);cursor:text}
.lm-search input{flex:1;min-width:0;border:0;background:transparent;font:inherit;font-size:13px;color:var(--ink);outline:none}
.lm-search input::placeholder{color:var(--ink-4)}
.lm-kbd{font-family:var(--font);font-size:var(--lm-micro);color:var(--ink-4);border:1px solid var(--border);border-radius:5px;padding:1px 5px;
  background:var(--surface);line-height:1.3;white-space:nowrap}

.lm-nav{padding:4px 12px;display:flex;flex-direction:column;gap:1px;overflow-y:auto;overscroll-behavior:contain}
.lm-nav-sec{display:flex;align-items:center;gap:6px;font-size:var(--lm-micro);letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-4);font-weight:500;padding:14px 8px 5px;cursor:default;user-select:none}
.lm-nav-sec .lm-ic{width:12px;height:12px;stroke-width:var(--lm-icon-stroke)}
.lm-nav-sec .meta{margin-left:auto;text-transform:none;letter-spacing:0;font-weight:400;display:inline-flex;align-items:center;gap:6px}
.lm-nav a,.lm-nav button.item{display:flex;align-items:center;gap:10px;padding:0 10px;height:36px;border-radius:var(--r-sm);
  font-size:13.5px;color:var(--ink-2);cursor:pointer;border:1px solid transparent;background:transparent;width:100%;text-align:left;
  transition:background var(--motion-fast) var(--ease-standard)}
.lm-nav a .lm-ic{color:var(--ink-4)}
.lm-nav a:hover{background:var(--surface-2)}
.lm-nav a.on{background:var(--surface);border-color:var(--border);color:var(--ink);box-shadow:var(--shadow)} /* КРАФТ п.6: вес не меняется */
.lm-nav a.on .lm-ic{color:var(--ink)}
.lm-nav a .trail{margin-left:auto;display:inline-flex;align-items:center;gap:6px;color:var(--ink-4);font-size:var(--lm-micro)}
.lm-nav a .count{min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-pill);background:var(--surface-3);color:var(--ink-2);
  font-size:11px;font-weight:600;display:inline-grid;place-items:center;font-variant-numeric:tabular-nums}
.lm-nav a .swatch{width:20px;height:20px;border-radius:6px;display:grid;place-items:center;color:var(--surface);flex:none}
.lm-nav a .swatch .lm-ic{width:12px;height:12px;color:inherit;stroke-width:var(--lm-icon-stroke)}
.lm-nav a .tag{font-size:var(--lm-micro);color:var(--ink-4);border:1px dashed var(--border-3);border-radius:4px;padding:0 4px;margin-left:auto}
.lm-nav .lm-nav-sub{margin-left:28px;border-left:1px solid var(--border);padding-left:2px}
.lm-nav .lm-nav-sub a{height:32px;font-size:13px}

.lm-side-foot{margin-top:auto;padding:10px 12px 12px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:10px}
.lm-usage{padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2);font-size:var(--lm-small);color:var(--ink-3)}
.lm-usage b{display:block;color:var(--ink);font-weight:var(--w-semibold);font-size:12.5px;margin-bottom:2px}
.lm-usage .lm-bar{margin-top:8px}
.lm-me{display:flex;align-items:center;gap:10px;min-width:0}
.lm-me .lm-av{flex:none}
.lm-me b{display:block;font-size:13px;color:var(--ink);font-weight:var(--w-semibold);line-height:1.2}
.lm-me small{display:block;font-size:var(--lm-micro);color:var(--ink-4)}
.lm-me .lm-ibtn{margin-left:auto}
.lm-note{font-size:var(--lm-micro);color:var(--ink-4);line-height:1.4}

.lm-main{min-width:0;display:flex;flex-direction:column}
.lm-top{position:sticky;top:0;z-index:var(--lm-z-sticky);min-height:var(--lm-top-h);display:flex;align-items:center;gap:12px;
  padding:12px 24px;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(10px) saturate(140%);
  -webkit-backdrop-filter:blur(10px) saturate(140%);border-bottom:1px solid var(--border-2)}
.lm-shell.framed .lm-top{background:color-mix(in srgb,var(--surface-2) 88%,transparent)}
.lm-top .lm-crumbs{font-size:13px;color:var(--ink-3);display:flex;align-items:center;gap:6px;min-width:0}
.lm-top .lm-crumbs b{color:var(--ink);font-weight:var(--w-semibold)}
.lm-top .lm-crumbs .lm-ic{width:14px;height:14px;color:var(--ink-5)}
.lm-top .lm-h1{font-size:20px}
.lm-toolbar{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.lm-toolbar .sep{width:1px;height:20px;background:var(--border);margin:0 2px}
.lm-content{padding:20px 24px 72px;display:flex;flex-direction:column;gap:var(--lm-gap)}
.lm-content>.lm-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:2px}
.lm-content>.lm-head .lm-lead{margin-top:6px}

.lm-burger{display:none}

/* ─── 3. Сетка ───────────────────────────────────────────────────────── */
.lm-grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--lm-gap)}
.lm-col-3{grid-column:span 3}.lm-col-4{grid-column:span 4}.lm-col-5{grid-column:span 5}.lm-col-6{grid-column:span 6}
.lm-col-7{grid-column:span 7}.lm-col-8{grid-column:span 8}.lm-col-9{grid-column:span 9}.lm-col-12{grid-column:span 12}
.lm-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--lm-gap)}
.lm-stack{display:flex;flex-direction:column;gap:var(--lm-gap);min-width:0}
.lm-row{display:flex;align-items:center;gap:10px;min-width:0}
.lm-row.between{justify-content:space-between}
.lm-row.wrap{flex-wrap:wrap}
.lm-spacer{flex:1}

/* ─── 4. Кнопки, управление ──────────────────────────────────────────── */
.lm-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:var(--lm-ctl);padding:0 12px;
  border-radius:var(--r-sm);border:1px solid var(--border);background:var(--surface);color:var(--ink);
  font-size:13px;font-weight:500;cursor:pointer;white-space:nowrap;line-height:1;
  transition:background var(--motion-fast) var(--ease-standard),border-color var(--motion-fast),box-shadow var(--motion-fast);
  box-shadow:var(--shadow)}
.lm-btn:hover{background:var(--surface-2);border-color:var(--border-3)}
.lm-btn:active{transform:translateY(1px)}
.lm-btn .lm-ic{width:var(--lm-icon-sm);height:var(--lm-icon-sm);color:var(--ink-3)}
.lm-btn.primary{background:var(--lm-primary);color:var(--lm-primary-ink);border-color:var(--lm-primary);box-shadow:none}
.lm-btn.primary .lm-ic{color:inherit}
.lm-btn.primary:hover{background:color-mix(in srgb,var(--lm-primary) 88%,var(--surface))}
.lm-btn.accent{background:var(--lm-accent);color:#fff;border-color:var(--lm-accent);box-shadow:none}
.lm-btn.accent .lm-ic{color:inherit}
.lm-btn.ghost{background:transparent;border-color:transparent;box-shadow:none;color:var(--ink-2)}
.lm-btn.ghost:hover{background:var(--surface-3)}
.lm-btn.danger{color:var(--cold)}
.lm-btn.sm{height:var(--lm-ctl-sm);padding:0 10px;font-size:12.5px;border-radius:var(--r-xs)}
.lm-btn.sm .lm-ic{width:14px;height:14px}
.lm-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.lm-btn .lm-kbd{margin-left:2px}

.lm-ibtn{display:inline-grid;place-items:center;width:var(--lm-ctl);height:var(--lm-ctl);border-radius:var(--r-sm);
  border:1px solid var(--border);background:var(--surface);color:var(--ink-3);cursor:pointer;flex:none;
  transition:background var(--motion-fast),color var(--motion-fast)}
.lm-ibtn:hover{background:var(--surface-2);color:var(--ink)}
.lm-ibtn.sm{width:var(--lm-ctl-sm);height:var(--lm-ctl-sm);border-radius:var(--r-xs)}
.lm-ibtn.sm .lm-ic{width:var(--lm-icon-sm);height:var(--lm-icon-sm)}
.lm-ibtn.ghost{border-color:transparent;background:transparent}
.lm-ibtn.ghost:hover{background:var(--surface-3)}

.lm-seg{display:inline-flex;align-items:center;gap:2px;padding:3px;height:var(--lm-ctl);border-radius:var(--r-sm);
  background:var(--surface-3);border:1px solid var(--border-2)}
.lm-seg button{height:100%;padding:0 11px;border:0;border-radius:6px;background:transparent;color:var(--ink-3);font-size:12.5px;
  font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:background var(--motion-fast),color var(--motion-fast)}
.lm-seg button:hover{color:var(--ink)}
.lm-seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}
.lm-seg button .lm-ic{width:var(--lm-icon-sm);height:var(--lm-icon-sm)}
.lm-seg.icons button{padding:0 8px}

.lm-input{height:var(--lm-ctl);display:inline-flex;align-items:center;gap:8px;padding:0 10px;border:1px solid var(--border);
  border-radius:var(--r-sm);background:var(--surface);color:var(--ink-4);min-width:0}
.lm-input:focus-within{border-color:var(--ink-4);box-shadow:var(--lm-ring)}
.lm-input input,.lm-input select{border:0;background:transparent;font:inherit;font-size:13px;color:var(--ink);outline:none;min-width:0;flex:1}
.lm-input input::placeholder{color:var(--ink-4)}
.lm-input .lm-ic{width:var(--lm-icon-sm);height:var(--lm-icon-sm)}

.lm-check{appearance:none;width:16px;height:16px;border:1px solid var(--border-3);border-radius:4px;background:var(--surface);
  cursor:pointer;display:inline-grid;place-items:center;flex:none;vertical-align:middle}
.lm-check:checked{background:var(--ink);border-color:var(--ink)}
.lm-check:checked::after{content:'';width:9px;height:5px;border:2px solid var(--surface);border-top:0;border-right:0;
  transform:translateY(-1px) rotate(-45deg)}
.lm-switch{width:34px;height:20px;border-radius:var(--r-pill);background:var(--surface-4);border:0;position:relative;cursor:pointer;flex:none}
.lm-switch::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:var(--surface);
  box-shadow:var(--shadow-md);transition:transform var(--motion-base) var(--ease-standard)}
.lm-switch[aria-checked="true"]{background:var(--ok)}
.lm-switch[aria-checked="true"]::after{transform:translateX(14px)}

/* ─── 5. Пилюли, дельты, статусы ─────────────────────────────────────── */
.lm-pill{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 8px;border-radius:var(--r-pill);
  font-size:11.5px;font-weight:500;line-height:1;white-space:nowrap;background:var(--lm-neutral-bg);color:var(--ink-2)}
.lm-pill .lm-ic{width:13px;height:13px;stroke-width:var(--lm-icon-stroke)}
.lm-pill.ok{background:var(--lm-ok-bg);color:var(--ok)}
.lm-pill.warn{background:var(--lm-warn-bg);color:var(--warm-ink)}
.lm-pill.bad{background:var(--lm-bad-bg);color:var(--cold)}
.lm-pill.info{background:var(--lm-info-bg);color:var(--info)}
.lm-pill.outline{background:transparent;border:1px solid var(--border)}
.lm-pill.dot::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor}
.lm-pill.sm{height:19px;padding:0 6px;font-size:var(--lm-micro)}
.lm-tag{display:inline-flex;align-items:center;height:20px;padding:0 6px;border-radius:5px;font-size:11px;
  color:var(--ink-3);background:var(--surface-3);white-space:nowrap}

/* дельта: направление, единица, база. Оценок словами нет (A1) */
.lm-delta{display:inline-flex;align-items:center;gap:3px;height:22px;padding:0 7px;border-radius:var(--r-pill);
  font-size:11.5px;font-weight:var(--w-medium);font-variant-numeric:tabular-nums;white-space:nowrap;background:var(--lm-neutral-bg);color:var(--ink-3)}
.lm-delta .lm-ic{width:12px;height:12px;stroke-width:var(--lm-icon-stroke)}
.lm-delta.up{background:var(--lm-ok-bg);color:var(--ok)}
.lm-delta.down{background:var(--lm-bad-bg);color:var(--cold)}
.lm-delta.down.good{background:var(--lm-ok-bg);color:var(--ok)}   /* меньше = в коридоре: цвет решает порог, не знак */
.lm-delta.up.bad{background:var(--lm-bad-bg);color:var(--cold)}
.lm-delta.neutral,.lm-delta.neutral.up,.lm-delta.neutral.down{background:var(--lm-neutral-bg);color:var(--ink-3)}   /* направление не значит улучшение (нет good) — цвет общий, знак и стрелка остаются */
.lm-delta.none{background:transparent;border:1px dashed var(--border-3);color:var(--ink-4);font-weight:500}
.lm-vs{font-size:var(--lm-small);color:var(--ink-4);white-space:nowrap}
.lm-vs b{color:var(--ink-3);font-weight:500}

/* ─── 6. Карточки ────────────────────────────────────────────────────── */
.lm-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--lm-card-r);min-width:0;
  display:flex;flex-direction:column;box-shadow:var(--shadow)}
.lm-card-h{display:flex;align-items:center;gap:10px;padding:14px var(--lm-card-pad) 0;min-height:44px}
.lm-card-h.band{padding:12px var(--lm-card-pad);background:var(--surface-2);border-bottom:1px solid var(--border-2);
  border-radius:var(--lm-card-r) var(--lm-card-r) 0 0}
.lm-card-h .lm-ic{color:var(--ink-3)}
.lm-card-h .t{display:flex;flex-direction:column;min-width:0;gap:1px}
.lm-card-h .t h3{font-size:14px;font-weight:600;color:var(--ink);letter-spacing:-.015em;margin:0;line-height:1.3}
.lm-card-h .t .sub{font-size:var(--lm-small);color:var(--ink-4);line-height:1.3}
.lm-card-h .act{margin-left:auto;display:inline-flex;align-items:center;gap:6px;flex:none}
.lm-card-b{padding:12px var(--lm-card-pad) var(--lm-card-pad);min-width:0;flex:1}
.lm-card-b.flush{padding:0}
.lm-card-f{padding:10px var(--lm-card-pad) 12px;border-top:1px solid var(--border-2);font-size:var(--lm-small);color:var(--ink-3);
  display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lm-card.compact .lm-card-h{padding-top:10px;min-height:36px}
.lm-card.compact .lm-card-b{padding:8px 14px 12px}

/* KPI — три зоны: шапка · значение | дельта · спарклайн справа */
.lm-kpi{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto auto;gap:6px 12px;
  padding:14px 16px 14px var(--lm-card-pad);background:var(--surface);border:1px solid var(--border);border-radius:var(--lm-card-r);
  box-shadow:var(--shadow);min-width:0;position:relative;align-content:start}
.lm-kpi .lm-kpi-h{grid-column:1/-1;grid-row:1;display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-3);font-weight:500;min-width:0}
.lm-kpi .lm-kpi-h .lm-ic{color:var(--ink-4);width:var(--lm-icon-sm);height:var(--lm-icon-sm)}
.lm-kpi .lm-kpi-h .lm-ibtn{margin-left:auto}
.lm-kpi .lm-kpi-v{grid-column:1;grid-row:2;font-size:var(--lm-kpi);font-weight:var(--lm-kpi-w);letter-spacing:-.035em;color:var(--ink);line-height:1.05;
  font-variant-numeric:tabular-nums;display:flex;align-items:baseline;gap:.18em;min-width:min-content;white-space:nowrap;align-self:center}
.lm-kpi .lm-kpi-v small{font-size:15px;font-weight:500;color:var(--ink-4);letter-spacing:-.01em}
.lm-kpi .lm-kpi-v .na{font-size:20px;font-weight:var(--w-medium);color:var(--ink-4);border-bottom:1px dashed var(--border-3);cursor:help}
.lm-kpi .lm-kpi-d{grid-column:2;grid-row:2;display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:2px;min-width:min-content;margin:0;align-self:center}
.lm-kpi .lm-kpi-d .lm-vs{white-space:nowrap;line-height:1.2;text-align:right}
.lm-kpi:has(> .lm-kpi-spark) .lm-kpi-d,.lm-kpi:has(> .lm-kpi-ring) .lm-kpi-d{grid-column:1;grid-row:3;align-items:flex-start}
.lm-kpi .lm-kpi-spark{grid-column:2;grid-row:2/4;align-self:end;width:var(--lm-spark-w);height:var(--lm-spark-h);display:flex;align-items:flex-end}
.lm-kpi .lm-kpi-spark svg{width:100%;height:100%}
.lm-kpi .lm-kpi-spark.bars{gap:3px}
.lm-kpi .lm-kpi-spark.bars i{flex:1;border-radius:3px 3px 1px 1px;background:color-mix(in srgb,var(--purple) 28%,transparent);min-height:3px}
.lm-kpi .lm-kpi-spark.bars i.now{background:var(--purple)}
.lm-kpi .lm-kpi-n{grid-column:1/-1;font-size:var(--lm-micro);color:var(--ink-4);line-height:1.35;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.lm-kpi.v-warn{border-color:color-mix(in srgb,var(--warm) var(--lm-edge-tone),transparent)}
.lm-kpi.v-bad{border-color:color-mix(in srgb,var(--cold) var(--lm-edge-tone),transparent)}
.lm-kpi.v-warn .lm-kpi-v{color:var(--warm-ink)} .lm-kpi.v-bad .lm-kpi-v{color:var(--cold)} .lm-kpi.v-ok .lm-kpi-v{color:var(--ink)}
.lm-kpi .lm-kpi-ring{grid-column:2;grid-row:2/4;align-self:center;display:flex;align-items:center}

/* мини-кольцо прогресса: conic-gradient, цвет — токен */
.lm-ring{--v:0;--c:var(--purple);width:18px;height:18px;border-radius:50%;flex:none;display:inline-block;vertical-align:-.25em;
  background:conic-gradient(var(--c) calc(var(--v)*1%),var(--surface-4) 0);
  -webkit-mask:radial-gradient(circle at 50% 50%,transparent 52%,#000 54%);mask:radial-gradient(circle at 50% 50%,transparent 52%,#000 54%)}
.lm-ring.lg{width:44px;height:44px}

/* ─── 7. Прогресс, буллет, лента ступеней, легенда ───────────────────── */
.lm-bar{position:relative;height:6px;border-radius:var(--r-pill);background:var(--surface-4);overflow:hidden;min-width:60px}
.lm-bar i{position:absolute;inset:0 auto 0 0;border-radius:inherit;background:var(--ok);transition:width var(--motion-slow) var(--ease-standard)}
.lm-bar.thick{height:10px}
.lm-bar.warn i{background:var(--warm)} .lm-bar.bad i{background:var(--cold)} .lm-bar.accent i{background:var(--purple)} .lm-bar.info i{background:var(--blue)}
.lm-bar-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;align-items:center}
.lm-bar-row .lbl{font-size:13px;color:var(--ink);min-width:0}
.lm-bar-row .lbl small{display:block;font-size:var(--lm-micro);color:var(--ink-4)}
.lm-bar-row .val{font-size:13px;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right}
.lm-bar-row .val small{color:var(--ink-4);margin-left:4px}
.lm-bar-row .lm-bar{grid-column:1/-1}

.lm-bullet{position:relative;height:12px;border-radius:3px;background:var(--surface-3);overflow:visible}
.lm-bullet .fact{position:absolute;left:0;top:3px;bottom:3px;background:var(--blue);border-radius:2px}
.lm-bullet .plan{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--ink);border-radius:1px}
.lm-bullet .band{position:absolute;top:0;bottom:0;background:var(--surface-4);border-radius:3px}

.lm-stages{display:flex;flex-direction:column;gap:10px}
.lm-stage{display:grid;grid-template-columns:minmax(140px,1fr) 2.2fr auto;gap:12px;align-items:center}
.lm-stage .nm{font-size:13px;color:var(--ink);min-width:0}
.lm-stage .nm small{display:block;font-size:var(--lm-micro);color:var(--ink-4);line-height:1.35;margin-top:1px}
.lm-stage .bar{height:18px;border-radius:5px;background:var(--chart-empty);overflow:hidden;position:relative}
.lm-stage .bar i{display:block;height:100%;background:var(--blue);border-radius:5px}
.lm-stage .bar i.alt{background:var(--purple)}
.lm-stage .n{font-size:15px;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.02em;text-align:right;min-width:52px}

.lm-legend{display:flex;flex-direction:column;gap:8px;min-width:0}
.lm-legend .it{display:grid;grid-template-columns:auto minmax(72px,1fr) auto auto auto;align-items:center;gap:10px;font-size:13px;color:var(--ink)}
.lm-legend .it .sw{width:20px;height:20px;border-radius:6px;display:grid;place-items:center;color:#fff;background:var(--c,var(--blue));flex:none}
.lm-legend .it .sw .lm-ic{width:12px;height:12px;stroke-width:var(--lm-icon-stroke)}
.lm-legend .it .sw.dot{width:10px;height:10px;border-radius:3px}
.lm-legend .it .v{font-variant-numeric:tabular-nums;color:var(--ink-3);font-size:12.5px;white-space:nowrap}
.lm-legend .it .p{font-variant-numeric:tabular-nums;color:var(--ink);font-weight:var(--w-semibold);min-width:40px;text-align:right;white-space:nowrap}
.lm-legend .it .lm-ring{margin-left:2px}
.lm-legend.inline{flex-direction:row;flex-wrap:wrap;gap:6px 16px}
.lm-legend.inline .it{display:inline-flex;gap:6px;font-size:12px;color:var(--ink-3)}

/* ─── 8. Графики: контейнер, тултип, градиент ────────────────────────── */
.lm-chart{position:relative;width:100%;min-width:0}
.lm-chart svg{display:block;width:100%;height:auto;overflow:visible}
.lm-chart .chart-axislbl{font-family:var(--font);font-size:11px;fill:var(--ink-4)}
/* v6: компенсация масштаба viewBox (--lm-cs = ширина/600): подписи и штрихи в реальных px на любой ширине */
.lm-chart svg.lm-cs .chart-axislbl{font-size:calc(11px / var(--lm-cs,1))} .lm-chart svg.lm-cs .chart-line,.lm-chart svg.lm-cs .chart-grid,.lm-chart svg.lm-cs .chart-refline,.lm-chart svg.lm-cs .chart-marker{vector-effect:non-scaling-stroke} .lm-chart svg.lm-cs .chart-dot{r:calc(4px / var(--lm-cs,1))} .lm-chart svg.lm-cs .chart-pt.lm-on{r:calc(8px / var(--lm-cs,1))}
.lm-chart .chart-grid{stroke:var(--border-2);stroke-dasharray:0}
.lm-chart .chart-axis{stroke:transparent}
.lm-chart .chart-line{stroke-width:2}
.lm-chart .chart-dot{opacity:0;transition:opacity var(--motion-fast)}  /* маркеры — только на аномалиях и по наведению (D6) */
.lm-chart .chart-dot.chart-anom{opacity:1}
.lm-chart .chart-dot.lm-on{opacity:1}
.lm-chart .chart-hit{fill:transparent;stroke:transparent;pointer-events:all;cursor:default}
.lm-chart .chart-pt{cursor:default;transition:r var(--motion-fast)}
.lm-chart .chart-pt.lm-on{r:8;filter:brightness(.9)} .lm-chart .chart-bar.lm-on,.lm-chart .chart-arc.lm-on,.lm-chart .chart-hm-cell.lm-on{filter:brightness(.88)} .lm-chart .chart-line.lm-on{stroke-width:3.5}                  /* точки scatter/гантели/холма — всегда видимы */
.lm-chart .chart-pt:hover{filter:brightness(.92)}
.lm-chart .chart-legend{display:none}                                   /* легенда рисуется LM.legend — единая форма */
.lm-chart.h-ring svg{width:auto;max-width:100%;margin:0 auto}
.lm-crosshair{position:absolute;top:0;bottom:0;width:0;border-left:1px dashed var(--ink-4);pointer-events:none;opacity:0;transition:opacity var(--motion-fast)}
.lm-crosshair.on{opacity:.6}
.lm-tip{position:absolute;z-index:var(--lm-z-tip);pointer-events:none;min-width:150px;padding:10px 12px;border-radius:var(--r-md);
  background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-md);font-size:12.5px;color:var(--ink-2);
  opacity:0;transform:translateY(4px);transition:opacity var(--motion-fast),transform var(--motion-fast)}
.lm-tip.on{opacity:1;transform:none}
.lm-tip-g{position:fixed;left:0;top:0;z-index:var(--lm-z-tip)}
.lm-tip b{display:block;color:var(--ink);font-weight:var(--w-semibold);margin-bottom:6px;font-size:13px}
.lm-tip .r{display:flex;align-items:center;gap:8px;justify-content:space-between;padding:2px 0}
.lm-tip .r i{width:8px;height:8px;border-radius:2px;flex:none;display:inline-block;margin-right:6px}
.lm-tip .r .v{font-variant-numeric:tabular-nums;color:var(--ink);font-weight:var(--w-semibold)}
.lm-tip .r .p{font-variant-numeric:tabular-nums;color:var(--ink-4);font-size:11.5px;margin-left:4px}

/* ─── 9. Таблицы и списки ────────────────────────────────────────────── */
.lm-tblwrap{overflow-x:auto;overscroll-behavior-x:contain;min-width:0}
.lm-card-b.flush .lm-tblwrap{border-radius:0 0 var(--lm-card-r) var(--lm-card-r)}
.lm-table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
.lm-table th{position:sticky;top:0;z-index:1;text-align:left;font-size:12px;font-weight:500;color:var(--ink-3);
  background:var(--surface-2);border-bottom:1px solid var(--border);padding:0 14px;height:40px;white-space:nowrap;letter-spacing:0;text-transform:none}
.lm-table th .lm-ic{width:14px;height:14px;color:var(--ink-4);vertical-align:-.15em;margin-right:6px}
.lm-table th.sort{cursor:pointer;user-select:none}
.lm-table th.sort:hover{color:var(--ink)}
.lm-table th.num,.lm-table td.num{text-align:right;font-variant-numeric:tabular-nums}
.lm-table td{height:var(--lm-row-h);padding:0 14px;border-bottom:1px solid var(--border-2);color:var(--ink);vertical-align:middle;white-space:nowrap}
.lm-table td.wrap,.lm-table.wrap td{white-space:normal}   /* .wrap на таблице — текстовые колонки переносятся, а не уезжают в скролл */
.lm-table tbody tr:last-child td{border-bottom:0}
.lm-table tbody tr{transition:background var(--motion-fast)}
.lm-table tbody tr:hover td{background:var(--surface-2)}
.lm-table tbody tr.on td{background:var(--lm-accent-bg)}
.lm-table td .lm-muted{color:var(--ink-3)}
.lm-table td.check,.lm-table th.check{width:36px;padding-right:0}
.lm-table td.act{width:44px;text-align:right}
.lm-table.compact td{height:var(--lm-row-h-compact);font-size:12.5px}
.lm-table.zebra tbody tr:nth-child(even) td{background:color-mix(in srgb,var(--surface-2) 60%,transparent)}
.lm-table .lm-pill{vertical-align:middle}

/* сущность в ячейке: аватар/лого · имя · подпись */
.lm-ent{display:inline-flex;align-items:center;gap:10px;min-width:0;max-width:100%}
.lm-ent .t{display:flex;flex-direction:column;min-width:0;line-height:1.25}
.lm-ent .t b{font-weight:var(--w-semibold);color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lm-ent .t small{font-size:var(--lm-micro);color:var(--ink-4);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lm-av{width:28px;height:28px;border-radius:50%;background:var(--surface-4);color:var(--ink-2);display:inline-grid;place-items:center;
  font-size:11.5px;font-weight:600;flex:none;overflow:hidden;letter-spacing:0}
.lm-av img{width:100%;height:100%;object-fit:cover}
.lm-av.sq{border-radius:8px}
.lm-av.sm{width:22px;height:22px;font-size:var(--lm-micro)}
.lm-av.lg{width:36px;height:36px;font-size:13px}
.lm-av.ink{background:var(--ink);color:var(--surface)}
.lm-av.a1{background:color-mix(in srgb,var(--blue) 18%,transparent);color:var(--blue)}
.lm-av.a2{background:color-mix(in srgb,var(--purple) 18%,transparent);color:var(--purple)}
.lm-av.a3{background:color-mix(in srgb,var(--green) 18%,transparent);color:var(--green)}
.lm-av.a4{background:color-mix(in srgb,var(--orange) 20%,transparent);color:var(--orange)}
.lm-av.a5{background:color-mix(in srgb,var(--cyan) 18%,transparent);color:var(--cyan)}
.lm-avs{display:inline-flex}
.lm-avs .lm-av{border:2px solid var(--surface);margin-left:-8px}
.lm-avs .lm-av:first-child{margin-left:0}

/* категория: квадратик с иконкой + подпись */
.lm-cat{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}
.lm-cat .sw{width:22px;height:22px;border-radius:6px;display:grid;place-items:center;flex:none;background:var(--c,var(--blue));color:#fff}
.lm-cat .sw .lm-ic{width:13px;height:13px;stroke-width:var(--lm-icon-stroke)}
.lm-cat .sw.soft{background:color-mix(in srgb,var(--c,var(--blue)) 16%,transparent);color:var(--c,var(--blue))}

/* сумма: направление — знаком и цветом, не оценкой */
.lm-amt{font-variant-numeric:tabular-nums;font-weight:var(--w-semibold);color:var(--ink);white-space:nowrap}
.lm-amt.in{color:var(--ok)} .lm-amt.out{color:var(--ink)}
.lm-amt small{color:var(--ink-4);font-weight:400;margin-left:3px}

/* маскированный реквизит */
.lm-mask{color:var(--ink-3);letter-spacing:.06em}
.lm-mask::before{content:'•••• '}

/* файл / вложение */
.lm-file{display:inline-flex;align-items:center;gap:6px;color:var(--ink-2);max-width:100%;min-width:0}
.lm-file .lm-ic{width:14px;height:14px;color:var(--ink-4)}
.lm-file span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lm-file:hover{color:var(--ink);text-decoration:underline;text-underline-offset:2px}

/* строки списка вне таблицы */
.lm-list{display:flex;flex-direction:column}
.lm-item{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--border-2);min-width:0}
.lm-item:last-child{border-bottom:0}
.lm-item .t{flex:1;min-width:0}
.lm-item .t b{display:block;font-weight:var(--w-semibold);color:var(--ink);font-size:13.5px;line-height:1.3}
.lm-item .t small{display:block;color:var(--ink-4);font-size:var(--lm-small);line-height:1.35;margin-top:1px}
.lm-item .r{margin-left:auto;text-align:right;flex:none;display:flex;align-items:center;gap:8px}
.lm-item.click{cursor:pointer;margin:0 -8px;padding-left:8px;padding-right:8px;border-radius:var(--r-sm)}
.lm-item.click:hover{background:var(--surface-2)}

/* ─── 10. Подсказки, «как считается», свежесть ───────────────────────── */
[data-tip]{position:relative}
[data-tip]::after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 8px);transform:translate(-50%,4px);
  z-index:var(--lm-z-tip);min-width:160px;max-width:280px;width:max-content;padding:8px 10px;border-radius:var(--r-sm);
  background:var(--ink);color:var(--surface);font-size:12px;font-weight:400;line-height:1.4;text-align:left;white-space:normal;
  letter-spacing:0;text-transform:none;opacity:0;pointer-events:none;box-shadow:var(--shadow-md);
  transition:opacity var(--motion-fast),transform var(--motion-fast)}
[data-tip]:focus-visible::after{opacity:1;transform:translate(-50%,0)} @media (hover:hover){[data-tip]:hover::after{opacity:1;transform:translate(-50%,0);transition-delay:80ms}} /* КРАФТ п.7–8: hover под (hover:hover), intent-delay 80 мс у подсказок, не у .lm-tip графиков */
[data-tip].tip-right::after{left:auto;right:0;transform:translate(0,4px)}
[data-tip].tip-right:hover::after{transform:none}
[data-tip].tip-left::after{left:0;transform:translate(0,4px)}
[data-tip].tip-left:hover::after{transform:none}
.lm-info{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;color:var(--ink-4);cursor:help;
  border:0;background:transparent;padding:0;vertical-align:-.2em}
.lm-info:hover{color:var(--ink-2);background:var(--surface-3)}
.lm-info .lm-ic{width:14px;height:14px}

details.lm-method{border:1px solid var(--border-2);border-radius:var(--r-sm);background:var(--surface-2);font-size:12.5px;color:var(--ink-3)}
details.lm-method summary{cursor:pointer;padding:8px 12px;list-style:none;display:flex;align-items:center;gap:8px;color:var(--ink-2);font-weight:500;user-select:none}
details.lm-method summary::-webkit-details-marker{display:none}
details.lm-method summary .lm-ic{width:14px;height:14px;color:var(--ink-4);transition:transform var(--motion-base)}
details.lm-method[open] summary .lm-ic.chev{transform:rotate(180deg)}
details.lm-method .body{padding:0 12px 10px;line-height:1.5}
details.lm-method .body b{color:var(--ink-2);font-weight:var(--w-semibold)}

.lm-fresh{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap;font-size:var(--lm-small);color:var(--ink-4);padding-top:6px}
.lm-fresh .src{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.lm-fresh .src i{width:6px;height:6px;border-radius:50%;background:var(--ok);display:inline-block}
.lm-fresh .src.stale i{background:var(--warm)}
.lm-fresh .src.none i{background:transparent;border:1px solid var(--ink-4)}
.lm-fresh .src b{color:var(--ink-3);font-weight:500}
.lm-fresh .lm-ic{width:13px;height:13px}

/* «нет данных» — третье состояние ячейки, ноль не подставляется (B1) */
.lm .na,.lm-na{color:var(--ink-4);border-bottom:1px dashed var(--border-3);cursor:help;font-style:normal}

/* ─── 11. Состояния экрана и блока ───────────────────────────────────── */
.lm-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px;
  padding:36px 24px;min-height:200px;color:var(--ink-3)}
.lm-state .ic{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;background:var(--surface-3);color:var(--ink-3);margin-bottom:6px}
.lm-state .ic .lm-ic{width:20px;height:20px}
.lm-state h4{font-size:14px;font-weight:600;color:var(--ink);margin:0}
.lm-state p{font-size:13px;color:var(--ink-3);margin:0;max-width:26.6em;line-height:1.5}
.lm-state .lm-btn{margin-top:8px}
.lm-state.error .ic{background:var(--lm-bad-bg);color:var(--cold)}
.lm-state.denied .ic{background:var(--lm-warn-bg);color:var(--warm-ink)}
.lm-state.inline{flex-direction:row;justify-content:flex-start;text-align:left;min-height:0;padding:14px 16px;gap:12px;border:1px dashed var(--border);border-radius:var(--r-md)}
.lm-state.inline .t{flex:1;min-width:0}
.lm-state.inline .lm-btn{margin:0;flex:none}
.lm-state.inline .ic{margin:0;width:32px;height:32px;border-radius:9px}
.lm-state.inline .t{display:flex;flex-direction:column;gap:1px}

.lm-skel{position:relative;overflow:hidden;background:var(--surface-3);border-radius:6px;color:transparent!important;min-height:1em}
.lm-skel::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--surface) 70%,transparent),transparent);
  transform:translateX(-100%);animation:lm-shimmer 1.4s infinite}
@keyframes lm-shimmer{to{transform:translateX(100%)}}
.lm-skel.line{height:12px;width:60%} .lm-skel.num{height:28px;width:40%} .lm-skel.block{height:120px;width:100%;border-radius:var(--r-md)}
.lm-loading-bar{height:2px;background:var(--surface-4);overflow:hidden;border-radius:2px}
.lm-loading-bar::after{content:'';display:block;height:100%;width:40%;background:var(--lm-accent);animation:lm-slide 1.2s var(--ease-standard) infinite}
@keyframes lm-slide{from{transform:translateX(-100%)}to{transform:translateX(250%)}}

/* ─── 12. Оверлеи: меню, дровер, модал, тост, баннер ─────────────────── */
.lm-menu{position:absolute;z-index:var(--lm-z-menu);min-width:200px;padding:6px;border-radius:var(--r-md);background:var(--surface);
  border:1px solid var(--border);box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:1px}
.lm-menu .mi{display:flex;align-items:center;gap:9px;height:32px;padding:0 10px;border-radius:6px;font-size:13px;color:var(--ink-2);cursor:pointer;border:0;background:transparent;width:100%;text-align:left}
.lm-menu .mi:hover{background:var(--surface-2);color:var(--ink)}
.lm-menu .mi .lm-ic{width:15px;height:15px;color:var(--ink-4)}
.lm-menu .mi .lm-kbd{margin-left:auto}
.lm-menu .mi.on{background:var(--lm-accent-bg);color:var(--ink)}
.lm-menu .mi.danger{color:var(--cold)}
.lm-menu hr{border:0;border-top:1px solid var(--border-2);margin:4px 0}
.lm-menu .mh{font-size:var(--lm-micro);color:var(--ink-4);padding:6px 10px 2px;text-transform:uppercase;letter-spacing:.06em}

.lm-scrim{position:fixed;inset:0;z-index:var(--lm-z-drawer);background:color-mix(in srgb,var(--ink) 32%,transparent);
  opacity:0;pointer-events:none;transition:opacity var(--motion-base)}
.lm-scrim.on{opacity:1;pointer-events:auto}
.lm-drawer{position:fixed;top:0;right:0;bottom:0;z-index:calc(var(--lm-z-drawer) + 1);width:min(480px,92vw);background:var(--surface);
  border-left:1px solid var(--border);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;
  transform:translateX(100%);transition:transform var(--motion-slow) var(--ease-standard)}
.lm-drawer.on{transform:none}
.lm-drawer .dh{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--border-2)}
.lm-drawer .dh h3{font-size:15px;font-weight:600;color:var(--ink);margin:0}
.lm-drawer .dh .lm-ibtn{margin-left:auto}
.lm-drawer .db{padding:16px 18px;overflow:auto;flex:1;display:flex;flex-direction:column;gap:14px}
.lm-drawer .df{padding:12px 18px;border-top:1px solid var(--border-2);display:flex;gap:8px;justify-content:flex-end}

.lm-modal-wrap{position:fixed;inset:0;z-index:var(--lm-z-modal);display:grid;place-items:center;padding:20px;opacity:0;pointer-events:none;transition:opacity var(--motion-base)}
.lm-modal-wrap.on{opacity:1;pointer-events:auto}
.lm-modal-wrap::before{content:'';position:absolute;inset:0;background:color-mix(in srgb,var(--ink) 32%,transparent)}
.lm-modal{position:relative;width:min(520px,100%);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-xl);
  box-shadow:var(--shadow-lg);transform:scale(.98);transition:transform var(--motion-base) var(--ease-standard)}
.lm-modal-wrap.on .lm-modal{transform:none}
.lm-modal .mh{padding:18px 20px 0;display:flex;align-items:flex-start;gap:10px}
.lm-modal .mh h3{font-size:16px;font-weight:600;color:var(--ink);margin:0}
.lm-modal .mh p{margin:4px 0 0;font-size:13px;color:var(--ink-3)}
.lm-modal .mh .lm-ibtn{margin-left:auto}
.lm-modal .mb{padding:16px 20px;display:flex;flex-direction:column;gap:12px}
.lm-modal .mf{padding:0 20px 18px;display:flex;gap:8px;justify-content:flex-end}

.lm-toasts{position:fixed;right:max(20px,env(safe-area-inset-right));bottom:max(20px,env(safe-area-inset-bottom));z-index:var(--lm-z-toast);display:flex;flex-direction:column;gap:8px;width:min(360px,calc(100vw - 40px))}
.lm-toast{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border-radius:var(--r-md);background:var(--surface);
  border:1px solid var(--border);box-shadow:var(--shadow-md);font-size:13px;color:var(--ink-2)}
.lm-toast .lm-ic{color:var(--ink-3);margin-top:1px}
.lm-toast.ok .lm-ic{color:var(--ok)} .lm-toast.bad .lm-ic{color:var(--cold)} .lm-toast.warn .lm-ic{color:var(--warm-ink)}
.lm-toast b{display:block;color:var(--ink);font-weight:var(--w-semibold)}
.lm-toast .lm-ibtn{margin-left:auto}

.lm-banner{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:var(--r-md);border:1px solid var(--border);
  background:var(--surface-2);font-size:13px;color:var(--ink-2)}
.lm-banner .lm-ic{color:var(--ink-3);flex:none}
.lm-banner b{color:var(--ink);font-weight:var(--w-semibold)}
.lm-banner.warn{background:var(--lm-warn-bg)}
.lm-banner.warn .lm-ic{color:var(--warm-ink)}
.lm-banner.bad{background:var(--lm-bad-bg)}
.lm-banner.bad .lm-ic{color:var(--cold)}
.lm-banner .act{margin-left:auto;display:inline-flex;gap:6px}

/* ─── 13. Ambient — редкие моменты внимания ──────────────────────────── */
.lm-ambient{position:relative;overflow:hidden;border-radius:var(--r-xl);padding:18px 20px;color:var(--ink);border:1px solid var(--border);
  background:
    radial-gradient(120% 90% at 0% 0%,color-mix(in srgb,var(--purple) 18%,transparent),transparent 60%),
    radial-gradient(90% 80% at 100% 100%,color-mix(in srgb,var(--orange) 16%,transparent),transparent 60%),
    var(--surface)}
.lm-ambient::before{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  box-shadow:inset 0 1px 0 color-mix(in srgb,var(--surface) 70%,transparent)}
.lm-ambient .lm-eyebrow{color:var(--ink-3)}
.lm-ambient h3{font-size:16px;font-weight:600;margin:6px 0 4px;letter-spacing:-.02em}
.lm-ambient p{font-size:13px;color:var(--ink-2);margin:0;max-width:var(--lm-measure-narrow);line-height:1.5}
.lm-ambient .act{margin-top:12px;display:flex;gap:8px}

/* ─── 14. Тема: переключатель ────────────────────────────────────────── */
.lm-theme{display:inline-flex}
.lm-theme .lm-ic{color:var(--ink-3)}

/* ─── 15. Адаптив: композиция, а не сжатие ───────────────────────────── */
@media (max-width:1180px){
  .lm-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}
  .lm-col-3,.lm-col-4,.lm-col-5{grid-column:span 6}
  .lm-col-7,.lm-col-8,.lm-col-9{grid-column:span 12}
}
@media (max-width:820px){
  .lm-shell{grid-template-columns:1fr}
  .lm-shell.framed{padding:0}
  .lm-shell.framed>.lm-main{border:0;border-radius:0}
  .lm-side{position:fixed;left:0;top:0;bottom:0;width:min(300px,86vw);z-index:calc(var(--lm-z-drawer) + 1);
    transform:translateX(-102%);transition:transform var(--motion-slow) var(--ease-standard);box-shadow:none;border-radius:0!important;height:100dvh!important}
  .lm-shell.nav-open .lm-side{transform:none;box-shadow:var(--shadow-lg)}
  .lm-burger{display:inline-grid}
  .lm-top{padding:10px 14px}
  .lm-top .lm-h1{font-size:18px}
  .lm-toolbar{width:100%;margin-left:0;justify-content:flex-start;overflow-x:auto;flex-wrap:nowrap;padding-bottom:2px}
  .lm-content{padding:14px 14px 80px;gap:12px}
  .lm-col-6,.lm-col-3,.lm-col-4,.lm-col-5{grid-column:span 12}
  .lm-kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .lm-kpi{padding:12px 14px}
  .lm-kpi .lm-kpi-v{font-size:24px}
  .lm-kpi .lm-kpi-spark{width:56px;height:28px}
  .lm-stage{grid-template-columns:1fr auto;grid-template-areas:'nm n' 'bar bar'}
  .lm-stage .nm{grid-area:nm} .lm-stage .n{grid-area:n} .lm-stage .bar{grid-area:bar}
  .lm-card-h{padding:12px 14px 0;flex-wrap:wrap;row-gap:10px} .lm-card-h .act{margin-left:0;width:100%;flex-wrap:wrap}
  .lm-card-h .act .lm-input{width:100%!important}
  .lm-card-b{padding:10px 14px 14px}
  .lm-table th,.lm-table td{padding:0 12px}
}
@media (max-width:480px){
  .lm-kpis{grid-template-columns:1fr}
  .lm-top .lm-crumbs{display:none}
}

/* ─── 16. Печать и reduced-motion ────────────────────────────────────── */
@media print{
  .lm-side,.lm-top .lm-toolbar,.lm-burger,.lm-toasts{display:none!important}
  .lm-shell{grid-template-columns:1fr;background:#fff}
  .lm-card,.lm-kpi{box-shadow:none;break-inside:avoid}
}
@media (prefers-reduced-motion:reduce){
  .lm *,.lm *::before,.lm *::after{transition:none!important;animation:none!important}
}

/* ═══ 17. Визуализации lumen-viz.js (02.09.2026) ═══════════════════════════ */
/* тёмная тема: ступени серий выбраны заново, не инвертированы — проверено
   dataviz/validate_palette.js (--mode dark, surface #1C1B18): все пять проверок PASS.
   Это патч словаря (G3): долг — перенести в tokens.css прода и убрать отсюда. */
:root[data-theme="dark"]{--purple:#8F7DE8;--orange:#E06A28;--blue:#5B8DF0;--green:#2AAB66;--cyan:#2A8DC4;
  --clicks:#5B8DF0;--leads:#8F7DE8;--meet:#2A8DC4;--earn:#2AAB66}

.lm-unitbar{display:flex;gap:2px;border-radius:var(--r-pill);overflow:hidden;background:var(--chart-empty);margin-bottom:10px}
.lm-unitbar i{display:block;height:100%;min-width:2px}

.lm-cal{--c:var(--purple);display:grid;grid-template-columns:auto 1fr;gap:4px 6px;font-size:var(--lm-micro);color:var(--ink-4)}
.lm-cal-days{display:grid;grid-template-rows:repeat(7,1fr);gap:3px;grid-row:1}
.lm-cal-days span{height:11px;line-height:11px}
.lm-cal-grid{display:grid;gap:3px}
.lm-cal-col{display:grid;grid-template-rows:repeat(7,11px);gap:3px}
.lm-cal i,.lm-cal-scale i{display:block;width:11px;height:11px;border-radius:2px;background:var(--chart-empty)}
.lm-cal-col i{width:auto}
.lm-cal .l1,.lm-cal-scale .l1{background:color-mix(in srgb,var(--c) 22%,var(--chart-empty))}
.lm-cal .l2,.lm-cal-scale .l2{background:color-mix(in srgb,var(--c) 42%,var(--chart-empty))}
.lm-cal .l3,.lm-cal-scale .l3{background:color-mix(in srgb,var(--c) 62%,var(--chart-empty))}
.lm-cal .l4,.lm-cal-scale .l4{background:color-mix(in srgb,var(--c) 82%,var(--chart-empty))}
.lm-cal .l5,.lm-cal-scale .l5{background:var(--c)}
.lm-cal-months{grid-column:2;position:relative;height:14px}
.lm-cal-months span{position:absolute;top:0}
.lm-cal-scale{grid-column:2;display:flex;align-items:center;gap:3px;justify-content:flex-end;margin-top:2px}
.lm-cal-scale span{margin:0 4px}

.lm-cohort{--c:var(--purple)} .lm-heat{--c:var(--purple)}
.lm-cohort td[style*="--v"],.lm-heat td[style*="--v"]{background:color-mix(in srgb,var(--c) calc(8% + var(--v)*.72%),var(--surface));color:var(--ink)}
.lm-heat.div td.neg[style*="--v"]{background:color-mix(in srgb,var(--cold) calc(8% + var(--v)*.72%),var(--surface))}
.lm-heat.div td:not(.neg)[style*="--v"]{background:color-mix(in srgb,var(--ok) calc(8% + var(--v)*.72%),var(--surface))}
.lm-cohort td.empty,.lm-heat td.empty{background:repeating-linear-gradient(45deg,transparent 0 4px,var(--border-2) 4px 5px)}
.lm-cohort td[style*="--v:8"],.lm-cohort td[style*="--v:9"],.lm-heat td[style*="--v:8"],.lm-heat td[style*="--v:9"]{color:#fff}

.lm-timeline{display:flex;flex-direction:column;position:relative;padding-left:4px}
.lm-timeline::before{content:'';position:absolute;left:13px;top:12px;bottom:12px;width:1px;background:var(--border)}
.lm-timeline .ev{display:flex;gap:12px;padding:8px 0;position:relative}
.lm-timeline .dot{width:20px;height:20px;border-radius:50%;background:var(--surface);border:1px solid var(--ink-4);display:grid;place-items:center;flex:none;color:var(--ink-3);z-index:1}   /* §37: контур управления 1 px */
.lm-timeline .dot .lm-ic{width:11px;height:11px;stroke-width:var(--lm-icon-stroke)}
.lm-timeline .ok .dot{border-color:color-mix(in srgb,var(--ok) var(--lm-edge-tone),transparent);color:var(--ok)} .lm-timeline .warn .dot{border-color:color-mix(in srgb,var(--warm) var(--lm-edge-tone),transparent);color:var(--warm-ink)}
.lm-timeline .bad .dot{border-color:color-mix(in srgb,var(--cold) var(--lm-edge-tone),transparent);color:var(--cold)} .lm-timeline .info .dot{border-color:var(--blue);color:var(--blue)}
.lm-timeline .t small{display:block;font-size:var(--lm-micro);color:var(--ink-4)}
.lm-timeline .t b{display:block;font-weight:var(--w-semibold);color:var(--ink);font-size:13.5px;line-height:1.3}
.lm-timeline .t p{margin:2px 0 0;font-size:12.5px;color:var(--ink-3);line-height:1.45}

.lm-sm{display:grid;grid-template-columns:repeat(auto-fill,minmax(164px,1fr));gap:10px} /* §41: 150px калибровались по Geist; цифра Onest в .cap требовала 56px против 46px — подпись съедалась многоточием, число обрезалось */
.lm-sm .cell{border:1px solid var(--border-2);border-radius:var(--r-md);padding:10px 12px 8px;background:var(--surface)}
.lm-sm .cap{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:12px;color:var(--ink-3);margin-bottom:4px}
.lm-sm .cap b{font-size:15px;color:var(--ink);font-weight:600;letter-spacing:-.02em;white-space:nowrap}
.lm-sm .cap b small{font-size:11px;color:var(--ink-4);font-weight:400}
.lm-sm .sp svg{width:100%;height:40px}

.lm-picto .row{display:grid;grid-template-columns:140px 1fr;gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--border-2)}
.lm-picto .row:last-of-type{border-bottom:0}
.lm-picto .lbl b{display:block;font-weight:var(--w-semibold);color:var(--ink);font-size:13px}
.lm-picto .lbl small{font-size:var(--lm-micro);color:var(--ink-4)}
.lm-picto .ic{display:flex;flex-wrap:wrap;gap:3px;align-items:center}

.lm-compare{display:grid;grid-template-columns:1fr auto 1fr;gap:18px;align-items:center;text-align:center}
.lm-compare .side small{display:block;font-size:12px;color:var(--ink-3)}
.lm-compare .side b{display:block;font-size:34px;font-weight:var(--w-semibold);letter-spacing:-.035em;color:var(--ink-3);line-height:1.1;margin:4px 0}
.lm-compare .side.now b{color:var(--ink)}
.lm-compare .side b span{font-size:15px;font-weight:500;color:var(--ink-4);margin-left:4px}
.lm-compare .mid{display:flex;flex-direction:column;align-items:center;gap:4px}
.lm-compare .mid small{font-size:var(--lm-micro);color:var(--ink-4)}

.lm-band .track{position:relative;display:flex;gap:2px;height:10px;border-radius:var(--r-pill);overflow:visible;margin:26px 0 6px}
.lm-band .track i{display:block;height:100%;border-radius:3px;opacity:.85}
.lm-band .track i:first-child{border-radius:var(--r-pill) 3px 3px var(--r-pill)} .lm-band .track i:last-of-type{border-radius:3px var(--r-pill) var(--r-pill) 3px}
.lm-band .mark{position:absolute;top:-4px;width:2px;height:18px;background:var(--ink);transform:translateX(-1px)}
.lm-band .mark b{position:absolute;top:-22px;left:50%;transform:translateX(-50%);font-size:13px;color:var(--ink);white-space:nowrap}
.lm-band .ref{position:absolute;top:-2px;width:0;height:14px;border-left:2px dashed var(--ink-4)}
.lm-band .lbls{display:flex;justify-content:space-between;font-size:var(--lm-micro);color:var(--ink-4)}

/* ═══ 18. Блоки контуров lumen-blocks.js (02.09.2026) ═══════════════════════
   Выросли из трёх контуров: ЕДИНО (оценка звонков), Альфа (кабинет клиента), Аквилон (ценообразование). */

/* цитата с таймкодом */
.lm-evid-list{display:flex;flex-direction:column;gap:10px}
.lm-evid{margin:0;padding:10px 12px 10px 14px;border-left:1px solid var(--lm-mono-2);background:var(--surface-2);border-radius:0 var(--r-md) var(--r-md) 0}
.lm-evid.bad{border-left-color:var(--cold)} .lm-evid.ok,.lm-evid.star{border-left-color:var(--ok)} .lm-evid.warn{border-left-color:var(--warm)}
.lm-evid-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:4px;font-size:var(--lm-small);color:var(--ink-3)}
.lm-evid-h .who{font-weight:var(--w-semibold);color:var(--ink-2)} .lm-evid-h .who.клиент{color:var(--ink-3)}
.lm-evid-t{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 7px;border-radius:var(--r-pill);border:1px solid var(--border);background:var(--surface);font:inherit;font-size:11.5px;color:var(--ink-2);cursor:pointer;font-variant-numeric:tabular-nums}
.lm-evid-t:hover{border-color:var(--ink-4)} .lm-evid-t .lm-ic{color:var(--lm-emph)}
.lm-evid blockquote{margin:0;font-size:13.5px;line-height:1.5;color:var(--ink)}
.lm-evid-how{margin-top:6px;font-size:12.5px;color:var(--ink-2);padding:6px 10px;border-radius:var(--r-sm);background:var(--lm-ok-bg)}
.lm-evid-how b{color:var(--ok);font-weight:var(--w-semibold)}
.lm-evid .lm-file{margin-top:6px;font-size:12px}
.lm-evid-list.compact .lm-evid{padding:8px 10px} .lm-evid-list.compact blockquote{font-size:12.5px}

/* чек-лист оценки */
.lm-chk-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-end;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid var(--border-2);margin-bottom:6px}
.lm-chk-zones{display:flex;gap:2px;border-radius:var(--r-sm);overflow:hidden}
.lm-chk-zones .z{padding:6px 12px;background:var(--surface-3);display:flex;flex-direction:column;gap:1px;min-width:90px}
.lm-chk-zones .z b{font-size:12px;font-weight:var(--w-semibold);color:var(--ink-3)} .lm-chk-zones .z small{font-size:var(--lm-micro);color:var(--ink-4);font-variant-numeric:tabular-nums}
.lm-chk-zones .z.on{background:var(--lm-accent-bg)} .lm-chk-zones .z.on b{color:var(--ink)}
.lm-chk-block{border-bottom:1px solid var(--border-2)}
.lm-chk-block summary{list-style:none;display:grid;grid-template-columns:auto minmax(120px,1fr) 2fr auto;gap:12px;align-items:center;padding:10px 0;cursor:pointer;user-select:none}
.lm-chk-block summary::-webkit-details-marker{display:none}
.lm-chk-block summary .chev{color:var(--ink-4);transition:transform var(--motion-base)} .lm-chk-block[open] summary .chev{transform:rotate(90deg)}
.lm-chk-block summary .nm{font-size:13.5px;font-weight:var(--w-semibold);color:var(--ink)} .lm-chk-block summary .lm-bar i{background:var(--lm-emph)}
.lm-chk-block summary .sc{font-size:13px;color:var(--ink);white-space:nowrap} .lm-chk-block summary .sc small{color:var(--ink-4)}
.lm-chk-items{padding:0 0 10px 26px;display:flex;flex-direction:column;gap:6px}
.lm-chk-items .it{display:grid;grid-template-columns:auto 1fr auto auto;gap:10px;align-items:start;font-size:13px;color:var(--ink-2)}
.lm-chk-items .it .lm-ic{margin-top:2px} .lm-chk-items .it.ok .lm-ic{color:var(--ok)} .lm-chk-items .it.miss .lm-ic{color:var(--cold)} .lm-chk-items .it.na .lm-ic{color:var(--ink-4)}
.lm-chk-items .it.na{color:var(--ink-4)}
.lm-chk-items .it .q{display:block;color:var(--ink-3);font-size:12px;margin-top:2px;font-style:italic}
.lm-chk-items .it .w{min-width:32px;text-align:right;color:var(--ink-3)}

/* флаги */
.lm-flags{display:flex;flex-wrap:wrap;gap:6px}
.lm-flag{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 9px;border-radius:var(--r-pill);border:1px solid var(--border);background:var(--surface);font:inherit;font-size:12px;color:var(--ink-2);cursor:pointer}
.lm-flag .lm-ic{color:var(--cold)} .lm-flag.warn .lm-ic{color:var(--warm-ink)}
.lm-flag b{font-weight:600;color:var(--ink)} .lm-flag:hover{border-color:var(--ink-4);background:var(--surface-2)}

/* план/факт */
.lm-pf td{white-space:normal}

/* согласование */
.lm-appr{display:flex;flex-direction:column;gap:8px}
.lm-appr-item{border:1px solid var(--border);border-radius:var(--r-md);padding:10px 12px;background:var(--surface)}
.lm-appr-item.d-keep{border-left-color:var(--ok)} .lm-appr-item.d-change{border-left-color:var(--warm)} .lm-appr-item.d-drop{border-left-color:var(--cold);opacity:.75}
.lm-appr-item .row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.lm-appr-item .w{min-width:34px;font-weight:600;color:var(--ok)} .lm-appr-item .w.neg{color:var(--cold)}
.lm-appr-item .txt{flex:1;min-width:220px;font-size:13.5px;color:var(--ink)}
.lm-appr-item .lm-seg{margin-left:auto;height:30px}
.lm-appr-item .hist{margin-top:8px;padding-top:8px;border-top:1px solid var(--border-2);display:flex;flex-direction:column;gap:4px}
.lm-appr-item .hist .ev{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-2);flex-wrap:wrap} .lm-appr-item .hist .c{color:var(--ink-3)}
.lm-sumline{display:flex;flex-wrap:wrap;gap:8px 22px;padding:10px 14px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2);font-size:var(--lm-small);color:var(--ink-3)}
.lm-sumline span{display:flex;flex-direction:column} .lm-sumline b{font-size:15px;color:var(--ink);font-weight:600} .lm-sumline .pr{margin-left:auto;flex-direction:row;align-items:center;gap:8px}
.lm-warn.lm-method{background:var(--lm-warn-bg)} .lm-warn ul{margin:0;padding-left:18px;line-height:1.55}

/* приёмка */
.lm-acc{display:flex;flex-direction:column;gap:10px} .lm-acc-doc{border:1px solid var(--border);border-radius:var(--r-md);padding:12px 14px;display:flex;flex-direction:column;gap:10px}
.lm-acc td.wrap{min-width:120px}
.lm-pf th{white-space:normal;line-height:1.2}

/* блокеры */
.lm-blockers .age{display:flex;flex-direction:column;align-items:center;min-width:40px;line-height:1} .lm-blockers .age b{font-size:18px;font-weight:600;color:var(--ink-3)} .lm-blockers .age small{font-size:var(--lm-micro);color:var(--ink-4)}
.lm-blockers .age.old b{color:var(--cold)}

/* RAG */
.lm-rag{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 14px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)}
.lm-rag .dot{width:10px;height:10px;border-radius:50%;background:var(--ink-4);flex:none} .lm-rag.ontrack .dot{background:var(--ok)} .lm-rag.atrisk .dot{background:var(--warm)} .lm-rag.offtrack .dot{background:var(--cold)}
.lm-rag b{font-weight:600;color:var(--ink)} .lm-rag .note{color:var(--ink-3);font-size:13px;flex:1;min-width:200px} .lm-rag .meta{margin-left:auto} .lm-rag.stale{opacity:.6}

/* вехи */
.lm-ms-term{position:relative;height:8px;border-radius:var(--r-pill);background:var(--surface-4);margin:22px 0 4px}
.lm-ms-term i{position:absolute;inset:0 auto 0 0;background:var(--lm-mono-3);border-radius:inherit}
.lm-ms-term .now{position:absolute;top:-5px;width:2px;height:18px;background:var(--cold);transform:translateX(-1px)}
.lm-ms-term small{position:absolute;top:-18px;font-size:var(--lm-micro);color:var(--ink-4)}

/* ключевые даты */
.lm-dates{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.lm-date{border:1px solid var(--border);border-radius:var(--r-md);padding:10px 12px;display:flex;flex-direction:column;gap:2px;background:var(--surface)}
.lm-date b{font-size:18px;font-weight:600;color:var(--ink)} .lm-date span{font-size:13px;color:var(--ink-2)} .lm-date small{font-size:var(--lm-micro)}
.lm-date.past{opacity:.6} .lm-date.past b{text-decoration:line-through;color:var(--ink-4)}
.lm-date.next{background:var(--lm-warn-bg)} .lm-date.next b{color:var(--warm-ink)}

/* воронка две оси */
.lm-f2 .st{display:grid;grid-template-columns:28px 1fr;gap:10px;padding:8px 0;border-bottom:1px solid var(--border-2)} .lm-f2 .st:last-of-type{border-bottom:0}
.lm-f2 .n{width:24px;height:24px;border-radius:50%;background:var(--surface-3);display:grid;place-items:center;font-size:11px;color:var(--ink-3);font-weight:600}
.lm-f2 .t b{font-size:13.5px;font-weight:var(--w-semibold);color:var(--ink)} .lm-f2 .ax{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.lm-f2 .t1{border-color:color-mix(in srgb,var(--warm) var(--lm-edge-tone),transparent)} .lm-f2 .t2{border-color:color-mix(in srgb,var(--ok) var(--lm-edge-tone),transparent)}
.lm-f2 .lm-pill b{color:var(--ink)}

/* лента пути клиента */
.lm-journey{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(200px,1fr);gap:10px;overflow-x:auto;padding-bottom:6px}
.lm-journey .jst{border:1px solid var(--border);border-radius:var(--r-md);padding:10px 12px;background:var(--surface);display:flex;flex-direction:column;gap:6px;min-width:0}
.lm-journey .jst.emph{border-color:color-mix(in srgb,var(--lm-emph) 45%,var(--border));background:var(--lm-accent-bg)}
.lm-journey .hd{display:flex;align-items:center;gap:8px} .lm-journey .hd .n{width:22px;height:22px;border-radius:50%;background:var(--ink);color:var(--surface);display:grid;place-items:center;font-size:11px;font-weight:600}
.lm-journey .hd b{font-size:13px;font-weight:600;color:var(--ink)} .lm-journey .hd small{margin-left:auto;font-size:var(--lm-micro);color:var(--ink-4)}
.lm-journey .ln{display:flex;flex-direction:column;gap:1px;font-size:12px;color:var(--ink-2);line-height:1.4} .lm-journey .ln small{font-size:var(--lm-micro);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4)}

/* паспорт, пробелы */
.lm-passport td{white-space:normal;vertical-align:top;padding-top:8px;padding-bottom:8px} .lm-passport tr.missing td{background:color-mix(in srgb,var(--warm) 6%,transparent)}
.lm-gaps{display:flex;flex-direction:column;gap:10px}
.lm-gap{border:1px solid var(--border);border-radius:var(--r-md);padding:10px 12px;background:var(--surface)}
.lm-gap .hd{display:flex;align-items:center;gap:8px;margin-bottom:6px} .lm-gap .hd .n{width:20px;height:20px;border-radius:50%;background:var(--surface-3);font-size:var(--lm-micro);color:var(--ink-3);display:grid;place-items:center;font-weight:600}
.lm-gap .hd b{font-size:13.5px;font-weight:var(--w-semibold);color:var(--ink);flex:1}
.lm-gap .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;font-size:12.5px;color:var(--ink-2);line-height:1.45}
.lm-gap .grid small{display:block;font-size:var(--lm-micro);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4);margin-bottom:2px}
@media (max-width:760px){.lm-gap .grid{grid-template-columns:1fr}}

/* расценка */
.lm-price .l1{padding-bottom:12px;border-bottom:1px solid var(--border-2)}
.lm-price .nums{display:flex;gap:28px;flex-wrap:wrap;align-items:flex-end;margin-top:10px}
.lm-price .meta{display:flex;gap:18px;flex-wrap:wrap;margin-left:auto} .lm-price .meta span{display:flex;flex-direction:column} .lm-price .meta small{font-size:var(--lm-micro);color:var(--ink-4)} .lm-price .meta b{font-size:12.5px;font-weight:var(--w-semibold);color:var(--ink-2)}
.lm-price .chat{display:flex;gap:8px;align-items:center;margin-top:12px;padding:8px 10px;border:1px dashed var(--border-3);border-radius:var(--r-sm);background:var(--surface-2)}
.lm-price .chat code{flex:1;font-family:var(--font-mono);font-size:12px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lm-price details{border-bottom:1px solid var(--border-2)} .lm-price details summary{list-style:none;display:flex;align-items:center;gap:8px;padding:10px 0;font-size:13.5px;font-weight:var(--w-semibold);color:var(--ink);cursor:pointer}
.lm-price details summary::-webkit-details-marker{display:none} .lm-price details summary .chev{color:var(--ink-4)} .lm-price details[open] summary .chev{transform:rotate(90deg)}
.lm-price details .body{padding:0 0 10px}
.lm-price .lm-item{padding:6px 0} .lm-price .lm-item .dot{width:6px;height:6px;border-radius:50%;background:var(--lm-mono-3);flex:none;margin-top:7px;align-self:flex-start}
.lm-price .lm-item .r.up{color:var(--ok)} .lm-price .lm-item .r.down{color:var(--cold)}

/* трасса агентов */
.lm-trace{display:flex;flex-direction:column;gap:4px;font-size:12.5px}
.lm-span{padding:6px 10px;border-left:1px solid var(--border);border-radius:0 var(--r-sm) var(--r-sm) 0;background:var(--surface-2)}
.lm-span.d1{margin-left:18px} .lm-span.d2{margin-left:36px}
.lm-span.ok{border-left-color:var(--ok)} .lm-span.warn{border-left-color:var(--warm)} .lm-span.bad{border-left-color:var(--cold)}
.lm-span .hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap} .lm-span .hd code{font-family:var(--font-mono);font-size:11px;color:var(--ink-3)} .lm-span .hd b{font-weight:var(--w-semibold);color:var(--ink)}
.lm-span .hd .lm-ic{color:var(--ink-4)} .lm-span.ok .hd .lm-ic{color:var(--ok)} .lm-span.warn .hd .lm-ic{color:var(--warm-ink)} .lm-span.bad .hd .lm-ic{color:var(--cold)}
.lm-span .io{display:flex;gap:16px;flex-wrap:wrap;margin-top:4px;color:var(--ink-3)} .lm-span .io small{color:var(--ink-4);margin-right:4px;text-transform:uppercase;font-size:var(--lm-micro);letter-spacing:.05em}

/* HITL */
.lm-hitl{display:flex;flex-direction:column;gap:8px}
.lm-hitl-row{display:grid;grid-template-columns:minmax(160px,1.2fr) 1fr 1fr;gap:10px 12px;align-items:center;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)}
.lm-hitl-row.diff{background:color-mix(in srgb,var(--warm) 5%,var(--surface))}
.lm-hitl-row .lot{display:flex;flex-direction:column;gap:2px} .lm-hitl-row .lot b{font-size:13.5px;font-weight:var(--w-semibold);color:var(--ink)} .lm-hitl-row .lot small{font-size:var(--lm-micro);color:var(--ink-4)}
.lm-hitl-row .col{display:flex;flex-direction:column;gap:1px;padding-left:12px;border-left:1px solid var(--border-2)} .lm-hitl-row .col small{font-size:var(--lm-micro);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4)}
.lm-hitl-row .col b{font-size:17px;font-weight:600;color:var(--ink)} .lm-hitl-row .col span{font-size:12px;color:var(--ink-3)}
.lm-hitl-row .col.an .d{color:var(--warm-ink);font-weight:var(--w-semibold)}
.lm-hitl-row .act{grid-column:1/-1;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;padding-top:8px;border-top:1px solid var(--border-2)}
@media (max-width:900px){.lm-hitl-row{grid-template-columns:1fr 1fr} .lm-hitl-row .lot{grid-column:1/-1}}

/* правила */
.lm-rules{display:flex;flex-direction:column;gap:6px}
.lm-rule{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)}
.lm-rule summary{list-style:none;display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;flex-wrap:wrap} .lm-rule summary::-webkit-details-marker{display:none}
.lm-rule summary code{font-family:var(--font-mono);font-size:11px;color:var(--ink-4)} .lm-rule summary b{font-weight:var(--w-semibold);color:var(--ink);flex:1} .lm-rule summary .v{font-weight:600;color:var(--ink)}
.lm-rule summary .chev{color:var(--ink-4);transition:transform var(--motion-base)} .lm-rule[open] summary .chev{transform:rotate(180deg)}
.lm-rule .body{padding:0 12px 12px;border-top:1px solid var(--border-2);padding-top:10px}
.lm-rule .hist{margin-top:8px;display:flex;flex-direction:column;gap:4px} .lm-rule .hist .ev{display:grid;grid-template-columns:70px 1fr auto auto;gap:10px;align-items:center;font-size:12.5px;color:var(--ink-2);padding:4px 0;border-top:1px solid var(--border-2)}

/* агент */
.lm-agent{padding:14px 16px;border-radius:var(--r-xl);border:1px solid var(--border);background:radial-gradient(120% 90% at 0% 0%,color-mix(in srgb,var(--lm-emph) 10%,transparent),transparent 60%),var(--surface)}
.lm-agent .nums{display:flex;gap:22px;flex-wrap:wrap;margin:10px 0} .lm-agent .nums b{display:block;font-size:22px;font-weight:600;letter-spacing:-.02em;color:var(--ink)} .lm-agent .nums small{font-size:var(--lm-small);color:var(--ink-3)}
.lm-agent p{margin:0 0 10px;font-size:13.5px;color:var(--ink-2);line-height:1.5} .lm-agent .act{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:10px}

/* раскрытие тремя слоями */
.lm-drill .pane{padding:10px 2px;display:flex;flex-direction:column;gap:6px} .lm-drill code{padding:6px 8px;border-radius:var(--r-xs);background:var(--surface-2);display:inline-block}
.lm-drill ul{margin:0;padding-left:18px;line-height:1.55;color:var(--ink-2)}

/* полоса версии */
.lm-verbar{display:flex;align-items:center;gap:8px;padding:6px 12px;font-size:12.5px;color:var(--ink-2);background:var(--lm-info-bg);border:1px solid var(--border-2);border-radius:var(--r-sm)}
.lm-verbar .lm-ic{color:var(--info)} .lm-verbar span{flex:1}

/* переходы между контурами */
.lm-cnav{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:8px 12px;border:1px solid var(--border-2);border-radius:var(--r-md);background:var(--surface-2);font-size:12.5px}
.lm-cnav .back{display:inline-flex;align-items:center;gap:4px;color:var(--ink-3)} .lm-cnav .back:hover{color:var(--ink)}
.lm-cnav .sw{display:flex;gap:2px;padding:2px;border-radius:var(--r-sm);background:var(--surface-3)}
.lm-cnav .sw .c{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:6px;color:var(--ink-3)} .lm-cnav .sw .c.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}
.lm-cnav .sw .c.locked{color:var(--ink-4);cursor:help}
.lm-cnav .next{margin-left:auto;display:flex;align-items:center;gap:10px;flex-wrap:wrap} .lm-cnav .next small{color:var(--ink-4)} .lm-cnav .next a{display:inline-flex;align-items:center;gap:4px;color:var(--ink-2);font-weight:500} .lm-cnav .next a:hover{color:var(--ink)}

/* режим показа: 1280×720, три блока */
.lm-show{display:grid;grid-template-rows:auto auto 1fr auto;gap:18px;min-height:560px;padding:32px 40px;border:1px solid var(--border);border-radius:var(--r-xl);background:var(--surface)}
.lm-show header{display:flex;justify-content:space-between;align-items:center}
.lm-show .hero .num{font-size:88px;font-weight:var(--w-semibold);letter-spacing:-.045em;line-height:1;color:var(--ink)} .lm-show .hero .num small{font-size:28px;color:var(--ink-4);font-weight:500;margin-left:10px;letter-spacing:-.01em}
.lm-show .hero .base{font-size:20px;color:var(--ink-3);margin-top:8px}
.lm-show .fig{min-height:220px;min-width:0} .lm-show .fig svg{width:100%!important;max-width:none} .lm-show .fig .chart-axislbl{font-size:13px} .lm-show .fig .chart-catlbl{font-size:13px}
.lm-show footer{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:14px;color:var(--ink-3);border-top:1px solid var(--border-2);padding-top:14px}

/* бэктест */
.lm-bt .lm-kpi .lm-kpi-v{font-size:24px}

/* ═══ 19. Системный слой lumen-system.js (02.09.2026) ═══════════════════════ */
.lm-login{display:grid;grid-template-columns:1fr 1fr;min-height:420px;border:1px solid var(--border);border-radius:var(--r-xl);overflow:hidden;background:var(--surface)}
.lm-login .slab{background:var(--ink);color:var(--surface);padding:32px;display:flex;flex-direction:column;gap:14px;justify-content:flex-end}
.lm-login .slab .mark{background:var(--surface);color:var(--ink)} .lm-login .slab p{margin:0;font-size:22px;font-weight:600;letter-spacing:-.02em} .lm-login .slab small{opacity:.7;font-size:12.5px;line-height:1.5}
.lm-login .form{padding:32px;display:flex;flex-direction:column;gap:12px;justify-content:center}
@media (max-width:760px){.lm-login{grid-template-columns:1fr}.lm-login .slab{min-height:160px}}
.lm-profile .who{display:flex;align-items:center;gap:12px;margin-bottom:14px} .lm-profile .who b{display:block;font-size:15px;font-weight:600;color:var(--ink)} .lm-profile .who small{color:var(--ink-3)} .lm-profile .who .lm-btn{margin-left:auto}
.lm-profile .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px} .lm-profile .grid small,.lm-aiset .f small{display:block;font-size:var(--lm-micro);color:var(--ink-4);margin-bottom:4px;text-transform:uppercase;letter-spacing:.05em}
.lm-profile .grid .ro{grid-column:1/-1;padding:10px 12px;border:1px dashed var(--border-3);border-radius:var(--r-md);background:var(--surface-2)}
.lm-profile .sec{margin-top:16px;padding-top:12px;border-top:1px solid var(--border-2)} .lm-profile .sec>b,.lm-aiset .sec>b,.lm-md .sec>b{display:block;font-weight:600;color:var(--ink);margin-bottom:6px}
@media (max-width:760px){.lm-profile .grid{grid-template-columns:1fr}}
.lm-invite .link{display:flex;align-items:center;gap:8px;margin-top:10px;padding:8px 10px;border:1px dashed var(--border-3);border-radius:var(--r-sm);background:var(--surface-2)} .lm-invite .link code{flex:1;font-family:var(--font-mono);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink)}
.lm-acc-tbl th.c{text-align:center;white-space:normal;line-height:1.2;font-size:11px} .lm-acc-tbl td.c{text-align:center;cursor:pointer}
.lm-acc-tbl td.c i,.lm-access .sw{display:inline-block;width:18px;height:18px;border-radius:5px;background:var(--surface-3);vertical-align:middle;border:1px solid var(--border)}
.lm-acc-tbl td.c.role i,.lm-access .sw.role{background:var(--lm-mono-3);border-color:transparent} .lm-acc-tbl td.c.over i,.lm-access .sw.over{background:var(--lm-emph);border-color:transparent} .lm-acc-tbl td.c.deny i,.lm-access .sw.deny{background:color-mix(in srgb,var(--cold) 26%,transparent);border:1px solid var(--border-2)}
.lm-acc-tbl td.c small{position:relative;left:-12px;top:-8px;font-size:var(--lm-micro);font-weight:700;color:var(--ink)} .lm-acc-tbl td.c.over small{color:var(--lm-emph)} .lm-acc-tbl td.c.deny small{color:var(--cold)}
.lm-inbox .lm-item .ic{width:32px;height:32px;border-radius:9px;background:var(--surface-3);display:grid;place-items:center;color:var(--ink-3);flex:none} .lm-inbox .lm-item.unread .t b{font-weight:var(--w-semibold)} .lm-inbox .dot{width:8px;height:8px;border-radius:50%;background:var(--lm-emph)}
.lm-agentp{display:flex;flex-direction:column;gap:10px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);padding:12px 14px;min-height:420px}
.lm-agentp .hd{display:flex;align-items:center;gap:10px;flex-wrap:wrap} .lm-agentp .hd>div{flex:1 1 160px;min-width:0} .lm-agentp .hd b{display:block;font-weight:600;color:var(--ink)} .lm-agentp .hd small{font-size:var(--lm-micro);color:var(--ink-4)}
.lm-agentp .msgs{display:flex;flex-direction:column;gap:10px;flex:1;overflow:auto;padding:4px 0}
.lm-agentp .m{max-width:88%;padding:10px 12px;border-radius:var(--r-md);font-size:13.5px;line-height:1.5} .lm-agentp .m p{margin:0} .lm-agentp .m.me{align-self:flex-end;background:var(--ink);color:var(--surface)} .lm-agentp .m.ag{align-self:flex-start;background:var(--surface-2);color:var(--ink-2);display:flex;flex-direction:column;gap:8px}
.lm-agentp .facts{display:flex;gap:16px;flex-wrap:wrap} .lm-agentp .facts b{display:block;font-size:20px;font-weight:600;color:var(--ink)} .lm-agentp .facts small{font-size:var(--lm-micro);color:var(--ink-4)}
.lm-agentp .draft{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px dashed var(--border-3);border-radius:var(--r-sm);background:var(--surface)} .lm-agentp .draft.done{border-style:solid;border-color:color-mix(in srgb,var(--ok) 40%,var(--border))} .lm-agentp .draft .t{flex:1} .lm-agentp .draft b{display:block;font-weight:var(--w-semibold);color:var(--ink)} .lm-agentp .draft small{color:var(--ink-4);font-size:var(--lm-micro)} .lm-agentp .draft .act{display:flex;gap:6px}
.lm-agentp .sugg{display:flex;gap:6px;flex-wrap:wrap} .lm-agentp .ask{display:flex;gap:8px}
.lm-aiset .grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px} @media (max-width:900px){.lm-aiset .grid{grid-template-columns:repeat(2,1fr)}} .lm-aiset .sec{margin-top:14px}
.lm-onb .lm-ic.ok{color:var(--ok)} .lm-onb .lm-ic.now{color:var(--lm-emph)} .lm-onb .lm-ic.todo{color:var(--ink-4)} .lm-md .lm-ic.ok{color:var(--ok)} .lm-md .lm-ic.todo{color:var(--ink-4)}
.lm-tv{background:#10100F;color:#F1F0EC;border-radius:var(--r-lg);padding:16px 18px;display:flex;flex-direction:column;gap:12px;--bg:#10100F;--surface:#1C1B18;--surface-2:#22211E;--surface-3:#282722;--surface-4:#31302A;--border:#2A2925;--border-2:#232220;--ink:#F1F0EC;--ink-2:#D6D5D0;--ink-3:#A3A29C;--ink-4:#7A7973;--ink-5:#5C5B55;--chart-empty:#22211E}
.lm-tv header{display:flex;align-items:center;gap:14px;font-size:14px} .lm-tv header b{font-size:16px;font-weight:var(--w-semibold)} .lm-tv .sys i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;background:var(--ok)} .lm-tv .sys i.bad{background:var(--cold)} .lm-tv .clock{font-size:18px;font-weight:600;margin-left:8px}
.lm-tv .alerts{display:flex;gap:8px;overflow:hidden;white-space:nowrap} .lm-tv .alerts .a{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:var(--r-pill);background:var(--surface-2);font-size:13px} .lm-tv .alerts .a i{width:8px;height:8px;border-radius:50%;background:var(--ok)} .lm-tv .alerts .a.warn i{background:var(--warm)} .lm-tv .alerts .a.crit i{background:var(--cold)} .lm-tv .alerts small{opacity:.6}
.lm-tv{min-width:0;max-width:100%} .lm-tv header{flex-wrap:wrap} .lm-tv .tvk{grid-template-columns:repeat(4,minmax(0,1fr))} @media (max-width:820px){.lm-tv .tvk{grid-template-columns:repeat(2,minmax(0,1fr))}} @media (max-width:480px){.lm-tv .tvk{grid-template-columns:1fr}} .lm-tv .lm-kpi{background:var(--surface);border-color:var(--border);box-shadow:none} .lm-tv .lm-kpi .lm-kpi-v{font-size:34px}
.lm-tv .ticker{overflow:hidden;white-space:nowrap;font-size:13px;color:var(--ink-3);border-top:1px solid var(--border);padding-top:8px} .lm-tv .ticker span{display:inline-block;animation:lm-tick 40s linear infinite} @keyframes lm-tick{from{transform:translateX(20%)}to{transform:translateX(-100%)}}
.lm-insights .slice{margin-top:10px} .lm-insights .slice>small{display:block;font-size:var(--lm-micro);color:var(--ink-4);text-transform:uppercase;letter-spacing:.05em;margin-bottom:4px}
.lm-insights .row{display:grid;grid-template-columns:minmax(90px,1fr) 2fr auto;gap:10px;align-items:center;width:100%;padding:4px 6px;border:0;background:transparent;font:inherit;text-align:left;border-radius:var(--r-xs);cursor:pointer;color:var(--ink-2)} .lm-insights .row:hover{background:var(--surface-2)}
.lm-insights .row .bar{display:flex;gap:2px;height:10px;border-radius:3px;overflow:hidden;background:var(--chart-empty)} .lm-insights .row .bar i{display:block;height:100%} .lm-insights .row .v{font-size:12.5px;color:var(--ink)} .lm-insights .row .v small{color:var(--ink-4);margin-left:4px}
.lm-bulk{display:flex;align-items:center;gap:10px;padding:8px 12px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);box-shadow:var(--shadow-md);font-size:13px;flex-wrap:wrap}
.lm-md{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:18px} @media (max-width:820px){.lm-md{grid-template-columns:1fr}}
.lm-md .body{font-size:13.5px;line-height:1.55;color:var(--ink-2)} .lm-md .sec{margin-top:14px;padding-top:12px;border-top:1px solid var(--border-2)}
.lm-md .props{border-left:1px solid var(--border-2);padding-left:16px} .lm-md .props>b{display:block;font-weight:600;color:var(--ink);margin-bottom:8px}
.lm-md .props .p{display:grid;grid-template-columns:90px 1fr;gap:8px;padding:6px 0;font-size:12.5px;border-bottom:1px solid var(--border-2)} .lm-md .props .p small{color:var(--ink-4)} .lm-md .props .p span{color:var(--ink)}

/* ═══ 20. Бизнес-слой lumen-business.js (02.09.2026) ════════════════════════ */
.lm-proj{display:flex;flex-direction:column;gap:10px} .lm-proj .hd{display:flex;align-items:flex-start;gap:10px} .lm-proj .hd b{display:block;font-size:15px;font-weight:600;color:var(--ink)} .lm-proj .hd small{color:var(--ink-3)} .lm-proj .hd .lm-pill{margin-left:auto}
.lm-proj .one{font-size:13.5px;color:var(--ink-2);padding:8px 10px;border-left:3px solid var(--lm-emph);background:var(--surface-2);border-radius:0 var(--r-sm) var(--r-sm) 0}
.lm-proj{container-type:inline-size} .lm-proj .grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px 16px} .lm-proj .grid>div{display:flex;flex-direction:column;gap:3px;font-size:12.5px;color:var(--ink-3);min-width:0} .lm-proj .grid small{font-size:var(--lm-micro);text-transform:uppercase;letter-spacing:.05em;color:var(--ink-4)} .lm-proj .grid b{font-size:14px;font-weight:600;color:var(--ink);line-height:1.3;overflow-wrap:anywhere} .lm-proj .grid>div>span{font-size:11.5px;color:var(--ink-3);display:flex;align-items:center;gap:6px;flex-wrap:wrap;line-height:1.35} .lm-proj .grid .lm-file{display:inline-flex;max-width:100%}
/* факты: 4 колонки при ширине блока от 480 px, 2×2 уже, столбик на телефоне — по контейнеру, не по окну */
@container (max-width:479px){.lm-proj .grid{grid-template-columns:repeat(2,minmax(0,1fr))}} @container (max-width:300px){.lm-proj .grid{grid-template-columns:1fr}}
.lm-board{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(200px,1fr);gap:10px;overflow-x:auto;padding-bottom:6px}
.lm-board .col{background:var(--surface-2);border-radius:var(--r-md);padding:8px;display:flex;flex-direction:column;gap:6px;min-width:0} .lm-board .ch{display:flex;align-items:center;justify-content:space-between;padding:2px 4px 6px} .lm-board .ch b{color:var(--ink-3);font-size:12px}
.lm-board .pc{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);padding:8px 10px;font-size:12.5px} .lm-board .pc b{display:block;font-weight:var(--w-semibold);color:var(--ink)} .lm-board .pc small{color:var(--ink-4)}
.lm-kp{display:flex;flex-direction:column;gap:18px} .lm-kp .sum{padding:18px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface-2)}
.lm-kp .trio{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;font-size:13px;color:var(--ink-2);line-height:1.45} .lm-kp .trio small,.lm-kp .roi small,.lm-pm .grid small,.lm-two .sc small{display:block;font-size:var(--lm-micro);text-transform:uppercase;letter-spacing:.05em;color:var(--ink-4);margin-bottom:3px}
.lm-kp .sec>b{display:block;font-weight:600;color:var(--ink);margin-bottom:8px} .lm-kp .pain{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);font-size:13px;color:var(--ink-2);height:100%} .lm-kp .pain b{font-size:20px;font-weight:600;color:var(--cold);line-height:1}
.lm-kp .steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px} .lm-kp .st{padding:10px;border:1px solid var(--border);border-radius:var(--r-md);display:flex;flex-direction:column;gap:2px;font-size:12.5px} .lm-kp .st .n{width:22px;height:22px;border-radius:50%;background:var(--ink);color:var(--surface);display:grid;place-items:center;font-size:11px;font-weight:600;margin-bottom:4px} .lm-kp .st b{font-weight:var(--w-semibold);color:var(--ink)} .lm-kp .st small{color:var(--ink-4)}
.lm-kp .roi{display:flex;gap:22px;flex-wrap:wrap} .lm-kp .roi b{font-size:20px;font-weight:600;color:var(--ink)} .lm-kp .next ol{margin:0 0 10px;padding-left:20px;line-height:1.7;color:var(--ink-2)}
@media (max-width:760px){.lm-kp .trio{grid-template-columns:1fr}}
.lm-q-block{border:1px solid var(--border);border-radius:var(--r-md);margin-bottom:8px;background:var(--surface)} .lm-q-block summary{list-style:none;display:flex;align-items:center;gap:8px;padding:10px 12px;cursor:pointer} .lm-q-block summary::-webkit-details-marker{display:none} .lm-q-block summary b{flex:1;font-weight:600;color:var(--ink)} .lm-q-block summary small{color:var(--ink-4)} .lm-q-block[open] summary .chev{transform:rotate(90deg)}
.lm-q-block .items{padding:0 12px 12px;display:flex;flex-direction:column;gap:10px} .lm-q-block .q label{display:block;font-size:13px;color:var(--ink);margin-bottom:4px} .lm-q-block .q label small{display:block;font-size:var(--lm-micro);color:var(--ink-4)}
.lm-q-block .q .a{min-height:34px;padding:7px 10px;border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface-2);font-size:13px;color:var(--ink);outline:none} .lm-q-block .q .a:empty::before{content:attr(data-placeholder);color:var(--ink-4)} .lm-q-block .q .a:focus{border-color:var(--ink-4);box-shadow:var(--lm-ring)}
.lm-case .lm-ic.bad{color:var(--cold)}
.lm-pm .hd{display:flex;align-items:center;gap:10px;margin-bottom:10px} .lm-pm .hd b{font-weight:600;color:var(--ink);flex:1} .lm-pm .grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;font-size:13px;color:var(--ink-2);line-height:1.45;margin-bottom:8px} .lm-pm .grid b{color:var(--ink)}
.lm-partner .tiers{display:flex;gap:8px;margin:12px 0} .lm-partner .t{flex:1;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);text-align:center} .lm-partner .t b{display:block;font-size:20px;font-weight:600;color:var(--ink-3)} .lm-partner .t small{font-size:var(--lm-micro);color:var(--ink-4)} .lm-partner .t.on{border-color:var(--lm-emph);background:var(--lm-accent-bg)} .lm-partner .t.on b{color:var(--ink)}
.lm-branch td.num{position:relative} .lm-branch td.num b{display:block;font-weight:600} .lm-branch td.num .rk{position:static;display:block;font-size:var(--lm-micro);color:var(--ink-4);line-height:1.2;margin-bottom:1px;font-variant-numeric:tabular-nums}   /* §44: ранг строкой над значением, не поверх него */ .lm-branch td.num small{display:block;font-size:11px;color:var(--ink-4)} .lm-branch td.num small.up{color:var(--ok)} .lm-branch td.num small.down{color:var(--cold)} .lm-branch tr.mean td{border-top:1px solid var(--border);font-style:italic}
.lm-rubric .lbl .n,.lm-focus .n,.lm-patterns .n{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--surface-3);font-size:var(--lm-micro);font-weight:600;color:var(--ink-3);margin-right:8px;vertical-align:middle}
.lm-svc .big{display:flex;align-items:center;gap:14px;margin-bottom:10px} .lm-svc .big b{display:block;font-weight:600;color:var(--ink)}
.lm-review .pane{padding-top:12px} .lm-review .err{border:1px solid var(--border);border-radius:var(--r-md);padding:10px 12px;border-left-color:var(--warm)} .lm-review .err.high{border-left-color:var(--cold)} .lm-review .err.low{border-left-color:var(--ink-4)}
.lm-review .err .hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px} .lm-review .err .hd b{font-weight:var(--w-semibold);color:var(--ink)} .lm-review .err .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;font-size:12.5px;color:var(--ink-2);line-height:1.45} .lm-review .err .grid small{display:block;font-size:var(--lm-micro);text-transform:uppercase;letter-spacing:.05em;color:var(--ink-4)} .lm-review .err .grid b{color:var(--ok)}
@media (max-width:760px){.lm-review .err .grid{grid-template-columns:1fr}}
.lm-focus .hd{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border-radius:var(--r-md);background:var(--lm-accent-bg);margin-bottom:10px} .lm-focus .hd .lm-ic{color:var(--lm-emph);margin-top:2px} .lm-focus .hd small{display:block;font-size:var(--lm-micro);color:var(--ink-4)} .lm-focus .hd b{font-size:15px;font-weight:600;color:var(--ink)}
.lm-focus .acts{display:flex;flex-direction:column;gap:6px} .lm-focus .a{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--r-md)} .lm-focus .a>div{flex:1} .lm-focus .a b{display:block;font-weight:var(--w-semibold);color:var(--ink);font-size:13px} .lm-focus .a small{color:var(--ink-4);font-size:var(--lm-micro)} .lm-focus .cl{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap;align-items:center} .lm-focus .cl small{color:var(--ink-4);font-size:var(--lm-micro);text-transform:uppercase;letter-spacing:.05em}
.lm-skills{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px} .lm-skills .sk{border:1px solid var(--border-2);border-radius:var(--r-md);padding:10px 12px;background:var(--surface)} .lm-skills .hd{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:4px} .lm-skills .hd b{font-size:13px;font-weight:600;color:var(--ink);flex:1} .lm-skills .hd .lm-num{font-size:16px;font-weight:600;color:var(--ink)} .lm-skills .hd .lm-num small{font-size:11px;color:var(--ink-4);font-weight:400} .lm-skills .sp svg{width:100%;height:30px}
.lm-phase{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:8px} .lm-phase .ph{padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);font-size:12.5px;color:var(--ink-2);display:flex;flex-direction:column;gap:3px} .lm-phase .ph.on{border-color:var(--lm-emph);background:var(--lm-accent-bg)} .lm-phase .ph small{font-size:var(--lm-micro);color:var(--ink-4);text-transform:uppercase;letter-spacing:.05em} .lm-phase .ph b{font-weight:600;color:var(--ink)}
@media (max-width:760px){.lm-phase{grid-auto-flow:row}}
.lm-promises .age{display:flex;flex-direction:column;align-items:center;min-width:44px;line-height:1} .lm-promises .age b{font-size:16px;font-weight:600;color:var(--ink-3)} .lm-promises .age small{font-size:var(--lm-micro);color:var(--ink-4);text-align:center} .lm-promises .age.old b{color:var(--cold)}
.lm-two{display:grid;grid-template-columns:1fr auto 1fr;gap:14px;align-items:center} .lm-two .sc b{display:block;font-size:26px;font-weight:600;color:var(--ink);margin:2px 0 6px} .lm-two .sc b span{font-size:13px;color:var(--ink-4);font-weight:400} .lm-two .vs{text-align:center} .lm-two .vs b{display:block;font-size:18px;font-weight:600;color:var(--warm-ink)} .lm-two .vs small{font-size:var(--lm-micro);color:var(--ink-4)}
.lm-patterns{display:flex;flex-direction:column;gap:10px} .lm-patterns .pt{border:1px solid var(--border);border-radius:var(--r-md);padding:10px 12px} .lm-patterns .hd{display:flex;align-items:center;gap:8px;margin-bottom:6px} .lm-patterns .hd b{flex:1;font-weight:600;color:var(--ink)} .lm-patterns blockquote{margin:0 0 6px;font-size:13px;color:var(--ink-2);padding-left:10px;border-left:3px solid var(--lm-mono-2)} .lm-patterns blockquote small{color:var(--ink-4)}
.lm-digest{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);padding:18px;max-width:640px;display:flex;flex-direction:column;gap:14px} .lm-digest .nums{display:grid;grid-template-columns:repeat(3,1fr);gap:10px} .lm-digest .nums b{display:block;font-size:24px;font-weight:600;color:var(--ink);letter-spacing:-.02em} .lm-digest .nums small{display:block;font-size:12px;color:var(--ink-3)} .lm-digest .nums span{display:block;font-size:var(--lm-micro);color:var(--ink-4)}
.lm-digest .sec>b{display:block;font-weight:600;color:var(--ink);margin-bottom:4px} .lm-digest ol{margin:0;padding-left:20px;line-height:1.6;color:var(--ink-2);font-size:13px} .lm-digest .ft{display:flex;justify-content:space-between;align-items:center;gap:10px;border-top:1px solid var(--border-2);padding-top:12px;flex-wrap:wrap}
.lm-portrait{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px} .lm-portrait .grp{border:1px solid var(--border-2);border-radius:var(--r-md);padding:10px 12px} .lm-portrait .hd{display:flex;align-items:center;gap:8px;margin-bottom:6px} .lm-portrait .hd b{flex:1;font-weight:600;color:var(--ink)} .lm-portrait .hd small{color:var(--ink-4);font-size:var(--lm-micro)}
.lm-portrait .it{display:grid;grid-template-columns:minmax(0,1.4fr) 1fr auto;gap:8px;align-items:center;width:100%;padding:4px 4px;border:0;background:transparent;font:inherit;font-size:12.5px;color:var(--ink-2);text-align:left;border-radius:var(--r-xs);cursor:pointer} .lm-portrait .it:hover{background:var(--surface-2)} .lm-portrait .it .bar{height:8px;border-radius:3px;background:var(--chart-empty);overflow:hidden} .lm-portrait .it .bar i{display:block;height:100%;background:var(--lm-mono-3)}
.lm-gate{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px dashed var(--border-3);border-radius:var(--r-md);background:var(--surface-2)} .lm-gate .ic{width:36px;height:36px;border-radius:10px;background:var(--surface-3);display:grid;place-items:center;color:var(--ink-3);flex:none} .lm-gate .t{flex:1} .lm-gate .t b{display:block;font-weight:600;color:var(--ink)} .lm-gate .t small{display:block;color:var(--ink-3);font-size:12.5px;line-height:1.45}

/* §20.1 v3.2.1 — правки после живого просмотра бизнес-слоя */
.lm-kpis.fit{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))} /* 4 плитки в полукарточке → 2×2, в полной → ряд */
.lm-kp .pain b{white-space:nowrap}
.lm-quest .lm-row.between{flex-wrap:wrap;gap:8px}
.lm-branch td.num{padding-right:10px}
.lm-refunds td,.lm-refunds .lm-tag{white-space:normal}
.lm-refunds .lm-pill{white-space:nowrap}
.lm-gate{flex-wrap:wrap} .lm-gate .t{flex:1 1 200px;min-width:0} .lm-gate .r{flex:0 0 auto}
.lm-grid>*{min-width:0} /* трек сетки не растёт от широкой таблицы; таблица скроллится внутри карточки */

/* ═══ §21 ДВИЖЕНИЕ · v3.3 ══════════════════════════════════════════════
   По мотивам CodedVisuals (ДОНОРЫ/CODEDVISUALS/ИДЕИ.md). Витрина статична, пока
   экран не включил движение (data-motion / LM.motion.*). Одна пружина на
   систему: cubic-bezier(.2,1.6,.4,1). При prefers-reduced-motion классы
   .lm-reveal/.lm-pop не двигают ничего — конечное состояние сразу. */
.lm-reveal,.lm-pop{opacity:1}
@media (prefers-reduced-motion:no-preference){
  .lm-reveal{opacity:0;transform:translateY(6px);transition:opacity .35s ease-out var(--lm-delay,0ms),transform .35s ease-out var(--lm-delay,0ms)}
  .lm-reveal.lm-in{opacity:1;transform:none}
  .lm-pop{opacity:0;transform:scale(.9);transition:transform .35s var(--lm-ease-smooth,cubic-bezier(.22,1,.36,1)) var(--lm-delay,0ms),opacity .2s ease-out var(--lm-delay,0ms)} .lm-deck .lm-pop,.lm-show .lm-pop{transform:scale(.6);transition-timing-function:cubic-bezier(.2,1.6,.4,1),ease-out;transition-duration:.45s,.2s} /* КРАФТ п.3: старт .9, пружина только в показе */
  .lm-pop.lm-in{opacity:1;transform:none}
  .lm-pulse-ring{position:relative} .lm-pulse-ring::after{content:'';position:absolute;inset:-3px;border-radius:inherit;border:1px solid currentColor;animation:lm-ring 1.6s ease-out infinite}
  @keyframes lm-ring{0%{transform:scale(.6);opacity:0}30%{opacity:.5}100%{transform:scale(1.5);opacity:0}}
  .lm-swing{transform-origin:top center;animation:lm-swing 1.2s ease-in-out .45s infinite} @keyframes lm-swing{0%,100%{rotate:0deg}15%{rotate:-14deg}30%{rotate:12deg}45%{rotate:-10deg}60%{rotate:8deg}75%{rotate:-5deg}}
  .lm-flow .n{transition:border-color .3s ease-out,background .3s ease-out,color .3s ease-out} .lm-flow.lm-run .n{animation:lm-light 3.6s ease-in-out infinite;animation-delay:calc(var(--i,0)*.6s)}
  @keyframes lm-light{0%,100%{border-color:var(--border);background:var(--surface);color:var(--ink-3)}12%,28%{border-color:var(--lm-emph);background:color-mix(in srgb,var(--lm-emph) 10%,var(--surface));color:var(--ink)}}
  .lm-flow.lm-run .c i{animation:lm-dash 3.6s linear infinite;animation-delay:calc(var(--i,0)*.6s + .3s)} @keyframes lm-dash{0%{transform:translateX(0)}40%,100%{transform:translateX(467%)}} /* КРАФТ п.2: transform вместо left */
}
/* модификаторы показа: только показ-режим §9б и КП, в рабочей витрине не применяются */
.lm-glow{position:relative;isolation:isolate} .lm-glow::before{content:'';position:absolute;left:8px;right:8px;bottom:-6px;height:26px;border-radius:999px;background:linear-gradient(90deg,var(--lm-emph),var(--lm-emph-2),var(--lm-emph));filter:blur(10px);opacity:.45;z-index:-1}
.lm-glow::after{content:'';position:absolute;left:-2px;right:-2px;bottom:-2px;height:40px;border-radius:0 0 var(--lm-card-r) var(--lm-card-r);background:color-mix(in srgb,var(--bg) 95%,transparent);-webkit-mask-image:linear-gradient(to top,var(--ink),transparent 50%);mask-image:linear-gradient(to top,var(--ink),transparent 50%);z-index:-1}
.lm-fade-b{-webkit-mask-image:linear-gradient(to bottom,var(--ink) 70%,transparent);mask-image:linear-gradient(to bottom,var(--ink) 70%,transparent)}
.lm-vignette{-webkit-mask-image:radial-gradient(ellipse 92% 92% at 50% 50%,var(--ink) 70%,transparent 100%);mask-image:radial-gradient(ellipse 92% 92% at 50% 50%,var(--ink) 70%,transparent 100%)}
.lm-iso-stage{perspective:1400px;display:grid;place-items:center;padding:40px 0;min-height:260px} .lm-iso.lm-reveal.lm-in,.lm-iso.lm-pop.lm-in{transform:rotateX(45deg) rotateZ(-45deg)} .lm-iso{transform:rotateX(45deg) rotateZ(-45deg);transform-style:preserve-3d;box-shadow:0 30px 60px -20px color-mix(in srgb,var(--ink) 25%,transparent)}
.lm-badge-period{font-size:var(--lm-micro);font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);background:var(--surface-2);border:1px solid var(--border);border-radius:6px;padding:2px 6px;font-family:var(--font-mono)}

/* §21.1 блоки по мотивам CodedVisuals · lumen-visuals.js */
.lm-up .row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px} .lm-up .row b{font-size:var(--lm-kpi);font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.lm-up .bar{display:flex;gap:2px;height:28px} .lm-up .bar i{flex:1;border-radius:2px;background:var(--ok);opacity:.85;min-width:2px;cursor:default} .lm-up .bar i.warn{background:var(--warm)} .lm-up .bar i.bad{background:var(--cold)} .lm-up .bar i.na{background:var(--chart-empty)}
.lm-up .bar i:hover{opacity:1;outline:1px solid var(--ink-3)} .lm-up .ax{display:flex;justify-content:space-between;font-size:11px;color:var(--ink-4);margin-top:5px;font-family:var(--font-mono)} .lm-up .sw{display:inline-block;width:10px;height:10px;border-radius:2px;vertical-align:-1px;margin-right:5px}
.lm-health .it{display:grid;grid-template-columns:auto 1fr auto auto;gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid var(--border-2)} .lm-health .it:last-child{border-bottom:0}
.lm-health .dot{width:9px;height:9px;border-radius:50%;background:var(--ok)} .lm-health .dot.warn{background:var(--warm)} .lm-health .dot.bad{background:var(--cold);color:var(--cold)} .lm-health .dot.na{background:var(--chart-empty)}
.lm-health .nm b{display:block;font-weight:var(--w-semibold);font-size:13px} .lm-health .nm small{color:var(--ink-4);font-size:11.5px} .lm-health .lat{font-family:var(--font-mono);font-size:12px;color:var(--ink-2)} .lm-health .when{font-size:11px;color:var(--ink-4);white-space:nowrap}
.lm-usage .top{display:flex;justify-content:space-between;align-items:baseline;gap:12px} .lm-usage .top b{font-size:22px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums} .lm-usage .top b small{font-size:12px;color:var(--ink-4);font-weight:500;margin-left:4px}
.lm-usage .meter{position:relative;height:10px;border-radius:999px;background:var(--chart-empty);margin:10px 0 6px;overflow:hidden} .lm-usage .meter i{position:absolute;left:0;top:0;bottom:0;background:var(--lm-emph);border-radius:999px} .lm-usage .meter i.warn{background:var(--warm)} .lm-usage .meter i.bad{background:var(--cold)}
.lm-usage .meter s{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--ink-3);text-decoration:none} .lm-usage .items{display:flex;flex-direction:column;gap:5px;margin-top:10px}
.lm-flow{display:flex;align-items:stretch;gap:0;overflow-x:auto;padding:4px 0} .lm-flow .n{flex:1 1 0;min-width:88px;border:1px solid var(--border);border-radius:var(--r-md);padding:10px 12px;background:var(--surface);color:var(--ink-3);position:relative}
.lm-flow .n b{display:block;color:var(--ink);font-weight:var(--w-semibold);font-size:13px} .lm-flow .n small{font-size:11.5px;color:var(--ink-4)} .lm-flow .n .st{position:absolute;top:8px;right:8px}
.lm-flow .n.done{border-color:color-mix(in srgb,var(--ok) var(--lm-edge-tone),transparent)} .lm-flow .n.run{border-color:var(--lm-emph);background:color-mix(in srgb,var(--lm-emph) 8%,var(--surface));color:var(--ink)}
.lm-flow .c{flex:0 0 26px;position:relative;display:grid;place-items:center} .lm-flow .c::before{content:'';position:absolute;left:0;right:0;top:50%;height:1px;background:var(--border-3)} .lm-flow .c i{position:absolute;top:calc(50% - 2px);left:-30%;width:8px;height:4px;border-radius:2px;background:var(--lm-emph);opacity:0}
.lm-flow.lm-run .c i{opacity:1}
.lm-rag{display:grid;grid-template-columns:1fr 1.4fr 1.6fr;gap:12px;align-items:start} .lm-rag .q{background:var(--ink);color:var(--surface);border-radius:14px 14px 4px 14px;padding:10px 12px;font-size:13px}
.lm-rag .src{border:1px solid var(--border);border-radius:var(--r-md);padding:8px 10px;margin-bottom:6px;font-size:12.5px;position:relative} .lm-rag .src b{display:block;font-weight:var(--w-semibold);color:var(--ink)} .lm-rag .src small{color:var(--ink-4)} .lm-rag .src .sc{height:3px;border-radius:2px;background:var(--chart-empty);margin-top:6px} .lm-rag .src .sc i{display:block;height:100%;background:var(--lm-emph);border-radius:2px}
.lm-rag .src .k{position:absolute;top:6px;right:8px;font-family:var(--font-mono);font-size:var(--lm-micro);color:var(--ink-4)} .lm-rag .a{background:var(--surface-2);border-radius:14px 14px 14px 4px;padding:10px 12px;font-size:13px;line-height:1.5} .lm-rag .a sup{font-family:var(--font-mono);font-size:var(--lm-micro);color:var(--lm-emph);margin-left:1px}
@media (max-width:760px){.lm-rag{grid-template-columns:1fr}}
/* до/после (v6): подпись — колонка фиксированной ширины, полоса 10 px, значение сразу справа от полосы основным шрифтом tabular, база — тише той же строкой; ряды через 2 px */
.lm-cmp .pair{display:grid;grid-template-columns:var(--lm-cmp-lbl,64px) minmax(0,1fr);gap:10px;align-items:center;margin:0} .lm-cmp .pair+.pair{margin-top:2px} .lm-cmp .pair .lbl{font-size:12.5px;color:var(--ink);font-weight:var(--w-semibold);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lm-cmp .trk{display:flex;align-items:center;gap:4px 8px;min-width:0;min-height:16px;flex-wrap:wrap} .lm-cmp .bar{flex:none;height:10px;border-radius:3px;background:var(--lm-mono-3);width:calc(var(--p,0) * 58%);min-width:2px} .lm-cmp .pair.after .bar{background:var(--lm-emph)}
.lm-cmp .v{font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--ink);white-space:nowrap;line-height:1.2} .lm-cmp .base{font-size:11px;color:var(--ink-4);min-width:0;line-height:1.2}
.lm-cmp .imp{display:flex;align-items:baseline;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border-2)} .lm-cmp .imp b{font-size:22px;font-weight:600;letter-spacing:-.02em;white-space:nowrap} .lm-cmp .imp{flex-wrap:wrap} .lm-cmp .imp .lm-vs{white-space:normal;line-height:1.35;min-width:0}   /* база переносится, не расширяет плавающую карточку на 390 */
.lm-feed .it{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:start;padding:8px 0;border-bottom:1px solid var(--border-2)} .lm-feed .it:last-child{border-bottom:0} .lm-feed .it .t{font-size:13px;color:var(--ink-2)} .lm-feed .it .t b{color:var(--ink);font-weight:var(--w-semibold)} .lm-feed .it .t small{display:block;font-size:11.5px;color:var(--ink-4);margin-top:1px} .lm-feed .it .tm{font-size:11px;color:var(--ink-4);white-space:nowrap;font-family:var(--font-mono)}
.lm-avi{width:28px;height:28px;border-radius:50%;background:var(--surface-3);color:var(--ink-2);display:inline-grid;place-items:center;font-size:var(--lm-micro);font-weight:600;letter-spacing:.02em;flex:none}

/* ═══ §22 ПРЕЗЕНТАЦИЯ · lumen-deck.js (v4) ═══════════════════════════
   Слайд = утверждение + фигура + база + источник (§9б). Те же токены и
   блоки, что в витрине; модификаторы показа (§21) здесь разрешены. */
.lm-deck{position:fixed;inset:0;overflow:hidden;background:var(--bg);color:var(--ink);font-family:var(--font)}
.lm-slide{position:absolute;inset:0;padding:5vh 6vw 9vh;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:2vh;opacity:0;transform:translateX(28px);transition:opacity .35s ease-out,transform .45s cubic-bezier(.2,.8,.2,1);pointer-events:none}
.lm-slide.past{transform:translateX(-28px)} .lm-slide.on{opacity:1;transform:none;pointer-events:auto;z-index:1}
.lm-slide .lm-eyebrow{font-size:clamp(11px,.9vw,14px)} .lm-slide .h{font-size:clamp(26px,3.6vw,56px);font-weight:600;letter-spacing:-.025em;line-height:1.08;margin:.2em 0 .1em;max-width:22ch;text-wrap:balance}
.lm-slide .sub{font-size:clamp(14px,1.3vw,22px);color:var(--ink-3);margin:0;max-width:var(--lm-measure-narrow);line-height:1.45}
.lm-slide>.head{grid-row:1} .lm-slide>.body{grid-row:2} .lm-slide>.foot{grid-row:3} .lm-slide .head:empty{display:none} .lm-slide .body{min-height:0;display:grid;align-content:start} .lm-slide.kpi .body,.lm-slide.figure .body{align-content:center} .lm-slide .body.center{place-content:center;text-align:center;justify-items:center}
.lm-slide.title .h{font-size:clamp(34px,5vw,84px);max-width:12em} .lm-slide .mark{display:flex;align-items:center;gap:12px;justify-content:center;margin-bottom:3vh;color:var(--ink-3);font-size:clamp(12px,1vw,16px)} .lm-avi.lg{width:44px;height:44px;font-size:15px;background:var(--ink);color:var(--surface)}
.lm-slide .fig{min-height:0;height:100%;display:grid;align-content:center} .lm-slide .fig svg{max-height:62vh} .lm-slide .fig>.lm-card{max-width:min(920px,100%);margin:0 auto;width:100%}
.lm-slide .body.split{grid-template-columns:minmax(260px,.9fr) 1.4fr;gap:4vw;align-items:center} .lm-slide .pts{margin:1vh 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:1.4vh}
.lm-slide .pts li{font-size:clamp(14px,1.35vw,22px);line-height:1.4;padding-left:22px;position:relative;color:var(--ink-2)} .lm-slide .pts li::before{content:'';position:absolute;left:0;top:.62em;width:10px;height:2px;background:var(--lm-emph)}
.lm-slide .body.grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:minmax(0,1fr);gap:2vh 2vw;align-content:stretch} .lm-slide .cell{min-height:0;display:flex;flex-direction:column} .lm-slide .cell .lm-card-b{flex:1;min-height:0;overflow:hidden}
.lm-slide .q{font-size:clamp(22px,2.6vw,42px);font-weight:500;letter-spacing:-.02em;line-height:1.25;max-width:20em;margin:0;quotes:'«' '»'} .lm-slide .q::before{content:open-quote;color:var(--lm-emph)} .lm-slide .q::after{content:close-quote;color:var(--lm-emph)} .lm-slide .who{margin-top:2vh}
.lm-slide .foot{display:flex;gap:18px;align-items:baseline;flex-wrap:wrap;border-top:1px solid var(--border-2);padding-top:1.2vh;min-height:1.2em}
.lm-slide .deck-kpis{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))} .lm-slide .deck-kpis .lm-kpi-v{font-size:clamp(28px,3vw,52px)}
.lm-deck-hud{position:absolute;left:0;right:0;bottom:0;z-index:5;padding:0 2vw 1.4vh;pointer-events:none} .lm-deck-hud .bar{height:2px;background:var(--border-2);margin:0 0 1vh} .lm-deck-hud .bar i{display:block;height:100%;background:var(--lm-emph);transition:width .35s ease-out}
.lm-deck-hud .row{display:flex;align-items:center;gap:6px;pointer-events:auto;font-size:12px;color:var(--ink-4)} .lm-deck-hud .ttl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:50vw} .lm-deck-hud .cnt{font-size:12px;margin-right:6px}
.lm-deck-grid{display:none;position:absolute;inset:0;z-index:6;background:color-mix(in srgb,var(--bg) 94%,transparent);backdrop-filter:blur(8px);padding:6vh 6vw;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;align-content:start;overflow:auto}
.lm-deck.grid .lm-deck-grid{display:grid} .lm-deck-grid .th{text-align:left;border:1px solid var(--border);background:var(--surface);border-radius:var(--r-md);padding:12px;cursor:pointer;display:flex;gap:10px;align-items:flex-start;color:var(--ink);font:inherit} .lm-deck-grid .th b{font-weight:var(--w-semibold);font-size:13px} .lm-deck-grid .th.on{border-color:var(--lm-emph)} .lm-deck-grid .th span{color:var(--ink-4);font-size:11px}
@media (max-width:760px){.lm-slide .body.split,.lm-slide .body.grid{grid-template-columns:1fr}.lm-slide{padding:4vh 5vw 10vh}}
@media print{
  @page{size:landscape;margin:10mm}
  .lm-deck{position:static;overflow:visible;background:var(--surface)} .lm-slide{position:relative;opacity:1;transform:none;pointer-events:auto;height:180mm;page-break-after:always;break-after:page;padding:8mm 10mm} .lm-slide:last-child{page-break-after:auto}
  .lm-deck-hud,.lm-deck-grid{display:none!important} .lm-reveal,.lm-pop{opacity:1!important;transform:none!important} .lm-glow::before,.lm-glow::after{display:none}
}

/* ═══ §23 РАМКИ И МЕЛКИЕ ФОРМЫ ПО МОТИВАМ CODEDVISUALS (v4) ═══════════
   browser · phone · code · terminal · kbd · avatar stack · hub · wave ·
   dropzone · palette · bubbles. Для КП, кейсов и близнецов; в витрине —
   только там, где есть данные. Цвет — токенами. */
.lm-browser{border:1px solid var(--border);border-radius:12px;background:var(--surface);overflow:hidden;box-shadow:0 8px 24px -16px color-mix(in srgb,var(--ink) 30%,transparent)} .lm-browser .bar{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--border-2);background:var(--surface-2)}
.lm-browser .dots{display:flex;gap:5px} .lm-browser .dots i{width:9px;height:9px;border-radius:50%;background:var(--border-3)} .lm-browser .url{flex:1;font-family:var(--font-mono);font-size:11px;color:var(--ink-3);background:var(--surface);border:1px solid var(--border-2);border-radius:6px;padding:3px 8px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lm-browser .tabs{display:flex;gap:4px;padding:6px 8px 0;background:var(--surface-2)} .lm-browser .tabs span{font-size:11px;padding:5px 10px;border-radius:8px 8px 0 0;color:var(--ink-4);background:transparent} .lm-browser .tabs span.on{background:var(--surface);color:var(--ink);border:1px solid var(--border-2);border-bottom:0}
.lm-browser .page{padding:14px;min-height:120px}
.lm-phone{width:220px;margin:0 auto;border:6px solid var(--ink);/* lumen-lint: ignore — корпус устройства (рамка макета), а не выделение данных, §37 */border-radius:30px;background:var(--surface);overflow:hidden;box-shadow:0 16px 40px -20px color-mix(in srgb,var(--ink) 45%,transparent)} .lm-phone .notch{height:22px;display:grid;place-items:center} .lm-phone .notch i{width:70px;height:6px;border-radius:3px;background:var(--ink)} .lm-phone .scr{padding:8px 10px 14px;min-height:300px;display:flex;flex-direction:column;gap:8px}
.lm-phone .scr .lm-kpi-v{font-size:22px}
.lm-code{font-family:var(--font-mono);font-size:12px;line-height:1.6;background:var(--surface-2);border:1px solid var(--border-2);border-radius:var(--r-md);overflow:auto;counter-reset:ln} .lm-code .hd{display:flex;gap:6px;align-items:center;padding:6px 10px;border-bottom:1px solid var(--border-2);font-size:11px;color:var(--ink-4);font-family:var(--font)} .lm-code .hd b{color:var(--ink-2);font-weight:var(--w-semibold)}
.lm-code pre{margin:0;padding:8px 12px} .lm-code .l{display:flex;gap:12px;white-space:pre} .lm-code .l::before{counter-increment:ln;content:counter(ln);color:var(--ink-5);min-width:2ch;text-align:right;user-select:none} .lm-code .k{color:var(--lm-emph)} .lm-code .s{color:var(--ok)} .lm-code .c{color:var(--ink-4)} .lm-code .n{color:var(--lm-emph-2)}
.lm-term{font-family:var(--font-mono);font-size:12px;line-height:1.65;background:var(--ink);color:var(--surface);border-radius:var(--r-md);padding:10px 12px;overflow:auto} .lm-term .p{color:var(--lm-emph)} .lm-term .t{color:color-mix(in srgb,var(--surface) 55%,transparent)} .lm-term .lv{display:inline-block;min-width:44px;font-size:var(--lm-micro);letter-spacing:.04em;text-align:center;border-radius:4px;padding:0 4px;margin:0 6px 0 0;background:color-mix(in srgb,var(--surface) 18%,transparent)} .lm-term .lv.warn{background:color-mix(in srgb,var(--warm) 18%,transparent);color:var(--warm)} .lm-term .lv.bad{background:color-mix(in srgb,var(--cold) 20%,transparent);color:var(--cold)} .lm-term .lv.ok{background:color-mix(in srgb,var(--ok) 18%,transparent);color:var(--ok)}
.lm-term .cur::after{content:'';display:inline-block;width:7px;height:13px;background:var(--surface);vertical-align:-2px;margin-left:2px;animation:lm-blink 1s steps(2) infinite} @keyframes lm-blink{to{opacity:0}}
.lm-kbd{display:inline-block;font-family:var(--font-mono);font-size:11px;line-height:1;padding:4px 7px;border:1px solid var(--border-3);border-bottom-width:2px;border-radius:6px;background:var(--surface);color:var(--ink-2);min-width:14px;text-align:center} .lm-kbds{display:inline-flex;gap:4px;align-items:center} .lm-kbds small{color:var(--ink-4);margin:0 4px}
.lm-avstack{display:inline-flex;align-items:center} .lm-avstack .lm-avi{border:2px solid var(--surface);margin-left:-8px} .lm-avstack .lm-avi:first-child{margin-left:0} .lm-avstack .more{margin-left:8px;font-size:12px;color:var(--ink-3)}
.lm-avgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:12px;justify-items:center} .lm-avgrid .lm-avi{width:40px;height:40px;font-size:13px} .lm-avgrid small{display:block;text-align:center;font-size:11px;color:var(--ink-4);margin-top:4px}
.lm-hub{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:14px} .lm-hub .c{width:64px;height:64px;border-radius:18px;background:var(--ink);color:var(--surface);display:grid;place-items:center;font-weight:var(--w-semibold);font-size:16px;box-shadow:0 10px 30px -14px color-mix(in srgb,var(--ink) 50%,transparent)} .lm-hub .side{display:flex;flex-direction:column;gap:6px} .lm-hub .side span{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:6px 10px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface)} .lm-hub .side.l span{justify-content:flex-end} .lm-hub .side span i{width:8px;height:8px;border-radius:50%;background:var(--ok)} .lm-hub .side span i.bad{background:var(--cold)} .lm-hub .side span i.na{background:var(--chart-empty)}
.lm-wave{display:flex;align-items:center;gap:2px;height:44px} .lm-wave i{flex:1;background:var(--lm-mono-2);border-radius:2px;min-height:4px} .lm-wave i.on{background:var(--lm-emph)} .lm-wave i.mk{background:var(--cold)}
.lm-drop{border:1.5px dashed var(--border-3);border-radius:var(--r-md);padding:22px;text-align:center;color:var(--ink-3);font-size:13px;background:var(--surface-2)} .lm-drop b{display:block;color:var(--ink);font-weight:var(--w-semibold);margin:6px 0 2px}
.lm-palette{border:1px solid var(--border);border-radius:12px;background:var(--surface);box-shadow:0 20px 50px -24px color-mix(in srgb,var(--ink) 45%,transparent);overflow:hidden} .lm-palette .in{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border-2);font-size:14px;color:var(--ink-3)} .lm-palette .g{padding:6px 6px 2px;font-size:var(--lm-micro);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4)} .lm-palette .it{display:flex;align-items:center;gap:10px;padding:7px 12px;font-size:13px;border-radius:8px;margin:0 6px} .lm-palette .it.on{background:var(--surface-3)} .lm-palette .it .lm-kbd{margin-left:auto}
.lm-bubbles{display:flex;flex-direction:column;gap:8px} .lm-bubbles .b{max-width:78%;padding:8px 12px;border-radius:14px 14px 14px 4px;background:var(--surface-2);font-size:13px;line-height:1.45} .lm-bubbles .b.me{align-self:flex-end;background:var(--ink);color:var(--surface);border-radius:14px 14px 4px 14px} .lm-bubbles .b small{display:block;font-size:var(--lm-micro);color:var(--ink-4);margin-top:3px} .lm-bubbles .b.me small{color:color-mix(in srgb,var(--surface) 60%,transparent)}
.lm-bubbles .typing{display:inline-flex;gap:3px;padding:8px 12px;border-radius:14px;background:var(--surface-2)} .lm-bubbles .typing i{width:6px;height:6px;border-radius:50%;background:var(--ink-4);animation:lm-typing 1.2s ease-in-out infinite} .lm-bubbles .typing i:nth-child(2){animation-delay:.2s} .lm-bubbles .typing i:nth-child(3){animation-delay:.4s} @keyframes lm-typing{0%,100%{opacity:.3;transform:translateY(0)}50%{opacity:1;transform:translateY(-2px)}}
.lm-kanban{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(150px,1fr);gap:10px;overflow-x:auto} .lm-kanban .col{background:var(--surface-2);border-radius:var(--r-md);padding:8px} .lm-kanban .col h4{margin:0 0 8px;font-size:12px;font-weight:var(--w-semibold);display:flex;justify-content:space-between;color:var(--ink-2)} .lm-kanban .col h4 span{color:var(--ink-4);font-family:var(--font-mono);font-weight:500}
.lm-kanban .k{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin-bottom:6px;font-size:12.5px} .lm-kanban .k small{display:block;color:var(--ink-4);font-size:11px;margin-top:2px}
.lm-bell{position:relative;display:inline-grid;place-items:center;width:48px;height:48px;border-radius:14px;background:var(--surface-2);color:var(--ink-2)} .lm-bell .n{position:absolute;top:-6px;right:-6px;min-width:20px;height:20px;border-radius:10px;background:var(--cold);color:var(--surface);font-size:11px;font-weight:600;display:grid;place-items:center;padding:0 5px;font-family:var(--font-mono)}

/* ═══ §26 СЦЕНА · lumen-scene.js (v4.1) ═══════════════════════════════
   Изюминка донора: поле с воздухом, плавающая карточка, спектральное
   свечение, амбиент, частицы, узлы и связи с импульсами, кубы, орбита.
   .lm-scene.quiet — тихая сцена (поле и воздух), допустима в витрине.
   Всё остальное — показ-режим, КП, кейс, лендинг, deck. */
.lm-scene{position:relative;isolation:isolate;overflow:hidden;border-radius:18px;border:1px solid color-mix(in srgb,var(--border) 60%,transparent);background:color-mix(in srgb,var(--surface-2) 55%,var(--bg));min-height:300px;display:grid;place-items:center;padding:28px}
/* v6: единственная колонка сцены — minmax(0,1fr), иначе трек auto растёт до max-content содержимого (nowrap-тикер, .lm-vs) и плавающая карточка выходит за поле на 730/390 */
.lm-scene{grid-template-columns:minmax(0,1fr)} .lm-scene>.lm-float{min-width:0;max-width:min(340px,100%)} .lm-scene.wide>.lm-float,.lm-scene.bare>.lm-float{max-width:100%}
.lm-scene.dark{background:var(--ink);border-color:color-mix(in srgb,var(--surface) 12%,transparent);color:var(--surface)} html[data-theme="dark"] .lm-scene.dark{background:color-mix(in srgb,var(--surface-2) 70%,var(--bg));border-color:color-mix(in srgb,var(--border) 60%,transparent);color:var(--ink)} html[data-theme="dark"] .lm-scene.dark .lm-float{background:var(--surface);border-color:var(--border);color:var(--ink)}
.lm-float{position:relative;z-index:1;width:100%;max-width:340px;border-radius:16px;border:1px solid var(--border);background:var(--surface);box-shadow:0 1px 2px color-mix(in srgb,var(--ink) 6%,transparent),0 12px 32px -18px color-mix(in srgb,var(--ink) 22%,transparent);padding:16px 18px}
.lm-scene.wide .lm-float{max-width:100%} .lm-scene.bare .lm-float{background:transparent;border:0;box-shadow:none;padding:0;max-width:100%}
.lm-float .lm-kpi-l{font-size:11px;letter-spacing:.02em} .lm-float .lm-kpi-v{font-size:30px;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.lm-float .ic{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:9px;background:color-mix(in srgb,var(--lm-emph) 10%,var(--surface));color:var(--lm-emph);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--lm-emph) 18%,transparent);margin-right:10px;vertical-align:middle}
.lm-scene.dark .lm-float{background:color-mix(in srgb,var(--surface) 8%,var(--ink));border-color:color-mix(in srgb,var(--surface) 14%,transparent);color:var(--surface)}
/* спектральное свечение: только токены — cold → warm → ok → blue → purple → emph */
.lm-glow.spectrum::before{background:linear-gradient(90deg,var(--cold),var(--warm),var(--ok),var(--blue,var(--lm-emph)),var(--purple,var(--lm-emph)),var(--lm-emph));opacity:.55;height:34px;bottom:-8px;left:6px;right:6px;filter:blur(12px)}
/* амбиент: три размытых пятна */
.lm-ambient{position:absolute;inset:0;z-index:0;pointer-events:none} .lm-ambient i{position:absolute;border-radius:50%;filter:blur(48px);opacity:.16}
.lm-ambient .a{width:60%;height:60%;left:20%;top:20%;background:radial-gradient(circle,var(--lm-emph),transparent 68%)} .lm-ambient .b{width:44%;height:44%;left:4%;top:0;background:radial-gradient(circle,var(--lm-emph-2),transparent 68%);opacity:.12} .lm-ambient .c{width:44%;height:44%;right:2%;bottom:0;background:radial-gradient(circle,var(--lm-mono-3),transparent 68%);opacity:.14}
.lm-scene.dark .lm-ambient i{opacity:.22}
/* частицы: повёрнутые квадратики, медленный дрейф */
.lm-particles{position:absolute;inset:0;z-index:0;pointer-events:none} .lm-particles i{position:absolute;transform:translate(-50%,-50%) rotate(45deg);border-radius:1px;background:var(--lm-mono-3);opacity:var(--op,.4)}
@media (prefers-reduced-motion:no-preference){.lm-particles i{animation:lm-drift var(--dur,10s) ease-in-out var(--del,0s) infinite}}
@keyframes lm-drift{0%,100%{transform:translate(-50%,-50%) rotate(45deg);opacity:calc(var(--op,.4)*.5)}50%{transform:translate(calc(-50% + var(--dx,8px)),calc(-50% - var(--dy,10px))) rotate(45deg);opacity:var(--op,.4)}}
/* сетка на фоне, растворённая по краям */
.lm-gridbg{position:absolute;inset:-24px;z-index:0;pointer-events:none;background:linear-gradient(to right,var(--border-2) 1px,transparent 1px),linear-gradient(to bottom,var(--border-2) 1px,transparent 1px);background-size:28px 28px;-webkit-mask-image:radial-gradient(ellipse 60% 60% at 50% 50%,var(--ink) 30%,transparent 100%);mask-image:radial-gradient(ellipse 60% 60% at 50% 50%,var(--ink) 30%,transparent 100%);opacity:.7}
/* узлы и связи */
.lm-flowscene,.lm-hubscene,.lm-arcscene{position:relative;z-index:1;width:100%} .lm-flowscene{display:flex;justify-content:space-between;align-items:center;gap:40px;min-height:220px;padding:8px 6px} .lm-flowscene .col{display:flex;flex-direction:column;justify-content:center;gap:22px;position:relative;z-index:1}
.lm-flowscene .col small{display:block;text-align:center;font-size:var(--lm-micro);color:var(--ink-4);margin:-14px 0 0;max-width:80px}
.lm-scene .wires{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none} .lm-scene .wire{fill:none;stroke:var(--border-3);stroke-width:1;stroke-dasharray:3 4} .lm-scene .pulse .dot{fill:var(--lm-emph)} .lm-scene .pulse .halo{fill:var(--lm-emph);opacity:.16}
.lm-scene .node{position:relative;width:40px;height:40px;border-radius:12px;border:1px solid var(--border);background:var(--surface);display:grid;place-items:center;color:var(--ink-2);box-shadow:0 1px 2px color-mix(in srgb,var(--ink) 6%,transparent);margin:0 auto}
.lm-scene .node.dark{background:var(--ink);color:var(--surface);border-color:var(--ink);box-shadow:inset 0 1px 0 color-mix(in srgb,var(--surface) 25%,transparent),0 8px 20px -10px color-mix(in srgb,var(--ink) 60%,transparent);width:46px;height:46px;border-radius:14px}
.lm-scene .node .st{position:absolute;right:-3px;top:-3px;width:9px;height:9px;border-radius:50%;background:var(--ok);border:2px solid var(--surface)} .lm-scene .node .st.warn{background:var(--warm)} .lm-scene .node .st.bad{background:var(--cold)} .lm-scene .node .st.na{background:var(--chart-empty)}
.lm-hubscene{height:calc(var(--r,96px)*2 + 80px);display:grid;place-items:center} .lm-hubscene .center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:52px;height:52px;border-radius:16px;display:grid;place-items:center;background:var(--ink);color:var(--surface);box-shadow:inset 0 1px 0 color-mix(in srgb,var(--surface) 25%,transparent),0 10px 26px -10px color-mix(in srgb,var(--ink) 60%,transparent);z-index:2} .lm-hubscene .center b{font-size:15px}
.lm-hubscene .sat{position:absolute;left:50%;top:50%;width:40px;height:40px;margin:-20px 0 0 -20px;transform:rotate(var(--a,0deg)) translate(var(--r,0px)) rotate(calc(-1*var(--a,0deg)));border-radius:12px;border:1px solid var(--border);background:var(--surface);display:grid;place-items:center;color:var(--ink-2);box-shadow:0 1px 2px color-mix(in srgb,var(--ink) 6%,transparent);z-index:2} .lm-hubscene .sat .st{position:absolute;right:-3px;top:-3px;width:9px;height:9px;border-radius:50%;background:var(--ok);border:2px solid var(--surface)} .lm-hubscene .sat .st.bad{background:var(--cold)} .lm-hubscene .sat .st.na{background:var(--chart-empty)}
.lm-hubscene .cap{position:absolute;left:50%;bottom:0;transform:translateX(-50%)}
.lm-arcscene{display:flex;justify-content:space-between;align-items:center;min-height:180px;padding:40px 12px} .lm-arcscene .tag{position:absolute;left:50%;transform:translateX(-50%);z-index:2;width:max-content;max-width:calc(100% - 24px);text-align:center} .lm-arcscene .tag .lm-row{flex-wrap:wrap;justify-content:center;row-gap:4px} .lm-arcscene .tag code{overflow-wrap:normal;white-space:nowrap} /* v6: подпись дуги не сжимается в столбик — ширина по содержимому, перенос по элементам */ .lm-arcscene .tag.top{top:8px} .lm-arcscene .tag.bottom{bottom:8px}
/* кубы */
.lm-cubes{display:flex;flex-direction:column;align-items:flex-start;gap:0;padding:10px 0 10px 24px} .lm-cubes .row{display:flex;align-items:center;gap:18px} .lm-cubes .link{width:1px;height:26px;margin-left:31px;background:var(--border-3)}
.lm-cubes .cube{position:relative;width:64px;height:44px} .lm-cubes .cube i{position:absolute;display:block} .lm-cubes .cube .top{left:0;top:0;width:64px;height:32px;background:var(--lm-mono-4);clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)} .lm-cubes .cube .l{left:0;top:16px;width:32px;height:28px;background:var(--lm-mono-5);clip-path:polygon(0 0,100% 50%,100% 100%,0 50%)} .lm-cubes .cube .r{left:32px;top:16px;width:32px;height:28px;background:color-mix(in srgb,var(--lm-mono-5) 70%,var(--ink));clip-path:polygon(0 50%,100% 0,100% 50%,0 100%)}
.lm-cubes .cube.done .top{background:var(--lm-mono-3)} .lm-cubes .cube.run .top{background:var(--lm-emph)} .lm-cubes .cube.run .l{background:color-mix(in srgb,var(--lm-emph) 70%,var(--ink))} .lm-cubes .cube.run .r{background:color-mix(in srgb,var(--lm-emph) 45%,var(--ink))}
.lm-cubes .lbl{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-4);opacity:.55} .lm-cubes .lbl .dash{width:22px;height:1px;background:var(--border-3)} .lm-cubes .lbl b{font-weight:var(--w-semibold);color:var(--ink)} .lm-cubes .lbl small{color:var(--ink-4);font-size:11px} .lm-cubes .cube.run + .lbl,.lm-cubes .row:has(.cube.run) .lbl{opacity:1}
@media (prefers-reduced-motion:no-preference){.lm-cubes.live .cube .top{animation:lm-cube 4.5s ease-in-out infinite;animation-delay:calc(var(--i,0)*1.1s)} .lm-cubes.live .lbl{animation:lm-lbl 4.5s ease-in-out infinite;animation-delay:calc(var(--i,0)*1.1s)}}
@keyframes lm-cube{0%,100%{background:var(--lm-mono-4)}18%,34%{background:var(--lm-emph)}} @keyframes lm-lbl{0%,100%{opacity:.5}18%,34%{opacity:1}}
/* орб */
.lm-orbscene{position:relative;display:grid;place-items:center;gap:12px;padding:20px;min-height:220px} .lm-orbscene .rings{position:absolute;left:50%;top:calc(50% - 22px);width:0;height:0} .lm-orbscene .rings i{position:absolute;left:-60px;top:-60px;width:120px;height:120px;border-radius:50%;border:1px solid color-mix(in srgb,var(--ink) 18%,transparent);opacity:0}
.lm-orbscene.live .rings i{animation:lm-ring2 2.8s ease-out infinite} .lm-orbscene.live .rings i:nth-child(2){animation-delay:.9s} .lm-orbscene.live .rings i:nth-child(3){animation-delay:1.8s} @keyframes lm-ring2{0%{transform:scale(.6);opacity:0}25%{opacity:.6}100%{transform:scale(1.9);opacity:0}}
.lm-orbscene .orb{position:relative;width:96px;height:96px;border-radius:50%;background:var(--ink);display:grid;place-items:center;box-shadow:0 20px 40px -16px color-mix(in srgb,var(--ink) 60%,transparent),inset 0 1px 0 color-mix(in srgb,var(--surface) 25%,transparent)} .lm-orbscene .eq{display:flex;gap:3px;align-items:center;height:28px} .lm-orbscene .eq i{width:3px;height:10px;border-radius:2px;background:var(--surface)}
.lm-orbscene.live .eq i{animation:lm-eq 1.1s ease-in-out infinite;animation-delay:calc(var(--i,0)*.12s)} @keyframes lm-eq{0%,100%{transform:scaleY(.25)}50%{transform:scaleY(1)}} .lm-orbscene .eq i{height:24px;transform-origin:bottom;transform:scaleY(.25)} /* КРАФТ п.2: scaleY вместо height */ .lm-orbscene .st{position:relative;z-index:1}
/* призрачные строки */
.lm-ghost{display:flex;flex-direction:column;gap:6px} .lm-ghost i{display:block;height:4px;border-radius:2px;background:var(--lm-mono-2);opacity:.9}
@media (max-width:760px){.lm-flowscene{gap:18px} .lm-scene{padding:18px}}

/* патч ядра: Tablo.donut режет сегменты обводкой цвета --ink; у донора между сегментами — зазор цветом поверхности 2 px (dataviz «2px surface gap») */
.lm-chart .chart-arc{stroke:var(--surface);stroke-width:2px}
.lm-ringwrap{display:flex;flex-direction:column;align-items:center;gap:10px} .lm-ringwrap .lm-legend{justify-content:center}

/* ═══ §27 СКИН ДОНОРА · body.lm-cv (v5) ═════════════════════════════════
   Типографика и поверхности CodedVisuals поверх всех компонентов Lumen:
   карточка rounded-2xl с волосяной рамкой и shadow-xs, подпись 11 px с
   трекингом, значение 30 px tabular, пилюля с внутренним кольцом, шапки
   таблиц капителью. Включается классом на body; прод без класса не меняется. */
.lm-cv{--lm-card-r:16px;--r-card:16px}
.lm-cv .lm-card{border-radius:16px;border:1px solid color-mix(in srgb,var(--border) 70%,transparent);box-shadow:0 1px 2px color-mix(in srgb,var(--ink) 5%,transparent)}
.lm-cv .lm-card-h h3{font-size:13.5px;font-weight:600;letter-spacing:-.01em} .lm-cv .lm-card-h .sub{font-size:11.5px;color:var(--ink-4)}
.lm-cv .lm-kpi-l,.lm-cv .lm-eyebrow{font-size:11px;font-weight:500;letter-spacing:.03em;color:var(--ink-4)} .lm-cv .lm-kpi-v{font-size:30px;font-weight:600;letter-spacing:-.03em;font-variant-numeric:tabular-nums;line-height:1.05}
.lm-cv .lm-pill{box-shadow:inset 0 0 0 1px color-mix(in srgb,currentColor 18%,transparent);font-size:var(--lm-micro);font-weight:500;letter-spacing:.01em;border-radius:999px} .lm-cv .lm-pill .lm-ic{stroke-width:var(--lm-icon-stroke)} .lm-cv .lm-delta{font-weight:500} .lm-cv .lm-delta .lm-ic{stroke-width:var(--lm-icon-stroke)} .lm-cv .lm-badge-period{font-weight:500}
.lm-cv .lm-tag{border-radius:999px;font-size:var(--lm-micro)} .lm-cv .lm-btn{border-radius:10px} .lm-cv .lm-btn.sm{font-size:12px}
.lm-cv .lm-table th{font-size:var(--lm-micro);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4);font-weight:500} .lm-cv .lm-table td{font-variant-numeric:tabular-nums}
.lm-cv .lm-h2{letter-spacing:-.02em;font-weight:600} .lm-cv .lm-h1{letter-spacing:-.025em}
.lm-cv .lm-kpi{border-radius:16px} .lm-cv .lm-kpi .lm-kpi-i,.lm-cv .lm-kpi > .i{width:32px;height:32px;border-radius:9px;background:color-mix(in srgb,var(--lm-emph) 10%,var(--surface));color:var(--lm-emph);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--lm-emph) 18%,transparent)}
.lm-cv .lm-legend .it,.lm-cv .lm-vs,.lm-cv .lm-micro{font-size:11px} .lm-cv .lm-list .lm-item small,.lm-cv .lm-small{font-size:11.5px}
.lm-cv .b-top{background:color-mix(in srgb,var(--bg) 92%,transparent)} .lm-cv .b-card .lm-card-f code{border-radius:6px}

/* §27.1 · скин донора v2 — микроязык внутри блоков (по частотам классов в 108 исходниках):
   подпись = text-[10px] font-medium text-muted-foreground (без капители); значение = font-semibold tracking-tight tabular;
   панель = rounded-lg bg-muted/40 border-border/50 (без цветных полос слева); ряд = border-b border-border/50 py-2;
   аватар = size-7 rounded-full bg-muted ring-1; узел = size-9 rounded-xl border bg-card shadow-xs ring-2 ring-background */
.lm-cv{--lm-icon:16px;--lm-body:13px}
.lm-cv .lm-journey .ln small,.lm-cv .lm-gap .grid small,.lm-cv .lm-span .io small,.lm-cv .lm-hitl-row .col small,.lm-cv .lm-profile .grid small,.lm-cv .lm-aiset .f small,.lm-cv .lm-insights .slice>small,.lm-cv .lm-proj .grid small,.lm-cv .lm-kp .trio small,.lm-cv .lm-kp .roi small,.lm-cv .lm-pm .grid small,.lm-cv .lm-two .sc small,.lm-cv .lm-review .err .grid small,.lm-cv .lm-focus .cl small,.lm-cv .lm-phase .ph small{text-transform:none;letter-spacing:.01em;font-size:var(--lm-micro);font-weight:500;color:var(--ink-4)}
.lm-cv .lm-evid,.lm-cv .lm-span,.lm-cv .lm-proj .one,.lm-cv .lm-review .err,.lm-cv .lm-patterns blockquote{border-left:0;background:color-mix(in srgb,var(--surface-2) 60%,var(--surface));border:1px solid color-mix(in srgb,var(--border) 50%,transparent);border-radius:10px;padding:9px 11px}
.lm-cv .lm-evid{padding:10px 12px} .lm-cv .lm-evid .q{font-size:13px;line-height:1.5}
.lm-cv .lm-proj .grid>div>b,.lm-cv .lm-kp .trio>div,.lm-cv .lm-pm .grid b,.lm-cv .lm-focus .cl b,.lm-cv .lm-phase .ph b,.lm-cv .lm-review .err .grid b{font-size:13px;letter-spacing:-.01em;font-weight:600;line-height:1.35}
.lm-cv .lm-proj .hd b,.lm-cv .lm-review .hd b,.lm-cv .lm-svc .big b,.lm-cv .lm-card-h h3{font-size:13.5px;font-weight:600;letter-spacing:-.01em}
.lm-cv .lm-proj .one{font-size:13px;color:var(--ink-2)} .lm-cv .lm-proj .grid>div>b{font-size:14px} .lm-cv .lm-proj .grid>div>span{font-size:11px}
.lm-cv .lm-item{padding-block:9px;border-bottom:1px solid color-mix(in srgb,var(--border) 55%,transparent)} .lm-cv .lm-item:last-child{border-bottom:0} .lm-cv .lm-item .t b{font-size:12.5px;font-weight:var(--w-semibold)} .lm-cv .lm-item .t small{font-size:var(--lm-micro)}
.lm-cv .lm-avi,.lm-cv .lm-av{background:var(--surface-2);color:var(--ink-3);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border) 80%,transparent);font-size:var(--lm-micro);font-weight:600;width:28px;height:28px}
.lm-cv .lm-input{border-radius:10px;background:color-mix(in srgb,var(--surface-2) 25%,var(--surface));border-color:color-mix(in srgb,var(--border) 80%,transparent)} .lm-cv .lm-input input{font-size:12.5px}
.lm-cv .lm-btn{height:32px;padding:0 12px;font-size:12.5px;border-radius:10px;box-shadow:0 1px 2px color-mix(in srgb,var(--ink) 5%,transparent)} .lm-cv .lm-btn.sm{height:28px;padding:0 10px;font-size:12px;border-radius:8px} .lm-cv .lm-btn.primary{box-shadow:inset 0 1px 0 color-mix(in srgb,var(--surface) 22%,transparent),0 1px 2px color-mix(in srgb,var(--ink) 20%,transparent)}
.lm-cv .lm-tag{background:color-mix(in srgb,var(--surface-2) 70%,var(--surface));border:1px solid color-mix(in srgb,var(--border) 60%,transparent);color:var(--ink-3);padding:2px 7px}
.lm-cv .lm-seg{border-radius:10px;background:color-mix(in srgb,var(--surface-2) 70%,var(--surface));padding:2px} .lm-cv .lm-seg button{border-radius:8px;font-size:12px;padding:5px 10px} .lm-cv .lm-seg button.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px color-mix(in srgb,var(--ink) 8%,transparent)}
.lm-cv .lm-table{font-size:12.5px} .lm-cv .lm-table th{padding:8px 10px;font-size:var(--lm-micro);letter-spacing:.06em;color:var(--ink-4);border-bottom:1px solid color-mix(in srgb,var(--border) 70%,transparent)} .lm-cv .lm-table td{padding:9px 10px;border-bottom:1px solid color-mix(in srgb,var(--border) 45%,transparent)} .lm-cv .lm-table tr:last-child td{border-bottom:0}
.lm-cv .lm-bar{height:6px;border-radius:999px} .lm-cv .lm-bar i{border-radius:999px} .lm-cv .lm-bar-row .lbl{font-size:12px} .lm-cv .lm-bar-row .val{font-size:12px;font-variant-numeric:tabular-nums}
.lm-cv .lm-legend .it{font-size:11px;gap:6px} .lm-cv .lm-legend .sw.dot{width:8px;height:8px}
.lm-cv .lm-micro,.lm-cv .lm-faint{font-size:var(--lm-micro);line-height:1.5}
.lm-cv .lm-state{border-radius:14px;background:color-mix(in srgb,var(--surface-2) 45%,var(--surface));border:1px dashed color-mix(in srgb,var(--border-3) 80%,transparent)} .lm-cv .lm-state b{font-size:13px} .lm-cv .lm-state small{font-size:11.5px}
.lm-cv .lm-banner{border-radius:10px;font-size:12.5px} .lm-cv .lm-agent-msg,.lm-cv .lm-agent .msg{border-radius:14px}
.lm-cv .lm-card-h{gap:8px} .lm-cv .lm-card-h .lm-ic{color:var(--ink-3)}
.lm-cv .lm-kpi{padding:14px 16px} .lm-cv .lm-kpi-l{font-size:var(--lm-micro)} .lm-cv .lm-kpi .lm-kpi-v{font-size:26px} .lm-cv .lm-kpis .lm-kpi .lm-kpi-v{font-size:28px}
.lm-cv .lm-flow .n,.lm-cv .lm-health .it,.lm-cv .lm-rag .src{border-radius:10px} .lm-cv .lm-rag .q{border-radius:12px 12px 4px 12px} .lm-cv .lm-rag .a{border-radius:12px 12px 12px 4px}

/* ═══ §28 ФОРМЫ 5.1 ПО НАХОДКАМ MOBBIN · lumen-forms51.js ═══════════════ */
.lm-f51 .chart-hit{fill:transparent;stroke:none;pointer-events:all} .lm-f51 .grid{stroke:var(--border-2);stroke-width:1} .lm-f51 .ax{font-size:var(--lm-micro);fill:var(--ink-4);font-family:var(--font)} .lm-f51 .lbl{font-size:11px;fill:var(--ink-3)}
.lm-f51 .line{fill:none;stroke:var(--lm-emph);stroke-width:1.6;stroke-linejoin:round;stroke-linecap:round} .lm-f51 .area{fill:var(--lm-emph);opacity:.12} .lm-f51 .pt{fill:var(--lm-emph);stroke:var(--surface);stroke-width:1.5}
.lm-f51 .expect{stroke:var(--ink-4);stroke-width:1;stroke-dasharray:4 4} .lm-f51 .forecast{stroke:var(--lm-emph);stroke-width:1;stroke-dasharray:2 4;opacity:.7} .lm-f51 .today{stroke:var(--ink-3);stroke-width:1;stroke-dasharray:2 3} .lm-f51 .thr{stroke:var(--ink-4);stroke-width:1;stroke-dasharray:4 4}
.lm-f51 .bin{opacity:.85} .lm-f51 .mk{stroke:var(--ink-2);stroke-width:1;stroke-dasharray:3 3} .lm-f51 .mkl{font-size:var(--lm-micro);fill:var(--ink-2);font-family:var(--font-mono)} .lm-f51 .you{stroke:var(--lm-emph);stroke-width:1.5} .lm-f51 .youl{font-size:var(--lm-micro);fill:var(--lm-emph);font-family:var(--font-mono);font-weight:600}
.lm-f51 .annl{stroke:var(--border-3);stroke-width:1;stroke-dasharray:2 3} .lm-f51 .annc{fill:var(--ink);stroke:var(--surface);stroke-width:1.5} .lm-f51 .annc.warn{fill:var(--warm)} .lm-f51 .annc.ok{fill:var(--ok)} .lm-f51 .annn{font-size:var(--lm-micro);fill:var(--surface);font-weight:600;font-family:var(--font-mono)}
.lm-pace .hd{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:6px} .lm-pace .nums{display:flex;gap:18px} .lm-pace .nums small{display:block;font-size:var(--lm-micro);color:var(--ink-4)} .lm-pace .nums b{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}
.lm-aging .st{display:grid;grid-template-columns:minmax(120px,1fr) 2fr minmax(150px,auto);gap:12px;align-items:center;padding:8px 0;border-bottom:1px solid var(--border-2)} .lm-aging .st:last-of-type{border-bottom:0} .lm-aging .nm b{display:block;font-weight:var(--w-semibold);font-size:13px} .lm-aging .nm small{color:var(--ink-4);font-size:11px}
.lm-aging .bar{position:relative;height:8px;border-radius:999px;background:var(--chart-empty)} .lm-aging .bar i{position:absolute;left:0;top:0;bottom:0;border-radius:999px;background:var(--lm-mono-3)} .lm-aging .bar s{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink-3);text-decoration:none} .lm-aging .v{display:flex;gap:8px;align-items:center;justify-content:flex-end} .lm-aging .v b{font-variant-numeric:tabular-nums;font-size:13px}
.lm-antrend .ann{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px 16px;margin-top:8px} .lm-antrend .a{display:flex;gap:8px;align-items:flex-start;font-size:12.5px} .lm-antrend .a b{font-weight:var(--w-semibold);display:block} .lm-antrend .a small{color:var(--ink-4);font-size:11px} .lm-antrend .n{flex:none;width:18px;height:18px;border-radius:50%;background:var(--ink);color:var(--surface);font-size:var(--lm-micro);font-weight:600;display:grid;place-items:center;font-family:var(--font-mono)} .lm-antrend .n.warn{background:var(--warm)} .lm-antrend .n.ok{background:var(--ok)}
.lm-mtable td b{font-weight:var(--w-semibold)} .lm-mtable .sp svg{display:block}
.lm-bench{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px} .lm-bench .it{border:1px solid var(--border);border-radius:12px;padding:12px 14px;background:var(--surface)} .lm-bench .row{display:flex;align-items:baseline;gap:10px;margin:4px 0 8px} .lm-bench .row b{font-size:22px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums} .lm-bench .row b small{font-size:12px;color:var(--ink-4);margin-left:2px}
.lm-bench .bars{display:flex;flex-direction:column;gap:4px} .lm-bench .b{display:grid;grid-template-columns:40px 1fr;gap:8px;align-items:center;font-size:var(--lm-micro);color:var(--ink-4)} .lm-bench .b i{display:block;height:6px;border-radius:999px;background:var(--lm-emph)} .lm-bench .b.net i{background:var(--lm-mono-2)}
/* полоса KPI: сетка auto-fit — на узком экране ячейки переносятся рядами, не скроллятся и не наезжают; пилюля уходит под значение при нехватке ширины (v6) */
.lm-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0;border:1px solid var(--border);border-radius:12px;background:var(--surface);overflow:hidden} .lm-strip .k{padding:10px 12px;border-right:1px solid var(--border-2);border-bottom:1px solid var(--border-2);margin:0 -1px -1px 0;min-width:0} .lm-strip .k>small{display:block;font-size:var(--lm-micro);color:var(--ink-4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .lm-strip .v{display:flex;align-items:baseline;gap:4px 6px;margin:2px 0;flex-wrap:wrap;min-width:0} .lm-strip .v b{font-size:18px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap} .lm-strip .v b small{font-size:11px;color:var(--ink-4)} .lm-strip .sp{height:22px;min-width:0;max-width:100%;overflow:hidden} .lm-strip .sp svg{display:block;max-width:100%}
.lm-talk{display:grid;grid-template-columns:1fr 1.2fr;gap:18px} .lm-talk .nums{display:flex;gap:16px;margin:4px 0 8px} .lm-talk .nums b{font-size:22px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;display:block} .lm-talk .nums b small{font-size:12px;color:var(--ink-4)} .lm-talk .nums>div>small{font-size:var(--lm-micro);color:var(--ink-4)} .lm-talk .reasons{display:flex;flex-direction:column;gap:5px}
@media (max-width:760px){.lm-talk{grid-template-columns:1fr}.lm-aging .st{grid-template-columns:1fr}}

/* ═══ §29 ВПИСЫВАНИЕ · защита от «контент прижат к краю» (v5.1) ═════════
   Классическая ошибка: блок вставлен прямо в .lm-card/.card без обёртки с
   паддингом, или полоса/таблица шире карточки. Правила ниже делают её
   невозможной: прямые дети карточки, кроме шапки/подвала/скролл-обёрток,
   получают внутренний отступ; всё внутри ограничено шириной карточки. */
.lm-card > :where(:not(.lm-card-h):not(.lm-card-b):not(.lm-card-f):not(.lm-tblwrap):not(.lm-scene):not(.lm-method):not(.lm-tv):not(.lm-login):not(.lm-banner):not(.lm-state):not(.card-head):not(.card-foot):not(.card-body)){margin-inline:var(--lm-card-pad)}
.lm-card > .lm-method,.lm-card > .lm-banner,.lm-card > .lm-state{margin-inline:var(--lm-card-pad)}
.lm-card > :where(:not(.lm-card-h):not(.lm-card-f)):first-child{margin-top:var(--lm-card-pad)} .lm-card > :where(:not(.lm-card-f):not(.lm-card-b)):last-child{margin-bottom:var(--lm-card-pad)}
.lm-card-b > *,.lm-card > *{min-width:0;max-width:100%;box-sizing:border-box} .lm-card img,.lm-card svg:not(.lm-ic),.lm-card video,.lm-card iframe{max-width:100%}
.lm-card .lm-bar,.lm-card .lm-unitbar,.lm-card .lm-bar-row{max-width:100%}
.lm-audit-bad{outline:2px dashed var(--cold)!important;outline-offset:-2px;position:relative} .lm-audit-bad::after{content:attr(data-audit);position:absolute;right:0;top:0;font:600 10px/1.4 var(--font-mono);color:var(--surface);background:var(--cold);padding:1px 5px;border-radius:0 0 0 6px;z-index:9}   /* lumen-lint: ignore — метка отладчика LM.audit: ставится инструментом, снимается LM.audit.clear() перед показом, на витрину не выходит */

/* ═══ §30 ПОЛИРОВКА ПО INTERFACES (Jakub Krehel) · v5.1 ══════════════════
   Точные значения донора (ДОНОРЫ/INTERFACES/ИДЕИ.md): нажатие 0.96 · 150 мс,
   контекстные иконки 0.25→1 / blur 4→0 / cubic-bezier(.2,0,0,1), тень-кольцо
   вместо рамки на карточках (не на таблицах и разделителях), концентрический
   радиус вложенных карточек, balance/pretty, обводка картинок чистым чёрным/
   белым 10 % (единственный не-токенный цвет — правило донора), hover под
   @media(hover), цели ≥ 24 px, reduced motion 0.01ms. Включается скином lm-cv. */
:root{--lm-shadow-border:0 0 0 1px oklch(0 0 0 / .06),0 1px 2px -1px oklch(0 0 0 / .06),0 2px 4px 0 oklch(0 0 0 / .04);--lm-shadow-border-hover:0 0 0 1px oklch(0 0 0 / .08),0 1px 2px -1px oklch(0 0 0 / .08),0 2px 4px 0 oklch(0 0 0 / .06);--lm-img-outline:oklch(0 0 0 / .1);--lm-ease-ui:cubic-bezier(.2,0,0,1)}
html[data-theme="dark"]{--lm-shadow-border:0 0 0 1px oklch(1 0 0 / .08);--lm-shadow-border-hover:0 0 0 1px oklch(1 0 0 / .13);--lm-img-outline:oklch(1 0 0 / .1)}
.lm-cv{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
.lm-cv h1,.lm-cv h2,.lm-cv h3,.lm-cv .lm-h1,.lm-cv .lm-h2{text-wrap:balance} .lm-cv p,.lm-cv .sub,.lm-cv .lm-small,.lm-cv .lm-micro,.lm-cv .lm-state small{text-wrap:pretty} .lm-cv .lm-tag,.lm-cv .lm-pill,.lm-cv .lm-badge-period,.lm-cv .lm-kbd{white-space:nowrap} .lm-cv .lm-mono,.lm-cv td.num,.lm-cv .num{font-variant-numeric:tabular-nums} .lm-cv code,.lm-cv .lm-mono{overflow-wrap:anywhere}
/* тень-кольцо вместо рамки для глубины — карточки; таблицы, инпуты и разделители остаются рамками */
.lm-cv .lm-card,.lm-cv .lm-float,.lm-cv .lm-kpi{border-color:transparent;box-shadow:var(--lm-shadow-border);transition-property:box-shadow;transition-duration:150ms;transition-timing-function:ease-out}
@media (hover:hover){.lm-cv .lm-card:hover,.lm-cv .lm-kpi:hover{box-shadow:var(--lm-shadow-border-hover)}}
.lm-cv .lm-float{box-shadow:var(--lm-shadow-border),0 12px 32px -18px color-mix(in srgb,var(--ink) 22%,transparent)}
/* концентрический радиус: карточка внутри тела карточки */
.lm-cv .lm-card-b > .lm-card,.lm-cv .lm-card-b .lm-kpis > .lm-kpi,.lm-cv .lm-float > .lm-card{border-radius:max(6px,calc(var(--lm-card-r) - var(--lm-card-pad) + 6px))}
/* нажатие и частые взаимодействия */
.lm-cv .lm-btn,.lm-cv .lm-seg button,.lm-cv .lm-deck-grid .th{transition-property:scale,background-color,color,box-shadow;transition-duration:150ms;transition-timing-function:ease-out;touch-action:manipulation;-webkit-tap-highlight-color:transparent} .lm-cv .lm-btn:active:not(:disabled):not(.static),.lm-cv .lm-seg button:active{scale:.96}
.lm-cv .lm-item,.lm-cv .lm-table tbody tr,.lm-cv .lm-palette .it{transition-property:background-color;transition-duration:100ms;transition-timing-function:ease-out}
/* оптическое выравнивание кнопки с иконкой */
.lm-cv .lm-btn:has(> .lm-ic:last-child){padding-inline-end:10px} .lm-cv .lm-btn:has(> .lm-ic:first-child){padding-inline-start:10px}
/* иконка наследует вес текста */
.lm-cv b .lm-ic,.lm-cv .lm-btn.primary .lm-ic,.lm-cv h3 .lm-ic,.lm-cv .lm-muted .lm-ic,.lm-cv small .lm-ic{stroke-width:var(--lm-icon-stroke)}
/* контекстная смена иконок: две в DOM, переключение классом .on */
.lm-ic-swap{position:relative;display:inline-grid;place-items:center;width:var(--lm-icon);height:var(--lm-icon)} .lm-ic-swap>.lm-ic{grid-area:1/1;transition:opacity 300ms var(--lm-ease-ui),scale 300ms var(--lm-ease-ui),filter 300ms var(--lm-ease-ui)} .lm-ic-swap>.lm-ic:last-child,.lm-ic-swap.on>.lm-ic:first-child{opacity:0;scale:.25;filter:blur(4px)} .lm-ic-swap.on>.lm-ic:last-child{opacity:1;scale:1;filter:blur(0)}
/* обводка картинок и превью */
.lm-cv img,.lm-cv .lm-browser,.lm-cv .lm-phone .scr{outline:1px solid var(--lm-img-outline);outline-offset:-1px}
/* вход и выход (лестница §21 + blur донора) */
@media (prefers-reduced-motion:no-preference){.lm-reveal{filter:blur(4px)} .lm-reveal.lm-in{filter:blur(0)} .lm-reveal.lm-out{opacity:0;transform:translateY(8px);filter:blur(2px);transition-duration:.25s}}
/* цели нажатия и мобильные инпуты */
.lm-cv .lm-btn,.lm-cv .lm-seg button,.lm-cv .lm-info,.lm-cv .lm-deck-hud button{min-height:28px;min-width:28px} @media (pointer:coarse){.lm-cv .lm-btn,.lm-cv .lm-seg button,.lm-cv .lm-info{min-height:44px;min-width:44px} .lm-cv .lm-input input{font-size:16px}}
.lm :focus-visible{outline:2px solid var(--lm-emph);outline-offset:2px;box-shadow:none}
@media (prefers-reduced-motion:reduce){.lm *,.lm *::before,.lm *::after{animation-duration:.01ms!important;transition-duration:.01ms!important;animation-iteration-count:1!important}}
/* смена темы без размазывания: класс ставит LM.theme.set на кадр */
.lm-theme-swap,.lm-theme-swap *,.lm-theme-swap *::before,.lm-theme-swap *::after{transition:none!important}
/* ═══ §30.2 РАСПОЛОЖЕНИЕ ТЕКСТА · мера, пол кегля, близость, выключка · v6 ═══
   Правка 06.09.2026 «расположение текста везде поправить». Корень дефекта:
   единица `ch` в Geist равна ширине нуля — 0.671em, а средний знак кириллицы
   в прозе — 0.524em. Поэтому max-width:74ch давал 95 знаков в строке вместо
   74: все меры по системе были шире нормы §30 (60–75) примерно на 28 %.
   Мера теперь задаётся в em и калибрована по кириллице, а не по цифре. */
:root{
  /* Перекалибровано под Onest 06.09.2026 (§41). Замер — три абзаца реальной
     прозы системы на 13.5px: Geist 0.5255em на знак, Onest 0.5152em, то есть
     строка Onest на 2.0 % уже. На старых мерах Onest давал 36em → 69.9 знака,
     а 39em → 75.7 знака: верхняя мера ВЫШЛА за потолок нормы §30 (75). */
  --lm-measure:35.5em;        /* 68.9 знака — абзац описания, норма §30 */
  --lm-measure-narrow:30.4em; /* 59.0 знака — врезка, подпись в колонке */
  --lm-measure-wide:38.5em;   /* 74.7 знака — верхняя граница, шире нельзя */
  --lm-measure-lead:27.3em;   /* 53.0 знака — лид под заголовком экрана */
}
/* мера: абзацы описания не длиннее 75 знаков (§30) */
.lm-cv p,.lm-cv .lm-lead,.lm-cv .rule,.lm-cv .lm-note,.lm-cv .lm-method p,
.lm-cv .lm-banner .tx,.lm-cv .lm-state small{max-width:var(--lm-measure)}
.lm-cv .lm-hero p,.lm-cv .lm-lead{max-width:var(--lm-measure-lead)}
/* внутри карточки, ячейки, панели меру задаёт контейнер — снимаем кап */
.lm-cv .lm-card-b p,.lm-cv .lm-card-h p,.lm-cv td p,.lm-cv .lm-item p,
.lm-cv .lm-tip p,.lm-cv .lm-kpi p{max-width:none}

/* пол кегля 11 px (§4): значения 10 и 10.5 px вычищены из исходников ядра,
   модулей и китов и заменены на --lm-micro. Ниже 11 px не опускается ничто,
   что читатель должен прочесть: подпись KPI, шапка таблицы, тег, пилюля,
   период, служебная строка. Мельче — только декоративные засечки без текста. */

/* small/sup/sub без явного кегля падают на браузерный `smaller` (~0.8em) и
   уходят под 11 px: 13.5px→10.8, 12.5px→10.0, sup→9.0. Ставим пол через
   :where() — нулевая специфичность, любое явное правило системы сильнее. */
.lm-cv :where(small,sup,sub){font-size:max(var(--lm-micro),.82em)}
.lm-cv :where(sup,sub){line-height:0}

/* мера служебной строки: источник, версия, методика, примечание под фигурой.
   Идиома системы — .lm-micro.lm-faint; на всю ширину карточки такая строка
   давала 100–121 знак. Служебное читается хуже основного, мера ей нужна уже. */
.lm-cv .lm-micro.lm-faint,.lm-cv .lm-card-f,.lm-cv .lm-heat6-note,
.lm-cv .lm-k6-note,.lm-cv .lm-evid-how,.lm-cv .lm-e6-rule,.lm-cv .g-rule,
.lm-cv .lm-fresh,.lm-cv .lm-src{max-width:var(--lm-measure-wide)}
/* подзаголовок раздела — мера; подзаголовок ВНУТРИ карточки меры не получает:
   там ширину задаёт карточка, а кап включал бы многоточие на месте, где текст влезал */
.lm-cv .lm-sec>.sub,.lm-cv .lm-sec>header .sub,.lm-cv .sec>header .sub{max-width:var(--lm-measure-wide)}
/* подпись карточки: мера ставится только там, где текст ПЕРЕНОСИТСЯ.
   Все .sub в китах приведены к white-space:normal, поэтому кап не режет,
   а переносит: подпись в широкой карточке шла в 150 знаков одной строкой. */
.lm-cv .lm-card-h .t .sub:not(.lm-truncate){max-width:var(--lm-measure-wide)}

/* висячие слова: заголовок не оставляет одно слово в последней строке,
   абзац не оставляет одиночку — balance/pretty на всём тексте, не только §30 */
.lm-cv h1,.lm-cv h2,.lm-cv h3,.lm-cv h4,.lm-cv .lm-h1,.lm-cv .lm-h2,.lm-cv .lm-h3,
.lm-cv .lm-card-h h3,.lm-cv .lm-kpi-l,.lm-cv .lm-state b,
.lm-cv legend,.lm-cv caption{text-wrap:balance}
.lm-cv p,.lm-cv .sub,.lm-cv .rule,.lm-cv .lm-small,.lm-cv .lm-micro,.lm-cv .lm-note,
.lm-cv .lm-lead,.lm-cv li,.lm-cv dd,.lm-cv .lm-method,.lm-cv .lm-banner{text-wrap:pretty}

/* близость: подпись к числу ближе, чем к соседу (§7.1). Сетка плитки не ломается в колонку. */
.lm-cv .lm-kpi{display:grid;gap:4px 12px}
.lm-cv .lm-kpi-l{margin-bottom:0}
.lm-cv .lm-kpi-v{margin:0;line-height:1.05}
.lm-cv .lm-kpi-v+*,.lm-cv .lm-kpi-v+.lm-delta,.lm-cv .lm-kpi .base{margin-top:0}
.lm-cv .lm-kpi+.lm-kpi,.lm-cv .lm-kpis>*+*{margin-left:0}

/* выключка: числа вправо и по разряду, текст влево, заголовок не по центру */
.lm-cv .lm-table td.num,.lm-cv .lm-table th.num,.lm-cv .num,.lm-cv .lm-num,
.lm-cv .lm-kpi-v,.lm-cv .lm-amt,.lm-cv .val{font-variant-numeric:tabular-nums}
.lm-cv .lm-table td.num,.lm-cv .lm-table th.num{text-align:right}
.lm-cv .lm-table th:not(.num),.lm-cv .lm-table td:not(.num){text-align:left}
.lm-cv .lm-table th{vertical-align:bottom}

/* единицы и знаки не отрываются от числа */
.lm-cv .lm-kpi-v,.lm-cv .lm-amt,.lm-cv .lm-delta,.lm-cv .lm-num,
.lm-cv .lm-badge-period,.lm-cv .lm-kbd{white-space:nowrap}
.lm-cv .lm-kpi-v small,.lm-cv .lm-amt small,.lm-cv .val small{white-space:nowrap}

/* переносы: коды и пути рвутся где угодно, бейджи не рвутся никогда */
.lm-cv code,.lm-cv kbd,.lm-cv .lm-mono,.lm-cv .path,.lm-cv .id,
.lm-cv .src,.lm-cv a[href^="http"]{overflow-wrap:anywhere}
.lm-cv .lm-tag,.lm-cv .lm-pill,.lm-cv .lm-chip,.lm-cv .lm-seg button,
.lm-cv .lm-btn{white-space:nowrap}

/* заголовок строки списка переносится на вторую строку, а не режется
   многоточием, когда место в строке есть (дефект «многоточие там, где влезает») */
.lm-cv .lm-item .ttl,.lm-cv .lm-row .ttl,.lm-cv .lm-ent .t b{min-width:0}
.lm-cv .lm-clamp2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;white-space:normal;overflow-wrap:anywhere}

/* каркас: таблица и лента шире карточки прокручиваются внутри неё, а не
   растягивают страницу. Дыра §29: там min-width:0 стоял только на ПРЯМЫХ
   детях карточки, а таблицы лежат глубже (.lm-card-b > .host > div >
   details > .body > .lm-tblwrap) — цепочка распирала карточку и страницу
   до ширины таблицы. Теперь min-width:0 идёт по всей глубине карточки. */
.lm-cv .lm-card *,.lm-cv .lm-sec *,.lm-cv .lm-kpi *{min-width:0}
.lm-cv .lm-tblwrap{max-width:100%;overflow-x:auto;overscroll-behavior-x:contain}
.lm-cv .lm-card-b:has(>.lm-table),.lm-cv .lm-card-b:has(>table),
.lm-cv .lm-sec:has(>.lm-table){max-width:100%;overflow-x:auto;overscroll-behavior-x:contain}
.lm-cv .lm-card,.lm-cv .lm-card-b,.lm-cv .lm-kpi,.lm-cv .lm-item{min-width:0}
/* элементы управления и марки не вылезают за карточку на любой глубине:
   §29 держал max-width только на ПРЯМЫХ детях карточки, поэтому инпут в
   ряду и длинный тег на 390 выходили за рамку на 6–10 px (fit-check) */
.lm-cv .lm-card :is(input,select,textarea,.lm-input,.lm-btn,.lm-seg){max-width:100%}
.lm-cv .lm-card :is(.lm-tag,.lm-pill,.lm-chip){max-width:100%;overflow:hidden;text-overflow:ellipsis}

/* подпись на конце ленты вех: JS ставит left:% , и у крайней метки подпись
   уезжает за правый край (та же болезнь, что у шкалы аквилона). Крайняя
   подпись прижимается вправо — оптическое выравнивание §30.2. */
.lm-cv .lm-ms-term small:last-of-type{left:auto!important;right:0;text-align:right}
.lm-cv .lm-ms-term small{max-width:46%;white-space:normal;line-height:1.25}
/* показ-режим на узком экране: поля 40 px + цифра 88 px не помещались в 312 px */
@media (max-width:560px){
  .lm-cv .lm-show{padding:20px 16px;min-height:auto;gap:14px}
  .lm-cv .lm-show .hero .num{font-size:clamp(44px,14vw,88px)}
  .lm-cv .lm-show .hero .num small{font-size:clamp(16px,5vw,28px)}
}

/* дорожка грида по умолчанию — minmax(auto,1fr): она РАСТЁТ до min-content
   содержимого и распирает страницу (аквилон 730: карточка 783 px в окне 730).
   Элемент грида и флекса получает min-width:0 — тогда дорожка сжимается,
   а таблица прокручивается внутри своей обёртки, как велит §29. */
.lm-cv .lm-grid>*,.lm-cv .lm-kpis>*,.lm-cv .screen>*,.lm-cv .lm-shell>*,
.lm-cv .lm-row>*,.lm-cv .lm-cols>*{min-width:0}
.lm-cv .lm-grid,.lm-cv .lm-kpis{min-width:0}

/* изометрическая карточка не шире экрана: на 390 повёрнутая карточка в
   420 px вылезала за страницу вместе с подписью и значением (§29) */
.lm-cv .lm-iso-stage{max-width:100%;overflow:visible}
.lm-cv .lm-iso{max-width:min(100%,340px)}
@media (max-width:520px){
  .lm-cv .lm-iso-stage{padding:24px 0}
  .lm-cv .lm-iso{max-width:min(86vw,300px);transform:rotateX(38deg) rotateZ(-38deg) scale(.88)}
}

/* ряд управления не режется о край экрана. На десктопе группа кнопок НЕ
   сжимается ниже своего содержимого (иначе min-width:0 выше выдавливал
   таблетку сегментов за рамку карточки — «insights · веха · метки»);
   на телефоне она прокручивается, а не обрезается. */
.lm-cv .lm-seg,.lm-cv .lm-toolbar{max-width:100%;flex:0 0 auto;min-width:0;
  overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}
.lm-cv .lm-seg{flex-wrap:nowrap}
.lm-cv .lm-seg::-webkit-scrollbar,.lm-cv .lm-toolbar::-webkit-scrollbar{display:none}
.lm-cv .lm-seg>*{flex:0 0 auto}
/* действие в баннере/шапке карточки не сжимается ниже своей кнопки:
   иначе кнопка вылезает из padding-бокса и упирается в рамку (§29) */
.lm-cv .lm-banner .act,.lm-cv .lm-card-h .act,.lm-cv .lm-state .act{flex:0 0 auto;min-width:max-content}
.lm-cv .jst-row,.lm-cv .lm-steps{max-width:100%}
@media (max-width:520px){
  .lm-cv .lm-seg,.lm-cv .lm-toolbar{min-width:0;overflow-x:auto;overscroll-behavior-x:contain;
    scrollbar-width:none;flex-wrap:nowrap}
  .lm-cv .lm-seg::-webkit-scrollbar,.lm-cv .lm-toolbar::-webkit-scrollbar{display:none}
  .lm-cv .lm-seg>*{flex:0 0 auto}
}

/* ═══ §30.3 КАРТОЧКА: РАЗМЕРЫ И ПОВЕДЕНИЕ ТЕКСТА · калибровка под Onest · v6.2 ═══
   Правка 06.09.2026 «правильные размеры, урезка и расположение в карточке».
   Корень дефектов — расхождение метрик Onest и Geist, по которым калибровался
   слой. Замеры (DOM, 1440, вес как в системе):
     проза, em на знак ........ Geist 0.5255 → Onest 0.5152   (−2.0 %)
     цифра 11px, tabular ...... Geist 6.61   → Onest 7.41 px  (+12.1 %)
     цифра 13.5px, tabular .... Geist 8.41   → Onest 9.09 px  (+8.2 %)
     цифра 30px (KPI) ......... Geist 18.70  → Onest 20.20 px (+8.0 %)
     дата «06.09.2026» 11px ... Geist 57.4   → Onest 65.1 px  (+13.5 %)
     заголовок 24px/600 ....... Geist 299    → Onest 287 px   (−4.1 %)
     рост строчной ............ Geist 0.530  → Onest 0.527 em (−0.6 %)
   Отсюда закон: ТЕКСТ у Onest уже, ЦИФРА шире. Значит меры прозы сжимаются на
   2 %, а всё, где стоит число, получает БОЛЬШЕ места, а не меньше. Пол кегля
   11px не двигается: рост строчной совпал с Geist на 0.6 %.

   §30.3.1 Число никогда не сжимается — сжимается подпись.
   Дыра §30.2: `.lm-card *{min-width:0}` шёл по всей глубине карточки и снимал
   защиту с атомов, у которых стоит white-space:nowrap. Флекс ужимал их ниже
   содержимого, а overflow:visible выводил хвост поверх соседа: подпись под
   значением, значение под пилюлей. Замер на ките: `.lm-sm .cap b.lm-num`
   («61 встреч») требовал 56 px, получал 46 — минус 10 px в 199 карточках.
   Правило: атом со значением получает min-width:max-content и не сжимается;
   место отдаёт подпись рядом — у неё для этого есть .lm-truncate. */
.lm-cv :is(.lm-num,.lm-kpi-v,.lm-amt,.lm-delta,.lm-badge-period,.lm-money,
  .lm-sm .cap b,.lm-bar-row .val,.lm-stage .n){min-width:min(max-content,100%)}
/* flex:none здесь НЕ ставим: min-width уже держит атом от сжатия, а flex:none
   вдобавок запрещал ему отдавать место и добавлял странице 38 px прокрутки
   на 390 (ряд возвратов). Защита — минимум по содержимому, не запрет флекса. */
/* база сравнения рядом со значением — это текст, и в карточке он ПЕРЕНОСИТСЯ.
   `.lm-vs{white-space:nowrap}` держал 207 px в ряду шириной 328 и выпихивал
   ряд за карточку. Два точечных исключения (§KPI, §сравнение) уже жили в
   системе — здесь они становятся общим правилом для карточки. */
.lm-cv .lm-card .lm-vs{white-space:normal;line-height:1.35}
/* именно min(), а не max-content: голый max-content не даёт значению сжаться
   ДАЖЕ когда родитель реально уже содержимого, и тогда значение распирает не
   карточку, а страницу (замер: KPI 105 px в ряду возвратов на 390 добавлял
   странице 117 px прокрутки). min() защищает от сжатия ровно до ширины
   родителя и ни пикселем больше. */
/* марка (тег, пилюля, чип) не сжимается ниже содержимого, пока её держит
   родитель: min() отдаёт 100 % только там, где родитель реально уже марки.
   До правки тег «поле сегмента» на 390 сжимался до 16 px — пустая рамка. */
.lm-cv :is(.lm-tag,.lm-pill,.lm-chip,.lm-badge){min-width:min(max-content,100%)}

/* §30.3.2 Карточка заполняет свою клетку — подвал ряда стоит на одной линии.
   Дефект «съезд сетки»: клетка грида растягивается по высоте ряда, а карточка
   внутри неё остаётся по содержимому. Замер: 63 карточки из 199 не доставали
   до низа клетки, худший разрыв — клетка 1396 px против карточки 742 px;
   служебная строка соседей расходилась по вертикали на 31–112 px.
   Карточка тянется на всю клетку, .lm-card-b забирает остаток (flex:1),
   и служебная строка садится на общую линию ряда. */
.lm-cv .lm-grid>*>:is(.lm-card,.lm-kpi):only-child{height:100%}
.lm-cv .lm-grid>:is(.lm-card,.lm-kpi){height:100%}

/* §30.3.3 Шапка карточки одной высоты в ряду.
   Длинный заголовок уходит на вторую строку и опускает всё тело карточки —
   ряд превращается в лесенку. Шапка держит две строки заголовка местом, а не
   содержимым: min-height задан, заголовок переносится (не режется многоточием). */
.lm-cv .lm-card-h{align-items:flex-start}
.lm-cv .lm-card-h .t{min-width:0;flex:1 1 auto}
.lm-cv .lm-card-h .t h3{text-wrap:balance;overflow-wrap:anywhere}

/* §30.3.4 Где многоточие разрешено, а где обязателен перенос.
   Многоточие — только у имени сущности в узкой колонке, где ряды должны стоять
   на одной высоте (.lm-truncate ставится руками). Всё остальное переносится:
   заголовок карточки, подпись KPI, служебная строка, ячейка таблицы с текстом.
   Единица, код, дата, бейдж и число не переносятся и не режутся никогда. */
.lm-cv :is(.lm-card-h .t h3,.lm-kpi-l,.lm-kpi-n,.lm-card-f,.lm-item .ttl)
  :not(.lm-truncate){white-space:normal;text-overflow:clip}
.lm-cv :is(.lm-unit,.lm-per,.lm-code,.lm-id,time,.lm-date-inline){white-space:nowrap}

/* §30.3.5 Служебная строка карточки стоит в одном месте и одним стилем.
   Источник, версия, порог с автором — низ карточки, .lm-micro.lm-faint,
   мера --lm-measure-wide, отбивка сверху одинаковая. */
.lm-cv .lm-card-f,.lm-cv .ex .foot{margin-top:auto;font-size:var(--lm-small);
  color:var(--ink-3);line-height:1.45;max-width:var(--lm-measure-wide)}
/* полный список служебных строк слоя: аннотация, подсказка, правило, источник.
   §30.2 закрывал мерой только четыре из них, остальные тянулись во всю ширину
   карточки — замер после правки мер: .lm-m6-note 195 знаков в строке,
   .lm-m6-hint 190, .lm-e6-note 114 при норме 60–75. Служебное читается хуже
   основного, поэтому мера у него не шире --lm-measure-wide, и она одна на все. */
.lm-cv :is(.lm-a6-src,.lm-d6-note,.lm-e6-note,.lm-e6-rule,.lm-heat6-note,
  .lm-k6-note,.lm-k6-src,.lm-m6-hint,.lm-m6-note,.lm-m6-src,
  .lm-evid-how,.g-rule,.lm-fresh,.lm-src){max-width:var(--lm-measure-wide)}

/* §30.3.6 Значение KPI не сжимается и не наезжает на спарклайн.
   Цифра Onest на 8 % шире, поэтому в узкой карточке значение 30px выходило за
   свою колонку. Мера — контейнер карточки, а не окно: в сетке 1440/4 колонки
   карточка бывает уже, чем телефон. */
.lm-cv .lm-kpi{container-type:inline-size}
@container (max-width:260px){
  .lm-cv .lm-kpi .lm-kpi-v{font-size:24px;letter-spacing:-.03em}
  .lm-cv .lm-kpi .lm-kpi-spark{width:64px}
}
@container (max-width:200px){
  .lm-cv .lm-kpi .lm-kpi-spark{display:none}
}

/* §30.3.7 Колонка с числами в таблице.
   Цифра шире — колонке нужна не урезка, а собственный минимум по содержимому,
   иначе браузер рвёт «1 284 396 ₽» на две строки посреди разряда. */
.lm-cv .lm-table td.num{white-space:nowrap;min-width:max-content}
/* Проверено: все 63 таблицы в теле карточек уже лежат в .lm-tblwrap
   (overflow-x:auto), поэтому отдельная страховка на глубину не нужна —
   правило было бы мёртвым кодом. Таблица распирала страницу не собой. */
/* шапка той же колонки — обычный текст, он переносится: nowrap на th раздувал
   заголовок («кто задал», «наценка») и он наезжал на подпись порога рядом */
.lm-cv .lm-table th.num{white-space:normal}

/* §30.3.8 Узкая карточка перестраивает ряд, а не режет значение.
   Лента агентов .lm-pipe живёт в правой колонке 280 px. Дорожки 1fr и 1.2fr
   давали 81 и 97 px: имя агента и его ВЫВОД обрезались многоточием — «Соседи
   по стояку» требовал 127 px, «по подъезду 6 лотов · 3 открыты» — 205 px.
   Перестроение висело на @media, то есть на ширине ОКНА, а карточка узкая и
   в окне 1440. Мера — контейнер: вывод уходит на свою строку целиком. */
.lm-pipe{container-type:inline-size}
@container (max-width:420px){
  .lm-cv .lm-pipe .ag{grid-template-columns:8px 34px minmax(0,1fr) 52px;row-gap:2px}
  .lm-cv .lm-pipe .ag>:nth-child(4){grid-column:3/5;text-align:left;
    white-space:normal;overflow:visible;text-overflow:clip}
}

/* ═══ §30.1 ШКАЛА ПЕРЕХОДОВ · Interfaces №17 (Jakub Antalik) + transitions.dev · v5.1 ═══
   Четыре принципа: длительность по размеру объекта (вход дольше выхода), ease-out
   по умолчанию и никакого bounce на закрытии, масштаб обратно размеру от
   transform-origin триггера, движение 4/8/16 px (панели — до 70 % своей ширины).
   Токен выбирается по назначению, не по ближайшему числу (transitions-polish).
   Конспект — ДОНОРЫ/INTERFACES/ВЫПУСКИ/17-4-principles-of-transition.md. */
:root{--lm-dur-quick:150ms;--lm-dur-fast:250ms;--lm-dur-medium:350ms;--lm-dur-slow:400ms;--lm-ease-smooth:cubic-bezier(.22,1,.36,1);
  --lm-scale-tip:.98;--lm-scale-menu:.97;--lm-scale-modal:.96;--lm-scale-close:.99;--lm-move-text:4px;--lm-move-page:8px;--lm-move-ui:16px;--lm-stagger:40ms}
@media (prefers-reduced-motion:no-preference){
/* тултип: 150 вход / 50 выход, масштаб .98 + 4 px; без intent-delay — это подсказка графика, следующая за курсором */
.lm-cv .lm-tip{transform:translateY(var(--lm-move-text)) scale(var(--lm-scale-tip));transition:opacity 50ms ease-out,transform 50ms ease-out}
.lm-cv .lm-tip.on{transform:none;transition-duration:var(--lm-dur-quick)}
/* меню и поповер: растут от триггера (data-origin), 250 открытие, .97 → 1; закрытие делает LM через @starting-style-совместимый display */
.lm-cv .lm-menu,.lm-cv .lm-pop{transform-origin:top left;transition:opacity var(--lm-dur-fast) var(--lm-ease-smooth),transform var(--lm-dur-fast) var(--lm-ease-smooth),display var(--lm-dur-fast) allow-discrete}
.lm-cv .lm-menu[data-origin="top-right"],.lm-cv .lm-pop[data-origin="top-right"]{transform-origin:top right} .lm-cv .lm-menu[data-origin="top-center"]{transform-origin:top center} .lm-cv .lm-menu[data-origin="bottom-left"]{transform-origin:bottom left} .lm-cv .lm-menu[data-origin="bottom-right"]{transform-origin:bottom right}
@starting-style{.lm-cv .lm-menu,.lm-cv .lm-pop{opacity:0;transform:scale(var(--lm-scale-menu))}}
.lm-cv .lm-menu.lm-closing,.lm-cv .lm-pop.lm-closing{opacity:0;transform:scale(var(--lm-scale-close));transition-duration:var(--lm-dur-quick);pointer-events:none}
/* модалка: .96 → 1 за 250 из центра, закрытие 150 без bounce */
.lm-cv .lm-modal{transform-origin:center;transform:scale(var(--lm-scale-modal));transition:transform var(--lm-dur-quick) var(--lm-ease-smooth)}
.lm-cv .lm-modal-wrap{transition:opacity var(--lm-dur-quick) var(--lm-ease-smooth)}
.lm-cv .lm-modal-wrap.on{transition-duration:var(--lm-dur-fast)} .lm-cv .lm-modal-wrap.on .lm-modal{transform:none;transition-duration:var(--lm-dur-fast)}
/* шторка: входит с 70 % своей ширины + прозрачность, 400 открытие / 350 закрытие */
.lm-cv .lm-drawer{transform:translateX(70%);opacity:0;transition:transform var(--lm-dur-medium) var(--lm-ease-smooth),opacity var(--lm-dur-medium) var(--lm-ease-smooth)}
.lm-cv .lm-drawer.on{transform:none;opacity:1;transition-duration:var(--lm-dur-slow)}
/* тост: 16 px снизу, .97 → 1, 350 вход / 250 выход */
.lm-cv .lm-toast{animation:lm-toast-in var(--lm-dur-medium) var(--lm-ease-smooth)} .lm-cv .lm-toast.lm-closing{opacity:0;transform:translateY(var(--lm-move-text)) scale(var(--lm-scale-close));transition:opacity var(--lm-dur-fast) var(--lm-ease-smooth),transform var(--lm-dur-fast) var(--lm-ease-smooth)}
@keyframes lm-toast-in{from{opacity:0;transform:translateY(var(--lm-move-ui)) scale(var(--lm-scale-menu))}}
/* сегментный контрол: таблетка скользит между кнопками (LM.motion.segPill), 250 мс, симметрично */
.lm-cv .lm-seg.lm-sliding{position:relative;isolation:isolate} .lm-cv .lm-seg.lm-sliding>.pill{position:absolute;top:3px;bottom:3px;left:0;width:0;border-radius:6px;background:var(--surface);box-shadow:var(--shadow);z-index:0;transition:transform var(--lm-dur-fast) var(--lm-ease-smooth),width var(--lm-dur-fast) var(--lm-ease-smooth);pointer-events:none}
.lm-cv .lm-seg.lm-sliding>button{position:relative;z-index:1} .lm-cv .lm-seg.lm-sliding>button.on{background:transparent;box-shadow:none}
/* смена текста на месте: 4 px + blur 2 px, 150 мс симметрично (счётчики, статусы) */
.lm-cv .lm-swap-text{display:inline-block;transition:opacity var(--lm-dur-quick) ease-in-out,transform var(--lm-dur-quick) ease-in-out,filter var(--lm-dur-quick) ease-in-out} .lm-cv .lm-swap-text.lm-out{opacity:0;transform:translateY(calc(-1 * var(--lm-move-text)));filter:blur(2px)} .lm-cv .lm-swap-text.lm-pre{opacity:0;transform:translateY(var(--lm-move-text));filter:blur(2px);transition:none}
}

/* ═══ §31 ПРЕСЕТЫ ВЫВОДА · v6 (LM.preset, html[data-preset]) ═══════════════════════════════════════════════════════
   Слито из ядро/_v6/preset.css 06.09.2026 (файл оставлен как журнал слоя). */
/* ═══ §31 ПРЕСЕТЫ ВЫВОДА · v6 ══════════════════════════════════════════════
   html[data-preset] ставит LM.preset.apply. Здесь только то, что зависит от
   носителя: плотность, масштаб, hover, ширина кадра, печать, прозрачный фон. */
:root{--lm-preset-scale:1;--lm-preset-width:auto}
html[data-density="large"]{--lm-ctl:36px;--lm-card-pad:20px;--lm-icon:20px;--lm-icon-sm:16px;font-size:calc(16px * var(--lm-preset-scale))}
html[data-density="large"] .lm-kpi-v{font-size:calc(1.35 * 1.1em)} html[data-density="large"] .lm-table td,html[data-density="large"] .lm-table th{padding-block:12px}
html[data-density="compact"]{--lm-ctl:28px;--lm-card-pad:12px} html[data-density="compact"] .lm-table td,html[data-density="compact"] .lm-table th{padding-block:6px}
/* hover выключен там, где нет мыши (ТВ, гифка, вставка, телефон): состояния остаются, подсказки — по тапу */
html[data-hover="off"] .lm-card:hover,html[data-hover="off"] .lm-kpi:hover{box-shadow:var(--lm-shadow-border)} html[data-hover="off"] .lm-item:hover,html[data-hover="off"] .lm-table tbody tr:hover{background:inherit}
/* ширина кадра для записи и телефона */
html[data-preset="гифка"] body>.lm-frame,html[data-preset="телефон"] body>.lm-frame{width:var(--lm-preset-width);margin-inline:auto}
/* печать и отчёт: конечные состояния, никаких спектров, тени → рамки */
html[data-preset="печать"] .lm-glow,html[data-preset="печать"] .lm-ambient,html[data-preset="печать"] .lm-particles{display:none}
html[data-preset="печать"] .lm-card,html[data-preset="печать"] .lm-kpi,html[data-preset="печать"] .lm-float{box-shadow:none;border-color:var(--border)}
html[data-preset="печать"] .lm-reveal{opacity:1;transform:none;filter:none} html[data-preset="печать"] [data-draw] path{stroke-dashoffset:0!important}
@media print{.lm .lm-glow,.lm .lm-ambient,.lm .lm-particles,.lm .lm-deck-hud,.lm .v5-side{display:none!important} .lm .lm-card,.lm .lm-kpi{box-shadow:none;border-color:var(--border);break-inside:avoid} .lm .lm-reveal{opacity:1!important;transform:none!important;filter:none!important}}
/* вставка в видео: прозрачный фон при ?alpha=1 */
html[data-alpha="on"],html[data-alpha="on"] body{background:transparent!important}
/* ТВ: тёплый графит на весь экран, курсор скрыт */
html[data-preset="тв"] body{background:var(--bg);cursor:none} html[data-preset="тв"] .lm-tip{font-size:1.1em}
/* переключатель пресетов в китах */
.lm-preset-ctl button{text-transform:none}


/* ═══ §32 ТЕПЛОВЫЕ КАРТЫ · v6 (LM.heat, .lm-heat6*) ═══════════════════════════════════════════════════════
   Слито из ядро/_v6/heat.css 06.09.2026 (файл оставлен как журнал слоя). */
/* ═══ §32 ТЕПЛОВЫЕ КАРТЫ · v6 · lumen-heat.js (LM.heat) ═══════════════════════
   Классы lm-heat6* — чтобы не пересечься с .lm-heat / .lm-cal / .lm-cohort из lumen-viz.
   Рампы считаются от токенов в OKLCH относительным цветом:
     oklch(from var(--c) L calc(c * k) h) — оттенок токена сохраняется точно,
     светлота задаётся ступенями, хрома чуть гасится на концах.
   Ступени подобраны под валидатор dataviz (--ordinal, 06.09.2026): монотонная L,
   ΔL ≥ .06 между соседями, крайняя ступень ≥ 2:1 к поверхности, один оттенок.
     светлая · seq: L .78 → .39 (6 ступеней)   · плечо div: .78 → .54 (3)
     тёмная  · seq: L .43 → .78 (от поверхности к свету) · плечо div: .44 → .66
   Расходящаяся: --cold ↔ нейтраль (--chart-empty) ↔ --warm.
   Текст в ячейке носит токены текста (--ink / --surface по светлоте заливки),
   никогда цвет ряда. Зазор 2 px — gap сетки, сквозь него видна поверхность.
   Подключение: отдельной <link> после lumen.css (в v6 сольётся в lumen.css §32). */

.lm-heat6{--c:var(--lm-emph);--cn:var(--cold);--cw:var(--warm);
  --lm-heat6-h:28px;--lm-heat6-min:24px;--lm-heat6-fs:11.5px;--lm-heat6-r:4px;--lm-heat6-hh:72px;
  --lm-heat6-l1:.78;--lm-heat6-l2:.71;--lm-heat6-l3:.64;--lm-heat6-l4:.57;--lm-heat6-l5:.48;--lm-heat6-l6:.39;
  --lm-heat6-k1:.55;--lm-heat6-k2:.7;--lm-heat6-k3:.85;--lm-heat6-k4:1;--lm-heat6-k5:.9;--lm-heat6-k6:.75;
  --lm-heat6-d1:.78;--lm-heat6-d2:.66;--lm-heat6-d3:.54;
  --lm-heat6-dn1:.6;--lm-heat6-dn2:.9;--lm-heat6-dn3:.8;
  --lm-heat6-dw1:.6;--lm-heat6-dw2:.85;--lm-heat6-dw3:.7;
  position:relative;min-width:0;max-width:100%;contain:inline-size;font-size:var(--lm-heat6-fs);color:var(--ink)}  /* contain: min-content таблицы близнеца не раздувает плавающую карточку */
html[data-theme="dark"] .lm-heat6{
  --lm-heat6-l1:.43;--lm-heat6-l2:.50;--lm-heat6-l3:.57;--lm-heat6-l4:.64;--lm-heat6-l5:.71;--lm-heat6-l6:.78;
  --lm-heat6-k1:.6;--lm-heat6-k2:.8;--lm-heat6-k3:1;--lm-heat6-k4:1;--lm-heat6-k5:.85;--lm-heat6-k6:.7;
  --lm-heat6-d1:.44;--lm-heat6-d2:.55;--lm-heat6-d3:.66;
  --lm-heat6-dn1:.6;--lm-heat6-dn2:.8;--lm-heat6-dn3:1;
  --lm-heat6-dw1:.45;--lm-heat6-dw2:.6;--lm-heat6-dw3:.85}

/* ── ступени: одна для ячеек и для плашек легенды. Пустая клетка — --chart-empty; ступень перебивает её (специфичность выше) ── */
.lm-heat6 .cell:not([data-step]){background:var(--chart-empty)}
.lm-heat6 [data-step]{color:var(--ink)}
.lm-heat6 [data-step="1"]{background:oklch(from var(--c) var(--lm-heat6-l1) calc(c * var(--lm-heat6-k1)) h)}
.lm-heat6 [data-step="2"]{background:oklch(from var(--c) var(--lm-heat6-l2) calc(c * var(--lm-heat6-k2)) h)}
.lm-heat6 [data-step="3"]{background:oklch(from var(--c) var(--lm-heat6-l3) calc(c * var(--lm-heat6-k3)) h)}
.lm-heat6 [data-step="4"]{background:oklch(from var(--c) var(--lm-heat6-l4) calc(c * var(--lm-heat6-k4)) h);color:var(--surface)}
.lm-heat6 [data-step="5"]{background:oklch(from var(--c) var(--lm-heat6-l5) calc(c * var(--lm-heat6-k5)) h);color:var(--surface)}
.lm-heat6 [data-step="6"]{background:oklch(from var(--c) var(--lm-heat6-l6) calc(c * var(--lm-heat6-k6)) h);color:var(--surface)}
.lm-heat6.div [data-step="1"]{background:oklch(from var(--cw) var(--lm-heat6-d1) calc(c * var(--lm-heat6-dw1)) h);color:var(--ink)}
.lm-heat6.div [data-step="2"]{background:oklch(from var(--cw) var(--lm-heat6-d2) calc(c * var(--lm-heat6-dw2)) h);color:var(--ink)}
.lm-heat6.div [data-step="3"]{background:oklch(from var(--cw) var(--lm-heat6-d3) calc(c * var(--lm-heat6-dw3)) h);color:var(--surface)}
.lm-heat6.div [data-step="-1"]{background:oklch(from var(--cn) var(--lm-heat6-d1) calc(c * var(--lm-heat6-dn1)) h);color:var(--ink)}
.lm-heat6.div [data-step="-2"]{background:oklch(from var(--cn) var(--lm-heat6-d2) calc(c * var(--lm-heat6-dn2)) h);color:var(--ink)}
.lm-heat6.div [data-step="-3"]{background:oklch(from var(--cn) var(--lm-heat6-d3) calc(c * var(--lm-heat6-dn3)) h);color:var(--surface)}
/* запасной путь для браузеров без относительного цвета: те же ступени смесью в sRGB */
@supports not (color: oklch(from red l c h)){
  .lm-heat6 [data-step="1"]{background:color-mix(in srgb,var(--c) 30%,var(--surface))}
  .lm-heat6 [data-step="2"]{background:color-mix(in srgb,var(--c) 45%,var(--surface))}
  .lm-heat6 [data-step="3"]{background:color-mix(in srgb,var(--c) 62%,var(--surface))}
  .lm-heat6 [data-step="4"]{background:color-mix(in srgb,var(--c) 80%,var(--surface))}
  .lm-heat6 [data-step="5"]{background:var(--c)}
  .lm-heat6 [data-step="6"]{background:color-mix(in srgb,var(--c) 75%,var(--ink))}
  .lm-heat6.div [data-step="1"]{background:color-mix(in srgb,var(--cw) 40%,var(--surface))}
  .lm-heat6.div [data-step="2"]{background:color-mix(in srgb,var(--cw) 75%,var(--surface))}
  .lm-heat6.div [data-step="3"]{background:color-mix(in srgb,var(--cw) 80%,var(--ink))}
  .lm-heat6.div [data-step="-1"]{background:color-mix(in srgb,var(--cn) 40%,var(--surface))}
  .lm-heat6.div [data-step="-2"]{background:color-mix(in srgb,var(--cn) 75%,var(--surface))}
  .lm-heat6.div [data-step="-3"]{background:color-mix(in srgb,var(--cn) 80%,var(--ink))}}

/* ── шапка: факт-заголовок + кнопка «таблица» ── */
.lm-heat6-hd{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px;min-width:0}
.lm-heat6-hd .t{flex:1;min-width:0}
.lm-heat6-hd h4{margin:0;font-size:14px;font-weight:600;letter-spacing:-.015em;color:var(--ink);line-height:1.3;text-wrap:balance}
.lm-heat6-hd .sub{font-size:var(--lm-small);color:var(--ink-4);margin-top:2px;line-height:1.35;text-wrap:pretty}
.lm-heat6-hd .lm-btn{flex:none}

/* ── сетка ── */
.lm-heat6-wrap{overflow-x:auto;overscroll-behavior-x:contain;min-width:0;max-width:100%;padding-bottom:2px}
.lm-heat6-grid{display:grid;gap:2px;align-items:stretch;min-width:0}
.lm-heat6-grid.diag{padding-right:52px;padding-top:2px}
.lm-heat6 .ch{display:flex;align-items:flex-end;justify-content:center;min-width:0;padding:0 1px 4px;font-size:var(--lm-micro);color:var(--ink-4);line-height:1.2;text-align:center}
.lm-heat6 .ch>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lm-heat6 .ch small{display:block;font-size:var(--lm-micro);color:var(--ink-5);font-variant-numeric:tabular-nums}
.lm-heat6 .ch.corner{justify-content:flex-start;text-align:left;padding-right:8px}
.lm-heat6-grid.diag .ch:not(.corner){height:var(--lm-heat6-hh);position:relative;overflow:visible;justify-content:flex-start;padding:0}
.lm-heat6-grid.diag .ch:not(.corner)>span{position:absolute;left:50%;bottom:6px;width:max-content;max-width:150px;transform-origin:0 100%;transform:rotate(-52deg);overflow:hidden}
.lm-heat6-grid.diag .ch small{display:inline;margin-left:4px}
.lm-heat6 .mh{grid-row:1;display:flex;align-items:flex-end;gap:4px;min-width:0;padding:0 2px 3px;font-size:var(--lm-micro);color:var(--ink-4);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}
.lm-heat6 .mh b{font-weight:var(--w-semibold);color:var(--ink-3)}
.lm-heat6 .rh{display:flex;align-items:center;justify-content:flex-end;gap:6px;padding:0 8px 0 0;min-height:var(--lm-heat6-h);font-size:var(--lm-small);color:var(--ink-3);white-space:nowrap;max-width:200px;min-width:0}
.lm-heat6 .rh>span{overflow:hidden;text-overflow:ellipsis;min-width:0}
.lm-heat6 .rh small{color:var(--ink-4);font-size:var(--lm-micro);font-variant-numeric:tabular-nums;flex:none}
.lm-heat6 .rh.off{color:var(--ink-4)}
.lm-heat6 .cell{position:relative;display:flex;align-items:center;justify-content:center;min-width:0;height:var(--lm-heat6-h);border-radius:var(--lm-heat6-r);font-variant-numeric:tabular-nums;font-size:var(--lm-heat6-fs);line-height:1;overflow:hidden;cursor:default}
.lm-heat6 .cell>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 3px}
.lm-heat6.dense .cell:not(.tot)>span{display:none}
.lm-heat6 .cell.zero{color:var(--ink-4)}
.lm-heat6 .cell.na{background:repeating-linear-gradient(45deg,transparent 0 4px,var(--border-2) 4px 5px);color:var(--ink-4)}
.lm-heat6 .cell.off{background-image:repeating-linear-gradient(135deg,transparent 0 3px,color-mix(in srgb,var(--ink) 9%,transparent) 3px 4px)}
.lm-heat6 .cell.weak{background:var(--chart-empty);color:var(--ink-4)}
/* §37: порог и «сегодня» отмечаются НЕ жирной рамкой, а засечкой в углу и волосяным кольцом
   цвета поверхности — заливка остаётся единственным носителем величины (см. DESIGN_SYSTEM §37) */
.lm-heat6 .cell.over{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--surface) 65%,transparent)}
.lm-heat6 .cell.over::after{content:'';position:absolute;top:0;right:0;width:0;height:0;border-top:6px solid color-mix(in srgb,var(--ink) 55%,transparent);border-left:6px solid transparent;border-top-right-radius:2px;pointer-events:none}
.lm-heat6 .cell.today{box-shadow:inset 0 0 0 1px var(--ink-4)}
.lm-heat6 .cell.today::before{content:'';position:absolute;left:50%;bottom:2px;width:10px;height:2px;border-radius:1px;transform:translateX(-50%);background:var(--ink-3);pointer-events:none}
.lm-heat6 .cell.future{background:transparent;box-shadow:inset 0 0 0 1px var(--border-2)}
.lm-heat6 .cell.out{visibility:hidden}
.lm-heat6 .cell.tot{background:transparent;color:var(--ink-3);font-weight:var(--w-semibold);justify-content:flex-end}
.lm-heat6 .cell.tot>span{padding-right:2px}
@media (hover:hover){.lm-heat6 .cell:not(.tot):not(.out):hover{filter:brightness(.92)} .lm-heat6 .cell.na:hover,.lm-heat6 .cell.future:hover{filter:none;box-shadow:inset 0 0 0 1px var(--border-3)}}
.lm-heat6 .cell.lm-on{filter:brightness(.9)}

/* ── календарь: квадратные клетки 13 px (o.square → колонки фиксированной ширины), без подписей ── */
.lm-heat6.cal{--lm-heat6-h:13px;--lm-heat6-min:13px;--lm-heat6-r:2px}
.lm-heat6-grid.months .ch{grid-row:2}
.lm-heat6.cal .rh{font-size:var(--lm-micro);padding-right:6px}
.lm-heat6.cal .cell.today{box-shadow:inset 0 0 0 1px var(--ink-4)}
.lm-heat6.cal .cell.off{background-image:none}
.lm-heat6.cal .cell.off:not([data-step]){background:color-mix(in srgb,var(--chart-empty) 55%,transparent)}
.lm-heat6.cal .cell.tot{font-size:var(--lm-micro)}

/* ── легенда: шкала с min/max, порог с автором, «нет данных», источник ── */
.lm-heat6-lg{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin-top:10px;font-size:var(--lm-micro);color:var(--ink-4);min-width:0;line-height:1.35}
.lm-heat6-lg .sc{display:inline-flex;align-items:center;gap:2px;flex:none}
.lm-heat6-lg .sc i{display:block;width:16px;height:10px;border-radius:2px;cursor:default} .lm-heat6-lg .sc i:not([data-step]){background:var(--chart-empty)} /* легенда красится теми же [data-step], что и клетки */
.lm-heat6-lg .sc i.mid{background:var(--chart-empty);box-shadow:inset 0 0 0 1px var(--border-3)}
.lm-heat6-lg .sc span{margin:0 4px;font-variant-numeric:tabular-nums;color:var(--ink-3)}
.lm-heat6-lg .it{display:inline-flex;align-items:center;gap:5px;flex:none}
.lm-heat6-lg .it i{display:block;width:12px;height:12px;border-radius:3px;background:var(--chart-empty)}
.lm-heat6-lg .it i.na{background:repeating-linear-gradient(45deg,transparent 0 4px,var(--border-2) 4px 5px)}
.lm-heat6-lg .it i.off{background-image:repeating-linear-gradient(135deg,transparent 0 3px,color-mix(in srgb,var(--ink) 12%,transparent) 3px 4px)}
.lm-heat6-lg .it i.over{background:transparent;box-shadow:inset 0 0 0 1px var(--border-3);position:relative;overflow:hidden} .lm-heat6-lg .it i.over::after{content:'';position:absolute;top:0;right:0;width:0;height:0;border-top:5px solid color-mix(in srgb,var(--ink) 55%,transparent);border-left:5px solid transparent}
.lm-heat6-lg .it i.today{background:transparent;box-shadow:inset 0 0 0 1px var(--ink-4)}
.lm-heat6-lg .it i.future{background:transparent;box-shadow:inset 0 0 0 1px var(--border-3)}
.lm-heat6-lg .it i.weak{background:var(--chart-empty)}
.lm-heat6-lg .thr{display:inline-flex;align-items:center;gap:5px;color:var(--ink-3)}
.lm-heat6-lg .thr i{display:block;position:relative;width:12px;height:12px;border-radius:3px;box-shadow:inset 0 0 0 1px var(--border-3);flex:none;overflow:hidden} .lm-heat6-lg .thr i::after{content:'';position:absolute;top:0;right:0;width:0;height:0;border-top:5px solid color-mix(in srgb,var(--ink) 55%,transparent);border-left:5px solid transparent}
.lm-heat6-lg .thr.none{color:var(--ink-4)}
.lm-heat6-lg .src{margin-left:auto;color:var(--ink-4);font-family:var(--font-mono);font-size:var(--lm-micro);white-space:nowrap}
.lm-heat6-note{margin-top:6px;font-size:var(--lm-micro);color:var(--ink-4);line-height:1.4;text-wrap:pretty}

/* ── близнец ── */
.lm-heat6-twin{margin-top:10px}
.lm-heat6-twin[hidden]{display:none}
.lm-heat6.twin-only .lm-heat6-wrap,.lm-heat6.twin-only .lm-heat6-lg{display:none}
.lm-heat6.twin-only .lm-heat6-twin{margin-top:0}
.lm-heat6-twin .lm-table td.na{color:var(--ink-4)}
.lm-heat6-twin .lm-table tr.avg td{color:var(--ink-3);font-style:normal;border-top:1px solid var(--border-3)}

/* ── загрузка: скелет в форме будущей сетки ── */
.lm-heat6-skel{display:grid;gap:2px}
.lm-heat6-skel .lm-skel{height:var(--lm-heat6-h);border-radius:var(--lm-heat6-r)}

/* ── четыре состояния внутри формы: остаются тем же блоком ── */
.lm-heat6>.lm-state{min-height:160px}

/* ── ТВ / показ: крупнее ячейки и подписи ── */
html[data-preset="тв"] .lm-heat6{--lm-heat6-h:36px;--lm-heat6-fs:14px}
html[data-preset="тв"] .lm-heat6 .rh,html[data-preset="тв"] .lm-heat6 .ch{font-size:13px}
@media print{.lm-heat6 .cell{print-color-adjust:exact;-webkit-print-color-adjust:exact} .lm-heat6-twin{display:block!important}}


/* ═══ §33 ВСТАВКИ В ВИДЕО · v6 (LM.insert, .lm-ins*) ═══════════════════════════════════════════════════════
   Слито из ядро/_v6/insert.css 06.09.2026 (файл оставлен как журнал слоя). */
/* ===========================================================
   LUMEN v6 · вставки в видео · _v6/insert.css
   Подключать отдельной <link> ПОСЛЕ lumen.css. В lumen.css не переносить.
   Классы lm-ins*. Цвета — только токены; тёмная тема — html[data-theme="dark"]
   приходит из tokens.css сама. Размеры под сетку 1920 (ТВ — zoom 2 в JS):
   заголовок 96 (вертикаль 80) · подпись 28–32 · цифра 200 (вертикаль 180).
   Safe-зона 5 % — тело сцены inset 5 %; вертикаль внизу держит ещё 8 %
   под интерфейс Reels. Хореография §21/§30.1: вход 350 (8 px + blur 4),
   выход 200, easing --lm-ease-smooth, все длительности × --lm-ins-speed.
   =========================================================== */

/* ── кадр ── */
.lm-ins{position:relative;overflow:hidden;background:var(--bg);color:var(--ink);font-family:var(--font);line-height:1.2;
  --lm-ins-speed:1;--lm-ins-in:350ms;--lm-ins-out:200ms;--lm-ins-safe:5%}
.lm-ins.alpha{background:transparent}
.lm-ins-stage{position:relative;overflow:hidden}
.lm-ins .lm-scene.lm-ins-bg{position:absolute;inset:0;border:0;border-radius:0;padding:0;min-height:0;display:block;background:transparent;z-index:0}
.lm-ins .lm-ambient{border:0;border-radius:0;padding:0;overflow:visible} /* карточка-амбиент §13 несёт радиус и рамку — в кадре их нет */
.lm-ins .lm-ambient i{filter:blur(120px);opacity:.2}
.lm-ins .lm-particles i{opacity:calc(var(--op,.4) * .8)}
.lm-ins-spectrum{position:absolute;left:8%;right:8%;bottom:-8%;height:26%;border-radius:999px;filter:blur(90px);opacity:.32;
  background:linear-gradient(90deg,var(--cold),var(--warm),var(--ok),var(--blue,var(--lm-emph)),var(--purple,var(--lm-emph)),var(--lm-emph))}
.lm-ins-body{position:absolute;inset:var(--lm-ins-safe);z-index:1;display:flex;flex-direction:column;justify-content:center;gap:28px;min-height:0}
.lm-ins[data-format="vertical"] .lm-ins-body{bottom:13%}

/* ── страница «сцена целиком» (?insert=…): без шапки, без полей; alpha — прозрачный документ ── */
html.lm-ins-page,html.lm-ins-page body{margin:0;padding:0;background:var(--bg);overflow:hidden}
html.lm-ins-page.alpha,html.lm-ins-page.alpha body{background:transparent}
html.lm-ins-page #insert{position:absolute;left:0;top:0}
/* §47.2 — «сайдбара нет: один экран (вставка, слайд, витрина показа), печать, кадр записи».
   Страница вставок гасила только свою локальную шапку (.b-top/.b-wrap); слои каркаса, пришедшие
   позже (указатель разделов #ia и «что дальше» #spNext), оставались в кадре и запекались в
   .mov/.webm поверх чужого видео. Гасим всё, что не сцена: правило действует на любой странице,
   открытой как кадр записи, а не только на ките вставок. */
html.lm-ins-page body>*:not(#insert):not(script):not(style):not(link):not(template){display:none!important}

/* ── элементы: вход 350 (сдвиг 8 px + blur 4) → выход 200 (4 px, blur 2), ease-out без bounce ── */
.lm-ins-el{opacity:1;margin:0;--lm-delay:0ms} /* задержку пишет LM.insert на элемент */
@media (prefers-reduced-motion:no-preference){
  .lm-ins-el{opacity:0;transform:translateY(var(--lm-move-page));filter:blur(4px);
    transition-property:opacity,transform,filter;transition-duration:calc(var(--lm-ins-in) * var(--lm-ins-speed));
    transition-timing-function:var(--lm-ease-smooth);transition-delay:var(--lm-delay,0ms)}
  .lm-ins-el[data-move="x"]{transform:translateX(calc(-1 * var(--lm-move-page)))}
  .lm-ins-el[data-move="pop"]{transform:scale(.96)}
  .lm-ins-el.lm-in{opacity:1;transform:none;filter:blur(0)}
  .lm-ins-el.lm-in.lm-out{opacity:0;transform:translateY(calc(-1 * var(--lm-move-text)));filter:blur(2px);
    transition-duration:calc(var(--lm-ins-out) * var(--lm-ins-speed));transition-timing-function:ease-out}
  .lm-ins-el[data-move="x"].lm-in.lm-out{transform:translateX(calc(-1 * var(--lm-move-text)))}
  .lm-ins-el[data-move="pop"].lm-in.lm-out{transform:scale(var(--lm-scale-close))}
}

/* ── типографика 1920 ── */
.lm-ins .t-eyebrow{font-size:32px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-4);font-weight:500;line-height:1.2}
.lm-ins .t-title{font-size:96px;font-weight:600;letter-spacing:-.03em;line-height:1.04;color:var(--ink);max-width:12em;text-wrap:balance}
.lm-ins .t-sub{font-size:36px;color:var(--ink-3);line-height:1.35;max-width:26.6em;text-wrap:pretty}
.lm-ins .t-meta{font-size:28px;color:var(--ink-4);line-height:1.35;max-width:var(--lm-measure-narrow)}
.lm-ins[data-format="vertical"] .t-title,.lm-ins[data-format="square"] .t-title{font-size:80px}
.lm-ins[data-format="vertical"] .t-sub,.lm-ins[data-format="square"] .t-sub{font-size:34px}

/* ── нижняя треть: плашка с полосой акцента, вход слева ── */
.lm-ins-body.lowerThird{justify-content:flex-end;align-items:flex-start}
.lm-ins-lt{display:flex;align-items:stretch;gap:26px;padding:28px 44px 30px 30px;border-radius:24px;max-width:72%;
  background:color-mix(in srgb,var(--surface) 90%,transparent);box-shadow:var(--lm-shadow-border),0 24px 60px -30px color-mix(in srgb,var(--ink) 40%,transparent);
  -webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px)}
.lm-ins-lt .bar{width:8px;border-radius:4px;background:var(--lm-emph);flex:none}
.lm-ins-lt .txt{display:flex;flex-direction:column;min-width:0}
.lm-ins-lt .name{font-size:52px;font-weight:600;letter-spacing:-.02em;line-height:1.1;color:var(--ink)}
.lm-ins-lt .role{font-size:30px;color:var(--ink-3);margin-top:8px;line-height:1.25}
.lm-ins-lt .note{font-size:26px;color:var(--ink-4);margin-top:10px;line-height:1.25}
.lm-ins[data-format="vertical"] .lm-ins-lt,.lm-ins[data-format="square"] .lm-ins-lt{max-width:100%}

/* ── крупная цифра с базой ── */
.lm-ins-body.kpiCallout{align-items:center;text-align:center;gap:22px}
.lm-ins-kpi-v{display:flex;align-items:baseline;justify-content:center;gap:18px;font-size:200px;font-weight:600;letter-spacing:-.045em;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.lm-ins-kpi-v small{font-size:64px;font-weight:500;letter-spacing:-.02em;color:var(--ink-4)}
.lm-ins[data-format="vertical"] .lm-ins-kpi-v,.lm-ins[data-format="square"] .lm-ins-kpi-v{font-size:180px}
.lm-ins-kpi-d{display:flex;align-items:center;justify-content:center;gap:22px;font-size:32px;color:var(--ink-3);flex-wrap:wrap}
.lm-ins .lm-delta{height:auto;font-size:36px;padding:10px 26px;gap:10px;font-weight:var(--w-semibold);letter-spacing:-.01em}
.lm-ins .lm-delta .lm-ic{width:32px;height:32px;stroke-width:var(--lm-icon-stroke)}

/* ── график ── */
.lm-ins-body.chartReveal{gap:26px}
.lm-ins-fig{flex:1;min-height:0;display:grid;align-content:center}
.lm-ins-fig .lm-chart{min-height:0}
.lm-ins-fig .lm-chart svg{width:100%;height:auto;max-height:100%;display:block}
.lm-ins-fig .chart-legend{display:none}

/* ── цитата ── */
.lm-ins-body.quote{align-items:center;text-align:center}
.lm-ins-q{font-size:72px;font-weight:500;letter-spacing:-.02em;line-height:1.2;max-width:17.3em;margin:0;quotes:'«' '»';color:var(--ink);text-wrap:balance}
.lm-ins-q::before{content:open-quote;color:var(--lm-emph)} .lm-ins-q::after{content:close-quote;color:var(--lm-emph)}
.lm-ins .who{margin-top:14px}
.lm-ins[data-format="vertical"] .lm-ins-q,.lm-ins[data-format="square"] .lm-ins-q{font-size:64px}

/* ── титул и финал ── */
.lm-ins-body.titleCard{gap:24px}
.lm-ins-body.endCard{gap:28px}
.lm-ins-cta{display:inline-flex;align-items:center;gap:16px;font-size:40px;font-weight:var(--w-semibold);letter-spacing:-.01em;padding:22px 42px;border-radius:999px;background:var(--ink);color:var(--surface);line-height:1}
.lm-ins-cta .lm-ic{width:40px;height:40px;stroke-width:var(--lm-icon-stroke)}
.lm-ins-url{font-size:36px;color:var(--ink-3);letter-spacing:0}

/* ── список лестницей ── */
.lm-ins-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:22px}
.lm-ins-li{font-size:46px;line-height:1.3;padding-left:60px;position:relative;color:var(--ink-2);text-wrap:pretty}
.lm-ins-li::before{content:'';position:absolute;left:0;top:.62em;width:30px;height:4px;border-radius:2px;background:var(--lm-emph)}
.lm-ins[data-format="vertical"] .lm-ins-li,.lm-ins[data-format="square"] .lm-ins-li{font-size:42px}

/* ── три показателя ── */
.lm-ins-body.stat3{gap:32px}
.lm-ins-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:36px}
.lm-ins-stat{padding:44px 44px 40px;border-radius:32px;background:var(--surface);box-shadow:var(--lm-shadow-border);display:flex;flex-direction:column;gap:14px;min-width:0}
.lm-ins-stat .l{font-size:28px;color:var(--ink-4);letter-spacing:.04em;text-transform:uppercase;font-weight:500}
.lm-ins-stat .v{font-size:120px;font-weight:600;letter-spacing:-.04em;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums;display:flex;align-items:baseline;gap:12px}
.lm-ins-stat .v small{font-size:44px;color:var(--ink-4);font-weight:500}
.lm-ins-stat .d .lm-delta{font-size:30px;padding:8px 20px}
.lm-ins-stat .b{font-size:26px;color:var(--ink-4);line-height:1.3}
.lm-ins[data-format="vertical"] .lm-ins-stats{grid-template-columns:1fr}
.lm-ins[data-format="square"] .lm-ins-stats{grid-template-columns:1fr;gap:24px}
.lm-ins[data-format="square"] .lm-ins-stat{flex-direction:row;align-items:center;flex-wrap:wrap;gap:8px 28px;padding:24px 40px 20px}
.lm-ins[data-format="square"] .lm-ins-stat .l{flex:1}
.lm-ins[data-format="square"] .lm-ins-stat .v{font-size:88px}
/* §4 · база остаётся и в квадрате. Строка «прошлая неделя: 1210» пряталась на square —
   а квадрат и есть кадр поста: цифра уезжала в чат с дельтой, но без названной базы.
   Теперь база уходит своей строкой под ряд, мельче, но на экране (§7б: источник и база — не в подсказке). */
.lm-ins[data-format="square"] .lm-ins-stat .b{flex-basis:100%;order:9;font-size:23px;line-height:1.2}

/* ── превью в ките: рамка 480 px, стадия масштабируется transform: scale, шахматка на alpha ── */
.lm-ins-prev{position:relative;overflow:hidden;border-radius:12px;box-shadow:var(--lm-shadow-border);background:var(--surface-2);width:480px;max-width:100%}
.lm-ins-prev.alpha{background-color:var(--surface);background-image:linear-gradient(45deg,var(--surface-4) 25%,transparent 25%,transparent 75%,var(--surface-4) 75%),linear-gradient(45deg,var(--surface-4) 25%,transparent 25%,transparent 75%,var(--surface-4) 75%);background-size:16px 16px;background-position:0 0,8px 8px}
.lm-ins-prev>.lm-ins{position:absolute;left:0;top:0;transform-origin:0 0}


/* ═══ §34 ГРАФИКИ · ПРОВЕРЕНО v6 (аудит по data-viz, МЕТОДИКА/АУДИТ_ГРАФИКОВ_v6.md) ═══════════════════════════════════════════════════════
   Слито из ядро/_v6/charts.css 06.09.2026 (файл оставлен как журнал слоя). */
/* ===========================================================
   LUMEN v6 · charts.css — правки графических форм по аудиту
   (МЕТОДИКА/АУДИТ_ГРАФИКОВ_v6.md, 06.09.2026). Подключается ПОСЛЕ lumen.css;
   при слиянии уезжает в lumen.css §17. Ни одного литерала цвета, кроме
   определения токена --lm-ink-on-fill (это токен, а не цвет на форме).
   =========================================================== */

/* v6 аудит: пункт 10 — текст на цветной заливке (сегмент, клетка, воронка) берёт токен, а не #fff */
:root{--lm-ink-on-fill:var(--surface)}   /* светлая: поверхность = белый; ни одного литерала (линт G4) */
:root[data-theme="dark"]{--lm-ink-on-fill:var(--ink)}

/* v6 аудит: пункт 3 — подпись внутри марки не перехватывает наведение (stacked100, treemap, gantt, водопад) */
.lm-chart text,.lm-f51 text{pointer-events:none}

/* v6 аудит: пункт 1 — радиальные дуги и ленты санки больше не носят класс chart-arc:
   lumen.css §17 красит stroke всех .chart-arc цветом поверхности (2px зазор кольца), и
   дуги радиала становились невидимыми. Новые классы: chart-ring (штрих = цвет серии), chart-flow (заливка). */
.lm-chart .chart-ring{transition:filter var(--motion-fast)}
.lm-chart .chart-ring.lm-on,.lm-chart .chart-flow.lm-on{filter:brightness(.88)}
.lm-chart .chart-flow{stroke:none}

/* v6 аудит: пункт 2 — маркер по наведению и на аномалии ≥ 8px с кольцом поверхности 2px */
.lm-chart .chart-dot.lm-on,.lm-chart .chart-dot.chart-anom{r:4.5;stroke-width:2}
.lm-chart .chart-pt{stroke:var(--surface);stroke-width:2}

/* v6 аудит: пункт 1 — клетка теплокарты движка разделяется зазором 3px, а не обводкой */
.lm-chart .chart-hm-cell[stroke-width="0.5"]{stroke:none}

/* v6 аудит: пункт 10 — литералы движка Tablo (bullet #F1F1F1, funnel-lbl #fff) перекрыты токенами */
.lm-chart .chart-bullet-range{fill:var(--surface-3)}
.lm-chart .chart-progress-track{fill:var(--surface-4)}
.lm-chart .chart-funnel-lbl{fill:var(--lm-ink-on-fill)}
.lm-chart .chart-trend-delta.up{color:var(--ok)}   /* --earn = категориальный зелёный, статус носит --ok (пункт 8) */

/* v6 аудит: пункт 7 — текст на клетке когорты/теплотаблицы: селектор [style*="--v:8"] ловил и 8 %, и 80 %,
   и белый текст ложился на почти белую клетку. Класс .hi ставится в JS при насыщенности ≥ 75 %. */
.lm-cohort td[style*="--v"],.lm-heat td[style*="--v"]{color:var(--ink)}
.lm-cohort td.hi,.lm-heat td.hi{color:var(--lm-ink-on-fill)}

/* v6 аудит: пункт 11 — прореженные подписи (LM.chart.fitLabels, календарь) */
.lm-chart .lm-thin,.lm-cal-months span.lm-thin{display:none}

/* v6 аудит: пункт 2 — формы 5.1: линия 2px, точка «сегодня» ≥ 8px с кольцом, точки на каждой точке ряда скрыты (D6),
   подпись «вы» на распределении носит токен текста, не цвет серии (пункт 7) */
.lm-f51 .line{stroke-width:2}
.lm-f51 .pt{r:4;stroke-width:2}
.lm-f51 .pt.chart-pt{opacity:0}
.lm-f51 .youl{fill:var(--ink)}

/* v6 аудит: пункт 11 — плотная полоса KPI не шире карточки, внутри прокрутка */
.lm-strip{max-width:100%;min-width:0}

/* v6 аудит: пункт 4 — легенда направления у slope и зон у гистограммы (ставится JS) наследует inline-форму */
.lm-chart>.lm-legend.inline{margin-top:8px}
/* КРАФТ п.12 (Kowalski/Apple): при reduced motion оверлеи не в ноль, а тихо за 120 мс; сцены и хореография — по §30 в .01ms */
@media (prefers-reduced-motion:reduce){.lm .lm-modal-wrap,.lm .lm-drawer,.lm .lm-menu,.lm .lm-pop,.lm .lm-tip,.lm .lm-toast{transition-property:opacity!important;transition-duration:120ms!important;animation:none!important;transform:none!important}}
/* КРАФТ п.15: шторка уважает safe-area */
.lm .lm-drawer{padding-bottom:env(safe-area-inset-bottom)}

/* ═══ §35 КОНВЕЙЕР АГЕНТА · v6 (LM.vis.pipeline, .lm-pipe) ═══════════════════
   Донор — форма «RAG Pipeline» (видео 06.09.2026): степпер, стадия зажигается цветом,
   результат живёт внутри стадии, таймер в шапке, статус в подвале. Цвета только токенами. */
.lm-pipe{container-type:inline-size;display:flex;flex-direction:column;gap:12px;padding:14px 16px 12px;border-radius:var(--r-xl);background:var(--surface-2);border:1px solid var(--border-2);--c:var(--lm-emph)}
.lm-pipe .hd{display:flex;align-items:center;gap:10px} .lm-pipe .hd b{font-size:14px;letter-spacing:-.01em;color:var(--ink)} .lm-pipe .hd .chip{margin-left:auto;font-family:var(--font-mono);font-variant-numeric:tabular-nums;min-width:64px;text-align:center}
.lm-pipe .body{position:relative;background:var(--surface);border:1px solid var(--border-2);border-radius:var(--r-lg);padding:14px 16px 12px;display:flex;flex-direction:column;gap:18px;box-shadow:var(--lm-shadow-border)}
.lm-pipe .rail{position:absolute;left:29px;top:24px;bottom:24px;width:2px;background:var(--border-2);border-radius:1px} .lm-pipe .rail .pos{position:absolute;left:-4px;top:0;width:10px;height:10px;border-radius:50%;background:var(--c);box-shadow:0 0 0 4px color-mix(in srgb,var(--c) 22%,transparent);opacity:0;transition:top 320ms var(--lm-ease-smooth,ease),opacity 200ms ease-out,background-color 200ms}
.lm-pipe .st{position:relative;display:grid;grid-template-columns:28px minmax(0,1fr);gap:0 14px;align-items:start}
.lm-pipe .st .tile{width:28px;height:28px;border-radius:8px;background:var(--surface);border:1px solid var(--border);display:grid;place-items:center;color:var(--ink-3);z-index:1;transition:background-color 200ms ease-out,color 200ms ease-out,border-color 200ms,transform 250ms var(--lm-ease-smooth,ease)} .lm-pipe .st .tile .lm-ic{width:15px;height:15px}
.lm-pipe .st.on .tile{background:var(--c);border-color:var(--c);color:var(--surface);transform:scale(1.06)} .lm-pipe .st.done .tile{color:var(--ink-2)}
.lm-pipe .st .t{display:flex;align-items:baseline;gap:10px;min-height:28px;line-height:1.35;padding-top:5px} .lm-pipe .st .t b{min-width:0;flex:1 1 auto} .lm-pipe .st .t .ms{white-space:nowrap;flex:none} .lm-pipe .st .t b{font-size:13.5px;color:var(--ink);font-weight:600} .lm-pipe .st .t .ms{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--ink-4);font-variant-numeric:tabular-nums}
.lm-pipe .st .sub{display:grid;font-size:12.5px;color:var(--ink-3);min-height:18px;line-height:18px} .lm-pipe .st .sub .idle,.lm-pipe .st .sub .res{grid-area:1/1;display:block;min-width:0;transition:opacity 200ms ease-in-out,transform 200ms ease-in-out,filter 200ms ease-in-out} .lm-pipe .st .sub .res{font-family:var(--font-mono);font-size:11.5px;color:var(--ink-2);opacity:0;transform:translateY(4px);filter:blur(2px);overflow-wrap:anywhere} .lm-pipe .st .sub.res-on .idle{opacity:0;transform:translateY(-4px);filter:blur(2px)} .lm-pipe .st .sub.res-on .res{opacity:1;transform:none;filter:none}
.lm-pipe .bits{display:grid;grid-template-columns:repeat(auto-fill,minmax(8px,1fr));gap:2px;margin-top:8px} .lm-pipe .bits i{display:block;height:10px;border-radius:2px;background:color-mix(in srgb,var(--ink) calc(var(--l,0) * 100%),var(--surface-3));transition:background-color 250ms ease-out}
.lm-pipe .ranked{display:flex;flex-direction:column;gap:6px;margin-top:8px} .lm-pipe .rr{display:grid;grid-template-columns:18px minmax(0,1fr) 64px 40px;align-items:center;gap:10px;font-size:12px;opacity:.55;transition:opacity 250ms ease-out} .lm-pipe .rr.on{opacity:1}
.lm-pipe .rr .n{width:18px;height:18px;border-radius:50%;border:1px solid var(--border);display:grid;place-items:center;font-size:var(--lm-micro);color:transparent;font-weight:600;transition:background-color 200ms,color 200ms,border-color 200ms} .lm-pipe .rr.on .n{background:var(--c);border-color:var(--c);color:var(--surface)}
.lm-pipe .rr .lbl{font-family:var(--font-mono);font-size:11.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .lm-pipe .rr .bar{height:4px;border-radius:2px;background:var(--surface-3);overflow:hidden} .lm-pipe .rr .bar i{display:block;height:100%;width:0;border-radius:2px;background:var(--c);transition:width 500ms var(--lm-ease-smooth,ease)} .lm-pipe .rr .sc{font-family:var(--font-mono);font-size:11.5px;color:var(--ink-4);text-align:right;font-variant-numeric:tabular-nums} .lm-pipe .rr.on .sc{color:var(--c)}
.lm-pipe .stack{display:flex;gap:2px;height:8px;border-radius:4px;background:var(--surface-3);overflow:hidden;margin-top:8px} .lm-pipe .stack i{display:block;height:100%;width:0;background:var(--c);transition:width 400ms var(--lm-ease-smooth,ease)}
.lm-pipe .ans{position:relative;z-index:1;margin-top:4px;padding:14px 16px 14px;border-radius:12px;background:color-mix(in srgb,var(--surface-2) 70%,var(--surface));border:1px solid var(--border-2);font-size:14px;line-height:1.6;color:var(--ink);text-wrap:pretty;display:flex;flex-direction:column;gap:10px} .lm-pipe .ans[hidden]{display:none}
.lm-pipe .ans .eyebrow{display:flex;align-items:center;gap:8px} .lm-pipe .ans .eyebrow .n{margin-left:auto;font-size:11px;color:var(--ink-4);font-variant-numeric:tabular-nums}
.lm-pipe .ans .lead{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap} .lm-pipe .ans .lead b{font-size:24px;font-weight:600;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--ink)} .lm-pipe .ans .lead b small{font-size:13px;font-weight:500;color:var(--ink-3);margin-left:4px} .lm-pipe .ans .lead span{font-size:12.5px;color:var(--ink-3)} .lm-pipe .ans .lead[hidden]{display:none}
.lm-pipe .ans .txt{margin:0;max-width:var(--lm-measure-wide)}
.lm-pipe .ans .notes{list-style:none;margin:0;padding:10px 0 0;border-top:1px dashed var(--border-2);display:grid;gap:6px} .lm-pipe .ans .notes[hidden]{display:none} .lm-pipe .ans .notes li{display:grid;grid-template-columns:15px minmax(0,1fr);gap:8px;align-items:start;font-size:12.5px;line-height:1.45} .lm-pipe .ans .notes .cite{margin:3px 0 0;vertical-align:0} .lm-pipe .ans .notes .w b{font-weight:500;color:var(--ink-2)} .lm-pipe .ans .notes .w small{display:block;color:var(--ink-4);font-size:11px;margin-top:1px}
.lm-pipe .ans .chat{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-top:10px;border-top:1px dashed var(--border-2)} .lm-pipe .ans .chat[hidden]{display:none} .lm-pipe .ans .chat code{font-family:var(--font-mono);font-size:12.5px;color:var(--ink);background:var(--surface);border:1px solid var(--border-2);border-radius:8px;padding:4px 10px} .lm-pipe .ans .chat .lm-btn{margin-left:auto} .lm-pipe .ans .chat .lm-btn.ok{color:var(--ok)}
@media (max-width:560px){.lm-pipe .ans{padding:12px} .lm-pipe .ans .lead b{font-size:20px}} .lm-pipe .cite{display:inline-grid;place-items:center;width:15px;height:15px;border-radius:50%;background:var(--c);color:var(--surface);font-size:var(--lm-micro);font-weight:600;line-height:1;vertical-align:2px;margin:0 1px 0 4px;font-variant-numeric:tabular-nums;font-family:var(--font)} .lm-pipe .ans .txt{overflow-wrap:normal} .lm-pipe .cur{display:none;width:2px;height:1em;background:var(--ink);vertical-align:-2px;margin-left:2px;animation:lm-pipe-cur 1s steps(2) infinite} .lm-pipe .typing .cur{display:inline-block} @keyframes lm-pipe-cur{50%{opacity:0}}
.lm-pipe .ft{display:flex;align-items:center;gap:8px;min-height:32px} .lm-pipe .status{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:500;color:var(--c,var(--ink-4));--c:var(--ink-4)} .lm-pipe .status>i{width:7px;height:7px;border-radius:50%;background:var(--c)} .lm-pipe .status .dots{display:inline-flex} .lm-pipe .status .dots i{width:10px;height:10px;border-radius:50%;background:var(--c);margin-right:-3px;box-shadow:0 0 0 2px var(--surface-2)} .lm-pipe.done .status{color:var(--ink-2)}
.lm-pipe .ft .lm-btn.primary{background:var(--ink);color:var(--surface);border-color:var(--ink);border-radius:999px}
.lm-pipe .stream{display:block;margin-top:8px;font-size:13px;line-height:1.5;color:var(--ink);min-height:1.5em} .lm-pipe .stxt{display:inline-block}
/* агенты внутри стадии (когорта): точка статуса · id · имя · выход · мс */
.lm-pipe .agents{display:flex;flex-direction:column;gap:4px;margin-top:8px} .lm-pipe .ag{display:grid;grid-template-columns:8px 34px minmax(0,1fr) minmax(0,1.2fr) 52px;gap:8px;align-items:center;font-size:12px;min-height:22px;opacity:.5;transition:opacity 200ms ease-out}
/* в узкой карточке пять колонок сжимали имя агента до 81 px и резали его
   многоточием («Карточка лота» → «Карточка лот…»). Ниже 380 px контейнера
   строка складывается в две: имя с меткой сверху, результат и время снизу. */
@container (max-width:380px){
  .lm-pipe .ag{grid-template-columns:8px 34px minmax(0,1fr) 52px;row-gap:2px}
  .lm-pipe .ag>:nth-child(4){grid-column:3/5;text-align:left}
} .lm-pipe .ag[data-st="run"],.lm-pipe .ag[data-st="ok"],.lm-pipe .ag[data-st="warn"],.lm-pipe .ag[data-st="bad"]{opacity:1}
.lm-pipe .ag .dot{width:7px;height:7px;border-radius:50%;background:var(--border-3)} .lm-pipe .ag[data-st="run"] .dot{background:var(--c);animation:lm-pipe-pulse 1s ease-in-out infinite} .lm-pipe .ag[data-st="ok"] .dot{background:var(--c)} .lm-pipe .ag[data-st="warn"] .dot{background:var(--warm-ink)} .lm-pipe .ag[data-st="bad"] .dot{background:var(--cold)} @keyframes lm-pipe-pulse{50%{transform:scale(1.5);opacity:.6}}
.lm-pipe .ag .id{font-family:var(--font-mono);font-size:var(--lm-micro);color:var(--ink-4)} .lm-pipe .ag .nm{color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .lm-pipe .ag .nm small{color:var(--ink-4);margin-left:6px;font-size:var(--lm-micro)} .lm-pipe .ag .out{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .lm-pipe .ag .ms{font-family:var(--font-mono);font-size:11px;color:var(--ink-4);text-align:right;font-variant-numeric:tabular-nums}
.lm-pipe .st.bad .tile{border-color:color-mix(in srgb,var(--cold) var(--lm-edge-tone),transparent);color:var(--cold)} .lm-pipe .st.bad .t .ms{color:var(--cold)}
@media (max-width:560px){.lm-pipe .ag{grid-template-columns:8px 34px minmax(0,1fr) 52px} .lm-pipe .ag .out{display:none}}
@media (prefers-reduced-motion:reduce){.lm-pipe .ag .dot{animation:none}}
@media (prefers-reduced-motion:reduce){.lm-pipe .cur{animation:none}}

/* ═══ §40 КАРТА · v6 (SP.map) ═══════════════════════════════════════════════
   Подложка внешняя или своя, точки всегда наши. Слито из ядро/_v6/map.css. */
/* Speculator §40 · КАРТА (SP.map) — подложка чужая, точки наши */
.sp-map{display:flex;flex-direction:column;gap:10px}
.sp-map-h{display:flex;align-items:baseline;gap:10px} .sp-map-h .t{display:flex;align-items:baseline;gap:8px;min-width:0} .sp-map-h b{font-size:14px;color:var(--ink);letter-spacing:-.01em}
.sp-map-box{position:relative;border:1px solid var(--border-2);border-radius:var(--r-lg);overflow:hidden;background:var(--surface-2);min-width:0}
.sp-map-box .lm-state{height:100%;justify-content:center}
.sp-map-fb{position:absolute;left:0;right:0;bottom:0}
.sp-map-own{display:block;width:100%;height:100%}
.sp-map-own .ring{fill:none;stroke:var(--border-3);stroke-dasharray:3 4} .sp-map-own .ax{stroke:var(--border-2)} .sp-map-own .rl{font-family:var(--font);font-size:10.5px;fill:var(--ink-4);text-anchor:middle}
.sp-map-lay{position:absolute;inset:0;pointer-events:none}
/* метка: булавка + подпись; наш DOM поверх любой подложки */
.sp-mk{position:absolute;transform:translate(-50%,-100%);display:flex;flex-direction:column;align-items:center;gap:2px;pointer-events:auto;cursor:default;--c:var(--lm-emph)}
.sp-mk .pin{width:12px;height:12px;border-radius:50%;background:var(--c);box-shadow:0 0 0 2px var(--surface),0 1px 3px color-mix(in srgb,var(--ink) 30%,transparent);order:2}
.sp-mk .lb{order:1;display:inline-flex;align-items:baseline;gap:6px;max-width:180px;padding:3px 8px;border-radius:999px;background:var(--surface);box-shadow:var(--lm-shadow-border);font-size:11.5px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sp-mk .lb b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums} .sp-mk .lb b small{font-size:9.5px;color:var(--ink-4);margin-left:2px}
.sp-mk.ours .pin{width:14px;height:14px} .sp-mk.ours .lb{background:var(--ink);color:var(--surface)} .sp-mk.ours .lb b{color:var(--surface)}
.sp-mk.over .lb::after{content:'';width:0;height:0;border-top:5px solid color-mix(in srgb,var(--ink) 55%,transparent);border-left:5px solid transparent;margin-left:2px}
.sp-mk:focus-visible{outline:2px solid var(--lm-emph);outline-offset:2px;border-radius:999px}
@media (hover:hover){.sp-mk:hover .lb{box-shadow:var(--lm-shadow-border-hover)} .sp-mk:hover .pin{transform:scale(1.15)}}
.sp-mk .pin{transition:transform 150ms var(--lm-ease-smooth,ease-out)}
.sp-map-twin summary{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-3);cursor:default;list-style:none} .sp-map-twin summary::-webkit-details-marker{display:none}
.sp-map-f{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:var(--lm-micro);color:var(--ink-4)} .sp-map-f .src{font-family:var(--font-mono)} .sp-map-f .prov a{color:var(--ink-3);text-decoration:none} .sp-map-f .prov a:hover{color:var(--ink)}
@media (prefers-reduced-motion:reduce){.sp-mk .pin{transition:none}}

/* слой обслуживания Lumen: старые экраны остаются на Geist */
html[data-face="lumen"] .lm{font-family:var(--font);font-size-adjust:.530} /* §41: рост строчной Geist */
