/* roles.css — страницы ролей: buyer.html и supplier.html (КД «РАЗВОДКА ПОТОКОВ», 24.09.2026).
   Отдельным файлом, а не правкой styles.css: пока это каркас на утверждение, и ревьюеру видно,
   что главная в стилях не тронута. Токены и кирпичи — общие (styles.css): .wrap, .section,
   .section-label/.section-title/.section-sub, .btn, .final, .door. Здесь только то, чего нет. */

/* ---------- герой роли ---------- */
.role-hero { padding: 96px 0 72px; border-bottom: 1px solid var(--site-table-border); }
.role-label {
  margin: 0; font-size: 15px; font-weight: 600; color: var(--site-text-2);
}
.role-title {
  margin: 16px 0 0; max-width: 20ch;
  font-size: clamp(38px, 5.2vw, 64px); font-weight: 500; line-height: 1.04;
  letter-spacing: -.02em; text-wrap: balance;
}
.role-lead {
  margin: 22px 0 0; max-width: 640px;
  font-size: 18px; line-height: 1.5; color: var(--site-text-2); text-wrap: pretty;
}
.role-cta { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-top: 34px; }

/* ---------- supplier: «как это выглядит» — макет гостевой из двери ---------- */
.role-mock { margin-top: 40px; }
.door-static {
  display: block; max-width: 720px; margin: 0 auto; padding: 0;
  border: 1px solid var(--site-border); border-radius: 16px; background: var(--site-surface);
  overflow: hidden;
}
.door-static .door-win { display: block; }


/* ---------- заглушки текстов видны как заглушки ---------- */
[data-c][data-stub] { outline: 1px dashed rgba(180, 83, 9, .4); outline-offset: 4px; }

@media (max-width: 860px) {
  .role-hero { padding: 64px 0 48px; }
  .role-fact { grid-template-columns: 40px minmax(0, 1fr); gap: 12px; padding: 18px 0; }
  .role-fact-t { font-size: 18px; }
}

/* =============================================================================
   СТРАНИЦА ПОСТАВЩИКА — вёрстка по арке брифа основателя (24.09):
   порог нулевой → за вас уже работают → правила честные → и есть дом → языки и вход.
   Визуальный вес распределён по арке: кабинет — полноценная секция с воздухом, «куда смотрим»
   — тихим тоном. Язык — интерфейс как он есть: макеты продукта, моноширинные акценты, лайм
   точками. Ни одной стоковой иллюстрации.
   ============================================================================= */

/* 1 · герой: одна мысль и тихий увод вниз, кнопки нет (так в набросках) */
.sup-hero { padding-bottom: 56px; border-bottom: 0; }
.sup-title { max-width: 22ch; }
.sup-sub { margin: 26px 0 0; max-width: 46ch; font-size: 21px; line-height: 1.4; color: var(--site-text-2); }
/* тезис страницы: третья фраза получает собственную паузу — так она не «дописка с выводом»,
   а то же место, что «Решение — всегда ваше» на главной */
.sup-thesis { margin: 14px 0 0; font-size: 21px; line-height: 1.4; color: var(--site-primary); font-weight: 500; }
/* «Здесь вы гость. Но званый.» — вторым голосом под лозунгом: та же высота, что подзаголовок,
   но графитом: это не пояснение механики, а обращение к читателю */
.sup-guest { margin: 26px 0 0; font-size: 22px; line-height: 1.35; color: var(--site-primary); font-weight: 500; }
.sup-scroll {
  display: inline-flex; align-items: center; gap: 10px; margin-top: 34px;
  font-size: 15px; color: var(--site-text-2);
  text-decoration: underline; text-underline-offset: 5px; text-decoration-color: var(--site-border);
}
.sup-scroll svg { width: 15px; height: 15px; }
.sup-scroll:hover { color: var(--site-primary); text-decoration-color: var(--site-accent); }

/* общий кирпич секций: строки-утверждения */
.sup-lines { margin: 26px 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 14px; }
.sup-line { font-size: 19px; line-height: 1.4; color: var(--site-primary); text-wrap: pretty; max-width: 42ch; }
.sup-lines-lg .sup-line { font-size: 24px; line-height: 1.3; }
.sup-lines-dot { gap: 16px; }
.sup-lines-dot .sup-line { display: grid; grid-template-columns: 8px minmax(0, 1fr); gap: 14px; align-items: baseline; max-width: 46ch; }
.sup-lines-dot .lime-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--site-accent); }

/* 2 · «как это выглядит»: слова слева, настоящая форма справа */
.sup-look { padding-top: 40px; }
.sup-look-grid, .sup-office-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 56px; align-items: center; }
/* ПАРА «утверждение — кадр» (приём образца, 25.09): одна мысль на пару,
   следующая пара на странице — зеркальная (.pair-rev). Порядок меняется только на
   десктопе: на узком экране кадр всегда идёт ПОД текстом, иначе читатель встречает
   скриншот раньше, чем повод на него смотреть. */
.pair { margin-top: 48px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 56px; align-items: center; }
.pair-rev .pair-copy { order: 2; }
.pair-rev .sup-shot { order: 1; }
.pair-copy { min-width: 0; }
.sup-shot { min-width: 0; }
.sup-shot .door-static { display: block; padding: 0; border: 1px solid var(--site-border); border-radius: 16px; background: var(--site-surface); overflow: hidden; box-shadow: 0 10px 20px -8px rgba(88,80,150,.16), 0 4px 10px rgba(88,80,150,.06); }
.sup-shot .mock-holder { display: block; border: 1px solid var(--site-border); border-radius: 16px; background: var(--site-surface); overflow: hidden; box-shadow: 0 10px 20px -8px rgba(88,80,150,.16), 0 4px 10px rgba(88,80,150,.06); }

/* 3 · «куда смотрим» — взгляд, не роадмап: тише основного списка, без плашек */
.sup-ahead { margin-top: 56px; padding-top: 22px; border-top: 1px solid var(--site-border); max-width: 640px; }
.sup-ahead-label { margin: 0; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--site-text-3); }
.sup-ahead-list { margin: 14px 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 10px; }
.sup-ahead-list li { font-size: 15px; line-height: 1.45; color: var(--site-text-2); }

/* 4 · правила — СТЕНА-МАНИФЕСТ. Пятнадцать строк подряд, одинаковым весом: длина списка и
   есть сообщение. Счётчик слева моноширинный и тихий — он меряет, а не рекламирует.
   Ниже стены — одна строка-вывод про бесплатно, крупнее остальных. */
.sup-wall { margin: 30px 0 0; padding: 0; list-style: none; border-top: 1px solid var(--site-border); }
.sup-wall-l {
  display: grid; grid-template-columns: 46px minmax(0, 1fr); gap: 18px; align-items: baseline;
  padding: 15px 0; border-bottom: 1px solid var(--site-table-border);
  font-size: 18px; line-height: 1.35; color: var(--site-primary); text-wrap: pretty;
}
.sup-wall-n { font-family: var(--mono); font-size: 12px; color: var(--site-text-3); font-variant-numeric: tabular-nums; }
.sup-free { margin: 34px 0 0; font-size: clamp(22px, 2.4vw, 28px); font-weight: 500; }

/* 5 · кабинет: секция с воздухом, а не подвал мелким шрифтом */
.sup-office { padding-top: 104px; padding-bottom: 104px; }

/* 6 · языки: те же пилюли, что видит гость в форме */
.sup-pills { display: flex; flex-wrap: wrap; gap: 10px; margin: 26px 0 0; padding: 0; list-style: none; }
.sup-pill { padding: 7px 14px; border-radius: 999px; border: 1px solid var(--site-border); background: var(--site-surface); font-size: 13px; color: var(--site-text-2); }
.sup-pill:first-child { background: rgba(223, 255, 0, .35); border-color: transparent; color: var(--site-primary); }

/* 7 · вход: одна строка, ничего больше */
.sup-enter { padding-top: 88px; padding-bottom: 104px; }
.sup-enter-t { margin: 18px 0 0; font-size: clamp(26px, 3vw, 36px); font-weight: 500; line-height: 1.18; max-width: 22ch; }
.sup-enter-n { margin: 14px 0 0; font-size: 17px; line-height: 1.5; color: var(--site-text-2); max-width: 30ch; }

@media (max-width: 960px) {
  .sup-look-grid, .sup-office-grid { grid-template-columns: 1fr; gap: 36px; }
  .pair { grid-template-columns: 1fr; gap: 32px; margin-top: 34px; }
  .pair-rev .pair-copy { order: 1; }
  .pair-rev .sup-shot { order: 2; }
  .sup-sub { font-size: 17px; }
  .sup-wall-l { grid-template-columns: 34px minmax(0, 1fr); gap: 12px; padding: 13px 0; font-size: 16px; }
  .sup-office { padding-top: 64px; padding-bottom: 64px; }
  .sup-lines-lg .sup-line { font-size: 20px; }
  .sup-line { font-size: 17px; }
}

/* Макеты на странице роли статичны — hover'а двери здесь нет. Значения проявляются, когда
   секция доехала до экрана: .reveal → .is-in. Иначе форма и кабинет стоят с пустыми ячейками
   и читаются как «ничего не заполнено». */
.sup-shot.is-in .mw-val { color: var(--site-primary); transition-delay: calc(var(--i, 0) * .18s + .2s); }
.sup-shot.is-in .mw-wait { opacity: 0; transition-delay: calc(var(--i, 0) * .18s + .15s); }
.sup-shot.is-in .mw-total-v { color: var(--site-primary); transition-delay: .9s; }
.sup-shot.is-in .mw-ai { opacity: 1; }

/* РОТАТОР ЗАГОЛОВКА (приём образца, 25.09). Варианты лежат в ОДНОЙ ячейке grid —
   контейнер берёт высоту самого длинного, и строка «Уже сделано. Не вами.» не
   прыгает при смене. Уход вверх/приход снизу — 14px, как у .reveal героя. */
.rot { display: block; }
.rot-slot { display: grid; }
.rot-line { grid-area: 1 / 1; opacity: 0; transform: translateY(14px); transition: opacity .5s var(--ease), transform .5s var(--ease); }
.rot-line.is-on { opacity: 1; transform: none; }
.rot-fixed { display: block; color: var(--site-text-2); }
@media (prefers-reduced-motion: reduce) {
  .rot-line { transition: none; }
}

/* ТРОЙКА РАЗДЕЛА (приём 1). Одна форма на все разделы: ярлык · заголовок · одна строка.
   Центрирование делается здесь, а не в каждом блоке — чтобы разделы нельзя было
   развести по виду, даже случайно. */
.sec-head { text-align: center; max-width: 780px; margin: 0 auto; }
.sec-head .section-title { margin: 0 auto; max-width: 20ch; }
.sec-head .section-sub { margin: 14px auto 0; max-width: 56ch; }
.sec-head + .sup-lines, .sec-head + .sup-wall, .sec-head + .sup-pills { margin-top: 40px; }

/* ЧЁРНЫЙ РАЗДЕЛ (приём 3). Единственный тёмный экран страницы — стена правил.
   Лайм на графите остаётся канонным (Р-19: заливка, не тонкая линия). */
.section-dark { background: var(--site-primary); color: var(--site-on-primary); }
.section-dark .section-label,
.section-dark .section-sub { color: rgba(255, 255, 255, .62); }
.section-dark .sup-wall { border-top-color: rgba(255, 255, 255, .16); }
.section-dark .sup-wall-l { color: var(--site-on-primary); }   /* у строки свой color: var(--site-primary) — на чёрном он слился бы с фоном */
.section-dark .sup-wall-l { border-bottom-color: rgba(255, 255, 255, .12); }
.section-dark .sup-wall-n { color: rgba(255, 255, 255, .42); }
.section-dark .sup-free { color: var(--site-accent); }

/* ---------- СЦЕНА ГЕРОЯ · 1 В 1 С ГЕРОЕМ ОБРАЗЦА (28.09) ----------
   Его моторика, снятая покадрово с шагом 260 мс и перенесённая целиком:
     · сцена живёт на ШИРОКОМ полотне, камера едет влево вслед за потоком — карточка запроса
       уходит за левый край, веер встаёт по центру, затем центр у цены;
     · провод растёт от карточки и расходится ветками, локти скруглены;
     · у работающей карточки рамка-ГРАДИЕНТ, обрисовывающая её слева направо, по телу идёт
       белый блик, справа три точки; закончив, точки сменяются галкой;
     · справа работа веток сходится обратно в одну — у нас в карточку цены.
   Фон — точечная сетка 12px, тот же графит 6,5%, что канон героя главной (у образца — canvas).
   Наше отличие одно: у образца все ветки идут сами, у нас цена — не агент, и это мысль страницы. */

.sup-hero-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.28fr); gap: 40px; align-items: center; }
/* ГЕРОЙ НА ВЕСЬ ЭКРАН (слово основателя 28.09: «видна часть нижнего блока»). Высота окна минус
   чердак (--chrome-h ставит script.js по живой высоте шапки); содержимое по центру. Окно
   сцены растёт вместе с экраном, но не ниже 560 и не выше 760. На узком экране — как было. */
@media (min-width: 981px) {
  .sup-hero { min-height: calc(100svh - var(--chrome-h, 80px) + 8px); display: flex; align-items: center; padding: 24px 0 32px; box-sizing: border-box; }
  .sup-hero > .wrap { width: 100%; }
  .sup-hero .sup-stage { height: clamp(560px, calc(100svh - var(--chrome-h, 80px) - 64px), 760px); margin-top: 0; }
}
.sup-hero-copy { min-width: 0; }

.sup-stage {
  position: relative; min-width: 0; height: 560px; overflow: hidden; border-radius: 18px;
  /* сцена посажена так, чтобы окно ввода встало на одну высоту со словом «поставкой.»
     в заголовке (слово основателя 28.09). Значение подобрано ЗАМЕРОМ в четыре прохода:
     сдвиг меняет высоту строки сетки, поэтому заголовок едет следом и разница сходится
     не сразу (443 → 422 → 413 → 409 → 405 при центре слова 405). */
  margin-top: -100px;
  /* ОКНО СЦЕНЫ. Поверхность с фирменной тенью, без рамки (слово основателя 28.09).
     Вверх и вниз окно растворяется: вертикальная маска гасит и фон, и тень, поэтому
     видимая граница остаётся только слева и справа, а сверху и снизу цвет затухает —
     окно читается как вырез в большом полотне, а не как коробка. */
  background-color: var(--site-surface);
  background-image: radial-gradient(circle 1px at 1px 1px, rgba(26, 26, 26, .065) 99%, transparent);
  background-size: 12px 12px;
  box-shadow: var(--site-shadow);
  /* границы — только боковые: вертикальная маска гасит их сверху и снизу сама */
  border-left: 1px solid var(--site-border);
  border-right: 1px solid var(--site-border);
  -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 13%, #000 87%, transparent 100%);
  mask-image: linear-gradient(180deg, transparent 0, #000 13%, #000 87%, transparent 100%);
  --spring: cubic-bezier(.16, 1, .3, 1);
  --lift:
    0 1px 1px rgba(26, 26, 26, .02), 0 2px 2px rgba(26, 26, 26, .022),
    0 4px 5px rgba(26, 26, 26, .026), 0 10px 14px rgba(26, 26, 26, .032),
    0 20px 30px rgba(26, 26, 26, .045);
  --edge: inset 0 1px 0 rgba(255, 255, 255, .92);
}
/* КРАЯ РАСТВОРЯЮТСЯ (аудит 28.09): камера увозит карточки за край, и без растворения у
   левой кромки торчали обрубки с надписью «АГЕНТ» — читалось как поломка. Шторки поверх
   полотна, под письмом; рамку окна не трогают — они внутри неё. */
.sup-stage::before, .sup-stage::after {
  content: ''; position: absolute; top: 0; bottom: 0; width: 84px; z-index: 1; pointer-events: none;
}
.sup-stage::before { left: 0; background: linear-gradient(90deg, var(--site-surface) 18%, rgba(255, 255, 255, 0)); }
.sup-stage::after { right: 0; background: linear-gradient(270deg, var(--site-surface) 18%, rgba(255, 255, 255, 0)); }
@media (max-width: 760px) { .sup-stage::before, .sup-stage::after { display: none; } }
/* полотно шире сцены: на нём стоят все узлы потока, камера возит его влево */
.fork-cam { position: absolute; left: 0; top: 0; width: 1240px; height: 100%; will-change: transform; }

/* ПИСЬМО — первый такт, живёт ДО полотна и не едет (аудит 28.09: вместо строки ввода) */
.fork-ask {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%) translateY(-14px); z-index: 2;
  display: flex; flex-direction: column; width: min(520px, 94%); box-sizing: border-box;
  padding: 14px 14px 14px 15px; border-radius: 16px;
  border: 1px solid rgba(26, 26, 26, .07); background: var(--site-surface);
  box-shadow: var(--edge), var(--lift);
  opacity: 0; transition: opacity .5s var(--spring), transform .6s var(--spring);
}
.sup-stage.is-ask .fork-ask { opacity: 1; transform: translate(-50%, -50%); }
/* лист сворачивается в карточку заявки: карточка стоит ровно в центре сцены (камера
   с неё начинает), поэтому письмо уменьшается «в неё», а не улетает в сторону */
