/* ═══════════════════════════════════════════════════════════════
   ВИТРИНА — главная страница

   Подключается только здесь: набор крупный, а в кабинете он не
   нужен ни строчкой. Токены берутся из app.css, свои добавляются
   только для пульта: он следует теме страницы, но в тёмной теме
   уходит чуть глубже фона, чтобы читаться панелью.
   ═══════════════════════════════════════════════════════════════ */

:root{
  /* Пульт следует теме страницы. Раньше он был тёмным всегда — и в светлой
     теме выглядел чужеродной заплаткой, будто про него забыли. */
  --deck:var(--surface); --deck-2:var(--surface-2); --deck-3:var(--sunken);
  --deck-line:var(--line);
  --deck-ink:var(--ink); --deck-ink-2:var(--ink-2); --deck-ink-3:var(--ink-3);
  --deck-edge:var(--line-soft);

  --c:var(--m-text);        /* цвет активной модальности */
  --c-ink:#FFFFFF;          /* текст на заливке этим цветом */
}
html[data-theme="dark"]{
  /* В тёмной теме пульт чуть глубже страницы — так он читается панелью,
     а не просто прямоугольником того же тона. */
  --deck:#0E120F; --deck-2:#161B17; --deck-3:#1C221D;
  --deck-line:rgba(255,255,255,.10); --deck-edge:rgba(255,255,255,.06);
  --c-ink:#06090A;
}

/* ─── общее ─────────────────────────────────────────────────── */

/* Витрина идёт во всю ширину.
   Без этого правила .guest-body остаётся сеткой с place-items:center,
   а justify-items:center заставляет содержимое взять ширину по контенту.
   Тогда бегущая строка растягивает страницу на тысячи пикселей, и всё
   остальное центрируется внутри этой ширины — то есть за краем экрана. */
.guest-body.flush{display:block;padding:0;width:100%;max-width:100%}

/* overflow-x:clip, а не hidden: hidden сделал бы страницу
   отдельным полем прокрутки и сломал прилипающие элементы. */
.home{width:100%;max-width:100%;overflow-x:clip;justify-self:stretch}
.home section{position:relative;max-width:100%}
/* Одна ширина на страницу. Раньше их было три: первый экран 1440,
   разделы 1120, шапка с подвалом 1180 — и каждый блок начинался на
   своём отступе.

   Отступ по краям лежит ВНУТРИ этой ширины — так же, как у шапки и
   подвала. Иначе содержимое разделов начиналось бы на 26 пикселей
   левее логотипа, и глаз это ловит. */
.home .in,
.home .mid{
  max-width:var(--page);margin:0 auto;width:100%;
  padding-left:26px;padding-right:26px;
}

.eyebrow{
  display:inline-flex;align-items:center;gap:9px;height:28px;padding:0 12px;border-radius:999px;
  background:color-mix(in srgb,var(--c) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--c) 28%,transparent);
  font-family:var(--font-mono);font-size:10px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--c);transition:color .6s,background .6s,border-color .6s;
}
.eyebrow i{width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}

.hh{
  font-family:var(--font-display);font-weight:500;letter-spacing:-.045em;line-height:1.08;
  font-size:clamp(25px,3.4vw,44px);margin:0 0 12px;text-wrap:balance;
}
.hh em{font-style:normal;color:var(--c);transition:color .6s}
.hsub{color:var(--ink-3);font-size:15px;line-height:1.65;margin:0;max-width:58ch}

/* ─── появление по прокрутке ────────────────────────────────── */
[data-rise]{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.75,.3,1),transform .7s cubic-bezier(.2,.75,.3,1)}
[data-rise].in{opacity:1;transform:none}

/* ═══ 1. ПЕРВЫЙ ЭКРАН ═══════════════════════════════════════ */
.top{padding-top:6px;padding-bottom:14px}
.top h1{
  font-family:var(--font-display);font-weight:500;letter-spacing:-.042em;line-height:1.16;
  font-size:clamp(20px,2.3vw,28px);margin:12px 0 6px;
}
.top .sub{color:var(--ink-3);font-size:14.5px;margin:0;max-width:58ch}

/* Имя своё, а не .work: тем классом в app.css названа прокручиваемая
   колонка кабинета (overflow-y:auto), и её правила доставали сюда.
   Ровно так на широких экранах ломался чат — общее имя для двух
   разных блоков рано или поздно ломает один из них. */
.stage{
  padding-bottom:64px;
  display:grid;grid-template-columns:minmax(0,404px) minmax(0,1fr);gap:18px;align-items:stretch;
}

/* ─── пульт ─────────────────────────────────────────────────── */
.deck{
  background:var(--deck);border:1px solid var(--deck-line);border-radius:20px;
  padding:16px;color:var(--deck-ink);display:flex;flex-direction:column;position:relative;
  box-shadow:var(--shadow-2);overflow:hidden;
}
/* Тонкое свечение активной модальности по верхней кромке пульта. */
.deck::before{
  content:"";position:absolute;inset:-1px -1px auto -1px;height:120px;pointer-events:none;
  background:radial-gradient(70% 100% at 50% 0%,color-mix(in srgb,var(--c) 22%,transparent),transparent 72%);
  transition:background .7s cubic-bezier(.4,0,.2,1);
}
.deck > *{position:relative;z-index:1}

.dtabs{display:grid;grid-template-columns:repeat(5,1fr);gap:3px;margin-bottom:16px}
.dtab{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  height:58px;border:0;border-radius:12px;background:var(--deck-2);cursor:pointer;
  font-size:10px;color:var(--deck-ink-3);
  transition:background .2s,color .2s,transform .2s;
}
.dtab svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.dtab:hover{color:var(--deck-ink);transform:translateY(-2px)}
.dtab[aria-selected="true"]{background:var(--tc);color:var(--c-ink);font-weight:600}

/* Шапка формы: без неё пульт читался как картинка, а не как то,
   куда можно печатать. Здесь же счётчик и подпись модуля. */
.dhead{
  display:flex;align-items:center;gap:9px;margin-bottom:12px;padding-bottom:12px;
  border-bottom:1px solid var(--deck-line);
}
.dhead .dot{width:7px;height:7px;border-radius:50%;background:var(--c);flex:none;
  box-shadow:0 0 0 4px color-mix(in srgb,var(--c) 18%,transparent);transition:background .5s,box-shadow .5s}
.dhead .tt{font-size:13.5px;font-weight:600;color:var(--deck-ink)}
.dhead .badge{
  margin-left:auto;font-family:var(--font-mono);font-size:9px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--c);background:color-mix(in srgb,var(--c) 15%,transparent);
  padding:4px 8px;border-radius:6px;transition:color .5s,background .5s;
}

.dlabel{
  display:flex;align-items:center;gap:8px;
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--deck-ink-3);margin-bottom:8px;
}
.dlabel .cnt{margin-left:auto;color:var(--deck-ink-3);letter-spacing:0}

/* Поле, открытое настройкой (текст песни), живёт в пульте и никуда
   не переезжает — ему хватает привязки к .deck. */
.deck .rev textarea{
  width:100%;background:var(--deck-3);border:1px solid var(--deck-line);border-radius:11px;
  padding:12px 13px;font-size:13.5px;color:var(--deck-ink);resize:vertical;
  min-height:92px;line-height:1.55;cursor:text;
  transition:border-color .18s,box-shadow .18s;
}
.deck .rev textarea:hover{border-color:var(--ink-4)}
.deck .rev textarea:focus{
  outline:none;border-color:color-mix(in srgb,var(--c) 55%,transparent);
}
.deck .rev textarea::placeholder{color:var(--deck-ink-3)}

/* Поле со своей панелью: вложения и отправка внутри рамки — так это
   читается как строка чата, а не как абстрактное поле с кнопкой ниже.

   ВАЖНО: все правила привязаны к .dfield, а не к .deck. Поле переезжает
   из пульта под переписку, и привязка к .deck отвалилась бы вместе с
   ним — вместе с шириной и снятием обводки. */
