/* Лендинг v7 (/welcome и «/» на apex): все объекты УК на одном экране — тексты и порядок
   блоков по plans/landing/06-improvement-plan.md §2.1–§2.3, дизайн — §2.4 (Л3): общие токены
   сайта и продукта (tokens.css), бирюзовый акцент crm-slate, спокойная плотность. Все классы
   с префиксом lp-, токены — на .lp-body. Шрифты — fonts.css (Onest, JetBrains Mono, свои файлы). */

/* ---------- Токены ----------
   Один источник — tokens.css (CRM v2 и тема crm-slate, план лендинга v7 §2.4): --lp-* — только алиасы, своих
   цветов у сайта нет. <body class="lp-body crm-slate">: акцент — бирюза CRM (#16798C) через --accent темы, один
   на основной кнопке, выбранной вкладке, ссылках и графиках; фон — холодный --bg-page темы. Мелкий серый — не
   светлее #5B6472 (--text-muted). Статусы — те же --success / --warning / --danger, что у ui_status в CRM.
   Контраст пар цветов — тест test/integration/design_tokens_contrast_test.rb (от 4,5 : 1, WCAG). */
.lp-body {
  --lp-bg: var(--bg-page);
  --lp-surface: var(--surface);
  --lp-surface-soft: var(--surface-subtle);
  --lp-stage: var(--border-soft);
  --lp-text: var(--text);
  --lp-muted: var(--text-secondary);
  --lp-quiet: var(--text-muted);
  --lp-faint: var(--text-faint);
  --lp-on-dark: var(--chrome-text);
  --lp-on-dark-muted: var(--chrome-text-soft);
  --lp-accent: var(--accent);
  --lp-accent-hover: var(--accent-hover);
  --lp-accent-bg: var(--accent-bg);
  --lp-accent-border: var(--accent-border);
  --lp-line: var(--border-panel);
  --lp-line-soft: var(--border-soft);
  --lp-control: var(--border-control);
  --lp-control-hover: var(--text-faint);
  --lp-ok-bg: var(--success-bg); --lp-ok: var(--success);
  --lp-warn-bg: var(--warning-bg); --lp-warn: var(--warning); --lp-warn-line: var(--warning-edge);
  --lp-danger-bg: var(--danger-bg); --lp-danger: var(--danger); --lp-field-error: var(--field-error-border);
  --lp-info-bg: var(--info-bg); --lp-info: var(--info);
  /* окна продукта — шапка темы CRM crm-slate; подпись на шапке — 6,1 : 1 */
  --lp-chrome: var(--chrome-bg);
  --lp-chrome-on: var(--chrome-bg-active);
  --lp-chrome-text: var(--chrome-text-soft);
  /* первый экран: холодное бирюзово-серое свечение и сетка тона акцента */
  --lp-glow: var(--accent-bg);
  --lp-grid-cool: color-mix(in srgb, var(--accent) 16%, transparent);
  /* тени и движение */
  --lp-shadow-card: 0 0 0 1px rgba(22, 27, 38, 0.07);
  --lp-shadow-raise: 0 0 0 1px rgba(22, 27, 38, 0.06), 0 12px 28px -14px rgba(16, 24, 40, 0.18);
  --lp-shadow-float: 0 0 0 1px rgba(22, 27, 38, 0.06), 0 24px 48px -16px rgba(16, 24, 40, 0.18);
  --lp-ease-out: cubic-bezier(0.2, 0.8, 0.2, 1);
  --lp-dur-press: 120ms;
  --lp-dur-hover: 150ms;
  --lp-dur-ui: 220ms;
  --lp-dur-enter: 280ms;
  /* шрифты и шкала (ТЗ C): H1 до 56 px, межстрочный 1,1; H2 38–40; H3 22; текст от 16. H1 первого экрана — 40 px на
     1440 (первый экран В4 на основе В1: тише заголовок, главнее окно), на телефоне — 28 px */
  --lp-sans: var(--font-sans);
  --lp-mono: var(--font-mono);
  --lp-fs-h1: clamp(30px, 2.8vw, 40px);
  --lp-fs-h2: clamp(28px, 2.8vw, 40px);
  --lp-fs-h3: 22px; /* заголовки карточек и подразделов — одним размером (доводка 2 Л3: было 17–28 px) */
  --lp-fs-lead: 17px;
  --lp-fs-body: 16px;
  --lp-fs-small: 14px;
  --lp-fs-micro: 13px;
  /* отступы и радиусы (ТЗ C): отступ блока clamp(72px, 9.5vw, 128px) */
  --lp-gutter: clamp(16px, 3vw, 32px);
  --lp-sec: clamp(72px, 9.5vw, 128px);
  --lp-head-h: 64px;
  --lp-r-xs: 6px;
  --lp-r-sm: 10px;
  --lp-r-md: 14px;
  --lp-r-lg: 20px;

  margin: 0;
  background: var(--lp-bg);
  color: var(--lp-text);
  font: 400 var(--lp-fs-body)/1.5 var(--lp-sans);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: clip;
  interpolate-size: allow-keywords;
}
.lp-body *, .lp-body *::before, .lp-body *::after { box-sizing: border-box; }
.lp-body :where(h1, h2, h3, h4, h5, p, ul, ol, dl, dd, figure) { margin: 0; }
.lp-body :where(ul, ol) { padding: 0; list-style: none; }
.lp-body img { display: block; max-width: 100%; height: auto; }
.lp-body :where(a) { color: var(--lp-accent); text-underline-offset: 3px; text-decoration-thickness: 1px; }
.lp-body :focus-visible { outline: 2px solid var(--lp-accent); outline-offset: 2px; border-radius: 4px; }
.lp-body [hidden] { display: none !important; }

/* ---------- Каркас ---------- */
.lp-wrap { width: 100%; max-width: calc(1200px + 2 * var(--lp-gutter)); margin: 0 auto; padding-left: max(var(--lp-gutter), env(safe-area-inset-left, 0px)); padding-right: max(var(--lp-gutter), env(safe-area-inset-right, 0px)); }
.lp-sec { position: relative; padding-block: var(--lp-sec) 0; }
.lp-sec__head { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 16px 56px; align-items: end; padding-bottom: 16px; }
.lp-sec__head--solo { grid-template-columns: minmax(0, 1fr); }
/* Короткий заголовок и длинный подзаголовок («Узнаёте себя?») — подзаголовку шире колонка */
@media (min-width: 1081px) {
  #mirror .lp-sec__head { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); }
  #parts .lp-sec__head { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}
/* Правило заголовков блоков (доводка 1 Л3): заголовок из двух фраз — двухцветный (вторая фраза — <span> тише),
   из одной фразы — одним цветом */
.lp-h2 { font-weight: 600; font-size: var(--lp-fs-h2); line-height: 1.1; letter-spacing: -0.025em; text-wrap: balance; max-width: 36ch; }
.lp-h2 span { color: var(--lp-quiet); }
.lp-lead { font-size: var(--lp-fs-lead); line-height: 1.5; color: var(--lp-muted); max-width: 58ch; text-wrap: pretty; }
.lp-nobr { white-space: nowrap; }
.lp-sum { font-family: var(--lp-mono); font-variant-numeric: tabular-nums; white-space: nowrap; letter-spacing: -0.01em; }

/* ---------- Кнопки, метки, списки ----------
   Основная кнопка (.lp-btn--ink) — акцент, вторая — контур (ТЗ C); 48 px, на телефоне от 44 */
.lp-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 48px; padding: 0 22px; border: 0; border-radius: var(--lp-r-sm);
  font: 600 16px/1 var(--lp-sans); text-decoration: none; white-space: nowrap; cursor: pointer;
  transition: background-color var(--lp-dur-hover) ease, box-shadow var(--lp-dur-hover) ease, color var(--lp-dur-hover) ease, transform var(--lp-dur-press) var(--lp-ease-out); }
.lp-btn:active { transform: scale(0.97); }
.lp-body .lp-btn--ink { background: var(--lp-accent); color: var(--lp-on-dark); }
.lp-body .lp-btn--line { background: var(--lp-surface); color: var(--lp-text); box-shadow: inset 0 0 0 1px var(--lp-control); }
.lp-btn--sm { height: 44px; padding: 0 16px; font-size: 15px; border-radius: 9px; }
.lp-btn--xs { height: 30px; padding: 0 12px; font-size: 13px; border-radius: 7px; }
@media (hover: hover) and (pointer: fine) {
  .lp-body .lp-btn--ink:hover { background: var(--lp-accent-hover); }
  .lp-body .lp-btn--line:hover { box-shadow: inset 0 0 0 1px var(--lp-control-hover); }
}
.lp-short { display: none; }

.lp-tag { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: 99px; font-size: 12px; font-weight: 500; line-height: 1; white-space: nowrap; }
.lp-tag--ok { background: var(--lp-ok-bg); color: var(--lp-ok); }
.lp-tag--wait { background: var(--lp-warn-bg); color: var(--lp-warn); }
.lp-tag--info { background: var(--lp-info-bg); color: var(--lp-info); }
.lp-tag--danger { background: var(--lp-danger-bg); color: var(--lp-danger); }
.lp-tag--plan { background: var(--lp-surface); color: var(--lp-muted); box-shadow: inset 0 0 0 1px var(--lp-line); }

.lp-chip { display: inline-flex; align-items: center; min-height: 34px; padding: 6px 12px; border-radius: var(--lp-r-sm); background: var(--lp-surface-soft); box-shadow: inset 0 0 0 1px var(--lp-line); font-size: var(--lp-fs-small); font-weight: 500; line-height: 1.3; }
.lp-chips { display: flex; flex-wrap: wrap; gap: 8px; }

.lp-checks { display: grid; gap: 9px; font-size: 16px; }
.lp-checks li { position: relative; padding-left: 26px; }
.lp-checks li::before { content: ""; position: absolute; left: 0; top: 4px; width: 16px; height: 16px; border-radius: 5px; background: var(--lp-accent-bg); }
.lp-checks li::after { content: ""; position: absolute; left: 5px; top: 8px; width: 6px; height: 3px; border-left: 2px solid var(--lp-accent); border-bottom: 2px solid var(--lp-accent); transform: rotate(-45deg); }

.lp-ticks { display: flex; flex-wrap: wrap; gap: 6px 20px; font-size: var(--lp-fs-small); color: var(--lp-muted); }
.lp-ticks li { display: inline-flex; align-items: center; gap: 7px; }
.lp-ticks svg { flex: none; color: var(--lp-accent); }

.lp-link { color: var(--lp-accent); font-size: var(--lp-fs-micro); text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; }

/* ---------- Шапка: липкая (ТЗ C), 64 px; на телефоне 60 px с safe-area, якоря — от 1080 px ---------- */
.lp-header { position: sticky; top: 0; z-index: 30; padding-top: env(safe-area-inset-top, 0px); background: rgba(255, 255, 255, 0.94); box-shadow: 0 1px 0 var(--lp-line); }
@supports ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .lp-header { background: rgba(255, 255, 255, 0.82); -webkit-backdrop-filter: saturate(1.4) blur(14px); backdrop-filter: saturate(1.4) blur(14px); }
}
/* Переход по якорю не прячет заголовок блока под шапкой; ссылку расшифровки, на которую вернулся фокус (Esc, «Закрыть»,
   landing_drill_controller), — тоже: у бара под кольцом нет id (доводка 4 Л3в). Ссылки самой шапки — без поля: шапка
   липкая и всегда в окне, а с полем 72–80 px фокус по Tab прокручивал страницу вверх на ~60 px (финальная сборка) */
.lp-body [id], .lp-body a[href^="#"]:not(.lp-header *) { scroll-margin-top: calc(var(--lp-head-h) + 16px); }
.lp-head { display: flex; align-items: center; gap: 36px; height: var(--lp-head-h); }
.lp-brand { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; font-weight: 600; font-size: 19px; letter-spacing: -0.015em; color: var(--lp-text); }
.lp-nav { display: flex; gap: 24px; font-size: 15px; }
.lp-body .lp-nav a, .lp-body a.lp-login { color: var(--lp-muted); text-decoration: none; transition: color var(--lp-dur-hover) ease; }
.lp-body a.lp-login { color: var(--lp-text); }
.lp-head__end { margin-left: auto; display: flex; align-items: center; gap: 22px; font-size: 15px; }
@media (hover: hover) and (pointer: fine) { .lp-body .lp-nav a:hover { color: var(--lp-text); } }

/* ---------- 1 · Первый экран: надзаголовок, заголовок двумя строками, подзаголовок слева, кнопки и строка
   доверия справа; под ними — воздух 64 px (телефон — 40 px) и окно дашборда на подложке второго фона (первый экран
   В4 на основе В1, слово основателя 09.11.2026, кандидат Р-703; Л3: при 1440×900 верх окна — до 420 px) ---------- */
.lp-hero { position: relative; overflow: clip; background: var(--lp-surface); padding-bottom: 24px; }
/* Нижняя полоса фона — от обёртки окна дашборда: граница белого и серого стоит на --lp-hero-band от верха окна
   и тянется до низа блока (−24 px — нижний отступ .lp-hero). Не доля высоты блока: блок содержит окно, и при
   раскрытии расшифровки или смене вкладки граница ездила бы (Л3б, снимки основателя 08.11.2026). Число — середина
   закрытого окна В4 (вкладка «Объекты»): 700 px на широком экране, 860 px на телефоне. Обёртка — подложка окна:
   второй фон, поле 10 px, скругление 20 px (на телефоне подложки нет) */
.lp-hero__stage { --lp-hero-band: 700px; position: relative; margin-top: 64px; padding: 10px; border-radius: var(--lp-r-lg);
  background: var(--lp-bg); box-shadow: inset 0 0 0 1px var(--lp-line-soft); }
.lp-hero__stage::before { content: ""; position: absolute; z-index: -1; top: var(--lp-hero-band); bottom: -24px; left: -100vw; right: -100vw; background: var(--lp-bg); }
.lp-hero__art { position: absolute; top: 0; right: 0; width: 62%; height: 520px; pointer-events: none;
  background: radial-gradient(60% 70% at 100% 0%, var(--lp-glow) 0%, color-mix(in srgb, var(--lp-glow) 55%, transparent) 38%, transparent 74%); }