.sup-stage.is-card .fork-ask { opacity: 0; transform: translate(-50%, -50%) scale(.52); transition: opacity .45s var(--spring) .1s, transform .55s var(--spring); }
.fork-ask-r { display: flex; align-items: center; gap: 13px; }
/* конверт с меткой «не прочитано»: метка гаснет, когда письмо открыли */
.fork-mail {
  position: relative; flex: 0 0 auto; width: 38px; height: 38px; border-radius: 10px;
  background: var(--site-ink-blue-14) center / 20px 20px no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%231b4fd8' stroke-width='1.6' stroke-linejoin='round'%3E%3Crect x='2.5' y='4.5' width='15' height='11' rx='1.5'/%3E%3Cpath d='M3 5.5l7 5.5 7-5.5'/%3E%3C/svg%3E");
}
.fork-mail::after {
  content: ''; position: absolute; top: -3px; right: -3px; width: 10px; height: 10px; border-radius: 50%;
  background: var(--site-ink-clay); box-shadow: 0 0 0 2px var(--site-surface);
  transition: opacity .25s var(--spring), transform .25s var(--spring);
}
.sup-stage.is-open .fork-mail::after { opacity: 0; transform: scale(.4); }
.fork-ask-x { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.fork-ask-s { font-size: 15px; font-weight: 500; line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fork-ask-t { font-size: 13px; line-height: 1.3; color: var(--site-text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fork-open {
  flex: 0 0 auto; padding: 8px 14px; border-radius: 999px;
  background: var(--site-primary); color: var(--site-on-primary); font-size: 12.5px; font-weight: 500;
  transition: transform .18s var(--spring), background-color .18s var(--spring);
}
.sup-stage.is-open .fork-open { animation: fork-press .42s var(--spring); }
.sup-stage.is-sheet .fork-open { opacity: .0; transition: opacity .3s var(--spring); }

/* ЛИСТ ЗАЯВКИ внутри письма: раскрывается по высоте, строки встают лесенкой. Смысл —
   «нажали и уже внутри»: ни входа, ни формы регистрации между письмом и позициями */
.fork-sheet { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .55s var(--spring); }
.sup-stage.is-sheet .fork-sheet { grid-template-rows: 1fr; }
.fork-sheet-in { overflow: hidden; min-height: 0; display: flex; flex-direction: column; }
.fork-sheet-note {
  display: flex; align-items: center; gap: 8px; margin: 14px 0 8px; padding-top: 12px;
  border-top: 1px solid var(--site-table-border); font-size: 12.5px; color: var(--site-text-2);
}
.fork-sheet-m { flex: 0 0 auto; width: 10px; height: 10px; border-radius: 2px; background: var(--site-accent); box-shadow: 0 0 0 1px rgba(26, 26, 26, .08); }
.fork-sheet-row, .fork-sheet-more {
  display: flex; justify-content: space-between; gap: 12px; padding: 7px 10px; border-radius: 8px;
  font-size: 13px; opacity: 0; translate: 0 6px;
}
.fork-sheet-row:nth-child(odd) { background: var(--site-bg); }
.fork-sheet-v { font-family: var(--mono); font-size: 12px; color: var(--site-text-2); }
.fork-sheet-more { color: var(--site-text-3); font-size: 12.5px; }
.sup-stage.is-sheet .fork-sheet-row, .sup-stage.is-sheet .fork-sheet-more {
  opacity: 1; translate: none;
  transition: opacity .35s var(--spring), translate .45s var(--spring);
  transition-delay: calc(.25s + var(--r, 0) * .18s);
}

/* КУРСОР — только у человека. Стрелка графитовая с белой обводкой, как системная */
.fork-cur {
  position: absolute; left: 0; top: 0; z-index: 5; width: 20px; height: 22px; pointer-events: none;
  transform-origin: 2px 2px; will-change: transform;   /* клик сжимает стрелку к острию — остриё не дёргается */
  opacity: 0; transition: opacity .3s ease;
  background: center / contain no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 22'%3E%3Cpath d='M2 1.5v16.2l4.3-4.1 2.9 6.6 3-1.3-2.9-6.5h6z' fill='%231a1a1a' stroke='%23fff' stroke-width='1.4' stroke-linejoin='round'/%3E%3C/svg%3E");
  filter: drop-shadow(0 2px 3px rgba(26, 26, 26, .25));
}
.fork-cur.is-on { opacity: 1; }
.fork-cur.is-click { animation: fork-cur-click .3s var(--spring); }
@keyframes fork-cur-click { 40% { scale: .82; } }
@keyframes fork-press { 35% { transform: scale(.92); } }
.fork-caret { width: 1px; height: 15px; background: var(--site-primary); animation: fork-caret 1s steps(2) infinite; }
@keyframes fork-caret { 50% { opacity: 0; } }

/* провода */
.fork-wires { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
.fork-wire { fill: none; stroke: rgba(26, 26, 26, .38); stroke-width: 1.4; stroke-linecap: round; opacity: 0; }
.sup-stage.is-fork .fork-wire { opacity: 1; transition: opacity .3s var(--spring); }
.fork-merge { opacity: 0 !important; }
.sup-stage.is-mine .fork-merge { opacity: 1 !important; }
.sup-stage.is-done .fork-wire { opacity: 0 !important; transition: opacity .5s var(--spring); }

/* БЕГУЩАЯ ТОЧКА: работа идёт по проводу от заявки к ветке, потом от веток к цене.
   Графит, не лайм: лайм — заливки от 8px (Р-19), а точка — 7px. */
.fork-dot {
  position: absolute; left: 0; top: 0; width: 7px; height: 7px; border-radius: 50%; z-index: 1;
  background: var(--site-primary); offset-rotate: 0deg; offset-distance: 0%; opacity: 0; pointer-events: none;
}
.sup-stage.is-fork .fork-dot:not(.fork-dot-m) { animation: fork-run 1s cubic-bezier(.5, 0, .3, 1) forwards; animation-delay: calc(var(--d, 0) * .3s + .35s); }
.sup-stage.is-mine .fork-dot-m { animation: fork-run .8s cubic-bezier(.5, 0, .3, 1) forwards; animation-delay: calc(var(--d, 0) * .12s + .2s); }
@keyframes fork-run { 0% { offset-distance: 0%; opacity: 0; } 12% { opacity: 1; } 88% { opacity: 1; } 100% { offset-distance: 100%; opacity: 0; } }

/* ПОДСВЕТКА ЦЕНЫ: пока поставщик ставит цифру, веер и провода уходят на полтона назад —
   у главного момента страницы свой свет */
.sup-stage.is-mine:not(.is-done) .fork-b, .sup-stage.is-mine:not(.is-done) .fork-start { opacity: .34; transition: opacity .6s var(--spring); transition-delay: 0s; }
.sup-stage.is-mine:not(.is-done) .fork-wire:not(.fork-merge) { opacity: .3; }
.sup-stage.is-mine:not(.is-done) .fork-mine { box-shadow: var(--edge), var(--lift), 0 0 0 3px rgba(223, 255, 0, .26), 0 0 0 14px rgba(223, 255, 0, .10), 0 24px 60px -12px rgba(26, 26, 26, .18); }

/* карточки: рамка-градиент обрисовывает слева направо, по телу идёт блик */
.fork-c {
  position: absolute; display: grid; grid-template-columns: 18px minmax(0, 1fr) auto;
  gap: 12px; align-items: center; overflow: hidden;
  padding: 14px 16px; border: 1px solid transparent; border-radius: 14px;
  background:
    linear-gradient(var(--site-surface), var(--site-surface)) padding-box,
    linear-gradient(100deg, rgba(26, 26, 26, .34) 0%, rgba(26, 26, 26, .12) 45%, rgba(26, 26, 26, .05) 100%) border-box;
  box-shadow: var(--edge), var(--lift);
  opacity: 0; transform: translateY(6px);
  transition: opacity .45s var(--spring), transform .45s var(--spring), box-shadow .4s var(--spring);
}
.fork-x { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.fork-t { font-size: 15px; line-height: 1.25; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fork-n { font-family: var(--mono); font-size: 11.5px; color: var(--site-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fork-by { font-family: var(--mono); font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--site-text-3); }
.fork-shine {
  position: absolute; inset: 0; pointer-events: none; border-radius: 13px;
  background: linear-gradient(100deg, transparent 30%, rgba(255, 255, 255, .85) 50%, transparent 70%);
  background-size: 260% 100%; background-position: 140% 0; opacity: 0;
}
.fork-b.is-on .fork-shine { animation: fork-shine 1.5s var(--spring) forwards; }
@keyframes fork-shine { 0% { opacity: 0; background-position: 140% 0; } 18% { opacity: 1; } 100% { opacity: 0; background-position: -40% 0; } }

.fork-m { position: relative; width: 18px; height: 18px; }
.fork-dots, .fork-ok { position: absolute; inset: 0; }
.fork-dots {
  background:
    radial-gradient(circle 2px at 2px 8px, var(--site-text-3) 99%, transparent),
    radial-gradient(circle 2px at 8px 8px, var(--site-text-3) 99%, transparent),
    radial-gradient(circle 2px at 14px 8px, var(--site-text-3) 99%, transparent);
  opacity: .4; animation: fork-blink 1s ease-in-out infinite;
}
@keyframes fork-blink { 0%, 100% { opacity: .3; } 50% { opacity: .85; } }
.fork-ok { border-radius: 4px; background: var(--site-accent); opacity: 0; transform: scale(.3); }
.fork-ok::after { content: ''; position: absolute; left: 6px; top: 4px; width: 4px; height: 7px; border: solid var(--site-primary); border-width: 0 1.6px 1.6px 0; transform: rotate(42deg); }

/* сводка пяти дел — только на телефоне (см. @media 760 ниже) */
.fork-sum { display: none; }
.fork-ticks { display: flex; gap: 6px; margin-top: 7px; }
.fork-tick { width: 14px; height: 14px; border-radius: 3px; background: var(--site-pill-bg); }
.sup-stage.is-fork .fork-tick { animation: fork-tick .3s var(--spring) forwards; animation-delay: calc(var(--d, 0) * .3s + .6s); }
@keyframes fork-tick { to { background: var(--site-accent); } }
.sup-stage.is-still .fork-tick { background: var(--site-accent); animation: none; }

/* узлы потока на полотне */
.fork-start { left: 30px; width: 262px; }   /* top/margin-top ставит script.js: ось по замеру */
.fork-start .fork-dots { display: none; }
.fork-start .fork-ok { opacity: 1; transform: none; }
.sup-stage.is-card .fork-start { opacity: 1; transform: none; }

.fork-b { left: 396px; width: 348px; }
/* шаг веера в пикселях, а не в процентах: окно стало выше, и проценты растянули бы
   ветки по всей высоте — плотность пучка важнее, лишняя высота уходит в затухание */
/* карточка ~62px, шаг 80px: пучок плотный, крайние ветки не уходят в затухание окна */
.fork-b-1 { top: calc(50% - 191px); }
.fork-b-2 { top: calc(50% - 111px); }
.fork-b-3 { top: calc(50% - 31px); }
.fork-b-4 { top: calc(50% + 49px); }
.fork-b-5 { top: calc(50% + 129px); }
.sup-stage.is-fork .fork-b { opacity: 1; transform: none; transition-delay: calc(var(--d, 0) * .3s + .3s); }
.sup-stage.is-fork .fork-dots { animation: fork-blink 1s ease-in-out infinite, fork-off .3s var(--spring) forwards; animation-delay: 0s, calc(var(--d, 0) * .3s + 1.7s); }
.sup-stage.is-fork .fork-b .fork-ok { animation: fork-ok .45s cubic-bezier(.34, 1.4, .64, 1) forwards; animation-delay: calc(var(--d, 0) * .3s + 1.7s); }
@keyframes fork-off { to { opacity: 0; } }
@keyframes fork-ok { from { opacity: 0; transform: scale(.3); } to { opacity: 1; transform: scale(1); } }

/* цена — единственный узел, который не делается сам */
.fork-mine {
  left: 856px; width: 300px;
  background:
    linear-gradient(var(--site-surface), var(--site-surface)) padding-box,
    linear-gradient(100deg, var(--site-accent), rgba(223, 255, 0, .45)) border-box;
  box-shadow: var(--edge), var(--lift), 0 0 0 3px rgba(223, 255, 0, .26);
}
.fork-mine .fork-dots { display: none; }
.fork-mine .fork-ok { opacity: 0; transform: scale(.3); }
.fork-mine.is-typed .fork-ok { opacity: 1; transform: none; transition: opacity .4s var(--spring), transform .4s cubic-bezier(.34, 1.4, .64, 1); }
.fork-mine .fork-by { color: var(--site-primary); font-weight: 500; }   /* на том же месте, что «АГЕНТ» у веток */
/* размер поля фиксирован ЦЕЛИКОМ: пустой span не держит строку, и поле прыгало по высоте
   с 12 до 33px в момент набора — замерено 28.09 (ширина была уже зафиксирована) */
.fork-field { display: inline-flex; align-items: center; gap: 1px; width: 140px; height: 38px; box-sizing: border-box; margin-top: 3px; padding: 5px 9px; border: 1px solid var(--site-table-border); border-radius: 8px; background: var(--site-bg); }
.fork-price { font-family: var(--mono); font-size: 16px; color: var(--site-primary); }
.fork-caret-2 { flex: 0 0 auto; }
.sup-stage.is-mine .fork-mine { opacity: 1; transform: none; transition-delay: .5s; }

/* ИТОГ — крупная карточка, как у образца итог заказа (слово основателя 28.09: «а то у нас
   анимация мелкая»). У образца: тихая строка о сверке агентом, крупный номер заказа,
   строки условий большим кеглем, внизу вложенная плашка со счётом. У нас то же, но КП. */
/* РАМКА КП ХОДИТ ПО КРУГУ (слово основателя 28.09): конический градиент в border-box,
   угол крутится через @property. Лайм идёт по ободу ДУГОЙ, а не сплошной нитью — так
   канон Р-19 («лайм — заливка, не тонкая линия») остаётся в силе: на каждом участке это
   пятно, а не хайрлайн. Где @property не поддержан (Firefox) — рамка просто стоит
   градиентом, карточка не страдает. */
@property --fork-ang { syntax: '<angle>'; initial-value: 0deg; inherits: false; }
.fork-done {
  left: 820px; width: 404px; display: block; padding: 22px 24px 20px;
  border: 1.5px solid transparent; border-radius: 16px;
  background:
    linear-gradient(var(--site-surface), var(--site-surface)) padding-box,
    conic-gradient(from var(--fork-ang),
      rgba(26, 26, 26, .10) 0deg,
      var(--site-accent) 55deg,
      rgba(26, 26, 26, .10) 130deg,
      rgba(26, 26, 26, .10) 230deg,
      var(--site-accent) 300deg,
      rgba(26, 26, 26, .10) 360deg) border-box;
}
/* два круга и встала: единственная петля страницы ушла (аудит 28.09) */
.sup-stage.is-done .fork-done { animation: fork-ring 1.6s linear .4s 2; }
@keyframes fork-ring { to { --fork-ang: 360deg; } }
.fork-done-h { display: flex; align-items: center; gap: 9px; font-size: 13px; color: var(--site-text-2); }
.fork-done-m { position: relative; width: 17px; height: 17px; border-radius: 4px; background: var(--site-accent); flex: 0 0 auto; }
.fork-done-m::after { content: ''; position: absolute; left: 5.5px; top: 4.5px; width: 4px; height: 7px; border: solid var(--site-primary); border-width: 0 1.7px 1.7px 0; transform: rotate(42deg); }
.fork-done-t { display: block; margin-top: 14px; font-size: 27px; line-height: 1.1; letter-spacing: -.01em; }
.fork-done-n { display: block; margin-top: 6px; font-family: var(--mono); font-size: 13px; letter-spacing: .04em; color: var(--site-text-2); }
.fork-rows { display: flex; flex-direction: column; gap: 9px; margin-top: 18px; }
.fork-row { display: flex; justify-content: space-between; align-items: baseline; gap: 14px; }
.fork-row-k { font-size: 15px; color: var(--site-text-2); white-space: nowrap; }
.fork-row-v { font-family: var(--mono); font-size: 14px; color: var(--site-primary); text-align: right; }
.fork-band {
  display: flex; justify-content: space-between; align-items: baseline; gap: 14px;
  margin-top: 18px; padding: 13px 15px; border-radius: 11px; background: var(--site-bg);
}
.fork-band-k { font-size: 14px; color: var(--site-text-2); }
.fork-band-v { font-family: var(--mono); font-size: 17px; color: var(--site-primary); }
/* шестое дело — строка исхода под суммой */
.fork-done-f { display: flex; align-items: center; gap: 9px; margin-top: 14px; font-size: 13px; color: var(--site-text-2); }
.fork-done-fm { flex: 0 0 auto; width: 10px; height: 10px; border-radius: 2px; background: var(--site-accent); box-shadow: 0 0 0 1px rgba(26, 26, 26, .08); }
.sup-stage.is-done .fork-mine { opacity: 0; transform: translateY(-6px); transition-delay: 0s; }
.sup-stage.is-done .fork-done { opacity: 1; transform: none; transition-delay: .4s; }
.sup-stage.is-done .fork-start, .sup-stage.is-done .fork-b { opacity: 0; transform: translateY(-6px); transition-delay: 0s; }

/* «уменьшить движение» — веер нарисован и отмечен, камера стоит */
.sup-stage.is-still .fork-cam { transition: none !important; }
.sup-stage.is-still .fork-c { opacity: 1; transform: none; }
.sup-stage.is-still .fork-ask, .sup-stage.is-still .fork-done { display: none; }
.sup-stage.is-still .fork-dots { opacity: 0; animation: none; }
.sup-stage.is-still .fork-b .fork-ok { opacity: 1; transform: none; animation: none; }
.sup-stage.is-still .fork-caret { animation: none; display: none; }
.sup-stage.is-still .fork-cur, .sup-stage.is-still .fork-dot { display: none; }

@media (max-width: 980px) {
  .sup-hero-grid { grid-template-columns: 1fr; gap: 30px; }
  .sup-stage { height: 520px; margin-top: 0; }
}
/* НА УЗКОМ ЭКРАНЕ камеры нет: полотно не помещается. Тот же сюжет идёт СВЕРХУ ВНИЗ
   (аудит 28.09, п. 7): письмо разворачивается в лист, под ним встают заявка, пять дел
   лесенкой, цена и итог. Курсора и точек нет — на тач-экране курсор был бы враньём. */
@media (max-width: 760px) {
  .sup-stage { height: auto; overflow: visible; display: flex; flex-direction: column; gap: 9px; background-image: none; background-color: transparent; box-shadow: none; border: 0; mask-image: none; -webkit-mask-image: none; }
  .fork-ask { position: relative; left: auto; top: auto; width: 100%; order: -1; transform: translateY(8px); }
  .sup-stage.is-ask .fork-ask { transform: none; }
  .sup-stage.is-card .fork-ask { opacity: 1; transform: none; }
  .sup-stage.is-card .fork-sheet { grid-template-rows: 0fr; }
  .sup-stage.is-card .fork-open { opacity: 0; }
  .fork-cam { position: static; width: 100%; height: auto; transform: none !important; display: flex; flex-direction: column; gap: 9px; }
  .fork-wires, .fork-cur, .fork-dot { display: none; }
  .fork-c { position: relative; left: auto; top: auto; width: 100%; margin: 0; }
  .fork-t { font-size: 14px; }
  .fork-b { display: none; }
  .fork-sum { display: grid; }
  .fork-sum .fork-n { white-space: normal; }   /* перечень дел целиком, без многоточия */
  .sup-stage.is-fork .fork-sum { opacity: 1; transform: none; transition-delay: .2s; }
  .sup-stage.is-fork .fork-sum .fork-dots { animation: fork-blink 1s ease-in-out infinite, fork-off .3s var(--spring) forwards; animation-delay: 0s, 2.1s; }
  .sup-stage.is-fork .fork-sum .fork-ok { animation: fork-ok .45s cubic-bezier(.34, 1.4, .64, 1) forwards; animation-delay: 2.1s; }
  .sup-stage.is-still .fork-sum .fork-ok { opacity: 1; transform: none; animation: none; }
  .sup-stage.is-still .fork-sum .fork-dots { opacity: 0; animation: none; }
  .fork-done { display: block; }
  .fork-ask-s, .fork-ask-t { white-space: normal; }   /* тема письма не режется многоточием */
  .sup-stage.is-mine:not(.is-done) .fork-b, .sup-stage.is-mine:not(.is-done) .fork-start { opacity: 1; }
  .sup-stage.is-done .fork-start, .sup-stage.is-done .fork-sum, .sup-stage.is-done .fork-mine { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .fork-dots, .fork-caret { animation: none; }
  .fork-shine { display: none; }
  .sup-stage.is-done .fork-done { animation: none; }   /* рамка стоит градиентом, не бежит */
}

/* заголовок труппы — двухфразный, ему нужна ширина: при общих 20ch он рассыпался на
   четыре строки, у образца такой заголовок держится в две */
.sup-crew .section-title { max-width: 28ch; }

/* ---------- ТРИ ЧИСЛА И ТРУППА (28.09) ----------
   Числа — кирпич главной (.numbers/.number), здесь только отбивка: блок идёт сразу под
   героем и не должен спорить с ним ростом. */
.sup-nums { padding-top: 0; padding-bottom: 72px; }
.sup-nums .numbers { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 860px) { .sup-nums .numbers { grid-template-columns: 1fr; } }

/* ---------- КАРТИНА «ХАОС → ПОРЯДОК» (пересборка 28.09) ----------
   Приём образца (знакомство с командой агентов), доведённый до нашего:
   · ОДИН МЕДИАБОКС на экран, тёплый, со своей рамкой: слева крупная шахматка, к середине
     она рассыпается редкими плитками и растворяется в точечную сетку, на которой стоит
     карточка. Хаос и порядок лежат на одном поле — переход виден, а не подразумевается.
   · ХАОС В ТРИ СЛОЯ: front — три крупные реплики, за которые цепляется глаз; mid — средний
     план; far — расфокус. Все носители одного вида (белая карточка с тенью), род канала —
     только значок слева. Чужих логотипов и фирменных цветов нет ни одного.
   · ЛАЙМ ОДИН, И ТОЛЬКО СПРАВА: квадрат-галка у каждого дела (26px заливкой — Р-19),
     та же лаймовая точка, что в марке «ЗИП.». Слева лайма нет вовсе.
   · ДВИЖЕНИЕ СВЕРХ ОБРАЗЦА: дела загораются по одному, и каждое гасит слева реплики, которые
     оно сняло (поле a в content.js). Конечное состояние — дефолт CSS: при reduced-motion
     виден тот же итоговый кадр. JS только отматывает картину назад и играет один прогон. */
.scene {
  --step: 600ms;
  position: relative; isolation: isolate; overflow: hidden;
  margin: 48px 0 0; height: clamp(600px, 47vw, 680px);
  border-radius: 18px; border: 1px solid var(--site-border); background: #f5f3ee;
}
/* поле: шахматка слева + редкие плитки на стыке (сетка 64px от левого края бокса) */
.scene::before {
  content: ''; position: absolute; inset: 0; z-index: -2;
  background:
    linear-gradient(#ebe8e0, #ebe8e0) 640px 64px / 64px 64px no-repeat,
    linear-gradient(#ebe8e0, #ebe8e0) 768px 192px / 64px 64px no-repeat,
    linear-gradient(#ebe8e0, #ebe8e0) 704px 384px / 64px 64px no-repeat,
    linear-gradient(#ebe8e0, #ebe8e0) 832px 512px / 64px 64px no-repeat,
    linear-gradient(#ebe8e0, #ebe8e0) 896px 0 / 64px 64px no-repeat,
    linear-gradient(#ebe8e0, #ebe8e0) 640px 576px / 64px 64px no-repeat,
    repeating-conic-gradient(#ebe8e0 0 25%, transparent 0 50%) 0 0 / 128px 128px;
  -webkit-mask-image: linear-gradient(90deg, #000 0 36%, rgba(0, 0, 0, .7) 50%, transparent 72%);
  mask-image: linear-gradient(90deg, #000 0 36%, rgba(0, 0, 0, .7) 50%, transparent 72%);
}
/* точечная сетка справа — та же мера, что в герое (12px, графит 6.5%) */
.scene::after {
  content: ''; position: absolute; inset: 0; z-index: -1;
  background: radial-gradient(circle 1px at 1px 1px, rgba(26, 26, 26, .13) 99%, transparent) 0 0 / 14px 14px;
  -webkit-mask-image: linear-gradient(90deg, transparent 34%, #000 66%);
  mask-image: linear-gradient(90deg, transparent 34%, #000 66%);
}

/* ---- левая половина: завал ---- */
.scene-noise { position: absolute; inset: 0 36% 0 0; }
.noise-b { position: absolute; z-index: 2; }
.noise-b[data-m="front"] { z-index: 3; }
.noise-b[data-m="far"] { z-index: 1; }
.noise-b i { font-style: normal; }
.noise-in {
  position: relative; display: flex; align-items: center; gap: 12px;
  padding: 11px 18px 11px 11px; border-radius: 14px; background: var(--site-surface);
  font-size: 15px; line-height: 1.3; color: var(--site-primary); white-space: nowrap;
  box-shadow: 0 1px 2px rgba(26, 26, 26, .05), 0 12px 26px -12px rgba(26, 26, 26, .24);
}
.noise-b[data-m="front"] .noise-in {
  gap: 14px; padding: 15px 24px 15px 14px; border-radius: 16px; font-size: 19px;
  box-shadow: 0 1px 2px rgba(26, 26, 26, .06), 0 22px 40px -16px rgba(26, 26, 26, .3);
}
.noise-tx { display: flex; flex-direction: column; }
.noise-pre { font-size: 11px; color: var(--site-text-3); margin-bottom: 1px; }
.noise-meta { font-size: 12px; color: var(--site-text-3); margin-top: 2px; }
.noise-pre:empty, .noise-meta:empty, .noise-n:empty, .noise-you:empty { display: none; }
/* «это — вам»: реплика, которую агенты не снимают — срок ставит поставщик. Пометка встаёт
   последней, когда все шесть дел отработали; у неё одна задача — сказать «остальное ваше» */
.noise-you {
  position: absolute; left: calc(100% + 10px); top: 50%; translate: 0 -50%;
  padding: 5px 10px; border-radius: 999px; white-space: nowrap;
  background: var(--site-primary); color: var(--site-on-primary); font-size: 12px; font-weight: 500;
}
.scene--anim .noise-you { opacity: 0; translate: -6px -50%; }
.scene--anim.is-resolve .noise-you { opacity: 1; translate: 0 -50%; transition: opacity .4s var(--ease) calc(6 * var(--step) + 200ms), translate .5s var(--spring) calc(6 * var(--step) + 200ms); }
.noise-b[data-key="file"] .noise-t { font-family: var(--mono); font-size: .88em; letter-spacing: -.01em; }

/* значок носителя — единственный признак канала. Свои нейтральные глифы. */
.noise-ic {
  flex: none; width: 30px; height: 30px; border-radius: 8px;
  background: var(--site-pill-bg) center / 17px 17px no-repeat;
}
.noise-b[data-m="front"] .noise-ic { width: 38px; height: 38px; border-radius: 10px; background-size: 21px 21px; }
.noise-b[data-key="msg"] .noise-ic {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%234a4a44' stroke-width='1.6' stroke-linejoin='round'%3E%3Cpath d='M4 4.5h12a1.5 1.5 0 0 1 1.5 1.5v7a1.5 1.5 0 0 1-1.5 1.5H9l-3.5 3v-3H4A1.5 1.5 0 0 1 2.5 13V6A1.5 1.5 0 0 1 4 4.5z'/%3E%3C/svg%3E");
}
.noise-b[data-key="mail"] .noise-ic {
  background-color: var(--site-ink-blue-14);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%231b4fd8' stroke-width='1.6' stroke-linejoin='round'%3E%3Crect x='2.5' y='4.5' width='15' height='11' rx='1.5'/%3E%3Cpath d='M3 5.5l7 5.5 7-5.5'/%3E%3C/svg%3E");
}
.noise-b[data-key="file"] .noise-ic {
  background-color: var(--site-ink-clay-14);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23bd4418' stroke-width='1.6' stroke-linejoin='round'%3E%3Cpath d='M5 2.5h6.5l3.5 3.5v11.5H5z'/%3E%3Cpath d='M11.5 2.5V6H15M7.5 10h5M7.5 13h5'/%3E%3C/svg%3E");
}
.noise-b[data-key="form"] .noise-ic {
  background-color: var(--site-ink-blue-22);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%231b4fd8' stroke-width='1.6'%3E%3Crect x='2.5' y='3.5' width='15' height='13' rx='1.5'/%3E%3Cpath d='M2.5 8h15M2.5 12h15M8 8v8.5'/%3E%3C/svg%3E");
}
/* счётчик непрочитанных — навесное на углу, главный источник «живого» */
.noise-n {
  position: absolute; top: -9px; right: -9px; min-width: 22px; height: 20px; padding: 0 6px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 10px; background: var(--site-ink-clay); color: #fff;
  font-size: 11.5px; font-weight: 600; box-shadow: 0 0 0 2px #f5f3ee;
}

/* глубина: расфокус — плотность без нагрузки на чтение */
.noise-b[data-m="far"] .noise-in { opacity: .5; filter: blur(3px); scale: .9; }

/* раскладка руками — сетка тут врала бы. Порядок = порядок в content.js; of-type, а не
   child: первым ребёнком списка стоит <template>, и nth-child сдвигал всё на одну */
.noise-b:nth-of-type(1)  { left: 5%;  top: 5%; }
.noise-b:nth-of-type(2)  { left: 21%; top: 11%; rotate: -1deg; }
.noise-b:nth-of-type(3)  { left: 2%;  top: 27%; }
.noise-b:nth-of-type(4)  { left: 64%; top: 2%; }
.noise-b:nth-of-type(5)  { left: 7%;  top: 41%; rotate: .8deg; }
.noise-b:nth-of-type(6)  { left: 57%; top: 29%; rotate: 1deg; }
.noise-b:nth-of-type(7)  { left: 47%; top: 53%; rotate: -.6deg; }
.noise-b:nth-of-type(8)  { left: 1%;  top: 60%; }
.noise-b:nth-of-type(9)  { left: 16%; top: 71%; rotate: -.8deg; }
.noise-b:nth-of-type(10) { left: 58%; top: 80%; rotate: .6deg; }
.noise-b:nth-of-type(11) { left: 3%;  top: 89%; }

/* СНЯТО АГЕНТОМ — итоговое состояние реплики: теряет цвет и уходит на полтона назад, но
   остаётся читаемой — завал должен быть виден и в итоговом кадре, иначе картине нечего
   противопоставить карточке */
.noise-b[data-a] .noise-in { opacity: .5; filter: grayscale(1); scale: .97; }
.noise-b[data-m="far"][data-a] .noise-in { opacity: .3; filter: blur(3px) grayscale(1); scale: .88; }

/* ---- правая половина: порядок ---- */
.scene-card {
  position: absolute; z-index: 4; right: 56px; top: 50%; translate: 0 -50%;
  width: min(452px, 38%); padding: 26px 28px 28px; border-radius: 16px;
  background: var(--site-surface); border: 1px solid var(--site-border);
  box-shadow:
    0 1px 1px rgba(26, 26, 26, .03), 0 6px 10px rgba(26, 26, 26, .03),
    0 18px 30px rgba(26, 26, 26, .05), 0 40px 64px -24px rgba(26, 26, 26, .12);
}
.scene-card-t { margin: 0; padding-bottom: 16px; font-size: 22px; font-weight: 500; letter-spacing: -.01em; border-bottom: 1px solid var(--site-table-border); }
.scene-list { margin: 18px 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 15px; }
.scene-i { display: grid; grid-template-columns: 26px minmax(0, 1fr); gap: 14px; align-items: start; }
.scene-mark {
  width: 26px; height: 26px; border-radius: 7px; margin-top: 1px;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--site-accent); color: var(--site-primary);
}
.scene-mark svg { width: 15px; height: 15px; }
.scene-v { display: block; font-size: 16px; font-weight: 500; line-height: 1.35; color: var(--site-primary); }
.scene-x { display: block; margin-top: 2px; font-size: 13.5px; line-height: 1.45; color: var(--site-text-2); text-wrap: pretty; }

/* подпись под картиной: пока идёт прогон, точка дышит */
.scene-cap {
  position: absolute; z-index: 4; right: 56px; bottom: 20px; width: min(452px, 38%); margin: 0;
  display: flex; align-items: center; justify-content: center; gap: 9px;
  font-size: 13px; color: var(--site-text-2);
}
.scene-cap-dot { width: 8px; height: 8px; border-radius: 2px; background: var(--site-accent); box-shadow: 0 0 0 1px rgba(26, 26, 26, .08); }

/* ---- один прогон ---- */
.scene--anim .noise-b { opacity: 0; translate: 0 12px; }
.scene--anim.is-play .noise-b {
  opacity: 1; translate: none;
  transition: opacity .5s var(--spring) calc(var(--i, 0) * 70ms), translate .6s var(--spring) calc(var(--i, 0) * 70ms);
}
.scene--anim .noise-b[data-a] .noise-in { opacity: 1; filter: none; scale: 1; }
.scene--anim .noise-b[data-m="far"][data-a] .noise-in { opacity: .5; filter: blur(3px); scale: .9; }
.scene--anim .scene-mark { background: var(--site-pill-bg); color: transparent; }
.scene--anim .scene-v { color: var(--site-text-3); }
.scene--anim .scene-x { opacity: .45; }

.scene--anim.is-resolve .noise-b[data-a] .noise-in {
  opacity: .5; filter: grayscale(1); scale: .97;
  transition: opacity .7s var(--ease), filter .7s var(--ease), scale .7s var(--spring);
  transition-delay: calc(var(--a, 0) * var(--step) + 120ms);
}
.scene--anim.is-resolve .noise-b[data-m="far"][data-a] .noise-in { opacity: .3; filter: blur(3px) grayscale(1); scale: .88; }
.scene--anim.is-resolve .scene-mark { background: var(--site-accent); color: var(--site-primary); transition: background-color .3s var(--ease), color .3s var(--ease); transition-delay: calc(var(--i, 0) * var(--step)); }
.scene--anim.is-resolve .scene-v { color: var(--site-primary); transition: color .3s var(--ease) calc(var(--i, 0) * var(--step)); }
.scene--anim.is-resolve .scene-x { opacity: 1; transition: opacity .3s var(--ease) calc(var(--i, 0) * var(--step)); }
.scene--anim.is-resolve .scene-mark svg { animation: mark-in .34s var(--spring) both; animation-delay: calc(var(--i, 0) * var(--step)); }
@keyframes mark-in { from { scale: .4; } }
.scene--anim.is-resolve .scene-cap-dot { animation: cap-dot 1.2s var(--ease) 3; }
@keyframes cap-dot { 50% { scale: 1.5; } }

/* ---- узкий экран: завал сверху, карточка наезжает на его хвост ---- */
@media (max-width: 1100px) {
  .scene-card, .scene-cap { right: 32px; width: min(420px, 44%); }
  .noise-b[data-m="front"] .noise-in { font-size: 17px; }
}
@media (max-width: 900px) {
  .scene { height: auto; display: flex; flex-direction: column; margin-top: 36px; }
  .scene::before {
    background: repeating-conic-gradient(#ebe8e0 0 25%, transparent 0 50%) 0 0 / 80px 80px;
    -webkit-mask-image: linear-gradient(180deg, #000 0 40%, transparent 70%); mask-image: linear-gradient(180deg, #000 0 40%, transparent 70%);
  }
  .scene::after { -webkit-mask-image: linear-gradient(180deg, transparent 40%, #000 75%); mask-image: linear-gradient(180deg, transparent 40%, #000 75%); }
  .scene-noise { position: relative; inset: auto; height: 420px; }
  /* реплики однострочные: переносы делали из завала кашу. Длинные срезает край бокса —
     так и у образца, кадр шире окна */
  .noise-in { font-size: 13.5px; gap: 10px; padding: 9px 14px 9px 9px; }
  .noise-ic { width: 26px; height: 26px; background-size: 15px 15px; }
  .noise-b[data-m="front"] .noise-in { font-size: 15.5px; padding: 11px 18px 11px 11px; }
  .noise-b[data-m="front"] .noise-ic { width: 32px; height: 32px; background-size: 18px 18px; }
  .noise-b[data-m="far"], .noise-b[data-m="slim"] { display: none; }
  .noise-b:nth-of-type(2)  { left: 4%;  top: 3%; }
  .noise-b:nth-of-type(3)  { left: 20%; top: 19%; }
  .noise-b:nth-of-type(5)  { left: 2%;  top: 33%; }
  .noise-b:nth-of-type(6)  { left: 38%; top: 48%; }
  .noise-b:nth-of-type(7)  { left: 3%;  top: 59%; }
  .noise-b:nth-of-type(9)  { left: 10%; top: 74%; }
  .noise-b:nth-of-type(10) { left: 34%; top: 88%; }
  .scene-card { position: relative; right: auto; top: auto; translate: none; width: auto; margin: -24px 14px 0; padding: 22px 20px 24px; }
  .scene-card-t { font-size: 20px; }
  .scene-cap { position: relative; right: auto; bottom: auto; width: auto; margin: 18px 20px 22px; }
}

/* ---------- ПОЛКА ПОД КАРТИНОЙ (вариант А, 28.09) ----------
   Опись остальных семи агентов — не сноска, а продолжение бокса картины: тот же тёплый цвет,
   та же рамка, тот же знак агента (квадрат). Свёрнута — полоса с семью серыми квадратами;
   раскрыта — квадраты на полосе загораются, ниже сетка 4×2: первая ячейка — лид крупно,
   остальные семь — плитки «чего вам не пришлось делать». Плитки встают и загораются по
   одной — тем же ходом, что шесть дел в карточке выше. */
.shelf {
  margin-top: 12px; border: 1px solid var(--site-border); border-radius: 16px;
  background: #f5f3ee; overflow: hidden;
}
.shelf-s {
  list-style: none; cursor: pointer; display: flex; align-items: center; gap: 18px;
  padding: 16px 18px 16px 22px;
}
.shelf-s::-webkit-details-marker { display: none; }
.shelf-sq { display: inline-flex; gap: 5px; flex: 0 0 auto; }
.shelf-sq i { width: 14px; height: 14px; border-radius: 3px; background: #e3dfd5; transition: background-color .3s var(--ease); }
.shelf[open] .shelf-sq i { background: var(--site-accent); }
.shelf-sq i:nth-child(2) { transition-delay: .06s; } .shelf-sq i:nth-child(3) { transition-delay: .12s; }
.shelf-sq i:nth-child(4) { transition-delay: .18s; } .shelf-sq i:nth-child(5) { transition-delay: .24s; }
.shelf-sq i:nth-child(6) { transition-delay: .3s; }  .shelf-sq i:nth-child(7) { transition-delay: .36s; }
.shelf-l { flex: 1; min-width: 0; font-size: 15px; font-weight: 500; color: var(--site-primary); }
.shelf-btn {
  flex: 0 0 auto; display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px;
  border-radius: 999px; border: 1px solid var(--site-border); background: var(--site-surface);
  font-size: 13.5px; font-weight: 500; color: var(--site-primary);
  transition: background-color .2s var(--ease), color .2s var(--ease), border-color .2s var(--ease);
}
.shelf-s:hover .shelf-btn { background: var(--site-primary); border-color: var(--site-primary); color: var(--site-on-primary); }
.shelf-btn svg { width: 10px; height: 6px; transition: rotate .25s var(--ease); }
.shelf[open] .shelf-btn svg { rotate: 180deg; }
.shelf-hide, .shelf[open] .shelf-show { display: none; }
.shelf[open] .shelf-hide { display: inline; }

.shelf-body {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px;
  padding: 4px 18px 18px;
}
.shelf-g { display: contents; }
/* первая ячейка сетки — лид крупно, без плитки: 1 + 7 = две ровные строки по четыре */
.shelf-lead {
  margin: 0; align-self: center; padding: 6px 14px 6px 4px;
  font-size: 21px; line-height: 1.3; letter-spacing: -.01em; color: var(--site-primary); text-wrap: balance;
}
.shelf-t {
  display: flex; flex-direction: column; padding: 16px 16px 18px; border-radius: 12px;
  background: var(--site-surface); border: 1px solid var(--site-border);
  box-shadow: 0 1px 2px rgba(26, 26, 26, .03), 0 8px 18px -12px rgba(26, 26, 26, .16);
}
.shelf-t-h { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.shelf-t-m { width: 14px; height: 14px; border-radius: 3px; background: var(--site-accent); }
.shelf-t-g { font-size: 11.5px; color: var(--site-text-3); padding: 2px 8px; border-radius: 999px; background: var(--site-pill-bg); white-space: nowrap; }
.shelf-t-n { margin-top: 14px; font-size: 15px; font-weight: 500; line-height: 1.3; color: var(--site-primary); }
.shelf-t-k { margin-top: 10px; font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--site-text-3); }
.shelf-t-v { margin-top: 3px; font-size: 14px; line-height: 1.4; color: var(--site-text-2); text-wrap: pretty; }

/* раскрытие: лид, затем плитки встают лесенкой и их квадраты загораются */
.shelf[open] .shelf-lead { animation: shelf-in .45s var(--spring) both; }
.shelf[open] .shelf-t { animation: shelf-in .45s var(--spring) both; animation-delay: calc(.08s + var(--i, 0) * 70ms); }
.shelf[open] .shelf-t-m { background: var(--site-pill-bg); animation: shelf-mark .3s var(--ease) forwards; animation-delay: calc(.35s + var(--i, 0) * 70ms); }
@keyframes shelf-in { from { opacity: 0; translate: 0 8px; } }
@keyframes shelf-mark { to { background: var(--site-accent); } }
@media (prefers-reduced-motion: reduce) {
  .shelf[open] .shelf-lead, .shelf[open] .shelf-t { animation: none; }
  .shelf[open] .shelf-t-m { animation: none; background: var(--site-accent); }
}

@media (max-width: 1100px) {
  .shelf-body { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .shelf-lead { grid-column: 1 / -1; padding: 6px 4px 8px; }
}
@media (max-width: 560px) {
  .shelf-s { flex-wrap: wrap; gap: 12px 14px; padding: 16px; }
  .shelf-l { flex-basis: 100%; order: -1; }
  .shelf-btn { margin-left: auto; }
  .shelf-body { grid-template-columns: 1fr; padding: 2px 12px 14px; }
  .shelf-lead { font-size: 18px; }
}

/* ---------- ПОСЛЕ ОТПРАВКИ — чёрный экран, ядро страницы (28.09) ----------
   Приём тёмной панели образца: слева пять моментов, справа фрагмент продукта светлыми
   карточками на тёмном поле. Лайм — только заливки ≥8px (Р-19): квадрат активного номера и
   галки во фрагментах; полоса прогресса белая. */
.sup-after .section-title { max-width: 24ch; }
.sup-after .tone { color: rgba(255, 255, 255, .5); }
.after { margin-top: 56px; display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr); gap: 40px; align-items: center; }
.after-list { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; }
.after-i { border-top: 1px solid rgba(255, 255, 255, .12); }
.after-i:last-child { border-bottom: 1px solid rgba(255, 255, 255, .12); }
.after-b {
  position: relative; width: 100%; display: grid; grid-template-columns: 40px minmax(0, 1fr); gap: 12px;
  padding: 20px 4px 22px; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer;
}
.after-n { font-family: var(--mono); font-size: 12px; color: rgba(255, 255, 255, .4); padding-top: 4px; }
.after-t { display: block; font-size: 20px; font-weight: 500; line-height: 1.3; color: rgba(255, 255, 255, .5); transition: color .3s var(--ease); }
.after-d {
  display: block; max-height: 0; opacity: 0; overflow: hidden; font-size: 15px; line-height: 1.5; color: rgba(255, 255, 255, .62);
  transition: max-height .45s var(--spring), opacity .35s var(--ease), margin-top .45s var(--spring); text-wrap: pretty;
}
.after-i.is-on .after-t, .after-b:hover .after-t { color: #fff; }
.after-i.is-on .after-d { max-height: 7.5em; opacity: 1; margin-top: 8px; }
.after-i.is-on .after-n { color: var(--site-primary); background: var(--site-accent); border-radius: 4px; width: max-content; height: max-content; padding: 3px 6px; }
.after-bar { position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: rgba(255, 255, 255, .85); transform: scaleX(0); transform-origin: left; }
.after.is-auto .after-i.is-on .after-bar { animation: after-bar var(--after-step, 5s) linear forwards; }
.after-i:last-child .after-bar { display: none; }
@keyframes after-bar { to { transform: scaleX(1); } }

.after-panel {
  position: relative; height: 470px; border-radius: 20px; overflow: hidden;
  background: #232323 radial-gradient(circle 1px at 1px 1px, rgba(255, 255, 255, .09) 99%, transparent) 0 0 / 14px 14px;
  border: 1px solid rgba(255, 255, 255, .08);
}
.after-f {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: 32px;
  opacity: 0; translate: 0 14px; pointer-events: none;
  transition: opacity .45s var(--spring), translate .6s var(--spring);
}
.after-f.is-on { opacity: 1; translate: none; }

/* фрагменты: светлые карточки продукта */
.af-card {
  width: min(430px, 100%); box-sizing: border-box; padding: 22px 24px; border-radius: 14px;
  background: var(--site-surface); color: var(--site-primary);
  box-shadow: 0 1px 0 rgba(255, 255, 255, .6) inset, 0 30px 60px -20px rgba(0, 0, 0, .6);
}
.af-h { display: flex; align-items: center; gap: 10px; font-size: 20px; font-weight: 500; }
.af-h-plain { font-size: 18px; }
.af-mark { position: relative; flex: 0 0 auto; width: 20px; height: 20px; border-radius: 5px; background: var(--site-accent); }
.af-mark::after { content: ''; position: absolute; left: 7px; top: 4px; width: 5px; height: 9px; border: solid var(--site-primary); border-width: 0 1.8px 1.8px 0; transform: rotate(42deg); }
.af-meta { margin-top: 6px; font-family: var(--mono); font-size: 12px; color: var(--site-text-3); }
.af-rows { display: flex; flex-direction: column; gap: 10px; margin-top: 18px; }
.af-row { display: flex; justify-content: space-between; align-items: baseline; gap: 14px; font-size: 14.5px; }
.af-k { color: var(--site-text-2); }
.af-v { font-family: var(--mono); font-size: 14px; text-align: right; white-space: nowrap; }
.af-row-total { margin-top: 4px; padding: 12px 14px; border-radius: 10px; background: var(--site-bg); }
.af-row-total .af-v { font-size: 17px; }
.af-btn { display: inline-flex; margin-top: 16px; padding: 9px 16px; border-radius: 999px; background: var(--site-primary); color: var(--site-on-primary); font-size: 13.5px; font-weight: 500; }
.af-btn-ghost { background: none; color: var(--site-primary); border: 1px solid var(--site-border); }
/* входящие */
.af-inbox { padding: 10px 10px 12px; }
.af-inbox-h { padding: 8px 12px 10px; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: var(--site-text-3); }
.af-mail { display: grid; grid-template-columns: 10px minmax(0, 1fr) auto; gap: 12px; align-items: start; padding: 12px; border-radius: 10px; }
.af-mail + .af-mail { border-top: 1px solid var(--site-table-border); border-radius: 0; }
.af-mail.is-unread { background: #f3f5fc; border-radius: 10px; }
.af-dot { width: 8px; height: 8px; margin-top: 6px; border-radius: 50%; background: transparent; }
.af-mail.is-unread .af-dot { background: var(--site-ink-blue); }
.af-mail-x { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.af-mail-s { font-size: 14px; color: var(--site-text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.af-mail.is-unread .af-mail-s { color: var(--site-primary); font-weight: 600; white-space: normal; }
.af-mail-p { font-size: 13px; color: var(--site-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.af-mail.is-unread .af-mail-p { color: var(--site-text-2); white-space: normal; }
.af-mail-t { font-size: 12px; color: var(--site-text-3); }
/* новое предложение */
.af-disc { display: flex; align-items: center; gap: 10px; margin-top: 16px; }
.af-disc .af-btn { margin-top: 0; }
.af-field { display: inline-flex; align-items: center; gap: 10px; padding: 7px 12px; border: 1px solid var(--site-border); border-radius: 8px; font-size: 13px; }
.af-field-k { color: var(--site-text-3); }
.af-field-v { font-family: var(--mono); font-size: 14px; }
.af-rev .af-k { font-size: 13.5px; }
.af-old { font-family: var(--mono); font-size: 12.5px; color: var(--site-text-3); margin-right: 10px; }
.af-new { font-family: var(--mono); font-size: 14px; }
.af-foot { margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--site-table-border); font-size: 12.5px; color: var(--site-text-3); }
/* письмо итога */
.af-letter-s { font-size: 16px; font-weight: 600; }
.af-letter-b { margin: 18px 0 0; font-size: 15px; line-height: 1.5; }
.af-why { display: inline-block; margin: 12px 0 0; padding: 6px 12px; border-radius: 8px; background: var(--site-pill-bg); font-size: 14px; }
.af-letter-t { margin: 14px 0 0; font-size: 14px; color: var(--site-text-2); }
/* выиграли */
.af-stack { width: min(430px, 100%); display: flex; flex-direction: column; gap: 12px; }
.af-banner { display: flex; align-items: flex-start; gap: 12px; font-size: 15px; line-height: 1.45; font-weight: 500; }
.af-banner .af-mark { margin-top: 1px; }

@media (max-width: 900px) {
  .after { grid-template-columns: 1fr; gap: 24px; margin-top: 36px; }
  .after-panel { height: 420px; }
  .after-t { font-size: 17px; }
  .after-f { padding: 18px; }
}
@media (prefers-reduced-motion: reduce) {
  .after-f, .after-d { transition: none; }
}

/* ---------- ПРАВИЛА — светлые, шесть строк сеткой (28.09) ---------- */
.rules { margin: 44px 0 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; border-top: 1px solid var(--site-border); }
.rule {
  padding: 26px 26px 30px 0; font-size: 20px; line-height: 1.35; letter-spacing: -.005em; color: var(--site-primary);
  border-bottom: 1px solid var(--site-border); text-wrap: pretty;
}
.rule .tone { color: var(--site-text-3); }
@media (max-width: 900px) { .rules { grid-template-columns: 1fr; } .rule { padding: 20px 0; font-size: 18px; } }

/* три языка — строкой в «Как это выглядит» */
.sup-langs-row { margin-top: 28px; }
.sup-langs-row .sup-pills { margin: 0; }
.sup-langs-note { margin: 12px 0 0; font-size: 14px; color: var(--site-text-2); }

/* ---------- ДОМ ПОСТАВЩИКА (28.09) ----------
   Слева утро поставщика — фрагмент экрана «Кабинет», справа удобства по разделам кабинета
   и единственное действие страницы. Окно — тот же язык «образца экрана», что у двери. */
.sup-office .section-title { max-width: 30ch; text-wrap: balance; }
.home { margin-top: 52px; display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); gap: 56px; align-items: center; }
.home-shot { min-width: 0; }
.mo {
  border-radius: 14px; overflow: hidden; background: var(--site-surface);
  border: 1px solid var(--site-border); box-shadow: var(--site-shadow);
}
.mo-bar { display: flex; align-items: center; gap: 6px; padding: 11px 14px; border-bottom: 1px solid var(--site-table-border); background: var(--site-bg); }
.mo-bar i { width: 8px; height: 8px; border-radius: 50%; background: #e3dfd5; }
.mo-bar-t { margin-left: 8px; font-size: 12.5px; color: var(--site-text-2); }
.mo-body { padding: 18px; display: flex; flex-direction: column; gap: 14px; background: #f7f6f2; }
.mo-stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.mo-stat { padding: 12px 14px; border-radius: 10px; background: var(--site-surface); border: 1px solid var(--site-table-border); display: flex; flex-direction: column; gap: 4px; }
.mo-stat-k { font-size: 12px; color: var(--site-text-3); }
.mo-stat-v { font-size: 24px; line-height: 1.1; letter-spacing: -.01em; }
.mo-stat-of { font-size: 13px; color: var(--site-text-3); letter-spacing: 0; }
.mo-card { border-radius: 12px; background: var(--site-surface); border: 1px solid var(--site-table-border); padding: 6px 6px 8px; }
.mo-card-h { padding: 10px 12px 8px; font-size: 14px; font-weight: 500; }
.mo-task { display: grid; grid-template-columns: 14px minmax(0, 1fr) auto; gap: 12px; align-items: center; padding: 11px 12px; border-top: 1px solid var(--site-table-border); }
.mo-task-m { width: 14px; height: 14px; border-radius: 3px; border: 1.5px solid #d6d1c5; box-sizing: border-box; }
.mo-task-x { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.mo-task-t { font-size: 14px; }
.mo-task-n { font-family: var(--mono); font-size: 11.5px; color: var(--site-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mo-tag { font-size: 11.5px; padding: 3px 9px; border-radius: 999px; background: var(--site-ink-clay-14); color: var(--site-ink-clay); white-space: nowrap; }

.home-copy { min-width: 0; }
.home-list { margin: 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px 28px; }
.home-i { display: flex; flex-direction: column; gap: 5px; padding-top: 14px; border-top: 1px solid var(--site-border); }
.home-n { font-size: 16px; font-weight: 500; }
.home-d { font-size: 14px; line-height: 1.45; color: var(--site-text-2); text-wrap: pretty; }
.home-cta { margin-top: 34px; display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.home-cta-n { margin: 0; font-size: 13.5px; color: var(--site-text-2); }

/* ---------- ДВА БОКОВЫХ ВХОДА (28.09) ---------- */
.side { margin: 44px 0 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.side-c {
  display: flex; flex-direction: column; padding: 28px 28px 26px; border-radius: 16px;
  background: var(--site-surface); border: 1px solid var(--site-border);
}
.side-tag { align-self: flex-start; padding: 4px 11px; border-radius: 999px; background: var(--site-pill-bg); font-size: 12.5px; color: var(--site-pill-text); }
.side-c:last-child .side-tag { background: rgba(223, 255, 0, .35); color: var(--site-primary); }   /* пилот — единственная лаймовая метка */
/* «Своя сеть»: цепочка без номеров, «Вы» — в центре, тёмным */
.side-c:nth-child(2) .side-flow li::before { content: none; }
.side-c:nth-child(2) .side-flow li:nth-of-type(3) { background: var(--site-primary); color: var(--site-on-primary); border-color: var(--site-primary); }   /* «Ваш кабинет» — точка прибытия */
.side-c:nth-child(2) .side-flow li + li::after { content: none; }
.side-n:empty { display: none; }
.side-t { margin: 18px 0 0; font-size: 24px; line-height: 1.2; letter-spacing: -.01em; }
.side-d { margin: 10px 0 0; font-size: 15px; line-height: 1.5; color: var(--site-text-2); max-width: 46ch; }
.side-flow { margin: 18px 0 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; counter-reset: fl; }
.side-flow:not(:has(li)) { display: none; }
.side-flow li { counter-increment: fl; display: inline-flex; align-items: center; gap: 8px; padding: 6px 11px; border-radius: 8px; background: var(--site-bg); border: 1px solid var(--site-table-border); font-size: 13px; }
.side-flow li::before { content: counter(fl); font-family: var(--mono); font-size: 11px; color: var(--site-text-3); }
.side-n { margin: 18px 0 0; font-size: 13.5px; color: var(--site-text-3); }
.side-a { margin-top: auto; padding-top: 20px; align-self: flex-start; font-size: 15px; font-weight: 500; color: var(--site-primary); text-decoration: none; border-bottom: 1px solid transparent; transition: border-color .2s var(--ease); }
.side-a:hover { border-bottom-color: var(--site-accent); }   /* наведение — лаймовая линия, как у ссылок сайта (слово основателя 29.09) */

@media (max-width: 1100px) { .side { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 900px) {
  .home { grid-template-columns: 1fr; gap: 32px; margin-top: 36px; }
  .home-list { grid-template-columns: 1fr; gap: 16px; }
  .side { grid-template-columns: 1fr; }
  .side-c { padding: 22px 20px; }
  .side-t { font-size: 21px; }
}

/* ---------- ФРАГМЕНТ ГОСТЕВОЙ ФОРМЫ («Как это выглядит», 28.09) ----------
   Один жест: шаблон Excel туда и обратно. На прогоне файл прилетает, встаёт строка сверки,
   цены ложатся в строки. Конечный кадр — дефолт CSS. */
.imp-win { border-radius: 14px; overflow: hidden; background: var(--site-surface); border: 1px solid var(--site-border); box-shadow: var(--site-shadow); }
.imp-body { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 14px; }
.imp-top { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
.imp-langs { display: flex; gap: 6px; }
.imp-lang { padding: 4px 10px; border-radius: 999px; border: 1px solid var(--site-border); font-size: 12px; color: var(--site-text-2); }
.imp-lang.is-on { background: rgba(223, 255, 0, .35); border-color: transparent; color: var(--site-primary); }
.imp-acts { display: flex; gap: 8px; flex-wrap: wrap; }
.imp-btn { padding: 7px 12px; border-radius: 8px; border: 1px solid var(--site-border); font-size: 12.5px; color: var(--site-primary); background: var(--site-surface); }
.imp-btn-up { background: var(--site-primary); color: var(--site-on-primary); border-color: var(--site-primary); }
.imp-file { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 10px; border: 1px dashed #d6d1c5; background: var(--site-bg); }
.imp-file-ic { width: 26px; height: 26px; flex: 0 0 auto; border-radius: 7px; background: var(--site-ink-clay-14) center / 15px 15px no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23bd4418' stroke-width='1.6' stroke-linejoin='round'%3E%3Cpath d='M5 2.5h6.5l3.5 3.5v11.5H5z'/%3E%3Cpath d='M11.5 2.5V6H15M7.5 10h5M7.5 13h5'/%3E%3C/svg%3E"); }
.imp-file-n { font-family: var(--mono); font-size: 12.5px; }
.imp-check { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; border-radius: 10px; background: #f4f8e0; font-size: 13.5px; line-height: 1.4; }
.imp-check .af-mark { width: 18px; height: 18px; margin-top: 1px; }
.imp-check .af-mark::after { left: 6px; top: 3px; }
.imp-table { display: flex; flex-direction: column; }
.imp-row { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, .9fr) minmax(0, .6fr); gap: 10px; padding: 9px 4px; border-bottom: 1px solid var(--site-table-border); font-size: 13.5px; align-items: center; }
.imp-head { font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--site-text-3); padding-top: 0; }
.imp-cell { font-family: var(--mono); font-size: 13px; }
.imp-more { padding: 9px 4px 0; font-size: 12.5px; color: var(--site-text-3); }
.imp-foot { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding-top: 4px; }
.imp-total { display: flex; flex-direction: column; gap: 2px; }
.imp-total-k { font-size: 12px; color: var(--site-text-3); }
.imp-total-v { font-family: var(--mono); font-size: 18px; white-space: nowrap; }
.imp-send { padding: 9px 16px; border-radius: 999px; background: var(--site-primary); color: var(--site-on-primary); font-size: 13.5px; font-weight: 500; }

/* прогон: файл прилетает → сверка → цены ложатся → итог */
.imp--anim .imp-file { opacity: 0; translate: 0 -10px; }
.imp--anim .imp-check { opacity: 0; }
.imp--anim .imp-cell, .imp--anim .imp-total-v { color: transparent; }
.imp--anim .imp-btn-up { animation: none; }
.imp--anim.is-play .imp-btn-up { animation: fork-press .42s var(--spring) .3s; }
.imp--anim.is-play .imp-file { opacity: 1; translate: none; transition: opacity .45s var(--spring) .6s, translate .6s var(--spring) .6s; }
.imp--anim.is-play .imp-check { opacity: 1; transition: opacity .45s var(--ease) 1.4s; }
.imp--anim.is-play .imp-cell { color: var(--site-primary); transition: color .35s var(--ease) calc(1.9s + var(--i, 0) * .18s); }
.imp--anim.is-play .imp-total-v { color: var(--site-primary); transition: color .4s var(--ease) 2.6s; }

/* ---------- ВОПРОСЫ (28.09) ---------- */
.faq { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: 56px; align-items: start; }
.faq-head .section-title { text-align: left; margin: 0; }
.faq-head .section-label { text-align: left; }
.faq-list { border-top: 1px solid var(--site-border); }
.faq-i { border-bottom: 1px solid var(--site-border); }
.faq-q { list-style: none; cursor: pointer; display: flex; justify-content: space-between; align-items: center; gap: 20px; padding: 22px 0; font-size: 19px; font-weight: 500; }
.faq-q::-webkit-details-marker { display: none; }
.faq-x { position: relative; flex: 0 0 auto; width: 28px; height: 28px; border-radius: 50%; border: 1px solid var(--site-border); transition: background-color .2s var(--ease), rotate .25s var(--ease); }
.faq-x::before, .faq-x::after { content: ''; position: absolute; left: 50%; top: 50%; width: 11px; height: 1.5px; background: var(--site-primary); translate: -50% -50%; }
.faq-x::after { rotate: 90deg; }
.faq-q:hover .faq-x { background: var(--site-pill-bg); }
.faq-i[open] .faq-x { rotate: 45deg; }
.faq-a { margin: 0 0 22px; max-width: 60ch; font-size: 16px; line-height: 1.55; color: var(--site-text-2); text-wrap: pretty; }
@media (max-width: 900px) { .faq { grid-template-columns: 1fr; gap: 24px; } .faq-q { font-size: 17px; padding: 18px 0; } }

/* ---------- ФИНАЛ (28.09) ---------- */
.enter { text-align: center; max-width: 900px; margin: 0 auto; }
.enter .sup-enter-t { margin-left: auto; margin-right: auto; }
.enter .sup-enter-n { margin-left: auto; margin-right: auto; max-width: 42ch; }
.enter-a { margin-top: 30px; display: flex; justify-content: center; align-items: center; gap: 22px; flex-wrap: wrap; }
.enter-login { font-size: 15px; font-weight: 500; color: var(--site-primary); text-decoration: none; border-bottom: 1px solid var(--site-border); }
.enter-login:hover { border-bottom-color: var(--site-accent); }   /* как .side-a и ссылки сайта: лаймовая линия */

/* ---------- ЗАКАЗ ДО ОПЛАТЫ (28.09) ----------
   Фрагмент заказа из кабинета. Шкала — лаймовые квадраты 14px (Р-19: заливка, не нить),
   соединительная линия графитовая. Прогон: квадраты загораются по одному до «Оплачен». */
.sup-order .section-title { max-width: 26ch; }
.ord {
  margin: 48px auto 0; max-width: 980px; border-radius: 16px; background: var(--site-surface);
  border: 1px solid var(--site-border); box-shadow: var(--site-shadow); padding: 24px 28px 26px;
}
.ord-h { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding-bottom: 18px; border-bottom: 1px solid var(--site-table-border); }
.ord-h > div { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.ord-n { font-family: var(--mono); font-size: 16px; }
.ord-st { padding: 3px 10px; border-radius: 999px; background: rgba(223, 255, 0, .35); font-size: 12.5px; }
.ord-sum { font-family: var(--mono); font-size: 18px; }
.ord-track { position: relative; margin: 26px 0 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); }
.ord-step { position: relative; display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center; }
.ord-step::before { content: ''; position: absolute; top: 7px; left: -50%; right: 50%; height: 2px; background: var(--site-primary); z-index: 0; }
.ord-step:first-child::before { display: none; }
.ord-dot { position: relative; z-index: 1; width: 16px; height: 16px; border-radius: 4px; background: var(--site-accent); box-shadow: 0 0 0 4px var(--site-surface); }
.ord-lbl { font-size: 13.5px; }
.ord-low { margin-top: 26px; display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 28px; padding-top: 20px; border-top: 1px solid var(--site-table-border); }
.ord-cap { font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--site-text-3); margin-bottom: 10px; }
.ord-ev { display: grid; grid-template-columns: 52px minmax(0, 1fr); gap: 12px; padding: 7px 0; font-size: 14px; }
.ord-date { font-family: var(--mono); font-size: 12.5px; color: var(--site-text-3); padding-top: 1px; }
.ord-docs { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }
.ord-doc { display: inline-flex; align-items: center; gap: 10px; padding: 6px 12px 6px 6px; border-radius: 9px; border: 1px solid var(--site-table-border); background: var(--site-bg); font-family: var(--mono); font-size: 12.5px; }
.ord-doc .imp-file-ic { width: 24px; height: 24px; }
/* прогон */
.ord--anim .ord-dot { background: var(--site-pill-bg); }
.ord--anim .ord-step::before { background: var(--site-table-border); }
.ord--anim .ord-lbl { color: var(--site-text-3); }
.ord--anim .ord-ev { opacity: 0; translate: 0 6px; }
.ord--anim.is-play .ord-dot { background: var(--site-accent); transition: background-color .3s var(--ease) calc(.3s + var(--i, 0) * .45s); }
.ord--anim.is-play .ord-step::before { background: var(--site-primary); transition: background-color .3s var(--ease) calc(.15s + var(--i, 0) * .45s); }
.ord--anim.is-play .ord-lbl { color: var(--site-primary); transition: color .3s var(--ease) calc(.3s + var(--i, 0) * .45s); }
.ord--anim.is-play .ord-ev { opacity: 1; translate: none; transition: opacity .4s var(--spring) calc(.9s + var(--i, 0) * .55s), translate .5s var(--spring) calc(.9s + var(--i, 0) * .55s); }

.ord-facts { margin: 28px auto 0; max-width: 980px; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px; }
.ord-fact { display: flex; flex-direction: column; gap: 6px; padding-top: 14px; border-top: 1px solid var(--site-border); }
.ord-fact-t { font-size: 17px; font-weight: 500; }
.ord-fact-d { font-size: 14.5px; line-height: 1.5; color: var(--site-text-2); text-wrap: pretty; }
@media (max-width: 900px) {
  .ord { padding: 18px 16px 20px; }
  .ord-track { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 18px; }
  .ord-step:nth-child(4)::before { display: none; }   /* новая строка шкалы — без линии из-за края */
  .ord-low { grid-template-columns: 1fr; gap: 18px; }
  .ord-facts { grid-template-columns: 1fr; gap: 16px; }
}

/* полка на восемь: лид — отдельной строкой над сеткой 4×2 */
.shelf-lead { grid-column: 1 / -1; padding: 8px 4px 10px; font-size: 19px; }
/* карточка дилера — строка про бланк */
.side-k { margin: 16px 0 0; padding: 10px 14px; border-radius: 10px; background: var(--site-bg); font-size: 14.5px; font-weight: 500; }
.side-k:empty { display: none; }

/* «в работе» в карточке «Своя сеть» — план дорожной карты, тише факта и с меткой */
.side-plan { margin: 12px 0 0; font-size: 13.5px; line-height: 1.45; color: var(--site-text-2); }
.side-plan:empty { display: none; }

/* ═══════════ СТРАНИЦА ЗАКУПЩИКА — «ВЕРСТАК» (28.09) ═══════════
   Отличие от поставщика — жанр: там сцены, которые смотришь; здесь рабочие поверхности, за
   которыми делаешь сам. Общее — шрифт, лайм только заливками, подвал, кирпичи «Знакомьтесь»,
   заказ, экран кабинета, вопросы. Тёплая «бумага» (#f5f3ee) — фон рабочих столов. */

/* 1 · ГЕРОЙ — приём образца (28.09): всё по центру, под подзаголовком
   документ, который живёт всю закупку. Фон (слова основателя 28.09) — тёплая бумага с сеткой
   точек, три правки:
   · без шва под шапкой: герой подтянут под полупрозрачный чердак (минус его высота снаружи, плюс
     столько же внутри — текст на месте), бумага идёт до самого верха, шапка над ней тёплая;
   · свет — на документ, не на заголовок: «лампа над верстаком» — тёплый круг за сценой
     (.byr-stage::before); сетка редеет к бокам и под заголовком, у документа гуще, к низу
     героя уходит в белый — без полосы на стыке с числами;
   · сетка — статичная CSS (телефон, reduced-motion); на компьютере её заменяет сетка-волна с
     главной (initDots → canvas.hero-dots, класс has-dots), тот же шаг 12 px и тот же графит;
     в момент, когда агенты выстреливают в точку, от неё по сетке идёт волна (dotsBurst). */
.byr-hero {
  position: relative; overflow: hidden; isolation: isolate; border-bottom: 0;
  margin-top: calc(8px - var(--chrome-h, 112px)); padding: calc(48px + var(--chrome-h, 112px)) 0 0;   /* --chrome-h = чердак + 8 */
  background: linear-gradient(180deg, #f5f0e6 0%, #f7f3eb 45%, #faf8f3 78%, #fff 100%);
}
.byr-bg {
  position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background-image: radial-gradient(var(--site-dot) 1px, transparent 1px);
  background-size: 12px 12px; background-position: 6px 6px;
}
.byr-hero.has-dots .byr-bg { background-image: none; }
/* шапка над героем закупщика, пока страница не прокручена, — прозрачная: лежит прямо на бумаге,
   без светлой полосы; с прокруткой — прежняя полупрозрачная белая с размытием */
body[data-page="buyer"] .top { transition: border-color .2s var(--ease), background-color .2s var(--ease); }
body[data-page="buyer"] .top:not(.is-scrolled) { background-color: transparent; -webkit-backdrop-filter: none; backdrop-filter: none; }
/* сетка: гуще у документа, реже к бокам и под заголовком; к низу — в белый */
.byr-bg, .byr-hero .hero-dots {
  -webkit-mask-image: radial-gradient(ellipse 58% 62% at 50% 70%, #000 35%, transparent 100%), linear-gradient(180deg, #000 72%, transparent 97%);
  -webkit-mask-composite: source-in;
  mask-image: radial-gradient(ellipse 58% 62% at 50% 70%, #000 35%, transparent 100%), linear-gradient(180deg, #000 72%, transparent 97%);
  mask-composite: intersect;
}
.byr-in { position: relative; text-align: center; display: flex; flex-direction: column; align-items: center; }
/* аудит 28.09: каждая фраза — своей строкой, рифма «собирать / выбирать» встаёт столбиком
   (было: три строки и серое «Их» висело в конце чёрной). 64 px — как у образца; две строки вместо
   трёх поднимают документ в первый экран. */
.byr-title { margin: 0; font-size: clamp(36px, 4.45vw, 64px); font-weight: 500; line-height: 1.04; letter-spacing: -.025em; text-wrap: balance; }
.byr-title .tone { display: block; }
/* аудит перед деплоем 29.09: двухфразные заголовки разделов и финалов на страницах ролей — каждая
   фраза своей строкой, как в герое (было: «Заказ — тоже здесь. От / «Оформлен» до «Оплачен».») */
.section-title .tone-s, .sup-enter-t .tone-s { display: block; }
/* когда фразы стоят каждая своей строкой, узкие пределы ширины (подбирались под слитный текст)
   рвали и саму фразу — «Станок стоит» шёл в 4 строки; теперь на компьютере фраза — строка,
   на телефоне переносится внутри себя */
.section .section-title:has(.tone-s) { max-width: 40ch; }
.enter .sup-enter-t:has(.tone-s) { max-width: 34ch; }
.byr-lead { margin: 18px auto 0; max-width: 54ch; font-size: 18px; line-height: 1.5; color: var(--site-text-2); text-wrap: pretty; }
/* кнопки в герое нет (она в шапке, слово основателя 28.09) — документ сразу под подзаголовком */
.byr-stage { position: relative; margin-top: 40px; width: min(760px, 100%); min-height: 400px; }
/* лампа над верстаком: тёплый круг за документом — под сеткой-волной (у неё z 0), над бумагой */
.byr-stage::before { content: ''; position: absolute; left: 50%; top: 56%; width: 1000px; height: 620px; translate: -50% -50%; z-index: -1; pointer-events: none; background: radial-gradient(closest-side, rgba(233, 208, 160, .5), rgba(233, 208, 160, .22) 55%, rgba(233, 208, 160, 0)); }

/* документ: строка «что происходит» + карточка, слои сменяют друг друга по data-st */
.doc { position: relative; display: flex; flex-direction: column; align-items: center; }
/* рассказчик — чёрным и крупнее (как у образца): это голос сцены, а не подпись */
.doc-say { display: inline-flex; align-items: center; gap: 10px; height: 34px; padding: 0 14px; border-radius: 999px; font-size: 18px; color: var(--site-primary); }
.doc-say span { display: inline-block; white-space: nowrap; overflow: hidden; transition: opacity .22s var(--ease), width .4s cubic-bezier(.3, .7, .2, 1); }
/* знак движения — «Агенты за работой» с главной (.agents-mark в styles.css), крупнее под строку */
.doc-say .agents-mark { width: 17px; height: 17px; }
.doc-wrap { position: relative; margin-top: 12px; width: min(440px, 100%); height: 330px; }
.doc-l { position: absolute; left: 0; right: 0; top: 0; opacity: 0; translate: 0 10px; transition: opacity .45s var(--spring), translate .6s var(--spring), scale .6s var(--spring); pointer-events: none; }
.doc-card { border-radius: 12px; background: var(--site-surface); border: 1px solid rgba(26, 26, 26, .08); box-shadow: 0 30px 60px -28px rgba(26, 26, 26, .35); padding: 18px 20px; text-align: left; }
.doc-h { display: flex; align-items: center; gap: 10px; font-size: 14px; font-weight: 500; }
.doc-m { margin-top: 3px; font-family: var(--mono); font-size: 11.5px; color: var(--site-text-3); }
.doc-hr { height: 1px; margin: 14px 0; background: var(--site-table-border); }
/* 1 · файл и сканирование */
.doc[data-st="1"] .doc-file { opacity: 1; translate: none; }
.doc-row { font-size: 13px; padding: 5px 0; }
/* в конце разбора тело файла сворачивается до шапки — из неё вырастает заявка */
.doc-file-b { display: grid; grid-template-rows: 1fr; transition: grid-template-rows .45s cubic-bezier(.5, 0, .2, 1), opacity .3s var(--ease); }
.doc-file-b > div { overflow: hidden; min-height: 0; }
.doc-card.is-fold .doc-file-b { grid-template-rows: 0fr; opacity: 0; }
/* файл складывается и уходит, пока значки схлопываются: к выстрелу на сцене только точки */
.doc[data-st="1"] .doc-l.doc-file.is-gone { opacity: 0; scale: .96; transition: opacity .4s var(--ease) .15s, scale .5s var(--ease) .1s; }
.doc-sk { display: flex; flex-direction: column; gap: 8px; margin-top: 12px; }
.doc-sk i { height: 7px; border-radius: 4px; background: #efece4; }
.doc-sk i:nth-child(2n) { width: 76%; }
.doc-scan { position: absolute; left: 0; right: 0; top: 0; height: 64px; background: linear-gradient(180deg, rgba(27, 79, 216, 0), rgba(27, 79, 216, .14) 70%, rgba(27, 79, 216, .5) 100%); border-bottom: 1.5px solid rgba(27, 79, 216, .6); opacity: 0; }
.doc[data-st="1"] .doc-scan { animation: doc-scan 2.2s var(--ease) .3s both; }   /* кончается до сворачивания файла */
@keyframes doc-scan { 0% { opacity: 0; translate: 0 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { opacity: 0; translate: 0 250px; } }
/* значки агентов (слово основателя 28.09, приём образца): знак прижат к
   краю файла, кольцо медленно крутится, пока агент читает строку, к концу разгоняется; метка быстро въезжает из-под маски
   (видна с конца — «…менование»), в конце разбора уезжает обратно, значок сворачивается до
   знака и выстреливает в заявку. Фазы ставит JS: is-on → is-open → разгон кольца на раскрытой
   метке (все разом) → на пике is-fold (метка и точки сворачиваются вместе, остаётся лаймовая
   точка) → shoot() — точка летит в галку заявки. */
.doc-chip { position: absolute; z-index: 2; width: max-content; display: inline-flex; align-items: center; padding: 8px 10px; border-radius: 10px; background: var(--site-surface); font-size: 14.5px; box-shadow: 0 14px 30px -14px rgba(26, 26, 26, .35); opacity: 0; scale: .7; white-space: nowrap; transition: opacity .3s var(--spring), scale .4s var(--spring), padding .36s cubic-bezier(.55, 0, .8, .2), background-color .3s var(--ease), box-shadow .3s var(--ease); }
/* знак агентов в значке — HTML-блоки (кольцо и сердцевина), не картинка: кольцо крутит JS
   (медленно → разгон), на сворачивании шесть точек стягиваются в лаймовую сердцевину, она
   вспыхивает. HTML-блок вращается и сжимается вокруг своего центра во всех браузерах. */
.doc-chip-m { position: relative; flex: none; width: 14px; height: 14px; }
.doc-chip-sc, .doc-chip-ring { position: absolute; inset: 0; }
.doc-chip-sc { transition: scale .36s cubic-bezier(.55, 0, .8, .2); }
.doc-chip-ring svg { display: block; width: 100%; height: 100%; fill: var(--site-primary); }
.doc-chip-core { position: absolute; left: 50%; top: 50%; width: 3.2px; height: 3.2px; margin: -1.6px 0 0 -1.6px; border-radius: 50%; background: var(--site-accent); transition: scale .3s var(--spring); }
.doc-chip.is-fold .doc-chip-sc { scale: 0; }
/* схлопнулся — от значка остаётся лаймовая точка 8 px (Р-19: заливка ≥ 8 px), подложка уходит */
.doc-chip.is-fold { padding-left: 0; padding-right: 0; background-color: transparent; box-shadow: none; }   /* по вертикали отступ тот же — точка не съезжает */
.doc-chip.is-fold .doc-chip-l { opacity: 0; }
.doc .doc-chip.is-fold .doc-chip-l > span { padding: 0; }   /* свёрнутая метка — 0 px (вес выше правила правого значка): точка встаёт ровно у края, выстрел — ровно в галку */
.doc-chip.is-fold .doc-chip-core { scale: 2.5; box-shadow: 0 0 0 .4px rgba(26, 26, 26, .25); }
/* метка сворачивается одним движением с точками — та же длительность и кривая */
.doc-chip.is-fold .doc-chip-l, .doc-chip.is-fold .doc-chip-l > span { transition-duration: .36s; transition-timing-function: cubic-bezier(.55, 0, .8, .2); }
.doc-chip-l { display: grid; grid-template-columns: 0fr; overflow: hidden; transition: grid-template-columns .42s cubic-bezier(.3, .7, .2, 1), opacity .2s var(--ease); }
.doc-chip-l > span { min-width: 0; padding-left: 8px; translate: -100% 0; transition: translate .42s cubic-bezier(.3, .7, .2, 1); }
.doc-chip.is-on { opacity: 1; scale: 1; }
.doc-chip.is-open .doc-chip-l { grid-template-columns: 1fr; }
.doc-chip.is-open .doc-chip-l > span { translate: 0 0; }
/* левые растут влево от края файла, правый — вправо; схлопнувшись, выстреливают в галку заявки
   (траекторию считает JS — shoot()) */
.doc-chip:nth-of-type(1) { right: calc(100% - 22px); top: 62px; }
.doc-chip:nth-of-type(2) { left: calc(100% - 22px); top: 104px; }
.doc-chip:nth-of-type(3) { right: calc(100% - 22px); top: 150px; }
.doc-chip:nth-of-type(2) { flex-direction: row-reverse; }
.doc-chip:nth-of-type(2) .doc-chip-l > span { padding: 0 8px 0 0; translate: 100% 0; }
.doc-chip:nth-of-type(2).is-open .doc-chip-l > span { translate: 0 0; }
.doc:not([data-st="1"]):not([data-st="2"]) .doc-chip { opacity: 0; }   /* на такте 2 точки ещё летят в заявку */
/* галка заявки вздрагивает от попадания */
.doc-req .af-mark.is-hit { animation: doc-hit .45s var(--spring); }
@keyframes doc-hit { 35% { scale: 1.4; } }
/* 2–3 · заявка и приглашения. Приём образца (слово
   основателя 28.09): из одной заявки выходят пять приглашений — стопка писем быстро
   пролистывается и схлопывается до строк-заголовков, а строки и есть участники со статусами.
   Окно списка держит высоту свёрнутого списка (JS меряет), письма прокручиваются внутри. */
.doc[data-st="2"] .doc-req, .doc[data-st="3"] .doc-req { opacity: 1; translate: none; }
/* заявка раскрывается кругом из точки, куда выстрелили агенты (--px/--py — центр её галки,
   ставит JS): без сдвига и без проявления — сразу вся, но из точки. Раскрытой остаётся и дальше,
   уходит обычным угасанием */
.doc-l.doc-req { translate: none; clip-path: circle(0 at var(--px, 30px) var(--py, 28px)); }
.doc:not([data-st="0"]):not([data-st="1"]) .doc-req { clip-path: circle(150% at var(--px, 30px) var(--py, 28px)); }
.doc[data-st="2"] .doc-req { transition: opacity 0s, clip-path .65s cubic-bezier(.3, .7, .2, 1); }
.doc-who-v { position: relative; overflow: hidden; }
.doc.is-roll .doc-who-v { -webkit-mask-image: linear-gradient(180deg, transparent, #000 14px, #000 calc(100% - 22px), transparent); mask-image: linear-gradient(180deg, transparent, #000 14px, #000 calc(100% - 22px), transparent); }
.doc-who { display: flex; flex-direction: column; gap: 6px; will-change: transform; }
.doc-inv { display: grid; grid-template-columns: 8px minmax(0, 1fr) auto; column-gap: 10px; align-items: center; padding: 9px 10px; border-radius: 9px; border: 1px solid var(--site-table-border); background: var(--site-surface); font-size: 13px; }
.doc-inv > i { width: 8px; height: 8px; border-radius: 50%; background: #d6d1c5; }
/* справа — статус: до ответа у всех «Ещё не открывал заявку», на такте 3 у троих его сменяет метка */
.doc-inv-r { display: grid; justify-items: end; }
.doc-inv-r > * { grid-area: 1 / 1; }
.doc-inv-s { font-size: 11.5px; color: var(--site-text-3); transition: opacity .15s var(--ease); }
/* тело письма — раскрыто, пока стопка листается; схлопывается лесенкой */
.doc-inv-b { grid-column: 1 / -1; display: grid; grid-template-rows: 0fr; transition: grid-template-rows .5s cubic-bezier(.5, 0, .2, 1); }   /* та же длительность и кривая, что у сдвига списка (JS) — низ стопки стоит */
.doc-inv-b > div { overflow: hidden; min-height: 0; }
.doc-inv.is-open .doc-inv-b { grid-template-rows: 1fr; }
.doc.is-quiet .doc-inv-b { transition: none; }
.doc-inv-t { margin: 10px 0 0; font-size: 12.5px; font-weight: 500; }
.doc-inv-m { margin: 2px 0 0; font-family: var(--mono); font-size: 11px; color: var(--site-text-3); }
.doc-inv-k { display: flex; flex-direction: column; gap: 6px; margin-top: 10px; }
.doc-inv-k i { height: 6px; border-radius: 3px; background: #efece4; }
.doc-inv-k i:nth-child(2) { width: 70%; }
.doc-inv-o { display: inline-block; margin: 10px 0 2px; padding: 4px 10px; border-radius: 7px; background: var(--site-primary); color: #fff; font-size: 11.5px; }
.doc[data-st="3"] .doc-inv.is-ok > i { background: var(--site-accent); box-shadow: 0 0 0 1px rgba(26, 26, 26, .15); }
.doc[data-st="3"] .doc-inv.is-seen > i { background: var(--site-ink-blue); }
.doc[data-st="3"] .doc-inv:is(.is-ok, .is-seen, .is-nudge) .doc-inv-s { opacity: 0; }
.doc-pill { padding: 2px 9px; border-radius: 999px; font-size: 11.5px; opacity: 0; }
.doc-inv.is-nudge .doc-pill { background: #fde6d8; color: var(--site-ink-clay); border: 1px solid #f3c3a8; }
.doc-inv.is-ok .doc-pill { background: rgba(223, 255, 0, .35); }
.doc-inv.is-seen .doc-pill { background: var(--site-ink-blue-14); color: var(--site-ink-blue); }
/* в конце сбора ответы досыпаются: у Б, В, Г «Ответил» сменяет прежний статус, точка — лаймовая */
.doc-inv .doc-pill.doc-pill-ans { background: rgba(223, 255, 0, .35); color: inherit; border: 0; }
.doc .doc-inv.is-ans .doc-inv-s, .doc .doc-inv.is-ans .doc-pill:not(.doc-pill-ans) { opacity: 0; transition: opacity .15s var(--ease); }
.doc .doc-inv.is-ans .doc-pill.doc-pill-ans { opacity: 1; transition: opacity .25s var(--ease) .12s; }   /* вес выше задержек прежних статусов */
.doc .doc-inv.is-ans > i { background: var(--site-accent); box-shadow: 0 0 0 1px rgba(26, 26, 26, .15); transition: background-color .2s var(--ease); }
.doc[data-st="3"] .doc-inv.is-nudge.is-ans { box-shadow: none; transition: box-shadow .3s var(--ease); }
/* сначала гаснет «Ещё не открывал заявку», потом встаёт метка — без наложения двух надписей */
.doc[data-st="3"] .doc-pill:not(.doc-pill-ans) { opacity: 1; transition: opacity .3s var(--ease) .18s; }
.doc[data-st="3"] .doc-inv.is-seen .doc-inv-s { transition-delay: .5s; }
.doc[data-st="3"] .doc-inv.is-seen .doc-pill { transition-delay: .68s; }
.doc[data-st="3"] .doc-inv.is-nudge .doc-inv-s { transition-delay: 1.1s; }
.doc[data-st="3"] .doc-inv.is-nudge .doc-pill { transition-delay: 1.28s; }
.doc[data-st="3"] .doc-inv.is-nudge { box-shadow: 0 0 0 4px rgba(189, 68, 24, .08); transition: box-shadow .4s var(--ease) 1.1s; }
.doc-glow { position: absolute; inset: -40px; pointer-events: none; opacity: 0; }
.doc-glow i { position: absolute; width: 7px; height: 7px; border-radius: 50%; background: #fff; box-shadow: 0 0 10px 3px rgba(255, 255, 255, .9); }
.doc[data-st="3"] .doc-glow { opacity: 1; transition: opacity .5s var(--ease) 1.2s; }
.doc[data-st="3"] .doc-glow i { animation: doc-glow 1.6s var(--ease) infinite alternate; animation-delay: calc(var(--i, 0) * .12s); }
@keyframes doc-glow { from { opacity: .2; } to { opacity: 1; } }
/* 4–6 · лист, ход человека, заказы. Как в продукте (evaluation-sheets.service.ts:553): лист
   открывается с уже применённым сценарием «По цене» — система сама расставляет выбор; сценарий
   переключается вкладкой, рядом «Ручной режим». Ход человека — вкладка «По позициям» и
   «Создать заказ(ы)». Слова — дословно ScenarioTabs.tsx, FullEvaluationModal.tsx, футер листа. */
.doc[data-st="4"] .doc-sheet, .doc[data-st="5"] .doc-sheet, .doc[data-st="6"] .doc-sheet { opacity: 1; translate: none; }
.doc[data-st="6"] .doc-sheet { opacity: .5; scale: .97; }
.doc-l.doc-sheet { translate: none; }
/* склейка без наложения: пока плашки в воздухе, заявка гаснет быстро, лист проявляется следом */
.doc[data-st="4"] .doc-req { transition: opacity .2s var(--ease); }
.doc[data-st="4"] .doc-sheet { transition: opacity .4s var(--ease) .18s; }
.doc-sheet .doc-h { justify-content: space-between; }
.doc-sheet .doc-h > span:nth-child(2) { margin-right: auto; }
.doc-count { padding: 3px 10px; border-radius: 999px; background: var(--site-pill-bg); font-size: 12px; font-weight: 400; white-space: nowrap; }
.doc-tabs { display: flex; gap: 4px; margin-top: 12px; padding: 3px; border-radius: 9px; background: var(--site-pill-bg); width: max-content; max-width: 100%; }
.doc-tab { padding: 4px 9px; border-radius: 7px; font-size: 11.5px; color: var(--site-text-2); white-space: nowrap; transition: background-color .25s var(--ease), color .25s var(--ease), box-shadow .25s var(--ease); }
.doc-tab.is-on { background: var(--site-surface); color: var(--site-primary); box-shadow: 0 1px 2px rgba(26, 26, 26, .12); }
.doc-tb { margin-top: 10px; display: flex; flex-direction: column; }
.doc-tr { display: grid; grid-template-columns: 1.15fr repeat(4, 1fr); gap: 6px; padding: 7px 0; border-top: 1px solid var(--site-table-border); font-family: var(--mono); font-size: 12.5px; }
.doc-tr:first-child { border-top: 0; font-family: var(--font); font-size: 11px; color: var(--site-text-3); }
.doc-tr > span:first-child { font-family: var(--font); }
/* выбор — «Выбрано для заказа»: лаймовая заливка ячейки (Р-19); ставит сценарий, меняет человек */
.doc-tr > span { width: max-content; padding: 0 4px; margin-left: -4px; border-radius: 4px; transition: background-color .25s var(--ease), box-shadow .25s var(--ease), opacity .28s var(--ease), translate .35s cubic-bezier(.3, .7, .2, 1); }
.doc-tr > span.is-wait { opacity: 0; translate: 0 -5px; }   /* колонка ждёт, пока в шапку сядет её поставщик */
/* СКЛЕЙКА «заявка → лист» (слово основателя 28.09): ответившие строки отрываются от заявки
   плашками, «Поставщик» сворачивается в полёте (как метка значка), буква садится в шапку своей
   колонки — колонка заполняется ценами. Плашка прижата правым краем: буква на месте, пока
   «Поставщик» сворачивается, — траекторию JS считает от неё */
.doc-fly { position: absolute; z-index: 4; width: max-content; display: inline-flex; align-items: center; padding: 5px 10px; border-radius: 8px; background: var(--site-surface); border: 1px solid var(--site-table-border); box-shadow: 0 12px 26px -12px rgba(26, 26, 26, .35); font-size: 13px; white-space: nowrap; pointer-events: none; transition: translate .62s cubic-bezier(.5, 0, .2, 1), opacity .14s linear; }
.doc-fly > i { flex: none; width: 8px; height: 8px; margin-right: 8px; border-radius: 50%; background: var(--site-accent); box-shadow: 0 0 0 1px rgba(26, 26, 26, .15); }
.doc-fly-l { display: grid; grid-template-columns: 1fr; overflow: hidden; transition: grid-template-columns .42s cubic-bezier(.5, 0, .2, 1), opacity .25s var(--ease); }
.doc-fly-l > span { min-width: 0; }
.doc-fly.is-go .doc-fly-l { grid-template-columns: 0fr; opacity: 0; }
.doc-fly-x { font-weight: 500; }
.doc-tr > span.is-picked { background: var(--site-accent); box-shadow: 0 0 0 1px rgba(26, 26, 26, .12); }
.doc-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--site-table-border); }
.doc-rec { font-size: 12px; color: var(--site-text-2); }
.doc-rec b { font-weight: 500; color: var(--site-primary); }
.doc-btn { padding: 6px 11px; border-radius: 8px; background: var(--site-primary); color: #fff; font-size: 12px; white-space: nowrap; }
.doc-btn.is-press { animation: fork-press .3s var(--spring); }
.doc-cur { transform: translate(0, 0); }
/* клик в герое — без сжатия стрелки: пружинная кривая на обратном ходе раздувала её больше
   исходной, и перед нажатием курсор «подскакивал». Клик — мягкая волна от острия */
.doc-cur.is-click { animation: none; }
.doc-cur::after { content: ''; position: absolute; left: -7px; top: -7px; width: 18px; height: 18px; border-radius: 50%; background: rgba(26, 26, 26, .16); opacity: 0; scale: .3; pointer-events: none; }
.doc-cur.is-click::after { animation: doc-cur-ripple .5s ease-out; }
@keyframes doc-cur-ripple { 0% { opacity: .9; scale: .3; } 100% { opacity: 0; scale: 1.7; } }
@media (hover: none), (max-width: 760px) { .doc-cur { display: none; } }
.doc-order { position: absolute; top: 96px; left: -40px; right: -40px; display: flex; flex-direction: column; gap: 10px; pointer-events: none; }
.doc-order .doc-card { display: grid; grid-template-columns: 44px minmax(0, 1fr) auto; gap: 14px; align-items: center; padding: 16px 20px; opacity: 0; translate: 0 12px; transition: opacity .45s var(--spring), translate .6s var(--spring); transition-delay: calc(var(--i, 0) * .28s); }
.doc[data-st="6"] .doc-order .doc-card { opacity: 1; translate: none; }
.doc-av { width: 44px; height: 44px; border-radius: 50%; background: var(--site-ink-blue-14); color: var(--site-ink-blue); display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 500; }
.doc-sum { font-size: 22px; letter-spacing: -.01em; font-family: var(--mono); }
.doc-who2 { font-size: 13.5px; color: var(--site-text-2); margin-top: 2px; }
.doc-done { padding: 6px 12px; border-radius: 10px; background: rgba(223, 255, 0, .45); font-size: 15px; font-weight: 500; }
@media (max-width: 760px) {
  .byr-hero { padding-top: calc(32px + var(--chrome-h, 112px)); }
  .byr-stage::before { width: 640px; height: 520px; }
  .byr-stage { min-height: 400px; }
  .doc-chip { display: none; }
  .doc-tabs { gap: 2px; }
  .doc-tab { padding: 4px 6px; font-size: 10.5px; }
  .doc-order { left: -8px; right: -8px; }
  .doc-order .doc-card { grid-template-columns: minmax(0, 1fr) auto; }
  .doc-av { display: none; }
}
@media (prefers-reduced-motion: reduce) { .doc-glow i { animation: none; } }

/* 3 · «Станок стоит»: фото с пузырём + карточка ответа */
.mach { margin-top: 48px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 32px; align-items: center; }   /* поровну: таблице разбора нужна ширина */
.mach .mach-try { margin: 0; max-width: none; }
.mach-photo { position: relative; aspect-ratio: 4 / 3; border-radius: 18px; overflow: hidden; background: #2a2a28; }
.mach-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.mach-stub { display: none; }
.mach-photo.is-stub { background: repeating-linear-gradient(135deg, #e9e6de 0 14px, #f1efe9 14px 28px); border: 1px dashed #d6d1c5; }
.mach-photo.is-stub img { display: none; }
.mach-photo.is-stub .mach-stub { display: flex; position: absolute; inset: 0; align-items: center; justify-content: center; font-family: var(--mono); font-size: 13px; color: var(--site-text-3); }
.mach-bubble {
  position: absolute; left: 24px; top: 24px; max-width: min(360px, 80%);
  display: flex; align-items: flex-start; gap: 12px; padding: 14px 18px 14px 12px; border-radius: 16px;
  background: var(--site-surface); font-size: 17px; line-height: 1.35;
  box-shadow: 0 18px 40px -16px rgba(0, 0, 0, .45);
}
.mach-bubble .noise-ic { width: 32px; height: 32px; flex: 0 0 auto; background-size: 18px 18px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%234a4a44' stroke-width='1.6' stroke-linejoin='round'%3E%3Cpath d='M4 4.5h12a1.5 1.5 0 0 1 1.5 1.5v7a1.5 1.5 0 0 1-1.5 1.5H9l-3.5 3v-3H4A1.5 1.5 0 0 1 2.5 13V6A1.5 1.5 0 0 1 4 4.5z'/%3E%3C/svg%3E"); }
@media (max-width: 900px) { .mach { grid-template-columns: 1fr; } .mach-bubble { font-size: 15px; left: 14px; top: 14px; } }

/* 5 · путь заявки: шаги слева, прибитый монитор справа */
.path { margin-top: 56px; display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: 56px; align-items: start; }
.path-steps { margin: 0; padding: 0; list-style: none; }
.path-i { min-height: 62vh; display: flex; flex-direction: column; justify-content: center; padding: 24px 0; opacity: .38; transition: opacity .4s var(--ease); }
.path-i:first-child { min-height: 48vh; justify-content: flex-start; padding-top: 8vh; }
.path-i.is-on { opacity: 1; }
.path-n { font-family: var(--mono); font-size: 12px; letter-spacing: .04em; color: var(--site-text-3); }
.path-t { margin: 10px 0 0; font-size: clamp(22px, 2.2vw, 28px); font-weight: 500; line-height: 1.2; letter-spacing: -.01em; text-wrap: balance; }
.path-d { margin: 12px 0 0; max-width: 42ch; font-size: 16px; line-height: 1.55; color: var(--site-text-2); }
.path-inline { display: none; }
/* «Платформа параллельно» под текстом шага: строки проявляются по очереди, когда шаг текущий, галка
   дорисовывается; уходим с шага — гаснут сразу (задержки только на входе) */
.path-side { margin-top: 24px; max-width: 42ch; }
.path-side-h { display: flex; align-items: center; gap: 8px; margin: 0 0 10px; font-size: 11px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase; color: var(--site-text-3); }
.path-side-tick { flex-shrink: 0; width: 8px; height: 8px; border-radius: 50%; background: var(--site-accent); box-shadow: 0 0 0 1px rgba(26, 26, 26, .15); }
.path-i.is-on .path-side-tick { animation: path-tick 1.6s ease-in-out infinite; }
@keyframes path-tick { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(.7); opacity: .55; } }
.path-side-l { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 8px; }
.path-side-r {
  display: flex; align-items: flex-start; gap: 10px; font-size: 14.5px; line-height: 1.4; color: var(--site-text-2);
  opacity: 0; transform: translateY(6px); transition: opacity .3s var(--ease), transform .45s var(--spring);
}
.path-side-c { flex-shrink: 0; width: 16px; height: 16px; margin-top: 2px; border-radius: 50%; border: 1px solid var(--site-primary); display: inline-flex; align-items: center; justify-content: center; }
.path-side-c svg { width: 10px; height: 10px; }
.path-side-c path { fill: none; stroke: var(--site-primary); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 12; stroke-dashoffset: 12; transition: stroke-dashoffset .4s var(--ease); }
.path-i.is-on .path-side-r { opacity: 1; transform: none; }
.path-i.is-on .path-side-r .path-side-c path { stroke-dashoffset: 0; }
.path-i.is-on .path-side-r:nth-child(1) { transition-delay: .35s; }
.path-i.is-on .path-side-r:nth-child(2) { transition-delay: .8s; }
.path-i.is-on .path-side-r:nth-child(3) { transition-delay: 1.25s; }
.path-i.is-on .path-side-r:nth-child(1) path { transition-delay: .55s; }
.path-i.is-on .path-side-r:nth-child(2) path { transition-delay: 1s; }
.path-i.is-on .path-side-r:nth-child(3) path { transition-delay: 1.45s; }
@media (prefers-reduced-motion: reduce) {
  .path-side-r { opacity: 1; transform: none; transition: none; }
  .path-side-c path { stroke-dashoffset: 0; transition: none; }
  .path-i.is-on .path-side-tick { animation: none; }
}
.path-mon {
  position: sticky; top: calc(var(--chrome-h, 80px) + 40px);
  border-radius: 16px; overflow: hidden; background: var(--site-surface); border: 1px solid var(--site-border);
  box-shadow: 0 40px 80px -30px rgba(26, 26, 26, .28), 0 0 0 10px #f5f3ee;
}
.path-scr { position: relative; min-height: 420px; background: #f7f6f2; }
.path-sc { position: absolute; inset: 0; padding: 22px; opacity: 0; translate: 0 10px; transition: opacity .45s var(--spring), translate .55s var(--spring); pointer-events: none; }
.path-sc.is-on { opacity: 1; translate: none; }
.path-sc-t { margin-bottom: 14px; font-size: 14px; font-weight: 500; }
.ps-flag { margin-bottom: 12px; padding: 9px 12px; border-radius: 9px; background: #fbf2d8; font-size: 13px; color: #7a5b00; }
.ps-tbl { border-radius: 10px; overflow: hidden; background: var(--site-surface); border: 1px solid var(--site-table-border); }
.ps-tr { display: grid; grid-template-columns: repeat(var(--cols, 3), minmax(0, 1fr)); gap: 10px; padding: 10px 14px; border-top: 1px solid var(--site-table-border); font-size: 13.5px; }
.ps-tr:first-child { border-top: 0; }
.ps-num .ps-tr { grid-template-columns: 28px minmax(0, 1fr) minmax(70px, auto); }   /* у заявки первая колонка — номер строки */
.ps-th { font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--site-text-3); background: var(--site-bg); }
.ps-tr.is-warn { background: #fdf6e3; }
.ps-tr .is-best { font-weight: 600; background: rgba(223, 255, 0, .35); border-radius: 4px; padding: 0 5px; width: max-content; }
.ps-list { display: flex; flex-direction: column; gap: 8px; }
.ps-part { display: grid; grid-template-columns: 10px 110px minmax(0, 1fr); gap: 12px; align-items: center; padding: 11px 14px; border-radius: 10px; background: var(--site-surface); border: 1px solid var(--site-table-border); font-size: 13.5px; }
.ps-dot { width: 8px; height: 8px; border-radius: 50%; background: #d6d1c5; }
.ps-part.is-ok .ps-dot { background: var(--site-accent); box-shadow: 0 0 0 1px rgba(26, 26, 26, .15); }
.ps-part.is-wait .ps-dot { background: var(--site-ink-blue); }
.ps-part.is-bad .ps-dot { background: var(--site-ink-clay); }
.ps-part.is-bad .ps-part-s { color: var(--site-ink-clay); }
.ps-part-n { font-weight: 500; }
.ps-part-s { color: var(--site-text-2); }
.ps-link { margin-top: 6px; align-self: flex-start; padding: 8px 12px; border-radius: 8px; border: 1px dashed #c9d4f1; color: var(--site-ink-blue); font-size: 13px; }
.ps-collect { display: flex; flex-direction: column; align-items: flex-start; gap: 16px; padding: 20px; border-radius: 12px; background: var(--site-surface); border: 1px solid var(--site-table-border); }
.ps-count { font-size: 34px; letter-spacing: -.02em; }
.ps-bars { display: flex; gap: 6px; }
.ps-bars i { width: 44px; height: 14px; border-radius: 4px; background: var(--site-pill-bg); }
.ps-bars i.is-on { background: var(--site-accent); }
.ps-note { font-size: 13.5px; color: var(--site-text-2); }
.ps-collect .af-btn { margin-top: 0; }
.ps-tabs { display: flex; gap: 6px; margin-bottom: 12px; }
.ps-tabs span { padding: 5px 11px; border-radius: 999px; border: 1px solid var(--site-border); font-size: 12.5px; color: var(--site-text-2); }
.ps-tabs .is-on { background: var(--site-primary); color: var(--site-on-primary); border-color: var(--site-primary); }
.ps-foot { margin-top: 10px; font-size: 12px; color: var(--site-text-3); }
.ps-orders { display: flex; flex-direction: column; gap: 10px; }
.ps-ord { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 4px 16px; padding: 16px 18px; border-radius: 12px; background: var(--site-surface); border: 1px solid var(--site-table-border); }
.ps-ord-n { font-family: var(--mono); font-size: 14px; }
.ps-ord-v { grid-row: span 2; align-self: center; font-family: var(--mono); font-size: 16px; }
.ps-ord-s { font-size: 13px; color: var(--site-text-2); }
.ps-orders .af-btn { align-self: flex-start; }
@media (max-width: 900px) {
  .path { grid-template-columns: 1fr; gap: 0; margin-top: 32px; }
  .path-mon { display: none; }
  .path-i, .path-i:first-child { min-height: 0; opacity: 1; padding: 22px 0; }
  .path-inline { display: block; position: relative; inset: auto; opacity: 1; translate: none; margin-top: 16px; border-radius: 14px; background: #f5f3ee; border: 1px solid var(--site-border); }
  .path-side { margin-top: 18px; }   /* на телефоне шаги видны все сразу — строки стоят, без проявления */
  .path-side-r { opacity: 1; transform: none; transition: none; }
  .path-side-c path { stroke-dashoffset: 0; transition: none; }
  .ps-part { grid-template-columns: 10px minmax(0, 1fr); }
  .ps-part-s { grid-column: 2; }
}

/* 6 · спросите лист (чёрный экран) */
.byr-ask .tone { color: rgba(255, 255, 255, .5); }
.byr-ask .section-title { max-width: 24ch; }
.ask { margin: 48px auto 0; max-width: 1040px; display: flex; flex-direction: column; gap: 18px; }
.ask-q { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; }
.ask-chip {
  padding: 9px 15px; border-radius: 999px; border: 1px solid rgba(255, 255, 255, .18); background: transparent;
  color: rgba(255, 255, 255, .78); font: inherit; font-size: 14px; cursor: pointer;
  transition: background-color .2s var(--ease), color .2s var(--ease), border-color .2s var(--ease);
}
.ask-chip:hover { border-color: rgba(255, 255, 255, .5); color: #fff; }
.ask-chip.is-on { background: #fff; color: var(--site-primary); border-color: #fff; }
.ask-sheet { border-radius: 14px; overflow: hidden; background: var(--site-surface); color: var(--site-primary); box-shadow: 0 40px 80px -30px rgba(0, 0, 0, .7); }
.ask-tr { display: grid; grid-template-columns: minmax(0, 1.6fr) repeat(calc(var(--cols, 4) - 1), minmax(0, 1fr)); gap: 10px; padding: 13px 18px; border-top: 1px solid var(--site-table-border); font-size: 14.5px; align-items: center; transition: background-color .3s var(--ease); }
.ask-th { border-top: 0; font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--site-text-3); background: var(--site-bg); }
.ask-tr > span:not(:first-child) { font-family: var(--mono); font-size: 14px; }
.ask-th > span:not(:first-child) { font-family: var(--font); font-size: 11px; }
.ask-total { background: var(--site-bg); font-weight: 500; }
.ask-mark { display: inline-block; margin-left: 8px; padding: 1px 7px; border-radius: 5px; background: var(--site-ink-blue-14); color: var(--site-ink-blue); font-family: var(--font); font-style: normal; font-size: 11.5px; }
.ask-tr .is-none { color: var(--site-text-3); }
.ask-tr > span { border-radius: 5px; transition: background-color .3s var(--ease), box-shadow .3s var(--ease); }
.ask-tr > span.is-hl { background: rgba(223, 255, 0, .55); box-shadow: 0 0 0 5px rgba(223, 255, 0, .55); }
.ask-tr.is-hl { background: rgba(223, 255, 0, .35); }
.ask-a { max-width: 760px; margin: 4px auto 0; }
/* все ответы в одной ячейке — высота по самому длинному, страница ниже не прыгает; текущий
   проявляется, прежний гаснет */
.ask-a-stack { display: grid; }
.ask-a-stack > .ask-a-row { grid-area: 1 / 1; opacity: 0; translate: 0 6px; visibility: hidden; transition: opacity .2s var(--ease), translate .2s var(--ease), visibility 0s linear .2s; }
.ask-a-stack > .ask-a-row.is-on { opacity: 1; translate: none; visibility: visible; transition: opacity .4s var(--spring) .12s, translate .5s var(--spring) .12s, visibility 0s; }
.ask-a-who { display: block; margin-bottom: 8px; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: rgba(255, 255, 255, .45); text-align: center; }
.ask-a-row { display: flex; align-items: flex-start; justify-content: center; gap: 12px; font-size: 19px; line-height: 1.45; color: #fff; text-align: left; }
.ask-a-row .af-mark { margin-top: 3px; }
.ask-a-row.is-edge { color: var(--site-accent); }
@media (max-width: 760px) {
  .ask-tr { grid-template-columns: minmax(0, 1.3fr) repeat(calc(var(--cols, 4) - 1), minmax(0, 1fr)); padding: 11px 10px; font-size: 12.5px; gap: 6px; }
  .ask-tr > span:not(:first-child) { font-size: 12px; }
  .ask-mark { display: block; margin: 3px 0 0; width: max-content; }
  .ask-a-row { font-size: 16px; }
}

/* 7 · директору */
.boss { margin: 48px auto 0; max-width: 980px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 20px; align-items: stretch; }
.boss-pdf, .boss-why { border-radius: 16px; background: var(--site-surface); border: 1px solid var(--site-border); box-shadow: var(--site-shadow); padding: 22px; }
.boss-pdf-h { display: flex; align-items: center; gap: 10px; font-family: var(--mono); font-size: 13px; }
.boss-page { margin-top: 16px; padding: 18px 20px; border-radius: 8px; background: #fbfaf7; border: 1px solid var(--site-table-border); }
.boss-page-t { font-size: 16px; font-weight: 500; }
.boss-page-l { margin-top: 8px; font-size: 13.5px; color: var(--site-text-2); }
.boss-page-sk { margin-top: 14px; display: flex; flex-direction: column; gap: 7px; }
.boss-page-sk i { height: 8px; border-radius: 4px; background: #efece4; }
.boss-page-sk i:nth-child(2n) { width: 82%; }
.boss-why-t { font-size: 18px; font-weight: 500; }
.boss-codes { margin-top: 16px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.boss-code { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-radius: 10px; border: 1px solid var(--site-border); font-size: 15px; }
.boss-code i { width: 16px; height: 16px; border-radius: 50%; border: 1.5px solid #cfcabd; box-sizing: border-box; }
.boss-code.is-on { border-color: var(--site-primary); }
.boss-code.is-on i { border: 5px solid var(--site-primary); }
.boss-why-n { margin: 16px 0 0; font-size: 14px; line-height: 1.5; color: var(--site-text-2); }
@media (max-width: 900px) { .boss { grid-template-columns: 1fr; } }

/* 9 · утро: эталон слева, экран кабинета справа */
.byr-morning .home { margin-top: 0; }
.byr-morning-t { text-align: left; margin: 0; max-width: 16ch; }
.byr-morning-l { margin: 18px 0 0; max-width: 42ch; font-size: 17px; line-height: 1.55; color: var(--site-text-2); }



/* утро закупщика: часы ведут экран кабинета. 08:52 (0,3 с) — экран появляется; 08:54 (1,2 с) —
   три задачи отмечаются лесенкой; 08:55 (2,1 с) — «Агенты продолжают». Конечный кадр — дефолт:
   без JS/при reduced-motion экран виден, три задачи отмечены. */
.byr-clock { margin-top: 34px; flex-direction: row; flex-wrap: wrap; gap: 26px 36px; }
.byr-clock .morning-t { font-size: clamp(30px, 2.8vw, 40px); }
.byr-morning .mo-task-m { position: relative; }
.byr-morning .mo-task-m::after {
  content: ''; position: absolute; inset: -1.5px; border-radius: 3px; opacity: 0;
  background: var(--site-accent) center / 10px 10px no-repeat url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.4l3 2.9 6-6.3' fill='none' stroke='%231a1a1a' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.byr-morning .mo-card .mo-task:nth-child(-n+4) .mo-task-m::after { opacity: 1; }
.byr-morning .mo-card .mo-task:nth-child(-n+4) .mo-task-t { color: var(--site-text-3); }
@media (prefers-reduced-motion: no-preference) {
  .byr-morning:not(.is-play) .mo { opacity: 0; translate: 0 12px; }
  .byr-morning.is-play .mo { opacity: 1; translate: none; transition: opacity .5s var(--ease) .3s, translate .6s var(--spring) .3s; }
  .byr-morning:not(.is-play) .mo-card .mo-task .mo-task-m::after { opacity: 0; }
  .byr-morning:not(.is-play) .mo-card .mo-task .mo-task-t { color: var(--site-primary); }
  .byr-morning.is-play .mo-card .mo-task .mo-task-m::after { transition: opacity .3s var(--ease); }
  .byr-morning.is-play .mo-card .mo-task .mo-task-t { transition: color .3s var(--ease); }
  .byr-morning.is-play .mo-card .mo-task:nth-child(2) .mo-task-m::after, .byr-morning.is-play .mo-card .mo-task:nth-child(2) .mo-task-t { transition-delay: 1.3s; }
  .byr-morning.is-play .mo-card .mo-task:nth-child(3) .mo-task-m::after, .byr-morning.is-play .mo-card .mo-task:nth-child(3) .mo-task-t { transition-delay: 1.55s; }
  .byr-morning.is-play .mo-card .mo-task:nth-child(4) .mo-task-m::after, .byr-morning.is-play .mo-card .mo-task:nth-child(4) .mo-task-t { transition-delay: 1.8s; }
}