.dfield{
  position:relative;background:var(--deck-3);border:1px solid var(--deck-line);
  border-radius:14px;transition:border-color .18s,box-shadow .18s;
}
.dfield:hover{border-color:var(--ink-4)}
/* Подсветка фокуса едва заметная: поле и так единственное на панели,
   а глобальная обводка здесь только мешала бы. */
.dfield:focus-within{border-color:var(--ink-3)}

.dfield textarea{
  width:100%;display:block;background:none;border:0;outline:none;
  border-radius:14px 14px 0 0;padding:13px 14px 6px;
  font-size:14.5px;line-height:1.55;color:var(--deck-ink);
  resize:vertical;min-height:92px;cursor:text;
}
.dfield textarea:hover,.dfield textarea:focus{border:0;box-shadow:none;outline:none}
.dfield textarea::placeholder{color:var(--deck-ink-3)}

.dtools{display:flex;align-items:center;gap:4px;padding:6px 8px 8px 10px}
.tools-gap{flex:1}
.tool{
  width:32px;height:32px;border-radius:9px;display:grid;place-items:center;border:0;
  background:none;color:var(--deck-ink-3);cursor:pointer;
  transition:background .16s,color .16s;
}
.tool:hover{background:var(--deck-2);color:var(--deck-ink)}
.tool svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.dsend{
  width:34px;height:34px;border-radius:11px;display:grid;place-items:center;border:0;
  background:var(--c);color:var(--c-ink);cursor:pointer;
  transition:transform .16s,filter .16s,opacity .16s;
}
.dsend:hover{transform:translateY(-1px);filter:brightness(1.08)}
.dsend[disabled]{opacity:.45;pointer-events:none}
.dsend svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}

/* ─── поля, которые открывает выбор настройки ───────────────
   «Свой текст» без места для текста — тупик: выбор есть,
   вписать некуда. То же с режимами видео по кадрам. */
.dreveal:empty{display:none}
.dreveal{margin-bottom:16px}
.rev{
  background:var(--deck-2);border:1px solid var(--deck-line);border-radius:13px;padding:12px;
  animation:revIn .28s cubic-bezier(.2,.8,.3,1) both;
}
@keyframes revIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.rev > .rl{
  display:flex;align-items:center;gap:8px;margin-bottom:9px;
  font-family:var(--font-mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--c);
}
.rev > .rl .cnt{margin-left:auto;color:var(--deck-ink-3);letter-spacing:0}
.rev textarea{
  min-height:92px;background:var(--deck-3);border:1px solid var(--deck-line);
  border-radius:11px;font-size:13.5px;
}
/* Слоты под файлы: пунктир — привычный знак «сюда можно положить». */
.slots{display:flex;gap:8px;flex-wrap:wrap}
.slot{
  flex:1;min-width:118px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;
  min-height:84px;padding:12px 10px;border-radius:11px;cursor:pointer;
  background:var(--deck-3);border:1.5px dashed var(--deck-line);
  color:var(--deck-ink-3);font-size:11.5px;text-align:center;line-height:1.35;
  transition:border-color .18s,color .18s,background .18s;
}
.slot:hover{border-color:color-mix(in srgb,var(--c) 55%,transparent);color:var(--deck-ink);background:var(--deck-2)}
.slot svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

/* Настройки идут группами со своей подписью: «Скорость» и «Формат»
   вперемешку одной кучей читались как случайный набор кнопок. */
.dopts{margin:16px 0}
.dg{display:grid;grid-template-columns:74px minmax(0,1fr);gap:10px;align-items:center;margin-bottom:8px}
.dg:last-child{margin-bottom:0}
.dg > .gk{
  font-family:var(--font-mono);font-size:9px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--deck-ink-3);text-align:right;line-height:1.25;
}
/* Сегмент: варианты одной настройки склеены в один переключатель,
   поэтому их не спутать с вариантами соседней. */
.dseg{
  display:flex;gap:2px;padding:2px;background:var(--deck-2);
  border:1px solid var(--deck-line);border-radius:10px;
}
/* Много вариантов (у изображений их одиннадцать) — переносим строкой,
   иначе они уехали бы в боковую прокрутку и половина осталась бы скрытой. */
.dseg.many{flex-wrap:wrap}
.dseg.many .dopt{flex:0 0 auto}
/* Значение одно — это не выбор, а факт модели: показываем как надпись. */
.dfix{
  display:inline-flex;align-items:center;height:30px;padding:0 11px;border-radius:9px;
  background:var(--deck-2);border:1px dashed var(--deck-line);
  font-family:var(--font-mono);font-size:11.5px;color:var(--deck-ink-2);
}
.dopt{
  flex:1;min-width:0;display:inline-flex;align-items:center;justify-content:center;
  height:28px;padding:0 9px;border-radius:8px;background:none;border:0;
  font-size:12px;color:var(--deck-ink-2);cursor:pointer;white-space:nowrap;
  transition:background .16s,color .16s;
}
.dopt:hover{color:var(--deck-ink);background:var(--deck-3)}
.dopt.on{background:color-mix(in srgb,var(--c) 22%,transparent);color:var(--c);font-weight:600}

/* ─── модели ────────────────────────────────────────────────── */
.dmodels{display:flex;flex-direction:column;gap:2px;max-height:198px;overflow-y:auto;margin-bottom:14px;scrollbar-width:thin}
.dmodels::-webkit-scrollbar{width:5px}
.dmodels::-webkit-scrollbar-thumb{background:var(--deck-line);border-radius:3px}
.dgroup{
  display:flex;align-items:center;gap:8px;padding:9px 4px 5px;
  font-family:var(--font-mono);font-size:9px;letter-spacing:.11em;text-transform:uppercase;color:var(--deck-ink-3);
}
.dgroup::after{content:"";flex:1;height:1px;background:var(--deck-line)}
.dmi{
  display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:10px;cursor:pointer;
  border:1px solid transparent;transition:background .14s,border-color .14s;
}
.dmi:hover{background:var(--deck-2)}
.dmi.on{background:color-mix(in srgb,var(--c) 14%,transparent);border-color:color-mix(in srgb,var(--c) 40%,transparent)}
.dmi .dot{width:6px;height:6px;border-radius:50%;background:var(--m-text);flex:none}
.dmi.on .dot{background:var(--c)}
.dmi .nm{font-size:13px;font-weight:500;line-height:1.3}
.dmi .by{font-family:var(--font-mono);font-size:10px;color:var(--deck-ink-3);margin-left:auto;flex:none}
/* Отметка бесплатной модели — не приглушение платных, а подсказка:
   у гостя эти работают сразу. */
.dmi .by.free{
  color:var(--m-text);background:color-mix(in srgb,var(--m-text) 15%,transparent);
  padding:3px 7px;border-radius:5px;letter-spacing:.05em;text-transform:uppercase;font-size:9px;
}
/* Платные приглушены и не выбираются. Цен гостю не показываем:
   до регистрации важно не «сколько», а «открывается в кабинете». */
.dmi.locked{opacity:.38;cursor:default}
.dmi.locked:hover{background:none}
.dmi.locked .dot{background:var(--deck-ink-3)}
.dmi.locked .by{display:inline-flex;align-items:center;gap:5px;text-transform:none;letter-spacing:0;font-family:var(--font-ui);font-size:11px}
.dmi.locked .by svg{width:11px;height:11px;fill:none;stroke:currentColor;stroke-width:2}