.lp-hero__art::after { content: ""; position: absolute; inset: 0;
  background:
    linear-gradient(to right, var(--lp-grid-cool) 1px, transparent 1px) 0 0 / 16px 16px,
    linear-gradient(to bottom, var(--lp-grid-cool) 1px, transparent 1px) 0 0 / 16px 16px;
  -webkit-mask-image: radial-gradient(56% 64% at 100% 0%, #000 0%, rgba(0, 0, 0, 0.4) 44%, transparent 78%);
          mask-image: radial-gradient(56% 64% at 100% 0%, #000 0%, rgba(0, 0, 0, 0.4) 44%, transparent 78%); }
.lp-hero > .lp-wrap { position: relative; z-index: 1; }

.lp-hero__top { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "kicker kicker" "title title" "lead cta";
  gap: 0 48px; align-items: end; padding-top: 36px; }
.lp-kicker { grid-area: kicker; font-size: 15px; color: var(--lp-muted); margin-bottom: 10px; }
.lp-h1 { grid-area: title; font-weight: 600; font-size: var(--lp-fs-h1); line-height: 1.1; letter-spacing: -0.03em; }
.lp-h1 span { display: block; color: var(--lp-quiet); }
.lp-hero .lp-lead { grid-area: lead; max-width: 60ch; margin-top: 18px; }
.lp-hero__cta { grid-area: cta; display: grid; gap: 10px; justify-items: start; margin-top: 18px; }
.lp-actions { display: flex; flex-wrap: wrap; gap: 12px; }
.lp-hero .lp-ticks { gap: 4px 16px; font-size: 13px; }
.lp-hero .lp-ticks li { gap: 6px; }

/* ---------- Дашборд первого экрана (план §2.2, §3) ----------
   Окно: шапка «УК · месяц · на дату» с меткой «демо-данные» (тёмная, как CRM crm-slate, подпись — 6,1 : 1),
   сегментные вкладки ролей (role=tab — ссылки ?view=…), у руководителя — «Объекты / Прибыль УК», виджеты в сетке
   2–3 колонки: число — заголовок, статус словом и иконкой, график компонентом ChartsHelper. Невыбранные панели —
   ленивые кадры Turbo (.lp-lazy). Подписи графиков на сайте — 13 px: токен --font-size-hint переопределён внутри
   окна. Расшифровки (.lp-dd) скрыты: без JS открывает :target, с JS — класс is-open */
.lp-dash { --font-size-hint: 13px; --line-height-hint: 18px;
  position: relative; background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-raise); overflow: clip; }
/* Шапка окна — 36 px, тёмная, как в CRM (В4: «УК · месяц · на дату» и метка «демо-данные») */
.lp-dash__bar { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; min-height: 36px; padding: 7px 20px; background: var(--lp-chrome); color: var(--lp-on-dark); }
.lp-dash__title { font-size: 14px; font-weight: 600; line-height: 22px; letter-spacing: -0.01em; }
.lp-dash__title span { font-weight: 400; color: var(--lp-chrome-text); }
.lp-dash__bar .lp-tag { margin-left: auto; }
/* Под цепочкой — вкладки ролей и строка решения 4 на 12 px ниже (В4; строка «Одна цепочка чисел…» снята — её
   говорит сама цепочка в шапке окна) */
.lp-dash__roles { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; padding: 12px 20px 0; }
.lp-dash__more { font-size: 12px; line-height: 17px; color: var(--lp-quiet); }
.lp-dash__panel { padding: 12px 20px 20px; }
.lp-dash__panel > .lp-seg, .lp-dash__panel > .lp-lazy > .lp-seg { margin-bottom: 12px; }
.lp-dash__view, .lp-dash__view > .lp-lazy { display: grid; gap: 12px; }
/* Ленивая панель: пока кадр грузится — скелет из трёх серых карточек высотой с панель (без прыжка страницы);
   кадр — блок (наблюдение за появлением). Кадры вкладок ролей догружаются на простое (landing_segments) */
.lp-lazy { display: block; }
.lp-lazy__wait { padding: 24px 0; font-size: var(--lp-fs-small); color: var(--lp-quiet); }
.lp-dash .lp-lazy__wait { min-height: 1000px; padding: 0; color: transparent; border-radius: 12px;
  background:
    linear-gradient(var(--lp-bg) 0 0) 0 0 / 100% 200px no-repeat,
    linear-gradient(var(--lp-bg) 0 0) 0 212px / calc((100% - 24px) / 3) 380px no-repeat,
    linear-gradient(var(--lp-bg) 0 0) 50% 212px / calc((100% - 24px) / 3) 380px no-repeat,
    linear-gradient(var(--lp-bg) 0 0) 100% 212px / calc((100% - 24px) / 3) 380px no-repeat; }

/* Сегментные вкладки (ТЗ C): только на лендинге, выбранная — белая с краем акцента; на телефоне — во всю ширину */
.lp-seg { display: inline-flex; flex-wrap: wrap; justify-self: start; gap: 4px; padding: 4px; border-radius: 12px; background: var(--lp-stage); max-width: 100%; }
.lp-seg__tab { display: inline-flex; align-items: center; justify-content: center; min-height: 40px; padding: 6px 18px; border-radius: 9px;
  font-size: 15px; font-weight: 600; line-height: 1.2; text-align: center; text-decoration: none; color: var(--lp-muted);
  transition: background-color var(--lp-dur-hover) ease, color var(--lp-dur-hover) ease, box-shadow var(--lp-dur-hover) ease; }
.lp-body .lp-seg__tab { color: var(--lp-muted); }
.lp-body .lp-seg__tab[aria-selected="true"] { background: var(--lp-surface); color: var(--lp-accent); box-shadow: 0 1px 2px rgba(22, 27, 38, 0.1), 0 0 0 1px var(--lp-accent-border); }
.lp-seg--roles .lp-seg__tab { min-height: 44px; padding: 8px 20px; }
.lp-seg--small .lp-seg__tab { min-height: 36px; padding: 4px 14px; font-size: 14px; }
@media (hover: hover) and (pointer: fine) { .lp-body .lp-seg__tab:hover { color: var(--lp-text); } }
/* Второй уровень — вид внутри роли («Объекты / Прибыль УК») и метод моста: на ступень тише ролей — без подложки,
   36 px, 14 px, выбранный — текст акцентом и черта под ним (доводка 1 Л3: было — та же таблетка, что у ролей) */
.lp-seg--quiet { gap: 0 20px; padding: 0; border-radius: 0; background: none; box-shadow: inset 0 -1px 0 var(--lp-line); }
.lp-seg--quiet .lp-seg__tab, .lp-seg--small.lp-seg--quiet .lp-seg__tab { min-height: 36px; padding: 6px 2px; border-radius: 0; font-size: 14px; }
.lp-body .lp-seg--quiet .lp-seg__tab[aria-selected="true"] { background: none; color: var(--lp-accent); box-shadow: inset 0 -2px 0 var(--lp-accent); }

/* Виджеты: сетка в три колонки (две — до 1080 px, одна — до 760 px); цепочка — во всю ширину, широкие — в две */
/* Якорь «Показать все» — вне потока: не даёт лишнего зазора сетки над виджетами (доводка 2 Л3) */
.lp-dash__anchor { position: absolute; display: block; height: 0; }
.lp-dash__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; align-items: start; }
.lp-w { min-width: 0; display: grid; gap: 10px; align-content: start; padding: 14px 16px 16px; border-radius: 12px; background: var(--lp-surface); box-shadow: inset 0 0 0 1px var(--lp-line); }
.lp-w--full { grid-column: 1 / -1; }
.lp-w--wide { grid-column: span 2; }
.lp-w__head { display: grid; gap: 4px; }
.lp-w__title { font-size: 14px; font-weight: 600; line-height: 1.35; letter-spacing: -0.005em; }
.lp-w__title:focus { outline: none; }
.lp-w__figure { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 10px; }
.lp-w__num { font-family: var(--lp-mono); font-size: 22px; font-weight: 500; line-height: 1.25; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; color: var(--lp-text); }
.lp-body a.lp-w__num { color: var(--lp-text); text-decoration: underline dotted var(--lp-faint); text-underline-offset: 6px; text-decoration-thickness: 1.5px; border-radius: 6px; }
@media (hover: hover) and (pointer: fine) { .lp-body a.lp-w__num:hover { text-decoration-color: var(--lp-accent); } }
/* Слова в строке числа («к бюджету октября»): что число — отклонение, а не сумма месяца (доводка 2 Л3) */
.lp-w__unit { margin-left: -4px; font-size: 15px; font-weight: 500; color: var(--lp-muted); }
.lp-w__meta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 12px; min-width: 0; }
.lp-w__caption { min-width: 0; font-size: var(--lp-fs-micro); color: var(--lp-quiet); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lp-w__how[open] { flex-basis: 100%; }
/* «Как считается»: длинное определение числа — в раскрытии, панель короче */
.lp-w__how { font-size: var(--lp-fs-micro); color: var(--lp-quiet); }
.lp-w__how summary { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; list-style: none; color: var(--lp-quiet); text-decoration: underline dotted var(--lp-faint); text-underline-offset: 3px; }
.lp-w__how summary::-webkit-details-marker { display: none; }
.lp-w__how p { padding-top: 4px; }
.lp-w__body { display: grid; gap: 10px; min-width: 0; }
/* Кольцо прогресса — заголовком виджета (Л3в, кандидат Р-699; компонент и стили — общие с CRM: ChartRingHelper,
   chart_ring.css). Здесь только место в карточке окна: summary — вровень с краем карточки (поле summary — для
   подсветки при наведении), бары в теле — без лишнего отступа слева */
.lp-w .chart-ring-details { margin: -4px -12px 0; }
.lp-w .chart-ring-details__body { padding-top: 2px; }
/* Заявки опердиректора — карточка на две колонки: кольцо слева, строка чисел и линия 12 месяцев справа (линия всегда
   видна, как у инженера в CRM); на телефоне — стопкой. Кольцо с линией в одной колонке растило ряд на 120 px — панель
   выходила за 1 400 px (Л3в) */
.lp-w__side { display: grid; gap: 10px; align-content: start; min-width: 0; }
@media (min-width: 761px) {
  #w-operations-requests .lp-w__body { grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); column-gap: 24px; align-items: start; }
}
.lp-w__line, .lp-w__note { font-size: var(--lp-fs-micro); line-height: 1.45; color: var(--lp-muted); }
.lp-w__line .status { vertical-align: -2px; }
.lp-w__sub { margin-top: 2px; font-size: var(--lp-fs-micro); font-weight: 600; color: var(--lp-text); }
.lp-w__list { display: grid; font-size: var(--lp-fs-micro); }
/* Шаги закрытия месяца в раскрытии кольца бухгалтера (Л3в): шаг — ссылка к документу или к неразнесённым платежам */
.lp-close { display: grid; list-style: none; padding: 0; font-size: var(--lp-fs-micro); }
/* Разделитель строк — у li, а не у ссылки со скруглением: у линии не загнуты концы; радиус — только у фона при
   наведении. На телефоне ярлык «готово · дата» — всегда под названием шага: два шага из пяти переносили его, три —
   нет, и ярлыки стояли то слева, то справа (доводка 2 Л3в) */
.lp-close li + li { border-top: 1px solid var(--lp-line-soft); }
.lp-close__step { display: flex; align-items: center; justify-content: space-between; gap: 4px 12px; flex-wrap: wrap; padding: 6px 4px; margin: 0 -4px;
  border-radius: 6px; color: var(--lp-text); text-decoration: none; }
@media (max-width: 480px) { .lp-close__step { flex-direction: column; align-items: flex-start; } }
@media (hover: hover) and (pointer: fine) { .lp-close__step:hover { background: var(--lp-surface-soft); } }
.lp-w__list li { display: flex; justify-content: space-between; gap: 12px; padding: 5px 0; border-top: 1px solid var(--lp-line-soft); color: var(--lp-muted); }
.lp-w__basis { display: grid; gap: 10px; }
.lp-num { font-family: var(--lp-mono); font-variant-numeric: tabular-nums; white-space: nowrap; letter-spacing: -0.01em; color: var(--lp-text); }
.lp-dash .chart-bars__value, .lp-dash .chart-bullet__value, .lp-dash .chart-bridge__value { font-size: 13px; }
/* Строка графика окна: подпись | слово статуса | число — число справа в своей колонке (tabular-nums), слово перед
   ним, оба на базовой линии подписи: числа соседних строк стоят столбиком (доводка 1 Л3) */
.lp-dash :is(.chart-bullet__head, .chart-bars__head, .chart-bridge__head) { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: baseline; column-gap: 8px; }
.lp-dash :is(.chart-bullet__label, .chart-bars__label, .chart-bridge__label) { grid-column: 1; }
.lp-dash :is(.chart-bullet__status, .chart-bars__status, .chart-bridge__status) { grid-column: 2; grid-row: 1; }
.lp-dash :is(.chart-bullet__value, .chart-bars__value, .chart-bridge__value) { grid-column: 3; grid-row: 1; text-align: right; }
/* Слова отклонения бюджета (Metrics::Status::BUDGET_WORDS: «внимание: недобор», «внимание: перерасход», «хуже
   бюджета») длинные: колонка подписи сжималась — на телефоне до 24–68 px, «ТЦ «Меридиан»» рвался и заходил под
   статус (хвост слияния Л3в, доводка 2 Л3в). Статус — второй строкой под подписью, подпись — во всю ширину до суммы:
   у «Поступлений к бюджету» — на любой ширине (на 1440 «Октябрь 2026» рвался на две строки), у остальных виджетов
   со словами бюджета — на телефоне (список сверяет тест: каждый виджет окна с таким словом — здесь) */
#w-operations-money_today .chart-bullet__status { grid-column: 1 / -1; grid-row: 2; justify-self: start; }
@media (max-width: 480px) {
  :is(#w-objects-profit_plan_fact, #w-company_profit-operating_profit, #w-operations-expenses_plan_fact) :is(.chart-bars__status, .chart-bridge__status) { grid-column: 1 / -1; grid-row: 2; justify-self: start; }
}
/* Суммы в подписях графиков — моно, цвет и кегль подписи */
.lp-dash :is(.chart-bullet__note, .chart-bars__note, .chart-bridge__note, .chart-chain__note, .chart-chain__after) .lp-num { color: inherit; font-size: inherit; letter-spacing: -0.03em; }
/* Короткая подпись строки («2 договора», «через 3 дня») — справа от бара, а не строкой под ним: строка вдвое ниже.
   Колонка подписей — одна на весь список (subgrid): дорожки баров одного графика — одной ширины, большее значение
   не рисуется короче меньшего, у самого длинного бара до подписи 12 px (доводка 2 Л3: колонка auto считалась
   в каждой строке своя — масштаб баров плыл) */
.lp-dash .lp-inline-notes :is(.chart-bars, .chart-bullets) { grid-template-columns: minmax(0, 1fr) max-content; column-gap: 12px; }
.lp-dash .lp-inline-notes :is(.chart-bars__item, .chart-bullets__item) { display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; column-gap: 12px; }
.lp-dash .lp-inline-notes :is(.chart-bars__row, .chart-bullet) { grid-column: 1 / -1; grid-template-columns: subgrid; align-items: center; gap: 2px 12px; }
.lp-inline-notes :is(.chart-bars__head, .chart-bullet__head) { grid-column: 1 / -1; }
.lp-inline-notes :is(.chart-bars__svg, .chart-bullet__svg) { grid-column: 1; }
.lp-inline-notes :is(.chart-bars__note, .chart-bullet__note) { grid-column: 2; white-space: nowrap; }
/* Длинная подпись («Склад «Северный» · к перечислению …») — справа от бара только на широкой карточке */
@media (max-width: 760px) {
  .lp-dash .lp-inline-notes--wide :is(.chart-bars, .chart-bullets) { grid-template-columns: minmax(0, 1fr); }
  .lp-inline-notes--wide :is(.chart-bars__note, .chart-bullet__note) { grid-column: 1; white-space: normal; }
}
/* Строки графиков окна плотнее: подпись строки — одной строкой */
.lp-dash .chart-bullets, .lp-dash .chart-bars, .lp-dash .chart-bridge { gap: 6px; }
.lp-dash .chart-bullet, .lp-dash .chart-bars__row, .lp-dash .chart-bridge__row { gap: 2px; }
.lp-dash .chart-bullet__note, .lp-dash .chart-bars__note, .lp-dash .chart-bridge__note { font-size: 12px; line-height: 16px; color: var(--lp-quiet); }
/* Широкий экран: у каждого вида — свои области сетки, короткие карточки — стопкой рядом с длинной, карточки
   ряда — одной высоты (stretch): между карточками колонки не больше 12 px (доводка 1 Л3: были дыры до 360 px) */
@media (min-width: 1081px) {
  .lp-dash__grid { align-items: stretch; }
  #dash-grid-objects { grid-template-areas: "pf coll occ" "months coll occ" "money rate rate" "money ai ai"; }
  #dash-grid-objects > .lp-ai { grid-area: ai; }
  #w-objects-profit_plan_fact { grid-area: pf; }
  #w-objects-profit_months { grid-area: months; }
  #w-objects-collection { grid-area: coll; }
  #w-objects-occupancy { grid-area: occ; }
  #w-objects-money { grid-area: money; }
  #w-objects-rating { grid-area: rate; }
  #dash-grid-company_profit { grid-template-areas: "op op result" "op op fee" "ai ai fee" "months months months"; }
  #dash-grid-company_profit > .lp-ai { grid-area: ai; }
  #w-company_profit-operating_profit { grid-area: op; }
  #w-company_profit-result_by_object { grid-area: result; }
  #w-company_profit-fee { grid-area: fee; }
  #w-company_profit-operating_profit_months { grid-area: months; }
  /* Опердиректор (доводка 1 Л3в): поступления к бюджету — первыми, рядом заявки с кольцом; долг — рядом с план-фактом
     расходов. Ряды ниже на 33 px (ряд держат карточки 291 / 445 / 375 px против 324 / 445 / 375) */
  #dash-grid-operations { grid-template-areas: "money requests requests" "debtors debtors leases" "debt exp exp"; }
  #w-operations-debt { grid-area: debt; }
  #w-operations-promises { grid-area: debtors; }
  #w-operations-money_today { grid-area: money; }
  #w-operations-leases { grid-area: leases; }
  #w-operations-requests { grid-area: requests; }
  #w-operations-expenses_plan_fact { grid-area: exp; }
  /* Бухгалтер (доводка 2 Л3в): закрытие месяца — в ряду с «Выпиской» и «Счетами, УПД», карточка ИИ — строкой под
     сеткой, как у опердиректора (было — стопкой под закрытием): раскрытое кольцо растит один ряд, соседние карточки не
     тянутся пустыми на высоту закрытия и ИИ. Рядом с «Собственникам» карточка ИИ тянулась бы до 344 px при тексте
     на 160 — пустая тонированная плашка */
  #dash-grid-accountant { grid-template-areas: "received bank bank" "statement documents close" "owners owners owners"; }
  #w-accountant-received { grid-area: received; }
  #w-accountant-bank_check { grid-area: bank; }
  #w-accountant-statement { grid-area: statement; }
  #w-accountant-documents { grid-area: documents; }
  #w-accountant-month_close { grid-area: close; }
  #w-accountant-owners { grid-area: owners; }
}

/* Колонки месяцев окна: на широкой карточке колонка не толще 28 px, черта бюджета — на 4 px шире с каждой стороны;
   высота поля — 112 px (доводка 2 Л3: строка числа «… к бюджету октября» стала выше — карточка не растёт) */
.lp-dash :is(.col-chart__axis, .col-chart__plot) { height: 112px; }
.lp-dash .col-chart__bar { left: max(18%, calc(50% - 14px)); right: max(18%, calc(50% - 14px)); }
.lp-dash .col-chart__plan { left: max(10%, calc(50% - 18px)); right: max(10%, calc(50% - 18px)); }

/* План-факт прибыли: под баром отклонения — только бар; факт и бюджет здания — в подписи ссылки строки
   (aria-label) и в её расшифровке, итог — строкой над графиком (Л3: карточка короче) */
#w-objects-profit_plan_fact .chart-bars__note { display: none; }

/* Малые бары (кварталы истечений) — две колонки, подпись и число — с переносом */
.lp-mini .chart-bars { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 16px; }
.lp-dash .lp-mini .chart-bars__head { display: flex; flex-wrap: wrap; column-gap: 8px; }

/* Сквозная цепочка — шапка окна над вкладками ролей, общая для ролей (первый экран В4, слово основателя 09.11.2026,
   кандидат Р-703; макет docs/mockups/landing-hero/index.html, раздел В4; landing/dashboard/spine). Заголовок, подпись,
   подпись роли и «Как считается» — строкой; под ними пять звеньев стрелками одной строкой, одной высоты (строка
   статуса зарезервирована и у узла без статуса), число — крупно моно (до 19 px, по ширине контейнера: «5 386 564,10 ₽»
   помещается и при 1081 px), подпись — 12,5 px. Узел — подложка без рамки, стрелка — черта с наконечником на уровне
   числа; во второй строке — долг веткой под «Начислено», строка о коммуналке (пояснение последним пунктом списка) и
   валовая прибыль зданий пунктиром (другая база). Узкое окно (контейнер 600–899 px) — сетка 2 × N мини-узлов «число +
   слово статуса» по порядку цепочки, долг — рядом с последним звеном; телефон (контейнер до 600 px) — столбиком, строка
   на звено: подпись, число, значок статуса (слово — в подписи ссылки), все пять звеньев — в первом экране 375×812 */
.lp-spine { position: relative; padding: 10px 20px 12px; box-shadow: inset 0 -1px 0 var(--lp-line); }
.lp-spine__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 14px; }
.lp-spine__title { font-size: 15px; font-weight: 600; line-height: 20px; letter-spacing: -0.005em; }
.lp-spine__title:focus { outline: none; }
/* Подпись и подпись роли растут на свободное место строки (подпись роли — текстом вправо), «Как считается» — у правого
   края: в одной строке подпись роли стоит вплотную к «Как считается», а если «Как считается» переносится одна
   (окна 1024–1081 px), она встаёт справа второй строкой, под подписью роли, а не слева под заголовком (доводка 1 В4) */
.lp-spine__caption { flex: 1 1 auto; min-width: 0; font-size: var(--lp-fs-micro); line-height: 18px; color: var(--lp-quiet); }
/* Подпись роли — справа, акцентом: «руководитель видит все звенья», у других ролей — чьи звенья в рамке */
.lp-spine__role { flex: 1 1 auto; text-align: right; font-size: var(--lp-fs-micro); font-weight: 500; line-height: 18px; color: var(--lp-accent); }
.lp-spine__how { margin-left: auto; line-height: 18px; }
/* Открытое «Как считается» не переезжает (доводка 1 В4: раньше весь details уходил новой строкой влево, и ссылка
   уезжала из-под курсора на 1052 px): details — на месте, объяснение — отдельным абзацем последней строкой шапки */
.lp-spine__how[open] { flex-basis: auto; }
.lp-spine__explain { display: none; order: 1; flex-basis: 100%; padding-top: 4px; font-size: var(--lp-fs-micro); line-height: 18px; color: var(--lp-quiet); }
.lp-spine__how[open] + .lp-spine__explain { display: block; }
.lp-spine .chart-chain-box { margin-top: 8px; }
.lp-spine .lp-dd { margin-top: 10px; }
.lp-spine .chart-chain { grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px 34px; }
.lp-spine .chart-chain__step:first-child { grid-row: 1 / span 2; }
.lp-spine .chart-chain__step--side { grid-row: 2; grid-column: 4 / span 2; }
.lp-spine .chart-chain__after { grid-row: 2; grid-column: 2 / span 2; align-self: center; font-size: 12px; line-height: 16px; color: var(--lp-quiet); }
/* Стрелка между звеньями: черта 24 px и наконечник — в зазоре 34 px, на уровне числа */
.lp-spine .chart-chain__step + .chart-chain__step::before { top: 38px; left: -29px; width: 24px; height: 0; border: 0; border-top: 2px solid var(--lp-muted); transform: none; }
.lp-spine .chart-chain__step + .chart-chain__step:not(.chart-chain__step--side)::after { content: ""; position: absolute; top: 34px; left: -12px;
  border-left: 7px solid var(--lp-muted); border-top: 5px solid transparent; border-bottom: 5px solid transparent; }
.lp-spine .chart-chain__node { display: grid; grid-template-rows: auto auto 17px auto; gap: 1px; align-content: start; padding: 9px 12px 10px;
  border: 0; border-radius: 10px; background: var(--lp-bg); }
.lp-body .lp-spine a.chart-chain__node:hover, .lp-body .lp-spine a.chart-chain__node:focus-visible { background: var(--lp-stage); }
.lp-spine .chart-chain__title { font-size: 12.5px; line-height: 17px; color: var(--lp-muted); }
.lp-spine .chart-chain__value { font-size: 16px; font-size: min(19px, calc((100cqi - 256px) / 42)); font-weight: 600; line-height: 26px; letter-spacing: -0.02em; }
.lp-spine .chart-chain__status { grid-row: 3; font-size: 12.5px; line-height: 17px; }
/* Подпись узла — до двух строк (line-clamp), а не одна строка с многоточием: на 1081–1215 px в узле 146–166 px
   «от всего начисленного — 78%» теряла само число (доводка 1 финальной сборки); на 1240 px и шире — одна строка */
.lp-spine .chart-chain__note { grid-row: 4; font-size: 11.5px; line-height: 15px; color: var(--lp-quiet); display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; }
/* Ветка и боковой узел — в строку: подпись, число, слово и пояснение */
.lp-spine .chart-chain__node--branch, .lp-spine .chart-chain__node--side { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 8px; padding: 7px 12px 8px; }
.lp-spine .chart-chain__node--branch .chart-chain__value, .lp-spine .chart-chain__node--side .chart-chain__value { font-size: 15px; line-height: 21px; letter-spacing: -0.03em; }
/* Пять узлов в строке, но узких (цепочка 900–1079 px — окно 1081–1215 px): подписи «от всего начисленного — 78%» и
   «без НДС 4 415 216,47 ₽» переносятся — у всех узлов место под две строки подписи, узлы одной высоты, стрелки на
   одной линии; с 1080 px подписи в одну строку */
@container chart-chain (min-width: 900px) and (max-width: 1079px) {
  .lp-spine .chart-chain__node { grid-template-rows: auto auto 17px 30px; }
}
/* Ветка и боковой узел — подпись целиком (без двух строк); display не задаётся: в мини-узлах подписи скрыты */
.lp-spine .chart-chain__node--branch .chart-chain__note, .lp-spine .chart-chain__node--side .chart-chain__note { -webkit-line-clamp: none; line-clamp: none; }
.lp-spine .chart-chain__node--side { background: none; border: 1px dashed var(--lp-control); }
.lp-spine .chart-chain__branch { position: relative; }
.lp-spine .chart-chain__branch::before { content: ""; position: absolute; left: 22px; top: -8px; height: 8px; border-left: 2px solid var(--lp-muted); }
@container chart-chain (max-width: 899px) {
  .lp-spine .chart-chain { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; align-items: stretch; }
  .lp-spine .chart-chain__step:first-child, .lp-spine .chart-chain__step:first-child > .chart-chain__branch { display: contents; }
  .lp-spine .chart-chain__step--side { grid-row: auto; grid-column: auto; }
  .lp-spine .chart-chain__step + .chart-chain__step::before, .lp-spine .chart-chain__step + .chart-chain__step::after, .lp-spine .chart-chain__branch::before { display: none; }
  .lp-spine .chart-chain__node { grid-template-rows: auto auto 17px; padding: 8px 10px; }
  /* Порядок мини-узлов: цепочка, «Долг» — шестым узлом рядом с «Вознаграждением», валовая прибыль зданий —
     строкой во всю ширину пунктиром (другая база): длинная подпись помещается целиком, без многоточия (доводка 2 Л3:
     было «Валовая прибыль зд…» в узле половинной ширины), строка о коммуналке — последней */
  .lp-spine .chart-chain__node--branch { order: 1; display: grid; padding: 8px 10px; }
  .lp-spine .chart-chain__step--side { order: 2; grid-column: 1 / -1; }
  .lp-spine .chart-chain__after { order: 3; grid-row: auto; grid-column: 1 / -1; align-self: start; }
  .lp-spine .chart-chain__note { display: none; }
  .lp-spine .chart-chain__value, .lp-spine .chart-chain__node--branch .chart-chain__value, .lp-spine .chart-chain__node--side .chart-chain__value { font-size: 15px; line-height: 21px; }
  .lp-spine .chart-chain__title { font-size: 12px; line-height: 16px; }
  .lp-spine .chart-chain__status { font-size: 12px; line-height: 17px; }
  .lp-spine .chart-chain__node--side { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 8px; padding: 8px 10px; }
}
/* Телефон: столбиком, строка на звено (макет В4, редакция 2) — подпись, число и значок статуса; слово статуса —
   в подписи ссылки (aria-label) и скрыто визуально; долг — после пяти звеньев, ниже — валовая прибыль пунктиром и
   строка о коммуналке. Подпись без многоточия: на 320 px «Вознаграждение УК» переносится второй строкой */
@container chart-chain (max-width: 599px) {
  .lp-spine .chart-chain { display: flex; flex-direction: column; gap: 3px; }
  .lp-spine .chart-chain__node, .lp-spine .chart-chain__node--branch, .lp-spine .chart-chain__node--side {
    display: grid; grid-template-columns: minmax(0, 1fr) auto 15px; grid-template-rows: none; align-items: center; gap: 8px;
    min-height: 31px; padding: 4px 10px; border-radius: 8px; }
  .lp-spine .chart-chain__title { min-width: 0; font-size: 12.5px; line-height: 16px; overflow-wrap: anywhere; }
  .lp-spine .chart-chain__value, .lp-spine .chart-chain__node--branch .chart-chain__value, .lp-spine .chart-chain__node--side .chart-chain__value {
    grid-column: 2; font-size: 13.5px; line-height: 16px; letter-spacing: -0.03em; }
  .lp-spine .chart-chain__status { grid-row: auto; grid-column: 3; display: inline-flex; gap: 0; font-size: 12px; }
  .lp-spine .chart-chain__status .status__word { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .lp-spine .chart-chain__status .status__icon { width: 15px; height: 15px; }
  .lp-spine .chart-chain__node--branch { margin-top: 2px; }
  .lp-spine .chart-chain__after { align-self: stretch; margin-top: 3px; font-size: 12px; line-height: 16px; }
}

/* Подсветка роли (В4): роль окна — data-landing-spine-role-value у #dashboard, чьё звено — data-roles узла
   (LandingDashboardHelper::LANDING_CHAIN_ROLES). Руководитель видит все звенья — без подсветки; у операционного
   директора и бухгалтера чужие звенья и строка о коммуналке гаснут до 45 %, свои — подложка и рамка акцентом.
   Погашенный узел — по-прежнему ссылка: при наведении, фокусе и с открытой расшифровкой — снова целиком (и под
   курсором клик-подсказки: она идёт при любой роли). Правило возврата весит больше правила гашения — (0,5,1) против
   (0,5,0): в селекторе та же роль окна [data-landing-spine-role-value] (доводка 1 В4: без неё возврат весил (0,4,1),
   проигрывал, и узел при наведении и фокусе оставался на 45 %) */
.lp-dash[data-landing-spine-role-value="operations"] .lp-spine [data-roles]:not([data-roles~="operations"]),
.lp-dash[data-landing-spine-role-value="accountant"] .lp-spine [data-roles]:not([data-roles~="accountant"]),
.lp-dash:is([data-landing-spine-role-value="operations"], [data-landing-spine-role-value="accountant"]) .lp-spine .chart-chain__after { opacity: 0.45; }
.lp-dash[data-landing-spine-role-value] .lp-spine a[data-roles]:is(:hover, :focus-visible, [aria-expanded="true"], .is-hint-hover, .is-hint-press) { opacity: 1; }
.lp-dash[data-landing-spine-role-value="operations"] .lp-spine [data-roles~="operations"],
.lp-dash[data-landing-spine-role-value="accountant"] .lp-spine [data-roles~="accountant"] { background-color: var(--lp-accent-bg); box-shadow: inset 0 0 0 1.5px var(--lp-accent); }
/* Открытая расшифровка узла (доводка 1 В4): узел — подложкой и чертой акцентом снизу, строка расшифровки с открытыми
   документами — подложкой, как при наведении. Видно, чья панель открыта и что повторное нажатие её закроет (на этом
   держится и клик-подсказка: «Собрано» → «Банк» → снова «Собрано»). У своего звена роли — рамка и черта вместе */
.lp-dash .lp-spine a.chart-chain__node[aria-expanded="true"] { background-color: var(--lp-stage); box-shadow: inset 0 -2px 0 var(--lp-accent); }
.lp-dash[data-landing-spine-role-value="operations"] .lp-spine a[data-roles~="operations"][aria-expanded="true"],
.lp-dash[data-landing-spine-role-value="accountant"] .lp-spine a[data-roles~="accountant"][aria-expanded="true"] {
  box-shadow: inset 0 0 0 1.5px var(--lp-accent), inset 0 -3px 0 var(--lp-accent); }
.lp-body .lp-dash a.lp-dd__line[aria-expanded="true"] { background: var(--lp-surface); }
/* Смена роли — плавно, 200 мс; только после первого показа (is-settled — landing_spine_controller): переход
   прозрачности в момент проявления спорил бы с движением узлов */
.lp-dash .lp-spine.is-settled .chart-chain__node, .lp-dash .lp-spine.is-settled .chart-chain__after {
  transition: opacity 200ms ease, box-shadow 200ms ease, background-color 200ms ease, transform var(--lp-dur-press) var(--lp-ease-out); }
/* Первый показ (landing_spine_controller): до класса is-in узлы, стрелки и строка о коммуналке прозрачны — только
   при включённых скриптах и без prefers-reduced-motion, и не дольше 2 с (контроллер не подключился — видно и так).
   Узлы проявляет контроллер (Web Animations API), стрелки дорисовываются вслед переходом прозрачности */
@media (scripting: enabled) and (prefers-reduced-motion: no-preference) {
  .lp-spine:not(.is-in) :is(.chart-chain__node, .chart-chain__after),
  .lp-spine:not(.is-in) .chart-chain__step::before,
  .lp-spine:not(.is-in) .chart-chain__step::after,
  .lp-spine:not(.is-in) .chart-chain__branch::before { opacity: 0; animation: lp-tw-safety 0s linear 2s forwards; }
  .lp-spine .chart-chain__step::before, .lp-spine .chart-chain__step::after, .lp-spine .chart-chain__branch::before { transition: opacity 200ms var(--lp-ease-out) 120ms; }
  .lp-spine .chart-chain__step:nth-child(3)::before, .lp-spine .chart-chain__step:nth-child(3)::after { transition-delay: 160ms; }
  .lp-spine .chart-chain__step:nth-child(4)::before, .lp-spine .chart-chain__step:nth-child(4)::after { transition-delay: 200ms; }
  .lp-spine .chart-chain__step:nth-child(5)::before, .lp-spine .chart-chain__step:nth-child(5)::after, .lp-spine .chart-chain__branch::before { transition-delay: 240ms; }
}

/* Рейтинг объектов по светофору: строка на здание, четыре статуса */
.lp-rating { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: 12px; }
.lp-rating th, .lp-rating td { padding: 6px 6px; text-align: left; vertical-align: middle; border-top: 1px solid var(--lp-line-soft); }
.lp-rating thead th { border-top: 0; padding-top: 0; font-weight: 500; color: var(--lp-quiet); line-height: 1.25; }
.lp-rating thead th:first-child, .lp-rating tbody th { width: 21%; padding-left: 0; }
.lp-rating__name { font-size: 13px; font-weight: 600; line-height: 1.3; color: var(--lp-text); }
.lp-body a.lp-rating__name { color: var(--lp-text); text-decoration: underline dotted var(--lp-faint); text-underline-offset: 3px; }
.lp-rating__cell { display: flex; flex-wrap: wrap; align-items: center; gap: 0 6px; padding: 3px 4px; margin: -3px -4px; border-radius: 6px; color: var(--lp-text); text-decoration: none; }
.lp-body a.lp-rating__cell { color: var(--lp-text); text-decoration: none; }
.lp-rating .status { font-size: 12px; }
/* Узкая карточка рейтинга (телефон, колонка до 600 px): таблица в пять колонок давала ячейки по 59 px и слова
   статусов наезжали друг на друга — здание строкой, под ним 2 × 2 «показатель — число и слово» (доводка 1 Л3) */
#w-objects-rating { container-type: inline-size; }
@container (max-width: 600px) {
  .lp-rating thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
  .lp-rating, .lp-rating tbody, .lp-rating tr, .lp-rating th, .lp-rating td { display: block; width: auto; }
  .lp-rating tr { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 12px; padding: 10px 0; border-top: 1px solid var(--lp-line-soft); }
  .lp-rating tbody tr:first-child { border-top: 0; padding-top: 0; }
  .lp-rating th, .lp-rating td { padding: 0; border: 0; }
  .lp-rating thead th:first-child, .lp-rating tbody th { grid-column: 1 / -1; width: auto; padding: 0; }
  .lp-rating td { min-width: 0; }
  .lp-rating td::before { content: attr(data-label); display: block; font-size: 12px; line-height: 16px; color: var(--lp-quiet); }
  .lp-rating__cell { margin: 0; padding: 0; }
}
@media (hover: hover) and (pointer: fine) { .lp-body a.lp-rating__cell:hover { background: var(--lp-surface-soft); } }

/* Сверка с банком: по выписке / в учёте / расхождение */
.lp-recon { width: 100%; border-collapse: collapse; font-size: var(--lp-fs-micro); }
.lp-recon th, .lp-recon td { padding: 7px 0; text-align: left; vertical-align: top; border-top: 1px solid var(--lp-line-soft); }
.lp-recon th + td, .lp-recon td + td, .lp-recon th + th { padding-left: 10px; }
.lp-recon thead th { border-top: 0; font-weight: 500; color: var(--lp-muted); }
.lp-recon tbody th { font-weight: 500; }
.lp-recon tfoot th { font-weight: 600; }
.lp-recon__num { text-align: right; }
.lp-body a.lp-recon__link { color: var(--lp-text); text-decoration: underline dotted var(--lp-faint); text-underline-offset: 3px; }
@media (hover: hover) and (pointer: fine) { .lp-body a.lp-recon__link:hover { text-decoration-color: var(--lp-text); } }
.lp-recon__note { display: block; font-weight: 400; color: var(--lp-muted); }
.lp-recon__none { color: var(--lp-muted); }
.lp-recon td.lp-recon__num, .lp-recon th.lp-recon__num { text-align: right; }

/* Остаток денег по дням: факт — линия, прогноз — пунктир по штриховке, «сегодня» — черта */
.lp-line { margin: 0; display: grid; gap: 6px; }
.lp-line__svg { display: block; width: 100%; height: 84px; overflow: visible; }
.lp-line__fact, .lp-line__forecast { fill: none; stroke: var(--lp-accent); stroke-width: 1.75px; vector-effect: non-scaling-stroke; stroke-linejoin: round; }
.lp-line__forecast { stroke: var(--lp-quiet); stroke-width: 1.5px; stroke-dasharray: 4 4; }
.lp-line__zone { fill: url(#lp-hatch); }
.lp-line__hatch { stroke: var(--lp-line); stroke-width: 3px; }
.lp-line__today { stroke: var(--lp-text); stroke-width: 1px; vector-effect: non-scaling-stroke; }
.lp-line__axis { display: flex; justify-content: space-between; gap: 8px; font-size: 12px; color: var(--lp-muted); }
.lp-line__now { color: var(--lp-text); font-weight: 500; }

/* Расшифровка: первый уровень — строки, второй — документы строки. Открыта одна панель */
.lp-dd { display: none; }
/* Л3б: закрываемая панель видна до конца движения (is-closing); на время движения блок режет содержимое (is-moving) —
   высоту и прозрачность ведёт landing_drill_controller через Web Animations API */
.lp-dd.is-open, .lp-dd.is-closing,
main:not(.is-drill-ready) .lp-dd:target,
main:not(.is-drill-ready) .lp-dd:has(.lp-dd:target) { display: block; }
.lp-dd { margin-top: 2px; padding: 14px 16px 6px; border-radius: 10px; background: var(--lp-surface-soft); box-shadow: inset 0 0 0 1px var(--lp-line); }
.lp-dd__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; padding-bottom: 8px; }
.lp-dd__title { flex: 1 1 auto; min-width: 0; font-size: 14px; font-weight: 600; line-height: 1.35; }
.lp-dd__title:focus { outline: none; }
.lp-dd__title:focus-visible { outline: 2px solid var(--lp-accent); outline-offset: 2px; }
.lp-dd__total { font-size: 14px; font-weight: 600; }
.lp-dd__close { font-size: var(--lp-fs-micro); }
.lp-dd__caption { font-size: 12.5px; color: var(--lp-muted); padding-bottom: 6px; }
.lp-dd__rows { display: grid; }
.lp-dd__row { border-top: 1px solid var(--lp-line); }
.lp-dd__line { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: baseline; gap: 2px 12px; padding: 8px 4px; margin: 0 -4px; border-radius: 6px; font-size: var(--lp-fs-micro); color: var(--lp-text); text-decoration: none; }
.lp-body a.lp-dd__line { color: var(--lp-text); text-decoration: none; }
.lp-dd__line--link .lp-dd__label { text-decoration: underline dotted var(--lp-faint); text-underline-offset: 3px; }
@media (hover: hover) and (pointer: fine) { .lp-body a.lp-dd__line:hover { background: var(--lp-surface); } }
.lp-dd__amount { grid-column: 2; text-align: right; }
.lp-dd__status { grid-column: 1 / -1; }
.lp-dd__path { padding: 10px 0 8px; border-top: 1px solid var(--lp-line); font-size: var(--lp-fs-micro); }
.lp-dd--docs { margin: 2px 0 10px 8px; padding: 10px 12px 4px; background: var(--lp-surface); box-shadow: inset 2px 0 0 var(--lp-accent), inset 0 0 0 1px var(--lp-line); }
.lp-docs { display: grid; }
.lp-docs__doc, .lp-docs__total { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 2px 12px; align-items: baseline; padding: 7px 0; border-top: 1px solid var(--lp-line-soft); font-size: 12.5px; }
.lp-docs__number { min-width: 0; }
.lp-docs__date { color: var(--lp-muted); font-variant-numeric: tabular-nums; }
.lp-docs__amount { text-align: right; }
.lp-docs__author { grid-column: 1 / -1; color: var(--lp-muted); }
.lp-docs__total { font-weight: 600; grid-template-columns: minmax(0, 1fr) auto; }

/* Свёртка длинных списков (Л3): на телефоне «Было → стало» — три строки, платформа и модули — по четыре пункта,
   ответ ИИ и вопросы формы о компании — по кнопке; длинный отчёт — первые 10 строк на любой ширине (доводка 1).
   «Показать все» — якорь :target без JS, с JS — landing_drill_controller (класс is-all у списка). Якорь —
   нулевой высоты и вне потока: в сетке не занимает ячейку */
.lp-fold__anchor { position: absolute; width: 0; height: 0; }
.lp-fold__all { display: none; align-items: center; justify-content: center; min-height: 44px; margin-top: 10px; border-radius: var(--lp-r-sm);
  background: var(--lp-surface); box-shadow: inset 0 0 0 1px var(--lp-line); font-weight: 600; font-size: 15px; text-decoration: none; }
.lp-body a.lp-fold__all { color: var(--lp-text); }
.lp-fold__anchor:not(:target) + .lp-rep__lines tbody:not(.is-all):not(:has(:target)) > tr:nth-child(n+11 of .lp-rep__row) { display: none; }
.lp-rep__lines + .lp-fold__all { display: flex; margin: 8px 24px 0; }
.lp-fold__anchor:target ~ .lp-fold__all, .lp-body .lp-fold__all[hidden] { display: none; }

/* «Показать все» — только на телефоне (три виджета на первом экране); карточка ИИ — во всю ширину сетки, на
   «Объектах» широкого экрана — своей областью */
.lp-dash__all { display: none; }
.lp-dash__grid > .lp-ai { grid-column: 1 / -1; }

/* Долг по корзинам (операционный директор и «Сбор и долг»): корзины — одним столбцом на общей шкале; старше 90
   дней — самая старая (последняя по Ledger::Portfolio::AGING_BUCKETS) — жирной подписью и тёмным баром (вес, а
   не цвет: статуса у корзины нет) */
.lp-buckets .chart-bars__item:last-child .chart-bars__label { font-weight: 700; color: var(--lp-text); }
.lp-buckets .chart-bars__item:last-child .chart-bars__bar { fill: var(--chart-fact); }

/* Карточка «ИИ-помощник рекомендует» */
/* Карточки ИИ — тон акцента, не статуса: рекомендация — не «внимание» */
.lp-ai { display: grid; gap: 0; padding: 10px 16px; border-radius: 12px; background: var(--lp-accent-bg); box-shadow: inset 3px 0 0 var(--lp-accent); font-size: var(--lp-fs-small); line-height: 1.45; }
.lp-ai__head { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; padding-bottom: 2px; }
.lp-ai__head span { color: var(--lp-muted); font-size: var(--lp-fs-micro); }
.lp-ai__situation { font-size: 14px; }
.lp-ai__action { font-weight: 600; }
.lp-ai__meta { font-size: var(--lp-fs-micro); color: var(--lp-muted); }

.lp-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

.lp-trustline li { color: var(--lp-text); }

/* ---------- Общие: подпись под блоком и кнопка каждые 2–3 блока ---------- */
.lp-note { margin-top: 16px; font-size: var(--lp-fs-body); color: var(--lp-muted); max-width: 72ch; text-wrap: pretty; }
.lp-cta { margin-top: 24px; display: flex; flex-wrap: wrap; gap: 12px; }
.lp-panel { background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); padding: 28px; }

/* ---------- 2 · Узнаёте себя? ---------- */
.lp-mirror { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.lp-mirror__role { background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); padding: 20px 22px 8px; }
.lp-mirror__title { font-size: var(--lp-fs-h3); font-weight: 600; letter-spacing: -0.01em; padding-bottom: 14px; border-bottom: 1px solid var(--lp-control); }
.lp-quotes li { padding: 10px 0; font-size: 16px; line-height: 1.45; }
.lp-quotes li + li { border-top: 1px solid var(--lp-line-soft); }
.lp-quotes q { quotes: "«" "»"; }

/* Табы ролей — только на телефоне; на широком экране видны все три колонки, hidden у панели не действует */
.lp-mirror__tabs { display: none; }
@media (min-width: 641px) { .lp-body .lp-mirror__role[hidden] { display: block !important; } }

/* ---------- 3 · Было → стало: таблица, на телефоне — карточки ---------- */
.lp-ba { width: 100%; border-collapse: collapse; background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); overflow: hidden; font-size: 15px; line-height: 1.45; }
.lp-ba th, .lp-ba td { text-align: left; vertical-align: top; padding: 12px 20px; }
.lp-ba tbody tr { border-top: 1px solid var(--lp-line-soft); }
.lp-ba thead th { font-size: var(--lp-fs-micro); font-weight: 600; color: var(--lp-muted); background: var(--lp-surface-soft); padding-block: 12px; }
.lp-ba tbody th { font-weight: 600; width: 27%; }
.lp-ba__lost { color: var(--lp-muted); width: 30%; }
.lp-ba__new { font-weight: 500; }

/* ---------- 4 · Части объекта: карточка здания, «+» с типами частей, итоги по частям ---------- */
.lp-parts { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }
.lp-parts__head { position: relative; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.lp-parts__name { font-size: var(--lp-fs-h3); font-weight: 600; letter-spacing: -0.01em; }
.lp-parts .lp-note { margin-top: 0; max-width: 104ch; }
/* Круглая «+» (ТЗ C): подсказка — по наведению и фокусу; открытое раскрытие — справочник типов (ТЗ B2) */
.lp-plus { margin-left: auto; }
.lp-plus__btn { position: relative; list-style: none; width: 48px; height: 48px; border-radius: 50%; display: grid; place-items: center; cursor: pointer;
  background: var(--lp-accent); color: var(--lp-on-dark); box-shadow: 0 6px 16px -6px rgba(22, 27, 38, 0.45);
  transition: background-color var(--lp-dur-hover) ease, transform var(--lp-dur-press) var(--lp-ease-out); }
.lp-plus__btn::-webkit-details-marker { display: none; }
/* Общее .lp-body :focus-visible скругляет на 4 px — «+» остаётся круглой (ТЗ C) */
.lp-body .lp-plus__btn:focus-visible { border-radius: 50%; }
.lp-plus__btn:active { transform: scale(0.95); }
.lp-plus[open] .lp-plus__btn svg { transform: rotate(45deg); }
.lp-plus__btn svg { transition: transform var(--lp-dur-ui) var(--lp-ease-out); }
.lp-plus__tip { position: absolute; right: 0; top: calc(100% + 8px); z-index: 2; width: max-content; max-width: 240px; padding: 8px 10px; border-radius: 8px;
  background: var(--lp-text); color: var(--lp-on-dark); font-size: var(--lp-fs-micro); line-height: 1.35; text-align: left;
  opacity: 0; visibility: hidden; transition: opacity var(--lp-dur-hover) ease, visibility var(--lp-dur-hover) ease; pointer-events: none; }
.lp-plus__btn:focus-visible .lp-plus__tip { opacity: 1; visibility: visible; }
@media (hover: hover) and (pointer: fine) {
  .lp-plus__btn:hover { background: var(--lp-accent-hover); }
  .lp-plus__btn:hover .lp-plus__tip { opacity: 1; visibility: visible; }
}
.lp-plus[open] .lp-plus__tip { opacity: 0; visibility: hidden; }
/* Закрытая «+» — меню без коробки: иначе браузер раскладывает его за правым краем телефона (Л3) */
.lp-plus:not([open]) .lp-plus__menu { display: none; }
.lp-plus__menu { position: absolute; right: 0; top: calc(100% + 8px); z-index: 3; width: min(420px, 100%); display: grid; gap: 10px; padding: 16px;
  border-radius: var(--lp-r-md); background: var(--lp-surface); box-shadow: var(--lp-shadow-float); }
.lp-plus__title { font-size: var(--lp-fs-micro); font-weight: 600; color: var(--lp-muted); }
.lp-plus__types { display: flex; flex-wrap: wrap; gap: 8px; }
.lp-plus__type { font: inherit; font-size: var(--lp-fs-small); font-weight: 500; color: var(--lp-text); border: 0; cursor: pointer; gap: 6px; }
.lp-plus__type--custom { box-shadow: inset 0 0 0 1px var(--lp-control-hover); background: var(--lp-surface); }
.lp-parts__chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.lp-plus__unit { color: var(--lp-muted); font-weight: 400; font-size: var(--lp-fs-micro); }
@media (hover: hover) and (pointer: fine) { .lp-plus__type:hover { box-shadow: inset 0 0 0 1px var(--lp-control-hover); } }
.lp-parts__table { width: 100%; border-collapse: collapse; font-size: var(--lp-fs-small); }
.lp-parts__table th, .lp-parts__table td { padding: 10px 0; text-align: left; vertical-align: baseline; border-top: 1px solid var(--lp-line-soft); }
.lp-parts__table th + td, .lp-parts__table td + td, .lp-parts__table th + th { padding-left: 14px; }
.lp-parts__table thead th { border-top: 0; font-size: var(--lp-fs-micro); font-weight: 500; color: var(--lp-muted); }
.lp-parts__table tbody th { font-weight: 600; }
.lp-parts__table tfoot th, .lp-parts__table tfoot td { border-top: 1px solid var(--lp-control); font-weight: 600; }
.lp-parts__table .lp-parts__num { text-align: right; }
/* Новая часть (слово основателя 08.11.2026): строка с пометкой «новая часть» и «Убрать», объём и «занято» — поля
   ввода, ставка — второй строкой на всю ширину; «Начислено» = занято × ставка считает landing_parts_controller.js.
   Строки создаёт JS (в разметке сервера шаблона нет): ячейка — обёртка .lp-parts__cell, у которой растёт высота при
   появлении и уходе (200 мс, как раскрытия лендинга); подпись поля на телефоне — .lp-parts__label внутри обёртки */
.lp-parts__table tr.lp-parts__new, .lp-parts__table tr.lp-parts__rate { background: var(--lp-surface-soft); }
.lp-parts__new th, .lp-parts__new td { color: var(--lp-muted); vertical-align: middle; }
.lp-parts__new th { padding-left: 10px; font-weight: 600; color: var(--lp-text); }
.lp-parts__new td:last-child { padding-right: 10px; }
.lp-parts__table .lp-parts__rate td { padding: 0 10px 10px; border-top: 0; }
.lp-parts__cell { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; min-width: 0; }
.lp-parts__num .lp-parts__cell { justify-content: flex-end; }
.lp-parts__table .is-moving .lp-parts__cell { overflow: clip; }
.lp-parts__label { display: none; }
.lp-parts__field { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; min-width: 0; max-width: 100%; color: var(--lp-text); font-weight: 500; }
/* Поле сжимается внутри своей колонки (планшет: колонки узкие и постоянной ширины), единица и доля переносятся под
   него — таблица не выходит за карточку */
.lp-parts__input { box-sizing: border-box; flex: 0 1 auto; width: 88px; max-width: 100%; min-width: 0; height: 34px; padding: 0 8px; border: 1px solid var(--lp-control); border-radius: 8px;
  background: var(--lp-surface); color: var(--lp-text); font: 500 14px/1 var(--lp-mono); font-variant-numeric: tabular-nums; letter-spacing: -0.01em; text-align: right; }
.lp-parts__input::placeholder { color: var(--lp-quiet); font-family: var(--lp-sans); font-weight: 400; letter-spacing: 0; }
.lp-parts__input:focus { outline: none; border-color: var(--lp-accent); box-shadow: 0 0 0 3px var(--lp-info-bg); }
.lp-parts__input[aria-invalid="true"] { border-color: var(--lp-field-error); }
.lp-parts__input--name { width: 150px; font-family: var(--lp-sans); text-align: left; letter-spacing: 0; }
.lp-parts__input--rate { width: 116px; }
.lp-parts__unit, .lp-parts__later, .lp-parts__hint { color: var(--lp-muted); font-size: var(--lp-fs-micro); font-weight: 400; }
.lp-parts__new .lp-num, .lp-parts__hint .lp-num { color: var(--lp-text); }
/* Пометка «новая часть» в узкой колонке «Часть» (планшет) переносится в две строки, а не вылезает в «Объём» */
.lp-parts__new .lp-tag { height: auto; min-height: 22px; padding-block: 3px; line-height: 1.2; white-space: normal; }
.lp-parts__share.is-error, .lp-parts__new .lp-num.is-error { color: var(--lp-danger); font-family: var(--lp-sans); }
/* Длинная сумма новой части и итога (крайние значения в пределах ввода) переносится внутри колонки, а не налезает на
   соседнюю: разряды — неразрывные, перенос — только когда не помещается (сильнее nowrap чисел таблицы на телефоне) */
.lp-parts__table .lp-parts__new .lp-num, .lp-parts__table .lp-parts__hint .lp-num, .lp-parts__table td[data-landing-parts-target="total"] .lp-num { white-space: normal; overflow-wrap: anywhere; }
.lp-parts__remove { margin-left: auto; font: inherit; font-size: var(--lp-fs-micro); font-weight: 400; color: var(--lp-accent); background: none; border: 0; padding: 4px 2px; cursor: pointer; text-decoration: underline; text-underline-offset: 3px; }
/* Колонки таблицы частей на ≥ 761 px — постоянной ширины (table-layout: fixed): иначе новая часть с полями раздвигала
   колонки, вся таблица прыгала вбок, пока строка плавно растёт, а на 761–850 px выходила за карточку и давала
   прокрутку страницы вбок (доводка 1). Доли — раскладка базовой таблицы по содержимому (замер на 3005): ≥ 1081 px — как
   при 1081–1440 (13,1 · 29,3 · 16,7 · 14,6 · 14,6 · 11,7 %); 761–900 — как при 761, наименьшей ширине таблицы (10,9 ·
   17 · 17 · 19,7 · 19,6 · 15,8 %: денежные колонки не уже своих сумм, у итога «Начислено» — запас в долю пикселя);
   901–1080 — промежуточные, суммы помещаются с 901 px. Наименьшая ширина базовой таблицы — 661 px: на 761–764 px она,
   как и до этапа, на 1–2 px заходит в поле карточки. Содержимое строки новой части переносится внутри своей колонки */
@media (min-width: 761px) {
  .lp-parts__table { table-layout: fixed; min-width: 661px; }
  .lp-parts__table thead th:nth-child(1) { width: 10.9%; }
  .lp-parts__table thead th:nth-child(2), .lp-parts__table thead th:nth-child(3) { width: 17%; }
  .lp-parts__table thead th:nth-child(4) { width: 19.7%; }
  .lp-parts__table thead th:nth-child(5) { width: 19.6%; }
  .lp-parts__table thead th:nth-child(6) { width: 15.8%; }
}
@media (min-width: 901px) {
  .lp-parts__table thead th:nth-child(1) { width: 12.5%; }
  .lp-parts__table thead th:nth-child(2) { width: 22%; }
  .lp-parts__table thead th:nth-child(3), .lp-parts__table thead th:nth-child(4), .lp-parts__table thead th:nth-child(5) { width: 17%; }
  .lp-parts__table thead th:nth-child(6) { width: 14.5%; }
}
@media (min-width: 1081px) {
  .lp-parts__table thead th:nth-child(1) { width: 13.1%; }
  .lp-parts__table thead th:nth-child(2) { width: 29.3%; }
  .lp-parts__table thead th:nth-child(3) { width: 16.7%; }
  .lp-parts__table thead th:nth-child(4), .lp-parts__table thead th:nth-child(5) { width: 14.6%; }
  .lp-parts__table thead th:nth-child(6) { width: 11.7%; }
}
/* Пересчитанное число — «Начислено» строки, живой итог в строке ставки и итог здания в подвале — подсвечено ~1 с:
   держится треть времени и гаснет (при «уменьшить движение» — без подсветки) */
.lp-parts__table td.is-updated .lp-num, .lp-parts__hint.is-updated .lp-num { animation: lp-parts-total 1000ms ease-in; border-radius: 4px; }
@keyframes lp-parts-total {
  0%, 35% { background-color: var(--lp-accent-bg); box-shadow: 0 0 0 4px var(--lp-accent-bg); }
  100% { background-color: transparent; box-shadow: 0 0 0 4px transparent; }
}

/* ---------- 5 · Механика проваливания ---------- */
.lp-mech { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; counter-reset: lp-m; }
.lp-mech li { counter-increment: lp-m; background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); padding: 18px; display: grid; gap: 6px; align-content: start; }
.lp-mech li::before { content: counter(lp-m); width: 28px; height: 28px; border-radius: 50%; box-shadow: inset 0 0 0 1px var(--lp-control); display: grid; place-items: center; font: 500 13px/1 var(--lp-mono); }
.lp-mech b { font-size: 18px; font-weight: 600; }
.lp-mech p { color: var(--lp-muted); font-size: var(--lp-fs-body); }
/* Путь в пять шагов: компания → объект → часть → арендатор → документ; шаг открывает свои строки */
.lp-path-box { margin-top: 16px; display: grid; gap: 14px; padding: 18px 20px 20px; border-radius: var(--lp-r-md); background: var(--lp-surface); box-shadow: var(--lp-shadow-card); }
.lp-path-box__bar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; font-size: 15px; }
.lp-path { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 24px; counter-reset: lp-p; }
.lp-path__step { position: relative; min-width: 0; display: grid; }
.lp-path__step + .lp-path__step::before { content: ""; position: absolute; top: 26px; left: -16px; width: 8px; height: 8px; border-top: 1.5px solid var(--lp-muted); border-right: 1.5px solid var(--lp-muted); transform: rotate(45deg); }
.lp-path__card { display: grid; gap: 4px; align-content: start; padding: 14px; border-radius: 12px; box-shadow: inset 0 0 0 1px var(--lp-line); text-decoration: none; color: var(--lp-text); }
.lp-body a.lp-path__card { color: var(--lp-text); text-decoration: none; }
@media (hover: hover) and (pointer: fine) { .lp-body a.lp-path__card:hover { box-shadow: inset 0 0 0 1px var(--lp-control-hover); } }
.lp-path__level { font-size: 12px; color: var(--lp-muted); }
.lp-path__title { font-size: 15px; font-weight: 600; line-height: 1.3; }
.lp-path__figure { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; font-size: var(--lp-fs-micro); color: var(--lp-muted); }
.lp-path__figure .lp-num { font-size: 15px; font-weight: 500; }
.lp-path__note { font-size: 12.5px; color: var(--lp-muted); }
.lp-path-box > .lp-dd { margin-top: 0; }

