/* ═══════════════════════════════════════════════════════════════════
   Главный UI (next.html). Предыдущий бой — /legacy (index.html).
   Один файл: токены → каркас → сайдбар → топбар → старт → чат →
   палитра → тосты → адаптив.
   ═══════════════════════════════════════════════════════════════════ */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
/* Атрибут hidden — это правило [hidden]{display:none} из UA-таблицы, а
   она стоит ниже авторских стилей по происхождению каскада: любое наше
   правило display на том же элементе побеждает его независимо от
   специфичности. .start{display:flex} перебивал el.start.hidden=true —
   после ответа полоса «Сейчас актуально» оставалась на экране поверх
   чата, будто вопрос открылся вниз, а не заменил стартовый экран. */
[hidden]{display:none!important}

:root{
  /* Palette from rect342 (brand board) */
  --c-blue-deep:#0860a8;
  --c-blue:#5080c8;
  --c-blue-soft:#b0c8e0;
  --c-teal:#008898;
  --c-cyan:#18c0b8;
  --c-mint:#a0e0d8;
  --c-purple:#6038b0;
  --c-violet:#a890d8;
  --c-lavender:#c0b0e0;
  --c-lime:#98c808;
  --c-green:#789800;
  --c-coral:#f85830;
  --c-orange:#f88838;
  --c-peach:#f8a088;
  --c-red:#e00048;
  --c-ink:#282828;
  --c-gray:#808080;
  --c-silver:#b8b8b8;
  --c-sand:#e0c8b0;

  --brand-1:var(--c-teal);
  --brand-2:var(--c-cyan);
  --brand-3:var(--c-blue-deep);
  --grad:linear-gradient(105deg,var(--brand-1) 0%,var(--brand-2) 42%,var(--brand-3) 100%);
  /* Заливка основных кнопок — та же фирменная связка teal→blue, что у
     включённых переключателей, но взятая с тёмного края шкалы. Яркую
     пару из .sw.on здесь брать нельзя: у переключателя на заливке нет
     текста, а тут есть, и белым по --c-teal выходит 4.22:1, по
     --c-cyan — 2.27:1 при норме 4.5:1. Тёмный конец даёт 4.81:1 на
     светлой стороне градиента и 6.46:1 на тёмной — цвет тот же
     фирменный, читаемость нормальная. Одна пара на обе темы: раньше
     кнопка красилась в --solid, то есть в почти чёрный на светлой теме
     и в почти белый на тёмной. */
  /* Как выбранный пункт меню: светлая голубая заливка, синий текст.
     Без бирюзы — «Найти» больше не темно-сине-зелёная. */
  --brand-solid:#dceaf8;
  --brand-solid-fg:var(--c-blue-deep);
  --r-sm:10px; --r:14px; --r-lg:18px; --r-xl:24px;
  --side-w:274px; --rail-w:72px;
  /* Сколько слева занимает меню — для всего, что позиционируется от края
     экрана (плашки-сообщения). Переопределяется в рельсе и на телефоне. */
  --side-off:var(--side-w);
  /* Onest — современный гротеск с полной кириллицей: у Inter русские буквы
     нарисованы как приложение к латинице, у Onest — сразу. Instrument Sans
     из заголовков убран по той же причине: кириллицы в нём нет вовсе, и
     русский текст всё равно падал на подстановку.
     Unbounded — дисплейное начертание для крупных заголовков: широкие
     окружности, короткие выносные, узнаваемый современный характер. */
  --font:'Onest','Inter',ui-sans-serif,system-ui,-apple-system,'Segoe UI',sans-serif;
  --display:'Onest','Inter',ui-sans-serif,system-ui,sans-serif;
  /* Unbounded только там, где буквы крупные: логотип и заголовок первого
     экрана. Он широкий и с короткими выносными — на 12–22 px, которыми
     набраны цифры и подзаголовки, читался бы хуже Onest, а тесный трекинг
     (-.03em), настроенный под узкий гротеск, ломал бы его совсем. */
  --display-xl:'Unbounded','Onest','Inter',ui-sans-serif,system-ui,sans-serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  /* Soft spring — no overshoot that feels like a glitch */
  --ease:cubic-bezier(.25,.8,.25,1);
  --ease-out:cubic-bezier(.16,1,.3,1);
  --ease-soft:cubic-bezier(.4,0,.2,1);
  --ease-snap:cubic-bezier(.2,.8,.2,1);
  --dur:.2s;
  --dur-med:.32s;
  --dur-long:.5s;
  /* Статусы (colorize 26.09). Синий занят действием и выбором (One Blue),
     поэтому состояние срока и формы говорит своими тремя цветами — и только
     оно. Раньше тут было ~40 разрозненных hex: «просрочено» 3,05 : 1,
     «скоро» 2,75 : 1, а в тёмной теме красный падал до 2,67 : 1. Теперь
     текст ≥ 4,5 : 1 и на белом, и на своей 12-процентной подложке.
     В общем :root, а не в светлой теме: -soft/-line нужны и ночью. */
  --ok:#0b7a54;
  --warn:#a3510a;
  --danger:#b42318;
  --danger-solid:#b42318;
  --ok-soft:color-mix(in srgb,var(--ok) 12%,var(--surface));
  --warn-soft:color-mix(in srgb,var(--warn) 12%,var(--surface));
  --danger-soft:color-mix(in srgb,var(--danger) 12%,var(--surface));
  --ok-line:color-mix(in srgb,var(--ok) 26%,var(--surface));
  --warn-line:color-mix(in srgb,var(--warn) 26%,var(--surface));
  --danger-line:color-mix(in srgb,var(--danger) 26%,var(--surface));
}

/* ── Светлая ── */
:root[data-theme="light"]{
  /* <meta name="color-scheme" content="light dark"> в <head> говорит
     браузеру «поддерживаю обе», и он красит СВОИ элементы (полосу
     прокрутки, где её не перебивает наш ::-webkit-scrollbar, автозаполнение
     форм) по системной теме ОС — а не по той, что выбрана здесь
     переключателем. Тема сайта и тема ОС расходятся сплошь и рядом:
     отсюда «в светлой теме скроллбар слишком тёмный» — браузер путал
     системную тёмную с выбранной здесь светлой. */
  color-scheme:light;
  /* Полотно белое целиком — без голубоватой подложки под сайдбаром и
     шапкой. Разделение держится на линиях и тенях, а не на заливке. */
  --bg:#ffffff;
  --surface:#ffffff;
  --surface-2:#ffffff;
  /* Единственная не-белая поверхность: наведение, выбранный пункт,
     скелеты загрузки. Нейтральный серый, без синевы. */
  --surface-3:#f2f3f5;
  /* Линии были голубыми и на белом почти не читались (alpha .08 от синего).
     Нейтральный тёмный той же лёгкости виден заметно чётче. */
  --line:rgba(10,12,16,.10);
  --line-2:rgba(10,12,16,.18);
  --scroll-thumb:rgba(10,12,16,.28);
  --scroll-thumb-hover:rgba(10,12,16,.5);
  /* Текст чёрный. Прежний #1a2433 — тёмно-синий: на белом это 14.4:1, но
     глазом читается как серо-синий. #0a0b0d даёт 19.6:1 и выглядит
     собственно чёрным. */
  --text:#0a0b0d;
  /* Вторичный и третичный подтянуты следом: 10.9:1 и 6.6:1 против прежних
     5.6:1 и 4.9:1. Мелкие подписи (10.5–12.5 px) перестают быть блёклыми. */
  --text-2:#33383f;
  --text-3:#5b6169;
  --accent:var(--c-blue-deep);
  --accent-soft:rgba(8,96,168,.08);
  --accent-line:rgba(8,96,168,.22);
  --ink-hover:rgba(10,12,16,.05);
  /* Тени нейтральные: на чистом белом синеватая тень отдаёт грязью. */
  --sh-sm:0 1px 2px rgba(10,12,16,.06);
  --sh:0 4px 16px rgba(10,12,16,.07);
  --sh-md:0 12px 32px rgba(10,12,16,.09);
  --sh-lg:0 22px 56px rgba(10,12,16,.12);
  --glow:0 10px 28px rgba(24,192,184,.28);
  --aurora-1:rgba(0,136,152,.14);
  --aurora-2:rgba(8,96,168,.12);
  --aurora-3:rgba(24,192,184,.12);
  /* Своя пара только для кнопки «Новый чат»: --grad/--glow остаются
     фирменным teal→blue для лого и остального интерфейса, здесь — ровный
     серый, без градиента, лаконичнее. */
  --bubble-fill:#3e4652;
  --bubble-sh:0 8px 20px rgba(23,29,38,.16);
  /* Бабл своего сообщения — почти белый, поэтому нужны тёмный текст и
     тонкая обводка: без неё он сливается с белым полотном (.main), а с
     исходным белым текстом стал бы нечитаем. */
  --msg-fill:#f7f7f7;
  --msg-text:var(--text);
  --msg-border:1px solid rgba(15,23,42,.09);
  /* «Новый чат» — чистый белый, а не серый бабл: кнопка стоит первой в
     сайдбаре и должна читаться как основное действие, а не как ещё одна
     плашка. В тёмной теме белого быть не может, там см. ниже. */
  --newchat-fill:#ffffff;
  /* Блик сверху кнопки «Новый чат» — стеклянная подсветка на светлой
     заливке. На тёмной теме тот же цвет светится чужеродной полосой,
     поэтому переменная, а не хардкод: там она переопределена в transparent. */
  --newchat-sheen:rgba(255,255,255,.5);
  /* Сплошная заливка действий — тот же синий, что акцент левого меню
     (--c-blue-deep / пункт кабинета). Чёрная плашка на белом полотне
     выглядела чужой; белый по этому синему держит ~5.5:1. */
  --solid:var(--c-blue-deep);
  /* Вопрос человека — цвета ChatGPT, сняты со скриншота 19.09. */
  --q-bg:#e8f3fe;
  --q-fg:#0c274a;
  --solid-fg:#ffffff;
}/* ── Тёмная ── */
/* Цифры не должны «прыгать» по ширине при смене значения: табличные
   цифры делают счётчики,даты и суммы ровными в любом начертании. */
.tstat b,.tcard .meta span,.due,.ev-c,.chip,.prow .badge,.notif .nrow b,.set-b b{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}.tgrp-h,.tcard-t b,h2,h3{text-wrap:balance}.tcard .retired{color:var(--danger);font-weight:700}.tcard .retired-deadline{color:var(--text-3);text-decoration:line-through}

:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#0a1018;
  --surface:#111a24;
  --surface-2:#15202c;
  --surface-3:#1a2836;
  --line:rgba(176,200,224,.12);
  --line-2:rgba(176,200,224,.2);
  --scroll-thumb:rgba(148,163,184,.32);
  --scroll-thumb-hover:rgba(148,163,184,.55);
  --text:#e8eef6;
  --text-2:#9aadc2;
  /* 4.25:1 на --surface — тоже ниже нормы, хоть и не так грубо, как в
     светлой теме. Осветлён до 4.55:1 (считать надо против --surface
     #111a24, самого светлого из фонов под этим текстом, а не против
     --bg: на --bg запас больше). */
  --text-3:#6f849a;
  --accent:#50a0e0;
  /* Ночные статусы светлее и мягче по насыщенности: на #111a24 текст
     6,7–9,7 : 1. Сплошной красный под белой цифрой — отдельно (5 : 1). */
  --ok:#4cd4a0;
  --warn:#f5b54a;
  --danger:#ff9a9a;
  --danger-solid:#c93a45;
  --accent-soft:rgba(24,192,184,.12);
  --accent-line:rgba(24,192,184,.3);
  --ink-hover:rgba(176,200,224,.08);
  --sh-sm:0 1px 2px rgba(0,0,0,.4);
  --sh:0 4px 18px rgba(0,0,0,.42);
  --sh-md:0 14px 38px rgba(0,0,0,.5);
  --sh-lg:0 26px 64px rgba(0,0,0,.55);
  --glow:0 10px 30px rgba(24,192,184,.35);
  --aurora-1:rgba(0,136,152,.22);
  --aurora-2:rgba(8,96,168,.2);
  --aurora-3:rgba(96,56,176,.14);
  --bubble-fill:#4b5563;
  --bubble-sh:0 8px 22px rgba(0,0,0,.4);
  /* f7f7f7 в тёмной теме слепило бы — здесь тот же принцип «чуть светлее
     соседних поверхностей», но в тёмной шкале: surface-3 тут #1a2836. */
  --msg-fill:#232d3a;
  --msg-text:var(--text);
  --msg-border:1px solid rgba(232,238,246,.08);
  /* В тёмной теме «Новый чат» и так заметно светлее сайдбара — здесь
     менять нечего, жалоба на серость была про светлую тему. */
  --newchat-fill:#232d3a;
  /* Тот же блик, что в светлой теме, светится на тёмной заливке чужеродной
     белой полоской сверху кнопки — здесь он не нужен вовсе. */
  --newchat-sheen:transparent;
  /* Тот же синий, что в светлой теме: светлая плашка здесь снова
     выглядела как «инверсия чёрной», а не как кнопка меню. */
  --solid:var(--c-blue-deep);
  /* Пара того же оттенка для тёмной темы: текст 9,93 : 1. */
  --q-bg:#1e3a5c;
  --q-fg:#e3effc;
  --solid-fg:#ffffff;
  --brand-solid:rgba(80,160,224,.22);
  --brand-solid-fg:#9ccaf0;
}

html,body{height:100%}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip-link{position:fixed;left:12px;top:-60px;z-index:100;padding:10px 14px;border-radius:12px;
  background:var(--solid);color:var(--solid-fg);font-size:14px;font-weight:650;
  box-shadow:var(--sh-md);transition:top var(--dur) var(--ease-out)}
.skip-link:focus,.skip-link:focus-visible{top:12px;outline:2px solid var(--bg);outline-offset:-4px}
body{
  font-family:var(--font);background:var(--bg);color:var(--text);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overflow:hidden;overflow-x:hidden;
}
button,input,textarea{font:inherit;color:inherit;border:0;background:none}
button{cursor:pointer}
a{color:inherit;text-decoration:none}
svg{display:block;stroke-linecap:round;stroke-linejoin:round}
::selection{background:var(--accent-soft)}
/* Каретка и родные контролы — тем же синим, а не системным. */
html{caret-color:var(--accent);accent-color:var(--accent)}
/* Без border-radius (27.09): правило ставило 6 px любой кнопке в фокусе,
   и капсулы на касании на миг становились прямоугольными. Контур и так
   повторяет скругление элемента. */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* Шесть полей ниже гасят нативный outline и заменяют его мягкой рамкой
   на --accent-soft — тот же токен, что в один клик даёт 1.1–1.2:1 на
   фоне, то есть едва различим сам по себе. Для :focus (клик мышью)
   этого достаточно как лёгкого сопровождения, но :focus-visible
   (клавиатура) должен получать настоящий непрозрачный контур — их
   собственный `outline:none` специфичнее общего правила выше и
   перебивает его, поэтому здесь те же селекторы с тем же весом. */
/* Текстовые поля браузер всегда считает :focus-visible, даже при клике
   мышью (в отличие от кнопок/ссылок) — это его собственная эвристика,
   CSS её не переопределяет. Чтобы рамка появлялась только с клавиатуры,
   гасим её вручную, пока html.using-mouse (см. JS-модуль модальности). */
html:not(.using-mouse) .sb-search input:focus-visible,
html:not(.using-mouse) .pal-in input:focus-visible,
html:not(.using-mouse) .tinput:focus-visible,html:not(.using-mouse) .tarea:focus-visible,
html:not(.using-mouse) .rm-field input:focus-visible,html:not(.using-mouse) .rm-field select:focus-visible,
html:not(.using-mouse) .rm-code-row input:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px;
}
/* Поле запроса — исключение из правила выше: у него нет контура ни при
   каком способе фокусировки (просьба 11.08). Каретка на месте, поле на
   экране одно, потерять фокус негде. */
.composer textarea:focus,.composer textarea:focus-visible{outline:none;box-shadow:none}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Тонкий скролл — общий для всех прокручиваемых зон.
   Раньше ползунок был на --line-2 — токен для однопиксельных рамок,
   с голубым оттенком и низкой непрозрачностью (.14/.2): на белом фоне
   получалось едва заметное бледно-голубое пятно, которое легко принять
   за грязь на экране, а не за орган управления. Нейтральный серый на
   отдельных токенах --scroll-thumb/-hover — виден сразу, не спорит
   с цветовой схемой интерфейса и одинаково читается в обеих темах. */
.scroll-y{overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;
  scrollbar-color:var(--scroll-thumb) transparent}
.scroll-y::-webkit-scrollbar{width:9px;height:9px}
.scroll-y::-webkit-scrollbar-thumb{background:var(--scroll-thumb);border-radius:99px;
  border:3px solid transparent;background-clip:content-box}
.scroll-y::-webkit-scrollbar-thumb:hover{background:var(--scroll-thumb-hover);background-clip:content-box}
.scroll-y::-webkit-scrollbar-track{background:transparent}

/* ── Аврора: три пятна за интерфейсом. Не картинка и не canvas —
   градиенты на псевдоэлементах, чтобы ничего не грузить и не считать. ── */
.aurora{display:none!important}
.aurora i{display:none!important}
.aurora i:nth-child(1){width:52vw;height:52vw;left:-14vw;top:-18vw;background:var(--aurora-1);
  animation:drift1 36s var(--ease-soft) infinite alternate}
.aurora i:nth-child(2){width:46vw;height:46vw;right:-12vw;top:-10vw;background:var(--aurora-2);
  animation:drift2 44s var(--ease-soft) infinite alternate}
.aurora i:nth-child(3){width:40vw;height:40vw;left:38vw;bottom:-24vw;background:var(--aurora-3);
  animation:drift3 52s var(--ease-soft) infinite alternate}
@keyframes drift1{to{transform:translate3d(4vw,2vh,0) scale(1.05)}}
@keyframes drift2{to{transform:translate3d(-4vw,4vh,0) scale(1.04)}}
@keyframes drift3{to{transform:translate3d(2vw,-3vh,0) scale(1.05)}}

.app{position:relative;z-index:1;display:flex;height:100dvh}

/* ═════════ Сайдбар ═════════ */
.sidebar{
  width:var(--side-w);flex-shrink:0;display:flex;flex-direction:column;
  background:color-mix(in srgb,var(--surface) 72%,transparent);
  backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);
  border-right:1px solid var(--line);padding:14px 12px 10px;
  transition:width var(--dur-med) var(--ease-out);z-index:30;
}
.sb-top{display:flex;align-items:center;gap:8px;margin-bottom:16px;padding:0 4px;min-height:34px}
.brand{display:flex;align-items:center;gap:10px;flex:1;min-width:0;overflow:hidden}
.mark{
  width:32px;height:32px;border-radius:11px;flex-shrink:0;background:var(--grad);
  display:grid;place-items:center;box-shadow:var(--sh-sm);position:relative;overflow:hidden;
}
.mark::after{content:"";position:absolute;inset:0;
  background:linear-gradient(140deg,rgba(255,255,255,.4),transparent 55%)}
.mark svg{width:17px;height:17px;stroke:#fff;fill:none;stroke-width:2.3;
  stroke-linecap:round;stroke-linejoin:round;position:relative;z-index:1}
.brand-name{font-family:var(--display-xl);font-weight:700;font-size:17.5px;
  letter-spacing:-.005em;line-height:1.1;white-space:nowrap}
.brand-name b{background:var(--grad);-webkit-background-clip:text;background-clip:text;
  color:transparent;font-weight:750}

.iconbtn{
  width:32px;height:32px;border-radius:10px;display:grid;place-items:center;flex-shrink:0;
  color:var(--text-3);border:1px solid transparent;
  transition:background var(--dur),border-color var(--dur),color var(--dur),transform var(--dur) var(--ease);
}
.iconbtn:hover{background:var(--ink-hover);border-color:var(--line);color:var(--text)}
.iconbtn:active{opacity:.85}
.iconbtn svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.85;
  stroke-linecap:round;stroke-linejoin:round}

.btn-new{
  position:relative;overflow:hidden;
  display:flex;align-items:center;justify-content:center;gap:8px;
  width:100%;padding:12px 14px;border-radius:14px;margin-bottom:11px;
  font-size:14px;font-weight:650;letter-spacing:-.01em;white-space:nowrap;
  color:var(--msg-text);background:var(--newchat-fill);border:var(--msg-border);
  box-shadow:var(--sh-sm),inset 0 1px 0 var(--newchat-sheen);
  transition:transform var(--dur) var(--ease),box-shadow var(--dur),
    background var(--dur),border-color var(--dur);
}
.btn-new::after{ /* блик пробегает при наведении */
  content:"";position:absolute;inset:0;transform:translateX(-120%);
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);
  transition:transform .6s var(--ease);
}
/* Было filter:brightness(1.05). На тёмной заливке это заметно, а на белой
   светлее уже некуда — наведение на светлой теме не читалось вовсе.
   Вместо осветления — фирменный подмес teal→blue: виден в обеих темах,
   а текст остаётся на --text, так что контраст не страдает (подмес 12–14 %
   почти не двигает фон). Блик оставлен, на подкрашенном фоне он как раз
   и заиграл. */
.btn-new:hover{
  background:linear-gradient(135deg,
    color-mix(in srgb,var(--c-teal) 14%,var(--newchat-fill)),
    color-mix(in srgb,var(--c-blue-deep) 12%,var(--newchat-fill)));
  border-color:color-mix(in srgb,var(--c-teal) 38%,transparent);
  box-shadow:var(--sh);
}
.btn-new:hover::after{transform:translateX(120%)}
.btn-new:active{transform:translateY(1px)}
.btn-new svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.3;stroke-linecap:round;flex-shrink:0}

.sb-search{position:relative;margin-bottom:11px}
.sb-search>svg{position:absolute;left:12px;top:50%;transform:translateY(-50%);
  width:15px;height:15px;stroke:var(--text-3);fill:none;stroke-width:1.9;pointer-events:none}
.sb-search input{
  width:100%;padding:10px 44px 10px 35px;border-radius:12px;font-size:13px;
  background:var(--surface-2);border:1px solid var(--line);outline:none;color:var(--text);
  transition:border-color var(--dur),box-shadow var(--dur),background var(--dur);
}
.sb-search input::placeholder{color:var(--text-3)}
.sb-search input:focus{border-color:var(--accent-line);background:var(--surface);
  box-shadow:0 0 0 3px var(--accent-soft)}
.kbd{
  position:absolute;right:9px;top:50%;transform:translateY(-50%);pointer-events:none;
  font-family:var(--mono);font-size:11px;font-weight:650;color:var(--text-3);
  border:1px solid var(--line-2);border-radius:6px;padding:2px 5px;line-height:1;
}

/* Пункты меню читались как «жирные, но серые»: вес 520 при цвете --text-2
   даёт плотное, но блёклое начертание. Меняем размен: легче штрих —
   темнее цвет, читается спокойнее и контрастнее одновременно. */
.nav-item{
  display:flex;align-items:center;gap:10px;width:100%;text-align:left;
  padding:9px 10px;border-radius:12px;font-size:13.5px;font-weight:500;
  color:var(--text);white-space:nowrap;
  transition:background var(--dur),color var(--dur),transform var(--dur) var(--ease);
}
.nav-item:hover{background:var(--ink-hover);color:var(--text)}
.nav-item:active{opacity:.9}
.nav-item.cabinet{background:var(--surface-2);border:1px solid var(--line);
  color:var(--text);font-weight:500;margin-bottom:14px}
.nav-item.cabinet:hover{border-color:var(--accent-line);box-shadow:var(--sh-sm)}
.nav-item .ic{width:28px;height:28px;border-radius:9px;display:grid;place-items:center;flex-shrink:0}
.nav-item .ic svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round}
.nav-item .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
/* Один синий на все значки (разбор 26.09, One Blue Rule из DESIGN.md).
   Было шесть оттенков — синий, бирюза, янтарь, фиолет, роза, небо — и цвет
   ничего не кодировал: у чипов его раздавала квота «не больше двух одного
   цвета». Классы оставлены, чтобы разметка не менялась; значат одно. */
.ic.blue,.ic.teal,.ic.amber,.ic.violet,.ic.rose,.ic.sky{
  background:var(--brand-solid);color:var(--brand-solid-fg)}

.sec{
  display:flex;align-items:center;gap:6px;padding:12px 10px 6px;
  font-size:11px;font-weight:750;letter-spacing:.08em;text-transform:uppercase;
  color:var(--text-3);white-space:nowrap;
}
.sec .sec-fold{margin-left:0;color:inherit;display:grid;place-items:center;
  width:20px;height:20px;border-radius:6px;transition:background var(--dur);flex-shrink:0}
.sec .sec-fold:hover{background:var(--ink-hover)}
.sec .sec-fold svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2.2;
  transition:transform .2s var(--ease)}
.sec.closed .sec-fold svg{transform:rotate(-90deg)}
/* Кнопка сворачивания прижимается вправо. У «Истории» её толкает туда
   «Очистить историю» со своим margin-left:auto, у «Инструментов» такой
   соседки нет — нужен явный отступ. */
.sec-fold-row .sec-fold{margin-left:auto}
.tools.hidden{display:none}

/* «Очистить историю» — серый текст справа от «История», виден при наведении */
.sec-hist{position:relative;gap:8px}
.sec-hist .sec-title{flex-shrink:0}
.sec-hist .hist-clear{
  margin-left:auto;margin-right:2px;padding:2px 4px;border-radius:6px;
  font-size:11px;font-weight:550;letter-spacing:0;text-transform:none;
  color:var(--text-3);opacity:0;pointer-events:none;
  transition:opacity var(--dur),color var(--dur),background var(--dur);
  white-space:nowrap;
}
.sec-hist:hover .hist-clear,
.sec-hist:focus-within .hist-clear{
  opacity:1;pointer-events:auto;
}
.sec-hist .hist-clear:hover{color:var(--text-2);background:var(--ink-hover)}
.sec-hist .hist-clear:active{color:var(--text)}
.app.rail .hist-clear{display:none}

.hist{flex:1;min-height:0;margin-top:2px;padding-right:2px}
/* Ползунок в истории не виден, пока список не крутят (или не навели).
   Иначе на Windows он всегда занимает полосу справа и режет названия. */
.hist.scroll-y{scrollbar-width:thin;scrollbar-color:transparent transparent}
.hist.scroll-y:hover,.hist.scroll-y:focus-within,.hist.scroll-y.is-scrolling{
  scrollbar-color:var(--scroll-thumb) transparent}
.hist.scroll-y::-webkit-scrollbar{width:3px}
.hist.scroll-y:hover::-webkit-scrollbar,
.hist.scroll-y:focus-within::-webkit-scrollbar,
.hist.scroll-y.is-scrolling::-webkit-scrollbar{width:6px}
.hist.scroll-y::-webkit-scrollbar-thumb{background:transparent;border:0;background-clip:padding-box}
.hist.scroll-y:hover::-webkit-scrollbar-thumb,
.hist.scroll-y:focus-within::-webkit-scrollbar-thumb,
.hist.scroll-y.is-scrolling::-webkit-scrollbar-thumb{background:var(--scroll-thumb)}
.hist.scroll-y::-webkit-scrollbar-thumb:hover{background:var(--scroll-thumb-hover)}
.hist.hidden{display:none}
.hist-group{
  padding:8px 10px 3px;font-size:9.5px;font-weight:650;
  letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);
}
.hist-group:first-child{padding-top:2px}
.hist-row{position:relative;display:flex;align-items:center}
.hist-row .go{
  flex:1;min-width:0;text-align:left;padding:8px 30px 8px 10px;border-radius:10px;
  font-size:13px;color:var(--text-2);line-height:1.35;
  display:flex;align-items:baseline;gap:8px;
  transition:background var(--dur),color var(--dur);
}
.hist-row .go .ht{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Время — тише названия, табличными цифрами; под крестиком удаления
   не прячется: крестик стоит в правом поле кнопки (padding 30 px). */
.hist-row .go .hw{flex-shrink:0;font-size:11px;font-weight:500;color:var(--text-3);
  font-variant-numeric:tabular-nums}
.hist-row:hover .go{background:var(--ink-hover);color:var(--text)}
.hist-row.active .go{background:var(--accent-soft);color:var(--accent);font-weight:600}
.hist-row .del{
  position:absolute;right:4px;width:24px;height:24px;border-radius:7px;
  display:grid;place-items:center;color:var(--text-3);opacity:0;
  transition:opacity var(--dur),background var(--dur),color var(--dur);
}
.hist-row:hover .del,.hist-row:focus-within .del{opacity:1}
.hist-row .del:focus-visible{opacity:1;outline:2px solid var(--accent);outline-offset:1px}
.hist-row .del:hover{background:var(--ink-hover);color:var(--danger)}
.hist-row .del svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2}
.hist-empty{padding:10px;font-size:12.5px;color:var(--text-3)}

.sb-foot{margin-top:auto;padding-top:8px;border-top:1px solid var(--line)}

/* Свёрнутый сайдбар — рельс с иконками */
.app.rail .sidebar{width:var(--rail-w);padding-left:10px;padding-right:10px}
/* Ширина рельсы — для того, что позиционируется от края экрана (плашки
   сообщений). Правило стоит ОТДЕЛЬНО и до списка ниже: вставленное
   внутрь перечисления селекторов, оно разрывало его пополам —
   `display:none` переставал доставать до подписи «Новый чат» и до
   поиска, и в свёрнутом сайдбаре торчали обрезанное слово и поле с
   подсказкой ⌘K. */
:root:has(.app.rail){--side-off:var(--rail-w)}
.app.rail .btn-new span,.app.rail .sb-search,
.app.rail .nav-item .lbl,.app.rail .sec,.app.rail .hist,
.app.rail .nav-item .chev{display:none}
/* В рельсе заголовок секции скрыт вместе с кнопкой сворачивания — если
   бы свёрнутое состояние тут сохранялось, значки инструментов пропали бы
   без всякой возможности вернуть их обратно. */
.app.rail .tools.hidden{display:block}
.app.rail .btn-new,
.app.rail .nav-item,
.app.rail .sb-collapse{
  width:40px;height:40px;padding:0;margin:0 auto 8px;
  border-radius:12px;display:grid;place-items:center;
}
.app.rail .btn-new{margin-bottom:10px}
.app.rail .nav-item{justify-content:center}
.app.rail .nav-item .ic{width:40px;height:40px;border-radius:12px}
.app.rail.cab-mode [data-tool="cabinet"],
.app.rail.forms-mode [data-tool="forms"]{
  background:transparent;color:inherit;
}
.app.rail.cab-mode [data-tool="cabinet"] .ic,
.app.rail.forms-mode [data-tool="forms"] .ic{
  background:var(--accent-soft);color:var(--accent);
}
.app.rail .sb-top{
  justify-content:center;padding:0;margin-bottom:14px;min-height:40px;
}
/* В рельсе логотип прячем — вместо «AI» красивая стрелка «развернуть» */
.app.rail .brand{display:none}
.app.rail .sb-collapse{
  display:grid !important;
  width:40px;height:40px;border-radius:12px;
  border:1px solid var(--line);
  background:var(--surface);
  color:var(--accent);
  box-shadow:var(--sh-sm);
  transition:background var(--dur),border-color var(--dur),color var(--dur),
    box-shadow var(--dur),transform var(--dur) var(--ease);
}
.app.rail .sb-collapse:hover{
  background:var(--accent-soft);
  border-color:var(--accent-line);
  color:var(--accent);
  box-shadow:var(--sh);
}
.app.rail .sb-collapse:active{transform:scale(.96)}
.app.rail .sb-collapse svg{
  width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2.1;
  transform:none;
}
/* Развёрнуто: стрелка «свернуть» влево чуть спокойнее */
.sb-collapse.rail-expand svg{/* set by JS */}

/* ═════════ Основная колонка ═════════ */
.main{flex:1;min-width:0;display:flex;flex-direction:column;position:relative;
  transition:background var(--dur-med) var(--ease)}/* Полотно переписки — белое. Серо-голубой фон хорош под карточками
   стартового экрана,.chip,.tcard),на белом не тонут. */
:root[data-theme="light"] .main{background:#fff}
/* .chart своего фона не переопределяет нигде — на белом полотне слился
   бы с ним при однопиксельном бордере. .ev/.fu бордер имеют, но тоже
   переведены на surface-3 — так у них внутри переписки чуть более явный
   контур, чем у панелей стартового экрана. */
:root[data-theme="light"] .chart,
:root[data-theme="light"] .ev,
:root[data-theme="light"] .fu{background:var(--surface-3)}

.topbar{
  height:58px;flex-shrink:0;display:grid;
  grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;
  padding:0 16px 0 12px;position:relative;z-index:20;
  border-bottom:1px solid transparent;transition:border-color .2s,background .2s;
}
.topbar.stuck{
  border-bottom-color:var(--line);
  background:color-mix(in srgb,var(--bg) 78%,transparent);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
}
.topbar-left{display:flex;align-items:center;gap:8px;min-width:0;justify-self:start}

/* Переключатель темы в левом верхнем углу рабочей области. Тема — то, что
   меняют на ходу, а не то, за чем лезут в настройки; раньше до неё было
   три клика. Стоит правее бургера, в границах основной колонки: сайдбар
   не перекрывает. */
.theme-sw{
  /* 12px вместо таблетки: рядом стоят .iconbtn с радиусом 10px, и полное
     скругление читалось как другой язык формы в одной строке. */
  flex-shrink:0;padding:3px;border-radius:12px;line-height:0;
  border:1px solid var(--line);background:var(--surface-2);
  transition:border-color var(--dur),background var(--dur),box-shadow var(--dur);
}
.theme-sw:hover{border-color:var(--accent-line);box-shadow:var(--sh-sm)}
.theme-sw .tr{
  position:relative;display:grid;grid-template-columns:22px 22px;align-items:center;
  justify-items:center;height:22px;
}
.theme-sw svg{
  position:relative;z-index:1;width:13px;height:13px;
  stroke:currentColor;fill:none;stroke-width:1.9;
  transition:color var(--dur),opacity var(--dur);
}
.theme-sw .i-sun{color:#d97706;opacity:1}
.theme-sw .i-moon{color:var(--text-3);opacity:.65}
.theme-sw[aria-checked="true"] .i-sun{color:var(--text-3);opacity:.55}
.theme-sw[aria-checked="true"] .i-moon{color:#93c5fd;opacity:1}
.theme-sw .kn{
  position:absolute;top:0;left:0;width:22px;height:22px;border-radius:999px;
  background:var(--surface);box-shadow:var(--sh-sm);
  border:1px solid var(--line);
  transition:transform var(--dur-med) var(--ease-snap);
}
.theme-sw[aria-checked="true"] .kn{transform:translateX(22px)}
.topbar-center{display:flex;align-items:center;justify-content:center;justify-self:center}
.topbar-right{display:flex;align-items:center;gap:8px;justify-self:end;min-width:0}
.burger{display:none}
.chat-back{display:none}
/* Диалог открыт — верхняя панель редуцируется до заголовка (и, на
   телефоне, кнопки «назад» слева от него). Действует на любой ширине:
   на десктопе тоже незачем показывать переключатель темы, дневник,
   колокольчик и меню профиля поверх переписки — до всего этого можно
   долистать назад на стартовый экран одним кликом. */
.app.chat-mode .theme-sw,
.app.chat-mode .topbar-center,
.app.chat-mode .topbar-right{display:none}
/* Кроме профиля на широком экране (повторный разбор 26.09): гость, только
   что получивший ответ, — ровно тот, кому стоит войти и сохранить диалог,
   а вход был спрятан. Тема, дневник и колокольчик по-прежнему скрыты;
   на телефоне шапка остаётся «‹ заголовок». */
@media (min-width:721px){
  .app.chat-mode .topbar-right{display:flex}
  .app.chat-mode .topbar-right > :not(#btnUser){display:none}
}
.app.page-mode .pill-diary{display:none}
.top-title{
  font-size:14px;font-weight:600;color:var(--text-2);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;max-width:min(38ch,28vw);opacity:0;
  transition:opacity .2s;
  pointer-events:none;
}
.top-title.on{opacity:1}

.pill-diary{
  /* См. .theme-sw: одна шкала скругления на всю верхнюю панель.
     Отступ слева был 5px под кружок со значком; значок убран, и отступ
     выровнен по правому — иначе надпись липнет к левому краю. */
  display:inline-flex;align-items:center;gap:9px;padding:5px 12px;border-radius:12px;
  border:1px solid var(--line);background:var(--surface-2);
  font-size:12.5px;font-weight:600;color:var(--text);letter-spacing:-.01em;white-space:nowrap;
  transition:border-color var(--dur),box-shadow var(--dur),background var(--dur);
  max-width:240px;
}
.pill-diary:hover{border-color:var(--line-2);box-shadow:var(--sh-sm);background:var(--surface)}
.pill-diary:active{background:var(--surface-3)}
.pill-diary>span{min-width:0;overflow:hidden;text-overflow:ellipsis}

.bell{position:relative}
.bell .dot{
  position:absolute;top:6px;right:7px;width:7px;height:7px;border-radius:50%;
  background:var(--danger-solid);border:2px solid var(--bg);
}

/* Панель уведомлений. Раньше колокольчик всегда носил красную точку и на
   нажатие отвечал «Уведомлений пока нет» — точка обещала непрочитанное,
   которого не бывает, и смысл кнопки не читался вовсе. */
.menu.notif{width:330px;right:52px;padding:6px}
.notif-h{padding:10px 11px 10px;border-bottom:1px solid var(--line);margin-bottom:4px}
/* Панель уведомлений была набрана заметно плотнее остального интерфейса:
   заголовок 650, рубрики 750, метки 700, названия строк 600 — на 330 px
   ширины это читалось сплошным жирным пятном. Каждый уровень опущен на
   одну ступень шкалы; иерархия сохранилась, тяжесть ушла. */
.notif-h b{display:block;font-size:13.5px;font-weight:550}
.notif-h span{display:block;font-size:11.5px;color:var(--text-3);margin-top:2px}
.notif-body{max-height:min(56vh,420px);overflow-y:auto;scrollbar-width:thin;
  scrollbar-color:var(--scroll-thumb) transparent}
.notif-sec{
  padding:9px 11px 4px;font-size:11px;font-weight:650;letter-spacing:.07em;
  text-transform:uppercase;color:var(--text-3);
}
.menu.notif .nrow{
  display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;
  gap:10px;width:100%;padding:9px 11px;border-radius:12px;text-align:left;
  font-weight:500;color:var(--text-2);transition:background var(--dur),color var(--dur);
}
.menu.notif .nrow:hover{background:var(--ink-hover);color:var(--text)}
.menu.notif .nrow .tag{
  font-size:10.5px;font-weight:550;padding:3px 7px;border-radius:7px;white-space:nowrap;
  background:var(--surface-3);color:var(--text-2);border:1px solid var(--line);
}
.tag.route{border:1px dashed var(--line-2);color:var(--text-2);background:transparent}
.menu.notif .nrow .tag.urgent{
  background:var(--danger-soft);color:var(--danger);border-color:var(--danger-line)}
.menu.notif .nrow .tag.soon{
  background:var(--warn-soft);color:var(--warn);border-color:var(--warn-line)}
.menu.notif .nrow .tx{min-width:0}
.menu.notif .nrow .tx b{
  /* display объявлялся дважды — block мёртвый, его перебивал -webkit-box
     ниже (он обязателен для line-clamp). Оставлен один. */
  font-size:13px;font-weight:400;color:var(--text);line-height:1.3;
  overflow:hidden;text-overflow:ellipsis;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;
}
.menu.notif .nrow .tx span{
  display:block;font-size:11.5px;color:var(--text-3);margin-top:2px;line-height:1.35;
}
.notif-empty{padding:16px 12px 18px;font-size:12.5px;line-height:1.5;color:var(--text-3)}

.user{
  /* См. .theme-sw: одна шкала скругления на всю верхнюю панель.
     Отступ слева был 5px под кружок с буквой; кружок убран. */
  display:flex;align-items:center;gap:9px;padding:5px 9px;border-radius:12px;
  border:1px solid var(--line);background:var(--surface-2);
  transition:border-color var(--dur),box-shadow var(--dur);max-width:210px;
}
.user:hover{border-color:var(--line-2);box-shadow:var(--sh-sm)}
.avatar{
  width:30px;height:30px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;
  font-size:11.5px;font-weight:750;letter-spacing:.02em;
  /* То же самое: аватар личного кабинета — не логотип, teal→blue здесь
     ему не принадлежит; светлый серый в тон бабла и «Новый чат». */
  color:var(--msg-text);background:var(--msg-fill);border:var(--msg-border);box-shadow:var(--sh-sm);
}
.user .who{
  min-width:0;text-align:left;line-height:1.25;
  display:flex;flex-direction:column;justify-content:center;gap:1px;
}
.user .who b{
  display:block;font-size:12.5px;font-weight:600;line-height:1.2;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.user .who span{
  display:block;font-size:11px;font-weight:500;color:var(--text-3);line-height:1.2;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.user>svg{width:14px;height:14px;stroke:var(--text-3);fill:none;stroke-width:2;flex-shrink:0}

/* Выпадающее меню профиля */
.menu{
  position:absolute;top:52px;right:14px;z-index:60;width:280px;padding:8px;
  background:var(--surface);border:1px solid var(--line);border-radius:18px;
  box-shadow:var(--sh-lg);
  opacity:0;transform:translateY(-8px) scale(.97);pointer-events:none;
  transition:opacity var(--dur) var(--ease-out),transform var(--dur-med) var(--ease-out);
}
.menu.on{opacity:1;transform:none;pointer-events:auto}
.menu-head{
  display:flex;align-items:center;gap:11px;padding:10px 10px 12px;margin-bottom:4px;
  border-bottom:1px solid var(--line);
}
.menu-head .avatar{width:40px;height:40px;font-size:13px}
.menu-head .who{
  min-width:0;display:flex;flex-direction:column;gap:2px;text-align:left;
}
.menu-head .who b{
  display:block;font-size:13.5px;font-weight:650;line-height:1.25;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.menu-head .who span{
  display:block;font-size:11.5px;font-weight:500;color:var(--text-3);line-height:1.25;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.menu-hint{
  padding:6px 11px 8px;font-size:11px;line-height:1.4;color:var(--text-3);
}
.menu button,.menu a{
  display:flex;align-items:center;gap:10px;width:100%;padding:10px 11px;border-radius:12px;
  font-size:13.5px;font-weight:500;color:var(--text-2);text-align:left;
  transition:background var(--dur),color var(--dur);
}
.menu button:hover,.menu a:hover{background:var(--ink-hover);color:var(--text)}
.menu svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.85;
  stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
.menu .mi{
  width:28px;height:28px;border-radius:9px;display:grid;place-items:center;flex-shrink:0;
  background:var(--surface-3);color:var(--text-2);
}
/* Один синий, как у значков меню слева (One Blue): оттенки ничего не
   кодировали. Яндекс ниже — чужой бренд, его цвет остаётся. */
.menu .mi.blue,.menu .mi.sky,.menu .mi.violet,.menu .mi.teal,.menu .mi.amber{
  background:var(--brand-solid);color:var(--brand-solid-fg)}
.menu .mi.yandex{
  background:#fc3f1d;color:#fff;font-size:12px;font-weight:800;letter-spacing:-.02em;
}
.menu .mi svg{width:15px;height:15px}
.menu button.menu-yandex{
  font-weight:600;color:var(--text);
  background:color-mix(in srgb, #fc3f1d 8%, var(--surface));
  border:1px solid color-mix(in srgb, #fc3f1d 22%, var(--line));
  margin-bottom:4px;
}
.menu button.menu-yandex:hover{
  background:color-mix(in srgb, #fc3f1d 14%, var(--surface));
  color:var(--text);
}
.menu hr{border:0;border-top:1px solid var(--line);margin:6px 6px}
.menu .val{margin-left:auto;font-size:11.5px;color:var(--text-3);font-weight:600}
.menu .chev{margin-left:auto;width:14px;height:14px;opacity:.45}

/* ═════════ Панель настроек ═════════ */
.set-bg{
  position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;
  z-index:88;background:rgba(8,12,20,.44);
  backdrop-filter:blur(10px) saturate(1.15);-webkit-backdrop-filter:blur(10px) saturate(1.15);
  display:grid;place-items:center;padding:24px 16px;box-sizing:border-box;
  opacity:0;pointer-events:none;transition:opacity var(--dur-med) var(--ease-out);
}
.set-bg.on{opacity:1;pointer-events:auto}
.set-panel{
  /* height, не max-height: при смене вкладок размер окна не прыгает */
  width:min(720px,100%);
  height:min(680px,90vh);
  max-width:720px;
  max-height:min(92vh,760px);
  margin:0;justify-self:center;align-self:center;
  display:flex;flex-direction:column;
  background:var(--surface);border:1px solid var(--line-2);border-radius:22px;
  box-shadow:var(--sh-lg);overflow:hidden;
  transform:translateY(16px) scale(.98);
  transition:transform var(--dur-med) var(--ease-out);
}
.set-bg.on .set-panel{transform:none}
.set-h{
  display:flex;align-items:center;gap:12px;padding:16px 16px 14px;
  border-bottom:1px solid var(--line);flex-shrink:0;
}
/* Шестерёнка в шапке настроек — служебный значок, не логотип: тот же
   светлый серый, что у иконки дневника и аватара. */
.set-h .mark{
  width:36px;height:36px;border-radius:12px;flex-shrink:0;
  background:var(--msg-fill);border:var(--msg-border);
  display:grid;place-items:center;box-shadow:var(--sh-sm);
}
.set-h .mark svg{width:18px;height:18px;stroke:var(--msg-text);fill:none;stroke-width:2}
.set-h .tx{flex:1;min-width:0}
.set-h h2{font-size:16.5px;font-weight:700;letter-spacing:-.02em}
.set-h p{font-size:12px;color:var(--text-3);margin-top:2px}
.set-b{flex:1;min-height:0;overflow-y:auto;padding:14px 14px 18px;scrollbar-width:thin;
  scrollbar-color:var(--scroll-thumb) transparent}
.set-sec{
  font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--text-3);padding:10px 6px 8px;
}
.set-sec:first-child{padding-top:2px}
.set-card{
  background:var(--surface-2);border:1px solid var(--line);border-radius:16px;
  padding:4px;margin-bottom:10px;
}
.set-card.pad{padding:12px}
.set-row{
  display:flex;align-items:center;gap:12px;width:100%;padding:11px 12px;border-radius:12px;
  text-align:left;color:var(--text);transition:background var(--dur);
}
.set-row:hover{background:var(--ink-hover)}
.set-row .ic{
  width:34px;height:34px;border-radius:11px;display:grid;place-items:center;flex-shrink:0;
  background:var(--surface-3);color:var(--text-2);
}
.set-row .ic.violet,.set-row .ic.teal,.set-row .ic.rose,.set-row .ic.amber,.set-row .ic.blue{
  background:var(--brand-solid);color:var(--brand-solid-fg)}
.set-row .ic svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.85}
.set-row .txt{flex:1;min-width:0}
.set-row .txt b{display:block;font-size:13.5px;font-weight:600;letter-spacing:-.01em}
.set-row .txt span{display:block;font-size:11.5px;color:var(--text-3);margin-top:2px;line-height:1.35}
/* В тёмной теме подписи строк давали 4.27 при норме 4.5: поднимаем их до
   --text-2 только в настройках, иерархию остального интерфейса не трогаем. */
:root[data-theme="dark"] .set-row .txt span{color:var(--text-2)}
.set-row .go{width:14px;height:14px;stroke:var(--text-3);fill:none;stroke-width:2;flex-shrink:0;opacity:.5}
.set-row.danger .txt b{color:var(--danger)}
.set-row.danger .ic{background:var(--danger-soft);color:var(--danger)}

/* Переключатель тема: три сегмента */
.seg{
  display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:4px;
  background:var(--surface-3);border-radius:14px;border:1px solid var(--line);
}
.seg button{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  padding:12px 8px;border-radius:11px;font-size:12px;font-weight:600;color:var(--text-2);
  transition:background var(--dur),color var(--dur),box-shadow var(--dur);
}
.seg button svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.85}
.seg button.on{
  background:var(--surface);color:var(--text);box-shadow:var(--sh-sm);
  border:1px solid var(--line);
}
.seg button:hover:not(.on){color:var(--text);background:color-mix(in srgb,var(--surface) 55%,transparent)}

/* Toggle switch */
.sw{
  position:relative;width:44px;height:26px;border-radius:999px;flex-shrink:0;
  background:var(--surface-3);border:1px solid var(--line-2);
  transition:background var(--dur),border-color var(--dur);
}
.sw::after{
  content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;
  background:#fff;box-shadow:0 1px 3px rgba(15,23,42,.18);
  transition:transform var(--dur-med) var(--ease-out),background var(--dur);
}
/* Включённый переключатель — фирменный сине-зелёный (--brand-1/2), по
   просьбе явно вернувшей акцент взамен нейтральной заливки. */
.sw.on{background:linear-gradient(135deg,var(--brand-1),var(--brand-2));border-color:transparent}
.sw.on::after{transform:translateX(18px);background:#fff}
/* Пояснение к пометке «около» под списком форм. --text-2, а не --text-3:
   строка объясняет срок отчётности, и блёклой ей быть незачем.

   Имя с «approx» не для красоты: класс .desk-note в кабинете уже занят
   подписью про филиалы («Головное подразделение. Филиалов по ИНН: 5»),
   и первый вариант этого правила молча перекрасил её. */
.desk-approx-note{margin:0 0 8px;font-size:12px;line-height:1.45;color:var(--text-2)}

.set-about{
  text-align:center;padding:14px 10px 4px;font-size:11.5px;color:var(--text-3);line-height:1.45;
}
.set-about b{color:var(--text-2);font-weight:600}
/* Строка живёт в .set-about-card, а правило было написано под .set-about:
   не применялось ничего, и два инлайновых span слипались в «Версия4.5.0». */
.set-about .ver,.set-about-card .ver{
  display:inline-flex;align-items:center;gap:8px;margin:8px 0 4px;
  font-size:12px;color:var(--text-3);
}
.set-about .ver-badge,.set-about-card .ver-badge{
  font-size:11.5px;font-weight:650;padding:3px 9px;border-radius:999px;
  background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent-line);
}
.set-about-card{
  text-align:left;padding:14px;border-radius:14px;background:var(--surface);
  border:1px solid var(--line);margin-top:8px;
}
.set-about-card .name{font-size:15px;font-weight:700;letter-spacing:-.02em;margin-bottom:4px}
.set-about-card .line{font-size:12.5px;color:var(--text-2);line-height:1.5;margin-top:6px}
.set-about-card .line strong{color:var(--text);font-weight:600}

/* Вкладки настроек — как в боевом UI */
.set-body{flex:1 1 auto;min-height:0;height:100%;display:grid;grid-template-columns:168px 1fr;overflow:hidden}
.set-nav{
  display:flex;flex-direction:column;gap:4px;padding:12px 10px;
  border-right:1px solid var(--line);background:var(--surface-2);overflow-y:auto;
  min-height:0;
}
.set-nav button{
  display:flex;align-items:center;gap:9px;width:100%;padding:10px 11px;border-radius:12px;
  text-align:left;font-size:13px;font-weight:550;color:var(--text-2);
  transition:background var(--dur),color var(--dur);
}
.set-nav button .ni{
  width:28px;height:28px;border-radius:9px;display:grid;place-items:center;flex-shrink:0;
  background:var(--surface-3);
}
.set-nav button .ni svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.85}
.set-nav button.on{background:var(--accent-soft);color:var(--accent)}
.set-nav button:hover:not(.on){background:var(--ink-hover);color:var(--text)}
/* Заголовки секций держатся у верхнего края панели: при прокрутке
   всегда видно, где ты. top:-14px прячет под них штатный отступ панели. */
.set-panels .set-sec{position:sticky;top:-14px;z-index:2;background:var(--surface)}
.set-panels{min-height:0;height:100%;overflow-y:auto;padding:14px 16px 18px;scrollbar-width:thin;
  scrollbar-color:var(--scroll-thumb) transparent}
.set-panel-page{display:none}
.set-panel-page.on{display:block;min-height:100%;box-sizing:border-box}
.set-help{font-size:13.5px;line-height:1.65;color:var(--text-2)}
.set-help p{margin:0 0 10px}
.kbd-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:4px}
.kbd-cell{
  display:flex;flex-direction:column;gap:4px;padding:10px 12px;border-radius:12px;
  background:var(--surface);border:1px solid var(--line);
}
.kbd-cell kbd{
  display:inline-block;width:fit-content;font-family:var(--mono);font-size:11.5px;font-weight:650;
  padding:2px 7px;border-radius:6px;border:1px solid var(--line-2);background:var(--surface-3);
  color:var(--text);
}
.kbd-cell small{font-size:11.5px;color:var(--text-3)}
.badge-row{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.badge-demo{
  display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;
  font-size:11.5px;font-weight:600;border:1px solid var(--line);background:var(--surface);
  color:var(--text-2);margin-right:6px;
}
.badge-demo .dot{width:7px;height:7px;border-radius:50%;background:var(--accent)}
.badge-demo.emiss .dot{background:#0d9488}
.badge-demo.rag .dot{background:#6366f1}
.set-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:8px 14px;border-radius:11px;font-size:13px;font-weight:600;
  border:1px solid var(--line);background:var(--surface);color:var(--text-2);
  transition:border-color var(--dur),background var(--dur),color var(--dur);
  text-decoration:none;cursor:pointer;
}
.set-btn:hover{border-color:var(--accent-line);color:var(--accent);background:var(--accent-soft)}
.set-btn.primary{background:var(--brand-solid);color:var(--brand-solid-fg);
  border-color:transparent;box-shadow:var(--sh-sm)}
.set-btn.primary:hover{filter:brightness(1.1);color:var(--brand-solid-fg);
  background:var(--brand-solid);box-shadow:var(--sh)}
/* Тот же фон, что у .set-card (--surface-2): раньше карточка «Гость»
   сидела на чистом --surface и выглядела плоской рамкой без заливки —
   рядом с закрашенными карточками вкладки «Общие» это читалось как
   два разных стиля оболочки, хотя разницы в смысле нет. */
.set-acc{
  display:flex;align-items:center;gap:12px;padding:12px;border-radius:14px;
  background:var(--surface-2);border:1px solid var(--line);margin-bottom:10px;
}
.set-acc .avatar{width:44px;height:44px;font-size:14px}
.set-acc .nm{font-size:14.5px;font-weight:650}
.set-acc .sub{font-size:12px;color:var(--text-3);margin-top:2px;line-height:1.4}
.set-acc-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.set-org{padding:14px}
.set-org-form{display:flex;gap:8px;align-items:stretch;margin-top:4px}
.set-org-form .due-org-inn{flex:1;min-width:0}
.set-org-head b{display:block;font-size:14.5px;font-weight:650;line-height:1.3}
.set-org-head .sub{display:block;margin-top:3px;font-size:12px;color:var(--text-3)}
.set-org-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.set-org-acts button{padding:8px 12px;font-size:12.5px}

@media(max-width:720px){
  .set-body{grid-template-columns:1fr}
  .set-nav{
    flex-direction:row;flex-wrap:nowrap;overflow-x:auto;border-right:0;
    border-bottom:1px solid var(--line);padding:8px;
    scrollbar-width:none;-ms-overflow-style:none;
    scroll-snap-type:x proximity;overscroll-behavior-x:contain;
  }
  .set-nav::-webkit-scrollbar{display:none}
  /* width:100% из колоночной раскладки в строке превращает каждую вкладку
     в полосу на весь экран — видна одна «Общие», остальные уезжают за край */
  .set-nav button{flex:0 0 auto;width:auto;white-space:nowrap;scroll-snap-align:start}
  .set-nav button .ni{display:none}
  .set-row{min-height:44px}
  .set-btn{min-height:36px}
}
@media(max-width:560px){
  .set-bg{padding:0;place-items:end center}
  .set-panel{
    width:100%;max-width:none;height:min(88dvh,720px);max-height:94dvh;
    border-radius:22px 22px 0 0;align-self:end;justify-self:center;
  }
  .kbd-grid{grid-template-columns:1fr}
}

/* ═════════ Прокручиваемая область ═════════ */
.canvas{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}
.view{
  flex:1;min-height:0;padding:0 24px;scroll-behavior:smooth;
  display:flex;flex-direction:column;align-items:center;
}
html.no-smooth .view{scroll-behavior:auto}

/* ── Стартовый экран: hero по центру, слайдер у нижнего края (с отступами) ── */
.start{
  box-sizing:border-box;
  width:100%;max-width:920px;margin:0 auto;
  flex:1 0 auto;min-height:100%;
  padding:clamp(20px,4vh,48px) 0 clamp(16px,2.5vh,28px);
  display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  gap:0;
}
/* верхняя зона растягивается — hero+чипсы по центру доступной высоты */
.start-top{
  width:100%;max-width:920px;flex:1 1 auto;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  min-height:0;padding-bottom:12px;
}
/* слайдер + версия — у нижнего края viewport, с padding у .start */
.hero{width:100%;text-align:center}
.hero h1{
  font-family:var(--display-xl);font-size:clamp(34px,4.6vw,50px);font-weight:700;
  /* Unbounded шире Instrument Sans: прежние -.048em склеивали буквы. */
  letter-spacing:-.012em;line-height:1.08;margin-bottom:14px;
}
.hero h1 em{font-style:normal;background:var(--grad);
  -webkit-background-clip:text;background-clip:text;color:transparent}
.hero p{font-size:15px;line-height:1.45;color:var(--text-2);
  max-width:900px;margin:0 auto 18px;white-space:normal;
  text-align:center;padding:0 8px}

/* Композер — общий для старта и чата, переезжает между точками монтирования */
.composer-wrap{width:100%;max-width:720px;margin:0 auto}
.composer{
  display:flex;align-items:flex-end;gap:6px;padding:7px 7px 7px 18px;
  border-radius:26px;background:var(--surface);
  border:1.5px solid var(--line-2);
  box-shadow:0 0 0 1px rgba(8,96,168,.04),0 4px 14px rgba(8,96,168,.10),0 -4px 14px rgba(8,96,168,.08);
  transition:border-color var(--dur-med) var(--ease-out),box-shadow var(--dur-med) var(--ease-out);
}
/* Никакой рамки на фокусе у поля запроса — по прямой просьбе (11.08).
   Поле и так одно на экране, а мигающая каретка показывает фокус лучше
   любого контура. Гасим все три источника сразу: подсветку границы,
   мягкое кольцо и системный outline самой textarea (см. правило рядом
   с общим :focus-visible выше). */
.composer:focus-within{
  border-color:var(--line-2);
  box-shadow:0 0 0 1px rgba(8,96,168,.05),0 6px 18px rgba(8,96,168,.12),0 -6px 18px rgba(8,96,168,.10);
}
/* …кроме пути с клавиатуры (решение 26.09): тот, кто ходит Tab, иначе не
   видит, где он. Класс kbd-nav вешается на Tab и снимается при касании или
   клике, так что мышью поле выглядит, как решили 11.08. У textarea
   :focus-visible срабатывает и на клик, поэтому нужен свой признак. */
html.kbd-nav .composer:focus-within{
  border-color:var(--accent);
  box-shadow:0 0 0 3px var(--accent-line),0 6px 18px rgba(8,96,168,.12),0 -6px 18px rgba(8,96,168,.10);
}
/* overflow-y:hidden по умолчанию. Высоту поля подгоняет autosize(), но
   scrollHeight и clientHeight расходятся на доли пикселя, и браузер
   считал, что прокручивать есть что: у пустого поля в одну строку сбоку
   висела полоса прокрутки со стрелками — рядом с микрофоном она читалась
   как непонятный регулятор. Класс .scrolls вешает autosize(), когда текст
   действительно перерос максимальную высоту. */
.composer textarea{
  flex:1;min-width:0;resize:none;outline:none;background:transparent;
  font-size:15.5px;line-height:1.5;padding:11px 0;min-height:48px;max-height:184px;
  overflow-y:hidden;
  color:var(--text);scrollbar-width:thin;scrollbar-color:var(--scroll-thumb) transparent;
}
.composer textarea.scrolls{overflow-y:auto}
/* Стрелки-степперы у полосы прокрутки — то самое, что торчало в поле. */
.composer textarea::-webkit-scrollbar-button{display:none;width:0;height:0}
.composer textarea::-webkit-scrollbar{width:7px}
.composer textarea::-webkit-scrollbar-thumb{background:var(--scroll-thumb);border-radius:99px;
  border:2px solid transparent;background-clip:content-box}
.composer textarea::-webkit-scrollbar-thumb:hover{background:var(--scroll-thumb-hover);background-clip:content-box}
.composer textarea::-webkit-scrollbar-track{background:transparent}
.composer textarea::placeholder{color:var(--text-3)}
.cbtn{
  width:42px;height:42px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;
  transition:transform var(--dur) var(--ease),background var(--dur),color var(--dur),filter var(--dur);
}
.cbtn svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}
.cbtn.ghost{color:var(--text-3)}
.cbtn.ghost:hover{color:var(--text-2);background:var(--ink-hover)}
.cbtn.ghost.rec{color:#fff;background:#ef4444;animation:pulse 1.4s ease-in-out infinite}
@keyframes pulse{50%{box-shadow:0 0 0 7px rgba(239,68,68,.18)}}
/* Отправка показывает готовность: пока поле пустое — серая, как только
   есть текст — заливается тем же синим, что и отправленный вопрос. Это
   и есть сигнал «можно», поэтому отдельной рамки фокуса у поля нет (её
   убрали 11.08 по просьбе). Нажатие — сжатие до 0,96. */
.cbtn.send{background:var(--solid);color:var(--solid-fg);
  box-shadow:0 1px 1px rgba(8,96,168,.20),0 3px 8px rgba(8,96,168,.18)}
.cbtn.send:hover{filter:brightness(1.08)}
.cbtn.send:active{transform:scale(.96);transition-duration:.08s}
.cbtn.send:disabled{background:var(--surface-3);color:var(--text-3);box-shadow:none;
  filter:none;opacity:1;cursor:not-allowed;transform:none}
.cbtn.stop{background:var(--text);color:var(--bg)}

.hints{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 18px;
  margin-top:10px;margin-bottom:0;font-size:12px;color:var(--text-3)}
.hints span{display:inline-flex;align-items:center;gap:5px}
/* Клавиши — только там, где есть клавиатура; на сенсорном экране они шум. */
@media (pointer:coarse){.hints .hint-kbd{display:none}}
.hints svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round;opacity:.8}

/* Входы по намерению (разбор 26.09): четыре постоянных двери вместо шести
   случайных чипов — формы по ИНН, срок, заполнение, штраф. Постоянные, чтобы
   к «той кнопке» можно было вернуться; значки одним статистическим синим. */
.entries{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;
  width:100%;max-width:720px;margin-top:22px}
.lucide-sprite{position:absolute;width:0;height:0;overflow:hidden}
.lucide-icon{display:block;width:24px;height:24px;flex:none;fill:none;
  color:var(--text);stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.nav-item>.lucide-icon{width:20px;height:20px;margin:4px}
/* Входы — плоские «пилюли» в духе Kimi; окончательный вид — в блоке
   Calm workspace ниже. Пастельные подложки по nth-child (27.09) сняты:
   цвет ничего не кодировал, а на тёмной теме чёрный текст на них терялся. */
.entry{display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-width:0;
  text-align:left;color:var(--text);
  transition:background var(--dur) ease,border-color var(--dur) ease,transform .12s var(--ease-out)}
.entry .entry-head{display:flex;align-items:center;gap:11px}
.entry .entry-icon{display:grid;place-items:center;flex:none}
.entry b{font-size:14px;font-weight:600;color:var(--text);line-height:1.2}
.entry small{font-size:12.5px;line-height:1.4;color:var(--text-2)}
.entries .entry:nth-child(2){animation-delay:.04s}
.entries .entry:nth-child(3){animation-delay:.08s}
.entries .entry:nth-child(4){animation-delay:.12s}
.chips-cap{width:100%;max-width:720px;margin:18px 0 0;font-size:12px;font-weight:600;
  color:var(--text-3);text-align:left}
.chips-cap+.chips{margin-top:8px}
@media(max-width:720px){.entries{grid-template-columns:1fr 1fr}}
@media(min-width:721px) and (max-width:980px){
  .entries,.chips{grid-template-columns:repeat(2,minmax(0,1fr))}
}
/* Популярные запросы — теперь тише и под входами: один ряд из трёх */
.chips{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));justify-content:center;
  gap:8px 10px;width:100%;max-width:720px;margin-top:18px;
}
.chip{
  display:inline-flex;align-items:center;gap:7px;min-width:0;max-width:100%;
  padding:8px 12px 8px 9px;text-align:left;
  background:var(--surface);border:1px solid var(--line);border-radius:999px;
  box-shadow:var(--sh-sm);font-size:12.5px;font-weight:500;line-height:1.25;color:var(--text-2);
  transition:border-color var(--dur),box-shadow var(--dur),background var(--dur),
    color var(--dur),transform var(--dur) var(--ease-out);
  animation:enter-item .45s var(--ease-out) both;
}
/* Тот же подъём на 1px, что у строк панелей: раньше чипсы меняли только
   цвет и были единственным кликабельным элементом старта без отклика
   движением — рядом с .prow это читалось как «неактивны». */
.chip:hover{border-color:var(--accent-line);background:var(--surface-2);color:var(--text);
  box-shadow:var(--sh)}
.chip:active{background:var(--surface-3);transform:none;transition-duration:.08s}
.chip .ic{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;
  background:var(--brand-solid);color:var(--brand-solid-fg)}
.chip .ic svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:1.85;
    stroke-linecap:round;stroke-linejoin:round}
.chip .lucide-icon{width:17px;height:17px;color:var(--text)}
.chip .t{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:22ch}
.chips .chip:nth-child(1){animation-delay:.06s}
.chips .chip:nth-child(2){animation-delay:.09s}
.chips .chip:nth-child(3){animation-delay:.12s}
.chips .chip:nth-child(4){animation-delay:.15s}
.chips .chip:nth-child(5){animation-delay:.18s}
.chips .chip:nth-child(6){animation-delay:.21s}

/* Увеличенная цель под палец: 32px вместо 20px — меньше пальцем не
   попасть уверенно. Отрицательный отступ по вертикали гасит прибавку,
   чтобы строка заголовка не стала выше. */
@media(pointer:coarse){
  .sec .sec-fold{width:32px;height:32px;margin:-6px 0}
}
.due-org{display:flex;gap:8px;align-items:stretch;margin-top:10px}
.due-org-inn{
  flex:1;min-width:0;padding:9px 12px;border-radius:12px;font-size:13.5px;
  color:var(--text);background:var(--surface);border:1px solid var(--line-2);outline:none;
  font-variant-numeric:tabular-nums;letter-spacing:.03em;
}
.due-org-inn:focus{border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}
.due-org button{flex-shrink:0;padding:8px 14px}
.due-org-note{margin:8px 2px 0;font-size:12px;color:var(--text-3);line-height:1.4}
.due-org-note.err{color:#b42318}@keyframes shim{to{background-position:-135% 0}}

.ct-card{
  padding:16px 18px 16px;margin-bottom:10px;border-radius:18px;
  background:
    radial-gradient(120% 140% at 0% 0%, rgba(8,96,168,.14), transparent 58%),
    linear-gradient(160deg, color-mix(in srgb,var(--c-blue) 10%,var(--surface)), var(--surface) 64%);
  border:1px solid var(--line);box-shadow:var(--sh);
}
.ct-top{display:flex;align-items:flex-start;gap:12px}
.ct-who{min-width:0}
.ct-kicker{
  font-size:11px;font-weight:750;letter-spacing:.06em;text-transform:uppercase;
  color:var(--accent);margin-bottom:4px;
}
.ct-name{
  font-family:var(--display);font-size:20px;font-weight:750;letter-spacing:-.03em;
  line-height:1.2;color:var(--text);
}
.ct-title{margin-top:3px;font-size:13px;color:var(--text-2)}
.ct-form{margin:12px 0 0;font-size:13.5px;line-height:1.4;color:var(--text-2)}
.ct-rows{display:flex;flex-direction:column;gap:10px;margin-top:14px}
.ct-row{display:flex;align-items:flex-start;gap:10px}
.ct-ic{
  width:32px;height:32px;border-radius:10px;flex-shrink:0;
  display:grid;place-items:center;background:var(--accent-soft);color:var(--accent);
}
.ct-ic svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.85;
  stroke-linecap:round;stroke-linejoin:round}
.ct-txt{min-width:0;display:flex;flex-direction:column;gap:1px}
.ct-txt i{font-style:normal;font-size:11px;font-weight:750;letter-spacing:.04em;
  text-transform:uppercase;color:var(--text-3)}
.ct-val{font-size:15px;font-weight:650;color:var(--text);text-decoration:none;line-height:1.35}
a.ct-val:hover{color:var(--accent);text-decoration:underline}
.ct-phone{display:flex;flex-wrap:wrap;align-items:baseline;gap:.35em}
.ct-ext{font-size:15px;font-weight:650;color:var(--text);line-height:1.35}
.ct-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}

/* ── Чат ── */
.chat{width:100%;max-width:760px;margin:0 auto;padding:16px 0 12px;display:flex;flex-direction:column;gap:20px;align-self:center}
.msg{display:flex;gap:12px;animation:enter-item .42s var(--ease-out) both}
/* Появление: не просто проявление, а короткий подъём. Чистая прозрачность
   читается как мигание — глазу не за что зацепиться, и экран кажется
   собранным рывком. 8px хватает, чтобы движение почувствовалось, но не
   отвлекало; --ease-out тормозит в конце, поэтому элемент «садится»,
   а не тормозит резко. */
@keyframes enter-item{
  from{opacity:0;transform:translate3d(0,8px,0)}
  to{opacity:1;transform:none}
}
.msg.me{justify-content:flex-end}
/* Свой вопрос — в цветах ChatGPT: светло-голубая заливка, очень тёмный
   синий текст, без рамки и без тени. Цвета сняты пипеткой с присланного
   скриншота (19.09): #e8f3fe и #0c274a. Текст на заливке 13,3 : 1.

   От фона плашка отличается слабо, 1,12 : 1, — ровно как у ChatGPT на том
   же скриншоте (1,1 : 1). Это выбор, а не недосмотр: вопрос отделяет
   выравнивание вправо и сама заливка, у ответа заливки нет вовсе. До 19.09
   здесь был сплошной синий с белым текстом (вариант C1). */
.msg.me .bubble{
  max-width:82%;padding:11px 15px;border-radius:18px 18px 5px 18px;
  background:var(--q-bg);color:var(--q-fg);font-size:14.5px;line-height:1.55;
  border:0;box-shadow:none;
  white-space:pre-wrap;word-break:break-word;
}

/* Подпись над ответом: кто говорит. Чёрным, а не серым — это имя, а не
   служебная пометка. Источник ответа («Штрафы», «Реестр форм») здесь не
   повторяем: он уже стоит бейджем под ответом. */
.msg-who{display:flex;align-items:center;gap:7px;margin-bottom:7px;
  font-size:12.5px;font-weight:650;letter-spacing:-.005em;color:var(--text)}
.msg-who i{width:16px;height:16px;border-radius:5px;flex-shrink:0;background:var(--grad)}
.msg.ai .col{flex:1;min-width:0}
.body{font-size:15px;line-height:1.68;color:var(--text);word-wrap:break-word}
/* Строка-итог над ответом про срок. Спокойная: чернила, табличные цифры.
   За три дня и меньше — янтарь предупреждения (--warn), не синий: синий
   значит «нажми», а здесь состояние (Status Colors Rule, colorize 26.09). */
.due-lead{display:flex;align-items:center;gap:11px;margin:2px 0 12px;padding:10px 12px;
  border:1px solid var(--line);border-radius:12px;background:var(--surface);max-width:100%}
.due-lead .ic{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;flex-shrink:0;
  background:var(--brand-solid);color:var(--brand-solid-fg)}
.due-lead .ic svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round}
.due-t{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.due-t small{font-size:12px;font-weight:600;color:var(--text-3)}
.due-t b{font-size:16px;font-weight:700;letter-spacing:-.01em;color:var(--text);
  font-variant-numeric:tabular-nums}
.due-left{font-size:13px;font-weight:600;color:var(--text-2);white-space:nowrap;
  font-variant-numeric:tabular-nums}
/* На телефоне «через N дней» уходит под дату: иначе дата «не позднее
   1 февраля 2027» ломалась на две строки рядом с узкой колонкой дней. */
@media (max-width:480px){
  .due-lead{flex-wrap:wrap;row-gap:4px}
  .due-left{flex-basis:100%;padding-left:41px}
}
.due-lead.soon{border-color:var(--warn-line);background:var(--warn-soft)}
.due-lead.soon .due-left{color:var(--warn)}
.body>*+*{margin-top:.72em}
/* Заголовок в ответе был 15px при тексте 14.9px — крупнее на десятую
   долю пикселя, то есть заголовком не выглядел вовсе; отличался только
   весом, да и тот (680) был неотличим от жирного слова в строке (660).
   Разводим по-настоящему: размером и заметным шагом веса. h4 — ступень
   ниже, раньше он был склеен с h3 в одно правило и не отличался ничем. */
.body h3{font-size:17px;font-weight:750;letter-spacing:-.02em;margin:1.15em 0 .45em;line-height:1.3}
.body h3:first-child{margin-top:0}
.body h4{font-size:15.5px;font-weight:700;letter-spacing:-.01em;margin:1em 0 .35em}
.body h4:first-child{margin-top:0}
.body ul,.body ol{padding-left:1.45em;margin:.15em 0 0}
.body li{margin-top:.55em;padding-left:.2em}
.body li+li{margin-top:.7em}
.body strong{font-weight:650}
.body a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}
.doc-btn{
  display:inline-flex;align-items:center;gap:8px;width:fit-content;max-width:100%;
  margin:.35em 0 .15em;padding:10px 16px;border-radius:12px;
  background:var(--brand-solid);color:var(--brand-solid-fg);
  font-size:13.5px;font-weight:650;line-height:1.2;letter-spacing:-.01em;
  text-decoration:none;box-shadow:var(--sh-sm);
  transition:background var(--dur),box-shadow var(--dur),transform var(--dur);
}
.doc-btn:hover{text-decoration:none;color:var(--brand-solid-fg);
  background:color-mix(in srgb,var(--c-blue) 28%,var(--surface));
  box-shadow:var(--sh);}
.doc-btn:active{transform:none;filter:none}
.doc-btn::before{
  content:"";width:15px;height:15px;flex-shrink:0;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3C/svg%3E") center/contain no-repeat;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z'/%3E%3Cpath d='M14 2v6h6'/%3E%3C/svg%3E") center/contain no-repeat;
}
.doc-btn-go{opacity:.7;font-size:13px;margin-left:2px}
.body li .doc-btn,.body p .doc-btn{display:flex}
.body code{font-family:var(--mono);font-size:.88em;background:var(--surface-3);
  padding:.13em .38em;border-radius:5px}
.body pre{background:var(--surface-3);border:1px solid var(--line);border-radius:12px;
  padding:12px 14px;overflow-x:auto}
.body pre code{background:none;padding:0;font-size:12.5px;line-height:1.6}
.body table{width:100%;border-collapse:collapse;font-size:13.5px;display:block;overflow-x:auto}
.body th,.body td{border:1px solid var(--line);padding:7px 10px;text-align:left;vertical-align:top}
.body th{background:var(--surface-3);font-weight:600}
.body blockquote{border-left:3px solid var(--accent-line);padding-left:12px;color:var(--text-2)}

/* ── График показателя (перенесено из /legacy — в редизайне отсутствовал
   целиком: сервер шлёл meta.chart, next.html его просто не читал) ── */
.chart{margin:14px 0 0;border:1px solid var(--line);border-radius:14px;background:var(--surface);overflow:hidden}
.chart-head{display:flex;align-items:flex-start;gap:12px;padding:14px 16px 10px}
.chart-title{flex:1;min-width:0;font-size:13.5px;font-weight:600;color:var(--text);line-height:1.35}
.chart-title small{display:block;font-weight:400;font-size:11.5px;color:var(--text-3);margin-top:2px}
.chart-hero{text-align:right;flex-shrink:0}
.chart-val{font-family:var(--display);font-size:22px;font-weight:700;letter-spacing:-.03em;line-height:1}
.chart-unit{font-size:11.5px;color:var(--text-3);margin-top:3px}
.chart-delta{display:inline-flex;align-items:center;gap:3px;font-size:11.5px;font-weight:600;margin-top:4px;padding:1px 7px;border-radius:99px}
.chart-delta.up{background:var(--ok-soft);color:var(--ok)}
.chart-delta.down{background:var(--danger-soft);color:var(--danger)}
.chart-delta.flat{background:var(--surface-3);color:var(--text-2)}
.chart-plot{position:relative;padding:0 8px}
.chart-plot svg{display:block;width:100%;height:auto;overflow:visible}
.c-grid{stroke:var(--line);stroke-width:1}
.c-axis{fill:var(--text-3);font-size:10px;font-family:var(--font)}
.c-line{fill:none;stroke:var(--accent);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.c-area{fill:var(--accent);opacity:.08}
.c-dot{fill:var(--surface);stroke:var(--accent);stroke-width:2}
.c-dot-last{fill:var(--accent);stroke:var(--surface);stroke-width:2}
.c-hit{fill:transparent;cursor:crosshair}
.c-cross{stroke:var(--text-3);stroke-width:1;stroke-dasharray:3 3;opacity:0}
.c-cross.on{opacity:.6}
.c-focus{fill:var(--accent);stroke:var(--surface);stroke-width:2.5;opacity:0}
.c-focus.on{opacity:1}
.chart-tip{
  position:absolute;pointer-events:none;z-index:5;opacity:0;
  transform:translate(-50%,-125%);transition:opacity .12s;
  background:var(--text);color:var(--bg);
  padding:5px 9px;border-radius:7px;font-size:11.5px;font-weight:500;white-space:nowrap;
  box-shadow:var(--sh-sm);
}
.chart-tip.on{opacity:1}
.chart-foot{display:flex;align-items:center;gap:8px;padding:8px 16px 12px;flex-wrap:wrap}
.chart-src{flex:1;min-width:0;font-size:11px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chart-src a{color:var(--accent)}
.chart-tbl{width:100%;border-collapse:collapse;font-size:12.5px;display:none}
.chart-tbl.on{display:table}
.chart-tbl th,.chart-tbl td{border-top:1px solid var(--line);padding:6px 16px;text-align:left}
.chart-tbl th{background:var(--surface-3);font-weight:600;font-size:11px;color:var(--text-2);text-transform:uppercase;letter-spacing:.04em}
.chart-tbl td:last-child,.chart-tbl th:last-child{text-align:right}
.chart-foot .act{
  padding:4px 10px;border-radius:8px;font-size:11px;font-weight:600;color:var(--accent);
  background:var(--accent-soft);flex-shrink:0;
}
.chart-foot .act:hover{filter:brightness(.97)}

.caret{display:inline-block;width:2px;height:1.05em;vertical-align:-.16em;margin-left:1px;
  background:var(--accent);animation:blink 1s steps(2) infinite}
@keyframes blink{50%{opacity:0}}

/* Индикатор ожидания */
.think{display:flex;align-items:center;gap:10px;color:var(--text-2);font-size:13.5px}
/* --solid — почти чёрный в светлой теме, у ожидания ответа должен быть
   фирменный сине-зелёный, тот же, что у логотипа (--brand-1/2), а не
   нейтральный служебный цвет. */
.think .orb{width:16px;height:16px;border-radius:50%;
  background:linear-gradient(135deg,var(--brand-1),var(--brand-2));
  box-shadow:0 0 8px color-mix(in srgb,var(--brand-2) 55%,transparent);
  animation:breathe 1.5s var(--ease) infinite}
@keyframes breathe{0%,100%{transform:scale(.7);opacity:.55}50%{transform:scale(1);opacity:1}}
.think .lbl{background:linear-gradient(90deg,var(--text-3) 20%,var(--text) 50%,var(--text-3) 80%);
  background-size:220% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;
  animation:sweep 1.9s linear infinite}
@keyframes sweep{to{background-position:-220% 0}}

/* Хвост сообщения: бейдж источника, действия, документы */
.metarow{display:flex;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap}
.tag{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;border-radius:999px;
  font-size:11.5px;font-weight:600;background:var(--accent-soft);color:var(--accent)}
.tag svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2}
.tag.warn{background:var(--warn-soft);color:var(--warn)}
.act{margin-left:auto;display:flex;gap:2px}
.act button{width:29px;height:29px;border-radius:8px;display:grid;place-items:center;
  color:var(--text-3);transition:background var(--dur),color var(--dur)}
.act button:hover{background:var(--ink-hover);color:var(--text)}
/* Поставленная оценка. Заливка, а не только цвет штриха: иначе выбранное
   отличалось бы от соседнего лишь оттенком серого — и в списке из четырёх
   одинаковых кнопок это не читается. */
.act button.on{background:var(--accent-soft);color:var(--accent)}
.act button[data-a="down"].on{background:var(--danger-soft);color:var(--danger)}
/* Линия 1,5: при 1,9 иконки темнее соседних подписей и спорят с ответом. */
.act svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.5;
  stroke-linecap:round;stroke-linejoin:round}
/* ═════════ Поля ответа ═════════
   Источники рядом с ответом вместо свёрнутой строки «N документов» под
   ним. Номер в тексте — ссылка на строку на полях; ставится только там,
   где число или код из источника буквально стоит в предложении (см.
   evTokens в next.js).

   Узкий экран — поля под ответом и свёрнуты, как решено 30.08; номер в
   тексте раскрывает их. Широкий — см. @container canvas ниже. */
sup.ref{vertical-align:.5em;line-height:0;font-size:inherit}
sup.ref a{
  position:relative;
  display:inline-block;margin-left:2px;padding:2px 4px 1px;border-radius:4px;
  font:700 10px/1 var(--mono);font-variant-numeric:tabular-nums;
  color:var(--accent);background:var(--accent-soft);text-decoration:none;
  transition:background var(--dur),color var(--dur);
}
sup.ref a:hover,sup.ref a.hot{background:var(--accent);color:var(--bg)}
/* Номер 13×13 px — мелкая цель для пальца и дрожащей руки. Зона нажатия
   шире самого номера, вид прежний. */
sup.ref a::after{content:"";position:absolute;inset:-8px -6px}
sup.ref a:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
sup.ref+sup.ref a{margin-left:1px}

.ev{margin-top:12px;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.ev-h{
  display:flex;align-items:center;gap:7px;width:100%;padding:9px 12px;
  font-size:12.5px;font-weight:600;color:var(--text-2);text-align:left;
  transition:background var(--dur);
}
.ev-h:hover{background:var(--ink-hover)}
.ev-h svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;
  transition:transform .2s var(--ease)}
.ev.open .ev-h svg{transform:rotate(90deg)}
.ev-c{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--text-3);font-weight:500}
.ev-cap{display:none}
.ev-list,.ev-more{display:none}
.ev.open .ev-list,.ev.open .ev-more{display:block}
.ev-list{list-style:none;margin:0;padding:0}
.ev-i{
  display:flex;gap:10px;padding:10px 12px;border-top:1px solid var(--line);
  transition:background var(--dur);scroll-margin:24px;
}
.ev-i.hot{background:var(--accent-soft)}
.ev-i.flash{animation:ev-flash 1.4s var(--ease-out)}
@keyframes ev-flash{from{background:var(--accent-soft)}to{background:transparent}}
/* Прибытие источников (класс ставит applyMeta на первые 0,9 с ответа):
   строки въезжают лесенкой по 40 мс — это список, и он появляется как
   список; дальше пятой задержка не растёт. Номера в тексте проявляются
   после первых строк, чтобы связь «номер → строка» читалась сама. */
.ev-arrive .ev-i{animation:enter-item .32s var(--ease-out) both}
.ev-arrive .ev-i:nth-child(2){animation-delay:.04s}
.ev-arrive .ev-i:nth-child(3){animation-delay:.08s}
.ev-arrive .ev-i:nth-child(4){animation-delay:.12s}
.ev-arrive .ev-i:nth-child(n+5){animation-delay:.16s}
.ev-arrive sup.ref a{animation:ref-in .28s var(--ease-out) .12s both}
@keyframes ref-in{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}
.ev-n{
  flex-shrink:0;height:max-content;margin-top:1px;padding:3px 5px 2px;border-radius:4px;
  font:700 10.5px/1 var(--mono);font-variant-numeric:tabular-nums;
  color:var(--accent);background:var(--accent-soft);
}
.ev-b{min-width:0;flex:1}
.ev-k{
  font:500 10px/1.3 var(--mono);letter-spacing:.08em;text-transform:uppercase;
  color:var(--text-3);margin-bottom:3px;
}
.ev-t{font-size:13px;font-weight:600;line-height:1.38;color:var(--text);overflow-wrap:anywhere}
.ev-t b{font-family:var(--mono);font-weight:700;color:var(--accent);margin-right:6px}
.ev-d{
  font:500 11.5px/1.45 var(--mono);font-variant-numeric:tabular-nums;
  color:var(--text-2);margin-top:3px;overflow-wrap:anywhere;
}
.ev-q{
  margin:6px 0 0;padding-left:9px;border-left:2px solid var(--line-2);
  font-size:12px;line-height:1.5;color:var(--text-2);overflow-wrap:anywhere;
}
.ev-a{
  display:inline-block;margin-top:6px;font-size:12px;font-weight:600;color:var(--accent);
  text-decoration:none;
}
.ev-a:hover{text-decoration:underline;text-underline-offset:2px}
.ev-more{border-top:1px solid var(--line)}
.ev-more summary{
  padding:8px 12px;font-size:12px;font-weight:600;color:var(--text-3);
  cursor:pointer;list-style:none;
}
.ev-more summary::-webkit-details-marker{display:none}
.ev-more summary:hover{color:var(--text-2)}
.ev-m{
  display:block;padding:6px 12px 6px 22px;font-size:12px;line-height:1.4;
  color:var(--text-2);overflow-wrap:anywhere;
}
a.ev-m:hover{color:var(--accent)}

/* Узко: поля под ответом. В разметке они первые — так нужно широкому
   режиму (см. ниже), — поэтому порядок задаём явно: ответ, поля, «чем ещё
   помочь». */
.msg.ai.has-ev .col{display:flex;flex-direction:column}
.msg.ai.has-ev .col>.ev{order:1}
.msg.ai.has-ev .col>.followups{order:2}

/* Широко: колонка ответа остаётся по центру — там же и той же ширины, что
   была, как и поле ввода, — а поля выносятся в пустой зазор справа от неё.

   Поля плавают вправо с отрицательным правым отступом ровно в свою ширину
   плюс зазор. Внешняя ширина плавающего блока выходит меньше нуля, поэтому
   строки ответа его не обтекают — текст не сужается ни на пиксель; а
   flow-root у колонки учитывает его высоту, и следующее сообщение не
   наедет на поля предыдущего.

   Ширина полей — от места, которое реально есть справа: половина разницы
   между шириной области и колонкой, минус 40 px на полосу прокрутки и
   воздух у края. Не уже 160 — отсюда порог 1220 при колонке 820 (Kimi-
   раскладка, 27.09). Уже — поля уходят под ответ.

   27.09: в Kimi-итерации поля перевели в padding-right сообщения, и
   колонка ответа сузилась на ширину полей — текст стал уже поля ввода.
   Вернули float с отрицательным отступом: колонка = поле ввода, поля —
   в зазоре справа, на том месте, что и так пустовало. */
.canvas{container:canvas / inline-size}
@container canvas (min-width:1220px){
  .msg.ai.has-ev{--ev-w:min(260px, calc((100cqw - 820px) / 2 - 40px))}
  .msg.ai.has-ev .col{display:flow-root}
  .msg.ai.has-ev .col>.ev{
    float:right;width:var(--ev-w);
    margin:2px calc(-1 * (var(--ev-w) + 16px)) 0 0;
    border:0;border-left:1px solid var(--line);border-radius:0;
    padding-left:12px;overflow:visible;background:transparent;
  }
  .msg.ai.has-ev .ev-h{display:none}
  .msg.ai.has-ev .ev-cap{
    display:block;margin-bottom:10px;
    font:500 10px/1.3 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-3);
  }
  .msg.ai.has-ev .ev-list,.msg.ai.has-ev .ev-more{display:block}
  .msg.ai.has-ev .ev-i{gap:8px;padding:6px 6px 8px;margin:0 -6px 6px;border-top:0;border-radius:8px}
  .msg.ai.has-ev .ev-t{font-size:12.5px}
  .msg.ai.has-ev .ev-d{font-size:11px}
  .msg.ai.has-ev .ev-more{border-top:0}
  .msg.ai.has-ev .ev-more summary{padding:4px 0}
  .msg.ai.has-ev .ev-m{padding:4px 0 4px 10px}
}
.followups{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}
.fu-t{width:100%;font-size:12px;font-weight:600;color:var(--text-3);margin-bottom:1px}
.fu{padding:7px 12px;border-radius:999px;font-size:13px;color:var(--text-2);
  background:var(--surface);border:1px solid var(--line);
  transition:border-color var(--dur),color var(--dur),transform var(--dur) var(--ease-out)}
/* transform в transition был объявлен, но :hover его не менял — переход
   в никуда. Либо убрать из transition, либо использовать; подсказка
   «спросить дальше» кликабельна, поэтому отклик уместен. */
.fu:hover{border-color:var(--accent-line);color:var(--accent)}
.fu:active{transform:none;transition-duration:.08s}

/* Док — матовое стекло поверх переписки: текст уходит под поле ввода
   размытым, а не обрывается градиентом в белое. Лежит поверх ленты
   (absolute), а лента получает снизу отступ ровно в его высоту (--dock-h
   считает updateDockH), чтобы последний ответ можно было докрутить.
   Никакой линии по верхнему краю: 19.09 её убрали по просьбе — край
   стекла и так виден по размытию. Если в системе включено
   «уменьшить прозрачность», стекло становится сплошным. */
.dock{position:absolute;left:0;right:0;bottom:0;z-index:4;padding:10px 24px 14px;
  background:color-mix(in srgb,var(--bg) 74%,transparent);
  -webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4);
  border:0;box-shadow:none}
.app.chat-mode .view{padding-bottom:var(--dock-h,96px)}
@media (prefers-reduced-transparency:reduce){
  .dock{background:var(--bg);-webkit-backdrop-filter:none;backdrop-filter:none}
}
.dock .composer-wrap{max-width:760px}
/* 12 px, не 11: это предложение, которое читают, а не метка (разбор 26.09). */
.disclaimer{text-align:center;font-size:12px;color:var(--text-3);margin-top:8px}

/* Кнопка «вниз» стоит над композером, а не у нижнего края холста: там
   она попадала под саму панель ввода с её непрозрачным фоном и была не
   видна ровно тогда, когда нужна. Высоту панели считает JS (--dock-h) —
   она меняется, когда текст в поле переносится на вторую строку. */
.tobottom{
  position:absolute;left:50%;bottom:calc(var(--dock-h,92px) + 10px);
  transform:translateX(-50%) translateY(10px) scale(.92);
  width:36px;height:36px;border-radius:50%;display:grid;place-items:center;z-index:5;
  background:var(--surface);border:1px solid var(--line-2);box-shadow:var(--sh);
  color:var(--text-2);opacity:0;pointer-events:none;
  transition:opacity var(--dur-med) var(--ease-out),transform var(--dur-med) var(--ease-out),
    background var(--dur),color var(--dur),box-shadow var(--dur);
}
.tobottom.on{opacity:1;transform:translateX(-50%);pointer-events:auto}
.tobottom:hover{background:var(--surface-2);color:var(--accent);box-shadow:var(--sh-md)}
.tobottom svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.1}

/* ═════════ Палитра команд ═════════ */
.pal-bg{
  position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;
  z-index:90;background:rgba(8,12,20,.42);
  backdrop-filter:blur(6px) saturate(1.1);-webkit-backdrop-filter:blur(6px) saturate(1.1);
  display:grid;place-items:start center;padding:12vh 16px 16px;box-sizing:border-box;
  opacity:0;pointer-events:none;transition:opacity var(--dur-med) var(--ease-out);
}
.pal-bg.on{opacity:1;pointer-events:auto}
.pal{
  width:100%;max-width:560px;background:var(--surface);border:1px solid var(--line-2);
  border-radius:var(--r-xl);box-shadow:var(--sh-lg);overflow:hidden;
  transform:translateY(-14px) scale(.97);transition:transform var(--dur-med) var(--ease-out);
}
.pal-bg.on .pal{transform:none}
.pal-in{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line)}
.pal-in svg{width:17px;height:17px;stroke:var(--text-3);fill:none;stroke-width:2;flex-shrink:0}
.pal-in input{flex:1;outline:none;background:none;font-size:15px;color:var(--text)}
.pal-in input::placeholder{color:var(--text-3)}
.pal-list{max-height:min(52vh,420px);overflow-y:auto;padding:6px}
.pal-sec{padding:9px 10px 5px;font-size:11px;font-weight:750;letter-spacing:.07em;
  text-transform:uppercase;color:var(--text-3)}
.pal-row{
  display:flex;align-items:center;gap:11px;width:100%;padding:9px 10px;border-radius:11px;
  text-align:left;font-size:14px;color:var(--text-2);transition:background var(--dur),color var(--dur);
}
.pal-row .ic{width:27px;height:27px;border-radius:8px;display:grid;place-items:center;flex-shrink:0}
.pal-row .ic svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round}
.pal-row .t{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pal-row.sel{background:var(--accent-soft);color:var(--accent)}
.pal-empty{padding:26px 12px;text-align:center;font-size:13px;color:var(--text-3)}
.pal-foot{display:flex;gap:14px;padding:9px 14px;border-top:1px solid var(--line);
  font-size:11px;color:var(--text-3)}
.pal-foot b{font-family:var(--mono);font-weight:650;border:1px solid var(--line-2);
  border-radius:5px;padding:1px 4px;margin-right:4px}

/* ═════════ Инструменты ═════════ */
.sheet-bg{
  position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;
  z-index:85;background:rgba(8,12,20,.44);
  backdrop-filter:blur(8px) saturate(1.1);-webkit-backdrop-filter:blur(8px) saturate(1.1);
  display:grid;place-items:center;padding:24px 16px;box-sizing:border-box;
  opacity:0;pointer-events:none;transition:opacity var(--dur-med) var(--ease-out);
}
.sheet-bg.on{opacity:1;pointer-events:auto}
.sheet{
  width:100%;max-width:780px;max-height:88vh;margin:0;justify-self:center;align-self:center;
  display:flex;flex-direction:column;
  background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-xl);
  box-shadow:var(--sh-lg);overflow:hidden;
  transform:translateY(18px) scale(.98);opacity:0;
  transition:transform var(--dur-med) var(--ease-out),opacity var(--dur) var(--ease-out);
}
/* Собственная прозрачность у листа, а не только у затемнения: без неё
   лист возникает целиком и сразу, и рост от точки вызова не читается —
   видно только, как готовое окно чуть подъезжает. */
.sheet-bg.on .sheet{transform:none;opacity:1}
/* Пока панель ведут пальцем, а потом пружиной, CSS-переход обязан
   молчать: он вставляет между пальцем и панелью свои 320 мс, и слежение
   перестаёт быть 1:1. */
.sidebar.swiping,.sheet.swiping,.sheet-bg.swiping{transition:none}
.sheet-h{
  display:flex;align-items:center;gap:11px;padding:15px 16px;
  border-bottom:1px solid var(--line);flex-shrink:0;
}
.sheet-h .ic{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;flex-shrink:0}
.sheet-h .ic svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.9;
  stroke-linecap:round;stroke-linejoin:round}
.sheet-h h2{flex:1;min-width:0;font-size:16px;font-weight:700;letter-spacing:-.02em}
.sheet-h p{font-size:12px;color:var(--text-3);margin-top:1px;font-weight:400}
.sheet-b{flex:1;min-height:0;overflow-y:auto;padding:16px}

.tfield{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.tinput,.tarea{
  width:100%;padding:11px 13px;border-radius:12px;font-size:14.5px;color:var(--text);
  background:var(--surface-2);border:1px solid var(--line-2);outline:none;
  transition:border-color var(--dur),box-shadow var(--dur),background var(--dur);
}
.tarea{resize:vertical;min-height:80px;line-height:1.5}
.tinput::placeholder,.tarea::placeholder{color:var(--text-3)}
.tinput:focus,.tarea:focus{border-color:var(--accent-line);background:var(--surface);
  box-shadow:0 0 0 3px var(--accent-soft)}
.thint{font-size:11.5px;color:var(--text-3)}

.trow{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin-bottom:14px}
.btn{
  padding:9px 15px;border-radius:12px;font-size:13.5px;font-weight:600;
  color:var(--text);background:var(--surface);border:1px solid var(--line);
  box-shadow:var(--sh-sm);
  transition:background var(--dur),border-color var(--dur),box-shadow var(--dur),
    filter var(--dur),transform var(--dur) var(--ease),opacity var(--dur);
}
.btn:hover{
  background:color-mix(in srgb,var(--c-blue) 16%,var(--surface));
  border-color:color-mix(in srgb,var(--c-blue) 32%,transparent);
  box-shadow:var(--sh);color:var(--text);
}
.btn:active{opacity:.9}
.btn.primary{
  background:var(--brand-solid);color:var(--brand-solid-fg);
  border-color:transparent;box-shadow:var(--sh-sm);
}
.btn.primary:hover{
  filter:none;color:var(--brand-solid-fg);
  background:color-mix(in srgb,var(--c-blue) 28%,var(--surface));
  border-color:transparent;
}

.tchip{
  padding:7px 12px;border-radius:999px;font-size:12.5px;color:var(--text-2);
  background:var(--surface-2);border:1px solid var(--line);
  transition:border-color var(--dur),color var(--dur),transform var(--dur) var(--ease);
}
.tchip:hover{border-color:var(--accent-line);color:var(--accent)}
.tchip.on{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent);font-weight:650}

.tnote{
  display:flex;gap:10px;padding:12px 13px;border-radius:12px;margin:12px 0 0;
  background:var(--accent-soft);font-size:13px;line-height:1.5;color:var(--text-2);
}
.tnote svg{width:16px;height:16px;flex-shrink:0;margin-top:1px;
  stroke:var(--accent);fill:none;stroke-width:1.9}
.tbusy{display:flex;align-items:center;gap:10px;padding:22px 4px;color:var(--text-2);font-size:13.5px}
.tbusy .orb{width:15px;height:15px;border-radius:50%;background:var(--solid);
  animation:breathe 1.5s var(--ease) infinite}

.tprofile{
  display:flex;gap:11px;align-items:flex-start;padding:12px 13px;margin-bottom:14px;
  border-radius:12px;background:var(--surface-2);border:1px solid var(--line);
}
.tprofile .ic{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;flex-shrink:0}
.tprofile .ic svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.9}
.tprofile b{font-weight:600}
.tprofile small{display:block;margin-top:3px;font-size:12px;color:var(--text-3);line-height:1.45}

.tgrp{margin-bottom:8px}
.tgrp-h{
  display:flex;align-items:center;gap:8px;padding:10px 2px 8px;
  font-size:11px;font-weight:750;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);
}
.tgrp-h span{padding:2px 7px;border-radius:999px;background:var(--surface-3);
  font-size:10.5px;letter-spacing:0}

.tcard{
  display:block;width:100%;text-align:left;padding:12px 13px;margin-bottom:6px;
  border-radius:12px;background:var(--surface);border:1px solid var(--line);
  cursor:pointer;
  transition:border-color var(--dur),box-shadow var(--dur),transform var(--dur) var(--ease);
}
.tcard:hover{border-color:var(--accent-line);box-shadow:var(--sh-sm)}
.tcard-t{display:flex;align-items:baseline;gap:9px;margin-bottom:3px}
/* длинные названия показателей («Среднемесячная номинальная начисленная
   заработная плата») при flex-shrink:0 распирали карточку на телефоне */
.tcard-t b{font-size:14px;font-weight:700;letter-spacing:-.01em;min-width:0;overflow-wrap:anywhere}
.tcard-t i{font-style:normal;font-size:11.5px;color:var(--text-3);white-space:nowrap;
  margin-left:auto;flex-shrink:0}
.tcard p{font-size:13px;line-height:1.45;color:var(--text-2)}
.tcard .tnote{font-size:12.5px;color:var(--text-2);margin:7px 0 0;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tcard .meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.tcard .meta span{
  padding:3px 8px;border-radius:999px;font-size:11px;font-weight:550;
  background:var(--surface-3);color:var(--text-2);
}
.tcard .meta span.due{background:var(--accent-soft);color:var(--accent)}
.tcard .meta span.late{background:var(--danger-soft);color:var(--danger)}
.tcard .meta span.soon{background:var(--warn-soft);color:var(--warn)}
.tcard .meta span.ok{background:var(--ok-soft);color:var(--ok)}
.tcard-link{display:inline-flex;align-items:center;gap:4px;margin-top:8px;
  font-size:12px;font-weight:600;color:var(--accent);text-decoration:none}
.tcard-link:hover{text-decoration:underline}

.tstats{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:14px}
.tstat{padding:12px;border-radius:12px;background:var(--surface-2);
  border:1px solid var(--line);text-align:center}
.tstat b{display:block;font-family:var(--display);font-size:22px;font-weight:750;letter-spacing:-.03em}
.tstat span{display:block;font-size:11.5px;color:var(--text-3);margin-top:2px}
.tstat.warn b{color:var(--warn)}
.tstat.bad b{color:var(--danger)}

.tval{display:flex;align-items:flex-end;gap:12px;margin:4px 0 12px}
.tval b{font-family:var(--display);font-size:34px;font-weight:750;letter-spacing:-.035em;line-height:1}
.tval i{font-style:normal;font-size:13px;color:var(--text-2);padding-bottom:4px}
.spark{width:100%;height:52px;margin:6px 0 12px}
.spark polyline{fill:none;stroke:var(--accent);stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}
.spark circle{fill:var(--accent)}

.tkv{display:flex;gap:10px;padding:8px 0;border-top:1px solid var(--line);font-size:13px}
.tkv dt{color:var(--text-3);min-width:120px;flex-shrink:0}
.tkv dd{color:var(--text);flex:1;min-width:0}
.tlink{color:var(--accent);font-size:13px;font-weight:600;display:inline-flex;
  align-items:center;gap:5px;margin-top:10px}
.tlink svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2}

@media(max-width:600px){
  .tstats{grid-template-columns:1fr 1fr}
}

/* ═════════ Тосты ═════════ */
/* Сообщения-плашки центруются по рабочей области, а не по всему окну:
   position:fixed считает от края экрана, и на десктопе плашка выезжала
   левее центра ровно на половину ширины сайдбара — под меню, а не под
   тем, к чему она относится. --side-off знает текущую ширину меню:
   полную, в рельсе или ноль, когда меню уехало в выдвижную панель. */
.toasts{position:fixed;left:calc(50% + var(--side-off,0px) / 2);bottom:22px;
  transform:translateX(-50%);z-index:100;
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{
  padding:10px 16px;border-radius:999px;font-size:13px;font-weight:550;
  background:var(--text);color:var(--bg);box-shadow:var(--sh-md);
  animation:pop .32s var(--ease-out) both;
}
@keyframes pop{from{opacity:0;transform:translateY(12px) scale(.94)}
  to{opacity:1;transform:none}}

.scrim{position:fixed;inset:0;z-index:25;background:rgba(8,12,20,.4);
  opacity:0;pointer-events:none;transition:opacity .2s}
.scrim.on{opacity:1;pointer-events:auto}

/* Появление стартовых блоков лесенкой */
.stagger>*{animation:enter-item .55s var(--ease-out) both}
.stagger>*:nth-child(1){animation-delay:.02s}
.stagger>*:nth-child(2){animation-delay:.07s}
.stagger>*:nth-child(3){animation-delay:.12s}
.stagger>*:nth-child(4){animation-delay:.17s}
.start>.chips{animation:none}
.hero h1{animation:enter-item .6s var(--ease-out) both;animation-delay:.02s}
.hero p{animation:enter-item .55s var(--ease-out) both;animation-delay:.08s}
.hero #mountHero{animation:enter-item .55s var(--ease-out) both;animation-delay:.12s}
.hero .hints{animation:enter-item .5s var(--ease-out) both;animation-delay:.18s}

/* ═════════ Адаптив ═════════ */
@media(max-width:1080px){
  /* Один узкий столбец — не вторая колонка masonry: раскладка (JS,
     тот же порог 1080px) на этой ширине не считается, панели идут в
     обычном потоке одна под одной. */
  .chips{max-width:100%}
}
@media(max-width:820px){
  .chips{max-width:100%}
  .chip{max-width:none}
  .hero p{white-space:normal;max-width:40ch;line-height:1.45}
}

/* ── Планшет / телефон: drawer-сайдбар ── */
@media(max-width:860px){
  /* Меню уехало в выдвижную панель поверх содержимого — сдвигать плашки
     больше не от чего. Тот же вес селектора, что у правила для рельсы,
     иначе оно перебило бы это по специфичности. */
  :root,:root:has(.app.rail){--side-off:0px}
  .sidebar{
    position:fixed;left:0;top:0;bottom:0;z-index:40;
    width:min(var(--side-w),86vw);
    max-width:320px;
    transform:translateX(-105%);
    transition:transform var(--dur-med) var(--ease-out);
    box-shadow:var(--sh-lg);
    padding-top:max(14px,env(safe-area-inset-top));
    padding-bottom:max(10px,env(safe-area-inset-bottom));
    padding-left:max(12px,env(safe-area-inset-left));
    /* На десктопе полупрозрачность (72% + блюр) — стекло поверх ровного
       фона рядом с контентом. В выезжающем мобильном drawer сайдбар
       ложится ПОВЕРХ затемнённого (scrim) чата — сквозь него было видно
       тёмную дымку, панель читалась грязно-серой, а не белой. Сплошная
       заливка на мобильном решает это; блюр без прозрачности смысла не
       имеет — тоже снят. */
    background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none;
  }
  /* Вертикаль отдаём браузеру — история диалогов длинная и прокручивается;
     горизонталь забираем себе под свайп-закрытие. Без объявления браузер
     решает сам и успевает начать прокрутку раньше, чем мы поймём, что
     жест горизонтальный. */
  .sidebar{touch-action:pan-y}
  .app.drawer .sidebar{transform:none}
  .app.rail .sidebar{width:min(var(--side-w),86vw);max-width:320px}
  .burger{display:grid;width:40px;height:40px;min-width:40px;min-height:40px}
  .chat-back{width:40px;height:40px;min-width:40px;min-height:40px}
  /* Диалог на телефоне: бургер (открывает сайдбар поверх экрана) не
     нужен, когда экран и так занят перепиской, — его место занимает
     «назад», возврат к стартовому экрану со списком. */
  .app.chat-mode .burger{display:none}
  .app.chat-mode .chat-back{display:grid}
  .sb-collapse{display:none}
  .view{
    padding-left:max(14px,env(safe-area-inset-left));
    padding-right:max(14px,env(safe-area-inset-right));
  }
  .dock{
    padding-left:max(12px,env(safe-area-inset-left));
    padding-right:max(12px,env(safe-area-inset-right));
    padding-bottom:max(12px,env(safe-area-inset-bottom));
  }
  .topbar{
    height:auto;min-height:52px;
    padding:max(6px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) 8px max(8px,env(safe-area-inset-left));
    gap:6px;
  }
  /* Подпись НЕ прячем — по той же причине, что и у дневника: раньше на
     узком экране оставался кружок с буквой, и этого хватало. Кружок убран
     (просьба 05.09), и прежнее правило оставило бы пустую кнопку 10x10.
     Показываем имя, роль прячем — она длиннее и на телефоне не нужна. */
  .user .who span{display:none}
  .user{padding:4px 8px;max-width:140px}
  .user>svg{display:none}
  .top-title{max-width:min(18ch,32vw);font-size:13px}
  .kbd{display:none}
  #kbdHint{display:none}
  .sb-search .kbd{display:none}
  .menu{
    position:fixed;
    top:max(56px,calc(env(safe-area-inset-top) + 48px));
    right:max(10px,env(safe-area-inset-right));
    left:max(10px,env(safe-area-inset-left));
    width:auto;max-width:none;
  }
  .scrim{z-index:35}
  .toasts{
    left:50%;bottom:max(18px,env(safe-area-inset-bottom));
    width:min(92vw,360px);padding:0 8px;box-sizing:border-box;
  }
  .tobottom{bottom:calc(var(--dock-h,88px) + max(8px,env(safe-area-inset-bottom)))}
  .chat{padding:12px 0 10px;gap:16px}
  .msg.me .bubble{max-width:92%}
  .body{font-size:15px;line-height:1.65}
  .start{padding:clamp(12px,3vh,28px) 0 max(12px,env(safe-area-inset-bottom))}
  .composer{border-radius:22px;padding:6px 6px 6px 14px}
  .composer textarea{font-size:16px;/* iOS no-zoom */padding:10px 0}
  .cbtn{width:40px;height:40px}
  .pal-bg{padding:max(10vh,env(safe-area-inset-top)) 12px max(12px,env(safe-area-inset-bottom));place-items:start stretch}
  .pal{max-width:none;width:100%;border-radius:16px}
  .sheet-bg{padding:max(8px,env(safe-area-inset-top)) 0 0}
  .sheet{
    max-width:none;width:100%;max-height:100dvh;height:100dvh;
    border-radius:0;border:0;align-self:stretch;justify-self:stretch;
  }
  /* Полоска-хват над шапкой: без неё свайп вниз есть, но о нём неоткуда
     узнать. Это единственное, что сообщает о жесте, — поэтому она
     видимая, а не декоративная. */
  .sheet-h{padding:max(12px,env(safe-area-inset-top)) 14px 12px;position:relative}
  .sheet-h::before{
    content:'';position:absolute;left:50%;top:5px;transform:translateX(-50%);
    width:36px;height:4px;border-radius:999px;background:var(--line-2);
  }
  /* touch-action объявляем на ШАПКЕ, а не на всём листе: pan-y отдал бы
     браузеру ровно ту ось, по которой идёт наш свайп, и preventDefault
     после начала прокрутки уже ничего не решает. В шапке прокручивать
     нечего — жест там наш целиком и без оговорок. Тело листа остаётся
     обычным скроллом, свайп из него начинается только сверху. */
  .sheet-h{touch-action:none}
  .sheet-b{padding:14px 14px max(20px,env(safe-area-inset-bottom))}
  .iconbtn{width:40px;height:40px}
}

/* ── Телефон ── */
@media(max-width:600px){
  .chips{grid-template-columns:1fr 1fr;max-width:100%;gap:8px}
  .chip{width:100%;max-width:none;justify-content:flex-start;min-height:44px;padding:10px 12px}
  .chip .t{max-width:none;white-space:normal;line-height:1.25;font-size:12.5px}
  .hero h1{font-size:clamp(28px,8.5vw,36px);margin-bottom:10px;letter-spacing:-.04em}
  .hero p{
    font-size:13.5px;white-space:normal;max-width:min(34ch,92vw);
    line-height:1.45;margin-bottom:14px;padding:0 4px;
  }
  .hints{
    font-size:11px;gap:6px 10px;justify-content:center;
    flex-wrap:wrap;padding:0 4px;
  }
  .hints span{white-space:nowrap}
  /* Подпись НЕ прячем. Раньше на узком экране оставался один значок, и
     этого хватало; значок убран (просьба 05.09), и та же строка оставила
     бы пустую кнопку 12x12 — нажимать не на что и непонятно зачем.
     Пусть лучше подпись ужимается многоточием: max-width и
     text-overflow у .pill-diary уже заданы. */
  .pill-diary{padding:5px 10px;max-width:150px}
  .topbar-center{min-width:0}
  .bell .dot{top:5px;right:6px}
  .disclaimer{font-size:12px;padding:0 8px;line-height:1.35}
  .followups{gap:6px}
  .fu{padding:8px 12px;font-size:12.5px;min-height:40px}
  .metarow{gap:6px}
  .act button{width:36px;height:36px}
  .set-nav button{padding:10px 12px;font-size:12.5px;min-height:40px}
  .set-h{padding:14px 14px 12px}
  .set-h h2{font-size:15.5px}
  .tstats{grid-template-columns:1fr 1fr}
  .tcard-t{flex-wrap:wrap}
  .badge,.NEXT{/* noop */}
}

/* ── Узкий телефон ── */
@media(max-width:380px){
  .chips{grid-template-columns:1fr;gap:7px}
  .hero h1{font-size:26px}
  .hints span:last-child{display:none}
  .topbar-right{gap:4px}
  .nav-item{padding:10px 10px;font-size:13.5px}
  .btn-new{padding:11px 12px;font-size:13.5px}
  .composer{padding:5px 5px 5px 12px;border-radius:20px}
  .cbtn{width:38px;height:38px}
}

/* ── Landscape phone: не душить высоту ── */
@media(max-height:480px) and (orientation:landscape){
  .start{padding:8px 0 8px;justify-content:flex-start}
  .start-top{justify-content:flex-start;padding-bottom:6px;flex:0 0 auto}
  .hero h1{font-size:22px;margin-bottom:6px}
  .hero p{font-size:12.5px;margin-bottom:8px}
  .hints{display:none}
  .chips{margin-top:8px}
  .topbar{min-height:44px}
}

/* ═════════ Отклик на нажатие ═════════
   Подсветка обязана появляться в момент касания, а не после того, как
   действие отработало: как только между нажатием и откликом появляется
   задержка, ощущение прямого управления рушится. У .chip, .fu и .btn это
   было, у карточек, строк настроек и пунктов меню — нет.

   Отклик по заливке, а не по движению: он уже анимируется существующими
   transition этих элементов, ничего не переопределяем. Сжатие добавлено
   только там, где transform в transition уже объявлен. */
.menu button:active,.menu a:active,
.set-row:active,
.cat-chip:active,
.cat-line:active{background:var(--surface-3);transition-duration:.08s}

.tcard:active,.cat-stat:active{
  background:var(--surface-3);transform:scale(.98);transition-duration:.08s}

/* Карточка каталога нажимается за свою внутреннюю область .cat-card-hit;
   у неё самой transition нет, поэтому объявляем здесь — переопределять
   нечего. */
.cat-card-hit{transition:transform .08s var(--ease)}
.cat-card-hit:active{transform:scale(.985)}

/* У кнопки-переключателя вида и у самого переключателя transform в
   transition не объявлен — дописываем целиком, сохраняя то, что там уже
   анимировалось. */
.cat-view{transition:color var(--dur),background var(--dur),transform .08s var(--ease)}
.cat-view:active{transform:scale(.94)}
.sw{transition:background var(--dur),border-color var(--dur),transform .08s var(--ease)}
.sw:active{transform:scale(.96)}

.desk-a:active{opacity:.55}

/* Серый прямоугольник iOS гасим ровно там, где свой отклик теперь есть:
   у остального он остаётся единственной обратной связью на касание. */
.menu button,.menu a,.set-row,.cat-chip,.cat-line,.tcard,.cat-stat,
.cat-card-hit,.cat-view,.sw,.desk-a,.chip,.fu,.btn,.iconbtn,.nav-item,
.cbtn,.doc-btn,.pill-diary,.oauth-btn,.btn-new{
  -webkit-tap-highlight-color:transparent}

/* Пользователь просил систему не анимировать — гасим всё, кроме служебного
   мигания каретки, которое несёт смысл «ответ ещё пишется». */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important}
  .aurora{display:none}
  .caret{animation:none;opacity:1}
  .view{scroll-behavior:auto}
  /* Появление: страховка от «зависшей» прозрачности, если анимация с
     fill:both не успеет доиграть за обрезанные .01ms. */
  .chip,.hero h1,.hero p,.hero .hints,.msg,.stagger>*,.ev-arrive .ev-i,.ev-arrive sup.ref a{
    animation:none!important;filter:none!important;opacity:1!important;transform:none!important}
  /* Подъём при наведении — тоже движение. У правила не было тела вовсе:
     список селекторов обрывался запятой перед закрывающей скобкой, и
     блок был недействителен. */
  .chip:hover,.fu:hover,.tcard:hover,.cat-card:hover,.cat-stat:hover{
    transform:none!important}
}

/* OAuth buttons (palette-aligned) */
.oauth-btns{display:flex;flex-direction:column;gap:8px;margin-top:4px}
.oauth-btn{
  display:flex;align-items:center;justify-content:center;gap:10px;
  width:100%;padding:11px 14px;border-radius:12px;font-weight:650;font-size:13.5px;
  border:1px solid var(--line);background:var(--surface);color:var(--text);
  transition:transform var(--dur) var(--ease),box-shadow var(--dur),
    border-color var(--dur),background var(--dur),filter var(--dur);
}
.oauth-btn:hover{box-shadow:var(--sh-sm);border-color:var(--line-2);}
.oauth-btn:active{transform:translateY(0);transition-duration:.1s}
.oauth-btn .ob-ic{
  width:22px;height:22px;border-radius:6px;display:grid;place-items:center;
  font-size:11px;font-weight:800;color:#fff;flex-shrink:0;letter-spacing:-.02em
}
.oauth-btn.yandex .ob-ic{background:#fc3f1d}
.oauth-btn.vk .ob-ic{background:#0077ff}
.oauth-btn.demo{
  background:var(--brand-solid);color:var(--brand-solid-fg);border:none;
  box-shadow:var(--sh-sm);
}
.oauth-btn.demo:hover{filter:brightness(1.04)}
.oauth-btn:disabled{opacity:.55;pointer-events:none}
.oauth-note{font-size:12px;color:var(--text-3);line-height:1.45;margin-top:10px}
.oauth-sep{display:flex;align-items:center;gap:10px;margin:12px 0 2px;color:var(--text-3);font-size:11.5px}
.oauth-sep::before,.oauth-sep::after{content:"";flex:1;height:1px;background:var(--line)}

/* ═════════ Баннер cookies/152-ФЗ — левый нижний угол .main ═════════ */
/* Стоит над панелью ввода, а не поверх неё: в диалоге низ экрана занят
   полем, и плашка закрывала начало вопроса (на телефоне — почти всё поле).
   --dock-h = 0 на первом экране, там панели нет. Разбор 26.09. */
.consent-bar{
  position:absolute;left:12px;z-index:28;
  bottom:calc(max(12px,env(safe-area-inset-bottom)) + var(--dock-h,0px));
  width:min(240px,calc(100% - 24px));
  background:color-mix(in srgb,var(--surface) 92%,transparent);
  border:1px solid var(--line-2);border-radius:14px;
  box-shadow:var(--sh-md);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  padding:11px 12px 10px;
  opacity:0;visibility:hidden;pointer-events:none;transform:translateY(8px);
  transition:opacity .22s var(--ease-out),transform .26s var(--ease-out),visibility .22s;
}
.consent-bar.open{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0)}
.consent-bar h2{
  font-family:var(--display);font-size:12.5px;font-weight:650;letter-spacing:-.02em;
  line-height:1.25;margin:0 0 2px;color:var(--text)}
.consent-bar-sub{font-size:12px;line-height:1.35;color:var(--text-3);margin:0 0 9px}
.consent-bar-sub a{color:var(--accent);text-decoration:none;font-weight:550}
.consent-bar-sub a:hover{text-decoration:underline;text-underline-offset:2px}
.consent-bar-actions{display:flex;gap:6px}
.consent-bar-actions .btn{flex:1;padding:6px 8px;font-size:12px;border-radius:9px;
  display:inline-flex;align-items:center;justify-content:center}
@media(max-width:720px){
  .consent-bar{left:10px;width:min(228px,calc(100% - 20px))}
}

/* ═════════ Модалка регистрации/входа по email ═════════ */
.rmodal-bg{
  position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;
  z-index:96;background:rgba(8,12,20,.44);
  backdrop-filter:blur(10px) saturate(1.15);-webkit-backdrop-filter:blur(10px) saturate(1.15);
  display:grid;place-items:center;padding:24px 16px;box-sizing:border-box;
  opacity:0;pointer-events:none;transition:opacity var(--dur-med) var(--ease-out);
}
.rmodal-bg.on{opacity:1;pointer-events:auto}
.rmodal{
  width:min(408px,100%);max-height:min(92vh,760px);
  display:flex;flex-direction:column;
  background:var(--surface);border:1px solid var(--line-2);border-radius:22px;
  box-shadow:var(--sh-lg);overflow:hidden;
  transform:translateY(16px) scale(.98);
  transition:transform var(--dur-med) var(--ease-out);
}
.rmodal-bg.on .rmodal{transform:none}
.rmodal-h{
  display:flex;align-items:center;gap:12px;padding:18px 18px 4px;flex-shrink:0;
}
.rmodal-h .mark{
  width:34px;height:34px;border-radius:11px;flex-shrink:0;
  background:var(--msg-fill);border:var(--msg-border);
  display:grid;place-items:center;box-shadow:var(--sh-sm);
}
.rmodal-h .mark svg{width:16px;height:16px;stroke:var(--msg-text);fill:none;stroke-width:2.1}
.rmodal-h h2{font-family:var(--display);font-size:16.5px;font-weight:750;letter-spacing:-.02em}
.rmodal-h .rm-close{margin-left:auto;width:30px;height:30px;border-radius:50%;
  display:grid;place-items:center;color:var(--text-3);flex-shrink:0;
  transition:background var(--dur),color var(--dur)}
.rmodal-h .rm-close:hover{background:var(--ink-hover);color:var(--text)}
.rmodal-h .rm-close svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2}
.rmodal-body{padding:6px 18px 20px;overflow-y:auto}
.rmodal-body p.lead{font-size:12.5px;color:var(--text-2);line-height:1.5;margin-bottom:14px}
.rm-field{margin-bottom:11px}
.rm-field label{display:block;font-size:11.5px;font-weight:650;color:var(--text-2);
  margin-bottom:5px;letter-spacing:.01em}
.rm-field input,.rm-field select{
  width:100%;padding:10px 12px;border-radius:11px;font-size:13.5px;font-family:inherit;
  border:1px solid var(--line);background:var(--bg-secondary,var(--surface-2));color:var(--text);
  transition:border-color var(--dur),box-shadow var(--dur);
}
.rm-field input:focus,.rm-field select:focus{
  outline:none;border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft);
}
.rm-row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.rm-hint{font-size:12px;color:var(--text-3);margin-top:4px;line-height:1.4}
.rm-err{font-size:12px;color:#dc2626;margin-top:2px;min-height:0;display:none}
.rm-err.show{display:block}
.rm-submit{
  width:100%;padding:11.5px;border-radius:12px;font-weight:700;font-size:13.5px;
  background:var(--brand-solid);color:var(--brand-solid-fg);box-shadow:var(--sh-sm);margin-top:6px;
  transition:transform var(--dur) var(--ease),filter var(--dur),opacity var(--dur);
}
.rm-submit:hover{filter:brightness(1.03)}
.rm-submit:active{transform:translateY(0)}
.rm-submit:disabled{opacity:.6;pointer-events:none}
.rm-switch{text-align:center;font-size:12.5px;color:var(--text-3);margin-top:14px}
.rm-switch button{color:var(--accent);font-weight:650}
.rm-switch button:hover{text-decoration:underline}
.rm-code-row{display:flex;gap:7px;justify-content:center;margin:6px 0 4px}
.rm-code-row input{
  width:40px;height:48px;text-align:center;font-size:19px;font-weight:700;
  border-radius:10px;border:1px solid var(--line);background:var(--bg-secondary,var(--surface-2));
  color:var(--text);
}
.rm-code-row input:focus{outline:none;border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}
.rm-resend{text-align:center;font-size:12px;color:var(--text-3);margin-top:10px}
.rm-resend button{color:var(--accent);font-weight:600}
.rm-resend button:disabled{color:var(--text-3);pointer-events:none;font-weight:400}
.rm-ok{display:flex;flex-direction:column;align-items:center;text-align:center;padding:10px 0 6px;gap:10px}
.rm-ok .rm-ok-ic{width:52px;height:52px;border-radius:50%;background:var(--solid);
  display:grid;place-items:center;box-shadow:var(--sh-sm)}
.rm-ok .rm-ok-ic svg{width:24px;height:24px;stroke:#fff;fill:none;stroke-width:2.3}
.rm-ok h3{font-size:15px;font-weight:700}
.rm-ok p{font-size:12.5px;color:var(--text-2);line-height:1.5}
.rm-demo-code{
  margin-top:10px;padding:9px 12px;border-radius:10px;background:var(--accent-soft);
  border:1px dashed var(--accent-line);font-size:12px;color:var(--text-2);text-align:center;
}
.rm-demo-code b{color:var(--accent);font-variant-numeric:tabular-nums;letter-spacing:.06em}

/* ═════════ Вводный тур: прожектор + карточка «Далее» ═════════ */
/* Затемнение и вырез вокруг цели — одним элементом: box-shadow с
   огромным blur-radius заливает весь экран, кроме прямоугольника
   самого .tour-spot — классический трюк «прожектора» без масок и SVG. */
.tour-veil{position:fixed;inset:0;z-index:129;background:transparent;cursor:pointer}
.tour-spot{
  position:fixed;z-index:130;border-radius:14px;
  box-shadow:0 0 0 9999px rgba(6,10,18,.66);
  outline:2px solid var(--accent);outline-offset:3px;
  pointer-events:none;
  transition:top var(--dur-med) var(--ease-out),left var(--dur-med) var(--ease-out),
    width var(--dur-med) var(--ease-out),height var(--dur-med) var(--ease-out),opacity .18s;
  opacity:0;
}
.tour-spot.on{opacity:1}
.tour-card{
  position:fixed;z-index:131;width:min(300px,calc(100vw - 32px));
  background:var(--surface);border:1px solid var(--line-2);border-radius:16px;
  box-shadow:var(--sh-lg);padding:15px 17px 14px;
  opacity:0;transform:translateY(6px);pointer-events:none;
  transition:top var(--dur-med) var(--ease-out),left var(--dur-med) var(--ease-out),
    opacity .2s var(--ease-out),transform .2s var(--ease-out);
}
.tour-card.on{opacity:1;transform:none;pointer-events:auto}
.tour-card .tour-txt{font-size:13.5px;color:var(--text);line-height:1.5;margin-bottom:13px}
.tour-card .tour-row{display:flex;align-items:center;justify-content:space-between;gap:10px}
.tour-card .tour-dots{font-size:11.5px;color:var(--text-3);font-variant-numeric:tabular-nums}
.tour-card .tour-btns{display:flex;align-items:center;gap:12px}
.tour-skip{font-size:12.5px;color:var(--text-3);font-weight:600}
.tour-skip:hover{color:var(--text-2)}
.tour-next{
  padding:8px 15px;border-radius:10px;font-size:13px;font-weight:700;
  background:var(--brand-solid);color:var(--brand-solid-fg);box-shadow:var(--sh-sm);
  transition:transform var(--dur) var(--ease),filter var(--dur);
}
.tour-next:hover{filter:brightness(1.05)}
.menu,.set-panel,.sheet,.toast,.tobottom{
  backface-visibility:hidden;
}

/* ── Кабинет и каталог форм как страница, не модалка ── */
.app.page-mode .composer-wrap{display:none!important}
.app.page-mode .tobottom{display:none}
.app.cab-mode [data-tool="cabinet"],
.app.forms-mode [data-tool="forms"]{background:var(--accent-soft);color:var(--accent)}
@media (max-width:860px){
  .app.page-mode .chat-back{display:grid}
}

.cab-page{
  width:100%;max-width:1120px;margin:0 auto;
  padding:8px 0 48px;align-self:stretch;
}
.desk{display:flex;flex-direction:column;gap:16px}
.desk-top{
  display:flex;align-items:flex-end;justify-content:space-between;gap:16px;
}
.desk-titles h1{
  font-family:var(--display);font-size:22px;font-weight:750;letter-spacing:-.03em;margin:0;
}
.desk-titles p{margin:3px 0 0;font-size:13px;color:var(--text-3)}
.desk-search{display:flex;gap:8px;align-items:stretch;flex:0 1 420px}
.desk-inn{
  flex:1;min-width:0;padding:10px 12px;border-radius:12px;font-size:14px;
  color:var(--text);background:var(--surface);border:1px solid var(--line-2);
  font-variant-numeric:tabular-nums;letter-spacing:.03em;outline:none;
}
.desk-inn:focus,.desk-q:focus{border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}
.desk-q{
  flex:1;min-width:0;padding:10px 12px;border-radius:12px;font-size:14px;
  color:var(--text);background:var(--surface);border:1px solid var(--line-2);outline:none;
}
.desk-chips{display:flex;flex-wrap:wrap;gap:6px}
.desk-out{display:flex;flex-direction:column;gap:14px}

.desk-cards,.desk-mosaic{display:flex;flex-wrap:wrap;gap:14px;align-items:stretch}
.desk-mosaic > .desk-card{flex:1 1 260px;max-width:100%;position:relative;min-width:min(100%,240px)}
.desk-mosaic > .desk-wide{flex:1 1 100%}
.desk-mosaic.reordering{user-select:none}
.desk-card.dragging{z-index:24;opacity:.94;box-shadow:var(--sh-md);cursor:grabbing;
  will-change:transform}
.desk-card.drop-target{box-shadow:0 0 0 2px var(--accent)}
.desk-drag{
  position:absolute;top:10px;right:10px;z-index:2;
  width:28px;height:28px;border-radius:8px;border:1px solid transparent;
  background:transparent;color:var(--text-3);display:grid;place-items:center;
  cursor:grab;opacity:0;
  /* Жест наш, прокрутка тут не начинается: без этого браузер на телефоне
     сперва пробует прокрутить, и указатель успевает оборваться раньше,
     чем сработает preventDefault за порогом в 6px. */
  touch-action:none;
  transition:opacity var(--dur),background var(--dur),border-color var(--dur);
}
.desk-card:hover .desk-drag,.desk-drag:focus-visible{opacity:1}
.desk-drag:hover{background:var(--ink-hover);border-color:var(--line);color:var(--text-2)}
.desk-drag:active{cursor:grabbing}
.desk-drag svg{width:14px;height:14px}
.desk-cal>.desk-drag{display:none}
.desk-org h2,.desk-here .desk-here-k,.desk-board .desk-tabs{padding-right:36px}

.desk-card{
  padding:18px 18px 16px;border-radius:18px;
  background:var(--surface);border:1px solid var(--line);
  box-shadow:var(--sh-sm);
}
.desk-card:not(.desk-cal){
  display:flex;flex-direction:column;min-height:268px;
}
.desk-board{min-height:0}
.desk-card.desk-wide{min-height:0}
.desk-card:not(.desk-cal) .desk-cta,
.desk-card:not(.desk-cal)>.desk-badge{margin-top:auto}
.desk-badge{
  display:inline-flex;align-self:flex-start;width:fit-content;max-width:100%;
  padding:4px 10px;border-radius:999px;font-size:11px;font-weight:650;
  color:var(--text-3);background:var(--surface-3);margin-top:12px;
}
.desk-badge.on{color:var(--ok);background:var(--ok-soft)}
.desk-org{background:var(--surface)}
.desk-card h2{
  font-family:var(--display);font-size:22px;font-weight:750;letter-spacing:-.03em;
  line-height:1.2;margin:0 0 6px;
}
.desk-legal{margin:0 0 10px;font-size:13px;color:var(--text-3);line-height:1.4}
.desk-kvs{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 8px}
.desk-kv{
  display:inline-flex;align-items:baseline;gap:6px;padding:5px 9px;
  border-radius:999px;border:1px solid var(--line);background:var(--surface-2);
  color:var(--text);font-size:12.5px;cursor:pointer;
}
.desk-kv:hover{border-color:var(--accent-line);color:var(--accent)}
.desk-kv i{font-style:normal;font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--text-3);font-weight:700}
.desk-kv b{font-weight:650;font-variant-numeric:tabular-nums}
.desk-place{margin:8px 0 0;font-size:13px;color:var(--text-2)}
.desk-note{margin:8px 0 0;font-size:12.5px;color:var(--text-3);line-height:1.45}

/* 27.09: радиальные бирюзовые/зелёные подложки карточек сняты — Kimi-
   поверхность одна: белая бумага и волосная рамка. */
.desk-next{background:var(--surface)}
.desk-here-k{display:block;margin:0 0 10px;font-size:13px;font-weight:500;color:var(--text-3)}
.desk-when{display:flex;align-items:center;gap:14px;margin-bottom:10px}
.desk-mark{display:flex;align-items:center;gap:10px}
/* Значок календаря — маской, цвет от темы (был жёстко красный на розовом). */
.desk-mark-ic{
  width:36px;height:36px;border-radius:11px;flex-shrink:0;position:relative;
  background:var(--surface-3);
}
.desk-mark-ic::before{
  content:"";position:absolute;inset:0;background:var(--text);
  -webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='5' width='18' height='16' rx='2.5'/><path d='M16 3v4M8 3v4M3 11h18'/></svg>") center/18px no-repeat;
          mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='5' width='18' height='16' rx='2.5'/><path d='M16 3v4M8 3v4M3 11h18'/></svg>") center/18px no-repeat;
}
.desk-num b{
  display:block;font-family:var(--display);font-size:36px;font-weight:750;
  letter-spacing:-.05em;line-height:.9;color:var(--text);
}
.desk-num i{display:block;font-style:normal;font-size:12px;color:var(--text-3);text-transform:lowercase}
.desk-wait span{display:block;font-size:12px;color:var(--text-3);margin-bottom:2px}
.desk-wait strong{display:block;font-size:15px;font-weight:700}
.desk-lead{margin:8px 0 0;font-size:14px;font-weight:750}
.desk-lead-n{margin:2px 0 0;font-size:13px;color:var(--text-2)}
.desk-cta{display:flex;flex-wrap:wrap;gap:8px;padding-top:14px}
.desk-cta .btn{text-decoration:none}

/* Размеры сетки завязаны друг на друга: круг дня, минимальная высота
   ячейки, ряд дней недели и общая высота карточки растут вместе. Порознь
   их не поднять — либо цифры обрежутся кругом, либо строки съедут вниз
   и упрутся в подписи под сеткой. Замер 05.09 по жалобе «слишком мелко». */
.desk-cal{
  /* min-height, а не height: без выбранного дня подсказка пуста и её
     44px не нужны — карточка держится на содержимом (~280px), а не на
     заранее зарезервированном месте. Растёт сама, если пользователь
     выберет день с формами — подсказка вернёт себе место. */
  flex:0 0 300px;width:300px;min-height:280px;max-width:100%;
  padding:14px 14px 10px;display:flex;flex-direction:column;box-sizing:border-box;
}
.desk-cal-top{
  display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-shrink:0;
}
.desk-cal-top b{font-family:var(--display);font-size:15px;font-weight:750;letter-spacing:-.02em;text-transform:capitalize}
.desk-cal-nav{
  width:28px;height:28px;border-radius:8px;border:1px solid var(--line);
  background:var(--surface-2);color:var(--text);font-size:17px;line-height:1;
}
.desk-cal-nav:hover{border-color:var(--accent-line);color:var(--accent)}
.desk-cal-g{display:grid;grid-template-columns:repeat(7,1fr);grid-template-rows:18px repeat(6,1fr);gap:3px;flex:1;min-height:0}
.desk-cal-dow{
  text-align:center;font-size:11px;font-weight:700;letter-spacing:.03em;
  text-transform:uppercase;color:var(--text-3);padding:0;align-self:end;
}
.desk-cal-x,.desk-cal-d{min-height:32px}
.desk-cal-d{
  display:grid;place-items:center;padding:0;border:0;background:transparent;
  color:var(--text-2);
}
.desk-cal-d:disabled{cursor:default;color:var(--text-3)}
.desk-cal-n{
  width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
  font-size:13px;font-weight:650;font-variant-numeric:tabular-nums;
}
.desk-cal-d.hit .desk-cal-n{background:var(--accent);color:var(--solid-fg);font-weight:650}
:root[data-theme="light"] .desk-cal-d.hit .desk-cal-n{color:#fff}
.desk-cal-d.hit.past .desk-cal-n{
  background:color-mix(in srgb, var(--accent) 22%, var(--surface));
  color:var(--accent);box-shadow:none;font-weight:700;
}
.desk-cal-d.hit.soon .desk-cal-n{background:var(--danger-solid);color:#fff}
.desk-cal-d.today .desk-cal-n{
  /* Сегодня — нейтральная обводка без акцентного цвета: день виден
     в любой теме, но не спорит с заливкой срочных дат. */
  box-shadow:inset 0 0 0 1.5px var(--text-3);
}
.desk-cal-d.hit:hover .desk-cal-n{filter:brightness(1.06)}
.desk-cal-d.on .desk-cal-n{box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--accent)}
.desk-cal-leg{
  margin:6px 0 0;font-size:11px;color:var(--text-2);line-height:1.3;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0;
}
.wave-chip{
  padding:4px 9px;border-radius:999px;border:1px solid var(--line);
  background:var(--surface);font-size:12px;font-weight:650;color:var(--text);
}
.wave-chip:hover{border-color:var(--accent-line);color:var(--accent)}
.desk-cal-pick{
  height:36px;margin-top:8px;display:flex;flex-wrap:nowrap;align-items:center;gap:6px;
  overflow:hidden;flex-shrink:0;
}
/* Слот пуст, пока не выбрали день с подсказкой, — и тогда не должен
   занимать место. Иначе карточка держит 44px мёртвого поля постоянно,
   а align-items:stretch разносит эту пустоту на соседей в ряду. */
.desk-cal-pick:empty{height:0;margin-top:0}
.desk-cal-pick .quiet{font-size:11.5px;color:var(--text-3)}

.desk-tip{
  position:fixed;z-index:120;min-width:220px;max-width:300px;
  padding:12px 14px 12px;border-radius:14px;
  background:var(--surface);border:1px solid var(--line-2);
  box-shadow:var(--sh-md);pointer-events:none;
}
.desk-tip-d{
  display:block;font-size:11px;font-weight:750;letter-spacing:.06em;
  text-transform:uppercase;color:var(--text-3);margin-bottom:8px;
}
.desk-tip-r + .desk-tip-r{margin-top:8px}
.desk-tip-r b{display:block;font-size:15px;font-weight:750;letter-spacing:-.02em}
.desk-tip-r span{display:block;margin-top:2px;font-size:13px;line-height:1.35;color:var(--text-2)}

.desk-tabs{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:8px}
.desk-tab{
  padding:6px 10px;border-radius:999px;border:0;background:transparent;
  font-size:13.5px;font-weight:600;color:var(--text-2);
}
.desk-tab em{font-style:normal;font-size:12px;color:var(--text-3);font-weight:700}
.desk-tab.on{background:var(--surface-3);color:var(--text)}
.desk-tab.on em{color:var(--accent)}
/* Кнопок здесь стало две («В мой календарь» и «Пакет для сдачи»), и при
   display:block они слипались боками. Промежуток и перенос — чтобы на
   узкой полосе вторая уходила на строку ниже, а не выдавливала табы. */
.desk-extra{margin-left:auto;display:flex;flex-wrap:wrap;gap:6px}
.desk-ghost{
  padding:6px 10px;border-radius:10px;border:1px solid var(--line);
  background:var(--surface);font-size:12.5px;color:var(--text-2);
}

.desk-table{
  display:table;width:100%;table-layout:fixed;
  border-collapse:collapse;border-radius:12px;overflow:hidden;
}
.desk-tr{display:table-row}
.desk-tr > *{
  display:table-cell;vertical-align:top;text-align:left;
  padding:7px 10px;border-top:1px solid var(--line);
}
.desk-tr.head > *{border-top:0;white-space:normal}
.desk-tr.head span{font-size:13.5px;color:var(--text-3);font-weight:700;line-height:1.25}
.desk-c1,.desk-tr.head > :nth-child(1){width:13rem}
.desk-c1{white-space:normal;overflow:hidden;word-break:break-word}
.desk-c1 b{
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  font-size:14.5px;font-weight:750;letter-spacing:-.02em;line-height:1.2;
}
.desk-c2,.desk-c3,.desk-c4{overflow:hidden}
.desk-c1 i{
  display:block;margin-top:2px;font-style:normal;font-size:11.5px;color:var(--text-3);line-height:1.3;
}
.desk-c2,.desk-tr.head > :nth-child(2){width:auto}
.desk-c2 p{
  margin:0;font-size:13.5px;line-height:1.35;color:var(--text);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.desk-links{display:flex;flex-wrap:wrap;gap:12px;margin-top:6px}
.desk-a{
  padding:0;border:0;background:none;color:var(--accent);font-size:13px;font-weight:600;
  text-decoration:none;cursor:pointer;
}
.desk-a:hover{text-decoration:underline}
.desk-c2 .desk-a{display:inline-block;margin-top:5px}
.desk-fill{
  display:inline;margin-top:5px;padding:0;border:0;background:none;
  color:var(--accent);font-size:13px;font-weight:600;line-height:1.3;
  cursor:pointer;text-decoration:none;
}
.desk-fill:hover{text-decoration:underline;filter:none;color:var(--accent)}
.desk-c3,.desk-tr.head > :nth-child(3){width:8.75rem;white-space:nowrap}
.desk-c4,.desk-tr.head > :nth-child(4){width:11.25rem;text-align:left}
.desk-per{
  display:inline-flex;align-items:center;max-width:100%;
  padding:4px 10px;border-radius:999px;
  font-size:13px;font-weight:750;line-height:1.25;letter-spacing:.01em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
/* Периодичность — свойство формы, а не её состояние. Красная «Месячная»
   читалась как «просрочено» (повторный разбор 26.09): цвета --danger/--warn/
   --ok остаются только сроку. Классы .month/.quarter/.year не красятся. */
.desk-per{color:var(--text-2);background:var(--surface-3)}
.desk-left{display:block;font-size:13px;font-weight:750;color:var(--text-2);line-height:1.25}
.desk-left.mid{color:var(--warn)}
.desk-left.hot{color:var(--danger)}
.desk-c4 span{
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  margin-top:2px;font-size:12px;color:var(--text-3);line-height:1.3;
}

.desk-empty{padding:22px 8px}
.desk-empty b{display:block;font-size:15px}
.desk-empty p{margin:6px 0 12px;color:var(--text-2);font-size:13.5px}
.desk-foot p{font-size:12.5px;color:var(--text-3);line-height:1.5;margin:0 0 8px}
.desk-foot-l{display:flex;flex-wrap:wrap;gap:14px}

.desk-g-row{
  display:flex;align-items:baseline;gap:8px;padding:8px 8px 5px;
  font-size:13px;font-weight:750;letter-spacing:.04em;text-transform:uppercase;
  color:var(--text-3);background:var(--surface-2);border-top:1px solid var(--line);
}
.desk-g-row em{font-style:normal;font-size:13.5px;font-weight:700}
.cat-table{overflow:visible}
.cat-row .cat-more{
  padding:12px 16px 16px;border-top:0;
  background:color-mix(in srgb,var(--accent) 3%,var(--surface));
}
.cat-row .cat-more-title{display:none}
.cat-k{
  display:block;margin-top:8px;font-style:normal;font-size:11px;font-weight:750;
  letter-spacing:.04em;text-transform:uppercase;color:var(--text-3);
}
.cat-more p{margin:3px 0 0;font-size:13.5px;line-height:1.45;color:var(--text)}
.cat-more-acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.cat-more-acts .desk-a{margin-top:0}

/* ── Каталог: отрасли, плитки, карточки ── */
.cat-desk{gap:14px}
.cat-topics{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.cat-chip{
  display:inline-flex;align-items:center;gap:7px;
  padding:8px 13px;border-radius:999px;
  border:1px solid var(--line);background:var(--surface);
  color:var(--text-2);font-size:13px;font-weight:600;line-height:1.2;
  box-shadow:var(--sh-sm);
  transition:border-color var(--dur),color var(--dur),background var(--dur),box-shadow var(--dur);
}
.cat-chip svg{width:15px;height:15px;flex-shrink:0}
.cat-chip:hover{border-color:var(--accent-line);color:var(--accent)}
.cat-chip.on{
  background:var(--accent-soft);border-color:transparent;color:var(--accent);
  box-shadow:none;
}
.cat-chip.on:hover{color:var(--accent);background:color-mix(in srgb,var(--c-blue) 18%,var(--surface))}
.cat-chip:focus-visible,.cat-stat:focus-visible,.cat-view:focus-visible,
.cat-star:focus-visible,.cat-pin:focus-visible,.cat-sort:focus-visible,
.cat-card-hit:focus-visible,.cat-line:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px;
}
.cat-more-wrap{position:relative}
.cat-chip-more svg{width:14px;height:14px}
.cat-dd{
  position:absolute;z-index:20;top:calc(100% + 6px);left:0;min-width:240px;
  padding:6px;border-radius:14px;background:var(--surface);
  border:1px solid var(--line-2);box-shadow:var(--sh-md);
}
.cat-dd-i{
  display:flex;align-items:center;gap:8px;width:100%;
  padding:8px 10px;border:0;border-radius:10px;background:transparent;
  color:var(--text);font-size:13.5px;font-weight:600;text-align:left;
}
.cat-dd-i svg{width:15px;height:15px;color:var(--text-3)}
.cat-dd-i:hover{background:var(--accent-soft);color:var(--accent)}
.cat-dd-i.on{background:var(--accent-soft);color:var(--accent)}

.cat-stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}
.cat-stat{
  position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:2px;
  padding:12px 44px 10px 14px;min-height:0;border-radius:16px;
  border:1px solid var(--line);background:var(--surface);box-shadow:var(--sh-sm);
  text-align:left;color:var(--text);
  transition:border-color var(--dur),box-shadow var(--dur),transform var(--dur) var(--ease);
}
.cat-stat:hover{border-color:var(--accent-line);box-shadow:var(--sh)}
.cat-stat.on{
  border-color:var(--accent);
  box-shadow:0 0 0 3px var(--accent-soft),var(--sh);
  background:
    radial-gradient(120% 140% at 100% 0%, rgba(8,96,168,.10), transparent 55%),
    var(--surface);
}
.cat-stat b{
  font-family:var(--display);font-size:28px;font-weight:750;
  letter-spacing:-.04em;line-height:1;font-variant-numeric:tabular-nums;
}
.cat-stat i{font-style:normal;font-size:12.5px;color:var(--text-3);font-weight:600}
.cat-stat-ic{
  position:absolute;top:12px;right:12px;width:32px;height:32px;border-radius:10px;
  display:grid;place-items:center;
  background:var(--brand-solid);color:var(--brand-solid-fg);
}
.cat-stat-ic svg{width:16px;height:16px}

.cat-bar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
}
.cat-bar-l{font-size:13.5px;color:var(--text-2);font-weight:600}
.cat-bar-r{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cat-pin{
  padding:7px 11px;border-radius:10px;border:1px solid var(--line);
  background:var(--surface);color:var(--text-2);font-size:12.5px;font-weight:650;
}
.cat-pin:hover{border-color:var(--accent-line);color:var(--accent)}
.cat-pin.on{background:var(--warn-soft);border-color:var(--warn-line);color:var(--warn)}
.cat-sort-lab{
  display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;
  letter-spacing:.02em;text-transform:uppercase;color:var(--text-3);
}
.cat-sort{
  padding:7px 10px;border-radius:10px;border:1px solid var(--line);
  background:var(--surface);color:var(--text);font-size:13px;font-weight:600;
}
.cat-views{display:flex;padding:3px;border-radius:12px;background:var(--surface-3);border:1px solid var(--line)}
.cat-view{
  width:34px;height:30px;border:0;border-radius:9px;background:transparent;color:var(--text-3);
  display:grid;place-items:center;
}
.cat-view svg{width:15px;height:15px}
.cat-view.on{background:var(--surface);color:var(--accent);box-shadow:var(--sh-sm)}
.cat-view:hover{color:var(--accent)}

.cat-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;isolation:isolate}
.cat-card{
  position:relative;display:flex;flex-direction:column;min-width:0;
  border-radius:16px;border:1px solid var(--line);
  box-shadow:var(--sh-sm);overflow:visible;
  /* Бумага, без градиентной заливки по периодичности: карточки каталога —
     справка, а не панель показателей (повторный разбор 26.09). */
  background:var(--surface);
  width:100%;
  transition:transform .32s var(--ease-out),box-shadow .32s var(--ease-out),
    border-color .28s,opacity .32s,filter .32s,border-radius .28s,
    width .36s var(--ease-out),margin-left .36s var(--ease-out);
}
.cat-card:hover{box-shadow:var(--sh);border-color:var(--accent-line)}
.cat-card-hit{
  position:relative;display:flex;flex-direction:column;gap:10px;
  padding:14px 16px;min-height:198px;cursor:pointer;
}
.cat-card-h{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cat-star{
  width:30px;height:30px;border:0;border-radius:9px;background:transparent;
  color:var(--text-3);font-size:16px;line-height:1;
}
.cat-star:hover{background:var(--surface-3);color:var(--warn)}
.cat-star.on{color:var(--warn)}
.cat-card-id{display:flex;align-items:center;gap:10px;min-width:0}
.cat-mark{
  width:36px;height:36px;border-radius:11px;flex-shrink:0;
  display:grid;place-items:center;color:var(--accent);background:var(--accent-soft);
}
.cat-mark svg{width:17px;height:17px}
.cat-card-id b{
  display:block;font-family:var(--display);font-size:16px;font-weight:750;
  letter-spacing:-.03em;line-height:1.2;
}
.cat-card-id i{display:block;font-style:normal;font-size:11.5px;color:var(--text-3);margin-top:1px}
.cat-card-n{
  margin:0;font-size:13.5px;line-height:1.4;color:var(--text);min-height:3.8em;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
}
.cat-card-due{
  margin-top:auto;font-size:12.5px;color:var(--text-2);line-height:1.35;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.cat-card-f{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cat-card-f .desk-a{margin-top:0}
.cat-chev{width:18px;height:18px;color:var(--text-3);display:grid;place-items:center;flex-shrink:0;transition:transform .28s var(--ease-out)}
.cat-chev svg{width:16px;height:16px}
.cat-card .cat-more{
  margin:0;padding:14px 18px 18px;
  opacity:0;transform:translateY(14px);
  filter:blur(5px);
  transition:opacity .2s var(--ease-out),transform .2s var(--ease-out),filter .2s var(--ease-out);
}
.cat-more-title{
  margin:0 0 12px;font-family:var(--display);font-size:15.5px;font-weight:750;
  letter-spacing:-.03em;line-height:1.3;color:var(--text);
}
.cat-more-dl{display:flex;flex-direction:column;gap:10px}
.cat-more-row b{
  display:block;margin-bottom:4px;font-size:11px;font-weight:750;
  letter-spacing:.04em;text-transform:uppercase;color:var(--text-3);
}
.cat-more-ul{margin:0;padding:0 0 0 1.15em;font-size:13.5px;line-height:1.45;color:var(--text)}
.cat-more-ul li + li{margin-top:4px}
.cat-more-acts{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px;align-items:center}
.cat-more-acts .btn{margin:0}

.cat-lines{
  display:flex;flex-direction:column;border-radius:16px;overflow:hidden;
  background:var(--surface);border:1px solid var(--line);box-shadow:var(--sh-sm);
}
.cat-line{
  display:grid;grid-template-columns:32px 36px minmax(11rem,14rem) minmax(0,1.35fr) max-content minmax(8.5rem,.7fr) 22px;
  gap:10px;align-items:start;padding:12px 14px;
  border-top:1px solid var(--line);cursor:pointer;
}
.cat-row:first-child .cat-line{border-top:0}
.cat-line:hover{background:var(--ink-hover)}
.cat-line .desk-c1{
  width:auto;white-space:normal;min-width:0;overflow:hidden;
}
.cat-line .desk-c1 b{
  font-size:13.5px;line-height:1.25;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.cat-line .desk-c1 i{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cat-line .desk-c2,.cat-line .desk-c3,.cat-line .desk-c4{min-width:0;overflow:hidden}
.cat-line .desk-a{margin-top:4px}
.cat-line .desk-c2 p{
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}

.cat-find{
  display:flex;align-items:stretch;gap:10px;
  padding:14px;border-radius:16px;
  background:var(--surface);border:1px solid var(--line);box-shadow:var(--sh-sm);
}
.cat-find-q{
  flex:1;min-width:0;padding:12px 16px;border-radius:12px;font-size:15px;
  color:var(--text);background:var(--surface-2);border:1px solid var(--line-2);outline:none;
}
.cat-find-q:focus{border-color:var(--accent-line);background:var(--surface);box-shadow:0 0 0 3px var(--accent-soft)}
.cat-find .btn{padding:0 22px;border-radius:12px;font-size:14.5px}

@media (max-width:1100px){
  .cat-stats{grid-template-columns:repeat(3,minmax(0,1fr))}
  .cat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:700px){
  .cat-topics{flex-wrap:nowrap;overflow-x:auto;padding-bottom:2px;-webkit-overflow-scrolling:touch}
  .cat-chip{flex-shrink:0}
  .cat-stats{grid-template-columns:1fr 1fr}
  .cat-stat:first-child{grid-column:1/-1}
  .cat-grid{grid-template-columns:1fr}
.cat-line{grid-template-columns:32px minmax(0,1fr) auto;row-gap:6px}
  .cat-line .cat-mark,.cat-line .desk-c3,.cat-line .cat-chev{display:none}
  .cat-line .desk-c4{grid-column:1/-1}
  .cat-find{flex-direction:column}
  .cat-find .btn{min-height:44px}
}

@media (max-width:1100px){
  .desk-mosaic > .desk-card{flex-basis:calc(50% - 7px)}
  .desk-mosaic > .desk-wide{flex-basis:100%}
}
@media (max-width:860px){
  .desk-top{flex-direction:column;align-items:stretch}
  .desk-search{flex:1;max-width:none}
  .desk-mosaic > .desk-card{flex-basis:100%}
  .desk-card:not(.desk-cal){min-height:0}
  /* min-height, не height — см. базовое правило .desk-cal и комментарий
     там: пустой слот подсказки не должен резервировать место. */
  .desk-cal{width:100%;max-width:320px;min-height:280px;margin:0 auto}
  .desk-out{overflow-x:auto}
  .desk-extra{margin-left:0;width:100%}
  .wave-h{flex-direction:column;align-items:flex-start;gap:4px}
  .wave-h span{white-space:normal}
}

/* ── Карточка формы каталога: модальное окно ──
   Раньше форма раскрывалась прямо в списке. Два неудобства: соседние
   строки уезжали вниз при каждом клике, а на формах с длинным критерием
   респондента (у П-4 он на полстраницы) раскрытая карточка не помещалась
   на экран целиком, и её приходилось доскролливать вслепую.

   Ширина 620px против 408px у диалога регистрации: здесь не форма ввода
   в одну колонку, а справочная карточка со списками. Скролл внутри тела,
   а не всей модалки, — шапка с кодом формы остаётся на месте. */
.catmodal-bg{
  position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;
  z-index:96;background:rgba(8,12,20,.44);
  backdrop-filter:blur(10px) saturate(1.15);-webkit-backdrop-filter:blur(10px) saturate(1.15);
  display:grid;place-items:center;padding:24px 16px;box-sizing:border-box;
  opacity:0;pointer-events:none;transition:opacity var(--dur-med) var(--ease-out);
}
.catmodal-bg.on{opacity:1;pointer-events:auto}
.catmodal{
  width:min(620px,100%);max-height:min(92vh,780px);
  display:flex;flex-direction:column;
  background:var(--surface);border:1px solid var(--line-2);border-radius:22px;
  box-shadow:var(--sh-lg);overflow:hidden;
  transform:translateY(16px) scale(.98);
  transition:transform var(--dur-med) var(--ease-out);
}
.catmodal-bg.on .catmodal{transform:none}
.catmodal-h{
  display:flex;align-items:flex-start;gap:12px;
  padding:18px 18px 14px;flex-shrink:0;
  border-bottom:1px solid var(--line);
}
.catmodal-h .mark{
  width:34px;height:34px;border-radius:11px;flex-shrink:0;margin-top:1px;
  background:var(--msg-fill);border:var(--msg-border);
  display:grid;place-items:center;box-shadow:var(--sh-sm);
}
.catmodal-h .mark svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.catmodal-t{min-width:0;flex:1}
/* Код формы — то, по чему её узнают, поэтому он крупнее названия. */
.catmodal-t b{
  display:block;font-family:var(--display);font-size:17px;font-weight:750;
  letter-spacing:-.03em;color:var(--text);
}
.catmodal-t h2{
  margin:2px 0 0;font-size:13px;font-weight:450;line-height:1.35;
  color:var(--text-2);letter-spacing:0;
}
.catmodal-h .rm-close{
  margin-left:auto;width:30px;height:30px;border-radius:50%;flex-shrink:0;
  border:0;background:transparent;color:var(--text-3);cursor:pointer;
  display:grid;place-items:center;transition:background .18s,color .18s;
}
.catmodal-h .rm-close:hover{background:var(--ink-hover);color:var(--text)}
.catmodal-h .rm-close svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2}
.catmodal-body{
  padding:16px 18px 20px;overflow-y:auto;overscroll-behavior:contain;
}
/* Действия — первым делом, до справочных списков: за «помочь с
   заполнением» и приходят, а листать до них через критерий респондента
   на полстраницы человек не должен. */
.catmodal-body .cat-more-acts{margin:0 0 16px}
.catmodal-body .cat-more-title{display:none}

@media (max-width:560px){
  .catmodal-bg{padding:0}
  .catmodal{
    width:100%;max-width:100%;max-height:100%;height:100%;
    border-radius:0;border:0;
  }
}

/* Срок, который может сдвинуться после публикации календаря переносов.
   Отличаем начертанием, а не цветом: цвет в этом столбце уже занят
   срочностью, и второй смысл на том же канале читаться не будет. */
.due-approx{font-style:italic;opacity:.85}
.due-approx::after{content:'\00a0~';opacity:.6}

/* ─────────────────────────────────────────────────────────────────────
   Замеры браузером, а не на глаз (правила Vercel Web Interface
   Guidelines, разделы Performance и Touch & Interaction).
   ───────────────────────────────────────────────────────────────────── */

/* Каталог рисует 203 карточки разом, около 4750 узлов на странице —
   вчетверо выше порога в 50 элементов, после которого правила советуют
   виртуализировать.

   Пробовал content-visibility:auto с contain-intrinsic-size — браузер
   сам пропускал бы вёрстку карточек за экраном. Замер не подтвердил
   пользы: медиана принудительной перевёрстки 0.1 мс что с правилом, что
   без. Зато высота страницы разошлась на 190 px — резерв высоты не
   совпадает с настоящей, и полоса прокрутки меняет длину по мере
   пролистывания. Менять точную вёрстку на неизмеримый выигрыш нельзя,
   поэтому правило снято, а наблюдение осталось здесь.

   Если каталог дорастёт до тысяч карточек и торможение станет заметно —
   возвращаться сюда, но уже с профилировщиком, а не с догадкой. */

/* Двойное касание на телефоне масштабирует страницу, и браузер ждёт
   ~300 мс, прежде чем признать первое касание нажатием. manipulation
   говорит: жесты прокрутки и щипка оставь, двойное касание для зума —
   нет. Масштабирование при этом не запрещено: щипок работает, а
   user-scalable=no в проекте нет и не будет.

   Пишем на интерактивных элементах, а не на body: на body это отняло бы
   двойное касание и у текста, где оно иногда выделяет слово. */
button,
a,
select,
summary,
label,
[role="button"],
[role="tab"],
[role="switch"]{touch-action:manipulation}

/* Форма, которую сдают только при наличии события (1-ПР, 3-Ф).
   Пометка спокойная, не тревожная: это не предупреждение об опасности,
   а снятие лишней работы. */
.desk-cond{display:inline-block;margin:2px 0 0;padding:1px 7px;
  font-size:11px;line-height:1.5;border-radius:999px;
  color:var(--text-2);background:var(--surface-2);
  border:1px solid var(--line)}
.desk-cond-why{margin:3px 0 0;font-size:11.5px;line-height:1.45;
  color:var(--text-2)}

/* Явная настройка «Меньше движения»: те же правила, что у системного
   @media(prefers-reduced-motion), но по классу на html. Медиаблок выше не
   трогаем — он страхует, когда настройку не выбирали вовсе. */
html.no-motion *,html.no-motion *::before,html.no-motion *::after{
  animation-duration:.01ms!important;animation-iteration-count:1!important;
  transition-duration:.01ms!important}
html.no-motion .aurora{display:none}
html.no-motion .caret{animation:none;opacity:1}
html.no-motion .view{scroll-behavior:auto}
html.no-motion .chip,html.no-motion .hero h1,html.no-motion .hero p,
html.no-motion .hero .hints,html.no-motion .msg,html.no-motion .stagger>*,
html.no-motion .ev-arrive .ev-i,html.no-motion .ev-arrive sup.ref a{
  animation:none!important;filter:none!important;opacity:1!important;transform:none!important}
html.no-motion .chip:hover,html.no-motion .fu:hover,html.no-motion .tcard:hover,
html.no-motion .cat-card:hover,html.no-motion .cat-stat:hover{
  transform:none!important}

/* Closed panels must not take keyboard focus, including before JS starts. */
.set-bg:not(.on), .pal-bg:not(.on), .sheet-bg:not(.on),
.rmodal-bg:not(.on), .catmodal-bg:not(.on), .menu:not(.on),
.tobottom:not(.on) { visibility:hidden; }
.answer-status { padding:12px 0; color:var(--text-2); }
.answer-status p { margin:0 0 10px; }
.cat-card .retired,.cat-line .retired,.retired-note{color:var(--danger);font-weight:700}
.cat-card .retired-deadline,.cat-line .retired-deadline{color:var(--text-3);text-decoration:line-through}
.retired-note{margin:.5rem 0;padding:.45rem .65rem;border-radius:.5rem;background:color-mix(in srgb,var(--danger) 9%,transparent)}

/* Calm workspace: shared shell, home, conversation and tool surfaces. */
:root{--side-w:260px;--r:14px;--dur:.18s}
:root[data-theme="light"]{--bg:#faf9f8;--surface:#fff;--surface-2:#f7f7f6;--surface-3:#f0f0ef;--text:#171717;--text-2:#535353;--text-3:#707070;--line:#e9e8e6;--line-2:#d9d8d6;--solid:#171717;--solid-fg:#fff;--accent:#1d64c8;--accent-soft:#edf4ff;--accent-line:#c9defb;--msg-fill:#edf4ff;--msg-border:0;--brand-solid:#f0f0ef;--brand-solid-fg:#171717}
:root[data-theme="dark"]{--bg:#151515;--surface:#1d1d1d;--surface-2:#252525;--surface-3:#303030;--text:#f2f2f2;--text-2:#c0c0c0;--text-3:#a0a0a0;--line:#303030;--line-2:#434343;--solid:#ededed;--solid-fg:#171717;--accent:#8ebaff;--accent-soft:#263246;--accent-line:#435f87;--msg-fill:#263246;--msg-border:0;--brand-solid:#303030;--brand-solid-fg:#ededed}
.app{padding:10px 10px 10px 0;gap:0;background:var(--bg)}
.sidebar{background:var(--bg);border:0;backdrop-filter:none;-webkit-backdrop-filter:none;padding:14px 12px 12px;transition:transform .24s var(--ease-out)}
.sb-top{min-height:42px;margin-bottom:20px;padding:0 8px}
.brand-name{font-size:16px;letter-spacing:-.025em}
.brand-name b,.hero h1 em{background:none;color:var(--text);-webkit-text-fill-color:currentColor}
.btn-new{justify-content:flex-start;gap:10px;min-height:46px;padding:12px 14px;border:1px solid var(--line-2);border-radius:14px;background:var(--surface);color:var(--text);box-shadow:none;font-weight:600}
.btn-new::after{display:none}
.btn-new:hover{background:var(--surface-2);border-color:var(--line-2);box-shadow:none;transform:none}
.sb-search{margin-top:3px}
.sb-search input{background:transparent;border-color:transparent;font-size:13px;box-shadow:none}
.sb-search input:hover{background:var(--surface-2)}
.sec{font-weight:500;letter-spacing:0;text-transform:none;color:var(--text-3)}
.nav-item{min-height:44px;border-radius:11px;font-size:14px;gap:9px}
.nav-item .ic{background:transparent!important;color:var(--text)!important}
.nav-item .ic svg{width:20px;height:20px}
.nav-item>.lucide-icon{width:19px;height:19px}
.sb-foot{border-top:0;padding-top:12px}
.main{background:var(--surface);border:1px solid var(--line);border-radius:18px;overflow:hidden}
.topbar,.topbar.stuck{min-height:62px;background:var(--surface);border-bottom:0;box-shadow:none;backdrop-filter:none}
.app.chat-mode .topbar{display:flex;justify-content:space-between;}
.app.chat-mode .topbar-left{flex:1 1 auto;min-width:0}
.app.chat-mode .topbar-right{display:flex;flex:0 0 auto;align-self:center;justify-self:auto;margin-left:auto}
.app.chat-mode .top-title{max-width:min(56ch,55vw)}
@media(max-width:860px){.app.chat-mode .topbar-right{display:none}}
.user{background:transparent;border-color:transparent;box-shadow:none}
.user:hover{background:var(--surface-2);box-shadow:none}
.pill-diary{background:var(--accent-soft);color:var(--accent);border-color:transparent;box-shadow:none;font-weight:500}
.theme-sw{border-color:transparent;background:var(--surface-2)}
.view{padding:0 32px}
.start{max-width:1040px;padding:28px 0 44px}
.start-top{max-width:960px;padding-bottom:6vh;justify-content:center}
.hero h1{font-size:clamp(34px,4.5vw,58px);letter-spacing:-.03em;margin-bottom:18px;animation:none}
.hero p{font-size:14px;color:var(--text-3);max-width:640px;margin-bottom:28px;animation:none}
.hero #mountHero,.hero .hints{animation:none}
.composer-wrap{max-width:820px}
.composer{display:grid;grid-template-columns:minmax(0,1fr) 40px 40px;gap:4px 7px;align-items:end;padding:14px 12px 10px 20px;border:1px solid var(--line-2);border-radius:25px;background:var(--surface);box-shadow:0 5px 18px rgba(0,0,0,.055)}
.composer:focus-within{border-color:var(--line-2);box-shadow:0 6px 22px rgba(0,0,0,.075)}
html.kbd-nav .composer:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
.composer textarea{grid-column:1/-1;grid-row:1;min-height:34px;padding:2px 0 4px;font-size:16px;line-height:1.6}
.composer-context{grid-column:1;grid-row:2;align-self:center;color:var(--text-3);font-size:12px;text-align:left}
#btnMic{grid-column:2;grid-row:2}
#btnSend{grid-column:3;grid-row:2}
.cbtn{width:38px;height:38px}
.cbtn.send{box-shadow:none}
.cbtn.send:disabled{background:var(--surface-3);color:var(--text-3)}
.hints{max-width:790px;margin:0 auto;padding:14px 16px 12px;background:var(--surface-2);border-radius:0 0 22px 22px;justify-content:space-between;font-size:11px;color:var(--text-3)}
.entries{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;max-width:850px;margin-top:30px}
.entry{flex:0 1 auto;padding:9px 15px;border:1px solid var(--line-2);border-radius:99px;background:var(--surface);box-shadow:none;gap:0;animation:none;filter:none;color:var(--text)}
.entry .entry-head{gap:9px;min-height:24px}
.entry .entry-icon{width:25px;height:25px;border-radius:7px;background:transparent;box-shadow:none}
.entry .lucide-icon{width:21px;height:21px;color:var(--text);stroke-width:1.7}
.entry b{font-size:13px;font-weight:500;letter-spacing:0;color:var(--text)}
.entry small{display:none}
/* 27.09: при наведении значок заливался жёлтым/сиреневым/коралловым — хвост
   цветной итерации карточек, а «подъём» на 2 px дёргал карточку у края
   курсора. Наведение — только тон подложки; цвет значка не меняется. */
.entry:hover{background:var(--surface-2);border-color:var(--line-2);box-shadow:none;transform:none;filter:none}
.entry:focus-visible{outline:2px solid var(--accent);outline-offset:4px}
.entry:active{transform:scale(.985)}
.chips-cap{margin-top:27px;text-align:center;font-size:11px;font-weight:500;color:var(--text-3)}
.chips{display:flex;justify-content:center;flex-wrap:wrap;max-width:820px;gap:6px 18px;margin-top:10px}
.chip{padding:5px 0;max-width:100%;border:0;border-radius:6px;background:transparent;box-shadow:none;font-size:12px;animation:none;color:var(--text-3)}
.chip:hover{background:transparent;box-shadow:none;color:var(--text);transform:none}
.chip .lucide-icon{width:15px;height:15px;color:inherit}
.chip .t{max-width:30ch}
.dock{background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none;padding-bottom:18px}
.dock .composer-wrap{max-width:820px}
.dock .composer textarea{min-height:32px;font-size:15px}
.dock .composer-context{font-size:11px}
.chat{max-width:820px}
.msg.me .bubble{background:var(--msg-fill);border:0;border-radius:20px 20px 5px 20px;box-shadow:none}
.msg.ai .bubble{line-height:1.8}
.set-panel,.catmodal,.rmodal{background:var(--surface);box-shadow:0 18px 60px rgba(0,0,0,.13)}
.cab-page{max-width:1080px}
.cat-card,.tcard,.ct-card{box-shadow:none;background:var(--surface);border-color:var(--line)}
/* ── Движение значков (27.09) ──────────────────────────────────────────
   Было: пять разных движений с разными длительностями, часть без перехода
   в покое (значок прыгал обратно), а цели под курсором сдвигались на
   1–3 px — у края курсор то попадал на кнопку, то нет, и она дрожала.
   Стало: двигается только сам значок, никогда не кнопка; один тайминг
   (--icon-dur, --icon-ease) и туда, и обратно; поворот вокруг центра
   рисунка (transform-box:fill-box), слой на GPU — без субпиксельной
   дрожи штриха. Смысловых движений три: «+» нового чата, шестерёнка,
   колокольчик. Стрелка отправки чуть поднимается. Остальное — только цвет. */
:root{--icon-dur:.26s;--icon-ease:cubic-bezier(.22,1,.36,1)}
.iconbtn svg,.btn-new svg,.nav-item svg,.chip svg,.cbtn svg,.set-nav svg,.lucide-icon{
  transform-box:fill-box;transform-origin:50% 50%;backface-visibility:hidden;
  transition:transform var(--icon-dur) var(--icon-ease),color var(--dur) ease,opacity var(--dur) ease}
/* Анимации значков при наведении (27.09, вечер) — как в Kimi: у каждого
   значка своё короткое движение со смыслом, проигрывается один раз при
   входе курсора и заканчивается в исходной позе, поэтому уход курсора
   ничего не «отщёлкивает». Первая версия (поворот «+» на 90°, шестерёнки
   на 45°) была незаметна: у крестика и шестерёнки конечная поза совпадает
   с начальной, а плавного пути туда не видно за .26 с. */
:root{--ic-anim:.56s;--ic-curve:cubic-bezier(.45,0,.2,1)}
@keyframes ic-pop{0%{transform:none}35%{transform:scale(.8) rotate(-45deg)}70%{transform:scale(1.12) rotate(12deg)}100%{transform:none}}
@keyframes ic-spin{from{transform:rotate(0)}to{transform:rotate(90deg)}}
@keyframes ic-swing{0%{transform:none}20%{transform:rotate(14deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(6deg)}80%{transform:rotate(-3deg)}100%{transform:none}}
@keyframes ic-hop{0%{transform:none}30%{transform:translateY(-3px)}55%{transform:translateY(0)}75%{transform:translateY(-1px)}100%{transform:none}}
@keyframes ic-tilt{0%{transform:none}30%{transform:rotate(-10deg)}65%{transform:rotate(6deg)}100%{transform:none}}
@keyframes ic-beat{0%{transform:none}30%{transform:scale(1.16)}55%{transform:scale(.94)}100%{transform:none}}
@keyframes ic-nudge{0%{transform:none}40%{transform:translateX(3px)}100%{transform:none}}
.btn-new:hover svg{animation:ic-pop var(--ic-anim) var(--ic-curve)}
#btnSettings:hover .ic svg,#btnSettings:hover>svg{animation:ic-spin .7s var(--icon-ease)}
#btnBell:hover svg{transform-origin:50% 8%;animation:ic-swing .7s var(--ic-curve)}
.nav-item:hover>.lucide-icon{animation:ic-hop var(--ic-anim) var(--ic-curve)}
.nav-item[data-tool="forms"]:hover>.lucide-icon{animation-name:ic-tilt}
.entry:hover .lucide-icon{animation:ic-hop var(--ic-anim) var(--ic-curve)}
.entry:nth-child(2):hover .lucide-icon{animation-name:ic-swing}
.entry:nth-child(3):hover .lucide-icon{animation-name:ic-tilt}
.entry:nth-child(4):hover .lucide-icon{animation-name:ic-beat}
.chip:hover .lucide-icon{animation:ic-hop var(--ic-anim) var(--ic-curve)}
.cbtn.send:not(:disabled):hover svg{animation:ic-hop var(--ic-anim) var(--ic-curve)}
#btnMic:hover svg{animation:ic-beat var(--ic-anim) var(--ic-curve)}
.set-nav button:hover .ni svg{animation:ic-hop var(--ic-anim) var(--ic-curve)}
.sb-collapse:hover svg{animation:ic-nudge .45s var(--ic-curve)}
.set-row:hover .go,.hist-more:hover svg{animation:ic-nudge .45s var(--ic-curve)}
/* Цели не двигаются: «подъём» при наведении снят в самих правилах
   .fu, .cat-stat, .cat-card, .rm-submit, .tour-next (27.09). */
.skip-link{top:10px;transform:translateY(calc(-100% - 22px));transition:transform .18s ease}
.skip-link:focus,.skip-link:focus-visible{top:10px;transform:translateY(0)}
@media(min-width:861px){.app.rail .sidebar{padding-left:10px;padding-right:10px}.app.rail .sb-top{padding:0}}
@media(max-width:1100px){.view{padding:0 24px}.hero h1{font-size:40px}.hints{justify-content:center}.hint-kbd{display:none!important}.entry{padding:9px 12px}}
@media(max-width:860px){.app{padding:0}.main{border:0;border-radius:0}.sidebar{background:var(--bg)}.topbar{min-height:56px}.view{padding:0 20px}.start-top{padding-bottom:4vh}.hero h1{font-size:38px}.hero p{max-width:46ch}.composer{border-radius:22px}.entries{gap:9px;margin-top:24px}.chips{gap:7px 14px}}
@media(max-width:480px){.view{padding:0 16px}.start{padding-top:22px}.start-top{padding-bottom:20px}.hero h1{font-size:30px;margin-bottom:15px}.hero p{font-size:12px;line-height:1.6;margin-bottom:23px}.composer{padding:14px 12px 10px 15px;gap:5px}.composer textarea{font-size:14px;min-height:34px}.composer-context{font-size:10px}.hints{padding:11px 8px;font-size:10px}.entries{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;width:100%}.entry{padding:10px 11px}.entry b{font-size:12px}.entry .entry-head{gap:7px}.entry .lucide-icon{width:18px;height:18px}.chips-cap{margin-top:22px}.chips{flex-direction:column;align-items:center}.chip{font-size:11px}.dock{padding:8px 12px 12px}.dock .composer-context{display:none}}
@media(prefers-reduced-motion:reduce){.entry,.iconbtn svg,.btn-new svg,.nav-item svg,.chip svg,.cbtn svg,.set-nav svg,.lucide-icon,.sb-collapse svg,.set-row .go{animation:none!important;transition:none!important;transform:none!important}}
html.no-motion .sb-collapse svg,html.no-motion .set-row .go,html.no-motion .entry,html.no-motion .iconbtn svg,html.no-motion .btn-new svg,html.no-motion .nav-item svg,html.no-motion .chip svg,html.no-motion .cbtn svg,html.no-motion .set-nav svg,html.no-motion .lucide-icon{animation:none!important;transition:none!important;transform:none!important}
@container canvas (max-width:700px){
  .entries{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-width:420px;width:100%}
  .entry{align-items:center}
  .start-top{padding-bottom:12px}
}
@media(max-height:760px){.start{padding-top:20px;padding-bottom:24px}.start-top{padding-bottom:0}.hero h1{margin-bottom:14px}.hero p{margin-bottom:22px}.entries{margin-top:23px}.chips-cap{margin-top:20px}}

/* Keep the assistant label quiet; the brand is the name, not a colored tile. */
.msg-who i{width:8px;height:8px;border-radius:50%;background:var(--text);box-shadow:none}

/* Keep the new-chat glyph intact when its button becomes a single-cell rail icon. */
.app.rail .btn-new{display:grid;place-items:center;place-content:center}
.app.rail .btn-new svg{grid-area:1/1;width:19px;height:19px}

/* ── Настройки в Kimi-стиле (27.09) ─────────────────────────────────────
   Было: окно 720×680 с внутренней прокруткой уже на первой вкладке, серые
   коробки-группы, цветные плитки у каждой строки, заголовки капсом и
   бирюзовые переключатели — три визуальных языка сразу. Стало: список
   настроек как в Kimi/ChatGPT — строка «что это · чем управляется»,
   разделители волосной линией, без плиток; раздел подписан обычным
   регистром; включённый переключатель — рабочий синий, выключенный —
   нейтральный; тема — компактный сегмент справа от подписи. */
.set-bg{background:rgba(20,20,20,.32);backdrop-filter:none;-webkit-backdrop-filter:none}
.set-panel{border:1px solid var(--line);box-shadow:0 24px 70px rgba(0,0,0,.16);transform:translateY(8px);
  transition:transform .28s var(--icon-ease)}
.set-h{padding:18px 20px 14px 24px;border-bottom:0}
.set-h .mark{display:none}
.set-h h2{font-size:18px;font-weight:650;letter-spacing:-.02em}
.set-h p{display:none}
.set-h .iconbtn{border:0;background:transparent}
.set-h .iconbtn:hover{background:var(--surface-2)}
.set-nav{background:transparent;border-right:0;gap:2px}
/* Размер окна и колонка вкладок — только на широком экране: на ≤720 px
   вкладки идут строкой, на ≤560 окно становится листом снизу (правила
   выше); общий селектор здесь их перебивал — вкладки вставали столбцом. */
@media(min-width:721px){
  .set-panel{width:min(780px,100%);max-width:780px;height:min(640px,88vh);border-radius:20px}
  .set-body{grid-template-columns:196px 1fr}
  .set-nav{padding:4px 10px 16px 14px}
}
.set-nav button{padding:9px 10px;border-radius:10px;font-size:14px;font-weight:500;color:var(--text-2);gap:10px}
.set-nav button .ni{width:auto;height:auto;background:transparent}
.set-nav button .ni svg{width:17px;height:17px;stroke-width:1.7}
.set-nav button.on{background:var(--surface-3);color:var(--text)}
.set-nav button:hover:not(.on){background:var(--surface-2);color:var(--text)}
.set-panels{padding:0 24px 24px 18px}
.set-panels .set-sec{top:0;background:var(--surface)}
.set-sec{padding:18px 0 6px;font-size:13px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--text)}
.set-sec:first-child{padding-top:6px}
.set-card{background:transparent;border:0;border-radius:0;padding:0;margin:0}
.set-card.pad{padding:8px 0 4px}
.set-card>.set-row,.set-card>a.set-row{border-top:1px solid var(--line);border-radius:0}
.set-row{gap:16px;padding:13px 0;min-height:56px}
.set-row:hover{background:transparent}
a.set-row:hover .txt b{color:var(--accent)}
.set-row>.ic{display:none}
.set-row .txt b{font-size:14px;font-weight:500;letter-spacing:0}
.set-row .txt span{font-size:12.5px;color:var(--text-3);margin-top:3px}
:root[data-theme="dark"] .set-row .txt span{color:var(--text-3)}
.set-row .go{opacity:.7}
/* Переключатель: выключен — нейтральный, включён — рабочий синий. */
.sw{width:40px;height:24px;background:var(--line-2);border:0}
.sw::after{top:3px;left:3px;width:18px;height:18px;box-shadow:0 1px 2px rgba(0,0,0,.2);
  transition:transform .26s var(--icon-ease)}
.sw.on{background:var(--accent)}
.sw.on::after{transform:translateX(16px)}
/* Тема — сегмент в строку, не три высокие плитки. */
.seg{display:inline-grid;grid-auto-flow:column;grid-template-columns:none;gap:2px;padding:3px;
  border:0;border-radius:11px;background:var(--surface-3)}
.seg button{flex-direction:row;gap:7px;padding:7px 13px;border-radius:9px;font-size:13px;font-weight:500;border:0}
.seg button svg{width:15px;height:15px;stroke-width:1.8}
.seg button.on{background:var(--surface);border:0;box-shadow:0 1px 2px rgba(0,0,0,.08)}
.seg button:hover:not(.on){background:transparent}
.set-btn{padding:7px 14px;border-radius:999px;font-weight:500;border-color:var(--line-2);color:var(--text)}
.set-btn:hover{background:var(--surface-2);border-color:var(--line-2);color:var(--text)}
.set-btn.primary{background:var(--solid);color:var(--solid-fg);box-shadow:none}
.set-btn.primary:hover{filter:none;background:var(--solid);color:var(--solid-fg);opacity:.88;box-shadow:none}
.set-acc{background:transparent;border:0;border-bottom:1px solid var(--line);border-radius:0;padding:10px 0 16px}
.set-about-card{border:0;border-top:1px solid var(--line);border-radius:0;padding:14px 0 0;background:transparent}
.set-about .ver-badge,.set-about-card .ver-badge{background:var(--surface-3);border:0;color:var(--text)}
.set-help{font-size:14px;color:var(--text-2)}
.set-org{padding:12px 0}
@media(max-width:720px){
  .set-panels{padding:0 16px 20px}
  .set-nav{padding:4px 12px 10px;border-bottom:1px solid var(--line)}
  .set-nav button{padding:8px 12px}
  .set-row-theme{flex-wrap:wrap}
  .set-row-theme .seg{width:100%;grid-auto-columns:1fr}
}

/* ── Календарь и каталог в Kimi-стиле (27.09) ───────────────────────────
   Одна поверхность: белая карточка, волосная рамка, без теней и градиентов;
   заголовки Onest 650, не широкий дисплейный; таблица без «зебры» по
   колонкам; кнопки-действия — контурные пилюли. */
.desk-card{box-shadow:none;border-radius:16px;border-color:var(--line)}
.desk-card h2{font-weight:650;letter-spacing:-.02em}
.desk-kv{background:transparent}
.desk-kv:hover{border-color:var(--line-2);color:var(--text)}
.desk-tab{font-weight:500}
.desk-tab.on em{color:var(--text)}
.desk-ghost{border-radius:999px;border-color:var(--line-2);color:var(--text)}
.desk-ghost:hover{background:var(--surface-2)}
.desk-tr.head span{font-size:12.5px;font-weight:500}
.desk-c1 b{font-weight:650}
.desk-cal-nav{border-radius:999px;background:transparent}
.desk-cal-nav:hover{border-color:var(--line-2);color:var(--text);background:var(--surface-2)}
.desk-cal-top b,.desk-num b{font-weight:650}
.desk-cal-dow{font-weight:500;letter-spacing:0;text-transform:none}
.cat-stat{box-shadow:none;border-radius:14px}
.cat-stat:hover{border-color:var(--line-2);box-shadow:none}
.cat-stat.on{background:var(--surface);border-color:var(--text);box-shadow:none}
.cat-stat b{font-weight:650;letter-spacing:-.03em}
.cat-stat-ic{background:transparent;color:var(--text-2)}
.cat-card{border-radius:16px}
.cat-card:hover{border-color:var(--line-2);box-shadow:none}
.cat-chip{box-shadow:none}

.cat-mark{color:var(--text-2);background:var(--surface-3)}
.cat-card-id b{font-weight:650;letter-spacing:-.02em}
.cat-chip{font-weight:500}
/* Телефон: вопросы «Часто спрашивают» во всю ширину (цель 44 px под палец),
   но текст по центру — под центрированной подписью он висел слева (27.09). */
@media(max-width:480px){.chips .chip{justify-content:center}}

/* ── Настройки v2 (27.09, вечер): три вкладки, профиль сверху ─────────── */
.set-acc{display:flex;align-items:center;gap:14px;padding:6px 0 18px;border-bottom:0}
.set-acc .avatar{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;
  font-size:16px;font-weight:600;background:var(--surface-3);color:var(--text);flex-shrink:0}
.set-acc-who{flex:1;min-width:0}
.set-acc .nm{font-size:16px;font-weight:600;letter-spacing:-.01em}
.set-acc .sub{font-size:13px;color:var(--text-3);margin-top:2px}
.set-login{display:flex;flex-direction:column;gap:8px;max-width:380px}
.set-login:empty{display:none}
.set-login .oauth-btn{justify-content:center;gap:10px;min-height:44px;padding:10px 16px;border-radius:12px;
  border:1px solid var(--line-2);background:var(--surface);color:var(--text);font-size:14px;font-weight:500;box-shadow:none}
.set-login .oauth-btn:hover{background:var(--surface-2);border-color:var(--line-2);box-shadow:none}
.set-login .oauth-btn.yandex{background:var(--solid);border-color:var(--solid);color:var(--solid-fg)}
.set-login .oauth-btn.yandex:hover{background:var(--solid);opacity:.9}
.set-login .oauth-btn .ob-ic{width:22px;height:22px;border-radius:6px;font-size:12px}
.set-login .oauth-btn.mail .ob-ic{background:var(--surface-3);color:var(--text)}
.set-login .oauth-btn.demo{background:transparent;border-style:dashed;color:var(--text-2)}
.set-login>.set-btn{align-self:flex-start}
#setPageAccount>.oauth-note{margin:10px 0 0;font-size:12.5px}
.set-btn.danger{color:var(--danger);border-color:var(--danger-line)}
.set-btn.danger:hover{background:var(--danger-soft);border-color:var(--danger-line);color:var(--danger)}
.set-about-card{border:0;padding:4px 0 6px}
.set-about-card .name{font-size:18px;font-weight:650;letter-spacing:-.02em}
.set-about-card .line{font-size:13.5px;color:var(--text-2);line-height:1.55}
.set-row .ver-badge{font-family:var(--mono);font-size:12px;font-weight:600;padding:4px 10px;border-radius:999px;
  background:var(--surface-3);color:var(--text);flex-shrink:0}
.set-row .ver-badge:empty{display:none}
.set-foot{margin:22px 0 4px;font-size:12.5px;color:var(--text-3);line-height:1.5}
.set-org .set-row{border-top:1px solid var(--line)}
.set-org>.oauth-note{margin-top:4px}

/* ── Наведение — нейтральное (27.09) ─────────────────────────────────────
   Синий значит «активно / выбрано» (One Blue Rule) и остаётся у выбранного
   пункта меню и вкладки, включённого переключателя, выбранного фильтра
   каталога, ссылок и номера источника. Наведение — это серый тон подложки
   или рамки: до 27.09 одни кнопки при наведении синели (сворачивание меню,
   .btn в календаре, фильтры каталога, «Чем ещё помочь»), другие серели. */
.app.rail .sb-collapse:hover{background:var(--surface-3);border-color:transparent;color:var(--text);box-shadow:none}
.btn:hover{background:var(--surface-2);border-color:var(--line-2);color:var(--text)}
/* Основная кнопка — серая (--brand-solid), и при наведении остаётся серой,
   на тон темнее, как «Сдать отчёт»; раньше она становилась чёрной (27.09). */
.btn.primary:hover{background:color-mix(in srgb,var(--brand-solid) 90%,var(--text));border-color:transparent;color:var(--brand-solid-fg);opacity:1;filter:none;box-shadow:var(--sh)}
.doc-btn:hover{background:var(--surface-2);color:var(--text)}
.cat-dd-i:hover{background:var(--surface-3);color:var(--text)}
.nav-item.cabinet:hover,.theme-sw:hover,.tcard:hover,.cat-stat:hover,.cat-card:hover{border-color:var(--line-2);box-shadow:none}
.fu:hover,.tchip:hover,.desk-kv:hover,.desk-cal-nav:hover,.wave-chip:hover,.cat-chip:not(.on):hover,.cat-pin:not(.on):hover{
  border-color:var(--line-2);color:var(--text);background:var(--surface-2)}
.tobottom:hover,.cat-view:hover{color:var(--text)}
a.set-row:hover .txt b{color:var(--text)}
a.set-row:hover{background:transparent}

/* ── История и меню чата как в Kimi (27.09) ───────────────────────────── */
.hist-row .go{border-radius:10px;padding:8px 36px 8px 10px}
.hist-row:hover .go,.hist-row.menu-open .go{background:var(--surface-3);color:var(--text)}
.hist-row.active .go{background:var(--accent-soft);color:var(--accent)}
.hist-more{position:absolute;right:5px;top:50%;width:26px;height:26px;margin-top:-13px;border-radius:8px;
  display:grid;place-items:center;color:var(--text-2);opacity:0;
  transition:opacity var(--dur) ease,background var(--dur) ease,color var(--dur) ease}
.hist-more svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round}
.hist-row:hover .hist-more,.hist-row:focus-within .hist-more,.hist-row.menu-open .hist-more{opacity:1}
.hist-more:hover,.hist-row.menu-open .hist-more{background:color-mix(in srgb,var(--text) 8%,transparent);color:var(--text)}
.hist-more:focus-visible{opacity:1;outline:2px solid var(--accent);outline-offset:1px}
/* Время уступает место «…», как в Kimi: иначе они налезают друг на друга. */
.hist-row:hover .go .hw,.hist-row:focus-within .go .hw,.hist-row.menu-open .go .hw{opacity:0}
.hist-row .go .hw{transition:opacity var(--dur) ease}
@media (hover:none){.hist-more{opacity:1}.hist-row .go .hw{display:none}}
.chat-menu{position:fixed;top:0;left:0;right:auto;width:auto;min-width:230px;padding:6px;border-radius:14px;
  border:1px solid var(--line);box-shadow:0 12px 36px rgba(0,0,0,.12);z-index:120;
  transform:translateY(-4px) scale(.98);transform-origin:top left}
.chat-menu.on{transform:none}
.chat-menu button{gap:11px;padding:9px 12px;border-radius:9px;font-size:14px;color:var(--text)}
.chat-menu button:hover,.chat-menu button:focus-visible{background:var(--surface-3);color:var(--text);outline:none}
.chat-menu button svg{width:17px;height:17px;stroke-width:1.8;color:var(--text-2)}
.chat-menu button.danger,.chat-menu button.danger svg{color:var(--danger)}
.chat-menu button.danger:hover,.chat-menu button.danger:focus-visible{background:var(--danger-soft)}
.chat-menu hr{margin:4px 6px}
.rename-input{width:100%;min-width:0;font:inherit;color:var(--text);background:var(--surface);
  border:1px solid var(--accent);border-radius:7px;padding:2px 6px;outline:none;box-shadow:0 0 0 3px var(--accent-soft)}
.hist-row .go:has(.rename-input){background:transparent;padding-right:10px}
/* Название чата в шапке — кнопка меню. */
.app.chat-mode .top-title{cursor:pointer;padding:6px 10px;margin-left:-10px;border-radius:10px;
  color:var(--text);font-weight:600;transition:background var(--dur) ease}
.app.chat-mode .top-title:hover,.app.chat-mode .top-title.menu-open{background:var(--surface-3)}
.app.chat-mode .top-title:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.app.chat-mode .top-title:has(.rename-input){background:transparent;overflow:visible;padding:2px 0 2px 10px}
.app.chat-mode .top-title .rename-input{min-width:min(40ch,50vw);font-size:14px;font-weight:600}
.hist-group{padding:10px 10px 4px;font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text-3)}

/* ── Кнопки ↑/↓ по диалогу (27.09) ─────────────────────────────────────
   Группа над полем ввода: ↑ — к предыдущему своему вопросу, ↓ — вниз.
   Каждая видна, только когда ей есть куда вести; вместе — рядом. */
.jumps{position:absolute;left:50%;bottom:calc(var(--dock-h,92px) + 10px);transform:translateX(-50%);
  display:flex;gap:8px;z-index:5;pointer-events:none}
.jumps .tobottom{position:relative;left:auto;bottom:auto;transform:translateY(10px) scale(.92);
  width:38px;height:38px;box-shadow:0 4px 14px rgba(0,0,0,.08)}
.jumps .tobottom.on{transform:none}
.jumps .tobottom:not(.on){display:none}
.jumps .tobottom:hover{background:var(--surface-2);color:var(--text);box-shadow:0 6px 18px rgba(0,0,0,.1)}
.jumps .tobottom svg{transition:transform var(--icon-dur) var(--icon-ease)}
.jumps .toup:hover svg{animation:ic-hop var(--ic-anim) var(--ic-curve)}
.jumps #btnDown:hover svg{animation:ic-drop var(--ic-anim) var(--ic-curve)}
@keyframes ic-drop{0%{transform:none}30%{transform:translateY(3px)}55%{transform:translateY(0)}75%{transform:translateY(1px)}100%{transform:none}}
@media(prefers-reduced-motion:reduce){.jumps .tobottom svg{animation:none!important}}
html.no-motion .jumps .tobottom svg{animation:none!important}

/* ── Переливание поля ввода (27.09, по мотивам chat.z.ai) ───────────────
   Два слоя поверх фона поля, под текстом:
   ::before — тонкий луч по рамке: конический градиент от угла --beam-a,
     вырезанный маской в кольцо 1,5 px; угол крутится по кругу;
   ::after  — то же свечение, размытое и показанное только у краёв
     (радиальная маска прячет центр — текст остаётся на чистом фоне).
   Цвета — тёплые (оранжевый, коралл) в рабочий синий и бирюзу. Угол —
   зарегистрированное свойство (@property), иначе браузер не анимирует
   его плавно; без поддержки @property луч просто стоит на месте. */
@property --beam-a{syntax:'<angle>';inherits:true;initial-value:0deg}
@property --beam-o{syntax:'<number>';inherits:true;initial-value:0}
.composer{position:relative;isolation:isolate;--beam-o:0;
  transition:--beam-o .5s ease,border-color var(--dur),box-shadow var(--dur)}
.composer>*{position:relative;z-index:1}
.composer::before,.composer::after{content:"";position:absolute;inset:-1px;border-radius:inherit;
  pointer-events:none;opacity:var(--beam-o);
  background:conic-gradient(from var(--beam-a),
    transparent 0%,transparent 42%,
    #ff9a3c 52%,#ff5e62 60%,#c05cf2 68%,#1d64c8 76%,#18c0b8 84%,
    transparent 92%,transparent 100%)}
.composer::before{z-index:2;padding:1.5px;
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude}
.composer::after{z-index:0;inset:0;filter:blur(16px) saturate(1.2);
  clip-path:inset(0 round 25px);
  -webkit-mask:radial-gradient(120% 140% at 50% 50%,transparent 52%,#000 100%);
          mask:radial-gradient(120% 140% at 50% 50%,transparent 52%,#000 100%)}
.composer.beam{--beam-o:1;border-color:transparent;animation:beam-spin 3.2s linear infinite}
:root[data-theme="dark"] .composer.beam::after{opacity:calc(var(--beam-o) * .8)}
@keyframes beam-spin{to{--beam-a:360deg}}
@media(prefers-reduced-motion:reduce){.composer.beam{animation:none;--beam-o:.6}}
html.no-motion .composer.beam{animation:none;--beam-o:.6}

/* Телефон: кнопки ↑/↓ у правого края — по центру их закрывала плашка cookies
   (она стоит слева над полем ввода), да и большой палец справа (27.09). */
@media(max-width:560px){.jumps{left:auto;right:14px;transform:none}}

/* График в ответе — белый, с обводкой и тенью как у поля ввода (27.09).
   Серую заливку давало старое правило светлой темы (.chart, .ev, .fu). */
:root[data-theme="light"] .chart,.chart{background:var(--surface);border:1px solid var(--line-2);
  border-radius:20px;box-shadow:0 5px 18px rgba(0,0,0,.055)}
/* «Настройки» в свёрнутой панели — на той же высоте, что в развёрнутой:
   там у кнопки был нижний отступ 8 px и высота 44 вместо 46 (27.09). */
.app.rail #btnSettings{margin-bottom:0;height:46px;min-height:46px}

/* Панель ввода и кнопки ↑/↓ — по ширине ленты без полосы прокрутки
   (--sbw считает JS): края колонки ответа и поля ввода совпадают (27.09). */
.dock{right:var(--sbw,0px)}
.jumps{left:calc(50% - var(--sbw,0px) / 2)}
@media(max-width:560px){.jumps{left:auto;right:calc(14px + var(--sbw,0px))}}

/* «Часто спрашивают»: восемь вопросов, на телефоне четыре — чтобы не
   растягивать первый экран столбиком из восьми строк (27.09). */
.chips{max-width:880px}
@media(max-width:560px){.chips .chip:nth-child(n+5){display:none}}


/* Один боковой отступ для ленты и панели ввода (27.09): края текста и поля
   ввода совпадают на любой ширине. Раньше лента имела 32/24/20/16 px, а
   панель — 24/12 px, и на планшете поле было шире текста на 8 px с каждой
   стороны, на телефоне — на 4. */
:root{--gutter:32px}
@media(max-width:1100px){:root{--gutter:24px}}
@media(max-width:860px){:root{--gutter:20px}}
@media(max-width:480px){:root{--gutter:16px}}
.view{padding-left:var(--gutter);padding-right:var(--gutter)}
.dock{padding-left:var(--gutter);padding-right:var(--gutter)}

/* Прошедшие сроки в календаре: бледный кружок, цифра — чёрная (27.09).
   Правило светлой темы делало её белой, и дату было не прочитать. */
:root .desk-cal-d.hit.past .desk-cal-n,:root[data-theme="light"] .desk-cal-d.hit.past .desk-cal-n{color:var(--text)}

/* Цвет периода формы (27.09): месячные — синий, квартальные — фиолетовый,
   годовые — зелёный, прочие — песочный. Красного нет намеренно: бухгалтер
   читает красный как «просрочено». */
:root{
  --per-month:#1d64c8;--per-quarter:#7043c9;--per-year:#16825d;--per-other:#9a6a14;--per-all:#1d64c8;
}
:root[data-theme=dark]{
  --per-month:#8ebaff;--per-quarter:#c3a5ff;--per-year:#6fd3a8;--per-other:#e6c173;--per-all:#8ebaff;
}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]){
  --per-month:#8ebaff;--per-quarter:#c3a5ff;--per-year:#6fd3a8;--per-other:#e6c173;--per-all:#8ebaff;
}}
.desk-per.month,.cat-stat.g-month{--pc:var(--per-month)}
.desk-per.quarter,.cat-stat.g-quarter{--pc:var(--per-quarter)}
.desk-per.year,.cat-stat.g-year{--pc:var(--per-year)}
.desk-per.other,.cat-stat.g-other{--pc:var(--per-other)}
.cat-stat.g-all{--pc:var(--per-all)}
.desk-per.month,.desk-per.quarter,.desk-per.year,.desk-per.other{
  color:var(--pc);background:color-mix(in srgb,var(--pc) 12%,var(--surface));
}
.cat-stat .cat-stat-ic{color:var(--pc)}
/* Выбранная группа — мягкая заливка своим цветом, как выбранная отрасль. */
.cat-stat.on{
  background:color-mix(in srgb,var(--pc) 10%,var(--surface));
  border-color:color-mix(in srgb,var(--pc) 34%,var(--surface));
}
.cat-stat.on b,.cat-stat.on i{color:var(--pc)}

/* «Часто спрашивают» — одна строка по ширине поля ввода: что не влезло,
   уходит на скрытую вторую строку (27.09). */
.chips,.start>.chips{
  display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;align-content:flex-start;
  width:100%;max-width:820px;height:28px;overflow:hidden;row-gap:40px;
}
.chips .chip{flex:0 0 auto}
@media(max-width:560px){.chips .chip:nth-child(n+5){display:inline-flex}}

/* ── Календарь по ИНН, пересборка 27.09 ─────────────────────────────
   Сверху — полоса организации во всю ширину, под ней две колонки:
   ближайшая сдача (крупно — дата срока) и календарь; ниже перечень. */
.desk-mosaic{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,380px);gap:14px}
.desk-mosaic > .desk-card{min-width:0;max-width:none}
.desk-mosaic > .desk-wide{grid-column:1/-1}
.desk-card{box-shadow:none;border-color:var(--line);border-radius:20px;padding:20px 22px}
.desk-card:not(.desk-cal){min-height:0}
.desk-org{flex-direction:row !important;align-items:center;gap:18px;flex-wrap:wrap}
.desk-org-main{flex:1 1 360px;min-width:0}
.desk-org-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.desk-org h2{margin:0;padding:0;font-size:22px}
.desk-org .desk-badge{margin:0}
.desk-org .desk-kvs{margin:10px 0 0;align-items:center}
.desk-org .desk-place{margin:0 0 0 4px;font-size:13px;color:var(--text-3)}
.desk-org .desk-note{margin-top:8px}
.desk-org .desk-extra{margin:0;display:flex;gap:6px;flex-wrap:wrap}
.desk-here .desk-here-k{padding:0;margin-bottom:14px}
.desk-when{display:flex;align-items:flex-end;gap:14px;margin:0 0 16px}
.desk-num b{font-size:56px;line-height:.85}
.desk-num i{font-size:15px;color:var(--text-2);margin-top:6px;text-transform:none}
.desk-in{margin-bottom:4px;padding:5px 11px;border-radius:999px;font-size:13px;font-weight:650;
  color:var(--text-2);background:var(--surface-3)}
.desk-in.near{color:var(--accent);background:var(--accent-soft)}
.desk-none{font-size:17px}
.desk-lead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0;font-size:16px}
.desk-lead b{font-weight:750}
.desk-more{font-size:13px;color:var(--text-3);font-weight:600}
.desk-lead-n{margin:6px 0 0;font-size:14px;line-height:1.5;color:var(--text-2);max-width:60ch}
.desk-here .desk-cond{align-self:flex-start;margin-top:8px}
.desk-cta{flex-wrap:nowrap;padding-top:18px}
.desk-cta .btn{white-space:nowrap}
.desk-board .desk-tabs{padding:0;margin-bottom:6px}

/* Календарь: дни сдачи окрашены периодом (как в каталоге), цифра —
   тёмная; ближайший срок — сплошной синий; прошедшие — без заливки. */
.desk-cal-d.hit .desk-cal-n,:root[data-theme="light"] .desk-cal-d.hit .desk-cal-n{
  color:var(--text);background:color-mix(in srgb,var(--pc,var(--accent)) 16%,var(--surface))}
.desk-cal-d.per-month{--pc:var(--per-month)}
.desk-cal-d.per-quarter{--pc:var(--per-quarter)}
.desk-cal-d.per-year{--pc:var(--per-year)}
.desk-cal-d.per-other{--pc:var(--per-other)}
.desk-cal-d.hit.past .desk-cal-n,:root[data-theme="light"] .desk-cal-d.hit.past .desk-cal-n{
  background:transparent;color:var(--text-3);font-weight:600;
  text-decoration:underline 2px color-mix(in srgb,var(--pc) 45%,transparent);text-underline-offset:5px}
.desk-cal-d.hit.soon .desk-cal-n,:root[data-theme="light"] .desk-cal-d.hit.soon .desk-cal-n{
  background:var(--accent);color:#fff}

@media(max-width:900px){
  .desk-mosaic{grid-template-columns:minmax(0,1fr)}
  .desk-cal{max-width:none;margin:0;min-height:280px}
}
@media(max-width:560px){
  .desk-cta{flex-wrap:wrap}
  .desk-num b{font-size:46px}
  .desk-card{padding:16px}
}

/* ── Календарь по ИНН, редизайн 27.09 ───────────────────────────────
   Кто (строка-личность) → когда (герой: дата срока, очередь, лента на
   90 дней) → повестка по датам + липкий календарь. Цвет — период формы,
   как в каталоге; ближайший срок — синий; красного нет. */
.per-month{--pc:var(--per-month)}
.per-quarter{--pc:var(--per-quarter)}
.per-year{--pc:var(--per-year)}
.per-other{--pc:var(--per-other)}
.dk{display:flex;flex-direction:column;gap:18px}
.dk .desk-card{border-radius:24px;border:1px solid var(--line);box-shadow:none;background:var(--surface);min-height:0}

/* Кто */
.dk-id{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:2px 2px 20px;border-bottom:1px solid var(--line)}
.dk-ava{width:54px;height:54px;border-radius:17px;display:grid;place-items:center;flex-shrink:0;
  font-family:var(--display);font-size:24px;font-weight:750;color:var(--accent);background:var(--accent-soft)}
.dk-id-main{flex:1 1 320px;min-width:0}
.dk-id-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dk-id h2{margin:0;font-family:var(--display);font-size:25px;font-weight:750;letter-spacing:-.03em;line-height:1.15;padding:0}
.dk-id .desk-badge{margin:0}
.dk-id .desk-kvs{margin:6px 0 0;align-items:center;gap:2px 14px}
.dk-id .desk-kv{border:0;background:transparent;padding:2px 0;border-radius:6px}
.dk-id .desk-kv:hover{background:transparent;color:var(--accent)}
.dk-id .desk-place{font-size:13px;color:var(--text-3)}
.dk-id .desk-note{margin:4px 0 0;font-size:12.5px;color:var(--text-3)}
.dk-id .desk-extra{margin:0;display:flex;gap:6px;flex-wrap:wrap;width:auto}
.dk .desk-ghost{display:inline-flex;align-items:center;gap:7px;height:38px;padding:0 15px;font-size:13px;font-weight:600;border-radius:999px}
.dk .desk-ghost svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}

/* Когда */
.dk .dk-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(250px,330px);gap:8px 36px;padding:28px 30px 24px}
.dk-hero-l{display:flex;flex-direction:column;min-width:0}
.dk .desk-here-k{display:block;margin:0 0 12px;padding:0;font-size:13px;font-weight:500;color:var(--text-3)}
.dk-big{display:flex;align-items:flex-end;gap:16px;margin:0 0 18px}
.dk-big b{font-family:var(--display);font-size:96px;font-weight:750;letter-spacing:-.065em;line-height:.78;font-variant-numeric:tabular-nums;color:var(--text)}
.dk-big-m{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
.dk-big-m i{font-style:normal;font-family:var(--display);font-size:28px;font-weight:700;letter-spacing:-.025em;line-height:1}
.dk .desk-in{font-style:normal;margin:0}
.dk .desk-lead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0;font-size:16px}
.dk .desk-lead-n{margin:6px 0 0;font-size:14px;line-height:1.5;color:var(--text-2);max-width:62ch}
.dk .desk-cta{display:flex;flex-wrap:wrap;gap:8px;padding-top:20px;margin-top:auto}
.dk-queue{display:flex;flex-direction:column;gap:2px;border-left:1px solid var(--line);padding-left:28px;min-width:0}
.dk-q{display:grid;grid-template-columns:46px minmax(0,1fr) auto;align-items:center;gap:12px;padding:7px 8px;margin:0 -8px;
  border-radius:14px;border:0;background:transparent;text-align:left;cursor:pointer;color:var(--text);font:inherit}
.dk-q:hover,.dk-q.on{background:var(--surface-2)}
.dk-q-d{display:flex;flex-direction:column;align-items:center;justify-content:center;height:46px;border-radius:13px;
  background:color-mix(in srgb,var(--pc) 13%,var(--surface))}
.dk-q-d b{font-size:18px;font-weight:750;line-height:1;font-variant-numeric:tabular-nums}
.dk-q-d i{font-style:normal;font-size:10.5px;color:var(--text-2);margin-top:2px}
.dk-q-c{font-weight:650;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dk-q-n{font-size:12px;color:var(--text-3);white-space:nowrap}
.dk-q-empty{margin:0;font-size:13px;color:var(--text-3)}

/* Лента сроков */
.dk-line{grid-column:1/-1;margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
.dk-line-k{display:block;font-size:12px;color:var(--text-3);margin-bottom:26px}
.dk-track{position:relative;height:24px;margin:0 10px 4px}
.dk-track::before{content:"";position:absolute;left:0;right:0;top:50%;height:2px;border-radius:2px;transform:translateY(-50%);
  background:linear-gradient(90deg,var(--accent),color-mix(in srgb,var(--accent) 30%,var(--line-2)) 12%,var(--line-2) 30%)}
.dk-now{position:absolute;left:0;top:-20px;font-size:11px;font-weight:650;color:var(--accent);transform:translateX(-10px)}
.dk-now::after{content:"";position:absolute;left:6px;top:21px;width:8px;height:8px;border-radius:50%;background:var(--accent);
  box-shadow:0 0 0 3px var(--surface)}
.dk-tick{position:absolute;top:-20px;font-size:11px;color:var(--text-3);transform:translateX(-50%);white-space:nowrap}
.dk-tick::after{content:"";position:absolute;left:50%;top:22px;width:1px;height:10px;background:var(--line-2)}
.dk-dot{position:absolute;top:50%;left:0;width:calc(9px + var(--n,1) * 3px);height:calc(9px + var(--n,1) * 3px);
  border-radius:50%;padding:0;border:2px solid var(--surface);background:var(--pc,var(--accent));
  transform:translate(-50%,-50%);cursor:pointer;transition:box-shadow var(--dur,.2s) ease}
.dk-dot:hover,.dk-dot.on{box-shadow:0 0 0 5px color-mix(in srgb,var(--pc,var(--accent)) 24%,transparent)}
.dk-dot.soon{background:var(--accent);box-shadow:0 0 0 5px color-mix(in srgb,var(--accent) 20%,transparent)}

/* Повестка */
.dk-main{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px;align-items:start}
.dk-agenda{padding:18px 24px 14px;border:1px solid var(--line);border-radius:24px;background:var(--surface);min-width:0}
.dk-agenda .desk-tabs{margin:0 0 4px;padding:0;gap:4px}
.dk .desk-tab{border-radius:999px}
.dk-list{display:block;width:auto}
.dk-bucket-h{margin:18px 0 2px;font-size:12px;font-weight:600;color:var(--text-3);letter-spacing:.01em}
.dk-bucket.past .dk-day{opacity:.7}
.dk-day{display:grid;grid-template-columns:76px minmax(0,1fr);gap:18px;padding:16px 12px;margin:0 -12px;
  border-top:1px solid var(--line);border-radius:16px;transition:background var(--dur,.2s)}
.dk-bucket-h + .dk-day{border-top-color:transparent}
.dk-day.on{background:var(--surface-2);border-top-color:transparent}
.dk-date{display:flex;flex-direction:column;padding-top:1px}
.dk-date b{font-family:var(--display);font-size:32px;font-weight:750;letter-spacing:-.045em;line-height:.9;font-variant-numeric:tabular-nums}
.dk-date i{font-style:normal;font-size:12px;color:var(--text-3);margin-top:6px;white-space:nowrap}
.dk-date .dk-date-none{margin-top:2px}
.dk-rows{display:flex;flex-direction:column;gap:16px;min-width:0}
.dk-row{position:relative;padding-left:15px}
.dk-row::before{content:"";position:absolute;left:0;top:2px;bottom:2px;width:3px;border-radius:3px;background:var(--pc)}
.dk-row-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.dk-code{font-size:15.5px;font-weight:750;letter-spacing:-.01em}
.dk-when{margin-left:auto;display:inline-flex;gap:8px;align-items:baseline;font-size:12.5px;color:var(--text-3);white-space:nowrap}
.dk .desk-left{display:inline;font-size:13px;font-weight:650;color:var(--text-2)}
.dk .desk-left.mid{color:var(--text)}
.dk .desk-left.hot{color:var(--accent)}
.dk-name{margin:5px 0 0;font-size:14px;line-height:1.5;color:var(--text-2)}
.dk-row .desk-cond-why{margin:4px 0 0;font-size:12.5px;line-height:1.45;color:var(--text-3)}
.dk-row .desk-a{margin-top:6px;display:inline-block}
.dk .desk-approx-note{margin:6px 0 0;font-size:12px;color:var(--text-3)}

/* Календарь сбоку */
.dk-aside{position:sticky;top:12px;display:flex;flex-direction:column;gap:10px;min-width:0}
.dk .desk-cal{width:auto;max-width:none;margin:0;min-height:280px;padding:18px 18px 12px}
.dk-legend{display:flex;flex-wrap:wrap;gap:6px 14px;padding:2px 8px;font-size:12px;color:var(--text-3)}
.dk-legend span{display:inline-flex;align-items:center;gap:6px}
.dk-legend span::before{content:"";width:9px;height:9px;border-radius:50%;background:color-mix(in srgb,var(--pc) 45%,var(--surface))}
.dk-legend .soon::before{background:var(--accent)}

@media(max-width:1100px){.dk-main{grid-template-columns:minmax(0,1fr) 300px}}
@media(max-width:900px){
  .dk-main{grid-template-columns:minmax(0,1fr)}
  .dk-aside{position:static}
  .dk .dk-hero{grid-template-columns:minmax(0,1fr)}
  .dk-queue{border-left:0;padding-left:0;border-top:1px solid var(--line);padding-top:16px;margin-top:14px}
}
@media(max-width:560px){
  .dk .dk-hero{padding:20px 18px 18px}
  .dk-big b{font-size:72px}
  .dk-big-m i{font-size:22px}
  .dk-id{gap:12px;align-items:flex-start}
  .dk-id-main{flex:1 1 0}
  .dk-ava{width:44px;height:44px;border-radius:14px;font-size:20px}
  .dk-id h2{font-size:21px}
  .dk-id .desk-extra{width:100%}
  .dk-agenda{padding:14px 16px 10px}
  .dk-day{grid-template-columns:50px minmax(0,1fr);gap:12px;padding:14px 8px;margin:0 -8px}
  .dk-date b{font-size:24px}
  .dk-when{margin-left:0;width:100%}
}


/* ── Заголовок чата: стрелка меню, как у Kimi (27.09) ── */
.app.chat-mode .top-title.on:not(:empty):not(:has(.rename-input)){display:inline-flex;align-items:center;gap:6px}
.app.chat-mode .top-title.on:not(:empty):not(:has(.rename-input))::after{
  content:"";width:14px;height:14px;flex-shrink:0;background:var(--text-3);
  -webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>") center/14px no-repeat;
          mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>") center/14px no-repeat;
  transition:transform var(--dur,.2s) ease}
.app.chat-mode .top-title.menu-open::after{transform:rotate(180deg)}
.chat-menu .danger,.chat-menu .danger svg{color:var(--danger)}

/* ── Карточка формы в каталоге, редизайн 27.09 ── */
.cat-card2{position:relative;overflow:hidden;border-radius:20px}
.cat-card2::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--pc);opacity:.75}
.cat-card2 .cat-card-hit{display:flex;flex-direction:column;gap:8px;height:100%;padding:18px 18px 14px}
.cat-card2 .cat-card-h{display:flex;align-items:center;gap:8px;justify-content:flex-start}
.cat-card2 .cat-star{margin-left:auto;opacity:0;transition:opacity var(--dur,.2s)}
.cat-card2:hover .cat-star,.cat-card2 .cat-star.on,.cat-card2 .cat-star:focus-visible{opacity:1}
.cat-card2 .cat-card-id{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:4px}
.cat-card-code{font-family:var(--display);font-size:26px;font-weight:750;letter-spacing:-.04em;line-height:1.05;color:var(--text)}
.cat-card2 .cat-card-id i{font-style:normal;font-size:12px;color:var(--text-3)}
.cat-card2 .cat-card-n{margin:0;font-size:14px;line-height:1.5;color:var(--text-2);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.cat-card2 .cat-card-f{margin-top:auto;padding-top:12px;border-top:1px solid var(--line);
  display:flex;align-items:center;gap:10px;justify-content:space-between}
.cat-card2 .cat-card-due{display:flex;align-items:flex-start;gap:7px;min-width:0;font-size:12.5px;line-height:1.4;color:var(--text-3)}
.cat-card2 .cat-card-due svg{width:14px;height:14px;flex-shrink:0;margin-top:1px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.cat-card2 .cat-card-due span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.cat-card-ask{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 11px;border-radius:999px;
  border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;
  opacity:0;transition:opacity var(--dur,.2s),background var(--dur,.2s)}
.cat-card-ask svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.cat-card2:hover .cat-card-ask,.cat-card-ask:focus-visible,.cat-card2:focus-within .cat-card-ask{opacity:1}
.cat-card-ask:hover{background:var(--surface-2)}
@media(hover:none){.cat-card-ask,.cat-card2 .cat-star{opacity:1}}
.cat-card2.fav{border-color:color-mix(in srgb,var(--warn) 30%,var(--line))}

/* ── Окно формы, редизайн 27.09: «паспорт формы» ── */
.catm2{position:relative;width:min(680px,100%)}
.catm2::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--pc);z-index:2}
.catm2 .catmodal-h{padding:24px 24px 18px;border-bottom:0;align-items:flex-start}
.catm2 .catmodal-h .mark{display:none}
.catm2 .catmodal-t b{font-size:34px;letter-spacing:-.045em;line-height:1}
.catm-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:10px 0 8px}
.catm-okud{display:inline-flex;align-items:baseline;gap:5px;padding:3px 9px;border-radius:999px;border:1px solid var(--line);
  background:transparent;color:var(--text);font:inherit;font-size:12.5px;cursor:pointer}
.catm-okud i{font-style:normal;font-size:10.5px;font-weight:700;letter-spacing:.04em;color:var(--text-3)}
.catm-okud b{font-weight:650;font-variant-numeric:tabular-nums}
.catm-okud:hover{background:var(--surface-2)}
.catm2 .catmodal-t h2{font-size:15px;line-height:1.45;color:var(--text-2);font-weight:450}
.catm2 .catmodal-body{padding:0 24px 0;display:flex;flex-direction:column}
/* 27.09: две настоящие колонки (catm-col-l/-r) вместо одного потока с
   grid-row-гимнастикой — высота правой колонки больше не зависит от того,
   сколько строк займёт «Кто сдаёт» в левой, и наоборот. */
.catm-body2{display:flex;flex-direction:column;gap:16px}
.catm-col-l,.catm-col-r{display:flex;flex-direction:column;gap:16px;min-width:0}
.catm-body2 .cat-more-acts{position:sticky;bottom:0;z-index:1;margin:0 -24px;padding:14px 24px 18px;
  background:var(--surface);border-top:1px solid var(--line);display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.catm-body2 .cat-more-acts .btn.primary{display:inline-flex;align-items:center;justify-content:center;gap:8px}
.catm-body2 .cat-more-acts svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.catm-act{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:40px;padding:0 14px;border-radius:999px;
  border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:inherit;font-size:13.5px;font-weight:600;
  text-decoration:none;cursor:pointer;box-sizing:border-box;transition:background var(--dur,.2s)}
.catm-act:hover{background:var(--surface-2)}
.catm-retired{display:flex;flex-direction:column;gap:3px;padding:12px 14px;border-radius:14px;background:var(--surface-2);font-size:13px;color:var(--text-2)}
.catm-retired b{color:var(--text)}
.catm-facts{display:flex;flex-direction:column;gap:8px}
.catm-fact{display:grid;grid-template-columns:34px minmax(0,1fr);grid-template-rows:auto auto;column-gap:12px;align-items:center;
  padding:12px 14px;border-radius:16px;background:var(--surface-2)}
.catm-fact.wide{background:color-mix(in srgb,var(--pc) 8%,var(--surface))}
.catm-fact-ic{grid-row:1/3;width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:var(--surface);color:var(--pc)}
.catm-fact-ic svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.catm-fact i{font-style:normal;font-size:12px;color:var(--text-3)}
.catm-fact b{font-size:14px;font-weight:600;line-height:1.4;color:var(--text)}
.catm-who h3,.catm-asks h3{margin:0 0 10px;font-size:13px;font-weight:600;color:var(--text-3)}
.catm-who ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.catm-who li{position:relative;padding-left:26px;font-size:14.5px;line-height:1.55;color:var(--text)}
.catm-who li::before{content:"";position:absolute;left:0;top:3px;width:18px;height:18px;border-radius:50%;
  background:color-mix(in srgb,var(--pc) 14%,var(--surface))}
.catm-who li::after{content:"";position:absolute;left:5px;top:8px;width:8px;height:4px;border-left:2px solid var(--pc);border-bottom:2px solid var(--pc);transform:rotate(-45deg)}
.catm-asks{display:flex;flex-wrap:wrap;gap:6px}
.catm-asks h3{width:100%}
.catm-ask{padding:8px 13px;border-radius:999px;border:1px solid var(--line);background:transparent;color:var(--text-2);
  font:inherit;font-size:13px;text-align:left;cursor:pointer;transition:background var(--dur,.2s),color var(--dur,.2s)}
.catm-ask:hover{background:var(--surface-2);color:var(--text)}
/* Исполнитель — тот же .ct-card, что вставляется в ответ чата
   («Контакты Кировстата: …»), но в окне формы собран по сетке плиток
   фактов (27.09): квадрат-значок 34px, подпись 12/400 над значением
   14/500, без капса и жирного 750. Телефон и почта — тихие строки под
   тонкой линией, на той же колонке 34px, что и значок. Данные приходят
   из /contact; пока не ответил — на его месте скелет той же формы. */
.catm-col-r .ct-card{margin:0;padding:12px 14px;border-radius:16px;background:var(--surface-2);box-shadow:none;border:0}
.catm-col-r .ct-top{display:grid;grid-template-columns:34px minmax(0,1fr);column-gap:12px;align-items:center}
.catm-col-r .ct-top .catm-fact-ic{grid-row:auto}
.catm-col-r .ct-who{display:flex;flex-direction:column;gap:1px;min-width:0}
.catm-col-r .ct-kicker{display:none}
.catm-col-r .ct-title{order:-1;margin:0;font-size:12px;font-weight:400;color:var(--text-3)}
.catm-col-r .ct-name{font-family:var(--font);font-size:14px;font-weight:500;letter-spacing:0;line-height:1.4;color:var(--text)}
.catm-col-r .ct-rows{gap:2px;margin:10px 0 0;padding-top:8px;border-top:1px solid var(--line-2)}
.catm-col-r .ct-row{display:grid;grid-template-columns:34px minmax(0,1fr);column-gap:12px;align-items:center;gap:0 12px}
.catm-col-r .ct-ic{width:34px;height:20px;border-radius:0;background:none;color:var(--text-3)}
.catm-col-r .ct-ic svg{width:14px;height:14px}
.catm-col-r .ct-txt i{display:none}
.catm-col-r .ct-phone{gap:.4em}
.catm-col-r .ct-val,.catm-col-r .ct-ext{font-size:12px;font-weight:400;line-height:1.5;font-variant-numeric:tabular-nums}
.catm-col-r .ct-val{color:var(--text);overflow-wrap:anywhere}
.catm-col-r .ct-ext{color:var(--text-3)}
.catm-col-r a.ct-val:hover{color:var(--pc);text-decoration:none}
.catm-exec-sk .catm-fact-ic{background:var(--surface-3)}
.catm-exec-off{display:flex;flex-direction:column;gap:10px}
.catm-exec-off .ct-title{order:0;font-size:12.5px;color:var(--text-2)}
.catm-exec-off .catm-act{width:100%;height:36px;font-size:13px}
.ct-card .sk{display:block;height:12px;border-radius:6px;
  background:linear-gradient(90deg,var(--surface-3) 0,var(--surface) 40%,var(--surface-3) 80%);background-size:250% 100%;animation:shim 1.3s linear infinite}

@media (max-width:560px){
  .catm2 .catmodal-h{padding:20px 18px 14px}
  .catm2 .catmodal-body{padding:0 18px}
  .catm-body2 .cat-more-acts{margin:0 -18px;padding:12px 18px 16px}
  .catm-body2 .cat-more-acts > *{flex:1 1 auto}
  .catm2 .catmodal-t b{font-size:28px}
}
.cat-card2 .cat-card-id b.cat-card-code{font-family:var(--display);font-size:26px;font-weight:750;letter-spacing:-.04em;line-height:1.05}
.cat-card2 .cat-card-f{position:relative}
.cat-card2 .cat-card-due{flex:1}
.cat-card2 .cat-card-ask{position:absolute;right:0;top:50%;transform:translateY(-50%);box-shadow:0 0 0 6px var(--surface)}
.catm2 .catmodal-t .catm-okud b{display:inline;font-family:inherit;font-size:12.5px;font-weight:650;letter-spacing:0;line-height:1.3}

/* Левое меню уже на 14px (27.09): вся раскладка считается от --side-w. */
:root{--side-w:246px}


/* ── Календарь по ИНН: компактный герой (27.09) ── */
.dk .dk-hero{padding:20px 24px 16px;gap:4px 28px}
.dk .desk-here-k{margin-bottom:10px}
.dk-hero-main{display:flex;align-items:center;gap:24px;min-width:0}
.dk .dk-big{margin:0;flex-shrink:0;gap:12px}
.dk .dk-big b{font-size:64px}
.dk .dk-big-m i{font-size:21px}
.dk-info{min-width:0;flex:1;padding-left:24px;border-left:1px solid var(--line);display:flex;flex-direction:column}
.dk .dk-info .desk-lead-n{margin-top:4px;font-size:13.5px}
.dk .dk-info .desk-cta{padding-top:12px;margin-top:0}
.dk .dk-info .desk-cta .btn{height:36px;padding:0 14px;font-size:13.5px}
.dk-queue{gap:0;padding-left:24px}
.dk-queue .desk-here-k{margin-bottom:6px}
.dk-q{grid-template-columns:40px minmax(0,1fr) auto;padding:4px 8px;gap:10px}
.dk-q-d{height:36px;border-radius:11px}
.dk-q-d b{font-size:15px}
.dk-q-d i{font-size:9.5px}

/* ── Лента сроков v2 ── */
.dk-line{margin-top:14px;padding-top:14px}
.dk-line-h{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.dk-line-k{display:flex;align-items:baseline;gap:10px;margin:0;font-size:12.5px;color:var(--text-3)}
.dk-line-k b{font-size:13.5px;font-weight:650;color:var(--text)}
.dk-seg{display:inline-flex;padding:3px;border-radius:999px;background:var(--surface-3);gap:2px}
.dk-seg-b{height:28px;padding:0 12px;border:0;border-radius:999px;background:transparent;color:var(--text-2);
  font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;transition:background var(--dur,.2s),color var(--dur,.2s)}
.dk-seg-b:hover{color:var(--text)}
.dk-seg-b.on{background:var(--surface);color:var(--text);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.dk-track{position:relative;height:92px;margin:0;cursor:crosshair}
.dk-track::before{display:none}
.dk-bands{position:absolute;inset:0}
.dk-band{position:absolute;top:0;bottom:0;border-radius:14px}
.dk-band.alt{background:var(--surface-2)}
.dk-band i{position:absolute;left:10px;top:7px;font-style:normal;font-size:11px;font-weight:600;color:var(--text-3);text-transform:capitalize}
.dk-rail{position:absolute;left:0;right:0;top:46px;height:4px;border-radius:4px;background:var(--line-2);overflow:hidden}
.dk-fill{position:absolute;left:0;top:0;bottom:0;border-radius:4px;
  background:linear-gradient(90deg,var(--accent),color-mix(in srgb,var(--accent) 45%,#7f5af0),var(--accent));background-size:200% 100%;
  animation:dk-flow 3.2s linear infinite}
@keyframes dk-flow{to{background-position:-200% 0}}
.dk-now{position:absolute;left:0;top:48px;width:12px;height:12px;border-radius:50%;background:var(--accent);transform:translate(-2px,-50%);
  box-shadow:0 0 0 3px var(--surface)}
.dk-now::after{content:"";position:absolute;inset:-6px;border-radius:50%;border:2px solid var(--accent);opacity:0;animation:dk-ping 2.4s ease-out infinite}
@keyframes dk-ping{0%{transform:scale(.5);opacity:.55}100%{transform:scale(1.6);opacity:0}}
.dk .dk-dot{top:48px;z-index:2;width:calc(12px + var(--n,1) * 3px);height:calc(12px + var(--n,1) * 3px);
  border:3px solid var(--surface);box-shadow:0 1px 4px rgba(0,0,0,.12);
  animation:dk-in .5s cubic-bezier(.2,.9,.3,1.3) both;animation-delay:calc(var(--i,0) * 45ms + 120ms)}
@keyframes dk-in{from{opacity:0;scale:.2}to{opacity:1;scale:1}}
.dk .dk-dot:hover,.dk .dk-dot:focus-visible,.dk .dk-dot.on{outline:0;scale:1.25;
  box-shadow:0 0 0 6px color-mix(in srgb,var(--pc,var(--accent)) 22%,transparent),0 2px 8px rgba(0,0,0,.14)}
.dk .dk-dot{transition:scale .25s cubic-bezier(.2,.9,.3,1.3),box-shadow .2s}
.dk .dk-dot.soon{background:var(--accent);width:22px;height:22px}
.dk .dk-dot.soon::after{content:"";position:absolute;inset:-7px;border-radius:50%;border:2px solid var(--accent);opacity:0;animation:dk-ping 2.4s ease-out .6s infinite}
.dk-dot-l{position:absolute;left:50%;top:calc(100% + 9px);transform:translateX(-50%);white-space:nowrap;
  font-size:11.5px;font-weight:650;color:var(--text-2);pointer-events:none;transition:opacity .2s}
.dk-dot.soon .dk-dot-l{color:var(--accent);font-weight:750}
.dk-dot-l.hide{opacity:0}
.dk-dot:hover .dk-dot-l,.dk-dot:focus-visible .dk-dot-l,.dk-dot.on .dk-dot-l{opacity:1;color:var(--text)}
.dk-hair{position:absolute;top:0;bottom:0;width:0;border-left:1px dashed color-mix(in srgb,var(--text) 35%,transparent);
  pointer-events:none;opacity:0;transition:opacity .15s;z-index:1}
.dk-track.scrub .dk-hair{opacity:1}
.dk-hair-t{position:absolute;top:4px;left:6px;white-space:nowrap;padding:3px 8px;border-radius:8px;font-size:11.5px;font-weight:600;
  color:var(--surface);background:var(--text)}
.dk-hair.flip .dk-hair-t{left:auto;right:6px}
@media(prefers-reduced-motion:reduce){.dk-fill,.dk-now::after,.dk .dk-dot,.dk .dk-dot.soon::after{animation:none}}
html.no-motion .dk-fill,html.no-motion .dk-now::after,html.no-motion .dk .dk-dot,html.no-motion .dk .dk-dot.soon::after{animation:none}

@media(max-width:900px){.dk-queue{padding-left:0}}
@media(max-width:640px){
  .dk-hero-main{flex-direction:column;align-items:flex-start;gap:12px}
  .dk-info{padding-left:0;border-left:0}
  .dk .dk-big b{font-size:56px}
  .dk-track{height:84px}
  .dk-hair{display:none}
}


/* ── Календарь по ИНН: оболочка, редизайн 27.09 ─────────────────────
   Поле со счётчиком цифр, история с названиями, первый экран с живым
   примером ленты, скелет вместо «крутилки», каскад появления блоков. */
.desk-top{align-items:flex-start}
.desk-search-w{flex:0 1 460px;display:flex;flex-direction:column;gap:6px;min-width:0}
.desk-search-w .desk-search{flex:none;width:100%}
.desk-field{position:relative;flex:1;min-width:0;display:flex}
.desk-field .desk-inn{flex:1;min-width:0;padding-right:62px;font-variant-numeric:tabular-nums;letter-spacing:.06em;font-size:16px;height:48px;border-radius:999px;padding-left:20px}
.desk-search .btn.primary{height:48px;border-radius:999px;padding:0 22px}
.desk-meter{position:absolute;right:16px;top:50%;transform:translateY(-50%);font-size:12px;font-weight:600;
  color:var(--text-3);font-variant-numeric:tabular-nums;pointer-events:none;transition:color .2s}
.desk-meter.ok{color:var(--ok)}
.desk-meter.ok::before{content:"✓ "}
.desk-hint{margin:0 0 0 20px;min-height:0;font-size:12.5px;color:var(--text-3)}
.desk-hint.err{color:var(--danger)}
.desk-hint:empty{display:none}
.desk-recent{display:inline-flex;align-items:baseline;gap:7px}
.desk-recent b{font-weight:600;color:var(--text)}
.desk-recent span{font-size:11.5px;color:var(--text-3);font-variant-numeric:tabular-nums}

/* Каскад появления */
.dk > *{animation:dk-rise .5s cubic-bezier(.2,.8,.2,1) both}
.dk > :nth-child(2){animation-delay:.06s}
.dk > :nth-child(3){animation-delay:.12s}
@keyframes dk-rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
html.no-motion .dk > *{animation:none}
@media(prefers-reduced-motion:reduce){.dk > *{animation:none}}

/* Скелет */
.dk-skel .sk{display:block;height:13px;border-radius:8px;
  background:linear-gradient(90deg,var(--surface-3) 0,var(--surface-2) 40%,var(--surface-3) 80%);background-size:250% 100%;
  animation:shim 1.3s linear infinite}
.dk-skel .sk-ava{width:54px;height:54px;border-radius:17px;flex-shrink:0}
.dk-skel .sk-col{flex:1;display:flex;flex-direction:column;gap:10px}
.dk-skel .sk-hero{display:flex;gap:24px;align-items:center;padding:24px;min-height:150px}
.dk-skel .sk-row{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:18px}
.dk-skel .sk-list{padding:22px;display:flex;flex-direction:column;gap:16px;min-height:220px}
.dk-skel .sk-cal{min-height:260px}
.dk-skel .sk-note{margin:0;text-align:center;font-size:12.5px;color:var(--text-3)}
@media(max-width:900px){.dk-skel .sk-row{grid-template-columns:1fr}.dk-skel .sk-cal{display:none}}

/* Не найдено / ошибка */
.desk-miss{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;padding:44px 20px;
  border:1px dashed var(--line-2);border-radius:24px;background:var(--surface)}
.desk-miss-ic{width:52px;height:52px;border-radius:17px;display:grid;place-items:center;background:var(--surface-3);color:var(--text-2);margin-bottom:6px}
.desk-miss-ic svg{width:24px;height:24px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round}
.desk-miss p{margin:0 0 8px;max-width:48ch;color:var(--text-2);font-size:14px;line-height:1.5}

/* Первый экран */
.dk-idle{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:28px;align-items:center;
  padding:34px;border:1px solid var(--line);border-radius:28px;background:var(--surface);animation:dk-rise .5s cubic-bezier(.2,.8,.2,1) both}
.dk-idle h2{margin:0 0 10px;font-family:var(--display);font-size:30px;font-weight:750;letter-spacing:-.035em;line-height:1.1;text-wrap:balance}
.dk-idle-l > p{margin:0 0 22px;font-size:15px;line-height:1.55;color:var(--text-2);max-width:46ch}
.dk-idle-pts{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}
.dk-idle-pts li{display:flex;align-items:center;gap:13px}
.dk-idle-ic{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent);flex-shrink:0}
.dk-idle-ic svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.dk-idle-pts b{display:block;font-size:14.5px;font-weight:650}
.dk-idle-pts i{display:block;font-style:normal;font-size:13px;color:var(--text-3)}
.dk-idle-demo{padding:24px;border-radius:22px;background:var(--surface-2);display:flex;flex-direction:column;gap:20px}
.dk-idle-cap{font-size:12px;font-weight:600;color:var(--text-3)}
.dk-idle-track{position:relative;height:56px;margin:0 12px}
.dk-idle-track::before{content:"";position:absolute;left:0;right:0;top:18px;height:4px;border-radius:4px;background:var(--line-2)}
.dk-idle-fill{position:absolute;left:0;top:18px;height:4px;border-radius:4px;width:0;
  background:linear-gradient(90deg,var(--accent),color-mix(in srgb,var(--accent) 45%,#7f5af0));animation:dk-idle-run 5s cubic-bezier(.5,0,.2,1) infinite}
@keyframes dk-idle-run{0%{width:0}70%,100%{width:100%}}
.dk-idle-dot{position:absolute;top:20px;width:16px;height:16px;border-radius:50%;background:var(--pc);border:3px solid var(--surface-2);
  transform:translate(-50%,-50%);animation:dk-idle-pop 5s cubic-bezier(.2,.9,.3,1.3) infinite;animation-delay:calc(var(--i) * .55s)}
.dk-idle-dot i{position:absolute;left:50%;top:22px;transform:translateX(-50%);font-style:normal;font-size:11px;font-weight:650;color:var(--text-2);white-space:nowrap}
@keyframes dk-idle-pop{0%{scale:.3;opacity:.2}8%{scale:1.3;opacity:1}14%,100%{scale:1;opacity:1}}
.dk-idle-ex{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dk-idle-card{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:12px 14px;border-radius:16px;border:1px solid var(--line);
  background:var(--surface);color:var(--text);font:inherit;text-align:left;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.dk-idle-card b{font-size:14px;font-weight:650}
.dk-idle-card span{font-size:12px;color:var(--text-3);font-variant-numeric:tabular-nums}
.dk-idle-card:hover{border-color:var(--line-2);box-shadow:0 4px 14px rgba(0,0,0,.06)}
.dk-idle-card::after{content:"Показать →";font-size:12px;font-weight:600;color:var(--accent);margin-top:4px}
html.no-motion .dk-idle-dot{animation:none}
html.no-motion .dk-idle-fill{animation:none;width:100%}
@media(prefers-reduced-motion:reduce){.dk-idle-fill,.dk-idle-dot{animation:none}.dk-idle-fill{width:100%}}
@media(max-width:900px){.dk-idle{grid-template-columns:1fr;padding:24px}}
@media(max-width:560px){
  .dk-idle{padding:20px;border-radius:22px}.dk-idle h2{font-size:24px}
  .dk-idle-ex{grid-template-columns:1fr}
  .desk-search-w{flex-basis:100%}
}


/* ══ Календарь по ИНН — bento, 27.09 ════════════════════════════════
   Мягкий структурализм: белые плитки в «двойной рамке» (тонкое кольцо
   вокруг + рассеянная тень), крупная типографика, пружинные кривые. */
:root{--spring:cubic-bezier(.32,.72,0,1);
  --tile-ring:0 0 0 6px color-mix(in srgb,var(--text) 2.4%,transparent),0 0 0 7px color-mix(in srgb,var(--text) 5.5%,transparent);
  --tile-shadow:0 30px 60px -38px rgba(24,40,80,.28),0 8px 18px -12px rgba(24,40,80,.08)}

/* Шапка: когда организация найдена, заголовок страницы — метка-капсула. */
.desk.has-res .desk-titles h1{display:inline-flex;align-items:center;gap:8px;height:26px;padding:0 12px;border-radius:999px;
  font-family:inherit;font-size:10.5px;font-weight:650;letter-spacing:.16em;text-transform:uppercase;color:var(--text-2);background:var(--surface-3)}
.desk.has-res .desk-titles h1::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent)}
.desk.has-res .desk-titles p{display:none}
.desk.has-res .desk-chips{margin-top:-6px}

.dk{gap:34px}
.dk > :not(.dk-id){animation:none}
.dk-id{border-bottom:0;padding:0 2px;gap:20px}
.dk-ava{width:68px;height:68px;border-radius:22px;font-size:30px;
  background:linear-gradient(150deg,var(--accent-soft),var(--surface));box-shadow:var(--tile-ring),inset 0 1px 0 rgba(255,255,255,.7)}
.dk-id h2{font-size:clamp(28px,3.2vw,40px);letter-spacing:-.045em;line-height:1.02}
.dk-id .desk-kvs{margin-top:10px}
.dk-id .desk-kv{font-size:13.5px}
.dk .desk-ghost{height:42px;padding:0 16px;border:0;background:var(--surface);box-shadow:var(--tile-ring);
  transition:transform .5s var(--spring),background .3s var(--spring)}
.dk .desk-ghost:hover{background:var(--surface-2)}
.dk .desk-ghost:active{transform:scale(.97)}

/* Плитки */
.dk-bento{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:30px}
.dk-tile{position:relative;min-width:0;border-radius:30px;background:var(--surface);padding:26px 28px;
  box-shadow:var(--tile-ring),var(--tile-shadow);overflow:hidden}
.dk-t-next{grid-column:span 7;grid-row:span 2;display:flex}
.dk-t-stats{grid-column:span 5}
.dk-t-queue{grid-column:span 5}
.dk-t-line{grid-column:1/-1;overflow:visible}

/* Ближайшая сдача */
.dk-t-next::before{content:"";position:absolute;right:-18%;top:-34%;width:78%;aspect-ratio:1;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle,color-mix(in srgb,var(--pc) 20%,transparent),transparent 64%)}
.dk-t-next .dk-hero-l{position:relative;flex:1;display:flex;flex-direction:column}
.dk-t-next .desk-here-k,.dk-t-queue .desk-here-k,.dk-tile .dk-line-k b{display:inline-flex;width:fit-content;align-items:center;height:24px;padding:0 11px;
  border-radius:999px;margin:0 0 18px;font-size:10.5px;font-weight:650;letter-spacing:.16em;text-transform:uppercase;color:var(--text-2);background:var(--surface-2)}
.dk-t-next .dk-hero-main{flex:1;flex-direction:column;align-items:flex-start;gap:20px}
.dk-t-next .dk-big{align-items:flex-end;gap:16px}
.dk-t-next .dk-big b{font-size:clamp(96px,10vw,148px);letter-spacing:-.07em;line-height:.74}
.dk-t-next .dk-big-m{gap:12px;padding-bottom:4px}
.dk-t-next .dk-big-m i{font-size:clamp(26px,2.6vw,36px);letter-spacing:-.035em}
.dk-t-next .dk-info{padding:0;border:0;flex:1;width:100%}
.dk-t-next .desk-lead{font-size:18px}
.dk-t-next .dk-info .desk-lead-n{font-size:15px;max-width:52ch;margin-top:8px}
.dk-t-next .dk-info .desk-cta{margin-top:auto;padding-top:26px;gap:10px;align-items:center;flex-wrap:wrap}
.dk-island{display:inline-flex;align-items:center;gap:14px;height:50px;padding:0 6px 0 24px;border-radius:999px;
  background:var(--text);color:var(--surface);font-size:15px;font-weight:650;text-decoration:none;white-space:nowrap;
  box-shadow:0 14px 30px -14px color-mix(in srgb,var(--text) 60%,transparent);transition:transform .6s var(--spring),box-shadow .6s var(--spring)}
.dk-island-ic{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--surface) 16%,transparent);
  transition:transform .6s var(--spring)}
.dk-island-ic svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.dk-island:hover .dk-island-ic{transform:scale(1.1);background:color-mix(in srgb,var(--surface) 24%,transparent)}
.dk-island:active{transform:scale(.98)}
.dk-ghost-btn{height:50px;padding:0 20px;border-radius:999px;border:0;background:transparent;color:var(--text);font:inherit;
  font-size:14.5px;font-weight:600;cursor:pointer;box-shadow:inset 0 0 0 1px var(--line-2);transition:background .4s var(--spring),transform .5s var(--spring)}
.dk-ghost-btn:hover{background:var(--surface-2)}
.dk-ghost-btn:active{transform:scale(.97)}

/* Кольцо и счётчики */
.dk-stats{display:flex;align-items:center;gap:26px;height:100%}
.dk-ring{position:relative;width:138px;height:138px;flex-shrink:0}
.dk-ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.dk-ring circle{fill:none;stroke-width:9}
.dk-ring-bg{stroke:var(--surface-3)}
.dk-ring-fg{stroke:var(--accent);stroke-linecap:round;stroke-dasharray:var(--dash) 100;transition:stroke-dasharray 1.4s var(--spring) .2s}
.dk-tile.rv:not(.in) .dk-ring-fg{stroke-dasharray:0 100}
.dk-ring-c{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.dk-ring-c b{font-family:var(--display);font-size:46px;font-weight:750;letter-spacing:-.05em;line-height:.9;font-variant-numeric:tabular-nums}
.dk-ring-c b.sm{font-size:22px}
.dk-ring-c i{font-style:normal;font-size:11.5px;color:var(--text-3);margin-top:5px;max-width:9ch;line-height:1.25}
.dk-nums{display:flex;flex-direction:column;gap:12px;min-width:0}
.dk-num{display:flex;align-items:baseline;gap:10px}
.dk-num b{font-family:var(--display);font-size:26px;font-weight:750;letter-spacing:-.04em;min-width:1.4em;font-variant-numeric:tabular-nums}
.dk-num span{font-size:13.5px;color:var(--text-2)}

/* Очередь */
.dk-t-queue .dk-queue{border:0;padding:0;margin:0}
.dk-t-queue .desk-here-k{margin-bottom:10px}
.dk-t-queue .dk-q{transition:background .35s var(--spring)}

/* Лента */
.dk-t-line .dk-line{margin:0;padding:0;border:0}
.dk-t-line .dk-line-h{margin-bottom:18px}
.dk-t-line .dk-line-k b{margin:0}
.dk-t-line .dk-track{height:112px}
.dk-t-line .dk-band{background:none;border-radius:0;border-left:1px dashed var(--line-2)}
.dk-t-line .dk-band:first-child{border-left:0}
.dk-t-line .dk-band i{top:0;left:12px;font-size:10.5px;font-weight:650;letter-spacing:.16em;text-transform:uppercase;color:var(--text-3)}
.dk-t-line .dk-rail{top:54px;height:6px;border-radius:6px;background:var(--surface-3)}
.dk-t-line .dk-track::after{content:"";position:absolute;left:0;right:0;top:68px;height:5px;pointer-events:none;
  background:repeating-linear-gradient(90deg,var(--line-2) 0 1px,transparent 1px var(--wk,7.6%))}
.dk-t-line .dk-now{top:57px;width:14px;height:14px}
.dk-t-line .dk-dot{top:57px}
.dk-t-line .dk-dot-l{top:calc(100% + 14px)}
.dk-t-line .dk-hair-t{top:-4px}
.dk-t-line .dk-seg{background:var(--surface-2)}

/* Повестка и календарь — те же плитки */
.dk-main{gap:30px}
.dk-agenda,.dk .desk-cal{border:0;border-radius:30px;box-shadow:var(--tile-ring),var(--tile-shadow)}
.dk-agenda{padding:22px 28px 16px}

/* Появление при прокрутке */
.rv{opacity:0;transform:translateY(28px);filter:blur(6px);
  transition:opacity .9s var(--spring) var(--d,0ms),transform 1s var(--spring) var(--d,0ms),filter .9s var(--spring) var(--d,0ms)}
.rv.in{opacity:1;transform:none;filter:none}
html.no-motion .rv{opacity:1;transform:none;filter:none;transition:none}
@media(prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;filter:none;transition:none}}

@media(max-width:1100px){
  .dk-t-next{grid-column:span 12;grid-row:auto}
  .dk-t-stats,.dk-t-queue{grid-column:span 6}
}
@media(max-width:768px){
  .dk-bento{gap:22px}
  .dk-t-stats,.dk-t-queue{grid-column:span 12}
  .dk-tile{padding:22px 20px;border-radius:26px}
  .dk-t-next .dk-big b{font-size:88px}
  .dk-stats{gap:18px}
  .dk-ring{width:112px;height:112px}
  .dk-ring-c b{font-size:36px}
  .dk-t-next .dk-info .desk-cta{padding-top:18px}
  .dk-island,.dk-ghost-btn{height:46px}
}

.dk-also{margin-top:22px;display:flex;flex-direction:column;gap:6px;max-width:560px}
.dk-also-k{font-size:12px;font-weight:600;color:var(--text-3);margin-bottom:2px}
.dk-also-r{display:flex;align-items:baseline;gap:12px;padding:11px 14px;border-radius:16px;border:0;background:var(--surface-2);
  color:var(--text);font:inherit;text-align:left;cursor:pointer;position:relative;transition:background .4s var(--spring)}
.dk-also-r::before{content:"";align-self:center;width:8px;height:8px;border-radius:50%;background:var(--pc);flex-shrink:0}
.dk-also-r b{font-weight:700;font-size:14px}
.dk-also-r span{font-size:13.5px;color:var(--text-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dk-also-r:hover{background:var(--surface-3)}
html.no-motion .dk-tile.rv:not(.in) .dk-ring-fg{stroke-dasharray:var(--dash) 100}
@media(prefers-reduced-motion:reduce){.dk-tile.rv:not(.in) .dk-ring-fg{stroke-dasharray:var(--dash) 100}}
@media(max-width:720px){.desk-top{flex-wrap:wrap}.desk-search-w{flex:1 1 100%;width:100%;max-width:100%}.desk-field{min-width:0}}


/* ══ Календарь по ИНН — шлифовка 27.09 ═════════════════════════════
   Одна шкала вместо разнобоя: дисплей 112 / 32, числа 44 / 28 / 24,
   заголовки 16–17, текст 14, подписи 13, метки 10.5. Кольца легче,
   кнопки тоньше, ритм отступов 24 / 28. */
:root{
  --tile-ring:0 0 0 4px color-mix(in srgb,var(--text) 1.8%,transparent),0 0 0 5px color-mix(in srgb,var(--text) 4.5%,transparent);
  --tile-shadow:0 24px 50px -34px rgba(24,40,80,.24),0 6px 14px -10px rgba(24,40,80,.07);
}
.desk.has-res .desk-top{align-items:center}
.desk.has-res .desk-chips{margin-top:-4px}
.desk-recent b{max-width:24ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.desk-chips .tchip{height:32px;display:inline-flex;align-items:center}

.dk{gap:28px}
.dk-id{align-items:flex-start;gap:18px}
.dk-ava{width:56px;height:56px;border-radius:18px;font-size:24px;margin-top:2px}
.dk-id h2{font-size:clamp(24px,2.3vw,32px);letter-spacing:-.035em;line-height:1.12;text-wrap:balance;max-width:28ch}
.dk-id .desk-kvs{margin-top:8px;gap:2px 16px}
.dk-id .desk-kv{font-size:13px}
.dk-id .desk-kv i{font-size:10px}
.dk-id .desk-place,.dk-id .desk-note{font-size:13px}
.dk-id .desk-extra{align-self:center;gap:8px}
.dk .desk-ghost{height:40px;padding:0 15px;font-size:13px;box-shadow:inset 0 0 0 1px var(--line-2),0 1px 2px rgba(24,40,80,.04)}

.dk-bento{gap:24px}
.dk-tile{padding:24px 26px;border-radius:28px}
.dk-t-next .desk-here-k,.dk-t-queue .desk-here-k,.dk-tile .dk-line-k b{height:22px;padding:0 10px;font-size:10.5px;letter-spacing:.14em;margin-bottom:16px}

/* Ближайшая сдача */
.dk-t-next .dk-hero-main{gap:18px}
.dk-t-next .dk-big{gap:14px}
.dk-t-next .dk-big b{font-size:clamp(84px,8vw,112px);line-height:.76}
.dk-t-next .dk-big-m{gap:10px;padding-bottom:2px}
.dk-t-next .dk-big-m i{font-size:clamp(24px,2.2vw,30px)}
.dk .desk-in{height:26px;display:inline-flex;align-items:center;padding:0 11px;font-size:12.5px}
.dk-t-next .desk-lead{font-size:17px;gap:8px}
.dk-t-next .desk-lead .desk-per{font-size:12px;font-weight:650;padding:3px 9px}
.dk-t-next .desk-more{font-size:13px}
.dk-t-next .desk-cond,.dk-row .desk-cond{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px}
.dk-t-next .dk-info .desk-lead-n{font-size:14.5px;line-height:1.5;margin-top:6px;max-width:54ch}
.dk-also{margin-top:18px;gap:6px}
.dk-also-k{font-size:12px}
.dk-also-r{padding:10px 14px;border-radius:14px}
.dk-also-r b{font-size:13.5px}
.dk-also-r span{font-size:13px}
.dk-t-next .dk-info .desk-cta{padding-top:22px;gap:8px}
.dk-island{height:48px;padding:0 5px 0 22px;font-size:14.5px;gap:12px}
.dk-island-ic{width:38px;height:38px}
.dk-ghost-btn{height:48px;padding:0 18px;font-size:14px}

/* Кольцо и счётчики */
.dk-stats{gap:28px}
.dk-ring{width:128px;height:128px}
.dk-ring circle{stroke-width:8}
.dk-ring-c b{font-size:44px}
.dk-ring-c i{font-size:11px;margin-top:4px}
.dk-nums{gap:10px}
.dk-num{gap:12px}
.dk-num b{font-size:24px;min-width:1.3em;text-align:right}
.dk-num span{font-size:13.5px}

/* Очередь */
.dk-q{padding:5px 8px}
.dk-q-c{font-size:14px}
.dk-q-n{font-size:12.5px}

/* Лента */
.dk-line-k span{font-size:13px}
.dk-t-line .dk-track{height:104px}
.dk-dot-l{font-size:11.5px;font-weight:650}

/* Повестка и календарь */
.dk-main{gap:24px}
.dk-agenda{padding:20px 26px 14px}
.dk .desk-tab{font-size:13.5px;height:34px;padding:0 14px}
.dk-bucket-h{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;font-weight:650;margin:22px 0 4px}
.dk-date b{font-size:28px}
.dk-date i{font-size:12px}
.dk-code{font-size:15px}
.dk-name{font-size:14px}
.dk .desk-cal{border-radius:28px;padding:20px 20px 14px}
.desk-cal-top b{font-size:16px}

@media(max-width:768px){
  .dk-id h2{font-size:24px}
  .dk-ava{width:48px;height:48px;border-radius:16px;font-size:21px}
  .dk-t-next .dk-big b{font-size:80px}
  .dk-ring{width:108px;height:108px}
  .dk-ring-c b{font-size:36px}
  .dk-tile{padding:20px 18px;border-radius:24px}
  .dk-island,.dk-ghost-btn{height:44px}
}
/* Вкладки повестки — одной строкой, лишнее прокручивается (27.09). */
.dk-agenda .desk-tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0 -6px 4px;padding:2px 6px}
.dk-agenda .desk-tabs::-webkit-scrollbar{display:none}
.dk-agenda .desk-tab{flex-shrink:0;white-space:nowrap}
.dk-num span{white-space:nowrap}
.dk-ring{width:clamp(108px,9vw,128px);height:clamp(108px,9vw,128px)}


/* ── Лента: склейка близких сроков, раскладка в пикселях (27.09) ── */
.dk-dots{position:absolute;inset:0}
.dk .dk-dot.multi{width:24px;height:24px;display:grid;place-items:center;background:var(--text)}
.dk .dk-dot.multi.soon{background:var(--accent)}
.dk-dot-n{font-size:10.5px;font-weight:750;color:var(--surface);line-height:1;font-variant-numeric:tabular-nums}
.dk-t-line .dk-dot-l{top:calc(100% + 12px)}

/* ── Повестка: заголовок дня, формы мягкими карточками ── */
.dk-day{grid-template-columns:56px minmax(0,1fr);gap:18px;padding:18px 12px;align-items:start}
.dk-bucket-h + .dk-day,.dk-list > .dk-bucket:first-child > .dk-day:first-child{border-top-color:transparent}
.dk-date{align-items:center;justify-content:center;width:56px;height:60px;border-radius:16px;padding:0;
  background:color-mix(in srgb,var(--pc,var(--accent)) 11%,var(--surface))}
.dk-date b{font-size:24px;line-height:1}
.dk-date i{margin-top:3px;font-size:11.5px;color:var(--text-2)}
.dk-date .dk-date-none{font-size:11px;text-align:center;line-height:1.25}
.dk-rows{gap:8px}
.dk-day-h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:2px 0 6px}
.dk-day-h b{font-size:16px;font-weight:700;letter-spacing:-.01em}
.dk-day-in{font-size:13px;font-weight:600;color:var(--text-3)}
.dk-day-in.near{color:var(--accent)}
.dk-day-n{margin-left:auto;font-size:12.5px;color:var(--text-3)}
.dk-row{padding:14px 16px;border-radius:18px;background:var(--surface-2);transition:background .35s var(--spring)}
.dk-row:hover{background:var(--surface-3)}
.dk-row::before{display:none}
.dk-row-top{gap:8px}
.dk-code{font-size:15px}
.dk-row .desk-per{font-size:12px;font-weight:650;padding:3px 9px}
.dk-row .desk-cond{background:var(--surface);box-shadow:inset 0 0 0 1px var(--line)}
.dk-name{margin-top:6px;font-size:14px;line-height:1.5;color:var(--text)}
.dk-row .desk-cond-why{font-size:13px;margin-top:4px}
.dk-row .desk-a{margin-top:8px;font-size:13px}
.dk-agenda .desk-tabs{border-bottom:0;padding-bottom:6px}
.dk-agenda .desk-tabs + *{margin-top:0}

/* ── Календарь: легенда внутри плитки ── */
.dk .desk-cal{display:flex;flex-direction:column;min-height:0}
.dk .desk-cal .dk-legend{margin-top:auto;padding:14px 4px 2px;border-top:1px solid var(--line);gap:6px 12px;font-size:11.5px}
.dk-aside{gap:0}

/* ── Подвал с источником ── */
.desk-foot{margin-top:4px;padding:16px 20px;border-radius:20px;background:var(--surface-2)}
.desk-foot p{margin:0 0 8px;font-size:12.5px;line-height:1.55;color:var(--text-3);max-width:90ch}
.desk-foot-l{display:flex;flex-wrap:wrap;gap:6px 18px}

@media(max-width:560px){
  .dk-day{grid-template-columns:44px minmax(0,1fr);gap:12px;padding:14px 4px}
  .dk-date{width:44px;height:50px;border-radius:13px}
  .dk-date b{font-size:20px}
  .dk-day-n{display:none}
  .dk-row{padding:12px 14px}
}
.dk .desk-cal .desk-cal-g{flex:none}
.dk .desk-cal .dk-legend{margin-top:14px}
@media(max-width:560px){.dk .dk-day{grid-template-columns:minmax(0,1fr);gap:0}.dk .dk-day > .dk-date{display:none}.dk .dk-day:not([data-iso]) > .dk-date{display:none}}
@media(max-width:560px){.dk .dk-day{margin:0;padding:14px 0}}


/* ══ Календарь по ИНН — спокойная версия, 27.09 ═════════════════════
   Без «двойных колец» и пятен: плитка — белая бумага, волосяная рамка
   1px и еле заметная тень. Шкала: название 26, дата 92, числа 40/22,
   текст 14, подписи 13, метки 10.5. Кнопки одной высоты. */
:root{--tile-ring:0 0 0 0 transparent;--tile-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 28px -18px rgba(16,24,40,.14)}
.dk .dk-tile,.dk .dk-agenda,.dk .desk-cal{border:1px solid var(--line);border-radius:24px;box-shadow:var(--tile-shadow)}
.dk-t-next::before{display:none}

/* Шапка организации */
.dk-id{display:flex;align-items:flex-start;gap:16px;padding:0}
.dk-ava{width:52px;height:52px;border-radius:16px;font-size:22px;margin-top:0;box-shadow:none;background:var(--accent-soft)}
.dk-id-main{flex:1 1 auto;min-width:0}
.dk-id-head{gap:10px}
.dk-id h2{font-size:26px;line-height:1.2;letter-spacing:-.03em;max-width:none}
.dk-id .desk-kvs{margin-top:6px;gap:2px 16px;align-items:baseline}
.dk-id .desk-place{margin:0}
.dk-id .desk-note{margin-top:2px}
.dk-id .desk-extra{margin-top:14px;align-self:auto;gap:8px}
.dk .desk-ghost{height:36px;padding:0 14px;font-size:13px;border:1px solid var(--line-2);box-shadow:none;background:var(--surface)}
.dk .desk-ghost:hover{background:var(--surface-2)}
.dk .desk-ghost svg{width:15px;height:15px}

/* Сетка плиток */
.dk{gap:24px}
.dk-bento{gap:16px}
.dk-main{gap:16px}
.dk-tile{padding:22px 24px}
.dk-t-next .desk-here-k,.dk-t-queue .desk-here-k,.dk-tile .dk-line-k b{margin-bottom:14px}

/* Ближайшая сдача */
.dk-t-next .dk-hero-main{gap:16px}
.dk-t-next .dk-big{gap:12px}
.dk-t-next .dk-big b{font-size:clamp(72px,6vw,92px);line-height:.78}
.dk-t-next .dk-big-m i{font-size:clamp(22px,1.8vw,26px)}
.dk-t-next .desk-lead{font-size:16px}
.dk-t-next .dk-info .desk-lead-n{font-size:14px;margin-top:6px}
.dk-also{margin-top:16px}
.dk-t-next .dk-info .desk-cta{padding-top:20px}
.dk-island,.dk-ghost-btn{height:44px}
.dk-island{padding:0 4px 0 20px;font-size:14px;box-shadow:none}
.dk-island-ic{width:36px;height:36px}
.dk-ghost-btn{padding:0 16px;font-size:14px}

/* Кольцо и счётчики */
.dk-stats{gap:24px}
.dk-ring{width:112px;height:112px}
.dk-ring circle{stroke-width:8}
.dk-ring-c b{font-size:38px}
.dk-ring-c i{font-size:11px}
.dk-num b{font-size:22px}
.dk-num span{font-size:13.5px}

/* Календарь */
.dk .desk-cal{padding:18px 18px 12px}

@media(max-width:768px){
  .dk-id h2{font-size:22px}
  .dk-ava{width:44px;height:44px;border-radius:14px;font-size:19px}
  .dk-t-next .dk-big b{font-size:72px}
  .dk-ring{width:100px;height:100px}
  .dk-ring-c b{font-size:32px}
  .dk-tile{padding:18px}
  .dk .desk-ghost{height:34px;font-size:12.5px}
}
@media(max-width:768px){.dk-id{flex-wrap:nowrap}.dk-id-main{flex:1 1 0}.dk-id .desk-extra{margin-left:-60px}.desk.has-res .desk-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:calc(var(--gutter,16px) * -1);padding-inline:var(--gutter,16px)}.desk.has-res .desk-chips::-webkit-scrollbar{display:none}.desk.has-res .desk-chips .tchip{flex-shrink:0}}
@media(max-width:768px){.dk-id .desk-extra{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-left:-60px;width:calc(100% + 60px);padding-bottom:2px}.dk-id .desk-extra::-webkit-scrollbar{display:none}.dk-id .desk-extra .desk-ghost{flex-shrink:0}}

/* Меню заголовка чата: базовое .top-title некликабельно (pointer-events:none),
   в режиме чата клик надо вернуть — иначе меню не открывается (27.09). */
.app.chat-mode .top-title.on{pointer-events:auto}
/* Логотип крупнее на 3px (27.09). */
.brand-name{font-size:19px}


/* ══ Календарь по ИНН — переустройство 27.09 ═══════════════════════
   Один показ на каждую мысль: ближайшая обязательная сдача, сводка
   (состав + фильтры), лента, повестка с календарём. Кольцо и очередь
   сняты — они повторяли героя и ленту. */
.dk-bento{grid-template-columns:repeat(12,minmax(0,1fr));align-items:stretch}
.dk-t-next{grid-column:span 8;grid-row:auto}
.dk-t-sum{grid-column:span 4}
.dk-t-next .dk-hero-main{flex-direction:row;align-items:flex-start;gap:28px;flex:none}
.dk-t-next .dk-big{flex-direction:column;align-items:flex-start;gap:10px;flex-shrink:0;min-width:128px}
.dk-t-next .dk-big b{font-size:clamp(72px,6vw,88px)}
.dk-t-next .dk-big-m{gap:8px}
.dk-t-next .dk-info{padding-left:28px;border-left:1px solid var(--line)}
.dk-t-next .dk-info .desk-cta{margin-top:0;padding-top:18px}
.dk-cond-note{display:flex;align-items:flex-start;gap:9px;margin-top:14px;padding:10px 12px;border:0;border-radius:14px;
  background:var(--surface-2);color:var(--text-2);font:inherit;font-size:13px;line-height:1.45;text-align:left;cursor:pointer;
  transition:background .35s var(--spring)}
.dk-cond-note:hover{background:var(--surface-3)}
.dk-cond-note b{color:var(--text);font-weight:650}
.dk-cond-ic{flex-shrink:0;width:16px;height:16px;margin-top:1px;color:var(--text-3)}
.dk-cond-ic svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round}

/* Сводка */
.dk-sum{display:flex;flex-direction:column;height:100%}
.dk-sum-cap{display:flex;align-items:baseline;gap:10px}
.dk-sum-cap b{font-family:var(--display);font-size:40px;font-weight:750;letter-spacing:-.045em;line-height:1;font-variant-numeric:tabular-nums}
.dk-sum-cap span{font-size:14px;color:var(--text-2)}
.dk-sum-bar{display:flex;gap:3px;height:8px;margin:14px 0 10px;border-radius:8px;overflow:hidden}
.dk-sum-bar span{flex-basis:0;background:var(--pc);min-width:6px}
.dk-sum-leg{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12.5px;color:var(--text-3)}
.dk-sum-leg span{display:inline-flex;align-items:center;gap:5px}
.dk-sum-leg span::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--pc)}
.dk-sum-leg b{color:var(--text);font-weight:650}
.dk-sum-rows{margin-top:auto;padding-top:16px;display:flex;flex-direction:column}
.dk-sum-r{display:grid;grid-template-columns:34px minmax(0,1fr) 16px;align-items:center;gap:8px;padding:9px 8px;margin:0 -8px;
  border:0;border-top:1px solid var(--line);border-radius:0;background:transparent;color:var(--text);font:inherit;text-align:left;cursor:pointer;
  transition:background .3s var(--spring)}
.dk-sum-r:first-child{border-top:0}
.dk-sum-r:hover{background:var(--surface-2);border-radius:10px}
.dk-sum-r b{font-size:18px;font-weight:750;font-variant-numeric:tabular-nums;text-align:right}
.dk-sum-r span{font-size:13.5px;color:var(--text-2)}
.dk-sum-r i{color:var(--text-3)}
.dk-sum-r i svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* Недавние ИНН: строка на первом экране, выпадающий список при результате */
.desk-search-w{position:relative}
.desk-search-w .desk-chips{margin-top:2px}
.desk.has-res .desk-search-w .desk-chips{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:30;margin:0;
  display:flex;flex-direction:column;align-items:stretch;gap:2px;padding:8px;border:1px solid var(--line);border-radius:18px;
  background:var(--surface);box-shadow:0 18px 40px -20px rgba(16,24,40,.25);
  opacity:0;pointer-events:none;transform:translateY(-4px);transition:opacity .2s var(--spring),transform .3s var(--spring)}
.desk.has-res .desk-search-w .desk-chips::before{content:"Недавние";padding:4px 10px 6px;font-size:11px;font-weight:600;color:var(--text-3)}
.desk.has-res .desk-search-w:focus-within .desk-chips{opacity:1;pointer-events:auto;transform:none}
.desk.has-res .desk-search-w .desk-chips .tchip{height:auto;min-height:38px;justify-content:space-between;border:0;background:transparent;
  border-radius:12px;padding:8px 10px;width:100%}
.desk.has-res .desk-search-w .desk-chips .tchip:hover{background:var(--surface-2)}
.desk.has-res .desk-search-w .desk-chips:empty{display:none}
.desk.has-res .desk-hint + .desk-chips{top:calc(100% + 6px)}

@media(max-width:1100px){
  .dk-t-next,.dk-t-sum{grid-column:span 12}
  .dk-sum-rows{margin-top:14px}
}
@media(max-width:640px){
  .dk-t-next .dk-hero-main{flex-direction:column;gap:14px}
  .dk-t-next .dk-big{flex-direction:row;align-items:flex-end;min-width:0}
  .dk-t-next .dk-info{padding-left:0;border-left:0}
  .desk.has-res .desk-search-w .desk-chips{position:static;opacity:1;pointer-events:auto;transform:none;display:none}
  .desk.has-res .desk-search-w:focus-within .desk-chips{display:flex}
}
.dk-t-sum .desk-here-k{display:inline-flex;width:fit-content;align-items:center;height:22px;padding:0 10px;border-radius:999px;margin:0 0 14px;font-size:10.5px;font-weight:650;letter-spacing:.14em;text-transform:uppercase;color:var(--text-2);background:var(--surface-2)}
@media(max-width:640px){.dk-t-next .desk-cta{flex-wrap:wrap}.dk-island{flex:1 1 100%;justify-content:space-between}.dk-t-next .dk-ghost-btn{flex:1 1 0}}


/* ══ Календарь по ИНН — типографика по DESIGN.md, 27.09 ═════════════
   Onest везде; начертания 400 / 500 / 650; обычный регистр без капса и
   разрядки (Sentence Case Rule). Шкала: заголовок страницы 26, дата 34,
   заголовок блока 16–18, текст 14, подписи 13, служебное 12. */

/* Шапка страницы: заголовок и поиск — одна линия, одна высота 44 */
.desk-top{align-items:center;gap:16px;min-height:44px}
.desk-titles h1,.desk.has-res .desk-titles h1{display:block;height:auto;padding:0;background:none;border-radius:0;
  font-family:var(--font);font-size:18px;font-weight:650;letter-spacing:-.01em;line-height:1.3;text-transform:none;color:var(--text)}
.desk.has-res .desk-titles h1::before{display:none}
.desk:not(.has-res) .desk-titles h1{font-size:26px;letter-spacing:-.02em;line-height:1.2}
.desk-titles p{margin:4px 0 0;font-size:14px;color:var(--text-3)}
.desk-field .desk-inn{height:44px;padding-left:18px;font-size:15px;font-weight:500;letter-spacing:.04em}
.desk-search .btn.primary{height:44px;padding:0 20px;font-size:14px;font-weight:600}
.desk-meter{font-size:12px;font-weight:500}
.desk-hint{font-size:12.5px;margin-left:18px}
.desk-recent b{font-weight:500}

/* Организация */
.dk-id{gap:14px;align-items:flex-start}
.dk-ava{width:48px;height:48px;border-radius:14px;font-family:var(--font);font-size:20px;font-weight:650}
.dk-id h2{font-family:var(--font);font-size:26px;font-weight:650;letter-spacing:-.02em;line-height:1.2}
.dk-id-head{min-height:48px;align-items:center}
.dk .desk-badge{height:22px;display:inline-flex;align-items:center;padding:0 9px;font-size:12px;font-weight:500}
.dk-id .desk-kvs{margin-top:4px;gap:2px 18px}
.dk-id .desk-kv{gap:5px;font-size:13px}
.dk-id .desk-kv i{font-size:12px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--text-3)}
.dk-id .desk-kv b{font-size:13px;font-weight:600}
.dk-id .desk-place,.dk-id .desk-note{font-size:13px;color:var(--text-3)}
.dk-id .desk-extra{margin-top:12px}
.dk .desk-ghost{font-size:13px;font-weight:500}

/* Подписи блоков — обычным регистром, без капсул */
.dk .desk-here-k,.dk-t-next .desk-here-k,.dk-t-sum .desk-here-k,.dk-t-queue .desk-here-k,.dk-tile .dk-line-k b{
  display:block;width:auto;height:auto;padding:0;margin:0 0 12px;border-radius:0;background:none;
  font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text-3)}
.dk-tile .dk-line-k b{margin:0;color:var(--text)}
.dk-line-k{gap:8px}
.dk-line-k span{font-size:13px;color:var(--text-3)}

/* Ближайшая сдача: «8 октября» — одна строка-заголовок */
.dk-t-next .dk-hero-main{flex-direction:column;align-items:stretch;gap:14px}
.dk-t-next .dk-big{flex-direction:row;align-items:baseline;flex-wrap:wrap;gap:10px;min-width:0}
.dk-t-next .dk-big b,.dk-t-next .dk-big-m i{font-family:var(--font);font-size:34px;font-weight:650;letter-spacing:-.025em;line-height:1.1}
.dk-t-next .dk-big-m{display:flex;flex-direction:row;align-items:baseline;gap:12px;padding:0}
.dk-t-next .dk-big-m .desk-in{align-self:center;height:24px;font-size:13px;font-weight:500}
.dk-t-next .dk-info{padding:0;border:0}
.dk-t-next .desk-lead{font-size:16px;gap:8px}
.dk-t-next .desk-lead b{font-weight:650}
.dk .desk-per,.dk-t-next .desk-lead .desk-per,.dk-row .desk-per{font-size:12px;font-weight:500;padding:3px 9px}
.dk .desk-more{font-size:13px;font-weight:400}
.dk-t-next .dk-info .desk-lead-n{font-size:14px;line-height:1.5;color:var(--text-2)}
.dk-cond-note{font-size:13px}
.dk-cond-note b{font-weight:600}
.dk-also-k{font-size:13px;font-weight:500}
.dk-also-r b{font-weight:600}
.dk-island{font-size:14px;font-weight:600}
.dk-ghost-btn{font-size:14px;font-weight:600}

/* Сводка */
.dk-sum-cap b{font-family:var(--font);font-size:34px;font-weight:650;letter-spacing:-.025em}
.dk-sum-cap span{font-size:14px}
.dk-sum-leg{font-size:12.5px}
.dk-sum-leg b{font-weight:600}
.dk-sum-r b{font-size:16px;font-weight:650}
.dk-sum-r span{font-size:14px}

/* Лента */
.dk-t-line .dk-band i{font-size:12px;font-weight:500;letter-spacing:0;text-transform:capitalize;color:var(--text-3)}
.dk-seg-b{font-size:13px;font-weight:500}
.dk-dot-l,.dk-t-line .dk-dot-l{font-size:12px;font-weight:500}
.dk-dot.soon .dk-dot-l{font-weight:600}
.dk-dot-n{font-weight:600}
.dk-hair-t{font-size:12px;font-weight:500}

/* Повестка */
.dk .desk-tab{font-size:13.5px;font-weight:500}
.dk .desk-tab em{font-style:normal;font-weight:500;color:var(--text-3)}
.dk .desk-tab.on em{color:var(--text-2)}
.dk-bucket-h{font-size:13px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text-3)}
.dk-day-h b{font-size:16px;font-weight:650}
.dk-day-in{font-size:13px;font-weight:500}
.dk-day-n{font-size:12.5px}
.dk-date b{font-family:var(--font);font-size:20px;font-weight:650;letter-spacing:-.02em}
.dk-date i{font-size:12px}
.dk-code{font-size:15px;font-weight:650}
.dk-name{font-size:14px}
.dk-row .desk-cond,.dk .desk-cond{font-size:12px;font-weight:500}
.dk-row .desk-cond-why{font-size:13px}
.dk-row .desk-a{font-size:13px;font-weight:500}

/* Календарь месяца */
.dk .desk-cal-top b{font-size:16px;font-weight:650}
.dk .desk-cal-dow{font-size:12px;font-weight:500}
.dk .desk-cal-n{font-size:13px;font-weight:500}
.dk .desk-cal-d.hit .desk-cal-n{font-weight:600}
.dk .dk-legend{font-size:12px}

@media(max-width:768px){
  .dk-id h2{font-size:22px}
  .dk-t-next .dk-big b,.dk-t-next .dk-big-m i{font-size:28px}
  .dk-sum-cap b{font-size:28px}
  .desk:not(.has-res) .desk-titles h1{font-size:22px}
}
.desk-chips .tchip,.desk-recent b{font-size:13px}
.desk-recent span{font-size:12px}
.dk-sum-leg{font-size:13px}
.dk-day-n{font-size:13px}
.dk .desk-cal .dk-legend{font-size:12px}


/* ── Ответ: одна точка от ожидания до конца (27.09) ─────────────────
   Пока ищем и печатаем (aria-busy), точка у «РосстатAI» мягко дышит
   кольцом; когда ответ готов — замирает. Цвет один, место одно. */
.think .orb{display:none}
.think{margin-top:2px;gap:0}
.msg.ai .msg-who i{position:relative;width:8px;height:8px;border-radius:50%;background:var(--text)}
.msg.ai[aria-busy="true"] .msg-who i::after{content:"";position:absolute;inset:-5px;border-radius:50%;
  border:1.5px solid var(--text);opacity:0;animation:who-ping 1.6s cubic-bezier(.2,.7,.3,1) infinite}
.msg.ai[aria-busy="true"] .msg-who i{animation:who-beat 1.6s ease-in-out infinite}
@keyframes who-ping{0%{transform:scale(.4);opacity:.45}100%{transform:scale(1.35);opacity:0}}
@keyframes who-beat{0%,100%{transform:scale(1)}50%{transform:scale(.8)}}
@media(prefers-reduced-motion:reduce){.msg.ai[aria-busy="true"] .msg-who i,.msg.ai[aria-busy="true"] .msg-who i::after{animation:none}}
html.no-motion .msg.ai[aria-busy="true"] .msg-who i,html.no-motion .msg.ai[aria-busy="true"] .msg-who i::after{animation:none}

/* ── Заголовок чата: подложка при наведении и открытом меню не вылезает
   влево за край — ровный отступ, текст сдвигается внутрь (27.09). */
.app.chat-mode .top-title{margin-left:4px}


/* ══ Календарь по ИНН — чистка 27.09 ════════════════════════════════ */

/* Шапка: строка «заголовок | поиск», линия, ниже организация */
.desk.has-res .desk-top{padding-bottom:18px;border-bottom:1px solid var(--line)}
.dk-ava{display:none}
.dk-id{display:flex;flex-wrap:wrap;align-items:center;gap:14px 24px;padding:0}
.dk-id-main{flex:1 1 520px;min-width:0}
.dk-id-head{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;min-height:0}
.dk-id h2{margin:0;padding:0}
.dk-id .desk-badge{margin:0;align-self:center}
.dk-id .desk-kvs{margin-top:8px;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 18px}
.dk-id .desk-note{margin:4px 0 0}
.dk-id > .desk-extra{flex:0 0 auto;display:flex;flex-wrap:wrap;gap:8px;margin:0;width:auto}
@media(max-width:768px){
  .dk-id > .desk-extra{flex:1 1 100%;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0;width:100%}
  .dk-id > .desk-extra::-webkit-scrollbar{display:none}
}

/* Лента: у «сегодня» остались размеры кольца из первой версии — бледная
   точка висела выше и левее линии */
.dk-now::after{left:auto;top:auto;width:auto;height:auto;background:none;box-shadow:none}

/* Сводка: строки на одной оси с «8 форм в перечне» */
.dk-sum-r{margin:0;padding:10px 0;grid-template-columns:28px minmax(0,1fr) 16px;border-radius:0}
.dk-sum-r:hover{background:none;border-radius:0}
.dk-sum-r:hover span{color:var(--text)}
.dk-sum-r b{text-align:left}

/* Календарь: высота по содержимому, легенда сразу под сеткой */
.dk .desk-cal{min-height:0}
.dk .desk-cal .dk-legend{margin-top:12px}

/* Повестка: месяц → день → карточки; один левый край, без плиток даты */
.dk-bucket{padding-top:4px}
.dk-bucket-h{display:flex;align-items:baseline;justify-content:space-between;margin:18px 0 10px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.dk-bucket:first-child .dk-bucket-h{margin-top:8px}
.dk-bucket-h span{font-size:13px;font-weight:500;color:var(--text-3)}
.dk-bucket-h em{font-style:normal;font-size:12px;color:var(--text-3)}
.dk-day,.dk .dk-day{display:block;padding:0;margin:0 0 18px;border:0;border-radius:0;background:none}
.dk-day.on .dk-day-h b{color:var(--accent)}
.dk-day > .dk-date{display:none}
.dk-day-h{display:flex;align-items:baseline;gap:10px;margin:0 0 8px}
.dk-day-h b{font-size:15px;font-weight:650}
.dk-day-n{display:none}
.dk-rows{gap:8px}
.dk-row{padding:14px 16px;border-radius:16px}
.dk-row-top{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px}
.dk .desk-per,.dk-row .desk-per,.dk-row .desk-cond,.dk .desk-cond,.dk-t-next .desk-lead .desk-per{
  display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;font-size:12px;font-weight:500;line-height:1;box-sizing:border-box}
.dk-row .desk-cond,.dk .desk-cond{background:var(--surface);box-shadow:inset 0 0 0 1px var(--line-2);color:var(--text-2)}
.dk-name{margin:6px 0 0}
.dk-row .desk-cond-why{margin:4px 0 0}
.dk-row .desk-a{margin-top:8px}
.dk-bucket.past .dk-day{opacity:.65}


/* ══ Заголовок страницы — одинаковый в календаре и каталоге (27.09) ══ */
.desk .desk-titles h1,.desk.has-res .desk-titles h1{font-size:26px;letter-spacing:-.02em;line-height:1.2}
.desk.has-res .desk-titles p{display:block}
.desk.has-res .desk-top{padding-bottom:0;border-bottom:0}
@media(max-width:768px){.desk .desk-titles h1,.desk.has-res .desk-titles h1{font-size:22px}}

/* ══ Каталог форм в дизайн-коде календаря по ИНН, 27.09 ══════════════
   Onest 400/500/650, обычный регистр, плитки с волосяной рамкой и мягкой
   тенью, капсулы 22/36/44, пружинные переходы, проявление при прокрутке. */
.cat-desk{gap:24px}
.cat-desk .desk-top{align-items:center;gap:16px}

/* Поиск в шапке */
.cat-search-w{flex:0 1 460px}
.cat-desk .cat-find{display:flex;gap:8px;padding:0;border:0;border-radius:0;background:none;box-shadow:none}
.cat-field{position:relative;flex:1;min-width:0;display:flex}
.cat-field-ic{position:absolute;left:16px;top:50%;transform:translateY(-50%);width:17px;height:17px;color:var(--text-3);pointer-events:none}
.cat-field-ic svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round}
.cat-desk .cat-find-q{flex:1;min-width:0;height:44px;padding:0 16px 0 42px;border-radius:999px;border:1px solid var(--line-2);
  background:var(--surface);font:inherit;font-size:14.5px;color:var(--text);outline:none;transition:border-color .3s var(--spring),box-shadow .3s var(--spring)}
.cat-desk .cat-find-q::placeholder{color:var(--text-3)}
.cat-desk .cat-find-q:focus{border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}
.cat-desk .cat-find .btn{height:44px;padding:0 20px;border-radius:999px;font-size:14px;font-weight:600}

/* Отрасли */
.cat-topics{gap:8px}
.cat-desk .cat-chip{height:36px;padding:0 14px;gap:7px;border-radius:999px;border:1px solid var(--line-2);background:var(--surface);
  font-size:13px;font-weight:500;color:var(--text-2);box-shadow:none;transition:background .3s var(--spring),color .3s var(--spring),border-color .3s var(--spring)}
.cat-desk .cat-chip svg{width:15px;height:15px}
.cat-desk .cat-chip:not(.on):hover{background:var(--surface-2);color:var(--text);border-color:var(--line-2)}
.cat-desk .cat-chip.on{background:var(--accent-soft);border-color:transparent;color:var(--accent)}
.cat-desk .cat-dd{border:1px solid var(--line);border-radius:18px;padding:6px;box-shadow:0 18px 40px -20px rgba(16,24,40,.25)}
.cat-desk .cat-dd-i{border-radius:12px;font-size:13.5px;font-weight:500}

/* Сводка */
.cat-desk .cat-stats{display:block;padding:22px 24px;border:1px solid var(--line);border-radius:24px;background:var(--surface);box-shadow:var(--tile-shadow)}
.cat-sum-h{display:flex;align-items:center;justify-content:space-between;gap:14px 24px;flex-wrap:wrap}
.cat-sum .dk-sum-cap b{font-family:var(--font);font-size:34px;font-weight:650;letter-spacing:-.025em;line-height:1;font-variant-numeric:tabular-nums}
.cat-sum .dk-sum-cap span{font-size:14px;color:var(--text-2)}
.cat-seg{display:inline-flex;flex-wrap:nowrap;gap:2px;padding:3px;border-radius:999px;background:var(--surface-2);max-width:100%;overflow-x:auto;scrollbar-width:none}
.cat-seg::-webkit-scrollbar{display:none}
.cat-desk .cat-seg .cat-stat{all:unset;box-sizing:border-box;display:inline-flex;align-items:center;gap:7px;height:32px;padding:0 13px;border-radius:999px;
  font-size:13px;font-weight:500;color:var(--text-2);cursor:pointer;white-space:nowrap;flex-shrink:0;
  transition:background .3s var(--spring),color .3s var(--spring),transform .08s var(--ease)}
.cat-desk .cat-seg .cat-stat:active{transform:scale(.97)}
.cat-desk .cat-seg .cat-stat:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.cat-desk .cat-seg .cat-stat::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--pc);flex-shrink:0}
.cat-desk .cat-seg .cat-stat.per-all::before{display:none}
.cat-desk .cat-seg .cat-stat em{font-style:normal;font-weight:500;color:var(--text-3);font-variant-numeric:tabular-nums}
.cat-desk .cat-seg .cat-stat:hover{color:var(--text)}
.cat-desk .cat-seg .cat-stat.on{background:var(--surface);color:var(--text);box-shadow:0 1px 3px rgba(16,24,40,.08)}
.cat-desk .cat-seg .cat-stat.on em{color:var(--text-2)}
.cat-sum-bar{margin:18px 0 0}
.cat-sum-bar span{transition:opacity .4s var(--spring)}
.cat-sum-bar span.dim{opacity:.22}

/* Панель над списком */
.cat-desk .cat-bar{display:flex;align-items:center;justify-content:space-between;gap:10px 16px;flex-wrap:wrap;margin:0}
.cat-desk .cat-bar-l{font-size:13px;font-weight:500;color:var(--text-3)}
.cat-desk .cat-bar-r{gap:8px}
.cat-desk .cat-pin{height:36px;padding:0 14px;border-radius:999px;border:1px solid var(--line-2);background:var(--surface);
  font:inherit;font-size:13px;font-weight:500;color:var(--text-2);cursor:pointer;transition:background .3s var(--spring),color .3s var(--spring)}
.cat-desk .cat-pin:hover{background:var(--surface-2);color:var(--text);border-color:var(--line-2)}
.cat-desk .cat-pin.on{background:var(--warn-soft);border-color:transparent;color:var(--warn)}
.cat-desk .cat-sort-lab{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--text-3)}
.cat-desk .cat-sort{height:36px;padding:0 34px 0 14px;border-radius:999px;border:1px solid var(--line-2);background-color:var(--surface);
  font:inherit;font-size:13px;font-weight:500;color:var(--text);cursor:pointer;appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 12px center;background-size:14px}
.cat-desk .cat-views{padding:3px;gap:2px;border:0;border-radius:999px;background:var(--surface-2)}
.cat-desk .cat-view{width:34px;height:30px;border-radius:999px;color:var(--text-3)}
.cat-desk .cat-view:hover{color:var(--text)}
.cat-desk .cat-view.on{background:var(--surface);color:var(--text);box-shadow:0 1px 3px rgba(16,24,40,.08)}

/* Карточки */
.cat-desk .cat-grid{gap:16px}
.cat-desk .cat-card,.cat-desk .cat-card2{border:1px solid var(--line);border-radius:20px;background:var(--surface);box-shadow:var(--tile-shadow);
  transition:border-color .35s var(--spring),box-shadow .45s var(--spring)}
.cat-desk .cat-card2::before{display:none}
.cat-desk .cat-card:hover,.cat-desk .cat-card2:hover{border-color:var(--line-2);box-shadow:0 1px 2px rgba(16,24,40,.05),0 18px 36px -22px rgba(16,24,40,.22)}
.cat-desk .cat-card2 .cat-card-hit{padding:18px 20px 16px;gap:8px}
.cat-desk .cat-card2 .cat-card-id{margin-top:2px;gap:10px}
.cat-desk .cat-card2 .cat-card-id b.cat-card-code{font-family:var(--font);font-size:20px;font-weight:650;letter-spacing:-.02em;line-height:1.2}
.cat-desk .cat-card2 .cat-card-id i{font-size:12px}
.cat-desk .cat-card2 .cat-card-n{font-size:14px;line-height:1.5;color:var(--text)}
.cat-desk .cat-card2 .cat-card-f{border-top:1px solid var(--line);padding-top:12px}
.cat-desk .cat-card2 .cat-card-due{font-size:13px;color:var(--text-3)}
.cat-desk .cat-card-ask{height:32px;font-size:13px;font-weight:500;border-color:var(--line-2)}
.cat-desk .desk-per,.cat-desk .retired{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;font-size:12px;font-weight:500;line-height:1}
.cat-desk .cat-star{width:28px;height:28px;border-radius:999px}

/* Список */
.cat-desk .cat-lines{border:1px solid var(--line);border-radius:24px;box-shadow:var(--tile-shadow);overflow:hidden}
.cat-desk .cat-line{padding:14px 18px;font-size:14px;transition:background .3s var(--spring)}
.cat-desk .cat-line:hover{background:var(--surface-2)}
.cat-desk .cat-line .desk-c1 b{font-size:15px;font-weight:650}
.cat-desk .cat-line .desk-c1 i{font-size:12px;font-style:normal;color:var(--text-3)}
.cat-desk .cat-line .desk-c2 p{font-size:14px;color:var(--text)}
.cat-desk .cat-line .desk-c4{font-size:13px;color:var(--text-3)}
.cat-desk .cat-line .desk-a{font-size:13px;font-weight:500}

/* Скелет */
.cat-skel{display:flex;flex-direction:column;gap:10px;min-height:190px;padding:20px}
.cat-desk .dk-skel .sk{display:block;height:13px;border-radius:8px;
  background:linear-gradient(90deg,var(--surface-3) 0,var(--surface-2) 40%,var(--surface-3) 80%);background-size:250% 100%;animation:shim 1.3s linear infinite}

/* Окно формы — та же шкала */
.catm2 .catmodal-t b{font-family:var(--font);font-size:28px;font-weight:650;letter-spacing:-.025em;line-height:1.15}
.catm2 .catmodal-t h2{font-size:14.5px;font-weight:400}
.catm2 .desk-per,.catm2 .retired{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;font-size:12px;font-weight:500}
.catm-okud{height:22px;padding:0 9px;align-items:center}
.catm-okud i{font-size:12px;font-weight:400;letter-spacing:0;color:var(--text-3)}
.catm-okud b,.catm2 .catmodal-t .catm-okud b{font-size:12px;font-weight:600}
.catm-fact i{font-size:12px}
.catm-fact b{font-size:14px;font-weight:500}
.catm-who h3,.catm-asks h3{font-size:13px;font-weight:500;color:var(--text-3)}
.catm-who li{font-size:14px}
.catm-ask{font-size:13px}
.catm-body2 .cat-more-acts .btn.primary{height:44px;padding:0 20px;border-radius:999px;font-size:14px;font-weight:600}
.catm-act{height:44px;font-size:14px;font-weight:600;border-color:var(--line-2)}

@media(max-width:1100px){.cat-desk .cat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:720px){
  .cat-desk .desk-top{flex-wrap:wrap}
  .cat-search-w{flex:1 1 100%}
  .cat-sum-h{flex-direction:column;align-items:flex-start}
  .cat-seg{width:100%}
  .cat-desk .cat-stats{padding:18px}
  .cat-desk .cat-grid{grid-template-columns:1fr}
  .cat-desk .cat-bar{align-items:flex-start}
  .cat-desk .cat-topics{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  .cat-desk .cat-chip{flex-shrink:0}
}
/* Название организации — на ступень ниже заголовка страницы (27.09) */
.dk-id h2{font-size:22px;letter-spacing:-.015em}
.desk.has-res .desk-out{margin-top:8px}
@media(max-width:768px){.dk-id h2{font-size:20px}}
.catm2::before{display:none}
@media(max-width:720px){.desk .desk-top,.cat-desk .desk-top{align-items:stretch}.cat-desk .cat-find{flex-direction:row}.cat-desk .cat-find .btn{flex:none;min-height:44px}}

/* «Сдать отчёт» — тот же серый токен, что у «Показать» (btn primary), а
   не жёстко чёрный: одна кнопка на странице не должна выделяться цветом,
   которого больше нигде нет (27.09).*/
.dk-island{background:var(--brand-solid);color:var(--brand-solid-fg);box-shadow:var(--sh-sm)}
.dk-island-ic{background:color-mix(in srgb,var(--brand-solid-fg) 12%,transparent)}
.dk-island:hover .dk-island-ic{background:color-mix(in srgb,var(--brand-solid-fg) 20%,transparent)}
.dk-island:hover{box-shadow:var(--sh)}


/* ══ Каталог форм: правки 27.09 ══════════════════════════════════════ */

/* Шапка каталога появляется так же гарантированно, как блоки календаря —
   .dk > * запускает CSS-анимацию сразу при отрисовке, без ожидания
   IntersectionObserver. Сетку карточек (out) сюда не включаем: у неё
   свой, покарточечный reveal при прокрутке. */
.cat-desk.dk{gap:24px}
.cat-desk.dk > *{animation:dk-rise .5s cubic-bezier(.2,.8,.2,1) both}
.cat-desk.dk > :nth-child(2){animation-delay:.06s}
.cat-desk.dk > :nth-child(3){animation-delay:.12s}
.cat-desk.dk > :nth-child(4){animation-delay:.18s}
.cat-desk.dk > .desk-out{animation:none}

/* «Избранные сверху» — слева, отдельной кнопкой со звездой; счётчик (если
   есть) — рядом тихим текстом. Раньше левая половина панели пустовала. */
.cat-bar-l{display:flex;align-items:center;gap:14px;min-height:36px}
.cat-desk .cat-pin{display:inline-flex;align-items:center;gap:7px}
.cat-pin-ic{width:15px;height:15px;color:var(--warn);flex-shrink:0}
.cat-pin-ic svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;transition:fill .3s var(--spring)}
.cat-pin.on .cat-pin-ic svg{fill:currentColor}
.cat-bar-count{font-size:13px;color:var(--text-3)}

/* Окно формы — прямоугольник по горизонтали (27.09): исполнитель и факты
   — в правой колонке фиксированной ширины; описание и вопросы — в левой,
   которая просто занимает остаток. Обе колонки — независимые вертикальные
   потоки, поэтому длина описания или число фактов у формы никогда не
   сдвигают вторую колонку. Действия — полосой внизу, прилипшей к краю. */
.catm2{width:min(880px,94vw)}
@media(min-width:760px){.catm2{max-height:min(88vh,680px)}}
@media(max-width:759px){.catm2{width:min(560px,94vw)}}


/* ══ Окно формы, 27.09 (3): паспорт справа во всю высоту ═════════════
   Прибитая шапка над прокруткой держала пустым правый верхний угол и не
   уезжала при прокрутке. Теперь всё окно — одна прокрутка: слева код,
   название, «Кто сдаёт», вопросы и прилипшая полоса действий; справа —
   серая паспортная панель во всю высоту (фон полосой на самом скролл-
   контейнере, поэтому тянется до низа при любой длине левой части). В её
   верхней строке — бейджи и закрытие, на одной линии с кодом формы. */
.catm2 .catmodal-h{display:none}
.catm2 .catmodal-body{padding:0;display:block;flex:1 1 auto;min-height:0;
  scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}
.catm2 .catm-body2{gap:0}
.catm-col-l{padding:26px 28px 0;gap:18px}
.catm-hd{display:flex;flex-direction:column;gap:8px}
.catm-code{font-family:var(--font);font-size:28px;font-weight:650;letter-spacing:-.025em;line-height:1.15;color:var(--text)}
.catm-name{margin:0;max-width:62ch;font-size:14.5px;line-height:1.45;color:var(--text-2);text-wrap:pretty}
.catm-col-r{padding:26px 20px 24px;gap:10px;box-sizing:border-box}
.catm-col-r .catm-facts{gap:10px}
.catm-aside-top{display:flex;align-items:flex-start;gap:8px;min-height:32px;margin-bottom:4px}
.catm-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;min-width:0;min-height:32px}
.catm-x{margin-left:auto;width:32px;height:32px;border-radius:50%;border:0;flex-shrink:0;display:grid;place-items:center;
  background:transparent;color:var(--text-3);cursor:pointer;transition:background var(--dur,.2s),color var(--dur,.2s)}
.catm-x:hover{background:var(--surface-3);color:var(--text)}
.catm-x svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round}
.catm-col-r .catm-okud{background:var(--surface)}
.catm-body2 .cat-more-acts{margin:auto -28px 0;padding:14px 28px 18px}
@media(min-width:760px){
  .catm2 .catmodal-body{background:linear-gradient(to left,var(--surface-2) 304px,var(--surface) 304px)}
  .catm2 .catm-body2{flex-direction:row}
  .catm-col-l{flex:1 1 auto;min-width:0}
  .catm-col-r{flex:0 0 304px;position:sticky;top:0;align-self:flex-start}
  /* Плитки белые на серой панели, с той же тенью, что у плиток календаря. */
  .catm-col-r .catm-fact,.catm-col-r .ct-card{background:var(--surface);box-shadow:var(--tile-shadow)}
  .catm-col-r .catm-fact-ic{background:var(--surface-2)}
  .catm-col-r .catm-fact.wide{background:color-mix(in srgb,var(--pc) 9%,var(--surface))}
  .catm-col-r .catm-fact.wide .catm-fact-ic{background:var(--surface)}
  .catm-col-r .catm-exec-sk .catm-fact-ic{background:var(--surface-3)}
}
/* Телефон: одна колонка. Верхняя строка с бейджами и закрытием прилипает
   к верху, дальше код и название, срок и факты, исполнитель, описание. */
@media(max-width:759px){
  .catm2 .catm-body2{flex-direction:column;gap:16px;padding:0 18px}
  .catm-col-l,.catm-col-r{display:contents}
  .catm-aside-top{order:0;position:sticky;top:0;z-index:2;margin:0 -18px -8px;padding:14px 18px 8px;background:var(--surface)}
  .catm-hd{order:1}
  .catm-retired{order:2}
  .catm-col-r .catm-facts{order:3}
  .catm-col-r .ct-card{order:4}
  .catm-who{order:5}
  .catm-asks{order:6}
  .catm-body2 .cat-more-acts{order:9;margin:0 -18px;padding:12px 18px 16px}
}


/* ══ Анимация логотипа на старте (27.09) ══════════════════════════════
   Перенос бренд-ролика «Росстат AI Logo Animation» (React, 1920×1080)
   на чистый CSS под размер заголовка. Сцены те же: бирюзовая точка
   загорается у верхнего правого угла AI, камера чуть отъезжает, буквы
   «Росстат» поднимаются из-под базовой линии по очереди, точка гаснет
   и кругом раскрывает градиентное «AI», по AI проходит блик. Без
   анимации (no-motion / reduced-motion) — сразу финальный кадр. */
.hero h1.logo-anim{display:flex;justify-content:center;align-items:flex-end;gap:.3em;
  animation:la-cam 1.4s cubic-bezier(.65,0,.35,1) .1s both}
.la-word{display:inline-flex}
.la-l{display:inline-block;overflow:hidden;padding-bottom:.08em;margin-bottom:-.08em}
.la-l i{display:inline-block;font-style:normal;
  animation:la-rise .6s cubic-bezier(.22,1,.36,1) both;animation-delay:calc(.4s + var(--i) * .07s)}
.la-ai{position:relative;display:inline-block}
.hero h1.logo-anim em{display:inline-block;
  background-image:linear-gradient(105deg,transparent 38%,rgba(255,255,255,.75) 50%,transparent 62%),var(--grad);
  background-size:300% 100%,100% 100%;background-position:150% 0,0 0;background-repeat:no-repeat;
  -webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;
  animation:la-reveal .75s cubic-bezier(.65,0,.35,1) 1.3s both,la-shine .9s cubic-bezier(.65,0,.35,1) 2.3s both}
.la-dot,.la-ring{position:absolute;left:calc(100% + .1em);top:.14em;border-radius:50%;pointer-events:none;opacity:0}
.la-dot{width:.16em;height:.16em;margin:-.08em 0 0 -.08em;background:#18c0b8;
  box-shadow:0 0 0 .09em rgba(24,192,184,.25);animation:la-dot 1.65s cubic-bezier(.22,1,.36,1) .1s both}
.la-ring{width:1.6em;height:1.6em;margin:-.8em 0 0 -.8em;border:1.5px solid #18c0b8;
  animation:la-ring .8s cubic-bezier(.22,1,.36,1) 1.25s both}
@keyframes la-cam{from{transform:scale(1.07)}to{transform:none}}
@keyframes la-rise{from{transform:translateY(110%)}to{transform:none}}
@keyframes la-reveal{from{clip-path:circle(0 at calc(100% + .1em) .14em)}to{clip-path:circle(2.4em at calc(100% + .1em) .14em)}}
@keyframes la-shine{from{background-position:150% 0,0 0}to{background-position:-50% 0,0 0}}
@keyframes la-dot{0%{opacity:0;transform:scale(0)}
  22%{opacity:1;transform:scale(1.25)}30%{opacity:1;transform:scale(1)}
  72%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.3)}}
@keyframes la-ring{0%{opacity:0;transform:scale(.1)}8%{opacity:.6}100%{opacity:0;transform:scale(1.4)}}
html.no-motion .hero h1.logo-anim,html.no-motion .logo-anim *{animation:none!important}
@media(prefers-reduced-motion:reduce){.hero h1.logo-anim,.logo-anim *{animation:none!important}}

/* Исполнитель — тем же оттенком периода, что плитка срока (27.09): два
   главных ответа окна — «когда» и «кому звонить» — выделены одинаково. */
.catm2 .catm-col-r .ct-card{background:color-mix(in srgb,var(--pc) 8%,var(--surface))}
.catm2 .catm-col-r .ct-card .catm-fact-ic{background:var(--surface)}
.catm2 .catm-col-r .ct-rows{border-top-color:color-mix(in srgb,var(--pc) 18%,var(--line))}

/* Окно формы (27.09): цветом выделена только карточка исполнителя — срок
   стал обычной белой плиткой, как периодичность и приказ. Кнопка «Помочь
   с заполнением» — капсулой .dk-island, как «Сдать отчёт». */
.catm2 .catm-col-r .catm-fact.wide{background:var(--surface)}
.catm2 .catm-col-r .catm-fact.wide .catm-fact-ic{background:var(--surface-2)}
@media(max-width:759px){.catm2 .catm-col-r .catm-fact.wide{background:var(--surface-2)}.catm2 .catm-col-r .catm-fact.wide .catm-fact-ic{background:var(--surface)}}
.catm-body2 .cat-more-acts .dk-island{border:0;font:inherit;font-size:14px;font-weight:600;cursor:pointer}


/* ══ Напоминания на почту (27.09) ══════════════════════════════════
   Кнопка — тот же призрак, что «Как заполнить»; включённое состояние —
   мягкая заливка периода. Панель раскрывается внутри плитки ближайшей
   сдачи, под кнопками: поле и капсула в одну строку. */
.dk-remind-b{display:inline-flex;align-items:center;gap:8px}
.dk-remind-b svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.dk-remind-b.on{background:color-mix(in srgb,var(--pc,var(--accent)) 10%,var(--surface))}
.dk-remind{margin-top:14px;padding:14px 16px;border-radius:18px;background:var(--surface-2);display:flex;flex-direction:column;gap:10px;
  animation:dk-rise .35s cubic-bezier(.2,.8,.2,1) both}
.dk-remind-t{margin:0;font-size:13.5px;line-height:1.5;color:var(--text-2)}
.dk-remind-row{display:flex;gap:8px;align-items:center}
.dk-remind-in{flex:1 1 auto;min-width:0;height:44px;padding:0 16px;border-radius:999px;border:1px solid var(--line-2);
  background:var(--surface);color:var(--text);font:inherit;font-size:14px;outline:none;transition:border-color .2s,box-shadow .2s}
.dk-remind-in:focus{border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}
.dk .dk-remind-go{height:44px;padding:0 20px;border:0;font:inherit;font-size:14px;font-weight:600;cursor:pointer;flex-shrink:0}
.dk-remind-go:disabled{opacity:.6;cursor:default}
.dk-remind-err{margin:0;min-height:0;font-size:12.5px;color:var(--danger)}
.dk-remind-err:empty{display:none}
html.no-motion .dk-remind{animation:none}
@media(max-width:480px){.dk-remind-row{flex-direction:column;align-items:stretch}.dk .dk-remind-go{width:100%}}


/* ══ «Пропустили срок?» (27.09) ══════════════════════════════════════
   То же окно-паспорт: слева ситуация и шаги, справа вилка штрафа крупно,
   дата срока и исполнитель. Сегменты — как вкладки календаря. */
.catm-late-link{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:2px;padding:10px 4px 2px;
  border:0;background:none;color:var(--text-2);font:inherit;font-size:13px;cursor:pointer;text-align:left;transition:color var(--dur,.2s)}
.catm-late-link:hover{color:var(--text)}
.catm-late-link svg{width:15px;height:15px;flex-shrink:0;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.desk-late{color:var(--text-3)}
.dk-row .desk-a.desk-late{margin-left:16px}
.late-cta{display:inline-flex;align-items:center;gap:8px;margin:12px 0 4px;height:38px;padding:0 16px;border-radius:999px;
  border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:inherit;font-size:13.5px;font-weight:500;cursor:pointer;
  transition:background var(--dur,.2s)}
.late-cta:hover{background:var(--surface-2)}
.late-cta svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;color:var(--text-3)}
.late-sit,.late-steps{display:flex;flex-direction:column;gap:10px}
.late-sit h3,.late-steps h3{margin:0;font-size:13px;font-weight:500;color:var(--text-3)}
.late-seg{display:inline-flex;flex-wrap:wrap;gap:4px;padding:4px;border-radius:999px;background:var(--surface-2);align-self:flex-start}
.late-seg button{height:34px;padding:0 14px;border:0;border-radius:999px;background:transparent;color:var(--text-2);font:inherit;font-size:13.5px;
  cursor:pointer;transition:background var(--dur,.2s),color var(--dur,.2s)}
.late-seg button.on{background:var(--surface);color:var(--text);font-weight:500;box-shadow:0 1px 2px rgba(16,24,40,.08)}
.late-date{display:flex;align-items:center;gap:10px;font-size:13.5px;color:var(--text-2)}
.late-date input{height:36px;padding:0 12px;border-radius:12px;border:1px solid var(--line-2);background:var(--surface);color:var(--text);font:inherit}
.late-steps ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px;counter-reset:st}
.late-steps li{position:relative;padding-left:36px;counter-increment:st;display:flex;flex-direction:column;gap:2px}
.late-steps li::before{content:counter(st);position:absolute;left:0;top:0;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  background:color-mix(in srgb,var(--pc,var(--accent)) 12%,var(--surface));color:var(--pc,var(--accent));font-size:12px;font-weight:650}
.late-steps li b{font-size:14px;font-weight:500;color:var(--text)}
.late-steps li span{font-size:13.5px;line-height:1.5;color:var(--text-2)}
.late-fine{display:flex;flex-direction:column;gap:4px;padding:16px;border-radius:16px;background:var(--surface);box-shadow:var(--tile-shadow)}
.late-fine i{font-style:normal;font-size:12px;color:var(--text-3)}
.late-fine b{font-size:24px;font-weight:650;letter-spacing:-.02em;color:var(--text);font-variant-numeric:tabular-nums}
.late-fine span{font-size:12.5px;color:var(--text-3)}
.late-back{display:inline-flex;align-items:center;gap:4px;cursor:pointer}
.late-back svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.catm2 .late-chip{background:var(--surface);color:var(--text-2)}
@media(max-width:759px){
  .late-fine{order:3;background:var(--surface-2);box-shadow:none}
  .late-sit{order:4}.late-steps{order:5}
  /* Сегменты — ровной сеткой во всю ширину: «ИП» не уезжает второй строкой. */
  .late-seg{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;align-self:stretch;border-radius:16px}
  .late-seg button{height:auto;min-height:36px;padding:6px 8px;font-size:13px;line-height:1.2;border-radius:12px}
}

/* В окне просрочки на телефоне исполнитель — после шагов: третий шаг на него и ссылается. */
@media(max-width:759px){.catm-late .catm-col-r .ct-card{order:6}}


/* ══ Мобильный аудит (27.09) ══════════════════════════════════════════
   1. Системная подсветка касания — прямоугольник поверх скруглённых
      кнопок («на секунду острые углы»). Гасим везде, а обратную связь
      даёт свой :active: у кнопок без собственного — лёгкое затемнение.
   2. iOS приближает страницу, если у поля ввода шрифт меньше 16 px, и не
      отдаляет обратно. На сенсорных экранах поля — 16 px. */
html{-webkit-tap-highlight-color:transparent}
@media (hover:none){
  button:not(:disabled):active,a[href]:active,[role="button"]:active,summary:active{opacity:.82}
  input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),select,textarea{font-size:16px!important}
}

/* Мобильный аудит (27.09): старт на телефоне.
   — «Часто спрашивают»: не один вопрос на всю ширину, а три столбиком,
     каждый с зоной касания 36 px.
   — Шапка: «Дневник разработки» уходит (он есть в меню и настройках),
     кнопки шапки — не ниже 40 px, чтобы попадать пальцем. */
@media(max-width:560px){
  .chips,.start>.chips{height:auto;overflow:visible;flex-direction:column;align-items:center;row-gap:2px}
  .chips .chip:nth-child(n+4){display:none}
  .chips .chip{min-height:36px;font-size:13px;padding:6px 10px}
  .pill-diary{display:none}
  .topbar .user{min-height:40px}
}
@media(max-width:560px){
  .consent-bar-actions .btn{min-height:40px}
  .topbar .theme-sw{min-height:36px}
}

/* Шапка страницы инструмента на телефоне (27.09): меню, «назад»,
   переключатель темы, заголовок, колокольчик и «Гость» не помещались —
   заголовок заезжал под колокольчик. Тема остаётся в настройках; заголовок
   обрезается многоточием. */
@media(max-width:560px){
  .app.page-mode .topbar .theme-sw{display:none}
  .top-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
}

/* Карточка каталога на сенсорном экране (27.09): «Как заполнить» на
   десктопе всплывает по наведению поверх срока; без наведения она стояла
   поверх текста всегда. Здесь — обычной строкой под сроком. */
@media (hover:none){
  .cat-card2 .cat-card-f{flex-wrap:wrap}
  .cat-card2 .cat-card-ask{position:static;transform:none;opacity:1;box-shadow:none;height:36px}
}
/* Сноска источника на сенсорном экране (27.09): сама цифра мелкая, но
   зона касания — 32×32 за счёт невидимого расширения ::after. */
@media (hover:none){
  sup.ref a{position:relative}
  sup.ref a::after{content:"";position:absolute;left:50%;top:50%;width:32px;height:32px;transform:translate(-50%,-50%)}
}
/* Тема в настройках на телефоне: без иконок «Как в системе» помещается
   в одну строку, три варианта — ровной сеткой. */
@media(max-width:480px){
  #themeSeg{display:grid;grid-template-columns:repeat(3,1fr)}
  #themeSeg svg{display:none}
  #themeSeg button{white-space:nowrap;padding-left:6px;padding-right:6px;justify-content:center;min-height:38px}
}

/* ══ Поле запроса в одну строку (27.09) ═══════════════════════════════
   Было две строки сетки: текст сверху, а микрофон и отправка — отдельной
   строкой снизу, ради двух кнопок ~125 px высоты. Теперь текст и кнопки
   в одной строке (~56 px), поле — капсула. Длинный вопрос растит поле
   вверх, кнопки остаются у нижнего края справа (align-items:end). */
.composer{grid-template-columns:minmax(0,1fr) auto auto;grid-template-rows:auto;align-items:end;
  gap:0 6px;padding:8px 8px 8px 22px;border-radius:28px}
.composer textarea{grid-column:1;grid-row:1;align-self:center;min-height:24px;padding:7px 0;line-height:1.5}
.dock .composer textarea{min-height:24px}
#btnMic{grid-column:2;grid-row:1}
#btnSend{grid-column:3;grid-row:1}
.composer .cbtn{width:40px;height:40px}
@media(max-width:560px){
  .composer,.dock .composer{padding:7px 7px 7px 16px;border-radius:26px}
  .composer textarea,.dock .composer textarea{min-height:24px;padding:7px 0}
}

/* ══ Активные кнопки: интерактивное наведение (27.09) ══════════════════
   По мотивам InteractiveHoverButton (shadcn), в нашем дизайн-коде: цвет у
   кнопок только нейтральный. Заливка при наведении растекается точкой —
   тот же серый --brand-solid на тон темнее (не чёрный и не цветной:
   бирюзовая версия была ошибкой). У текстовых кнопок текст уходит влево
   и справа выезжает стрелка; у «Сдать отчёт» стрелка уже в круге —
   заливка растекается от него. Анимируются только transform/opacity. */
.btn.primary,.dk-island{position:relative;overflow:hidden;isolation:isolate}
.btn.primary::before,.dk-island::before{content:"";position:absolute;z-index:-1;top:50%;left:18px;width:8px;height:8px;
  margin-top:-4px;border-radius:50%;background:color-mix(in srgb,var(--brand-solid) 90%,var(--text));opacity:0;
  transform:scale(.4);transition:transform .55s cubic-bezier(.22,1,.36,1),opacity .25s ease}
.dk-island::before{left:auto;right:25px}
.btn.primary:hover::before,.dk-island:hover::before{opacity:1;transform:scale(64)}
/* Текстовые кнопки (без значка): текст влево, стрелка справа. */
.btn.primary:not(:has(svg)){transition:text-indent .4s cubic-bezier(.22,1,.36,1),background var(--dur),box-shadow var(--dur)}
.btn.primary:not(:has(svg))::after{content:"";position:absolute;right:14px;top:50%;width:14px;height:14px;margin-top:-7px;
  background:currentColor;opacity:0;transform:translateX(-8px);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E") center/contain no-repeat;
  transition:opacity .3s ease,transform .45s cubic-bezier(.22,1,.36,1)}
.btn.primary:not(:has(svg)):hover{text-indent:-10px}
.btn.primary:not(:has(svg)):hover::after{opacity:1;transform:none}
/* Наведение primary — теперь заливкой, поэтому сам фон кнопки не темнеет. */
.btn.primary:hover{background:var(--brand-solid);box-shadow:var(--sh)}
.btn.primary:disabled::before,.btn.primary:disabled::after{display:none}
@media (hover:none){.btn.primary::before,.dk-island::before,.btn.primary::after{display:none}.btn.primary:hover{text-indent:0}}
html.no-motion .btn.primary::before,html.no-motion .dk-island::before{transition:none}


/* ══ Думающий кружок (27.09) ════════════════════════════════════════════
   По мотивам siri-orb (21st.dev). Пока ответ ищется и печатается
   (aria-busy), точка у «РосстатAI» становится кружком 18 px, внутри
   которого медленно переливаются цвета «AI» из логотипа: бирюза #008898,
   морская волна #18c0b8, синий #0860a8 — цвет бренда, не кнопок. Ответ
   готов — снова спокойная точка. Кружок растёт влево от точки (отрицательный
   отступ), поэтому подпись «РосстатAI» не сдвигается. Только
   transform/filter на крошечном элементе; без движения — неподвижен. */
@property --orb-a{syntax:"<angle>";inherits:false;initial-value:0deg}
.msg.ai[aria-busy="true"] .msg-who i{width:18px;height:18px;margin:-5px 0 -5px -10px;border-radius:50%;
  background:var(--surface);overflow:hidden;animation:none;isolation:isolate;
  box-shadow:0 0 0 1px color-mix(in srgb,#18c0b8 18%,transparent),0 2px 8px -2px color-mix(in srgb,#0860a8 35%,transparent)}
.msg.ai[aria-busy="true"] .msg-who i::after{display:none}
.msg.ai[aria-busy="true"] .msg-who i::before{content:"";position:absolute;inset:0;border-radius:50%;
  background:
    conic-gradient(from calc(var(--orb-a) * 2) at 25% 70%,#0860a8,transparent 20% 80%,#0860a8),
    conic-gradient(from calc(var(--orb-a) * 2) at 45% 75%,#18c0b8,transparent 30% 60%,#18c0b8),
    conic-gradient(from calc(var(--orb-a) * -3) at 80% 20%,#008898,transparent 40% 60%,#008898),
    conic-gradient(from calc(var(--orb-a) * 2) at 15% 5%,#18c0b8,transparent 10% 90%,#18c0b8),
    conic-gradient(from calc(var(--orb-a) * 1) at 20% 80%,#008898,transparent 10% 90%,#008898),
    conic-gradient(from calc(var(--orb-a) * -2) at 85% 10%,#0860a8,transparent 20% 80%,#0860a8);
  filter:blur(2px) contrast(1.4);animation:orb-spin 7s linear infinite}
@keyframes orb-spin{to{--orb-a:360deg}}
@media(prefers-reduced-motion:reduce){.msg.ai[aria-busy="true"] .msg-who i::before{animation:none}}
html.no-motion .msg.ai[aria-busy="true"] .msg-who i::before{animation:none}


/* ══ Бэйджи — единая система (27.09) ════════════════════════════════════
   По образцу shadcn badge (ghost / light / outline) в нашем дизайн-коде:
   скругление 6 px вместо «пилюли», высота 22 px, шрифт 12/500, слева точка
   цветом текста (75 %). Цвета — только наши токены: период формы (--pc),
   статусы (--ok), нейтральные серые. Сплошной «default» не используем —
   у нас это был бы чёрный. Классы утроены (.x.x.x), чтобы перебить
   контекстные правила (.dk .desk-per и т. п.), не трогая каждое. */
.desk-per.desk-per.desk-per,
.desk-cond.desk-cond.desk-cond,
.desk-badge.desk-badge.desk-badge,
.retired.retired.retired,
.late-chip.late-chip.late-chip{
  display:inline-flex;align-items:center;gap:6px;height:22px;min-width:22px;padding:0 8px;box-sizing:border-box;
  border-radius:6px;border:1px solid transparent;font-size:12px;font-weight:500;line-height:1;white-space:nowrap;
  box-shadow:none}
.desk-per.desk-per.desk-per::before,
.desk-cond.desk-cond.desk-cond::before,
.desk-badge.desk-badge.desk-badge::before,
.retired.retired.retired::before{
  content:"";width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.75;flex-shrink:0}
/* light — мягкая заливка своим цветом */
.desk-per.desk-per.desk-per{color:var(--pc,var(--text-2));background:color-mix(in srgb,var(--pc,var(--text-3)) 11%,var(--surface))}
.desk-badge.desk-badge.desk-badge{color:var(--text-2);background:var(--surface-3)}
.desk-badge.desk-badge.desk-badge.on{color:var(--ok);background:var(--ok-soft)}
/* outline — светлый фон и рамка */
.desk-cond.desk-cond.desk-cond{color:var(--text-2);background:var(--surface-2);border-color:var(--line-2)}
.late-chip.late-chip.late-chip{color:var(--text-2);background:var(--surface);border-color:var(--line-2)}
/* ghost — без фона */
.retired.retired.retired{color:var(--danger,#b42318);background:transparent;padding-left:0;padding-right:0}
/* ОКУД — кнопка копирования, но той же формы, что бэйджи рядом */
.catm-okud.catm-okud{height:22px;border-radius:6px;border-color:var(--line-2)}


/* ══ «Что изменилось» в холсте (27.09) ══════════════════════════════════
   Тот же язык, что каталог форм: плитка-сводка с сегментами, записи —
   белые плитки с мягкой тенью, по месяцам. Метка вида — бэйдж (точка
   цветом): изменения — синий месяц, новые бланки — зелёный год,
   отменённые — нейтральный. */
.app.changes-mode [data-tool="changes"]{background:var(--accent-soft);color:var(--accent)}
.app.rail.changes-mode [data-tool="changes"]{background:var(--accent-soft);color:var(--accent)}
.chg-desk .cat-seg .cat-stat.chg-k-change{--pc:var(--per-month)}
.chg-desk .cat-seg .cat-stat.chg-k-approve{--pc:var(--per-year)}
.chg-desk .cat-seg .cat-stat.chg-k-retire{--pc:var(--text-3)}
.chg-bar{display:flex;align-items:center;min-height:0}
.chg-bar:empty{display:none}
.chg-mine{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 14px;border-radius:999px;border:1px solid var(--line-2);
  background:var(--surface);color:var(--text-2);font:inherit;font-size:13.5px;cursor:pointer;transition:background .2s,border-color .2s}
.chg-mine svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.chg-mine.on{background:var(--accent-soft);border-color:transparent;color:var(--accent)}
.chg-out{display:flex;flex-direction:column;gap:26px}
.chg-month-h{margin:0 0 12px;font-size:13px;font-weight:500;color:var(--text-3)}
.chg-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.chg-post{display:flex;flex-direction:column;gap:6px;padding:20px 22px;border-radius:24px;background:var(--surface);
  border:1px solid var(--line);box-shadow:var(--tile-shadow);min-width:0}
.chg-k{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--text-3)}
.chg-change .chg-kind{--pc:var(--per-month)}
.chg-approve .chg-kind{--pc:var(--per-year)}
.chg-retire .chg-kind{--pc:var(--text-3)}
.chg-post h3{margin:6px 0 0;font-size:16px;font-weight:600;letter-spacing:-.01em;line-height:1.35;color:var(--text);text-wrap:balance}
.chg-post p{margin:0;font-size:13.5px;line-height:1.5;color:var(--text-2)}
.chg-forms{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.chg-form,.chg-more{height:28px;padding:0 10px;border-radius:8px;border:1px solid var(--line);background:var(--surface);
  color:var(--text);font:inherit;font-size:12.5px;font-weight:500;cursor:pointer;transition:background .2s,border-color .2s}
.chg-form:hover{background:var(--surface-2);border-color:var(--line-2)}
.chg-form.mine{background:var(--accent-soft);border-color:transparent;color:var(--accent)}
.chg-more{border-color:transparent;color:var(--text-3)}
.chg-more:hover{color:var(--text)}
.chg-foot{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;margin-top:auto;padding-top:12px;border-top:1px solid var(--line);font-size:12.5px;color:var(--text-3)}
.chg-foot .chg-order{flex:1 1 100%}
.chg-foot .desk-a{margin:0;font-size:13px;font-weight:500}
.chg-load{align-self:center}
.chg-skel{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.chg-skel .sk{display:block;height:170px;border-radius:24px;
  background:linear-gradient(90deg,var(--surface-3) 0,var(--surface-2) 40%,var(--surface-3) 80%);background-size:250% 100%;animation:shim 1.3s linear infinite}
@media(max-width:860px){.chg-grid,.chg-skel{grid-template-columns:1fr}}
@media(max-width:560px){.chg-post{padding:18px;border-radius:20px}.chg-mine{width:100%;justify-content:center}}


/* ══ Окно формы и «Пропустили срок?»: один цвет и один размер (27.09) ══
   1. Цвет в окне — один, фирменный: тот же серый --brand-solid, что у
      кнопки «Помочь с заполнением». Исполнитель, значки фактов, галочки
      «Кто сдаёт», номера шагов — им; цвет периода остаётся только у
      бэйджа периода.
   2. Окно формы и окно штрафа — одной высоты: переход «Пропустили срок?»
      ↔ «К форме» идёт без скачка размера.
   3. «К форме» — кнопка-капсула, а не тонкая ссылка. */
.catm2 .catm-col-r .ct-card,.catm2 .catm-col-r .ct-card.ct-card{background:var(--brand-solid)}
.catm2 .catm-col-r .ct-card .catm-fact-ic{background:var(--surface)}
.catm2 .catm-col-r .ct-rows{border-top-color:color-mix(in srgb,var(--text) 10%,transparent)}
.catm2 .catm-fact-ic{color:var(--text)}
.catm2 .catm-who li::before{background:var(--brand-solid)}
.catm2 .catm-who li::after{border-color:var(--text)}
.catm2 .late-steps li::before{background:var(--brand-solid);color:var(--text)}
.catm2 .catm-col-r a.ct-val:hover{color:var(--text);text-decoration:underline}
@media(min-width:760px){.catm2{height:min(88vh,680px);max-height:min(88vh,680px)}}
.catm2 .late-back.late-back{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 16px 0 11px;border-radius:999px;
  border:0;background:var(--surface);color:var(--text);font:inherit;font-size:13.5px;font-weight:500;cursor:pointer;
  box-shadow:inset 0 0 0 1px var(--line-2),0 1px 2px rgba(16,24,40,.05);transition:background .2s,box-shadow .2s}
.catm2 .late-back.late-back:hover{background:var(--surface-2);box-shadow:inset 0 0 0 1px var(--line-2),var(--sh-sm)}
.catm2 .late-back.late-back svg{width:16px;height:16px;stroke-width:2}


/* ══ Кружок ИИ всегда, а не только «думая» (27.09) ═══════════════════════
   Просьба: переливающийся кружок остаётся и после ответа (раньше готовый
   ответ показывал чёрную точку), медленнее, размером чуть меньше подписи
   «РосстатAI» — 13 px. Тот же кружок — у логотипа в боковом меню.
   Один рисунок на оба места: .ai-orb и точка ответа .msg-who i. */
.ai-orb,.msg.ai .msg-who i,.msg.ai[aria-busy="true"] .msg-who i{
  position:relative;display:inline-block;flex-shrink:0;width:13px;height:13px;margin:0;border-radius:50%;
  background:var(--surface);overflow:hidden;isolation:isolate;animation:none;
  box-shadow:0 0 0 1px color-mix(in srgb,#18c0b8 18%,transparent),0 2px 6px -2px color-mix(in srgb,#0860a8 35%,transparent)}
.msg.ai .msg-who i::after,.msg.ai[aria-busy="true"] .msg-who i::after{display:none}
.ai-orb::before,.msg.ai .msg-who i::before,.msg.ai[aria-busy="true"] .msg-who i::before{content:"";position:absolute;inset:0;border-radius:50%;
  background:
    conic-gradient(from calc(var(--orb-a) * 2) at 25% 70%,#0860a8,transparent 20% 80%,#0860a8),
    conic-gradient(from calc(var(--orb-a) * 2) at 45% 75%,#18c0b8,transparent 30% 60%,#18c0b8),
    conic-gradient(from calc(var(--orb-a) * -3) at 80% 20%,#008898,transparent 40% 60%,#008898),
    conic-gradient(from calc(var(--orb-a) * 2) at 15% 5%,#18c0b8,transparent 10% 90%,#18c0b8),
    conic-gradient(from calc(var(--orb-a) * 1) at 20% 80%,#008898,transparent 10% 90%,#008898),
    conic-gradient(from calc(var(--orb-a) * -2) at 85% 10%,#0860a8,transparent 20% 80%,#0860a8);
  filter:blur(1.5px) contrast(1.4);animation:orb-spin 16s linear infinite}
.brand{display:inline-flex;align-items:center;gap:9px}
.brand-orb{width:15px;height:15px}
@media(prefers-reduced-motion:reduce){.ai-orb::before,.msg.ai .msg-who i::before{animation:none}}
html.no-motion .ai-orb::before,html.no-motion .msg.ai .msg-who i::before{animation:none}

/* Календарь по ИНН: высота карточки по содержимому. Базовое
   .desk-cal{flex:0 0 300px} в колонке фиксировало 300 px, легенда
   вылезала вниз, а внутри оставалась только её верхняя линия. */
.dk .desk-cal{flex:0 0 auto;height:auto}

/* «Назад к форме» — круглая кнопка слева от заголовка окна штрафа (27.09). */
.late-title{display:flex;align-items:center;gap:12px}
.catm2 .late-back.late-back{flex-shrink:0;width:36px;height:36px;padding:0;justify-content:center;border-radius:50%}
.catm2 .late-back.late-back svg{width:18px;height:18px}


/* ══ Правки 27.09 (вечер) ═══════════════════════════════════════════════ */

/* 1. Стрелка текстовых кнопок: едет обёртка .bt, а не text-indent. */
.btn.primary:not(:has(svg)):hover{text-indent:0}
.btn.primary .bt{display:inline-block;transition:transform .4s cubic-bezier(.22,1,.36,1)}
.btn.primary:not(:has(svg)):hover .bt{transform:translateX(-9px)}
.btn.primary:not(:has(svg))::after{right:10px;width:12px;height:12px;margin-top:-6px}
@media (hover:none){.btn.primary:hover .bt{transform:none}}

/* 2. Карточка контакта в чате — по дизайн-коду: белая плитка с мягкой
   тенью, подписи обычным регистром 12/400, имя 18/650, значения 15/500,
   значки в сером квадрате; без капса, синих пузырей и градиента. */
.msg.ai .ct-card{padding:18px 20px;border:1px solid var(--line);border-radius:20px;background:var(--surface);box-shadow:var(--tile-shadow)}
.msg.ai .ct-kicker{margin-bottom:4px;font-size:12px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--text-3)}
.msg.ai .ct-name{font-family:var(--font);font-size:18px;font-weight:650;letter-spacing:-.015em;line-height:1.3}
.msg.ai .ct-title{margin-top:2px;font-size:13px;color:var(--text-3)}
.msg.ai .ct-form{margin-top:10px;font-size:14px;color:var(--text-2)}
.msg.ai .ct-rows{gap:10px;margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.msg.ai .ct-row{align-items:center;gap:12px}
.msg.ai .ct-ic{width:34px;height:34px;border-radius:11px;background:var(--surface-2);color:var(--text)}
.msg.ai .ct-txt i{font-size:12px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--text-3)}
.msg.ai .ct-val{font-size:15px;font-weight:500;font-variant-numeric:tabular-nums}
.msg.ai .ct-ext{font-size:15px;font-weight:400;color:var(--text-3)}
.msg.ai a.ct-val:hover{color:var(--text);text-decoration:underline}
.msg.ai .ct-acts{margin-top:16px}
.msg.ai .ct-acts .btn.primary{height:40px;padding:0 18px;border-radius:999px;font-size:14px;font-weight:600}

/* 3. Оценка ответа, копирование и прочее — только при наведении на ответ
   (28.09: и у последнего ответа, и у оценённых тоже). С клавиатуры —
   при фокусе; на сенсорных экранах наведения нет — видны всегда. */
@media (hover:hover){
  .msg.ai .metarow .act{opacity:0;transition:opacity .2s ease}
  .msg.ai:hover .metarow .act,.msg.ai:focus-within .metarow .act{opacity:1}
}

/* 4. «AI» в логотипе бокового меню — тем же градиентом, что крупный на старте. */
.sb-top .brand-name b{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}

/* 5. «Что изменилось» во вкладке — вёрстка страницы /changes. */
.app.changes-mode .view{scroll-padding-top:70px}
.chg-blog{--c-change:var(--per-month);--c-approve:var(--per-year);--c-retire:var(--text-3);max-width:780px;margin:0 auto;padding:0 0 60px}
.chg-hero{padding:28px 0 22px}
.chg-eyebrow{display:inline-flex;align-items:center;gap:8px;height:26px;padding:0 11px;border-radius:999px;background:var(--surface);
  box-shadow:var(--tile-shadow);font-size:12.5px;color:var(--text-2)}
.chg-eyebrow i{width:7px;height:7px;border-radius:50%;background:#18c0b8}
.chg-hero h1{margin:18px 0 12px;font-size:clamp(30px,4.2vw,44px);font-weight:650;letter-spacing:-.03em;line-height:1.08;text-wrap:balance}
.chg-lead{max-width:60ch;margin:0;font-size:16px;line-height:1.55;color:var(--text-2);text-wrap:pretty}
.chg-stats{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:20px;font-size:13.5px;color:var(--text-3)}
.chg-stats b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}
.chg-bar{position:sticky;top:0;z-index:3;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  padding:12px 0;background:color-mix(in srgb,var(--surface) 88%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.chg-seg{display:inline-flex;gap:4px;padding:4px;border-radius:999px;background:var(--surface-3)}
.chg-seg button{height:32px;padding:0 14px;border:0;border-radius:999px;background:transparent;font:inherit;font-size:13.5px;color:var(--text-2);cursor:pointer;transition:background .18s,color .18s}
.chg-seg button.on{background:var(--surface);color:var(--text);font-weight:500;box-shadow:0 1px 2px rgba(16,24,40,.08)}
.chg-mine{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 14px;border-radius:999px;border:1px solid var(--line-2);
  background:var(--surface);font:inherit;font-size:13.5px;color:var(--text-2);cursor:pointer;transition:background .18s,border-color .18s}
.chg-mine svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.chg-mine.on{background:var(--accent-soft);border-color:transparent;color:var(--accent)}
.chg-feed{display:flex;flex-direction:column;gap:14px;margin-top:8px}
.chg-month{margin:22px 0 2px;font-size:13px;font-weight:500;color:var(--text-3)}
.chg-post{padding:22px 24px;border-radius:24px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--tile-shadow)}
.chg-post-k{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--text-3)}
.chg-kind{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border-radius:6px;font-weight:500;
  background:color-mix(in srgb,var(--c) 10%,var(--surface));color:var(--c)}
.chg-kind i{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.75}
.chg-kind.k-change{--c:var(--c-change)}.chg-kind.k-approve{--c:var(--c-approve)}.chg-kind.k-retire{--c:var(--c-retire)}
.chg-post h2{margin:10px 0 6px;font-size:19px;font-weight:600;letter-spacing:-.015em;line-height:1.3;color:var(--text);text-wrap:balance}
.chg-post p{margin:0;font-size:14.5px;line-height:1.55;color:var(--text-2)}
.chg-forms{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}
.chg-form,.chg-more{height:30px;padding:0 11px;border-radius:999px;border:1px solid var(--line);background:var(--surface);
  font:inherit;font-size:13px;font-weight:500;color:var(--text);cursor:pointer;transition:background .18s,border-color .18s}
.chg-form:hover{background:var(--surface-2);border-color:var(--line-2)}
.chg-form.mine{background:var(--accent-soft);border-color:transparent;color:var(--accent)}
.chg-more{border-color:transparent;color:var(--text-3)}
.chg-more:hover{color:var(--text)}
.chg-post-f{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line);font-size:13px;color:var(--text-3)}
.chg-post-f a,.chg-post-f button{display:inline-flex;align-items:center;gap:5px;padding:0;border:0;background:none;font:inherit;font-weight:500;color:var(--text-2);text-decoration:none;cursor:pointer}
.chg-post-f a:hover,.chg-post-f button:hover{color:var(--text)}
.chg-post-f a svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.chg-post-f .sp{flex:1}
.chg-load{align-self:center;margin-top:18px;height:44px;padding:0 22px;border:0;border-radius:999px;background:var(--surface-3);font:inherit;font-weight:600;font-size:14px;color:var(--text);cursor:pointer}
.chg-load:hover{background:var(--line)}
.chg-empty{padding:40px 24px;border-radius:24px;background:var(--surface);border:1px solid var(--line);text-align:center;color:var(--text-2);font-size:14.5px}
.chg-sk{height:150px;border-radius:24px;background:linear-gradient(90deg,var(--surface-3) 0,var(--surface-2) 40%,var(--surface-3) 80%);background-size:250% 100%;animation:shim 1.3s linear infinite}
.chg-note{margin:40px 0 0;font-size:12.5px;line-height:1.6;color:var(--text-3)}
.chg-note a{color:inherit;text-decoration:underline}
@media(max-width:560px){
  .chg-hero{padding:18px 0 14px}
  .chg-post{padding:18px;border-radius:20px}
  .chg-post h2{font-size:17px}
  .chg-seg{width:100%;display:grid;grid-auto-flow:column;grid-auto-columns:1fr}
  .chg-seg button{padding:0 6px;font-size:13px}
  .chg-mine{width:100%;justify-content:center}
}
html.no-motion .chg-sk{animation:none}


/* Карточка исполнителя — в цвет бэйджа периода (27.09): так договорились
   раньше («контакты тем же цветом, что квартальные, месячные…»); правка
   «один фирменный цвет» ошибочно перекрасила и её в серый. Оттенок —
   ровно как у бэйджа периода (11 % цвета периода). Остальное в окне —
   нейтральное. */
.catm2 .catm-col-r .ct-card.ct-card{background:color-mix(in srgb,var(--pc,var(--text-3)) 11%,var(--surface))}
.catm2 .catm-col-r .ct-card .catm-fact-ic{background:var(--surface);color:var(--pc,var(--text))}
.catm2 .catm-col-r .ct-rows{border-top-color:color-mix(in srgb,var(--pc,var(--text)) 18%,transparent)}

/* Бэйдж периода и ОКУД — в одну строку: не хватало 1 px при зазоре 6 px (27.09). */
.catm2 .catm-chips{column-gap:4px}

/* Календарь по ИНН: «В мой календарь / Пакет / Маршрут» — на уровне реквизитов
   (ИНН, ОГРН и строка про подразделения), а не по центру всего блока с заголовком (27.09). */
.dk-id .desk-extra.desk-extra{align-self:flex-end}


/* Аудит 27.09: --danger (#b42318) не переопределялся в тёмной теме — текст
   ошибок и «Упразднена» на #1d1d1d давали контраст ~2.6:1 (ниже AA). */
:root[data-theme="dark"]{--danger:#ff8a80}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--danger:#ff8a80}}

/* ══ 27.09 (4) ══════════════════════════════════════════════════════════
   Окно формы: левая колонка тянется на всю высоту окна, поэтому полоса
   действий прибита к низу, а не висит над пустым полем. */
@media(min-width:760px){
  .catm2 .catm-body2{min-height:100%}
  .catm2 .catm-col-l{align-self:stretch}
}
/* Сумма штрафа — одной строкой вместе со знаком рубля в любой панели:
   шрифт по ширине панели (304px), без переноса. Размер окна не трогаем,
   чтобы все формы оставались одинаковыми. */
.late-fine b{font-size:clamp(17px,5.2vw,21px);white-space:nowrap;letter-spacing:-.025em}
/* «Что изменилось» появляется тем же каскадом, что каталог форм. */
.chg-blog > *{animation:dk-rise .5s cubic-bezier(.2,.8,.2,1) both}
.chg-blog > :nth-child(2){animation-delay:.06s}
.chg-blog > :nth-child(3){animation-delay:.12s}
.chg-blog > :nth-child(n+4){animation-delay:.18s}
.chg-feed > .chg-post{animation:dk-rise .5s cubic-bezier(.2,.8,.2,1) both}
.chg-feed > .chg-post:nth-child(2){animation-delay:.05s}
.chg-feed > .chg-post:nth-child(3){animation-delay:.1s}
.chg-feed > .chg-post:nth-child(4){animation-delay:.15s}
.chg-feed > .chg-post:nth-child(n+5){animation-delay:.2s}
html.no-motion .chg-blog > *,html.no-motion .chg-feed > .chg-post{animation:none}
@media(prefers-reduced-motion:reduce){.chg-blog > *,.chg-feed > .chg-post{animation:none}}

/* ══ 28.09: «Пропустили срок?» — красная кнопка ═════════════════════════ */
.catm-late-link{display:flex;align-items:center;gap:12px;width:100%;margin-top:6px;padding:10px 10px 10px 12px;
  border:0;border-radius:18px;background:var(--danger-solid);color:#fff;text-align:left;cursor:pointer;
  box-shadow:0 1px 0 rgba(255,255,255,.18) inset,0 6px 18px -8px color-mix(in srgb,var(--danger-solid) 70%,transparent);
  transition:transform .25s cubic-bezier(.2,.8,.2,1),box-shadow .25s cubic-bezier(.2,.8,.2,1),background .2s}
.catm-late-link:hover{color:#fff;filter:brightness(.93);
  box-shadow:0 1px 0 rgba(255,255,255,.18) inset,0 10px 24px -10px color-mix(in srgb,var(--danger-solid) 80%,transparent)}
.catm-late-link:active{transform:scale(.98)}
.catm-late-link:focus-visible{outline:2px solid var(--danger-solid);outline-offset:3px}
.catm-late-link span{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}
.catm-late-link b{font-size:14px;font-weight:600;line-height:1.25}
.catm-late-link em{font-style:normal;font-size:12.5px;line-height:1.3;opacity:.86}
.catm-late-link i{display:grid;place-items:center;flex-shrink:0;border-radius:50%;background:rgba(255,255,255,.16)}
.catm-late-link .late-ic{width:32px;height:32px}
.catm-late-link .late-go{width:28px;height:28px}
.catm-late-link .late-go svg{transition:transform .25s cubic-bezier(.2,.8,.2,1)}
.catm-late-link:hover .late-go svg{transform:translateX(2px)}
.catm-late-link svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
@media(prefers-reduced-motion:reduce){.catm-late-link,.catm-late-link .late-go svg{transition:none}}

/* ══ 28.09: мобильный аудит ═════════════════════════════════════════════
   1. Окно формы на телефоне: красная кнопка «Пропустили срок?» вставала
      над названием формы (порядок блоков задаётся order, у новой кнопки
      его не было). Теперь — сразу после исполнителя. */
@media(max-width:759px){
  .catm-col-r .catm-late-link{order:5}
  .catm-who{order:6}
  .catm-asks{order:7}
}
/* 2. Мелкие цели касания (замер: 26–34 px при норме 44): область нажатия
      шире самой кнопки — вид и сетка не меняются. */
@media(pointer:coarse){
  .hist-more,.cat-view,.cat-star,.catm-x,.catm-okud{position:relative}
  .hist-more::after,.cat-view::after,.cat-star::after,.catm-x::after,.catm-okud::after{
    content:"";position:absolute;inset:-8px}
}
/* 3. Подпись под полем ввода на узком экране была 10 px — ниже порога
      читаемости. */
@media(max-width:480px){.hints{font-size:11px}}
/* 4. Шторка «Пропустили срок?» на телефоне: «Должностное лицо» ломалось
      на две строки в равных третях переключателя. Ширина — по тексту. */
@media(max-width:480px){
  .late-seg{display:flex;width:100%}
  .late-seg button{flex:1 1 auto;white-space:nowrap;padding:0 10px;font-size:13px}
}
/* 5. Календарь по ИНН на телефоне: после загрузки данных заголовок
      вставал по центру (align-items:center у колонки), до загрузки —
      слева. Одинаково слева, вровень с полем ИНН. */
@media(max-width:759px){
  .desk.has-res .desk-top{align-items:stretch}
  .desk.has-res .desk-titles{text-align:left}
}
/* 6. Копирование ИНН/ОГРН/ОКПО — цель касания была 21 px. */
@media(pointer:coarse){
  .desk-kv{position:relative}
  .desk-kv::after{content:"";position:absolute;inset:-10px -4px}
}
/* 7. Свёрнутая панель: кнопки стоят по центру полосы 72 px, но у рабочей
      карточки справа рамка и тень, и видимая серая полоса уже на ~4 px —
      на глаз кнопки сидят на пару пикселей правее (28.09). Оптическая
      поправка: 2 px влево. */
@media(min-width:861px){.app.rail .sidebar{padding-left:8px;padding-right:12px}}

/* ══ 28.09: запись «Что изменилось» — статья и правки «было → стало» ═════ */
.chg-blog.chg-reading > :not(.chd-article){display:none}
.chg-click{cursor:pointer;transition:border-color var(--dur,.2s),box-shadow var(--dur,.2s)}
.chg-click:hover{border-color:color-mix(in srgb,var(--text) 22%,var(--line));box-shadow:0 10px 28px -16px rgba(16,24,40,.28)}
.chg-title{all:unset;cursor:pointer;color:inherit}
.chg-title:focus-visible{outline:2px solid var(--accent,#1d64c8);outline-offset:3px;border-radius:6px}
.chg-count{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;background:var(--surface-2);color:var(--text-2);font-size:12px;font-weight:500}
.chg-read{display:inline-flex;align-items:center;gap:4px;height:30px;padding:0 12px 0 14px;border:0;border-radius:999px;background:var(--surface-2);color:var(--text);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:background var(--dur,.2s)}
.chg-read:hover{background:var(--surface-3)}
.chg-read svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

.chd-article{animation:dk-rise .5s cubic-bezier(.2,.8,.2,1) both;padding:6px 0 40px}
.chd-back{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px 0 8px;margin:6px 0 18px;border:1px solid var(--line-2);border-radius:999px;background:var(--surface);color:var(--text-2);font:inherit;font-size:13.5px;cursor:pointer;transition:color var(--dur,.2s),background var(--dur,.2s)}
.chd-back:hover{color:var(--text);background:var(--surface-2)}
.chd-back svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.chd-title{margin:10px 0 0;font-size:clamp(26px,4.4vw,38px);font-weight:650;letter-spacing:-.03em;line-height:1.12;text-wrap:balance;color:var(--text)}
.chd-lead{margin:14px 0 0;font-size:17px;line-height:1.55;color:var(--text-2);text-wrap:pretty}
.chd-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:18px}
.chd-more-forms{align-self:center;font-size:12.5px;color:var(--text-3)}
.chd-src{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;margin-top:14px;padding-top:14px;border-top:1px solid var(--line);font-size:13px;color:var(--text-3)}
.chd-src a{display:inline-flex;align-items:center;gap:4px;color:var(--text-2);text-decoration:none;font-weight:500}
.chd-src a:hover{color:var(--text);text-decoration:underline}
.chd-src svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.chd-sec{margin-top:34px}
.chd-sec h2{margin:0 0 12px;font-size:20px;font-weight:650;letter-spacing:-.02em;color:var(--text)}
.chd-prose p{margin:0 0 10px;font-size:16px;line-height:1.65;color:var(--text);text-wrap:pretty;max-width:68ch}
.chd-sum{margin:-4px 0 14px;font-size:13.5px;color:var(--text-3)}
.chd-list{display:flex;flex-direction:column;gap:14px}
.chd{border:1px solid var(--line);border-radius:20px;background:var(--surface);overflow:hidden;box-shadow:var(--tile-shadow)}
.chd-h{display:flex;align-items:center;gap:10px;padding:13px 18px;border-bottom:1px solid var(--line)}
.chd-h b{font-size:14.5px;font-weight:600;color:var(--text)}
.chd-h .sp{flex:1}
.chd-form{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:6px;background:var(--surface-2);color:var(--text-2);font-size:12px}
.chd-op{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;font-size:12px;font-weight:600;background:var(--ok-soft);color:var(--ok)}
.chd-op-delete .chd-op{background:var(--danger-soft);color:var(--danger)}
.chd-cols{display:grid;grid-template-columns:1fr 1fr}
.chd-side{padding:16px 18px;min-width:0}
.chd-old{background:var(--danger-soft)}
.chd-new{background:var(--ok-soft)}
.chd-cols .chd-old{border-right:1px solid var(--danger-line)}
.chd-lab{display:flex;align-items:center;gap:7px;margin-bottom:8px;font-size:13px;font-weight:600}
.chd-lab i{display:grid;place-items:center;width:20px;height:20px;border-radius:50%}
.chd-lab svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.chd-old .chd-lab{color:var(--danger)}
.chd-old .chd-lab i{background:color-mix(in srgb,var(--danger) 16%,transparent)}
.chd-new .chd-lab{color:var(--ok)}
.chd-new .chd-lab i{background:color-mix(in srgb,var(--ok) 18%,transparent)}
.chd-t{margin:0;font-size:14.5px;line-height:1.6;color:var(--text);overflow-wrap:anywhere;white-space:pre-line}
.chd-old .chd-t{color:var(--text-2)}
.chd-t.clamp{max-height:10.4em;overflow:hidden;-webkit-mask-image:linear-gradient(rgb(0 0 0) 70%,transparent);mask-image:linear-gradient(rgb(0 0 0) 70%,transparent)}
.chd-t del{text-decoration:line-through;text-decoration-thickness:1.5px;background:color-mix(in srgb,var(--danger) 20%,transparent);border-radius:4px;padding:0 2px}
.chd-t ins{text-decoration:none;font-weight:600;background:color-mix(in srgb,var(--ok) 26%,transparent);border-radius:4px;padding:0 2px}
.chd-op-delete .chd-t{text-decoration:line-through;text-decoration-color:color-mix(in srgb,var(--danger) 60%,transparent)}
.chd-more{margin-top:8px;padding:0;border:0;background:none;color:var(--text-2);font:inherit;font-size:13px;font-weight:500;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.chd-more:hover{color:var(--text)}
.chd-note{margin:0;padding:10px 18px 12px;font-size:12.5px;color:var(--text-3);background:var(--ok-soft);border-top:1px dashed var(--ok-line)}
.chd-plain{display:flex;gap:10px;margin:0;padding:13px 18px;border-top:1px solid var(--line);font-size:14px;line-height:1.55;color:var(--text-2)}
.chd-plain i{flex-shrink:0;display:grid;place-items:center;width:22px;height:22px;color:var(--text-3)}
.chd-plain svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.chd-todo{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px;counter-reset:td}
.chd-todo li{position:relative;padding:14px 16px 14px 56px;border:1px solid var(--line);border-radius:16px;background:var(--surface);font-size:15px;line-height:1.5;color:var(--text);counter-increment:td}
.chd-todo li::before{content:counter(td);position:absolute;left:14px;top:50%;translate:0 -50%;display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--ok-soft);color:var(--ok);font-size:13px;font-weight:650}
.chd-acts{display:flex;flex-wrap:wrap;gap:10px;margin-top:30px}
@media(max-width:640px){
  .chd-cols{grid-template-columns:1fr}
  .chd-cols .chd-old{border-right:0;border-bottom:1px solid var(--danger-line)}
  .chd-h{flex-wrap:wrap}
  .chd-lead{font-size:16px}
  .chd-todo li{padding-left:52px}
}
@media(prefers-reduced-motion:reduce){.chd-article{animation:none}}
html.no-motion .chd-article{animation:none}

/* 28.09: цитата в колонке источников — не длиннее трёх строк: длинная
   колонка растягивала строку сообщения и оставляла пустоту под ответом. */
.msg.ai.has-ev .ev-q{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
@container canvas (min-width:1220px){
  .msg.ai.has-ev .ev-more[open]{max-height:220px;overflow:auto}
}