.deck-foot{margin-top:auto;padding-top:14px;border-top:1px solid var(--deck-line)}
.dgo{
  width:100%;display:inline-flex;align-items:center;justify-content:center;gap:9px;height:48px;
  border:0;border-radius:13px;font-size:14.5px;font-weight:600;cursor:pointer;
  background:var(--c);color:var(--c-ink);
  transition:transform .16s,filter .16s,box-shadow .16s;
  box-shadow:0 10px 30px -10px color-mix(in srgb,var(--c) 60%,transparent);
}
html[data-theme="dark"] .dgo{color:#06090A}
.dgo:hover{transform:translateY(-2px);filter:brightness(1.07);text-decoration:none}
.dgo svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.dgo[disabled]{opacity:.65;pointer-events:none}
.dhint{margin-top:11px;font-size:11.5px;color:var(--deck-ink-3);line-height:1.5;text-align:center}
.dhint b{color:var(--deck-ink-2);font-weight:600}
.dhint a{color:var(--c)}

/* ─── витрина ───────────────────────────────────────────────── */
.show{
  position:relative;background:var(--surface);border:1px solid var(--line);border-radius:20px;
  overflow:hidden;min-height:544px;
}
.show-head{
  position:absolute;inset:0 0 auto 0;z-index:3;display:flex;align-items:center;gap:9px;
  padding:14px 16px;font-family:var(--font-mono);font-size:9.5px;letter-spacing:.11em;
  text-transform:uppercase;color:var(--ink-4);
  background:linear-gradient(180deg,var(--surface) 58%,transparent);
}
.show-head i{width:6px;height:6px;border-radius:50%;background:var(--c);transition:background .6s}
/* На широком экране обёртки как будто нет: сцены по-прежнему
   позиционируются относительно всей витрины. На узком она становится
   настоящим контейнером, и шапка перестаёт лежать поверх них. */
.show-body{display:contents}
.show-what{display:flex;align-items:center;gap:9px}
.slot-head{display:none}
.scene{position:absolute;inset:42px 16px 16px;opacity:0;pointer-events:none;transition:opacity .4s}
.scene.on{opacity:1;pointer-events:auto}

@keyframes pop{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}

/* ─── область результата ────────────────────────────────────
   Не выдуманные картинки: пустое состояние ровно такое же,
   как в кабинете до запуска. Рамка принимает выбранное
   соотношение сторон, поэтому видно, что именно получится. */
.out{display:flex;flex-direction:column;height:100%;gap:14px}
.out-box{flex:1;display:grid;place-items:center;min-height:0}
.out-frame{
  position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  max-width:100%;max-height:100%;padding:20px;border-radius:16px;
  background:var(--surface-2);border:1.5px dashed var(--line);
  transition:aspect-ratio .35s cubic-bezier(.2,.8,.3,1),width .35s cubic-bezier(.2,.8,.3,1);
}
.out-frame.track{width:100%;aspect-ratio:auto;min-height:132px}
.out-ico{
  width:42px;height:42px;border-radius:13px;display:grid;place-items:center;
  background:color-mix(in srgb,var(--c) 13%,transparent);color:var(--c);
  transition:background .5s,color .5s;
}
.out-ico svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.out-cap{font-size:13.5px;color:var(--ink-3);text-align:center;line-height:1.5;max-width:26ch}
.out-size{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-4);
}

/* Дорожка звука: очертание плеера, а не бегущие полоски. */
.out-track{display:flex;align-items:center;gap:3px;width:100%;height:46px;margin-top:2px}
.out-track i{flex:1;background:var(--c);border-radius:2px;opacity:.28;transition:background .5s}

/* Что уйдёт в работу — теми же словами, что в форме. */
.out-sum{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;flex:none}
.out-sum span{
  display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:8px;
  background:var(--surface-2);border:1px solid var(--line-soft);
  font-family:var(--font-mono);font-size:10.5px;color:var(--ink-3);
}
.out-sum span b{color:var(--ink-2);font-weight:600;font-family:var(--font-ui);font-size:12px}
.out-sum span.head{background:color-mix(in srgb,var(--c) 10%,transparent);border-color:transparent}
.out-sum span.head b{color:var(--c)}

/* переписка */
/* Поле ввода стоит под разговором, как в любом чате: слева, в панели
   настроек, его никто не искал — глаз ищет строку внизу переписки. */
/* Имена с приставкой demo-: класс .chat-wrap занят чатом кабинета в
   app.css, и его правило для широких экранов доставало сюда — поле
   ввода переставало растягиваться и уезжало за нижний край. Общее имя
   для двух разных блоков рано или поздно ломает один из них. */
.demo-chat{display:flex;flex-direction:column;height:100%;gap:12px}
.demo-chat-log{
  flex:1;min-height:0;display:flex;flex-direction:column;gap:11px;
  justify-content:flex-end;padding:0 4px;overflow-y:auto;scrollbar-width:thin;
}
.demo-chat-foot{flex:none}

/* На светлой панели поле берёт цвета страницы, а не пульта:
   тёмная рамка посреди белого блока выглядела бы заплаткой. */
.demo-chat-foot .dfield{background:var(--surface-2);border-color:var(--line)}
.demo-chat-foot .dfield:hover{border-color:var(--ink-4)}
/* Фокус обозначаем только рамкой: цветное свечение на светлой панели
   выглядело кричаще, а поле здесь и так единственное. */
