
/* ===================== СРАВНЕНИЕ ДОКУМЕНТОВ (модуль CMP) ===================== */
#screen-compare.screen.active{display:flex;flex-direction:column;height:calc(100vh - 36px);min-height:0}
.cmp-bar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;flex:none;margin-bottom:14px}
.cmp-bar-title{display:flex;align-items:center;gap:9px;font-size:18px;font-weight:750}
.cmp-bar-title .ico{width:21px;height:21px;color:var(--iris)}
.cmp-bar-files{display:flex;align-items:center;gap:8px;flex:1;min-width:260px}
.cmp-bar-file{display:flex;align-items:center;gap:8px;min-width:0;flex:1;height:38px;padding:0 10px;
  border:1px solid var(--hairline);border-radius:var(--r-sm);background:var(--surface-2);cursor:pointer;
  color:var(--txt-2);transition:all var(--fast)}
.cmp-bar-file:hover{border-color:var(--iris);color:var(--txt)}
.cmp-bar-file.has{color:var(--txt)}
.cmp-bf-up{width:16px;height:16px;flex:none}
.cmp-bf-ph{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmp-bf-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
.cmp-bf-x{flex:none;width:20px;height:20px;display:grid;place-items:center;border-radius:4px;color:var(--txt-3)}
.cmp-bf-x:hover{background:var(--elev);color:var(--bad)}.cmp-bf-x .ico{width:13px;height:13px}
.cmp-bar-swap{width:34px;height:34px;flex:none}.cmp-bar-swap .ico{width:16px;height:16px}
.cmp-go{flex:none}.cmp-go:disabled{opacity:.45;cursor:not-allowed;filter:grayscale(.4)}
/* ---- фаза загрузки ---- */
.cmp-upload{flex:1;min-height:0;display:flex;flex-direction:column;justify-content:center;gap:18px}
.cmp-zones{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.cmp-zone{border:1.5px dashed var(--hairline);border-radius:var(--r-lg);background:var(--surface-2);
  min-height:200px;display:grid;place-items:center;padding:22px;cursor:pointer;transition:all var(--fast);text-align:center}
.cmp-zone:hover,.cmp-zone.drag{border-color:var(--iris);background:var(--elev)}
.cmp-zone.drag{box-shadow:0 0 0 3px color-mix(in oklab,var(--iris) 28%,transparent) inset}
.cmp-z-empty{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--txt-2)}
.cmp-z-empty .dz-ic{width:54px;height:54px;border-radius:8px;display:grid;place-items:center;background:var(--accent-soft);color:var(--iris-300);margin-bottom:4px}
.cmp-z-empty b{font-size:15px;font-weight:700;color:var(--txt)} .cmp-z-empty span{font-size:12.5px}
.cmp-z-load{display:flex;flex-direction:column;align-items:center;gap:10px;color:var(--txt-2)}
.cmp-z-load b{font-size:14px;color:var(--txt)} .cmp-z-name,.cmp-z-load .cmp-z-name{font-size:12px;color:var(--txt-3)}
.cmp-z-err{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--bad);max-width:90%}
.cmp-z-err .ico{width:26px;height:26px}.cmp-z-err b{font-size:13.5px;font-weight:650;color:var(--bad)}
.cmp-z-file{display:flex;align-items:center;gap:12px;width:100%;max-width:340px;padding:14px 16px;border-radius:var(--r-md);background:var(--surface);border:1px solid var(--hairline)}
.cmp-z-meta{flex:1;min-width:0;text-align:left}.cmp-z-meta b{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmp-z-meta span{font-size:11.5px;color:var(--txt-3)}
.cmp-z-x{flex:none;width:28px;height:28px;display:grid;place-items:center;border-radius:5px;color:var(--txt-3);border:1px solid var(--hairline)}
.cmp-z-x:hover{color:var(--bad);background:var(--elev)}.cmp-z-x .ico{width:14px;height:14px}
.cmp-upload-hint{text-align:center;color:var(--txt-3);font-size:12.5px}
/* ---- формат-бейдж ---- */
.cmp-fmt{position:relative;flex:none;width:34px;height:34px;display:grid;place-items:center}
.cmp-fmt .ico{width:30px;height:30px;color:var(--fc)}
.cmp-fmt-b{position:absolute;bottom:2px;left:50%;transform:translateX(-50%);font-size:7.5px;font-weight:800;
  letter-spacing:.3px;color:#fff;background:var(--fc);border-radius:2px;padding:1px 2px;line-height:1}
/* ---- фаза ревью: тулбар ---- */
.cmp-toolbar{display:flex;align-items:center;gap:10px;flex:none;padding:8px 4px;margin-bottom:8px;border-bottom:1px solid var(--hairline)}
.cmp-spacer{flex:1}
.cmp-zoom{display:flex;align-items:center;gap:4px}
.cmp-tb{width:32px;height:32px;font-size:18px;font-weight:700;line-height:1}
.cmp-zoom-val{min-width:48px;text-align:center;font-size:12.5px;font-family:var(--mono);color:var(--txt-2)}
.cmp-trunc{font-size:11.5px;color:var(--warn)}
.cmp-hidewrap{position:relative}
.cmp-hidemenu{position:absolute;right:0;top:38px;z-index:30;background:var(--surface);border:1px solid var(--hairline);
  border-radius:var(--r-md);box-shadow:var(--shadow-2);padding:5px;min-width:180px;display:flex;flex-direction:column;gap:2px}
.cmp-hidemenu button{text-align:left;padding:8px 11px;border-radius:5px;font-size:13px;color:var(--txt);background:transparent}
.cmp-hidemenu button:hover{background:var(--elev)}
/* ---- фаза ревью: тело ---- */
.cmp-main{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:14px}
.cmp-docs{min-width:0;overflow:auto;border:1px solid var(--hairline);border-radius:var(--r-lg);background:var(--surface);
  font-family:var(--mono);font-size:calc(12.5px*var(--cmp-zoom,1));line-height:1.55}
.cmp-row{display:grid;grid-template-columns:minmax(0,1fr) 56px minmax(0,1fr);align-items:stretch}
.cmp-docs.hide-l .cmp-row{grid-template-columns:0 0 minmax(0,1fr)}
.cmp-docs.hide-r .cmp-row{grid-template-columns:minmax(0,1fr) 0 0}
.cmp-docs.hide-l .cmp-ln.l,.cmp-docs.hide-l .cmp-gut,.cmp-docs.hide-r .cmp-ln.r,.cmp-docs.hide-r .cmp-gut{display:none}
.cmp-ln{padding:1px 12px;white-space:pre-wrap;word-break:break-word;border-bottom:1px solid var(--hairline-2)}
.cmp-ln.l{border-right:1px solid var(--hairline-2)}
.cmp-ln.blank{background:repeating-linear-gradient(45deg,transparent,transparent 6px,var(--hairline-2) 6px,var(--hairline-2) 7px)}
.cmp-gut{border-bottom:1px solid var(--hairline-2);display:flex;align-items:center;justify-content:center;gap:3px;background:var(--surface-2)}
.cmp-arrow{width:20px;height:20px;border-radius:4px;display:grid;place-items:center;font-size:17px;font-weight:800;line-height:1;
  color:var(--txt-2);border:1px solid var(--hairline);background:var(--surface);transition:all var(--fast)}
.cmp-arrow:hover{color:#fff;background:var(--iris);border-color:var(--iris);transform:scale(1.08)}
/* подсветка различий (зелёный=добавлено · красный=удалено · жёлтый=изменено) */
.cmp-row.add .cmp-ln.r{background:color-mix(in oklab,var(--ok) 16%,transparent)}
.cmp-row.del .cmp-ln.l{background:color-mix(in oklab,var(--bad) 16%,transparent)}
.cmp-row.mod .cmp-ln{background:color-mix(in oklab,var(--warn) 13%,transparent)}
.cmp-wadd{background:color-mix(in oklab,var(--ok) 34%,transparent);border-radius:2px}
.cmp-wdel{background:color-mix(in oklab,var(--bad) 32%,transparent);border-radius:2px;text-decoration:line-through;text-decoration-color:color-mix(in oklab,var(--bad) 70%,transparent)}
.cmp-row.flash .cmp-ln{animation:cmpFlash 1s var(--ease)}
@keyframes cmpFlash{0%,100%{box-shadow:none}30%{box-shadow:0 0 0 2px var(--iris) inset}}
.cmp-empty,.cmp-empty-s{padding:30px;text-align:center;color:var(--txt-3);font-size:13px;font-family:var(--font)}
/* ---- боковая аналитика ---- */
.cmp-side{display:flex;flex-direction:column;gap:12px;min-height:0;overflow:auto;padding-right:2px}
.cmp-side-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;color:var(--txt-2)}
.cmp-side-head b{font-size:15px;color:var(--txt)}
.cmp-counts{display:flex;gap:6px;margin-left:auto}
.cmp-cnt{min-width:26px;height:22px;padding:0 7px;display:grid;place-items:center;border-radius:5px;font-size:12px;font-weight:700}
.cmp-cnt.add{background:color-mix(in oklab,var(--ok) 18%,transparent);color:var(--ok)}
.cmp-cnt.mod{background:color-mix(in oklab,var(--warn) 20%,transparent);color:var(--warn)}
.cmp-cnt.del{background:color-mix(in oklab,var(--bad) 18%,transparent);color:var(--bad)}
.cmp-changes{display:flex;flex-direction:column;gap:6px}
.cmp-chg{display:flex;flex-direction:column;gap:3px;text-align:left;padding:8px 11px;border-radius:var(--r-md);
  background:var(--surface-2);border:1px solid var(--hairline);border-left:3px solid var(--txt-3);transition:all var(--fast)}
.cmp-chg:hover{background:var(--elev);transform:translateX(2px)}
.cmp-chg.add{border-left-color:var(--ok)}.cmp-chg.mod{border-left-color:var(--warn)}.cmp-chg.del{border-left-color:var(--bad)}
.cmp-chg-h{display:flex;align-items:center;gap:7px}
.cmp-chg-n{font-size:11px;font-weight:700;color:var(--txt-3)}
.cmp-chg-t{font-size:12px;font-weight:700;color:var(--txt)}
.cmp-chg-p{font-size:11.5px;color:var(--txt-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* ---- ИИ-блок ---- */
.cmp-ai{margin-top:4px;border:1px solid var(--hairline);border-radius:var(--r-lg);background:var(--surface-2);overflow:hidden}
.cmp-ai-head{display:flex;align-items:center;gap:8px;padding:11px 13px;border-bottom:1px solid var(--hairline);font-size:13px;font-weight:700}
.cmp-ai-head .ico{width:17px;height:17px;color:var(--iris)}.cmp-ai-head>span{flex:1}
.cmp-ai-run{flex:none}.cmp-ai-run .ico{width:14px;height:14px}
.cmp-ai-body{padding:13px;font-size:13px;line-height:1.6;max-height:340px;overflow:auto}
.cmp-ai-hint{color:var(--txt-3);font-size:12.5px}
.cmp-ai-h{font-size:13px;font-weight:750;color:var(--iris-300);margin:10px 0 4px}.cmp-ai-h:first-child{margin-top:0}
.cmp-ai-body p{margin:0 0 8px}.cmp-ai-body ul{margin:0 0 8px;padding-left:18px}.cmp-ai-body li{margin:2px 0}
.cmp-ai-err{color:var(--bad);font-size:12.5px}.cmp-ai-think{color:var(--txt-2);font-size:12.5px}
.cmp-report{margin-top:auto;flex:none;width:100%}
@media (max-width:900px){.cmp-main{grid-template-columns:1fr}.cmp-side{max-height:none}.cmp-zones{grid-template-columns:1fr}}

/* ===== АНОНИМИЗАЦИЯ — split-view (модуль ANON, переиспользует .cmp-bar/.cmp-main/.cmp-side) ===== */
#screen-anon.screen.active{display:flex;flex-direction:column;height:calc(100vh - 36px);min-height:0}
#screen-anon .cmp-bar-title .ico{color:var(--warn)}
.anon-docs{flex:1;min-height:0;display:grid;grid-template-columns:1fr 1fr;gap:14px}
.anon-pane{min-width:0;display:flex;flex-direction:column;border:1px solid var(--hairline);border-radius:var(--r-lg);background:var(--surface);overflow:hidden}
.anon-pane-h{flex:none;display:flex;align-items:center;gap:8px;padding:9px 13px;border-bottom:1px solid var(--hairline);font-size:13px;font-weight:700}
.anon-pane-h .ico{width:16px;height:16px;color:var(--txt-2)}
.anon-pane.out .anon-pane-h{color:var(--ok)}.anon-pane.out .anon-pane-h .ico{color:var(--ok)}
.anon-body{flex:1;min-height:0;overflow:auto;padding:12px 14px;white-space:pre-wrap;word-break:break-word;
  font-family:var(--mono);font-size:12.5px;line-height:1.62;color:var(--txt)}
.anon-body mark{background:color-mix(in oklab,var(--warn) 30%,transparent);color:var(--txt);border-radius:3px;padding:0 3px;font-weight:600}
.anon-trunc{margin-top:10px;color:var(--warn);font-size:11.5px;font-family:var(--font)}
.anon-status{display:flex;align-items:flex-start;gap:9px;padding:10px 12px;border-radius:var(--r-md);font-size:12.5px;line-height:1.5;
  background:color-mix(in oklab,var(--ok) 12%,transparent);border:1px solid color-mix(in oklab,var(--ok) 30%,transparent)}
.anon-status .ico{flex:none;width:18px;height:18px;color:var(--ok);margin-top:1px}
.anon-cats{display:flex;flex-direction:column;gap:6px}
.anon-cat{display:flex;align-items:center;gap:9px;padding:7px 11px;border-radius:var(--r-md);cursor:pointer;font-size:12.5px;
  background:var(--surface-2);border:1px solid var(--hairline)}
.anon-cat:hover{background:var(--elev)}
.anon-cat input{cursor:pointer;accent-color:var(--iris)}
.anon-cat .acc-n{margin-left:auto;min-width:22px;height:20px;padding:0 6px;display:grid;place-items:center;border-radius:5px;
  font-size:11px;font-weight:700;color:var(--txt-3);background:var(--surface)}
.anon-acts{margin-top:auto;display:flex;flex-direction:column;gap:8px;padding-top:4px}
.anon-acts .btn{width:100%;justify-content:center}
@media (max-width:900px){.anon-docs{grid-template-columns:1fr}}

/* ---- Проверка договора (модуль CONTRACT) — свои классы поверх cmp/anon ---- */
.ctr-doc{font-family:var(--mono);font-size:12.5px;line-height:1.7;white-space:normal;padding:0}
.ctr-line{display:flex;gap:10px;padding:1px 14px;align-items:baseline;white-space:pre-wrap;word-break:break-word}
.ctr-lno{flex:none;width:34px;text-align:right;color:var(--txt-3);user-select:none;font-size:11px}
.ctr-lt{flex:1;min-width:0}
.ctr-hit{cursor:pointer;border-left:3px solid transparent;margin-left:-3px}
.ctr-hit.ctr-high{background:color-mix(in oklab,var(--bad) 14%,transparent);border-left-color:var(--bad)}
.ctr-hit.ctr-med{background:color-mix(in oklab,var(--warn) 14%,transparent);border-left-color:var(--warn)}
.ctr-hit.ctr-low{background:color-mix(in oklab,var(--iris) 12%,transparent);border-left-color:var(--iris)}
.ctr-line.flash{animation:ctrFlash 1.2s ease}
@keyframes ctrFlash{0%,100%{box-shadow:none}20%{box-shadow:inset 0 0 0 2px var(--iris)}}
.ctr-line.ctr-added mark,.ctr-doc .cmp-wadd{background:color-mix(in oklab,var(--ok) 26%,transparent);color:var(--txt);border-radius:3px;padding:0 3px;font-weight:600}
.ctr-edit{width:100%;height:100%;min-height:320px;border:none;background:transparent;color:var(--txt);
  font-family:var(--mono);font-size:12.5px;line-height:1.7;resize:none;outline:none;padding:12px 14px}
.ctr-cards{display:flex;flex-direction:column;gap:10px;margin-bottom:2px}
.ctr-group{display:flex;flex-direction:column;gap:6px}
.ctr-group-h{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;color:var(--txt-2);text-transform:uppercase;letter-spacing:.03em;margin-top:4px}
.ctr-group-h .acc-n{margin-left:auto;min-width:20px;height:18px;padding:0 5px;display:grid;place-items:center;border-radius:5px;
  background:var(--elev);color:var(--txt-2);font-size:11px;font-weight:700;text-transform:none}
.ctr-card{display:flex;gap:9px;padding:10px 11px;border:1px solid var(--hairline);border-left-width:3px;border-radius:var(--r-md);
  background:var(--surface);cursor:pointer;transition:background .12s,border-color .12s}
.ctr-card:hover{background:var(--elev)}
.ctr-card.on{border-color:var(--iris);background:color-mix(in oklab,var(--iris) 7%,transparent)}
.ctr-card.ctr-high{border-left-color:var(--bad)}
.ctr-card.ctr-med{border-left-color:var(--warn)}
.ctr-card.ctr-low{border-left-color:var(--iris)}
.ctr-chk{flex:none;display:flex;align-items:flex-start;padding-top:1px}
.ctr-chk input{cursor:pointer;accent-color:var(--iris);width:15px;height:15px}
.ctr-card-b{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.ctr-card-h{display:flex;align-items:center;gap:7px;flex-wrap:wrap;font-size:12.5px}
.ctr-card-h b{font-weight:700}
.ctr-sev{flex:none;font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:var(--r-pill);text-transform:uppercase;letter-spacing:.02em}
.ctr-sev-high{background:color-mix(in oklab,var(--bad) 18%,transparent);color:var(--bad)}
.ctr-sev-med{background:color-mix(in oklab,var(--warn) 20%,transparent);color:var(--warn)}
.ctr-sev-low{background:color-mix(in oklab,var(--iris) 18%,transparent);color:var(--iris)}
.ctr-loc{margin-left:auto;font-size:11px;color:var(--txt-3);font-family:var(--mono)}
.ctr-card-d{font-size:12px;line-height:1.5;color:var(--txt-2)}
.ctr-card-q{font-size:11.5px;line-height:1.45;color:var(--txt-3);font-style:italic;border-left:2px solid var(--hairline);padding-left:8px}
.ctr-card-c{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--iris);font-weight:600}
.ctr-card-c .ico{width:13px;height:13px}
.ctr-card-s{font-size:12px;line-height:1.5;color:var(--txt);background:color-mix(in oklab,var(--ok) 8%,transparent);border-radius:var(--r-sm);padding:6px 8px}
.ctr-card-s b{color:var(--ok)}
.ctr-sources{border:1px solid var(--hairline);border-radius:var(--r-md);padding:2px 4px;font-size:12px}
.ctr-sources>summary{cursor:pointer;display:flex;align-items:center;gap:7px;padding:6px 8px;font-weight:600;color:var(--txt-2)}
.ctr-sources>summary .ico{width:14px;height:14px}
.ctr-src{display:flex;flex-direction:column;gap:3px;padding:7px 9px;border-top:1px solid var(--hairline)}
.ctr-src b{font-size:12px}
.ctr-src-sc{font-size:10.5px;color:var(--txt-3);font-family:var(--mono)}
.ctr-src-f{font-size:11.5px;line-height:1.45;color:var(--txt-2)}
.ctr-enrich{width:100%;justify-content:center;margin-top:2px}
.ctr-checking{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 12px;text-align:center}
.ctr-prog{font-size:12px;color:var(--txt-2)}

/* ---- Генератор документов (модуль GEN) — реюз .cmp-*/.anon-*/.ctr-*; свои .gen-* ---- */
/* Единая иконка страницы = синяя, как на плашке (иконка GEN_ICON='i-doc-prep'). В шапке
   заголовок уже синий (.cmp-bar-title .ico → var(--iris)); чип типа наследовал цвет текста —
   красим и его в синий, чтобы обе иконки в шапке были одинаковые. >.ico — только ведущая
   иконка чипа, крестик «сменить тип» (.cmp-bf-x) не трогаем. */
#screen-generator .cmp-bar-file>.ico{color:var(--iris)}
.gen-pick{overflow:auto}
.gen-pick-inner{max-width:720px;width:100%;margin:0 auto;padding:22px 16px;display:flex;flex-direction:column;gap:16px}
.gen-pick-head{display:flex;flex-direction:column;gap:4px}
.gen-pick-head b{font-size:17px}
.gen-search{display:flex;align-items:center;gap:8px;padding:9px 12px;border:1px solid var(--hairline);border-radius:var(--r-md);background:var(--surface-2)}
.gen-search .ico{width:16px;height:16px;color:var(--txt-3);flex:none}
.gen-search input{flex:1;border:none;background:transparent;color:var(--txt);font-size:13.5px;font-family:var(--font);outline:none}
.gen-groups{display:flex;flex-direction:column;gap:8px}
.gen-group{border:1px solid var(--hairline);border-radius:var(--r-md);overflow:hidden;background:var(--surface)}
.gen-group-h{width:100%;display:flex;align-items:center;gap:9px;padding:12px 14px;background:transparent;border:none;cursor:pointer;color:var(--txt);font-family:var(--font)}
.gen-group-t{font-weight:600;font-size:13.5px}
.gen-group-h .acc-n{min-width:22px;height:20px;padding:0 6px;display:grid;place-items:center;border-radius:5px;background:var(--surface-2);color:var(--txt-3);font-size:11px;font-family:var(--mono)}
.gen-caret{width:15px;height:15px;color:var(--txt-3);transition:transform .16s;transform:rotate(90deg)}
.gen-group.open .gen-caret{transform:rotate(-90deg)}
.gen-group-b{display:none;flex-direction:column;border-top:1px solid var(--hairline)}
.gen-group.open .gen-group-b{display:flex}
.gen-type{display:flex;align-items:center;gap:8px;padding:10px 14px 10px 22px;background:transparent;border:none;border-top:1px solid var(--hairline);cursor:pointer;color:var(--txt-2);font-size:13px;font-family:var(--font);text-align:left}
.gen-type:first-child{border-top:none}
.gen-type:hover{background:var(--surface-2);color:var(--txt)}
.gen-type span{flex:1}
.gen-type .ico{width:14px;height:14px;color:var(--txt-3)}
.gen-tpl-n{flex:none;font-size:10.5px;font-family:var(--mono);color:var(--ok);background:color-mix(in oklab,var(--ok) 14%,transparent);border-radius:5px;padding:2px 6px}
.gen-tpl-sum{margin-top:8px;font-size:12px;line-height:1.5}
.gen-tpl-sum code{font-family:var(--mono);font-size:11px;background:var(--surface-2);border-radius:4px;padding:1px 4px}
.gen-ctx{overflow:auto}
.gen-ctx-inner{max-width:760px;width:100%;margin:0 auto;padding:22px 16px;display:flex;flex-direction:column;gap:14px}
.gen-ctx-head{display:flex;flex-direction:column;gap:4px}
.gen-ctx-head b{font-size:17px}
.gen-ctx-type{font-size:11px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--iris)}
.gen-ctx-area{width:100%;min-height:220px;resize:vertical;padding:12px 14px;border:1px solid var(--hairline);border-radius:var(--r-md);background:var(--surface-2);color:var(--txt);font-size:13.5px;line-height:1.55;font-family:var(--font);outline:none}
.gen-ctx-area:focus{border-color:var(--iris)}
.gen-atts{display:flex;flex-wrap:wrap;gap:7px}
.gen-att{display:inline-flex;align-items:center;gap:6px;padding:5px 8px;border:1px solid var(--hairline);border-radius:6px;background:var(--surface-2);font-size:12px;color:var(--txt-2)}
.gen-att .ico{width:13px;height:13px;color:var(--txt-3)}
.gen-att button{display:inline-flex;background:transparent;border:none;cursor:pointer;color:var(--txt-3);padding:0}
.gen-att button .ico{width:12px;height:12px}
.gen-ctx-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:2px}
.gen-hint{color:var(--txt-3)}
.gen-generate{justify-content:center}
.gen-ctx-tpl{display:inline-flex;align-items:center;gap:7px;margin-top:4px;font-size:12px;line-height:1.4}
.gen-ctx-tpl .ico{width:14px;height:14px;flex:none}
.gen-ctx-tpl.ok{color:var(--ok);cursor:pointer}
.gen-ctx-tpl.warn{color:var(--warn)}
.gen-ctx-tpl a{color:var(--iris);cursor:pointer;text-decoration:underline}
/* модалка образцов (просмотр/добавление) */
.gen-tpl-list{display:flex;flex-direction:column;gap:8px;max-height:46vh;overflow:auto}
.gen-tpl-row{border:1px solid var(--hairline);border-radius:var(--r-md);padding:9px 11px;background:var(--surface)}
.gen-tpl-top{display:flex;align-items:center;gap:9px}
.gen-tpl-top b{font-size:13px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gen-tpl-src{font-size:11px;color:var(--txt-3);font-family:var(--mono);flex:none}
.gen-tpl-text{margin-top:8px;padding:9px 11px;background:var(--surface-2);border-radius:8px;max-height:300px;overflow:auto;white-space:pre-wrap;font-size:12px;line-height:1.5;font-family:var(--font)}
.gen-tpl-add{display:flex;align-items:center;gap:10px;margin-top:12px;padding-top:11px;border-top:1px solid var(--hairline)}
.gen-badge{display:inline-flex;align-items:center;gap:7px;padding:7px 11px;border-radius:var(--r-md);font-size:12px;font-weight:600}
.gen-badge .ico{width:15px;height:15px}
.gen-badge.ok{background:color-mix(in oklab,var(--ok) 14%,transparent);color:var(--ok)}
.gen-badge.warn{background:color-mix(in oklab,var(--warn) 15%,transparent);color:var(--warn)}
.gen-req{display:flex;flex-direction:column;gap:7px;padding:11px;border:1px solid var(--hairline);border-radius:var(--r-md);background:var(--surface)}
.gen-req-area{width:100%;min-height:88px;resize:vertical;padding:9px 11px;border:1px solid var(--hairline);border-radius:8px;background:var(--surface-2);color:var(--txt);font-size:12.5px;line-height:1.5;font-family:var(--font);outline:none}
.gen-req-area:focus{border-color:var(--iris)}
.gen-enrich{width:100%;justify-content:center}

/* Маркеры «прототип»/розовый контур незаконченных фич убраны — .stub/[data-stub]
   больше ничего не рисуют (классы оставлены как no-op на случай внешних ссылок). */

/* ---- Контекст-метр: только полоса, цифры по наведению (P2-19/UX) ---- */
.mem{cursor:default}
.mem .mem-nums{display:inline;font-family:var(--mono);flex:none}   /* токены видны сразу, без ховера */
/* {AI}-бейдж как иконка контекста (фирменный синий) */
.ai-badge{display:inline-flex;align-items:center;font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:.01em;color:#fff;background:var(--accent-grad);border-radius:4px;padding:3px 6px;line-height:1;flex:none;box-shadow:0 4px 12px -6px color-mix(in oklab,var(--iris) 85%,transparent)}
.mem .mem-lbl{flex:none;font-weight:600}
.mem .bar{transition:none}
.mem .bar>i{transition:width var(--med) var(--ease)}
.mem.ctx-warn .bar>i{background:var(--warn)}
/* >90% контекста — критично: шкала и цифры краснеют (наш --bad), бейдж тоже сигналит. */
.mem.ctx-bad .bar>i{background:var(--bad)}
.mem.ctx-bad .mem-nums{color:var(--bad);font-weight:700}
.mem.ctx-bad .ai-badge{background:var(--bad);box-shadow:0 4px 12px -6px color-mix(in oklab,var(--bad) 80%,transparent)}

/* ---- Иконки сервис-плиток: плоский фирменный синий (PyCharm-стиль, монохромно, без градиента) ---- */
.svc .svc-ic{background:var(--iris)}

/* ---- sys-плитка («Сбросить порядок плашек»): визуально неотличима от обычной плитки сервиса.
   Единственное отличие — на месте «Инструкции» пустой спейсер той же высоты (.svc-foot-empty),
   чтобы текст и нижний отступ совпадали с соседними карточками. ---- */
.svc-foot-empty{align-self:flex-end;height:31px}
#deskSvc .svc-foot-empty{height:28px}

/* ---- B: онбординг пустого чата с юристом ---- */
.chat-onb{max-width:560px;margin:auto;padding:40px 20px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:10px}
.chat-onb-ic{width:52px;height:52px;border-radius:10px;display:grid;place-items:center;background:var(--accent-grad);color:#fff;box-shadow:0 10px 26px -12px color-mix(in oklab,var(--iris) 80%,transparent)}
.chat-onb-ic svg{width:26px;height:26px}
.chat-onb h3{font-size:18px;font-weight:700;margin-top:4px}
.chat-onb p{font-size:13px;color:var(--txt-2);line-height:1.6;max-width:460px}
.chat-onb-ex{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:8px}
.chat-onb-chip{font-size:12.5px;font-weight:600;color:var(--iris-300);background:var(--accent-soft);border:1px solid color-mix(in oklab,var(--iris) 30%,transparent);border-radius:var(--r-pill);padding:8px 14px;cursor:pointer;transition:all var(--fast)}
:root[data-theme="light"] .chat-onb-chip{color:var(--iris-600)}
.chat-onb-chip:hover{background:color-mix(in oklab,var(--iris) 14%,transparent);border-color:var(--iris);transform:translateY(-1px)}

/* ============================================================================
   Уведомления-всплывашки: справа от кнопки аккаунта (rail-av-text) в самом низу
   рейла, через ~1 см; зелёное = успех, красное = ошибка; история — в панели 🔔.
   Кнопка 48px отцентрована в рейле var(--rail-w) → её правый край = rail-w − 14px;
   её низ на 14px от низа окна. Отступ 1cm вправо от края кнопки.
   ============================================================================ */
.toast-wrap{ left:calc(var(--rail-w) - 14px + 1cm); bottom:14px; transform:none; align-items:flex-start }
@media(max-width:760px){ .toast-wrap{ left:50%; transform:translateX(-50%); align-items:center } }
/* зелёный/красный тон всей плашки (не только иконки) */
.toast-ok{ background:color-mix(in oklab,var(--ok) 24%, var(--ink-2)); box-shadow:0 10px 30px -10px color-mix(in oklab,var(--ok) 60%,transparent) }
.toast-ok svg{ color:#fff }
.toast-bad{ background:color-mix(in oklab,var(--bad) 26%, var(--ink-2)); box-shadow:0 10px 30px -10px color-mix(in oklab,var(--bad) 60%,transparent) }
.toast-bad svg{ color:#fff }
/* строка лога тостов в панели + кнопка удаления */
.notif.tl-log{ display:flex; align-items:center; gap:10px; width:100%; text-align:left; background:none; border:0 }
.notif.tl-log .notif-body b{ font-weight:600; font-size:12.5px }
.notif-del{ flex:none; width:24px; height:24px; display:grid; place-items:center; border-radius:5px; color:var(--txt-3); background:none; border:0; cursor:pointer; opacity:0; transition:all var(--fast) }
.notif:hover .notif-del{ opacity:1 }   /* × появляется по ховеру у ЛЮБОЙ строки уведомления */
.notif-del:hover{ color:var(--bad); background:var(--elev) } .notif-del svg{ width:13px;height:13px }

/* ============================================================================
   Панель уведомлений (🔔) — стильная «шапка» с действиями + прокручиваемый список.
   ============================================================================ */
.popover:has(.nph){ min-width:296px; max-width:344px }
.nph{ display:flex; align-items:center; justify-content:space-between; gap:10px; padding:10px 8px 10px 6px; }
.nph-ttl{ display:flex; align-items:center; gap:9px; min-width:0 }
.nph-ic{ width:26px; height:26px; flex:none; border-radius:7px; display:grid; place-items:center; background:var(--accent-grad); color:#fff; box-shadow:0 6px 16px -8px color-mix(in oklab,var(--iris) 80%,transparent) }
.nph-ic svg{ width:15px; height:15px }
.nph-ttl b{ font-size:13.5px; font-weight:750; letter-spacing:-.01em }
.nph-badge{ flex:none; min-width:18px; height:18px; padding:0 5px; border-radius:9px; display:grid; place-items:center; font-size:11px; font-weight:750; color:#fff; background:var(--accent-grad) }
/* три действия (прочитать все · удалить все · закрыть) одним сегментированным блоком */
.nph-acts{ display:flex; align-items:center; gap:2px; flex:none; padding:2px; border-radius:9px; background:var(--chip); border:1px solid var(--hairline) }
.nph-act{ width:27px; height:27px; display:grid; place-items:center; border-radius:7px; color:var(--txt-3); background:none; border:0; cursor:pointer; transition:all var(--fast) }
.nph-act:hover{ background:var(--surface); color:var(--iris-300); box-shadow:var(--shadow-1) } .nph-act svg{ width:16px; height:16px }
:root[data-theme="light"] .nph-act:hover{ color:var(--iris-600) }
.nph-act.danger:hover{ color:var(--bad) }
/* прокрутка списка уведомлений (тонкий скроллер) */
.notif-scroll{ max-height:min(58vh,440px); overflow-y:auto; overflow-x:hidden; padding:2px; margin-top:2px; border-top:1px solid var(--hairline); scrollbar-width:thin; scrollbar-color:var(--hairline) transparent }
.notif-scroll::-webkit-scrollbar{ width:8px } .notif-scroll::-webkit-scrollbar-track{ background:transparent }
.notif-scroll::-webkit-scrollbar-thumb{ background:var(--hairline); border-radius:8px; border:2px solid var(--surface) }
.notif-scroll::-webkit-scrollbar-thumb:hover{ background:var(--txt-3) }
.notif-scroll .notif{ position:relative }
.notif-empty{ padding:30px 14px !important } .notif-empty svg{ width:30px; height:30px }

/* при большом числе уведомлений окно шире и выше (req: «окошко может быть больше») */
.popover:has(.nph.big){ min-width:340px; max-width:404px }
.nph.big ~ .notif-scroll{ max-height:min(74vh,640px) }

/* ============================================================================
   «Облачко» уведомления — БЕЗ аватарки (удалена): просто карточка.
   Система → серо-золотой (жёлтый контур), успех фичи → зелёный, ошибка → красный.
   ============================================================================ */
.toast.comic{ background:none; border:0; box-shadow:none; padding:0; font-weight:600;
  display:flex; align-items:flex-end; gap:8px; max-width:min(410px,86vw); animation:tcIn .34s var(--ease) }
@keyframes tcIn{ from{ opacity:0; transform:translateY(12px) scale(.9) } to{ opacity:1; transform:none } }
/* само «облачко» (аватарка + хвостик к ней удалены) */
.tc-cloud{ position:relative; display:flex; align-items:flex-start; gap:9px;
  background:var(--surface); border:1.5px solid var(--hairline); border-radius:16px;
  padding:11px 12px; box-shadow:0 14px 36px -14px rgba(0,0,0,.6); min-width:184px; color:var(--txt) }
.tc-ic{ flex:none; width:26px; height:26px; border-radius:8px; display:grid; place-items:center; margin-top:1px;
  background:color-mix(in oklab,var(--warn) 18%,transparent) }
.tc-ic svg{ width:15px; height:15px; color:var(--warn) }
.tc-txt{ flex:1; min-width:0; display:flex; flex-direction:column; gap:3px; padding-top:1px }
.tc-msg{ font-size:13px; font-weight:700; line-height:1.32; color:var(--txt) }
.tc-sub{ font-size:11.5px; font-weight:500; color:var(--txt-3); line-height:1.36 }
.tc-x{ flex:none; width:20px; height:20px; margin:-2px -3px 0 0; border:0; background:none; color:var(--txt-3);
  font-size:18px; line-height:1; border-radius:6px; cursor:pointer; transition:all var(--fast) }
.tc-x:hover{ background:var(--elev); color:var(--txt) }
.toast.comic.tc-nav .tc-cloud{ cursor:pointer }
.toast.comic.tc-nav .tc-cloud:hover{ border-color:var(--iris-300); transform:translateY(-1px) }
/* система → золотой контур (внимание, но мягко) */
.toast-warn.comic .tc-cloud{ border-color:var(--warn) }
/* успех фичи → зелёный бабл */
.toast-ok.comic .tc-cloud{ border-color:var(--ok); background:color-mix(in oklab,var(--ok) 8%,var(--surface)) }
.toast-ok.comic .tc-ic{ background:color-mix(in oklab,var(--ok) 20%,transparent) } .toast-ok.comic .tc-ic svg{ color:var(--ok) }
/* ошибка → красный бабл */
.toast-bad.comic .tc-cloud{ border-color:var(--bad); background:color-mix(in oklab,var(--bad) 9%,var(--surface)) }
.toast-bad.comic .tc-ic{ background:color-mix(in oklab,var(--bad) 20%,transparent) } .toast-bad.comic .tc-ic svg{ color:var(--bad) }
/* верхняя строка прогресс-облачка (текст · свернуть · проценты) */
.tc-prog-top{ display:flex; align-items:center; gap:8px }
.tc-prog-top .tc-msg,.tc-prog-top .tt-msg{ flex:1; min-width:0; font-size:13px; font-weight:700; color:var(--txt); white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
.toast.comic .toast-min{ background:var(--chip); border:1px solid var(--hairline); color:var(--txt-3) }
.toast.comic .toast-min:hover{ color:var(--txt); background:var(--elev) }
.toast.comic .tt-eta{ font-size:11px; color:var(--txt-3); margin-top:5px; display:block }

/* ============================================================================
   Писчее перо — единый фейк-прогресс (перо «пишет» путь + проценты).
   ============================================================================ */
.quill-track{ position:relative; height:8px; border-radius:6px; background:var(--surface-3); overflow:visible; margin-top:9px }
.quill-fill{ display:block; height:100%; border-radius:6px; background:var(--accent-grad); width:0; transition:width .16s linear }
.quill-pen{ position:absolute; top:50%; left:0; width:22px; height:22px; transform:translate(-50%,-62%);
  color:var(--iris-300); transition:left .16s linear; filter:drop-shadow(0 2px 3px rgba(0,0,0,.4)); animation:quillbob .9s ease-in-out infinite }
.quill-pen svg{ width:22px; height:22px; transform:rotate(40deg); color:inherit }
@keyframes quillbob{ 0%,100%{ transform:translate(-50%,-62%) rotate(0) } 50%{ transform:translate(-50%,-74%) rotate(-5deg) } }
.quill-pct{ flex:none; min-width:36px; text-align:right; font-size:11.5px; font-weight:750; color:var(--iris-300) }
:root[data-theme="light"] .quill-pen,:root[data-theme="light"] .quill-pct{ color:var(--iris-600) }
/* перо в карточке фоновой задачи (панель уведомлений) */
.lt-prog{ position:relative; overflow:visible }
.lt-pen{ position:absolute; top:50%; width:16px; height:16px; transform:translate(-50%,-58%); color:var(--iris-300); animation:quillbob .9s ease-in-out infinite }
.lt-pen svg{ width:16px; height:16px; transform:rotate(40deg); color:inherit }
/* строка лога с переходом к результату — курсор-указатель */
.notif.tl-log.has-nav{ cursor:pointer }
/* «Обогатить» — перо «пишет» ПРЯМО В ЧАТЕ (ИИ-пузырь), а не тостом в углу */
.enrich-writing .ew-top{ display:flex; align-items:center; gap:10px }
.enrich-writing .ew-msg{ flex:1; min-width:0; font-size:13px; font-weight:650; color:var(--txt) }
.enrich-done{ display:flex; align-items:center; gap:8px; font-size:13px; font-weight:650; color:var(--txt) }
.enrich-done svg{ width:16px; height:16px; flex:none; color:var(--iris-300) }
.enrich-done.bad svg{ color:var(--bad) }
@media (prefers-reduced-motion:reduce){ .quill-pen,.lt-pen,.notif-dot{ animation:none } }

/* ===================== ЕДИНЫЙ КАРКАС ФИЧ-ДОКУМЕНТОВ (68-doctool.js) ===================== */
/* правый кластер шапки: одна «свернуть» + история + новая версия */
.docwin-ctl{display:flex;align-items:center;gap:4px;flex:none;margin-left:auto}
.docwin-btn{width:34px;height:34px;padding:0;justify-content:center}
.docwin-btn .ico{width:16px;height:16px}
.docwin-min:hover{color:var(--iris)}
/* .cmp-bar-files растягивается (flex:1) → кластер уходит к правому краю. Когда экран без
   файлового поля (генератор/саммари), добавляем распорку, чтобы кластер прижался вправо. */
.docwin-bar .cmp-bar-spacer{flex:1}
/* единый ряд действий (.doc-acts = .anon-acts) — стили колонки уже в .anon-acts */
.doc-acts{margin-top:14px}
/* превью изображения: мелкий thumbnail → клик → крупное */
.doc-thumb{max-width:190px;max-height:150px;border-radius:10px;border:1px solid var(--hairline);
  cursor:zoom-in;display:block;object-fit:contain;background:var(--surface-2);transition:all var(--fast)}
.doc-thumb:hover{border-color:var(--iris);box-shadow:var(--shadow-1)}
.doc-img-full{max-width:100%;max-height:70vh;display:block;margin:0 auto;border-radius:10px}
/* ---- Скан в текст (OCR) ---- */
#screen-ocr.screen.active,#screen-translate.screen.active,#screen-summary.screen.active{display:flex;flex-direction:column;height:calc(100vh - 36px);min-height:0}
#screen-ocr .cmp-bar-title .ico{color:var(--brass)}
.ocr-pre{align-items:flex-start;justify-content:center}
.ocr-pre-card{max-width:620px;width:100%;margin:0 auto;text-align:center;background:var(--surface-2);border:1px solid var(--hairline);border-radius:14px;padding:20px}
.ocr-pre-img{max-width:100%;max-height:52vh;margin:10px auto 0}
.ocr-img-body{display:flex;align-items:flex-start;justify-content:center;padding:12px}
.ocr-img-body .doc-thumb{max-width:100%;max-height:56vh}
.ocr-nopre{display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--txt-3);padding:22px}
.ocr-nopre .ico{width:30px;height:30px}.ocr-nopre.small{padding:12px}.ocr-nopre small{font-size:11.5px;color:var(--txt-3)}
.ocr-text{width:100%;min-height:46vh}
.ocr-text-run{padding:14px}.ocr-text-run .prog{margin-top:14px}
/* ---- Саммаризация ---- */
#screen-summary .cmp-bar-title .ico{color:var(--cyan-600)}
.sum-src{display:flex;flex-direction:column;min-height:0;flex:1}
.sum-src-body{white-space:pre-wrap;overflow:auto;font-size:13px;line-height:1.6;color:var(--txt-2);flex:1;min-height:0}
.sum-src-foot{border-top:1px solid var(--hairline);padding-top:12px;margin-top:10px}
.sum-depth{display:flex;align-items:center;gap:10px}
.sum-run{padding:14px}.sum-stream{white-space:pre-wrap;font-size:13.5px;line-height:1.6;margin-top:12px;max-height:52vh;overflow:auto;font-family:inherit}
.sum-edit{width:100%;min-height:50vh}

/* ---- Обогащение: документы из базы знаний, прикреплённые как вложения ---- */
/* Золотистая рамка отличает enrich-документ (⚗ норма/кейс/наработка) от обычного вложения. */
.attach-chip.enrich-doc{border-color:color-mix(in oklab,var(--warn) 55%,transparent)}
.attach-chip.enrich-doc svg{color:var(--warn)}

/* ---- Файл, «созданный» ИИ в чате: ```file:… → карточка (docs/chat-file-artifacts.md) ---- */
.file-card{display:flex;align-items:center;gap:12px;margin:8px 0;padding:10px 12px;
  border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2)}
.file-card .fc-ico{flex:none;width:22px;height:22px;color:var(--iris)}
.fc-meta{min-width:0;flex:1}
.fc-name{font-size:13.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fc-sub{font-size:11.5px;color:var(--txt-3);font-variant-numeric:tabular-nums}
.fc-acts{flex:none;display:flex;gap:6px}
.fc-err{color:var(--warn)}
.fc-preview{max-height:60vh;overflow:auto;line-height:1.6;font-size:13.5px}
/* Плейсхолдер, пока фенс ```file: ещё не закрылся — сырой markdown в пузырь не льём. */
.fc-pending{display:inline-flex;align-items:center;gap:8px;color:var(--txt-3);font-size:13px}
.fc-pending-dot{width:8px;height:8px;border-radius:50%;background:var(--iris);animation:fcPulse 1.1s ease-in-out infinite}
@keyframes fcPulse{0%,100%{opacity:.25;transform:scale(.8)}50%{opacity:1;transform:scale(1)}}