/* ---------- 6 · Отчётность: окно с пятью отчётами, выбор объекта и метода, строки с документами ---------- */
.lp-rep { position: relative; container: lp-rep / inline-size; background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); overflow: clip; }
/* Выбор объекта — в одной строке с вкладками отчётов, справа: только когда обе группы помещаются рядом. Порог — по
   ширине окна отчётов (container query), а не окна браузера: вкладки отчётов 586 px + выбор объекта 445 px + поля
   2 × 24 px + зазор 16 px ≈ 1 095 px. С порогом окна 1081 px на 1081–1144 px выбор объекта наезжал на «Прибыль УК»
   (доводка 1 финальной сборки); уже порога — выбор объекта строкой под вкладками, как на 1040 px */
@container lp-rep (min-width: 1100px) {
  .lp-rep__panel > .lp-rep__tabs:first-child, .lp-rep__panel > .lp-lazy > .lp-rep__tabs:first-child { position: absolute; top: 56px; right: 24px; padding: 0; }
  .lp-rep__panel > .lp-rep__tabs:first-child + .lp-rep__scope > .lp-rep__caption:first-child,
  .lp-rep__panel > .lp-lazy > .lp-rep__tabs:first-child + .lp-rep__scope > .lp-rep__caption:first-child { padding-top: 12px; }
}
.lp-rep__bar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 4px; min-height: 44px; padding: 8px 24px; background: var(--lp-chrome); color: var(--lp-on-dark); font-size: 15px; }
.lp-rep__bar span { color: var(--lp-chrome-text); }
.lp-rep__bar .lp-tag { margin-left: auto; color: var(--lp-muted); }
.lp-rep__tabs { padding: 12px 24px 0; display: grid; justify-items: start; }
.lp-rep__panel { padding: 0 0 20px; }
.lp-rep__scope, .lp-rep__method { display: grid; }
.lp-rep__caption { padding: 10px 24px 2px; font-size: var(--lp-fs-micro); color: var(--lp-quiet); }
.lp-rep__lines { padding: 0 24px; min-width: 0; }
.lp-rep__bridge { padding: 8px 24px 14px; max-width: 760px; }
.lp-rep__table { width: 100%; border-collapse: collapse; font-size: var(--lp-fs-micro); }
.lp-rep__table th, .lp-rep__table td { padding: 5px 0; text-align: left; vertical-align: baseline; border-top: 1px solid var(--lp-line-soft); }
.lp-rep__table th + td, .lp-rep__table td + td, .lp-rep__table th + th { padding-left: 14px; }
.lp-rep__table thead th { border-top: 0; font-weight: 500; color: var(--lp-muted); }
.lp-rep__table tbody th { font-weight: 500; }
.lp-rep__table .lp-rep__num { text-align: right; white-space: nowrap; }
.lp-rep__row--d1 > th { padding-left: 16px; font-weight: 400; color: var(--lp-muted); }
.lp-rep__row--d2 > th { padding-left: 32px; font-weight: 400; color: var(--lp-muted); }
.lp-rep__row--total > th, .lp-rep__row--total > td { font-weight: 600; border-top-color: var(--lp-control); }
.lp-rep__row--d0:not(.lp-rep__row--total) > th { font-weight: 600; }
.lp-body a.lp-rep__link { color: inherit; text-decoration: underline dotted var(--lp-faint); text-underline-offset: 3px; }
@media (hover: hover) and (pointer: fine) { .lp-body a.lp-rep__link:hover { text-decoration-color: var(--lp-text); } }
.lp-rep__margin { font-weight: 400; color: var(--lp-muted); white-space: nowrap; }
.lp-rep__status .status { white-space: nowrap; }
/* Документы строки — строка таблицы под ней: видна, пока открыта панель (с JS — is-open, без JS — :target) */
.lp-rep__docsrow { display: none; }
.lp-rep__docsrow:has(> td > .lp-dd:is(.is-open, .is-closing)),
main:not(.is-drill-ready) .lp-rep__docsrow:has(> td > .lp-dd:target) { display: table-row; }
.lp-rep__docsrow > td { padding: 0 0 6px; border-top: 0; }
.lp-rep__docsrow .lp-dd--docs { margin-left: 0; }
.lp-rep__check { margin: 10px 24px 0; padding: 10px 14px; border-radius: 10px; background: var(--lp-surface-soft); box-shadow: inset 0 0 0 1px var(--lp-line);
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; font-size: var(--lp-fs-micro); color: var(--lp-muted); }
.lp-rep__check span { white-space: nowrap; }
.lp-rep__sub { padding: 14px 24px 6px; font-size: 14px; font-weight: 600; }
/* Раскрытие под таблицей (прогноз ДДС) */
.lp-rep__more > summary { cursor: pointer; list-style: none; color: var(--lp-accent); }
.lp-rep__more > summary::-webkit-details-marker { display: none; }
.lp-rep__more > summary::after { content: " ▾"; }
.lp-rep__more[open]:not([data-closing]) > summary::after { content: " ▴"; }
.lp-rep__note { padding: 10px 24px 0; font-size: var(--lp-fs-micro); color: var(--lp-muted); max-width: 80ch; }
.lp-rep__pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 8px; }
.lp-rep__total { display: flex; justify-content: space-between; gap: 12px; margin: 0 24px; padding: 8px 0; border-top: 1px solid var(--lp-text); font-size: var(--lp-fs-micro); font-weight: 600; }
.lp-rep__numbers { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; padding: 8px 24px 0; }
.lp-rep__number { display: grid; gap: 4px; align-content: start; padding: 12px 14px; border-radius: 10px; box-shadow: inset 0 0 0 1px var(--lp-line); }
.lp-rep__number-title { font-size: var(--lp-fs-micro); color: var(--lp-muted); }
.lp-rep__number-value .lp-num { font-size: 17px; font-weight: 500; }
.lp-rep__number-note { font-size: 12.5px; color: var(--lp-muted); }
.lp-rep__conclusions { display: grid; gap: 8px; padding: 0 24px; font-size: var(--lp-fs-small); }
.lp-rep__conclusions li { padding: 10px 14px; border-radius: 10px; background: var(--lp-accent-bg); box-shadow: inset 3px 0 0 var(--lp-accent); }
.lp-rep__table--forecast { margin: 0 24px; width: calc(100% - 48px); }