.demo-chat-foot .dfield:focus-within{border-color:var(--ink-3);box-shadow:none}
.demo-chat-foot textarea{color:var(--ink);min-height:64px}
.demo-chat-foot textarea::placeholder{color:var(--ink-4)}
.demo-chat-foot .tool{color:var(--ink-4)}
.demo-chat-foot .tool:hover{background:var(--sunken);color:var(--ink)}
.demo-chat-foot .dsend{background:var(--c);color:var(--c-ink)}
.bub{max-width:78%;padding:13px 16px;border-radius:17px;font-size:14px;line-height:1.58}
.scene.on .bub{animation:pop .5s cubic-bezier(.2,.8,.3,1) both}
.bub.me{align-self:flex-end;background:var(--c);color:#fff;border-bottom-right-radius:6px}
html[data-theme="dark"] .bub.me{color:#06090A}
.bub.ai{align-self:flex-start;background:var(--surface-2);border:1px solid var(--line);border-bottom-left-radius:6px;color:var(--ink-2)}
.bub.ai b{color:var(--c)}
.bub.err{align-self:flex-start;background:var(--crit-soft);border:1px solid color-mix(in srgb,var(--crit) 26%,transparent);color:var(--crit)}
/* Три точки, пока модель думает. */
.typing{display:inline-flex;gap:4px;align-items:center;padding:4px 0}
.typing i{width:6px;height:6px;border-radius:50%;background:var(--c);animation:blink 1.25s infinite}
.typing i:nth-child(2){animation-delay:.18s}
.typing i:nth-child(3){animation-delay:.36s}
@keyframes blink{0%,60%,100%{opacity:.25;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}

/* ─── окно «нужен вход» ─────────────────────────────────────
   Открывается по запуску генерации: форма настоящая, но выполнить
   её без аккаунта нельзя — списывать не с чего. */
/* Вуаль задана явным тёмным цветом, а не из --ink: в тёмной теме
   --ink почти белый, и экран не затемнялся, а выцветал. */
.gate{
  position:fixed;inset:0;z-index:200;display:none;place-items:center;padding:20px;
  background:
    radial-gradient(120% 80% at 50% 0%,color-mix(in srgb,var(--c) 24%,transparent),transparent 62%),
    rgba(9,12,10,.58);
  backdrop-filter:blur(3px) saturate(115%);
}
.gate.open{display:grid;animation:fade .24s ease both}
@keyframes fade{from{opacity:0}to{opacity:1}}
.gate-box{
  position:relative;width:min(100%,430px);background:var(--surface);
  border:1px solid var(--line);border-radius:22px;padding:32px 30px 30px;text-align:center;
  box-shadow:0 30px 80px -20px rgba(0,0,0,.45), 0 0 0 1px rgba(255,255,255,.04) inset;
  animation:lift .32s cubic-bezier(.2,.8,.3,1) both;
}
@keyframes lift{from{opacity:0;transform:translateY(16px) scale(.97)}to{opacity:1;transform:none}}
.gate-box::before{
  content:"";position:absolute;inset:0 0 auto 0;height:4px;border-radius:22px 22px 0 0;
  background:linear-gradient(90deg,var(--m-voice),var(--m-image) 25%,var(--m-video) 50%,var(--m-music) 75%,var(--m-text));
}
.gate-ico{
  width:52px;height:52px;border-radius:16px;display:grid;place-items:center;margin:6px auto 16px;
  background:color-mix(in srgb,var(--c) 13%,transparent);color:var(--c);
}
.gate-ico svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.gate h3{
  font-family:var(--font-display);font-weight:500;font-size:21px;letter-spacing:-.035em;
  margin:0 0 10px;color:var(--ink);
}
.gate p{margin:0 0 22px;font-size:14px;line-height:1.6;color:var(--ink-3)}
.gate p b{color:var(--ink-2);font-weight:600}
.gate-go{display:flex;gap:9px;justify-content:center;flex-wrap:wrap}
.gate-close{
  position:absolute;top:14px;right:14px;width:30px;height:30px;border-radius:9px;
  display:grid;place-items:center;color:var(--ink-4);background:none;border:0;cursor:pointer;
  transition:background .15s,color .15s;
}
.gate-close:hover{background:var(--surface-2);color:var(--ink)}
.gate-close svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}

/* ═══ 2. БЕГУЩАЯ СТРОКА МОДЕЛЕЙ ════════════════════════════ */
/* Селектор с .home — иначе общее правило .home section вернуло бы
   боковые отступы, а лента должна идти от края до края. */
.home .ticker{
  padding:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  background:var(--surface);
}
/* Обрезающий слой отдельным элементом: лента шире экрана всегда,
   и клипать её должен свой контейнер, а не секция. */
.ticker .clip{width:100%;max-width:100%;overflow:hidden}
.ticker .row{display:flex;width:max-content;animation:run 46s linear infinite;will-change:transform}
.ticker:hover .row{animation-play-state:paused}
@keyframes run{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.ticker .it{
  display:inline-flex;align-items:center;gap:10px;padding:15px 22px;white-space:nowrap;
  font-size:13.5px;color:var(--ink-3);border-right:1px solid var(--line-soft);
}
.ticker .it b{color:var(--ink-2);font-weight:600}
.ticker .it i{width:6px;height:6px;border-radius:50%;background:var(--mc,var(--accent));flex:none}

/* ═══ 3. ЧТО ПОЛУЧАЕТСЯ ════════════════════════════════════ */
.mods{padding-top:66px;padding-bottom:66px}
.mods-head{margin-bottom:28px}
.mods-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(232px,1fr));gap:12px}
.mcard{
  /* Колонкой, а не блоком: описания у модулей разной длины, и строка с
     ценой висела на разной высоте — пять карточек читались как
     неровный забор. Теперь она прижата к низу у всех. */
  position:relative;display:flex;flex-direction:column;text-decoration:none;color:inherit;overflow:hidden;
  background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:20px 18px 18px;
  transition:transform .28s cubic-bezier(.2,.8,.3,1),box-shadow .28s,border-color .28s;
}
.mcard .px{margin-top:auto}
.mcard::before{content:"";position:absolute;inset:0 0 auto 0;height:3px;background:var(--mc)}
/* Цветное свечение прорастает снизу при наведении. */
.mcard::after{
  content:"";position:absolute;inset:auto 0 0 0;height:0;pointer-events:none;
  background:linear-gradient(0deg,color-mix(in srgb,var(--mc) 16%,transparent),transparent);
  transition:height .35s cubic-bezier(.2,.8,.3,1);
}
.mcard:hover{transform:translateY(-6px);box-shadow:var(--shadow-2);border-color:color-mix(in srgb,var(--mc) 45%,var(--line));text-decoration:none}
.mcard:hover::after{height:100%}
.mcard > *{position:relative;z-index:1}
.mcard .ico{
  width:40px;height:40px;border-radius:12px;display:grid;place-items:center;margin-bottom:13px;
  background:color-mix(in srgb,var(--mc) 13%,transparent);color:var(--mc);
  transition:transform .28s cubic-bezier(.2,.8,.3,1);
}
.mcard:hover .ico{transform:scale(1.08) rotate(-4deg)}
.mcard .ico svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.mcard b{display:block;font-size:16px;letter-spacing:-.015em;margin-bottom:7px;color:var(--ink)}
.mcard p{margin:0 0 14px;font-size:13px;line-height:1.6;color:var(--ink-3)}
.mcard .px{
  font-family:var(--font-mono);font-size:11.5px;color:var(--mc);font-weight:500;
  display:flex;align-items:center;gap:7px;padding-top:12px;border-top:1px solid var(--line-soft);
}
.mcard .px svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;transition:transform .28s}
.mcard:hover .px svg{transform:translateX(4px)}

/* ═══ 4. КАК ЭТО РАБОТАЕТ ══════════════════════════════════ */
.flow{padding-bottom:66px}
.flow .mid{position:relative}
.steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px;margin-top:28px;position:relative}
/* Линия, соединяющая шаги: прочерчивается при появлении секции. */
.steps::before{
  content:"";position:absolute;left:34px;right:34px;top:29px;height:2px;
  background:linear-gradient(90deg,var(--m-text),var(--m-image),var(--m-video));
  transform:scaleX(0);transform-origin:left;transition:transform 1.1s cubic-bezier(.2,.75,.3,1) .2s;
}
.steps.in::before{transform:scaleX(1)}
.step{position:relative;padding-top:0}
.step .n{
  width:58px;height:58px;border-radius:17px;display:grid;place-items:center;margin-bottom:15px;
  background:var(--surface);border:1px solid var(--line);position:relative;z-index:2;
  font-family:var(--font-mono);font-weight:700;font-size:17px;color:var(--sc);
  box-shadow:var(--shadow-1);transition:transform .3s cubic-bezier(.2,.8,.3,1),box-shadow .3s;
}
.step:hover .n{transform:translateY(-4px) scale(1.04);box-shadow:var(--shadow-2)}
.step b{display:block;font-size:16.5px;letter-spacing:-.02em;margin-bottom:7px}
.step p{margin:0;font-size:13.5px;line-height:1.65;color:var(--ink-3)}
.step p code{
  font-family:var(--font-mono);font-size:12px;background:var(--surface-2);
  border:1px solid var(--line-soft);border-radius:5px;padding:1px 5px;color:var(--ink-2);
}

/* ═══ 5. ПРОТОКОЛ ══════════════════════════════════════════ */
.money{padding-bottom:66px}
.money .mid{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:44px;align-items:center}
.ledger{
  background:var(--surface);border:1px solid var(--line);border-radius:18px;overflow:hidden;
  box-shadow:var(--shadow-1);
}
.ledger .lh{
  display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line-soft);
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--ink-4);
}
.ledger .lh .bal{margin-left:auto;color:var(--ink);font-size:13px;letter-spacing:0;font-weight:700}
.lrow{
  display:grid;grid-template-columns:auto 1fr auto auto;gap:14px;align-items:center;
  padding:13px 16px;border-bottom:1px solid var(--line-soft);
  opacity:0;transform:translateX(-10px);
  transition:opacity .5s cubic-bezier(.2,.8,.3,1),transform .5s cubic-bezier(.2,.8,.3,1);
}
.ledger.in .lrow{opacity:1;transform:none}
.lrow:last-child{border-bottom:0}
.lrow .d{width:8px;height:8px;border-radius:50%;background:var(--rc)}
.lrow .t{font-size:13.5px}
.lrow .t small{display:block;font-family:var(--font-mono);font-size:10px;color:var(--ink-4);margin-top:2px}
.lrow .s{font-family:var(--font-mono);font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--rc)}
.lrow .a{font-family:var(--font-mono);font-size:11.5px;color:var(--ink-4);font-variant-numeric:tabular-nums;text-align:right}
.lrow.ret{background:color-mix(in srgb,var(--ok) 7%,transparent)}

