:root{
  --bg:#f6f7f9; --surface:#fff; --border:#e4e6ea; --border2:#d2d6dc;
  --text:#1c1e21; --muted:#6b7280; --hint:#9aa0a8;
  --info:#185fa5; --info-bg:#e6f1fb; --ok:#0f6e56; --ok-bg:#e1f5ee;
  --warn:#854f0b; --warn-bg:#faeeda; --err:#a32d2d; --err-bg:#fcebeb;
  --orange:#e36c09;
  --radius:7px; --radius-lg:10px;
}
*{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--border2) transparent}
::-webkit-scrollbar{width:14px;height:14px}
::-webkit-scrollbar-track{background:transparent}
/* ползунок «плавает» внутри поля: прозрачный border даёт отступ от края,
   до угла поля не доходит */
::-webkit-scrollbar-thumb{background:var(--border2);border-radius:99px;
  border:4px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:var(--hint);background-clip:padding-box}
::-webkit-scrollbar-corner{background:transparent}
body{margin:0;font-family:-apple-system,Segoe UI,Roboto,Arial,sans-serif;
  background:var(--bg);color:var(--text);font-size:16px;line-height:1.5}
/* приложение-шелл: топбар фиксированной высоты + рабочая зона на остаток экрана,
   без магического calc и без фантомной прокрутки страницы */
body.app-shell{height:100vh;overflow:hidden;display:flex;flex-direction:column}
body.app-shell .topbar{flex:0 0 auto}
body.app-shell .workspace,body.app-shell .doc-page{height:auto;flex:1 1 auto;min-height:0;
  grid-template-rows:minmax(0,1fr);overflow:hidden}
a{color:var(--info);text-decoration:none}
.muted{color:var(--muted)} .small{font-size:14px} .ok{color:var(--ok)}
.warn{color:var(--warn)} .err{color:var(--err)} .spacer{flex:1}

.ti{font-size:18px;line-height:1;vertical-align:-2px;flex:0 0 auto}
.ftype{font-size:19px;color:var(--muted)}
[hidden]{display:none!important}
.btn{display:inline-flex;align-items:center;gap:6px;border:0.5px solid var(--border2);
  background:var(--surface);color:var(--text);border-radius:var(--radius);
  padding:7px 12px;font-size:15px;cursor:pointer;text-decoration:none}