/* ---------- 7 · Цифры сходятся с банком ---------- */
.lp-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: 1px solid var(--lp-control); }
.lp-fact { padding: 28px 32px 8px 0; display: grid; gap: 8px; align-content: start; }
.lp-fact + .lp-fact { padding-left: 32px; border-left: 1px solid var(--lp-line); }
.lp-fact__big { font-size: clamp(32px, 3.2vw, 44px); font-weight: 600; letter-spacing: -0.025em; line-height: 1.05; }
.lp-fact__big.lp-num { font-weight: 500; letter-spacing: -0.03em; }
/* Факты слева столбиком, сверка по выписке справа (Л3: блок вдвое ниже) */
.lp-bank-grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 24px 40px; align-items: start; }
.lp-bank-grid .lp-facts { grid-template-columns: minmax(0, 1fr); border-top: 0; }
.lp-bank-grid .lp-fact, .lp-bank-grid .lp-fact + .lp-fact { padding: 16px 0; border-left: 0; }
.lp-bank-grid .lp-fact + .lp-fact { border-top: 1px solid var(--lp-line); }
.lp-bank-grid .lp-fact:first-child { padding-top: 0; }
.lp-bank-grid .lp-fact__big { font-size: clamp(28px, 2.6vw, 36px); }
.lp-bank-grid .lp-fact p { max-width: none; }
/* Мини-таблица сверки на дату выписки */
.lp-bank { margin-top: 0; display: grid; gap: 12px; }
.lp-bank__head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.lp-bank__title { font-size: var(--lp-fs-h3); font-weight: 600; letter-spacing: -0.01em; }
.lp-bank__table { font-size: var(--lp-fs-small); }
.lp-bank__table th, .lp-bank__table td { padding-block: 10px; }
.lp-bank__table th + td, .lp-bank__table td + td, .lp-bank__table th + th { padding-left: 20px; }
.lp-fact__label { font-weight: 600; font-size: 17px; }
.lp-fact p { color: var(--lp-muted); font-size: var(--lp-fs-body); max-width: 40ch; }