/* ═══ 6. ТАРИФЫ ════════════════════════════════════════════ */
.rates{padding-bottom:66px}
.rates-head{display:flex;align-items:flex-end;gap:22px;margin-bottom:20px;flex-wrap:wrap}
.rates-head .hh{margin:0}
.rates-head p{margin:0 0 4px auto;font-size:13px;color:var(--ink-3);max-width:40ch}
.rates .tbl tbody tr{transition:background .16s}
.rates .tbl tbody tr:hover{background:var(--surface-2)}
.rates .tbl td:first-child{font-weight:600}

/* ═══ 7. ИНСТРУМЕНТЫ ═══════════════════════════════════════ */
.tools{padding-bottom:66px}
.tools .mid{
  background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:32px;
  box-shadow:var(--shadow-1);
}
/* Карточки инструментов.
   Прежде это были таблетки-теги: по ним не читалось, что это ссылки на
   отдельные страницы, названия сливались в серую ленту, а на широком
   экране лента растягивалась во всю ширину и рвалась как попало.
   Сетка держит одинаковые карточки и не зависит от длины названий. */
.tool-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));
  gap:10px;margin-top:22px;
}
.tool-card{
  position:relative;display:flex;align-items:center;gap:13px;
  padding:15px 16px;border-radius:16px;text-decoration:none;
  background:var(--surface);border:1px solid var(--line);
  transition:border-color .18s,transform .18s,box-shadow .18s;
}
.tool-card:hover{
  text-decoration:none;transform:translateY(-2px);
  border-color:color-mix(in srgb,var(--cc,var(--accent)) 42%,transparent);
  box-shadow:var(--shadow-1);
}
/* Значок в цвете модуля: он же отличает инструменты текста от речевых. */
.tool-ico{
  width:38px;height:38px;border-radius:12px;flex:none;display:grid;place-items:center;
  background:color-mix(in srgb,var(--cc,var(--accent)) 12%,transparent);
  color:var(--cc,var(--accent));
}
.tool-ico svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.tool-body{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.tool-name{font-size:14.5px;font-weight:600;color:var(--ink);line-height:1.3}
/* Пояснение в две строки: оно помогает выбрать, но не должно
   превращать карточку в абзац. */
.tool-note{
  font-size:12px;line-height:1.45;color:var(--ink-3);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.tool-go{
  flex:none;width:26px;height:26px;border-radius:8px;display:grid;place-items:center;
  color:var(--ink-4);transition:background .18s,color .18s,transform .18s;
}
.tool-go svg{width:15px;height:15px}
.tool-card:hover .tool-go{
  background:var(--cc,var(--accent));color:#fff;transform:translateX(2px);
}
/* Последняя карточка — не инструмент, а вход в общий список. */
.tool-all{border-style:dashed;background:transparent}
.tool-all .tool-name{color:var(--ink-2)}

@media(max-width:560px){
  .tool-grid{grid-template-columns:1fr;gap:8px}
  .tool-card{padding:13px 14px;gap:11px}
  .tool-ico{width:34px;height:34px;border-radius:10px}
}

.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}
.chip{
  display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 15px;border-radius:999px;
  background:var(--surface-2);border:1px solid var(--line);font-size:13px;color:var(--ink-2);
  text-decoration:none;transition:background .18s,color .18s,border-color .18s,transform .18s;
}
.chip:hover{background:var(--ink);color:var(--ground);border-color:var(--ink);transform:translateY(-3px);text-decoration:none}
.chip i{width:6px;height:6px;border-radius:50%;background:var(--cc,var(--accent));flex:none;transition:background .18s}
.chip:hover i{background:currentColor}
.chip.all{background:transparent;border-style:dashed}

/* ═══ 8. ФИНАЛ ═════════════════════════════════════════════ */
.fin{padding-bottom:80px}
/* Блок идёт по теме страницы, а не наперекор ей: раньше он был тёмным
   в обеих темах и посреди светлой страницы читался как чужеродная
   заплатка. Цвета берём из общих переменных — тогда и в тёмной теме
   он остаётся собой. */
.fin .mid{
  position:relative;overflow:hidden;border-radius:24px;padding:clamp(34px,5vw,62px);
  background:var(--surface);color:var(--ink);text-align:center;
  border:1px solid var(--line);box-shadow:var(--shadow-1);
}
.fin .mid::before{
  content:"";position:absolute;inset:0 0 auto 0;height:4px;
  background:linear-gradient(90deg,var(--m-voice),var(--m-image) 25%,var(--m-video) 50%,var(--m-music) 75%,var(--m-text));
}
/* Медленно плывущее пятно света — единственная фоновая анимация. */
.fin .mid::after{
  content:"";position:absolute;width:70%;aspect-ratio:1;left:15%;top:-40%;border-radius:50%;
  /* Слабее прежнего: пятно рассчитывалось на тёмный фон, на светлом
     та же плотность выглядела грязным разводом. */
  background:radial-gradient(circle,color-mix(in srgb,var(--m-video) 9%,transparent),transparent 64%);
  animation:drift 17s ease-in-out infinite alternate;pointer-events:none;
}
@keyframes drift{
  from{transform:translate(-14%,0) scale(1)}
  to{transform:translate(14%,9%) scale(1.16)}
}
.fin .mid > *{position:relative;z-index:1}
.fin h2{
  font-family:var(--font-display);font-weight:500;letter-spacing:-.05em;
  font-size:clamp(26px,3.6vw,46px);line-height:1.04;margin:0 0 14px;
}
.fin p{margin:0 auto 26px;max-width:56ch;font-size:15px;line-height:1.65;color:var(--ink-2)}
.fin .fine{margin-top:16px;font-size:12.5px;color:var(--ink-4)}
.fin .fine a{color:var(--ink-2);text-decoration:underline}

/* Три числа вместо абзаца: что именно бесплатно, видно с одного взгляда. */
.fin-list{
  display:flex;justify-content:center;flex-wrap:wrap;gap:12px;margin:0 auto 30px;max-width:760px;
}
.fin-item{
  flex:1 1 200px;max-width:240px;padding:18px 16px;border-radius:16px;
  background:var(--surface-2);border:1px solid var(--line-soft);
}
.fin-item b{
  display:block;font-family:var(--font-display);font-weight:500;letter-spacing:-.03em;
  font-size:17px;line-height:1.2;color:var(--accent);margin-bottom:7px;
}
.fin-item span{display:block;font-size:12.5px;line-height:1.5;color:var(--ink-3)}
@media(max-width:560px){
  .fin-item{flex:1 1 100%;max-width:none;text-align:left}
}

/* Настройки под полем: на широком экране обычный столбик. */
.dset{display:block}

/* На широком экране гнездо переключателей пустует — оно только для
   узкого, где они переезжают из пульта наверх. */
.slot-tabs{display:none}

/* ─── адаптив ───────────────────────────────────────────────── */
@media(max-width:1040px){
  .stage{grid-template-columns:1fr}
  .show{min-height:380px;order:-1}
  .money .mid{grid-template-columns:1fr;gap:26px}
  .steps::before{display:none}

  /* Переключатели встают первой строкой — выше переписки.
     Раньше они уезжали под пульт, и на телефоне до них надо было
     долистать всю форму, хотя выбор модуля — первое действие. */
  .slot-tabs{display:block;order:-2}
  .slot-tabs .dtabs{
    margin:0;padding:5px;border-radius:16px;
    background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-1);
  }
  /* Переехав из тёмного пульта на светлую страницу, вкладки берут
     её цвета: тёмная плашка посреди белого выглядела бы заплаткой. */
  .slot-tabs .dtab{color:var(--ink-3)}
  .slot-tabs .dtab:hover{background:var(--surface-2);color:var(--ink)}
  .slot-tabs .dtab[aria-selected="true"]{background:var(--c);color:var(--c-ink)}

  /* Витрина становится колонкой: шапка сверху, сцены под ней.
     Раньше шапка лежала поверх сцен, и переехавшие в неё настройки
     закрыли бы переписку. */
  .show{display:flex;flex-direction:column;min-height:min(74vh,560px)}
  .show-head{
    position:static;flex:none;display:flex;flex-wrap:nowrap;gap:6px;
    padding:8px 10px;background:var(--surface);
    border-bottom:1px solid var(--line-soft);
  }
  /* Подпись «Ответ модели» уступает место настройкам: что перед тобой
     переписка, видно и без неё, а строка на телефоне дорога. */
  .show-what{display:none}
  .show-body{display:block;position:relative;flex:1;min-height:0}
  .scene{inset:0}

  /* Настройки уезжают в шапку — компактной строкой справа от подписи. */
  .slot-head{display:block;flex:1;min-width:0}

  /* Модель, голос и инструкция — строкой мелких кнопок.
     Тремя блоками во всю ширину с подписями они съедали пол-экрана,
     хотя трогают их редко. */
  .dset{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
  .dset-l{display:none}
  .dset > *,
  .dset #d-voice-row{flex:1 1 150px;min-width:0;margin:0}

  .dset .pick-btn,
  .dset .prompt-row{
    height:38px;padding:0 10px;gap:7px;border-radius:11px;font-size:12.5px;
  }
  .dset .pick-btn .pmark{width:22px;height:22px;border-radius:7px;font-size:9px}
  .dset .pick-btn .pmark img{width:14px;height:14px}
  .dset .pick-btn .nm{font-size:12.5px}
  /* Язык голоса и статус инструкции — вторичны: на узкой кнопке
     они вытесняли само название. */
  .dset .pick-btn .pmeta,
  .dset .prompt-row .st{display:none}
  .dset .prompt-row svg{width:14px;height:14px}
  .dset .prompt-row{white-space:nowrap}
  .dset-more{display:none}
  /* Поровну и с переносом. Без переноса третья кнопка (она бывает
     только в озвучке) вылезала за край, а без нижнего предела ширины
     первая схлопывалась до одного значка. */
  .slot-head .dset{margin:0;flex-wrap:wrap;gap:6px}
  .slot-head .dset > *{flex:1 1 96px;min-width:96px}
  .slot-head .pick-btn,
  .slot-head .prompt-row{height:32px;border-radius:9px;font-size:12px}
  .slot-head .pick-btn .nm{font-size:12px}
  /* Длинное имя обрезаем многоточием, а не выталкиваем соседа. */
  .slot-head .pick-btn .nm,
  .slot-head .prompt-row{overflow:hidden;text-overflow:ellipsis}
}
@media(max-width:680px){
  .home .in,.home .mid{padding-left:16px;padding-right:16px}
  .stage{padding-bottom:44px}
  /* Подписи вернулись: значки без слов читались как ребус, а места
     подпись занимает одну строку в девять пикселей. */
  .dtab{font-size:9.5px;gap:5px;height:56px;letter-spacing:.01em;font-weight:600}
  .dtab svg{width:19px;height:19px}
  .dg{grid-template-columns:1fr;gap:5px}
  .dg > .gk{text-align:left}
  .tools .mid{padding:22px}
  .mods,.flow,.money,.rates,.tools{padding-bottom:46px}
  .mods{padding-top:46px}
  .lrow{grid-template-columns:auto 1fr auto;gap:10px;padding:12px}
  .lrow .a{display:none}
}

/* ─── движение по желанию системы ───────────────────────────── */
@media(prefers-reduced-motion:reduce){
  [data-rise]{opacity:1;transform:none;transition:none}
  .steps::before{transform:scaleX(1);transition:none}
  .lrow{opacity:1;transform:none;transition:none}
  .ticker .row,.fin .mid::after,.typing i{animation:none}
  .scene.on .bub{animation:none;opacity:1}
  .out-frame{transition:none}
  .mcard:hover,.chip:hover,.dtab:hover,.step:hover .n,.dgo:hover{transform:none}
}

/* Ссылка на полный каталог под таблицей тарифов. */
.rates-more{
  display:flex;align-items:center;gap:16px;flex-wrap:wrap;
  margin-top:16px;font-size:13px;color:var(--ink-3);
}
.rates-more .btn{margin-left:auto}
.rates-more .btn svg{width:15px;height:15px;stroke-width:2;transition:transform .2s}
.rates-more .btn:hover svg{transform:translateX(3px)}
@media(max-width:640px){
  .rates-more .btn{margin-left:0;width:100%}
}

/* ═══ ПОСАДОЧНАЯ МОДУЛЯ ════════════════════════════════════
   Её смотрят, а не читают: смысл несут окно чата, значки и подписи
   в несколько слов. Абзацы прозы сюда не кладём — до них не доходят. */
.lander section{padding-top:0}

/* ─── первый экран ─────────────────────────────────────────── */
.lead-sec{padding-top:40px;padding-bottom:52px}
/* Текст слева, живое окно справа: обещание и доказательство рядом,
   на одном экране, вместе с кнопкой входа. */
.lead-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,560px);gap:38px;align-items:center}
.lead-text{min-width:0}