.btn:hover{background:#f0f1f3}
.btn-primary{background:var(--info);color:#fff;border-color:var(--info)}
.btn-primary:hover{background:#14507f}
.btn-ghost{border-color:transparent;background:transparent;color:var(--muted)}
.btn:disabled{opacity:.4;cursor:default;pointer-events:none}
/* Кнопка во время HTMX-запроса: спиннер + блокировка повторного нажатия.
   HTMX вешает класс .htmx-request на инициатор запроса на время выполнения. */
.btn.htmx-request{opacity:.7;pointer-events:none}
.btn.htmx-request::after{content:"";display:inline-block;width:11px;height:11px;
  margin-left:2px;border:2px solid currentColor;border-right-color:transparent;
  border-radius:50%;animation:spin .6s linear infinite}
.ur-group{display:inline-flex;gap:4px;margin-left:auto}
.btn-sm{padding:4px 10px;font-size:14px}
.icon-btn{padding:5px;line-height:0}.icon-btn .ti{font-size:20px}
input,select{font:inherit;padding:7px 10px;border:0.5px solid var(--border2);
  border-radius:var(--radius);background:var(--surface);color:var(--text)}
input:focus,select:focus{outline:2px solid var(--info-bg);border-color:var(--info)}

.card{background:var(--surface);border:0.5px solid var(--border);
  border-radius:var(--radius-lg);padding:14px 16px}

/* login */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center}
.login-card{display:flex;flex-direction:column;gap:10px;width:300px}
.login-card h1{margin:0;font-size:22px;font-weight:500}
.alert{background:var(--err-bg);color:var(--err);padding:8px 10px;border-radius:var(--radius);font-size:15px}

/* topbar */
.topbar{display:flex;align-items:center;gap:10px;padding:10px 16px;
  background:var(--surface);border-bottom:0.5px solid var(--border)}
.brand{font-weight:500;color:var(--text)} .sep{color:var(--hint)}
.crumb-current{color:var(--text)}
.project-title{font-weight:500}

/* projects page */
.page{max-width:900px;margin:0 auto;padding:24px 16px}
/* список проектов: широкий контейнер под табличный вид */
.page.wide{max-width:1300px}
.row-between{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.row-between h1{font-size:22px;font-weight:500;margin:0}
.newproj summary{list-style:none} .newproj summary::-webkit-details-marker{display:none}
.newproj-form{display:flex;flex-direction:column;gap:8px;margin-top:8px;width:320px}
.newproj-form input,.newproj-form select,.newproj-form textarea{padding:9px 11px;border:0.5px solid var(--border2);border-radius:var(--radius);font-size:14px;font-family:inherit;background:var(--surface)}
.newproj-select{cursor:pointer}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.project-card{display:block} .project-card:hover{border-color:var(--border2)}
/* архивирование проекта (админ): кнопка в углу карточки, видна по наведению */
.project-card-wrap{position:relative}
.proj-archive{position:absolute;top:8px;right:8px;opacity:0;padding:3px 6px;
  transition:opacity .12s;background:#fff;color:var(--muted)}
.project-card-wrap:hover .proj-archive,.proj-archive:focus{opacity:1;color:var(--text)}
.project-card.archived{opacity:.6}
.archived-block{margin-top:24px}
.archived-block>summary{cursor:pointer;color:var(--muted);font-size:14px;display:flex;
  align-items:center;gap:6px;width:fit-content;list-style:none}
.project-name{font-weight:500;margin-bottom:4px;color:var(--text)}

/* список проектов — сортируемая таблица со статусами */
.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius-lg)}
.ptbl{width:100%;min-width:820px;border-collapse:collapse;font-size:14px}
.ptbl th,.ptbl td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--border);vertical-align:middle}
.ptbl td.pcell{max-width:230px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ptbl tbody tr:last-child td{border-bottom:none}
.ptbl thead th{font-weight:500;color:var(--muted);user-select:none;cursor:pointer;background:var(--bg);white-space:nowrap}
.ptbl thead th:hover{color:var(--text)}
.ptbl thead th.nos,.ptbl thead th.nos:hover{cursor:default;color:var(--muted)}
.ptbl thead th.sorted{color:var(--text)}
.ptbl thead th .ar{font-size:13px;opacity:.35;margin-left:2px;vertical-align:-2px}
.ptbl thead th.sorted .ar{opacity:.9}
.ptbl tbody tr:hover{background:var(--bg)}
.ptbl td.num,.ptbl th.num{text-align:right}
.ptbl td.nowrap{color:var(--muted);white-space:nowrap}
.ptbl a.pname{font-weight:500;color:var(--text);text-decoration:none}
.ptbl a.pname:hover{color:var(--info);text-decoration:underline}
.chip{display:inline-flex;align-items:center;gap:5px;font-size:13px;padding:2px 9px;border-radius:var(--radius);white-space:nowrap}
.c-ok{background:var(--ok-bg);color:var(--ok)}
.c-go{background:var(--warn-bg);color:var(--warn)}
.c-doc{background:var(--info-bg);color:var(--info)}
.c-no{background:var(--bg);color:var(--hint)}
.ptbl td.cmt-cell{padding:5px 8px}
.cmt-input{width:100%;min-width:130px;border:1px solid transparent;border-radius:var(--radius);padding:5px 8px;font:inherit;font-size:13px;color:var(--text);background:transparent}
.cmt-input::placeholder{color:var(--hint)}
.cmt-input:hover{border-color:var(--border)}
.cmt-input:focus{outline:none;border-color:var(--info);background:var(--surface)}
.cmt-input.saved{border-color:var(--ok);background:var(--ok-bg)}
.ptbl td.act{text-align:right;width:1%}
.ptbl td.act .proj-archive{position:static;opacity:.45;padding:3px 6px;background:transparent}
.ptbl tr:hover .proj-archive,.ptbl .proj-archive:focus{opacity:1;color:var(--text)}

/* workspace */
.workspace{display:grid;grid-template-columns:minmax(240px,300px) 1fr;gap:12px;
  padding:12px;height:calc(100vh - 53px)}
.chat-pane{background:var(--surface);border:0.5px solid var(--border);
  border-radius:var(--radius-lg);display:flex;flex-direction:column;padding:12px;
  min-height:0;overflow:hidden}
.chat-head{font-size:15px;color:var(--muted);margin-bottom:8px;flex:0 0 auto}
.chat-stub{flex:1;display:flex;flex-direction:column;justify-content:center;gap:6px;text-align:center}
.chat-input-stub input{width:100%}
/* живой чат (T-3-5) */
.chat-messages{flex:1 1 auto;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:10px;padding-right:2px}
.chat-hint{flex:0 0 auto;padding:8px 2px;line-height:1.45}
.chat-msg{display:flex;flex-direction:column;gap:2px}
.chat-msg.chat-user{align-items:flex-end}
.chat-msg.chat-assistant{align-items:flex-start}
/* «сколько прошло» под репликой — отличить новые сообщения от старых */
.chat-time{font-size:10.5px;color:var(--muted);padding:0 4px}
/* реплика-уведомление со-пилота: реакция на действие, не ответ на вопрос */
.chat-note{align-items:stretch;gap:6px;padding:9px 11px;
  background:var(--warn-bg);border:0.5px solid var(--border);border-left:3px solid var(--warn);
  border-radius:var(--radius);font-size:13.5px;line-height:1.5;color:var(--text)}
.chat-note-body p{margin:0 0 5px} .chat-note-body p:last-child{margin:0}
.chat-note-actions{display:flex;flex-wrap:wrap;gap:6px}
.btn-xs{padding:3px 9px;font-size:12px;border-radius:var(--radius);line-height:1.4}
.chat-bubble{max-width:88%;padding:8px 11px;border-radius:var(--radius-lg);font-size:14px;line-height:1.5;overflow-wrap:anywhere}
.chat-user .chat-bubble{background:var(--info);color:#fff;border-bottom-right-radius:var(--radius)}
.chat-assistant .chat-bubble{background:var(--bg);color:var(--text);border:0.5px solid var(--border);border-bottom-left-radius:var(--radius)}
/* Реплика, не дошедшая до сервера: приглушаем пузырь, «не отправлено · Повторить» красным */
.chat-failed .chat-bubble{opacity:.55}
.chat-failed .chat-time{color:var(--err)}
.chat-retry{border:0;background:transparent;color:var(--err);font:inherit;font-size:10.5px;cursor:pointer;padding:0;text-decoration:underline}
.chat-bubble p{margin:0 0 6px} .chat-bubble p:last-child{margin:0}
.chat-bubble ul,.chat-bubble ol{margin:4px 0;padding-left:18px}
.chat-bubble li{margin:2px 0}
/* заголовки в ответах агента не должны быть огромными — размер как у текста */
.chat-bubble h1,.chat-bubble h2,.chat-bubble h3,
.chat-bubble h4,.chat-bubble h5,.chat-bubble h6{
  font-size:14px;font-weight:700;line-height:1.3;margin:10px 0 4px}
.chat-bubble h1:first-child,.chat-bubble h2:first-child,.chat-bubble h3:first-child,
.chat-bubble h4:first-child,.chat-bubble h5:first-child,.chat-bubble h6:first-child{margin-top:0}
.chat-bubble code{background:rgba(0,0,0,.06);border-radius:4px;padding:0 4px;font-size:12.5px}
/* прокрутка длинных списков в сворачиваемых карточках правой панели */
.fold-scroll{max-height:260px;overflow:auto}
.chat-input{flex:0 0 auto;display:flex;gap:6px;margin-top:10px;align-items:flex-end}
.chat-input input{flex:1;min-width:0}
.chat-ta{flex:1;min-width:0;font:inherit;padding:7px 10px;border:0.5px solid var(--border2);
  border-radius:var(--radius);background:var(--surface);color:var(--text);
  resize:none;overflow-y:auto;max-height:110px;line-height:1.4}
.chat-ta:focus{outline:2px solid var(--info-bg);border-color:var(--info)}
.chat-input button:disabled,.chat-input input:disabled,.chat-input .chat-ta:disabled{opacity:.5}
/* индикатор «агент печатает»: три пульсирующие точки */
.chat-typing{display:inline-flex;gap:4px;align-items:center}
.chat-typing span{width:6px;height:6px;border-radius:50%;background:var(--hint);
  animation:chat-dot 1s infinite ease-in-out}
.chat-typing span:nth-child(2){animation-delay:.15s}
.chat-typing span:nth-child(3){animation-delay:.3s}
@keyframes chat-dot{0%,80%,100%{opacity:.25}40%{opacity:1}}
.result-pane{background:var(--surface);border:0.5px solid var(--border);
  border-radius:var(--radius-lg);display:flex;flex-direction:column;overflow:hidden}
.tabs{display:flex;gap:4px;padding:8px 10px}
.tab{border:none;background:transparent;color:var(--muted);padding:5px 12px;
  border-radius:var(--radius);font-size:15px;cursor:pointer}
.tab:hover{background:#f0f1f3} .tab.active{background:var(--info-bg);color:var(--info)}
#result-panel{padding:12px 14px;overflow:auto;flex:1}

.panel-head{display:flex;align-items:center;justify-content:space-between;
  gap:10px;flex-wrap:wrap;margin-bottom:10px}
.counters{display:flex;gap:8px;flex-wrap:wrap}
.counter{background:var(--bg);border-radius:var(--radius);padding:4px 10px;font-size:14px}
.counter b.muted{color:var(--muted)}
.empty{padding:20px 0}

/* подсказка про роли файлов прошлой заявки — видна тем, кто может их менять */
.role-hint{display:flex;gap:8px;align-items:flex-start;margin:8px 0 2px;padding:8px 12px;
  border-radius:var(--radius);background:var(--bg);color:var(--hint);font-size:13.5px;line-height:1.45}
.role-hint .ti{font-size:16px;flex:none;margin-top:1px;color:var(--info)}
.role-hint b{color:var(--text);font-weight:600}

/* роль файла в датаруме (первичка / ревью экспертов / прошлая версия) */
.frole{border:0.5px solid var(--border2);border-radius:999px;background:var(--surface);
  color:var(--hint);font-size:12px;font-family:inherit;padding:2px 6px;cursor:pointer;max-width:130px}
.frole.frole-set{color:var(--info);border-color:var(--info);background:var(--info-bg)}
.pill-role{background:var(--info-bg);color:var(--info)}
/* файл выведен из пайплайна: зачёркнуто ТОЛЬКО имя, метка роли и статус —
   оранжевые, чтобы исключённые документы было видно в списке с первого взгляда */
.filerow-excluded .fname{text-decoration:line-through;text-decoration-thickness:1px;color:var(--muted)}
.filerow-excluded .ftype{color:var(--warn)}
.frole.frole-excluded{color:var(--warn);border-color:var(--warn);background:var(--warn-bg);font-weight:600}
.badge.b-excluded{background:var(--warn-bg);color:var(--warn);font-weight:600}

/* индикатор идущего синка — кнопки заблокированы, пока датарум обрабатывается */
.sync-busy{opacity:.7;cursor:default;pointer-events:none}
.sync-banner{display:flex;align-items:center;gap:8px;margin:8px 0 2px;padding:8px 12px;
  border-radius:var(--radius);background:var(--info-bg,#eef4ff);color:var(--info,#2f6feb);font-size:14px}
.sync-banner .ti{font-size:16px;flex:none}

/* статус текущего шага агента в чате («Читаю файл…») — виден прогресс хода */
.chat-status{display:flex;align-items:center;gap:6px;margin-top:6px;color:var(--hint);
  font-size:13px;font-style:italic}
.chat-status .ti{font-size:14px;flex:none}

/* привязка папки Drive после создания проекта (форма видна только админу) */
.drive-attach{display:flex;gap:6px}
.drive-attach input{padding:4px 10px;border:0.5px solid var(--border2);border-radius:var(--radius);
  font-size:13px;font-family:inherit;background:var(--surface);width:230px}

/* поиск по датаруму */
.dr-search{display:flex;align-items:center;gap:6px;margin:4px 0 12px;
  border:0.5px solid var(--border2);border-radius:var(--radius);padding:4px 10px;background:var(--surface)}
.dr-search .ti{font-size:16px;color:var(--hint)}
.dr-search input{border:none;outline:none;padding:4px 0;width:100%;background:transparent}
.filerow .fname[href]{color:var(--text)}
.filerow .fname[href]:hover{color:var(--info)}
.filerow .fname .ic-xs{color:var(--hint);margin-left:2px}

/* сворачиваемые карточки правой панели (оглавление, готовность, правки) */
.toc-card>summary.toc-summary,.fold-card>summary{list-style:none;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.toc-card>summary::-webkit-details-marker,.fold-card>summary::-webkit-details-marker{display:none}
.toc-chev,.fold-chev{transition:transform .15s;font-size:14px;color:var(--hint)}
.toc-card[open] .toc-chev,.fold-card[open] .fold-chev{transform:rotate(180deg)}
.fold-card[open]>summary{margin-bottom:8px}

/* инлайн-правка текста документа */
/* Форма правки должна занимать ту же ограниченную высоту, что и article.doc-body
   в просмотре (flex:1 в .doc-main с overflow:hidden), иначе она растягивается на
   весь контент, внутренний .cds-editor не скроллится, и вид «прыгает» к началу.
   Боковые отступы — чтобы тулбар/подсказка/поле редактора не липли к краю.
   ВАЖНО: ширина ТЕКСТА в правке = как в просмотре (article.doc-body: отступ 20px),
   иначе текст «прыгает» при переходе правка↔сохранение. Поэтому форма даёт 12px,
   а внутренний отступ .cds-editor уменьшен до 8px → суммарно те же 20px. */
.doc-body-edit{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;
  padding:6px 12px 12px}
.body-textarea{width:100%;font:13px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;
  padding:12px 14px;border:0.5px solid var(--border2);border-radius:var(--radius);resize:vertical}

/* визуальный редактор чистовика */
.editor-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;position:sticky;top:0;z-index:2;
  padding:6px;margin-bottom:8px;background:var(--surface);border:0.5px solid var(--border);
  border-radius:var(--radius)}
.tb-btn{min-width:30px;height:30px;padding:0 7px;border:0;border-radius:6px;background:transparent;
  color:var(--text);cursor:pointer;font-size:13px;display:inline-flex;align-items:center;justify-content:center}
.tb-btn:hover{background:var(--bg)}
.tb-btn .ti{font-size:17px}
.tb-sep{width:1px;height:18px;background:var(--border);margin:0 4px}
/* плавающая кнопка удаления картинки в редакторе (появляется по клику на картинку) */
.cds-img-del{position:fixed;z-index:60;background:var(--err);color:#fff;border:0;border-radius:6px;
  padding:4px 9px;font-size:12px;cursor:pointer;box-shadow:0 2px 8px rgba(0,0,0,.25)}
.tb-grow{flex:1 1 auto}
.editor-subhint{margin:0 0 8px;padding:0 2px}
.cds-editor{min-height:320px;padding:14px 8px;border:0.5px solid var(--border2);
  border-radius:var(--radius);outline:none;background:var(--surface)}
.cds-editor:focus{border-color:var(--info)}
.cds-editor table{border-collapse:collapse;width:100%;margin:8px 0}
.cds-editor th,.cds-editor td{border:0.5px solid var(--border2);padding:5px 8px;min-width:40px;
  overflow-wrap:break-word;word-break:normal}
.cds-editor th{background:var(--bg);font-weight:600}
.cds-editor blockquote{border-left:3px solid #E36C09;margin:8px 0;padding:2px 12px;color:var(--text)}

/* dataroom — сводка скана Drive */
.scan-summary{border:0.5px solid var(--border);border-radius:var(--radius);
  padding:10px 12px;margin-bottom:14px;background:var(--bg)}
.scan-summary.has-changes{border-color:var(--info);background:var(--info-bg)}
.scan-row{display:flex;flex-wrap:wrap;gap:12px;align-items:center;font-size:13px}
.scan-row .ti{font-size:16px;color:var(--info)}
.scan-new b{color:var(--ok)} .scan-chg b{color:var(--warn)} .scan-rm b{color:var(--err)}
.scan-actions{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.scan-list{font-size:12px;color:var(--muted)}
.scan-list .ti{font-size:13px;margin-right:2px}
.scan-actions .btn{align-self:flex-start;margin-top:2px}

/* dataroom folders */
.folder-group{margin-bottom:12px}
.folder-head{font-size:14px;color:var(--muted);font-weight:500;margin:8px 0 4px;
  display:flex;align-items:center;gap:6px}
.folder-files{padding-left:22px;border-left:1px solid var(--border);margin-left:8px;min-width:0}
/* имя файла усекается многоточием, а не распирает строку (длинные имена обрезались) */
.filerow .fname{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* file list */
.filelist,.artlist{list-style:none;margin:0;padding:0}
.filerow,.artrow{display:flex;align-items:center;gap:8px;padding:7px 0;min-width:0;
  border-bottom:0.5px solid var(--border)}
.artrow{cursor:pointer} .artrow:hover{background:var(--bg)}
.fname,.aname{font-size:15px} .fsum{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.filerow .fsum{margin-left:4px}
/* бейджи приоритета и статуса не сжимаются — всегда видны справа целиком */
.filerow .pill,.filerow .badge{flex:0 0 auto}
.pill{font-size:13px;background:var(--bg);border-radius:var(--radius);padding:1px 7px;color:var(--muted);cursor:help}
.pill-high{background:var(--info-bg);color:var(--info)}
.pill-low{color:var(--hint)}
.badge{margin-left:auto;font-size:13px;padding:2px 8px;border-radius:var(--radius)}
.b-ok{background:var(--ok-bg);color:var(--ok)} .b-warn{background:var(--warn-bg);color:var(--warn)}
.b-err{background:var(--err-bg);color:var(--err)} .b-mute{background:var(--bg);color:var(--muted)}
.b-check{background:var(--warn-bg);color:var(--warn)}

/* индикатор в графе: датарум обновился / есть необработанные файлы */
.graph-alert{display:flex;align-items:flex-start;gap:10px;margin:10px 0 16px;
  padding:10px 12px;border-radius:var(--radius);background:var(--warn-bg);
  color:var(--warn);font-size:13px;line-height:1.45}
.graph-alert>.ti{font-size:17px;flex:0 0 auto;margin-top:1px}
.graph-alert .btn{margin-left:auto;color:var(--text)}
/* идёт сборка графа */
.graph-alert.building{background:var(--info-bg);color:var(--info)}
/* сборка упала */
.graph-alert.failed{background:var(--err-bg);color:var(--err)}
.gp-bar{height:5px;background:var(--border);border-radius:3px;overflow:hidden;margin:6px 0}
.gp-bar>span{display:block;height:100%;background:var(--info);border-radius:3px;transition:width .4s}
.spin{animation:spin 1s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* graph (читаемая структура: раздел → категория → факты) */
.ic-xs{font-size:15px;vertical-align:-2px}
.g-nav{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}
.g-chip{font-size:14px;color:var(--text);background:var(--bg);border:0.5px solid var(--border);
  border-radius:99px;padding:3px 10px;text-decoration:none}
.g-chip:hover{border-color:var(--info);color:var(--info)}
.g-chip b{color:var(--muted);font-weight:600;margin-left:2px}
.g-chip.gap{color:var(--orange);border-color:var(--warn-bg)}
.g-section{margin-bottom:10px;scroll-margin-top:8px}
.g-section-title{font-size:17px;font-weight:500;padding:7px 0;cursor:pointer;
  border-bottom:1px solid var(--border);list-style:none;display:flex;align-items:center;gap:8px}
.g-section-title::-webkit-details-marker{display:none}
.g-section-title::before{content:"▸";color:var(--hint);font-size:13px;transition:transform .15s}
.g-section[open] .g-section-title::before{transform:rotate(90deg)}
.g-section-title.gap{color:var(--orange)}
.g-count{font-size:14px;color:var(--muted);font-weight:400;margin-left:auto;
  background:var(--bg);border-radius:99px;padding:0 8px}
.g-section[open] > *:not(summary){margin-top:8px}
/* контент раздела с отступом слева — отделён от заголовка раздела */
.g-cat{margin:0 0 12px 0;padding-left:14px}
.g-cat-name{font-size:14px;font-weight:500;color:var(--muted);text-transform:uppercase;
  letter-spacing:.03em;margin-bottom:5px}
.g-fact{background:var(--surface);border:0.5px solid var(--border);
  padding:8px 11px;margin-bottom:6px;border-radius:var(--radius)}
.g-fact-text{font-size:15.5px;line-height:1.5}
.g-fact-meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:5px}
.g-fact.gap .g-fact-text{color:var(--orange)}
.conf{font-size:13px;padding:1px 7px;border-radius:var(--radius);background:var(--bg);color:var(--muted)}
.conf-high{background:var(--ok-bg);color:var(--ok)}
.conf-medium{background:var(--warn-bg);color:var(--warn)}
.src{font-size:13px;color:var(--info);background:var(--info-bg);padding:1px 7px;border-radius:var(--radius)}

/* artifacts generate + фазы готовности */
.gen-form{display:flex;gap:6px}
.stage{margin-left:auto;font-size:13px;padding:2px 9px;border-radius:99px;border:0.5px solid var(--border2)}
.stage-not_started{background:var(--bg);color:var(--muted)}
.stage-draft{background:var(--info-bg);color:var(--info)}
.stage-revision{background:var(--warn-bg);color:var(--warn)}
.stage-external_review{background:#eef0ff;color:#534ab7}
.stage-done{background:var(--ok-bg);color:var(--ok)}

/* плитки артефактов */
.art-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
/* обёртка плитки: сама плитка-ссылка + кнопка запуска генерации под ней */
.art-tile-wrap{display:flex;flex-direction:column;gap:6px;min-width:0}
.art-regen{justify-content:center}
.art-tile{display:flex;flex-direction:column;gap:9px;background:var(--bg);
  border:0.5px solid var(--border2);border-radius:var(--radius-lg);padding:14px 15px;
  color:var(--text);text-decoration:none;transition:border-color .12s,box-shadow .12s}
.art-tile:hover{border-color:var(--info);box-shadow:0 2px 10px rgba(0,0,0,.06)}
.at-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.at-icon{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;
  border-radius:var(--radius);background:var(--info-bg);color:var(--info)}
.at-icon .ti{font-size:20px}
.at-stage{font-size:12px;padding:3px 10px;border-radius:99px;display:inline-flex;align-items:center;gap:5px}
.at-stage .ti{font-size:14px}
.at-title{font-size:16px;font-weight:500;line-height:1.3}
.at-status{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.at-status .badge{margin-left:0;display:inline-flex;align-items:center;gap:5px}
.at-status .badge .ti{font-size:13px}
.at-bar{height:5px;background:var(--bg);border-radius:99px;overflow:hidden}
.at-bar span{display:block;height:100%;background:var(--info);border-radius:99px}
.at-meta{display:flex;flex-wrap:wrap;gap:12px;font-size:13px;color:var(--muted)}
.at-meta .ti{font-size:14px;margin-right:2px}
.at-meta .at-warn{color:var(--orange)}
.at-foot{display:flex;align-items:center;gap:5px;border-top:0.5px solid var(--border);padding-top:8px}
.art-group-title{font-size:13px;font-weight:500;color:var(--muted);text-transform:uppercase;
  letter-spacing:.03em;margin:18px 0 10px}
/* рекомендуемые (ещё не созданные) — пунктирные плитки-заглушки */
.art-tile.ghost{border-style:dashed;background:transparent;box-shadow:none;cursor:default}
.art-tile.ghost:hover{border-color:var(--border2)}
.at-icon.ghost{background:var(--bg);color:var(--hint)}

/* правка по разделам */
.sections-page{flex:1 1 auto;min-height:0;overflow:auto;padding:16px 20px;max-width:980px;width:100%;margin:0 auto}
.sections-head{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.sec-card{background:var(--surface);border:0.5px solid var(--border);border-radius:var(--radius-lg);
  padding:14px 16px;margin-bottom:12px}
.sec-card.editing{border-color:var(--info)}
.sec-head{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.sec-title{font-size:15px;font-weight:500}
.sec-text{font-size:14px}
.sec-textarea{width:100%;font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;
  padding:10px 12px;border:0.5px solid var(--border2);border-radius:var(--radius);resize:vertical}
.sec-form-actions{display:flex;gap:6px;margin-top:8px}
.edit-rec{border-top:0.5px solid var(--border);padding-top:10px;margin-top:10px}
.edit-meta{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin-bottom:6px}
.diff{font:12px/1.45 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-wrap;
  background:var(--bg);border-radius:var(--radius);padding:8px 10px;margin:0;overflow-x:auto}
.diff .d-add{color:var(--ok);display:block}
.diff .d-del{color:var(--err);display:block}
.diff .d-ctx{color:var(--muted);display:block}

/* «Догнать по графу»: ревью в стиле Word — старое красным, новое зелёным, клик заменяет текст */
.cu-doc{line-height:1.9}
/* закреплённая шапка-меню ревью: прижата к верху скролл-контейнера (.doc-body, отступ 14/20),
   документ едет под ней. Негативные поля выводят фон на всю ширину поля.
   top:-14px компенсирует padding-top:14px контейнера — иначе при прокрутке плашка залипала
   на 14px ниже края, и в зазор между ней и верхним меню просвечивал текст (проверено скриншотом). */
.cu-toolbar{position:sticky;top:-14px;z-index:5;background:var(--surface);
  margin:-14px -20px 12px;padding:12px 20px 10px;border-bottom:0.5px solid var(--border)}
.cu-bar{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.cu-tools,.cu-sec-tools{display:flex;align-items:center;gap:6px}
.cu-count{font-size:14px;font-weight:500}
.cu-hint{margin:6px 0 0}
.cu-leg-old{color:var(--err)} .cu-leg-new{color:var(--ok)}
.btn-xs{padding:2px 7px;font-size:12px}
.cu-edit{background:var(--surface);border:0.5px solid var(--border);
  border-radius:var(--radius-lg);padding:10px 14px;margin:14px 0}
/* раздел с решёнными правками «оседает» в обычный текст — без рамки, кнопок и бейджа */
.cu-edit.done{background:transparent;border-color:transparent;padding:0;margin:8px 0}
.cu-edit.done .cu-head,.cu-edit.done .cu-fact{display:none}
.cu-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px}
.cu-title{font-weight:500}
.cu-fact{color:var(--muted);font-size:12px;margin:2px 0 8px}
.cu-text{white-space:pre-wrap;margin:0}
.chg.block{display:block;margin:6px 0}
.chg .side{position:relative;cursor:pointer;border-radius:3px;padding:0 3px}
.chg.block .side{display:block;margin:4px 0;padding:5px 8px}
.chg .old{color:var(--err);background:var(--err-bg)}
.chg .new{color:var(--ok);background:var(--ok-bg);margin-left:3px}
.chg.block .new{margin-left:0}
.chg:not(.done-old):not(.done-new) .side:hover{outline:1.5px solid var(--border2);outline-offset:1px}
.chg:not(.done-old):not(.done-new) .side::after{content:"выбрать";position:absolute;bottom:calc(100% + 6px);
  left:50%;transform:translateX(-50%);opacity:0;pointer-events:none;white-space:nowrap;font-size:11px;
  padding:2px 7px;border-radius:5px;background:var(--text);color:var(--surface);transition:opacity .1s;z-index:6}
.chg:not(.done-old):not(.done-new) .side:hover::after{opacity:1}
.chg.done-new .old,.chg.done-old .new{display:none}
.chg.done-new .new,.chg.done-old .old{color:inherit;background:transparent;margin-left:0;padding:0;cursor:default}

/* мета на карточке проекта: даты + расходы */
.pc-meta{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;align-items:center}
.pc-meta .ti{font-size:13px;vertical-align:-1px;margin-right:2px}

/* биллинг (только админам) */
.bill-total{font-size:24px;font-weight:700}
.bill-total-row{display:flex;align-items:baseline;gap:12px;margin:6px 0 16px}
.bill-card .bill-total{font-size:20px;font-weight:700}
.bill-admin{display:inline-block;font-size:10px;font-weight:600;background:var(--info);color:#fff;
  border-radius:4px;padding:0 5px;vertical-align:middle}
.bill-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.bill-row{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:3px 0;
  border-top:0.5px solid var(--border)}
.bill-row:first-of-type{border-top:none}
.bill-row>span{color:var(--hint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* блок «последние правки» в правой колонке документа */
.de-row{display:flex;gap:8px;align-items:flex-start;padding:5px 0;border-top:0.5px solid var(--border)}
.de-row:first-of-type{border-top:none}
.de-row>.ti{font-size:14px;color:var(--hint);margin-top:2px;flex:0 0 auto}
.de-line{font-size:12px;line-height:1.35}
.de-when{font-size:11px}

/* история — лента активности */
.hist-filter{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}
.g-chip.sel{background:var(--info);color:#fff;border-color:var(--info)}
.timeline{list-style:none;margin:0;padding:0}
.tl-item{display:flex;gap:12px;padding:0 0 16px;position:relative}
.tl-item::before{content:"";position:absolute;left:16px;top:34px;bottom:0;width:1px;background:var(--border)}
.tl-item:last-child::before{display:none}
.tl-dot{flex:0 0 auto;width:33px;height:33px;border-radius:50%;display:inline-flex;
  align-items:center;justify-content:center;background:var(--bg);color:var(--muted);z-index:1}
.tl-dot .ti{font-size:17px}
.tl-dot.a-info{background:var(--info-bg);color:var(--info)}
.tl-dot.a-ok{background:var(--ok-bg);color:var(--ok)}
.tl-dot.a-warn{background:var(--warn-bg);color:var(--warn)}
.tl-dot.a-ai{background:#f0ecff;color:#6a4ad1}
.tl-body{padding-top:6px;min-width:0}
.tl-line{font-size:14px;line-height:1.45}
.tl-target{color:var(--muted)}
.tl-meta{margin-top:2px}

/* document view: чат | текст | панель-инструменты (справа, сворачивается) */
.doc-page{display:grid;grid-template-columns:minmax(220px,280px) 1fr 260px;
  gap:12px;padding:12px;height:calc(100vh - 53px)}
.doc-page.panel-collapsed{grid-template-columns:minmax(220px,280px) 1fr}
.doc-page.panel-collapsed .doc-side{display:none}
.doc-gen-btn{width:100%;justify-content:center;margin-bottom:10px}
.doc-genstatus{padding:9px 11px;margin-bottom:10px;font-size:13px}
.doc-genstatus .ok{color:var(--ok,#1a7f37)}
.doc-genstatus .gp-bar{margin-top:6px}
.doc-page .chat-pane{height:100%}
.panel-toggle{margin-left:auto}
.panel-toggle .ic-expand{display:none}
.doc-page.panel-collapsed .panel-toggle .ic-collapse{display:none}
.doc-page.panel-collapsed .panel-toggle .ic-expand{display:inline}
.doc-side{display:flex;flex-direction:column;gap:10px;min-width:0;overflow:auto;font-size:14px}
.doc-side .card{padding:10px 12px}
.doc-side .chk{font-size:13.5px}
.doc-side .doc-toc .toc a{font-size:13.5px}
.doc-title{font-weight:500;margin-bottom:6px}
.metric{display:flex;justify-content:space-between;font-size:15px;margin-top:4px}
.chk{display:flex;gap:7px;align-items:flex-start;font-size:14.5px;line-height:1.4;margin:5px 0}
.chk i{flex:0 0 auto;font-size:17px;margin-top:1px}
.chk-ok{color:var(--text)} .chk-ok i{color:var(--ok)}
.chk-warn{color:var(--text)} .chk-warn i{color:var(--orange)}
.doc-side form{display:inline} .doc-side .btn-sm{margin:4px 4px 0 0}
.doc-main{background:var(--surface);border:0.5px solid var(--border);
  border-radius:var(--radius-lg);overflow:hidden;min-width:0;
  display:flex;flex-direction:column}
/* строка статуса — закреплённая шапка поля; прокручивается только текст ниже,
   поэтому скроллбар не доходит до верхнего угла, а стартует от «Бизнес-плана».
   Без разделительной линии — заголовок не отделяем (как в референсе). */
.doc-stagebar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:0 0 auto;
  padding:14px 20px 6px}
.doc-stagebar select{padding:4px 8px;font-size:15px;width:auto}
/* Переключение кнопок правки по стадии без перезагрузки (setStatus ставит/снимает
   .stage-locked): в рабочих стадиях видны кнопки, в остальных — плашка-замок */
.doc-edit-controls{display:inline-flex;align-items:center;gap:8px}
.doc-edit-controls .edit-controls{display:inline-flex;align-items:center;gap:8px}
.doc-edit-controls .edit-locked-hint{display:none;align-items:center;gap:4px}
.doc-edit-controls.stage-locked .edit-controls{display:none}
.doc-edit-controls.stage-locked .edit-locked-hint{display:inline-flex}

/* кастомный статус-селектор документа */
.status-dd{position:relative}
.status-trigger{display:inline-flex;align-items:center;gap:7px;font-size:15px;
  background:var(--surface);border:0.5px solid var(--border2);border-radius:var(--radius);
  padding:5px 10px;cursor:pointer}
.status-trigger:hover{background:var(--bg)}
.st-chev{font-size:16px;color:var(--muted)}
.status-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:20;min-width:230px;
  background:var(--surface);border:0.5px solid var(--border);border-radius:var(--radius-lg);
  box-shadow:0 6px 24px rgba(0,0,0,.10);padding:6px}
.status-grp{font-size:13px;font-weight:600;color:var(--hint);text-transform:uppercase;
  letter-spacing:.04em;padding:7px 10px 3px}
.status-opt{display:flex;align-items:center;gap:9px;width:100%;border:none;background:none;
  font-size:15px;color:var(--text);padding:7px 10px;border-radius:var(--radius);cursor:pointer;text-align:left}
.status-opt:hover{background:var(--bg)}
.status-opt .ti:first-child{font-size:19px}
.status-opt .sel-mark{margin-left:auto;color:var(--muted);visibility:hidden}
.status-opt.sel .sel-mark{visibility:visible}
.st-not_started{color:var(--hint)} .st-draft{color:var(--info)}
.st-revision{color:var(--orange)} .st-external_review{color:#534ab7} .st-done{color:var(--ok)}
/* без своей прокрутки — скроллится вся правая панель .doc-side (один скроллбар у края) */
.doc-toc .toc ul{list-style:none;margin:0;padding-left:12px}
.doc-toc .toc>ul{padding-left:0}
.doc-toc .toc li{margin:2px 0}
.doc-toc .toc a{font-size:14.5px;color:var(--muted);text-decoration:none;line-height:1.4}
.doc-toc .toc a:hover{color:var(--info)}
.doc-body :is(h1,h2,h3,h4){scroll-margin-top:8px}
.doc-section{scroll-margin-top:48px;margin-bottom:18px}
.doc-h{font-size:18px;font-weight:500;margin:0 0 8px;padding-bottom:4px;border-bottom:0.5px solid var(--border)}
.stale{background:var(--warn-bg);border-color:var(--warn-bg);position:relative}
.stale .small{color:var(--warn)}
/* Крестик закрытия плашки «Агент подготовил правки» */
.stale-x{position:absolute;top:6px;right:6px;border:none;background:transparent;cursor:pointer;
  color:var(--warn);opacity:.6;padding:2px;line-height:1;font-size:15px}
.stale-x:hover{opacity:1}
.hint{cursor:help;color:var(--hint)}
.doc-body{font-size:15px;line-height:1.6;overflow-wrap:anywhere;
  flex:1 1 auto;min-height:0;overflow:auto;padding:14px 20px 18px}
.doc-empty{padding:14px 20px}
.live-draft-banner{display:flex;align-items:center;gap:8px;margin:0 0 16px;padding:8px 12px;
  background:var(--info-bg,#eef4ff);color:var(--muted);border-radius:8px;font-size:13px;
  position:sticky;top:0;z-index:2}
.autosave-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;
  flex-wrap:wrap;margin:0 0 12px;padding:8px 12px;background:var(--info-bg,#eef4ff);
  border:0.5px solid var(--border);border-radius:8px;font-size:13px}
.autosave-banner-actions{display:flex;gap:8px;flex-shrink:0}
.autosave-status{margin-left:6px;font-style:italic}
.doc-body p{margin:0 0 8px}
.doc-body table{display:block;max-width:100%;overflow-x:auto}
.doc-body pre{white-space:pre-wrap;word-break:break-word}
.doc-body img{max-width:100%;height:auto}
.doc-body h1{font-size:20px;font-weight:500;margin:14px 0 8px}
.doc-body h2{font-size:17px;font-weight:500;margin:14px 0 6px}
.doc-body h3,.doc-body h4{font-size:15.5px;font-weight:500;margin:12px 0 5px}
.doc-body blockquote{border-left:3px solid var(--orange);color:var(--orange);
  margin:8px 0;padding:6px 12px;background:var(--bg)}
/* Кнопка «Предложить исправление» на пометке доработки (агент дописывает по клику) */
.cds-gap-fix{display:inline-flex;align-items:center;gap:4px;margin-top:8px;
  color:var(--orange);border-color:var(--orange);background:transparent}
.cds-gap-fix:hover:not(:disabled){background:var(--orange);color:#fff}
.cds-gap-fix:disabled{opacity:.7;cursor:default}
/* Крестик «удалить пометку» рядом с «Предложить исправление» */
.cds-gap-del{margin-top:8px;margin-left:6px;color:var(--muted);border-color:var(--border2);
  background:transparent;line-height:1}
.cds-gap-del:hover:not(:disabled){color:var(--err);border-color:var(--err)}
.cds-gap-del:disabled{opacity:.5;cursor:default}
.doc-body table{border-collapse:collapse;width:100%}
/* Ячейки таблиц НЕ наследуют overflow-wrap:anywhere из .doc-body — иначе узкая колонка
   рвёт слова по буквам («Транза/кцион/ная» вертикально) и схлопывается до 1 символа, а
   соседняя длинная колонка забирает всю ширину. break-word держит минимум колонки по
   самому длинному слову (читаемо), но длинные токены/URL всё равно ломает при нужде;
   таблица при переполнении скроллится горизонтально (.doc-body table: overflow-x:auto). */
.doc-body td,.doc-body th{border:0.5px solid var(--border);padding:4px 8px;
  overflow-wrap:break-word;word-break:normal}

/* Шаблоны методологии (Phase 6) */
.tpl-group{font-size:15px;font-weight:500;margin:20px 0 8px}
.tpl-title{font-weight:500;margin-bottom:4px}
/* Редактор шаблона = тот же каркас, что у документа (doc-page): агент слева,
   редактор в центре, правая колонка (оглавление/проекты/версии) справа.
   Сетка как у doc-page — без авто-скрытия правой колонки. */
.tpl-page{grid-template-columns:minmax(220px,280px) 1fr 260px}
.tpl-pane{display:contents}
.tpl-used{list-style:none;margin:4px 0 0;padding:0;display:flex;flex-direction:column;gap:5px}
.tpl-used li{font-size:13.5px;overflow-wrap:anywhere}
/* заголовок шаблона под меню (как заголовок тела документа); отступы как у формы */
.tpl-doc-head{padding:10px 20px 0}
.tpl-doc-head h1{margin:0;font-size:22px}
.tpl-form{display:flex;flex-direction:column;gap:10px;flex:1 1 auto;min-height:0;padding:8px 20px 14px}
.tpl-form label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted)}
.tpl-form input{padding:8px 10px;border:0.5px solid var(--border2);border-radius:var(--radius);font-size:14px}
.tpl-vlist{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:2px}
.tpl-vrow{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 0;border-bottom:0.5px solid var(--border)}
.tpl-addform{width:420px}
.tpl-addform textarea{padding:8px 10px;border:0.5px solid var(--border2);border-radius:var(--radius);font-size:14px;font-family:inherit;resize:vertical}
.tpl-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;margin-left:6px;white-space:nowrap}
.tpl-badge.filled{background:#e6f4ea;color:#1e7e34}
.tpl-badge.stub{background:#f0f1f3;color:#6b7280}
.tpl-tile{cursor:pointer}
.tpl-tile .at-title{margin-top:6px}
.tpl-empty-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:#b26a00;background:#fff4e5;padding:2px 8px;border-radius:999px;vertical-align:middle;margin-left:6px}
.tpl-empty{margin:0 0 8px}
.tpl-fieldlabel{font-size:13px;color:var(--muted);margin-bottom:2px}
.tpl-cds{flex:1 1 auto;min-height:0;overflow:auto}
.tpl-versions-fold{flex:0 0 auto;padding:8px 20px 12px;border-top:0.5px solid var(--border)}
/* режим просмотр↔правка: класс .tpl-editing на .doc-main управляет видимостью
   (кнопки лежат в стейджбаре, тулбар — в форме; оба внутри .doc-main) */
.doc-main:not(.tpl-editing) .tpl-edit-only{display:none}
.doc-main.tpl-editing .tpl-read-only{display:none}
.doc-main:not(.tpl-editing) .tpl-cds{border-color:transparent}