/* ---------- 8 · ИИ-помощник ---------- */
.lp-points { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px 32px; }
.lp-points li { padding-top: 14px; border-top: 2px solid var(--lp-text); font-size: 16px; line-height: 1.45; color: var(--lp-muted); }
.lp-points b { color: var(--lp-text); font-weight: 600; }

/* Окно «ИИ-помощник рекомендует»: карточка выбранной вкладки дашборда и вопрос с ответом */
.lp-agent { margin-top: 28px; background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); overflow: clip; }
.lp-agent__bar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 4px; min-height: 52px; padding: 10px 24px; background: var(--lp-chrome); color: var(--lp-on-dark); font-size: 15px; }
.lp-agent__bar span { color: var(--lp-chrome-text); }
.lp-agent__bar .lp-tag { margin-left: auto; color: var(--lp-muted); }
.lp-agent__body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 24px 32px; padding: 20px 24px 24px; }
.lp-agent__cards { display: grid; gap: 12px; align-content: start; }
.lp-agent__lead { font-size: var(--lp-fs-micro); color: var(--lp-muted); }
.lp-agent__card { display: grid; gap: 10px; padding: 14px 16px; border-radius: 12px; background: var(--lp-accent-bg); box-shadow: inset 3px 0 0 var(--lp-accent); }
.lp-agent__situation { font-size: 16px; line-height: 1.45; }
.lp-agent__facts { display: grid; gap: 6px; margin: 0; font-size: var(--lp-fs-small); }
.lp-agent__facts div { display: grid; grid-template-columns: 120px minmax(0, 1fr); gap: 12px; }
.lp-agent__facts dt { color: var(--lp-muted); }
.lp-agent__facts dd { margin: 0; font-weight: 500; }
.lp-agent__chat { display: grid; gap: 12px; align-content: start; }
.lp-agent__q { justify-self: end; max-width: 90%; padding: 10px 14px; border-radius: 14px 14px 4px 14px; background: var(--lp-text); color: var(--lp-on-dark); font-size: 15px; }
.lp-agent__a { display: grid; gap: 8px; padding: 14px 16px; border-radius: 14px 14px 14px 4px; background: var(--lp-surface-soft); box-shadow: inset 0 0 0 1px var(--lp-line); font-size: var(--lp-fs-small); line-height: 1.5; }