.crumbs{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--ink-4);margin-bottom:14px}
.crumbs a{color:inherit;text-decoration:none}
.crumbs a:hover{color:var(--ink-2)}

.lead-h1{
  font-family:var(--font-display);font-weight:500;letter-spacing:-.05em;line-height:1.04;
  font-size:clamp(32px,4.2vw,54px);margin:0 0 16px;max-width:16ch;text-wrap:balance;
}
.lead-sub{margin:0 0 26px;max-width:44ch;font-size:16.5px;line-height:1.6;color:var(--ink-3)}

.lead-go{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:22px}

/* Три довода строкой. Каждый — три-четыре слова: их скользят взглядом,
   а не читают. */
.lead-marks{display:flex;flex-wrap:wrap;gap:8px 18px}
.lead-marks span{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-3)}
.lead-marks i{
  width:15px;height:15px;border-radius:50%;flex:none;
  background:color-mix(in srgb,var(--c) 16%,transparent);position:relative;
}
.lead-marks i::after{
  content:"";position:absolute;left:4px;top:6px;width:6px;height:3px;
  border-left:2px solid var(--c);border-bottom:2px solid var(--c);
  transform:rotate(-45deg);
}

/* ─── окно чата ────────────────────────────────────────────── */
.lchat{
  position:relative;display:flex;flex-direction:column;
  background:var(--surface);border:1px solid var(--line);
  border-radius:20px;overflow:hidden;box-shadow:var(--shadow-2);
}
.lchat-head{
  display:flex;align-items:center;gap:10px;padding:13px 16px;flex:none;
  border-bottom:1px solid var(--line-soft);
}
.lchat-dot{
  width:8px;height:8px;border-radius:50%;flex:none;background:var(--c);
  box-shadow:0 0 0 4px color-mix(in srgb,var(--c) 16%,transparent);
}
.lchat-title{
  flex:1;min-width:0;font-size:13.5px;font-weight:600;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
/* Выбор модели — своим значком, а не системной стрелкой: у select она
   в каждой системе разная и выбивается из карточки. */
.lchat-pick{position:relative;display:flex;align-items:center;flex:none;max-width:190px}
.lchat-pick select{
  appearance:none;-webkit-appearance:none;width:100%;
  height:30px;padding:0 26px 0 11px;border-radius:9px;
  background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2);
  font-family:var(--font-ui);font-size:12px;cursor:pointer;
  text-overflow:ellipsis;transition:border-color .16s;
}
.lchat-pick select:hover{border-color:var(--ink-4)}
.lchat-pick svg{
  position:absolute;right:9px;width:13px;height:13px;pointer-events:none;color:var(--ink-4);
}

.lchat-log{
  display:flex;flex-direction:column;gap:11px;
  padding:18px;background:var(--ground);flex:1;min-height:0;
}
.lbub{max-width:88%;padding:12px 15px;border-radius:16px;font-size:14px;line-height:1.6}
.lbub.me{align-self:flex-end;background:var(--c);color:#fff;border-bottom-right-radius:6px}
html[data-theme="dark"] .lbub.me{color:#06090A}
.lbub.ai{align-self:flex-start;background:var(--surface);border:1px solid var(--line);color:var(--ink-2);border-bottom-left-radius:6px}
.lbub.ai b{color:var(--c)}

.lchat-form{display:flex;align-items:flex-end;gap:10px;padding:12px 14px;border-top:1px solid var(--line);flex:none}
.lchat-form textarea{
  flex:1;min-width:0;resize:none;min-height:42px;max-height:140px;
  padding:11px 14px;border-radius:12px;border:1px solid var(--line);
  background:var(--surface-2);color:var(--ink);
  font-family:var(--font-ui);font-size:14.5px;line-height:1.5;
  transition:border-color .16s,background .16s;
}
.lchat-form textarea:focus{outline:0;background:var(--surface);border-color:var(--c)}
.lchat-form textarea::placeholder{color:var(--ink-4)}
.lchat-send{
  flex:none;width:42px;height:42px;border-radius:12px;display:grid;place-items:center;
  border:0;background:var(--c);color:#fff;cursor:pointer;transition:transform .16s;
}
.lchat-send svg{width:19px;height:19px;fill:none;stroke:currentColor}
.lchat-send:hover{transform:translateY(-1px)}


/* ─── что умеет ────────────────────────────────────────────── */
.feat-sec{padding-bottom:52px}
.feat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.feat{
  display:flex;flex-direction:column;gap:9px;padding:20px 18px;
  background:var(--surface);border:1px solid var(--line);border-radius:16px;
  transition:transform .2s,border-color .2s;
}
.feat:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--c) 34%,transparent)}
.feat-ico{
  width:40px;height:40px;border-radius:12px;display:grid;place-items:center;
  background:color-mix(in srgb,var(--c) 12%,transparent);color:var(--c);
}
.feat-ico svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.feat b{font-size:15px;font-weight:600;color:var(--ink);line-height:1.3}
.feat span{font-size:13px;line-height:1.5;color:var(--ink-3)}

/* ─── разработчики ─────────────────────────────────────────── */
.vendors{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}
.vendor{
  display:inline-flex;align-items:center;gap:9px;height:38px;padding:0 15px 0 9px;
  border-radius:999px;background:var(--surface);border:1px solid var(--line);
  font-size:13.5px;font-weight:500;color:var(--ink-2);
}
.vendor-mark{
  width:24px;height:24px;border-radius:7px;display:grid;place-items:center;flex:none;
  background:color-mix(in srgb,var(--vc,var(--ink-4)) 14%,transparent);
  color:var(--vc,var(--ink-4));overflow:hidden;
  font-family:var(--font-display);font-weight:600;font-size:10px;
}
.vendor-mark img{width:15px;height:15px;object-fit:contain;display:block}

/* ─── текст, если он есть ──────────────────────────────────── */
.prose-sec{padding-bottom:44px}
.prose{max-width:70ch;font-size:16px;line-height:1.75;color:var(--ink-2)}
.prose h2{
  font-family:var(--font-display);font-weight:500;letter-spacing:-.04em;
  font-size:clamp(21px,2.4vw,28px);line-height:1.2;color:var(--ink);margin:32px 0 12px;
}
.prose p{margin:0 0 14px}
.prose ul{margin:0 0 16px;padding-left:22px}
.prose li{margin-bottom:7px}
.prose strong{color:var(--ink);font-weight:600}

/* ─── вопросы ──────────────────────────────────────────────── */
.faq-sec{padding-bottom:56px}
.faq{display:flex;flex-direction:column;gap:0;margin-top:22px;max-width:880px;
  border-top:1px solid var(--line)}
/* Сплошной список с разделителями, а не коробки: так он читается как
   один блок, а не как десяток карточек подряд. */
.faq-item{border-bottom:1px solid var(--line);transition:background .2s}
.faq-item[open]{background:var(--surface)}
.faq-item summary{
  display:flex;align-items:center;gap:16px;padding:18px 16px;cursor:pointer;
  list-style:none;
}
.faq-item summary::-webkit-details-marker{display:none}
.faq-no{
  flex:none;font-family:var(--font-mono);font-size:11px;font-weight:600;
  color:var(--ink-4);transition:color .2s;
}
.faq-item[open] .faq-no{color:var(--c)}
.faq-q{flex:1;min-width:0;font-size:15.5px;font-weight:600;color:var(--ink);line-height:1.4}
.faq-mark{
  flex:none;width:26px;height:26px;border-radius:8px;display:grid;place-items:center;
  color:var(--ink-4);transition:transform .25s,background .2s,color .2s;
}
.faq-mark svg{width:15px;height:15px}
.faq-item[open] .faq-mark{transform:rotate(180deg);background:var(--c);color:#fff}
.faq-a{
  padding:0 16px 20px 48px;font-size:14.5px;line-height:1.7;color:var(--ink-3);max-width:72ch;
  animation:faqIn .25s ease both;
}
@keyframes faqIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}

@media(max-width:1040px){
  .lead-grid{grid-template-columns:1fr;gap:28px}
  .lead-h1{max-width:none}
  .lchat-log{min-height:200px}
}
@media(max-width:640px){
  .lead-sec{padding-top:26px;padding-bottom:36px}
  .lead-go .btn{flex:1}
  .lchat-log{padding:14px 12px}
  .lbub{max-width:94%}
  .lchat-title{display:none}
  .lchat-pick{max-width:none;flex:1}
  .faq-item summary{gap:12px;padding:15px 12px}
  .faq-a{padding-left:40px}
  .feat-grid{grid-template-columns:1fr 1fr;gap:8px}
  .feat{padding:15px 13px;gap:7px}
  .feat-ico{width:34px;height:34px;border-radius:10px}
  .feat b{font-size:13.5px}
  .feat span{font-size:12px}
}

/* ═══ ОКНО ВХОДА ═══════════════════════════════════════════
   Замысел: окно не отбрасывает набранный вопрос, а забирает его с
   собой. Слева тёмная панель со спектром и текстом человека — он
   видит, ради чего заводит аккаунт. Справа форма.

   Композиция несимметричная намеренно: тёмная колонка держит левую
   треть, форма дышит справа. Ровные одинаковые блоки столбиком — то,
   от чего здесь уходим. */
.amodal{
  position:fixed;inset:0;z-index:300;display:none;place-items:center;padding:24px;
  background:rgba(8,11,9,.66);backdrop-filter:blur(5px) saturate(120%);
}
.amodal.on{display:grid;animation:amFade .22s ease both}
@keyframes amFade{from{opacity:0}to{opacity:1}}

.amodal-box{
  position:relative;display:grid;grid-template-columns:270px minmax(0,1fr);
  width:min(100%,820px);max-height:92vh;
  background:var(--surface);border-radius:26px;overflow:hidden;
  box-shadow:0 40px 100px -24px rgba(0,0,0,.55);
  animation:amLift .34s cubic-bezier(.2,.85,.3,1) both;
}
@keyframes amLift{from{opacity:0;transform:translateY(18px) scale(.975)}to{opacity:1;transform:none}}

.amodal-x{
  position:absolute;top:16px;right:16px;z-index:3;
  width:34px;height:34px;border-radius:11px;display:grid;place-items:center;
  border:0;background:var(--surface-2);color:var(--ink-3);cursor:pointer;
  transition:background .16s,color .16s,transform .16s;
}
.amodal-x:hover{background:var(--ink);color:var(--ground);transform:rotate(90deg)}
.amodal-x svg{width:14px;height:14px}