/* ---------- 9 · Платформа и модули ---------- */
.lp-platform { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.lp-platform__col { background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); padding: 22px 24px; display: grid; gap: 14px; align-content: start; }
.lp-platform__title { font-size: var(--lp-fs-h3); font-weight: 600; letter-spacing: -0.01em; }
/* «Диспетчерская» и «Проверка арендатора» — рядом на широком экране, раскрытие — шаги над карточкой */
.lp-more-list { margin-top: 20px; }
@media (min-width: 1081px) {
  .lp-more-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 48px; align-items: start; }
  .lp-more-list .lp-details { grid-template-columns: minmax(0, 1fr); }
}
.lp-details { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 24px 40px; align-items: start; padding-bottom: 24px; }
.lp-details > p { color: var(--lp-muted); font-size: var(--lp-fs-body); max-width: 60ch; }
.lp-steps--five { grid-template-columns: minmax(0, 1fr); gap: 10px; }
.lp-steps--five li { grid-template-columns: 28px minmax(0, 1fr); align-items: center; }
.lp-taskcard { background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-raise); padding: 18px; display: grid; gap: 8px; font-size: var(--lp-fs-small); }
.lp-taskcard__k { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 12px; font-size: var(--lp-fs-micro); color: var(--lp-muted); }
.lp-taskcard__title { font-size: 16px; font-weight: 600; }
.lp-taskcard__steps li { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 8px 0; border-top: 1px solid var(--lp-line-soft); }
.lp-taskcard__steps .lp-tag, .lp-taskcard__steps .lp-link { flex: none; }
.lp-taskcard__note { font-size: var(--lp-fs-micro); color: var(--lp-muted); }

/* ---------- 10 · Интеграции и переход в три шага ---------- */
.lp-steps--cards li { background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); padding: 18px 20px; font-size: 16px; }
.lp-steps--cards b { color: var(--lp-text); font-weight: 600; }

/* ---------- 11 · Доверие и вопросы ---------- */
.lp-trust { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-bottom: 32px; }
.lp-trust__item { background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); padding: 20px 22px; display: grid; gap: 8px; align-content: start; }
.lp-trust__item h3 { font-size: var(--lp-fs-h3); font-weight: 600; letter-spacing: -0.01em; }
.lp-trust__item p { color: var(--lp-muted); font-size: var(--lp-fs-body); }
.lp-trust__item .lp-btn { justify-self: start; margin-top: 6px; max-width: 100%; height: auto; min-height: 44px; padding-block: 10px; white-space: normal; text-align: center; line-height: 1.25; }
/* Вопросы: заголовок над списками, два списка по три вопроса — две колонки (Л3: блок короче). Колонки — сетка, а не
   CSS columns: те балансировали высоту покадрово, и во время плавного раскрытия вопрос перескакивал в соседнюю
   колонку (доводка 1 Л3в). Колонка не тянется по соседней (align-items: start); телефон — одна колонка */
.lp-faq { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px 48px; align-items: start; }
.lp-faq__title { grid-column: 1 / -1; font-size: var(--lp-fs-h3); font-weight: 600; letter-spacing: -0.02em; line-height: 1.15; text-wrap: balance; }
/* Раскрытия: вопросы, «Диспетчерская» и «Проверка арендатора» — details. Плавно (высота и прозрачность, 200 мс) — общий
   smooth_details_controller (Л3в); на время сворачивания у details data-closing — «+» поворачивается сразу, а не после
   движения. Без JS — плавная высота ::details-content, как было до Л3в (с JS переход CSS мешал бы замеру высот) */
.lp-faq__list { border-top: 1px solid var(--lp-control); }
.lp-faq__list details { border-bottom: 1px solid var(--lp-line); }
.lp-faq__list summary { list-style: none; cursor: pointer; display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; padding: 16px 0; font-size: 17px; font-weight: 600; line-height: 1.35; }
.lp-faq__list summary::-webkit-details-marker { display: none; }
.lp-faq__list summary::after { content: ""; flex: none; width: 24px; height: 24px; margin-top: 1px; border-radius: 50%; box-shadow: inset 0 0 0 1px var(--lp-control);
  background: linear-gradient(var(--lp-text), var(--lp-text)) center / 10px 1.5px no-repeat, linear-gradient(var(--lp-text), var(--lp-text)) center / 1.5px 10px no-repeat;
  transition: transform var(--lp-dur-ui) var(--lp-ease-out), background-color var(--lp-dur-hover) ease; }
.lp-faq__list details[open]:not([data-closing]) summary::after { transform: rotate(45deg); }
@media (scripting: none) {
  .lp-faq__list details::details-content { block-size: 0; overflow: clip; transition: block-size var(--lp-dur-ui) var(--lp-ease-out), content-visibility var(--lp-dur-ui) allow-discrete; }
  .lp-faq__list details[open]::details-content { block-size: auto; }
}
.lp-faq__list details > p { padding: 0 40px 16px 0; color: var(--lp-muted); max-width: 66ch; }
@media (hover: hover) and (pointer: fine) { .lp-faq__list summary:hover::after { background-color: var(--lp-surface); } }

/* ---------- 12 · Перенос данных ---------- */
.lp-offer { border-radius: var(--lp-r-lg); padding: 28px 32px; display: grid; gap: 20px; align-content: start; }
.lp-offer--move { background: var(--lp-surface); box-shadow: var(--lp-shadow-card); }
.lp-offer .lp-h2 { max-width: 46ch; }
.lp-steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; counter-reset: lp-s; }
.lp-steps li { display: grid; gap: 12px; align-content: start; counter-increment: lp-s; font-size: var(--lp-fs-body); color: var(--lp-muted); }
.lp-steps li::before { content: counter(lp-s); width: 28px; height: 28px; border-radius: 50%; box-shadow: inset 0 0 0 1px var(--lp-control); display: grid; place-items: center; font: 500 13px/1 var(--lp-mono); color: var(--lp-text); }

/* ---------- 13 · Форма и подвал ---------- */
.lp-final { padding-block: var(--lp-sec) 0; }
/* Финальный блок — тёмная плита шапки окон (crm-slate): белый заголовок 9,4 : 1, подпись --chrome-text-soft 6,1 : 1;
   кнопка формы — акцент. Лёгкая форма (кандидат Р-704: имя, телефон, почта по желанию) — уже, текст — шире (7 : 5);
   форма короче текста, поэтому текст без sticky (до Р-704 форма с вопросами о компании была выше текста, и текст шёл
   вместе с ней). До 1 080 px — одна колонка (@media (max-width: 1080px) ниже) */
.lp-final__card { background: var(--lp-chrome); color: var(--lp-on-dark); border-radius: var(--lp-r-lg); padding: clamp(24px, 3.4vw, 40px); display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 40px; }
.lp-final__copy { display: grid; gap: 20px; align-content: start; }
/* «Что будет на встрече» — слева под подзаголовком, только на широком экране (три шага знакомства, кандидат Р-704) */
.lp-demo-list { display: none; gap: 8px; padding-top: 16px; border-top: 1px solid rgba(255, 255, 255, 0.16); color: var(--lp-on-dark-muted); font-size: 15px; }
.lp-demo-list b { color: var(--lp-on-dark); font-weight: 600; }
@media (min-width: 1081px) {
  .lp-final .lp-demo-list { display: grid; }
}
/* Заголовок плиты — до 32 px и ровными строками: «Метраж» не висит одним словом (доводка 2 Л3) */
.lp-final .lp-h2 { color: var(--lp-on-dark); font-size: clamp(26px, 2.3vw, 32px); text-wrap: balance; }
.lp-final .lp-h2 span { color: var(--lp-on-dark-muted); }
.lp-final .lp-lead { color: var(--lp-on-dark-muted); }
.lp-final .lp-ticks { color: var(--lp-on-dark-muted); }
.lp-final .lp-ticks svg { color: var(--lp-on-dark); }
.lp-form-card { min-width: 0; }
.lp-form { background: var(--lp-surface); color: var(--lp-text); border-radius: var(--lp-r-md); padding: 24px; display: grid; gap: 14px; box-shadow: 0 24px 48px -20px rgba(10, 20, 40, 0.45); }
.lp-form__head { display: grid; gap: 4px; }
.lp-form__title { font-size: var(--lp-fs-h3); font-weight: 600; letter-spacing: -0.01em; line-height: 1.25; }
/* Подпись ровными строками: на 375 «на встрече» не висит хвостом */
.lp-form__sub { font-size: var(--lp-fs-small); color: var(--lp-muted); text-wrap: balance; }
.lp-form__alert { font-size: var(--lp-fs-small); color: var(--lp-danger); background: var(--lp-danger-bg); border-radius: var(--lp-r-sm); padding: 10px 12px; }
.lp-form__note { font-size: var(--lp-fs-micro); color: var(--lp-muted); }
/* align-content: start — в ряду «имя — телефон» ошибка в две строки под одним полем не растягивает соседнее */
.lp-field { display: grid; gap: 6px; align-content: start; min-width: 0; border: 0; padding: 0; margin: 0; }
.lp-field__label { font-size: var(--lp-fs-micro); color: var(--lp-muted); padding: 0; }
/* «(необязательно)» у почты — тише подписи (--lp-quiet на --lp-surface — в design_tokens_contrast_test) */
.lp-field__optional { color: var(--lp-quiet); }
.lp-field__error { font-size: var(--lp-fs-micro); color: var(--lp-danger); }
.lp-input { font: inherit; font-size: 15px; color: var(--lp-text); min-height: 44px; border-radius: 9px; border: 1px solid var(--lp-control); padding: 10px 12px; background: var(--lp-surface); width: 100%; transition: border-color var(--lp-dur-hover) ease, box-shadow var(--lp-dur-hover) ease; }
.lp-input::placeholder { color: var(--lp-quiet); }
.lp-input:focus { outline: none; border-color: var(--lp-accent); box-shadow: 0 0 0 3px var(--lp-info-bg); }
.lp-input[aria-invalid="true"] { border-color: var(--lp-field-error); }
/* Имя и телефон — в ряд, почта — строкой ниже во всю ширину; на телефоне — все друг под другом */
.lp-pair { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; }
.lp-consent { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 10px; align-items: start; font-size: var(--lp-fs-micro); color: var(--lp-muted); line-height: 1.45; cursor: pointer; }
.lp-consent input { margin: 1px 0 0; width: 16px; height: 16px; accent-color: var(--lp-accent); }
/* Длинная подпись кнопки переносится, а не распирает карточку формы на телефоне */
.lp-form .lp-btn { width: 100%; height: auto; min-height: 48px; padding-block: 12px; white-space: normal; line-height: 1.25; text-align: center; }
/* Ловушка для ботов: людям не видна, в табуляции не участвует */
.lp-hp { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
/* Заявка принята (.lp-done) и контакт вместо формы при LANDING_FORM=off (.lp-contact) — одна карточка */
.lp-done, .lp-contact { background: var(--lp-surface); color: var(--lp-text); border-radius: var(--lp-r-md); padding: 28px 24px; display: grid; gap: 12px; align-content: start; box-shadow: 0 24px 48px -20px rgba(10, 20, 60, 0.45); }
.lp-done__check { width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center; background: var(--lp-ok-bg); color: var(--lp-ok); }
.lp-done__title { font-size: var(--lp-fs-h3); font-weight: 600; letter-spacing: -0.01em; }
.lp-done__text { font-size: var(--lp-fs-body); color: var(--lp-muted); }
.lp-contact { gap: 16px; }
.lp-contact__links { display: grid; gap: 10px; }
.lp-contact__links .lp-btn { width: 100%; }

/* Подвал плотнее (доводка 1 Л3б: −28 px — запас под цель «страница ≤ 11 000 px» в живом браузере, где шрифт с dpr 2
   растеризуется на 1–5 px выше в каждом разделе, и под кольца следующего этапа) */
.lp-footer { padding-block: 48px 28px; display: grid; gap: 32px; }
.lp-foot { display: grid; grid-template-columns: 1.4fr repeat(4, minmax(0, 1fr)); gap: 24px; }
.lp-foot h4 { font-size: var(--lp-fs-micro); font-weight: 600; margin-bottom: 12px; }
.lp-foot ul { display: grid; gap: 8px; font-size: var(--lp-fs-small); }
.lp-body .lp-foot ul a { color: var(--lp-muted); text-decoration: none; }
@media (hover: hover) and (pointer: fine) { .lp-body .lp-foot ul a:hover { color: var(--lp-text); } }
.lp-foot__about { font-size: var(--lp-fs-small); color: var(--lp-muted); margin-top: 12px; max-width: 30ch; }
.lp-foot__bottom { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px 24px; font-size: var(--lp-fs-micro); color: var(--lp-muted); border-top: 1px solid var(--lp-line); padding-top: 20px; }

/* ---------- «ИИ печатает» (Л3б, landing_typewriter_controller) ----------
   Текст — в HTML целиком; ещё не напечатанное — прозрачный остаток .lp-tw-rest (место занято, раскладка не прыгает,
   скринридер читает), элементы-токены — .lp-tw-hide; отметки строки (.lp-tw-mark, галочка проверки) — после строки.
   Каретка — на остатке, абсолютно: не сдвигает текст. Без JS и при prefers-reduced-motion — всё видно сразу */
.lp-tw-rest { position: relative; color: transparent; }
.lp-tw-rest.is-caret::before { content: ""; position: absolute; left: 0; top: 0.1em; width: 2px; height: 1.1em; border-radius: 1px; background: var(--lp-accent); }
.lp-tw-hide, .is-tw-wait { opacity: 0; }
.lp-tw-mark { transition: opacity var(--lp-dur-hover) var(--lp-ease-out), transform var(--lp-dur-hover) var(--lp-ease-out); }
.is-tw-pending .lp-tw-mark { opacity: 0; transform: scale(0.8); }
.lp-tw-think { position: absolute; top: 14px; left: 16px; font-size: var(--lp-fs-small); color: var(--lp-quiet); animation: lp-tw-think 900ms ease-in-out infinite alternate; }
@keyframes lp-tw-think { from { opacity: 0.45; } to { opacity: 1; } }
.lp-agent__a { position: relative; }
/* Строка «Вывод ИИ» над виджетами вкладки: метка и одна фраза о главном отклонении роли */
.lp-verdict { min-width: 0; font-size: 14px; line-height: 20px; color: var(--lp-text); }
.lp-verdict__k { display: inline-flex; align-items: center; height: 20px; margin-right: 8px; padding: 0 8px; border-radius: 99px; vertical-align: top;
  background: var(--lp-accent-bg); color: var(--lp-accent); font-size: 12px; font-weight: 600; white-space: nowrap; }
.lp-verdict .lp-num { font-size: 13.5px; }
/* Широкий экран, вкладка руководителя: вывод — в строке переключателя «Объекты / Прибыль УК», справа от него
   (у строки переключателя справа пусто) — панель не выше, чем до вывода; у остальных вкладок — строкой над виджетами.
   Место переключателя — --lp-views-w (с запасом: переключатель шрифтом Onest — 172 px, запасным Arial до загрузки
   Onest — 178 px), переключатель не шире него; вывод начинается после него и не наезжает на переключатель (доводка 1
   Л3б). Не помещается в строку — переносится второй строкой в той же высоте 36 px (строки по 18 px), многоточие — только
   в конце второй (финальная сборка: снимок основателя 08.11 — «…было бы 383 0…» обрезано у правого края; на 1081–1680
   в Chromium не воспроизвелось, правило — чтобы фраза ИИ не терялась ни при каком шрифте и масштабе) */
@media (min-width: 1081px) {
  .lp-dash__panel { --lp-views-w: 196px; position: relative; }
  .lp-seg--views { max-width: var(--lp-views-w); }
  .lp-seg--views ~ .lp-dash__view .lp-verdict { position: absolute; top: 14px; left: calc(20px + var(--lp-views-w) + 20px); right: 20px; display: flex; align-items: center; height: 36px; }
  .lp-seg--views ~ .lp-dash__view .lp-verdict__text { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; min-width: 0; overflow: hidden; line-height: 18px; overflow-wrap: anywhere; }
}
/* Пока контроллер не подключился, фраза первого экрана не мигает полным текстом; не подключился за 2 с — видна */
@media (scripting: enabled) and (prefers-reduced-motion: no-preference) {
  .lp-verdict:not(.is-tw-ready) .lp-verdict__text { opacity: 0; animation: lp-tw-safety 0s linear 2s forwards; }
}
@keyframes lp-tw-safety { to { opacity: 1; } }
/* Проверка арендатора: галочка у строки — после того, как строка напечатана */
.lp-taskcard--check .lp-taskcard__steps li > span:first-child { position: relative; padding-left: 26px; }
.lp-taskcard--check .lp-taskcard__steps li > span:first-child::before { content: "✓" / ""; position: absolute; left: 0; top: 1px; display: grid; place-items: center; width: 18px; height: 18px;
  border-radius: 50%; background: var(--lp-ok-bg); color: var(--lp-ok); font-size: 11px; font-weight: 700; line-height: 1;
  transition: opacity var(--lp-dur-hover) var(--lp-ease-out), transform var(--lp-dur-hover) var(--lp-ease-out); }
.lp-taskcard--check .is-tw-pending > span:first-child::before { opacity: 0; transform: scale(0.6); }
/* Сверка банка: строка «проверяется» (подсветка), затем отметка — «сходится» у счёта, галочка у кассы и карты */
.lp-recon tbody tr { transition: background-color var(--lp-dur-hover) ease; }
.lp-recon tbody tr.is-tw-scan { background-color: var(--lp-accent-bg); }
.lp-recon__ok { display: block; margin-top: 2px; font-family: var(--lp-sans); font-size: 12px; font-weight: 500; color: var(--lp-ok); white-space: nowrap; }
.lp-recon__ok::before { content: "✓ " / ""; }
/* Галочка — своей колонкой 14 px с зазором до текста (доводка 1 Л3б: «✓5 записей» почти касалось цифры) */
.lp-recon__note { position: relative; padding-left: 20px; }
.lp-recon__note::before { content: "✓" / ""; position: absolute; left: 0; top: 0; width: 14px; text-align: center; color: var(--lp-ok); font-weight: 700; transition: opacity var(--lp-dur-hover) var(--lp-ease-out); }
.is-tw-pending .lp-recon__note::before { opacity: 0; }

/* ---------- Клик-подсказка и вспышка клика (слово основателя 08.11.2026, docs/mockups/landing-motion/index.html) ----------
   Всё создаёт JS (landing_cursor_hint_controller, landing_burst_controller, controllers/landing/burst.js), в разметке
   сервера этих элементов нет. Слои — абсолютно внутри окна дашборда (.lp-dash: position: relative, overflow: clip):
   раскладку не двигают, за окно и в горизонтальную прокрутку не выходят, кликам не мешают. Место — CSSOM, движение —
   Web Animations API; при prefers-reduced-motion курсора, круга и вспышек нет, подсказка — сразу */
.lp-burst { position: absolute; left: 0; top: 0; z-index: 7; width: 0; height: 0; pointer-events: none; }
.lp-burst__ray { position: absolute; left: -1px; top: 0; width: 2px; height: 9px; border-radius: 2px; background: var(--lp-accent); transform-origin: 50% 0; opacity: 0; }
.lp-hint-cursor { position: absolute; left: 0; top: 0; z-index: 8; pointer-events: none; opacity: 0; transform-origin: 3px 2px; will-change: transform, opacity; }
.lp-hint-cursor svg { display: block; filter: drop-shadow(0 2px 3px rgba(22, 27, 38, 0.28)); }
.lp-hint-cursor path { fill: var(--lp-text); stroke: var(--lp-surface); stroke-width: 1.6px; stroke-linejoin: round; }
.lp-hint-tap { position: absolute; left: 0; top: 0; z-index: 8; width: 34px; height: 34px; margin: -17px 0 0 -17px; border-radius: 50%; pointer-events: none; opacity: 0;
  background: color-mix(in srgb, var(--lp-text) 16%, transparent); box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--lp-text) 50%, transparent); }