/* ─── левая панель ─────────────────────────────────────────── */
.aside{
  position:relative;display:flex;flex-direction:column;gap:22px;
  padding:32px 26px;background:#0E1310;color:#EFF2EA;overflow:hidden;
}
/* Пятно света снизу — панель не выглядит плоской заливкой. */
.aside::after{
  content:"";position:absolute;left:-30%;bottom:-40%;width:160%;aspect-ratio:1;
  background:radial-gradient(circle,rgba(106,56,212,.30),transparent 62%);
  pointer-events:none;
}
/* В тёмной теме панель почти сливалась с формой: и там, и там тёмное.
   Уводим её глубже и отбиваем кромкой. */
html[data-theme="dark"] .aside{background:#06090A;box-shadow:inset -1px 0 0 var(--line)}
.aside > *{position:relative;z-index:1}
.aside-spectrum{
  position:absolute;left:0;right:0;top:0;height:4px;z-index:2;
  background:linear-gradient(90deg,var(--m-text),var(--m-image) 27%,var(--m-video) 52%,var(--m-music) 76%,var(--m-voice));
}
.aside-mark{width:34px;height:34px;display:block;flex:none}
.aside-mark svg{width:100%;height:100%}

/* Вопрос человека — крупной цитатой с засечкой цвета слева. */
.aside-quote{margin:0;padding-left:14px;border-left:2px solid rgba(255,255,255,.16)}
.aside-quote-l{
  display:block;margin-bottom:7px;
  font-family:var(--font-mono);font-size:9px;letter-spacing:.14em;
  text-transform:uppercase;color:rgba(239,242,234,.42);
}
.aside-quote blockquote{
  margin:0;font-size:15px;line-height:1.55;color:#EFF2EA;
  display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden;
}

/* Доводы: крупное значение и подпись рядом, не список галочек. */
.aside-list{list-style:none;margin:auto 0 0;padding:0;display:flex;flex-direction:column;gap:14px}
.aside-list li{
  display:grid;grid-template-columns:auto minmax(0,1fr);gap:11px;align-items:center;
  font-size:12.5px;line-height:1.4;color:rgba(239,242,234,.62);
}
.aside-list span{
  font-family:var(--font-display);font-weight:500;font-size:17px;letter-spacing:-.03em;
  color:#EFF2EA;white-space:nowrap;
}

/* ─── правая часть ─────────────────────────────────────────── */
.apane{padding:36px 34px 30px;overflow-y:auto;display:flex;flex-direction:column}
.apane-head{margin-bottom:24px;padding-right:40px}
.apane-head h2{
  font-family:var(--font-display);font-weight:500;letter-spacing:-.045em;
  font-size:27px;line-height:1.12;color:var(--ink);margin:0 0 8px;
}
.apane-head p{margin:0;font-size:13.5px;line-height:1.55;color:var(--ink-3)}

.aform{display:flex;flex-direction:column;gap:14px}
.aform[hidden]{display:none}
.arow{display:grid;grid-template-columns:1fr 1fr;gap:10px}

/* Поле с подписью, которая живёт внутри и поднимается при вводе.
   Подпись над полем мелкими серыми капсами не читалась совсем —
   здесь она крупная и всегда на виду. */
.afield{position:relative;display:flex;flex-direction:column}
.afield input{
  width:100%;height:58px;padding:22px 15px 8px;border-radius:14px;
  background:var(--surface-2);border:1.5px solid var(--line);color:var(--ink);
  font-family:var(--font-ui);font-size:15px;
  transition:border-color .18s,background .18s,box-shadow .18s;
}
.afield label{
  position:absolute;left:16px;top:19px;pointer-events:none;
  font-size:15px;color:var(--ink-4);
  transition:transform .18s cubic-bezier(.2,.8,.3,1),color .18s,font-size .18s;
  transform-origin:left top;
}
.afield input:focus + label,
.afield input:not(:placeholder-shown) + label{
  transform:translateY(-11px) scale(.72);
  color:var(--c,var(--accent));font-weight:600;letter-spacing:.03em;
}
.afield input:focus{
  outline:0;background:var(--surface);border-color:var(--c,var(--accent));
  box-shadow:0 0 0 4px color-mix(in srgb,var(--c,var(--accent)) 13%,transparent);
}
.afield.bad input{border-color:var(--crit);background:var(--crit-soft)}
.afield.bad label{color:var(--crit)}

.afield em,.acheck em{
  font-style:normal;font-size:12px;line-height:1.4;color:var(--crit);margin-top:6px;
}
.afield em:empty,.acheck em:empty{display:none}

/* Своя галочка: браузерная выбивается из карточки в каждой системе. */
.acheck{
  display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 11px;
  align-items:start;margin-top:4px;cursor:pointer;
}
.acheck input{position:absolute;opacity:0;width:0;height:0}
.acheck i{
  width:21px;height:21px;border-radius:7px;display:grid;place-items:center;flex:none;
  border:1.5px solid var(--line);background:var(--surface-2);color:transparent;
  transition:background .16s,border-color .16s,color .16s;
}
.acheck i svg{width:12px;height:12px}
.acheck input:checked + i{background:var(--c,var(--accent));border-color:var(--c,var(--accent));color:#fff}
.acheck input:focus-visible + i{box-shadow:0 0 0 4px color-mix(in srgb,var(--c,var(--accent)) 16%,transparent)}
.acheck > span{font-size:12.5px;line-height:1.5;color:var(--ink-3)}
.acheck a{color:var(--c,var(--accent))}
.acheck.bad i{border-color:var(--crit)}
.acheck em{grid-column:2}

/* Кнопка со стрелкой, уезжающей вперёд при наведении. */
.abtn{
  position:relative;display:flex;align-items:center;justify-content:center;gap:10px;
  height:54px;border-radius:15px;border:0;margin-top:8px;
  background:var(--c,var(--accent));color:#fff;cursor:pointer;
  font-family:var(--font-ui);font-size:15.5px;font-weight:600;
  transition:transform .18s,box-shadow .18s,opacity .18s;
}
.abtn:hover{transform:translateY(-2px);box-shadow:0 10px 24px -10px color-mix(in srgb,var(--c,var(--accent)) 80%,transparent)}
.abtn:disabled{cursor:default;transform:none;box-shadow:none}
.abtn-go{width:17px;height:17px;transition:transform .18s}
.abtn:hover .abtn-go{transform:translateX(4px)}
.aspin{
  position:absolute;left:50%;top:50%;width:19px;height:19px;margin:-10px 0 0 -10px;
  border:2px solid rgba(255,255,255,.32);border-top-color:#fff;border-radius:50%;
  opacity:0;animation:aspin .7s linear infinite;
}
.sending .abtn span,.sending .abtn-go{opacity:0}
.sending .aspin{opacity:1}
@keyframes aspin{to{transform:rotate(360deg)}}

.aswap{
  display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;
  margin-top:auto;padding-top:18px;font-size:13px;color:var(--ink-3);
}
.aswap button{
  background:none;border:0;padding:0;cursor:pointer;
  font-family:var(--font-ui);font-size:13px;font-weight:600;color:var(--c,var(--accent));
}
.aswap button:hover,.aswap a:hover{text-decoration:underline}
.aswap a{color:var(--ink-4);margin-right:auto}

@media(max-width:760px){
  /* Панель схлопывается в шапку: на телефоне колонка слева съела бы
     форму, а вопрос человека показать всё равно хочется. */
  .amodal{padding:0;place-items:stretch}
  .amodal-box{
    grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr);
    width:100%;max-height:100%;border-radius:0;
  }
  .aside{flex-direction:row;align-items:center;gap:16px;padding:20px 18px}
  .aside-mark{width:28px;height:28px}
  .aside-quote{flex:1;min-width:0;padding-left:12px}
  .aside-quote blockquote{-webkit-line-clamp:2;font-size:13.5px}
  .aside-list{display:none}
  .apane{padding:26px 20px 24px}
  .apane-head h2{font-size:23px}
  .arow{grid-template-columns:1fr}
}
@media(prefers-reduced-motion:reduce){
  .amodal.on,.amodal-box{animation:none}
  .aspin{animation-duration:1.6s}
  .amodal-x:hover{transform:none}
}