.lp-hint-note { position: absolute; left: 0; top: 0; z-index: 8; max-width: 260px; padding: 7px 10px; border-radius: 8px; background: var(--lp-text); color: var(--lp-surface);
  font-size: 13px; line-height: 1.35; pointer-events: none; opacity: 0; transform: translateY(4px);
  transition: opacity 250ms var(--lp-ease-out), transform 250ms var(--lp-ease-out); }
.lp-hint-note.is-on { opacity: 1; transform: none; }
/* Подсказка строкой — в зазоре под «Коммуналкой» (телефон, узкая цепочка): ниже и плотнее пузыря, шириной до карточки
   (max-width — из JS), переносится, если не помещается; на экранах уже 360 px — мельче, чтобы осталась одной строкой */
.lp-hint-note--line { padding: 4px 9px; font-size: 12px; line-height: 1.3; }
@media (max-width: 359px) { .lp-hint-note--line { font-size: 11px; } }
/* Подсказка в тёмной шапке окна (телефон: в шапке только название УК и метка, чисел нет; доводка 1 В4: раньше она
   закрывала заголовок цепочки) — светлая полоса во всю ширину шапки (ширина — из JS), текст по центру */
.lp-hint-note--on-dark { background: var(--lp-surface); color: var(--lp-text); text-align: center; }
/* Наведение и нажатие подсказки — как у мыши: подложка узла темнее, нажатие слегка сжимает узел. Строка расшифровки
   («Банк» в «Собрано», сценарий 09.11.2026) — подложка, как при наведении мышью, нажатие — темнее */
.lp-body .lp-dash a.chart-chain__node.is-hint-hover { background: var(--lp-stage); }
.lp-dash a.chart-chain__node { transition: background-color var(--lp-dur-hover) ease, transform var(--lp-dur-press) var(--lp-ease-out); }
.lp-dash a.chart-chain__node:active, .lp-dash a.chart-chain__node.is-hint-press { transform: scale(0.985); }
.lp-body .lp-dash a.lp-dd__line.is-hint-hover { background: var(--lp-surface); }
.lp-body .lp-dash a.lp-dd__line.is-hint-press { background: var(--lp-stage); }

/* ---------- Движение ---------- */
.lp-body .is-moving { overflow: clip; }
@media (prefers-reduced-motion: reduce) {
  .lp-body *, .lp-body *::before, .lp-body *::after { transition-duration: 0.01ms !important; animation: none !important; }
}

/* ---------- Ширины ---------- */
@media (max-width: 1080px) {
  .lp-nav { display: none; }
  .lp-sec__head, .lp-final__card, .lp-details { grid-template-columns: minmax(0, 1fr); }
  .lp-hero__top { grid-template-columns: minmax(0, 1fr); grid-template-areas: "kicker" "title" "lead" "cta"; }
  .lp-hero .lp-lead { max-width: 60ch; }
  .lp-dash__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .lp-w--wide { grid-column: 1 / -1; }
  .lp-path { grid-template-columns: minmax(0, 1fr); }
  .lp-path__step + .lp-path__step::before { top: -14px; left: 28px; transform: rotate(135deg); }
  .lp-mech, .lp-points { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .lp-rep__numbers { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .lp-agent__body { grid-template-columns: minmax(0, 1fr); }
  .lp-foot { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .lp-foot > div:first-child { grid-column: 1 / -1; }
  .lp-bank-grid { grid-template-columns: minmax(0, 1fr); }
}
/* Две колонки (761–1080 px): карточки ряда — одной высоты, как на широком экране (белые низы вместо серых дыр после
   порядка «под телефон»); карточка, которая осталась бы в ряду одна (следующая — широкая или последняя), — во всю
   ширину: справа от неё была пустая клетка, у опердиректора на 900 px — 397 × 394 (доводка 2 Л3в; тест раскладывает
   сетку двух колонок по разметке и ищет пустые клетки) */
@media (min-width: 761px) and (max-width: 1080px) {
  .lp-dash__grid { align-items: stretch; }
  :is(#w-objects-money, #w-operations-expenses_plan_fact, #w-accountant-received, #w-accountant-documents) { grid-column: 1 / -1; }
}
@media (max-width: 760px) {
  .lp-dash__grid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 760px) {
  .lp-facts { grid-template-columns: minmax(0, 1fr); }
  .lp-fact, .lp-fact + .lp-fact { padding: 22px 0; border-left: 0; }
  .lp-fact + .lp-fact { border-top: 1px solid var(--lp-line); }
  .lp-mirror, .lp-mech, .lp-points, .lp-platform, .lp-trust, .lp-steps { grid-template-columns: minmax(0, 1fr); }
  /* Вопросы — одной колонкой: второй список сразу под первым, без второй черты и зазора сетки */
  .lp-faq { grid-template-columns: minmax(0, 1fr); }
  .lp-faq__list + .lp-faq__list { margin-top: -16px; border-top: 0; }
  .lp-rep__pair { grid-template-columns: minmax(0, 1fr); }
  .lp-rep__numbers { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .lp-foot { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .lp-head { height: 60px; gap: 12px; }
  .lp-body [id], .lp-body a[href^="#"]:not(.lp-header *) { scroll-margin-top: 72px; }
  .lp-body a.lp-login { display: none; }
  .lp-long { display: none; }
  .lp-short { display: inline; }
  .lp-hero { padding-bottom: 24px; }
  /* Окно без подложки: воздух от текста — 40 px (В4 на основе В1) */
  .lp-hero__stage { --lp-hero-band: 860px; margin-top: 40px; padding: 0; border-radius: 0; background: none; box-shadow: none; }
  .lp-hero__art { width: 100%; height: 300px; }
  .lp-hero__top { padding-top: 16px; }
  .lp-kicker { font-size: var(--lp-fs-small); margin-bottom: 8px; }
  .lp-h1 { font-size: 28px; line-height: 1.1; letter-spacing: -0.025em; text-wrap: balance; }
  .lp-h1 span { display: inline; }
  .lp-lead { font-size: 16px; }
  .lp-hero .lp-lead { font-size: 15px; line-height: 1.45; margin-top: 10px; }
  .lp-hero__cta { margin-top: 14px; justify-items: stretch; }
  .lp-actions .lp-btn, .lp-cta .lp-btn { flex: 1 1 100%; height: 48px; white-space: normal; text-align: center; }
  /* Вторая кнопка первого экрана ведёт к окну дашборда, а окно на телефоне начинается сразу под кнопкой */
  .lp-hero .lp-actions .lp-btn--line { display: none; }
  .lp-hero .lp-ticks { gap: 2px 14px; }
  .lp-final .lp-ticks { flex-direction: column; }
  /* Дашборд на телефоне (макет В4, редакция 2): шапка окна в одну строку — «УК «Северный квартал»» и метка
     (месяц и дата — в заголовке цепочки и в «на дату» панелей), вкладки ролей во всю ширину короткими подписями —
     над цепочкой, цепочка столбиком — все пять звеньев в первом экране 375×812, ниже — панель роли («Вывод ИИ» над
     её виджетами, сначала три виджета — «Показать все»), «Ещё дашборды…» — в подвале окна. Порядок — order: в
     разметке цепочка стоит перед вкладками (порядок широкого экрана) */
  .lp-dash { display: flex; flex-direction: column; border-radius: 12px; }
  .lp-dash__bar { flex-wrap: nowrap; padding: 7px 10px 7px 14px; gap: 10px; }
  .lp-dash__title { min-width: 0; overflow: hidden; font-size: 13px; white-space: nowrap; text-overflow: ellipsis; }
  .lp-dash__title span { display: none; }
  .lp-dash__roles { display: contents; }
  .lp-dash__roles .lp-seg { margin: 10px 12px 0; width: auto; }
  .lp-spine { order: 1; padding: 8px 12px 10px; }
  .lp-dash__panel { order: 2; }
  /* Шапка цепочки: заголовок и «Как считается» — в строку; подпись и подпись роли скрыты (касание, первый экран
     короче), подсветка звеньев — та же */
  .lp-spine__head { flex-wrap: nowrap; justify-content: space-between; gap: 8px; }
  .lp-spine__head:has(.lp-spine__how[open]) { flex-wrap: wrap; }
  .lp-spine__title { font-size: 14px; line-height: 19px; }
  .lp-spine__caption, .lp-spine__role, .lp-hero__roles { display: none; }
  .lp-spine .chart-chain-box { margin-top: 6px; }
  .lp-dash__panel > .lp-seg, .lp-dash__panel > .lp-lazy > .lp-seg { margin-bottom: 8px; }
  .lp-dash__more { order: 3; padding: 12px; border-top: 1px solid var(--lp-line-soft); font-size: 12px; }
  .lp-dash__panel { padding: 10px 12px 14px; }
  .lp-verdict { font-size: 13px; line-height: 18px; }
  .lp-verdict .lp-num { font-size: 12.5px; letter-spacing: -0.02em; }
  .lp-verdict__k { height: 18px; margin-right: 6px; padding: 0 6px; font-size: 11px; }
  .lp-seg { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); width: 100%; }
  .lp-seg--roles .lp-seg__tab { min-height: 44px; padding: 6px 4px; font-size: 13px; }
  .lp-seg__tab[data-short] { position: relative; }
  .lp-seg__tab[data-short]::before { content: attr(data-short); content: attr(data-short) / ""; }
  .lp-seg__tab[data-short] > .lp-seg__full { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .lp-seg__tab, .lp-seg--small .lp-seg__tab, .lp-seg--small.lp-seg--quiet .lp-seg__tab { min-height: 44px; padding: 6px 10px; }
  .lp-w { padding: 12px 12px 14px; }
  .lp-w__num { font-size: 20px; }
  .lp-w__caption { white-space: normal; }
  /* Без JS «Показать все» — якорь :target; открытая по адресу расшифровка (:target внутри сетки) тоже
     показывает все виджеты — иначе панель виджета 4–7 открылась бы в скрытой карточке */
  .lp-dash__anchor:not(:target) + .lp-dash__grid:not(.is-all):not(:has(:target)) > .lp-w:nth-child(n+4) { display: none; }
  /* «Объекты» — два виджета: третий блок чисел первого экрана руководителя — сквозная цепочка в шапке окна (В4), как
     раньше «цепочка, план-факт, сбор» до «Показать все»; страница на 375 px — в пределе 16 000 px */
  .lp-dash__anchor:not(:target) + #dash-grid-objects:not(.is-all):not(:has(:target)) > .lp-w:nth-child(n+3) { display: none; }
  .lp-dash__all { grid-column: 1 / -1; display: flex; align-items: center; justify-content: center; min-height: 44px; border-radius: var(--lp-r-sm); background: var(--lp-surface); box-shadow: inset 0 0 0 1px var(--lp-line); font-weight: 600; font-size: 15px; text-decoration: none; }
  .lp-body a.lp-dash__all { color: var(--lp-text); }
  .lp-dash__anchor:target + .lp-dash__grid > .lp-dash__all, .lp-dash__grid:has(:target) > .lp-dash__all, .lp-dash__grid.is-all > .lp-dash__all { display: none; }
  .lp-dd { padding: 12px 12px 4px; }
  .lp-dd--docs { margin-left: 0; }
  .lp-recon thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
  .lp-recon, .lp-recon tbody, .lp-recon tfoot, .lp-recon tr, .lp-recon th, .lp-recon td { display: block; width: auto; }
  .lp-recon tr { padding: 6px 0; border-top: 1px solid var(--lp-line-soft); }
  .lp-recon th, .lp-recon td { border-top: 0; padding: 2px 0; }
  .lp-recon th + td, .lp-recon td + td { padding-left: 0; }
  .lp-recon td.lp-recon__num { display: flex; justify-content: space-between; gap: 12px; text-align: right; }
  .lp-recon td.lp-recon__num::before { content: attr(data-label); color: var(--lp-muted); text-align: left; }
  .lp-recon td:empty { display: none; }
  .lp-path-box { padding: 16px 14px; }
  .lp-sec__head { padding-bottom: 28px; }
  /* «Было → стало»: строка таблицы — карточка «сейчас → что теряется → в Метраже» */
  .lp-ba, .lp-ba tbody, .lp-ba tr, .lp-ba th, .lp-ba td { display: block; width: auto; }
  .lp-ba { background: none; box-shadow: none; border-radius: 0; overflow: visible; }
  .lp-ba thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
  .lp-ba tbody { display: grid; gap: 12px; }
  .lp-ba tbody tr { border-top: 0; background: var(--lp-surface); border-radius: var(--lp-r-md); box-shadow: var(--lp-shadow-card); padding: 6px 0; }
  .lp-ba tbody th, .lp-ba td { padding: 8px 16px; }
  .lp-ba tbody th, .lp-ba__lost { width: auto; }
  .lp-ba tbody th::before, .lp-ba td::before { content: attr(data-label); display: block; font-size: 12px; font-weight: 500; color: var(--lp-muted); margin-bottom: 2px; }
  .lp-panel, .lp-mirror__role, .lp-platform__col, .lp-trust__item { padding: 22px 20px; }
  /* «Узнаёте себя?»: табы ролей во всю ширину, заголовок колонки — в табе */
  .lp-mirror__tabs { display: grid; margin-bottom: 12px; }
  .lp-mirror__tabs .lp-seg__tab { font-size: 13px; padding: 6px 4px; }
  .lp-mirror__title { display: none; }
  .lp-mirror__role { padding-top: 10px; }
  /* Отчёты: вкладки во всю ширину (пять отчётов — в две строки), строка — «подпись — сумма», бюджет и статус под ней */
  .lp-rep__bar, .lp-rep__tabs, .lp-rep__caption, .lp-rep__lines, .lp-rep__bridge, .lp-rep__sub, .lp-rep__note, .lp-rep__numbers, .lp-rep__conclusions { padding-left: 14px; padding-right: 14px; }
  .lp-rep__check, .lp-rep__total { margin-left: 14px; margin-right: 14px; }
  /* Пять вкладок: три в первом ряду и две шире во втором — «Управленческий отчёт» не налезает на соседнюю */
  .lp-seg--reports, .lp-seg--scopes { grid-auto-flow: row; grid-template-columns: repeat(6, minmax(0, 1fr)); }
  .lp-seg--reports > .lp-seg__tab, .lp-seg--scopes > .lp-seg__tab { grid-column: span 2; }
  .lp-seg--reports > .lp-seg__tab:nth-child(n+4), .lp-seg--scopes > .lp-seg__tab:nth-child(n+4) { grid-column: span 3; }
  .lp-rep__numbers { grid-template-columns: minmax(0, 1fr); }
  .lp-rep__table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
  .lp-rep__table, .lp-rep__table tbody, .lp-rep__table tfoot, .lp-rep__table tr, .lp-rep__table th, .lp-rep__table td { display: block; width: auto; }
  .lp-rep__table tr { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 2px 12px; padding: 7px 0; border-top: 1px solid var(--lp-line-soft); }
  .lp-rep__table th, .lp-rep__table td { border-top: 0; padding: 0; }
  .lp-rep__table th + td, .lp-rep__table td + td { padding-left: 0; }
  .lp-rep__table td:nth-child(n+3) { grid-column: 1 / -1; display: flex; justify-content: space-between; gap: 12px; font-size: 12.5px; color: var(--lp-muted); }
  .lp-rep__table td:nth-child(n+3)::before { content: attr(data-label); }
  .lp-rep__table td.lp-rep__status::before { content: none; }
  /* Прогноз ДДС и «Прибыль УК»: первая сумма строки — тоже «подпись — сумма», как остальные */
  .lp-rep__table--labeled td:nth-child(2) { grid-column: 1 / -1; display: flex; justify-content: space-between; gap: 12px; }
  .lp-rep__table--labeled td:nth-child(n+2) { font-size: var(--lp-fs-micro); color: var(--lp-text); }
  .lp-rep__table--labeled td:nth-child(n+2):not(.lp-rep__status)::before { content: attr(data-label); color: var(--lp-muted); }
  .lp-rep__table td:empty { display: none; }
  .lp-rep__table td.lp-rep__none { display: none; }
  .lp-rep__table td > span:not(.lp-num) { white-space: normal; text-align: right; }
  .lp-rep__table tr.lp-rep__docsrow { display: none; padding: 0; border-top: 0; }
  .lp-rep__table tr.lp-rep__docsrow:has(> td > .lp-dd:is(.is-open, .is-closing)),
  main:not(.is-drill-ready) .lp-rep__table tr.lp-rep__docsrow:has(> td > .lp-dd:target) { display: block; }
  .lp-rep__row--d1 > th { padding-left: 10px; }
  .lp-rep__row--d2 > th { padding-left: 20px; }
  .lp-rep__table--forecast { margin: 0 14px; width: auto; }
  /* Окно ИИ: вкладки в две строки, карточка и ответ — друг под другом */
  .lp-seg--agent { grid-auto-flow: row; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .lp-agent__bar { padding: 10px 14px; }
  .lp-agent__body { padding: 16px 14px 18px; }
  .lp-agent__facts div { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .lp-offer { padding: 24px 20px; }
  .lp-faq__list summary { font-size: 17px; }
  .lp-faq__list details > p { padding-right: 0; }
  .lp-pair { grid-template-columns: minmax(0, 1fr); }
  .lp-form, .lp-done, .lp-contact { padding: 20px 16px; }
  .lp-final__card { padding: 20px 14px; }
  /* Кнопка формы — одной строкой (доводка 2 Л3) */
  .lp-form .lp-btn { padding-inline: 10px; font-size: 15px; letter-spacing: -0.01em; }
  /* Л3: телефон короче — блоки плотнее, таблицы строками «подпись — сумма» */
  .lp-sec__head { padding-bottom: 16px; gap: 10px; }
  .lp-mirror__role { padding: 4px 16px 4px; }
  .lp-quotes li { padding: 8px 0; }
  .lp-ba tbody { gap: 8px; }
  .lp-ba tbody tr { padding: 2px 0; }
  .lp-ba tbody th, .lp-ba td { padding: 6px 14px; }
  .lp-ba tbody th::before, .lp-ba td::before { margin-bottom: 0; }
  /* Механика — 2 × 2 */
  .lp-mech { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .lp-mech li { padding: 12px; gap: 4px; }
  .lp-mech li::before { width: 24px; height: 24px; }
  .lp-mech b { font-size: 16px; }
  .lp-mech p { font-size: var(--lp-fs-body); }
  .lp-path { gap: 8px; }
  .lp-path__step + .lp-path__step::before { display: none; }
  .lp-path__card { grid-template-columns: minmax(0, 1fr) auto; column-gap: 10px; padding: 10px 12px; }
  .lp-path__level, .lp-path__title, .lp-path__note { grid-column: 1 / -1; }
  .lp-rep__table td:nth-child(3):not(.lp-rep__status), .lp-rep__table td:nth-child(4):not(.lp-rep__status) { display: none; }
  .lp-rep__table--labeled td:nth-child(3), .lp-rep__table--labeled td:nth-child(4) { display: flex; }
  .lp-rep__table tr { padding: 5px 0; }
  .lp-bank-grid .lp-fact__big { font-size: 30px; }
  .lp-points { gap: 12px; }
  .lp-points li { padding-top: 10px; }
  .lp-platform__col { padding: 18px 16px; gap: 10px; }
  .lp-faq__list summary { padding: 14px 0; }
  .lp-final__card { gap: 24px; }
  .lp-h2 { font-size: 26px; }
  /* Строки отчёта на телефоне — плотнее; путь блока 5 — карточки в две строки */
  .lp-rep__table tr { padding: 4px 0; }
  .lp-rep__table { font-size: 13px; }
  .lp-path__card { row-gap: 2px; }
  .lp-path__note { font-size: 12px; }
  .lp-fact p { font-size: var(--lp-fs-body); }
  .lp-bank-grid .lp-fact, .lp-bank-grid .lp-fact + .lp-fact { padding: 12px 0; }
  .lp-agent__body { gap: 16px; }
  .lp-agent__lead { display: none; }
  .lp-agent__chat .lp-fold__all { margin-top: 0; }
  .lp-fold__anchor:not(:target) + .lp-ba tbody:not(.is-all) > tr:nth-child(n+4),
  .lp-fold__anchor:not(:target) + .lp-platform:not(.is-all) .lp-checks > li:nth-child(n+5),
  .lp-fold__anchor:not(:target) + .lp-agent__a:not(.is-all) { display: none; }
  .lp-fold__all { display: flex; }
  .lp-rep__lines + .lp-fold__all { margin: 8px 14px 0; }
  .lp-fold__anchor:target ~ .lp-fold__all { display: none; }
  /* «Было → стало»: заголовок строки — уже «сейчас», подпись над ним не нужна */
  .lp-ba tbody th::before { content: none; }
  /* Сверка банка (доводка 1 Л3): счёт и расхождение — первой строкой, по выписке и в учёте — второй, подпись над
     числом; у кассы и карты — счёт и остаток строкой, записи — под ними; «выписки нет» и «—» не повторяем */
  .lp-recon tbody tr, .lp-recon tfoot tr { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name diff" "stmt ledger"; gap: 2px 12px; }
  .lp-recon td[data-label="В учёте"].lp-recon__num { text-align: right; align-items: flex-end; }
  .lp-recon tbody th, .lp-recon tfoot th { grid-area: name; min-width: 0; }
  .lp-recon td[data-label="Расхождение"] { grid-area: diff; justify-self: end; }
  .lp-recon td[data-label="По выписке"] { grid-area: stmt; }
  .lp-recon td[data-label="В учёте"], .lp-recon td[data-label="Всего"] { grid-area: ledger; }
  .lp-recon tr:not([data-kind="bank"]) td[data-label="В учёте"], .lp-recon tfoot td[data-label="Всего"] { grid-area: diff; justify-self: end; }
  .lp-recon td.lp-recon__num { flex-direction: column; justify-content: flex-start; gap: 0; text-align: left; font-size: 12.5px; }
  .lp-recon td[data-label="Расхождение"].lp-recon__num, .lp-recon tr:not([data-kind="bank"]) td[data-label="В учёте"].lp-recon__num,
  .lp-recon tfoot td.lp-recon__num { flex-direction: row; align-items: baseline; gap: 6px; text-align: right; }
  .lp-recon td.lp-recon__num::before { font-size: 12px; }
  .lp-recon tr:not([data-kind="bank"]) td[data-label="В учёте"]::before, .lp-recon tfoot td::before { content: none; }
  .lp-recon td.lp-recon__none { display: none; }
  /* Л3б: у расчётного счёта «0,00 ₽ ✓ сходится» — без подписи «Расхождение» (иначе имя счёта уходит в три строки) */
  .lp-recon td.lp-recon__num:has(.lp-recon__ok)::before { content: none; }
  /* Подпись над значением: значения начинаются с одной линии (доводка 2 Л3: «Действие: …» в строку давали рваный
     столбец значений с x 175–306 px) */
  .lp-agent__facts { gap: 6px; }
  .lp-agent__facts div { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .lp-agent__facts dt { font-size: 12px; line-height: 16px; color: var(--lp-quiet); }
  .lp-checks { gap: 6px; }
  .lp-trust__item { padding: 18px 16px; }
  .lp-trust { gap: 10px; margin-bottom: 28px; }
  /* Шаги переноса и интеграций — номер слева от текста, а не строкой над ним (доводка 1 Л3: блоки короче) */
  .lp-steps li { grid-template-columns: 28px minmax(0, 1fr); align-items: start; column-gap: 12px; }
  /* Карточки шагов — тоже сеткой «номер | текст»: вторая строка не уходит под кружок номера (доводка 2 Л3) */
  .lp-steps--cards li { padding: 16px; }
}
/* Части объекта на телефоне и узком планшете (≤ 760 px, доводка 3 Л3в): таблица в шесть колонок уже не помещается
   (наименьшая ширина — 661 px, на 641–729 px она выходила за окно) — строка части становится карточкой */
@media (max-width: 760px) {
  /* Части объекта: строка таблицы — карточка «подпись — значение»; «+» и типы — во всю ширину. Шапка карточки —
     название и «+» в одной строке, метка «демо-данные» — под названием (доводка 1 Л3: «+» уходила строкой ниже) */
  .lp-parts__head { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name plus" "tag plus"; align-items: center; gap: 4px 12px; }
  .lp-parts__name { grid-area: name; min-width: 0; overflow-wrap: anywhere; }
  .lp-parts__head > .lp-tag { grid-area: tag; justify-self: start; }
  .lp-plus { grid-area: plus; margin-left: 0; }
  .lp-plus__menu { left: 0; right: 0; width: auto; }
  .lp-parts__table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
  .lp-parts__table, .lp-parts__table tbody, .lp-parts__table tfoot, .lp-parts__table tr, .lp-parts__table th, .lp-parts__table td { display: block; width: auto; }
  .lp-parts__table tr { padding: 8px 0; border-top: 1px solid var(--lp-line-soft); }
  .lp-parts__table tfoot tr { border-top: 1px solid var(--lp-control); }
  .lp-parts__table th, .lp-parts__table td, .lp-parts__table tfoot th, .lp-parts__table tfoot td { border-top: 0; padding: 2px 0; }
  .lp-parts__table th + td, .lp-parts__table td + td { padding-left: 0; }
  .lp-parts__table td { display: flex; justify-content: space-between; gap: 12px; text-align: right; }
  .lp-parts__table td::before { content: attr(data-label); color: var(--lp-muted); text-align: left; font-weight: 400; }
  /* Часть — карточка в две строки: объём и занято, затем начислено, собрано и долг */
  .lp-parts__table tbody tr, .lp-parts__table tfoot tr { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); column-gap: 10px; }
  .lp-parts__table tr > th { grid-column: 1 / -1; }
  .lp-parts__table tr > td:nth-of-type(-n+2) { grid-column: span 3; }
  .lp-parts__table tr > td:nth-of-type(n+3) { grid-column: span 2; font-size: 12.5px; }
  .lp-parts__table td .lp-num { white-space: nowrap; }
  /* Итог здания — та же сетка, что у частей: три денежные колонки, подпись над числом, влево (доводка 2 Л3: было
     по две суммы в строке вправо — итог не стоял под колонками частей); суммы длиннее — моно плотнее */
  .lp-parts__table td, .lp-parts__table .lp-parts__num { flex-direction: column; justify-content: flex-start; gap: 0; text-align: left; }
  .lp-parts__table tfoot td .lp-num { font-size: 11.5px; letter-spacing: -0.04em; }
  /* Подписи колонок — только у первой части, ниже числа стоят под ними (доводка 1 Л3: карточка на 160 px короче) */
  .lp-parts__table tbody tr:not(:first-child) td::before { content: none; }
  /* Новая часть: подпись поля — своя (внутри обёртки, растёт вместе с ячейкой), поля — во всю ширину колонки, 16 px —
     iOS не увеличивает страницу при фокусе, высота 40 px — под палец; ставка — строкой на всю ширину карточки */
  .lp-parts__table tr.lp-parts__new { padding: 10px 10px 6px; }
  .lp-parts__table tr.lp-parts__rate { border-top: 0; padding: 0 10px 10px; }
  .lp-parts__table tr.lp-parts__rate > td { grid-column: 1 / -1; padding: 0; }
  .lp-parts__new th, .lp-parts__new td:last-child { padding-left: 0; padding-right: 0; }
  .lp-parts__new .lp-parts__cell, .lp-parts__new .lp-parts__num .lp-parts__cell { justify-content: flex-start; gap: 4px 6px; }
  .lp-parts__label { display: block; flex: 1 1 100%; color: var(--lp-muted); font-size: 12.5px; font-weight: 400; }
  .lp-parts__new td .lp-parts__field { flex: 1 1 100%; min-width: 0; }
  .lp-parts__input { height: 40px; font-size: 16px; }
  /* У поля своя ширина по умолчанию (size="20") — без min-width: 0 оно распирало колонку и страницу вбок */
  .lp-parts__new td .lp-parts__input { flex: 1 1 0; width: 100%; min-width: 0; }
  .lp-parts__input--name { flex: 1 1 100%; width: 100%; min-width: 0; }
  /* Ставка — как остальные поля: подпись «Ставка, ₽ за место в месяц» над полем (единица не отрывается от поля строкой
     ниже), поле во всю ширину; под ним — живой итог здания и «Убрать» */
  .lp-parts__rate .lp-parts__field { flex: 1 1 100%; min-width: 0; }
  .lp-parts__rate .lp-parts__caption, .lp-parts__rate .lp-parts__unit { order: -1; color: var(--lp-muted); font-size: 12.5px; font-weight: 400; }
  .lp-parts__rate .lp-parts__caption::after { content: ","; }
  .lp-parts__rate .lp-parts__input--rate { flex: 1 1 100%; width: 100%; min-width: 0; }
  /* У карточки новой части поля по краям (10 px) — колонки сумм на 6 px уже, чем у частей выше: суммы — моно плотнее,
     как итог здания, иначе «119 017,00 ₽» переносило «₽» строкой ниже */
  .lp-parts__table .lp-parts__new td .lp-num { letter-spacing: -0.04em; }
}
