/* TaskBoard — «Рабочее место» проекта (🗂 в шапке, только владелец). Разделы слева, содержимое на всю ширину.
   Первый раздел — Файлы (app/src/files.php). Токены — app.css. */

.ws-body{flex:1;display:flex;min-height:0}
.ws-nav{flex:none;width:200px;display:flex;flex-direction:column;gap:2px;padding:14px 10px;border-right:1px solid var(--line-soft);background:var(--panel);overflow-y:auto}
.ws-nav button{display:flex;align-items:center;gap:9px;text-align:left;padding:8px 12px;border-radius:8px;font-size:13.5px;color:var(--muted);
  border-left:2px solid transparent;transition:color .15s,background .15s}
.ws-nav button:hover{color:var(--text);background:var(--panel-2)}
.ws-nav button.on{color:var(--text);background:var(--gold-soft);border-left-color:var(--gold)}
.ws-nav button[disabled]{opacity:.45;cursor:default}
.ws-nav button[disabled]:hover{background:none;color:var(--muted)}
.ws-nav .ws-ic{width:18px;text-align:center;flex:none;font-size:14px}
.ws-nav .ws-soon{margin-left:auto;font-family:var(--font-mono);font-size:9.5px;letter-spacing:.08em;color:var(--faint)}
.ws-main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}

/* панель над содержимым: крошки · действия */
.ws-bar{display:flex;align-items:center;gap:10px;padding:10px 18px;border-bottom:1px solid var(--line-soft);flex:none;flex-wrap:wrap;min-height:50px}
.ws-crumbs{display:flex;align-items:center;gap:4px;flex-wrap:wrap;min-width:0;font-size:14px}
.ws-crumbs button{color:var(--muted);padding:3px 6px;border-radius:6px;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-crumbs button:hover{color:var(--text);background:var(--panel-2)}
.ws-crumbs .cur{color:var(--text);font-weight:600;padding:3px 6px;max-width:420px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-crumbs .sep{color:var(--faint)}
.ws-acts{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.ws-meta{font-family:var(--font-mono);font-size:11.5px;color:var(--faint);white-space:nowrap}
.ws-meta.warn{color:var(--gold)}

/* выделение: одинарный клик — подсветка и панель действий */
.ws-selbar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:2px 8px;border:1px solid var(--gold-line);border-radius:9px;background:var(--gold-soft)}
.ws-seln{font-size:12.5px;color:var(--gold);font-weight:600;padding:0 4px}
.ws-selbar .btn{padding:4px 9px;font-size:12.5px}
.ws-selbar .ws-del:hover{color:var(--danger);border-color:var(--danger)}
.ws-tbl tr.sel td{background:var(--gold-soft)}
.ws-tbl tr.sel td.n button{color:var(--gold)}
.ws-tbl tr.sel td.a button{opacity:1}
.ws-tile.sel{border-color:var(--gold);background:var(--gold-soft)}
.ws-tile.sel .ws-tile-a{opacity:1}
#ws-drop [data-open]{user-select:none}

/* модальное окно поверх списка (двойной клик по файлу) */
.ws-modal{position:absolute;inset:0;z-index:5;background:rgba(0,0,0,.72);display:none;align-items:center;justify-content:center;padding:28px}
.ws-modal.on{display:flex}
.ws-modal-box{width:min(1200px,100%);height:min(88vh,100%);display:flex;flex-direction:column;background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow);overflow:hidden}
.ws-modal-head{display:flex;align-items:center;gap:8px;padding:8px 10px 8px 16px;border-bottom:1px solid var(--line-soft);flex:none}
.ws-modal-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:auto}
.ws-modal-body .ws-img,.ws-modal-body .ws-media,.ws-modal-body .ws-pre,.ws-modal-body .ws-frame,.ws-modal-body .ws-svg{flex:1}
@media (max-width:760px){.ws-modal{padding:8px}.ws-modal-box{height:100%}}

/* список файлов */
.ws-drop{flex:1;overflow:auto;position:relative;padding:6px 18px 40px}
.ws-drop.over::after{content:'Отпустите — файлы лягут в эту папку';position:absolute;inset:8px;border:2px dashed var(--gold);border-radius:var(--r-lg);
  display:flex;align-items:center;justify-content:center;color:var(--gold);font-size:16px;background:var(--gold-soft);pointer-events:none}
.ws-tbl{width:100%;border-collapse:collapse;font-size:13.5px}
.ws-tbl th{text-align:left;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);
  padding:8px 10px;border-bottom:1px solid var(--line-soft);font-weight:500;white-space:nowrap}
.ws-tbl td{padding:6px 10px;border-bottom:1px solid var(--line-soft);vertical-align:middle;white-space:nowrap}
.ws-tbl tr:hover td{background:var(--panel)}
.ws-tbl td.n{white-space:normal;min-width:0;width:100%}
.ws-tbl td.n button{display:inline-flex;align-items:center;gap:9px;color:var(--text);text-align:left;max-width:100%;padding:2px 0}
.ws-tbl td.n button:hover{color:var(--gold)}
.ws-tbl td.n .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:min(60vw,720px)}
.ws-tbl .dir .nm{font-weight:600}
.ws-tbl td.s,.ws-tbl td.t{font-family:var(--font-mono);font-size:12px;color:var(--muted);text-align:right}
.ws-tbl td.a{text-align:right}
.ws-tbl td.a button{color:var(--faint);padding:3px 6px;border-radius:6px;font-size:13px}
.ws-tbl td.a button:hover{color:var(--text);background:var(--panel-2)}
.ws-tbl td.a button.del:hover{color:var(--danger)}
.ws-tbl tr:not(:hover) td.a button{opacity:.35}
.ws-ico{width:22px;text-align:center;flex:none;font-size:15px;opacity:.9;display:inline-flex;justify-content:center}
.ws-zip,.ws-doc{width:19px;height:19px;display:block}
.ws-nope .big .ws-zip,.ws-nope .big .ws-doc{width:52px;height:52px}
.ws-tile-ic .ws-doc{width:56px;height:56px}
.ws-empty{padding:60px 20px;text-align:center;color:var(--muted);font-size:14px;line-height:1.7}
.ws-empty b{color:var(--text);font-weight:600}

/* плитки (переключатель ☰ / ▦ в панели) */
.ws-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;padding:8px 0}
.ws-tile{position:relative;border:1px solid var(--line-soft);border-radius:var(--r);background:var(--panel);overflow:hidden;transition:border-color .15s,background .15s}
.ws-tile:hover{border-color:var(--line-hover);background:var(--panel-2)}
.ws-tile-b{display:flex;flex-direction:column;align-items:center;gap:6px;width:100%;padding:12px 10px 10px;color:var(--text)}
.ws-tile-ic{height:84px;width:100%;display:flex;align-items:center;justify-content:center;font-size:44px;line-height:1}
.ws-tile-ic img{max-width:100%;max-height:84px;object-fit:contain;border-radius:4px;box-shadow:0 2px 8px rgba(0,0,0,.35)}
.ws-tile-ic .ws-zip{width:56px;height:56px}
.ws-tile-n{font-size:12.5px;line-height:1.3;text-align:center;max-width:100%;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}
.ws-tile.dir .ws-tile-n{font-weight:600}
.ws-tile-m{font-family:var(--font-mono);font-size:11px;color:var(--faint)}
.ws-tile-a{position:absolute;top:5px;right:5px;display:flex;gap:1px;opacity:0;background:var(--card);border:1px solid var(--line-soft);border-radius:7px;padding:1px;transition:opacity .15s}
.ws-tile:hover .ws-tile-a,.ws-tile:focus-within .ws-tile-a{opacity:1}
.ws-tile-a button{padding:3px 6px;color:var(--muted);border-radius:5px;font-size:12.5px}
.ws-tile-a button:hover{color:var(--text);background:var(--panel-2)}
.ws-tile-a button.del:hover{color:var(--danger)}

/* ход загрузки */
.ws-prog{flex:none;padding:8px 18px;border-top:1px solid var(--line-soft);background:var(--panel);display:flex;align-items:center;gap:12px;font-size:12.5px;color:var(--muted)}
.ws-prog .bar{flex:1;height:6px;background:var(--track);border-radius:4px;overflow:hidden}
.ws-prog .bar i{display:block;height:100%;background:var(--gold);width:0;transition:width .15s}

/* просмотр файла */
.ws-view{flex:1;min-height:0;display:flex;flex-direction:column;overflow:auto}
.ws-fname{font-weight:600;font-size:14.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:50vw}
.ws-img{flex:1;display:flex;align-items:center;justify-content:center;padding:16px;background:var(--code-bg);min-height:0}
.ws-img img{max-width:100%;max-height:100%;object-fit:contain;border-radius:4px;box-shadow:var(--shadow)}
.ws-media{flex:1;display:flex;align-items:center;justify-content:center;padding:16px;background:var(--code-bg)}
.ws-media video{max-width:100%;max-height:100%;border-radius:6px}
.ws-media audio{width:min(640px,100%)}
.ws-frame{flex:1;border:0;background:#fff;min-height:0}
.ws-ed{flex:1;width:100%;min-height:0;resize:none;border:0;outline:0;background:var(--code-bg);color:var(--text);
  font:13px/1.55 var(--font-mono);padding:14px 18px;tab-size:4;white-space:pre;overflow:auto}
.ws-ed:focus{outline:none}
.ws-mdv{flex:1;overflow:auto;padding:22px 32px;max-width:980px}
.ws-mdv .md{font-size:14.5px}
.ws-pre{flex:1;overflow:auto;margin:0;padding:14px 18px;background:var(--code-bg);color:var(--text);font:12.5px/1.55 var(--font-mono);white-space:pre}
.ws-mdv .ws-pre{height:100%}
.ws-mdv:has(> .ws-pre){padding:0;max-width:none;display:flex;flex-direction:column}
/* Word через docx-preview: страницы как в Word, на сером фоне; свои стили библиотека вставляет сама */
.ws-docx-note{flex:none;padding:8px 18px;font-size:12.5px;color:var(--muted);border-bottom:1px solid var(--line-soft);background:var(--panel)}
.ws-docxp{flex:1;min-height:0;overflow:auto;background:#3a3a3a}
.ws-docxp .docx-wrapper{background:#3a3a3a;padding:24px 16px}
.ws-docxp .docx-wrapper>section.docx{box-shadow:0 4px 18px rgba(0,0,0,.5);margin-bottom:24px}
@media (max-width:760px){.ws-docxp .docx-wrapper{padding:8px 0}.ws-docxp .docx-wrapper>section.docx{width:100%!important;min-height:0!important;padding:16px!important}}
.ws-nope{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--muted);padding:40px;text-align:center;line-height:1.7}
.ws-nope .big{font-size:48px;opacity:.7}
.ws-nope b{color:var(--text)}

/* svg: картинка сверху (на «шахматке», чтобы видеть прозрачность), код снизу */
.ws-svg{display:flex;flex-direction:column;flex:1;min-height:0}
.ws-svg-prev{flex:1 1 55%;min-height:160px;display:flex;align-items:center;justify-content:center;padding:16px;border-bottom:1px solid var(--line-soft);
  background-color:var(--code-bg);background-image:linear-gradient(45deg,var(--line-soft) 25%,transparent 25%,transparent 75%,var(--line-soft) 75%),linear-gradient(45deg,var(--line-soft) 25%,transparent 25%,transparent 75%,var(--line-soft) 75%);
  background-size:18px 18px;background-position:0 0,9px 9px}
.ws-svg-prev img{max-width:100%;max-height:100%;object-fit:contain}
.ws-svg .ws-ed,.ws-svg .ws-pre{flex:1 1 45%;min-height:120px}

/* картинка с зумом */
.ws-zoom{flex:1;position:relative;overflow:hidden;min-height:200px;background:var(--code-bg);touch-action:none;cursor:grab;user-select:none;outline:none}
.ws-zoom.drag{cursor:grabbing}
.ws-zoom img{position:absolute;left:0;top:0;transform-origin:0 0;max-width:none;will-change:transform;pointer-events:none}
.ws-zoom img.px{image-rendering:pixelated}
.ws-zoom-bar{position:absolute;right:10px;top:10px;z-index:2;display:flex;align-items:center;gap:2px;background:var(--card);border:1px solid var(--line-soft);border-radius:8px;padding:2px;opacity:.75;transition:opacity .15s}
.ws-zoom:hover .ws-zoom-bar{opacity:1}
.ws-zoom-bar button{padding:3px 8px;border-radius:6px;color:var(--muted);font-family:var(--font-mono);font-size:12.5px;line-height:1.3}
.ws-zoom-bar button:hover{color:var(--text);background:var(--panel-2)}
.ws-zoom-pct{font-family:var(--font-mono);font-size:11px;color:var(--faint);min-width:44px;text-align:center}

/* выгрузка Figma: слева подсказка и плитки, справа просмотр с зумом */
.ws-fig-hint{font-size:13px;color:var(--muted);line-height:1.55;max-width:900px}
.ws-fig-hint b{color:var(--text);font-weight:600}
.ws-fig-hint{padding:8px 4px 12px;font-size:12.5px}
.ws-fig-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:8px}
.ws-fig-img{position:relative;display:flex;align-items:center;justify-content:center;height:104px;width:100%;padding:0;cursor:pointer;background:var(--panel);border:1px solid var(--line-soft);border-radius:var(--r);overflow:hidden;
  background-image:linear-gradient(45deg,var(--line-soft) 25%,transparent 25%,transparent 75%,var(--line-soft) 75%),linear-gradient(45deg,var(--line-soft) 25%,transparent 25%,transparent 75%,var(--line-soft) 75%);background-size:16px 16px;background-position:0 0,8px 8px}
.ws-fig-img:hover{border-color:var(--line-hover)}
.ws-fig-img.sel{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold)}
.ws-fig-img img{max-width:100%;max-height:100%;object-fit:contain}
.ws-fig-img span{position:absolute;right:5px;bottom:4px;font-family:var(--font-mono);font-size:10.5px;color:var(--muted);background:var(--card);padding:1px 5px;border-radius:5px}

/* архив: дерево слева, просмотр записи справа */
.ws-arc{flex:1;display:grid;grid-template-columns:minmax(280px,42%) minmax(0,1fr);min-height:0}
.ws-arc-list{overflow:auto;border-right:1px solid var(--line-soft);padding:6px 10px 30px}
.ws-arc-list .ws-tbl td.n button{padding-left:calc(var(--d,0) * 16px)}
.ws-arc-view{display:flex;flex-direction:column;min-height:0;min-width:0}
.ws-arc-view .ws-pre,.ws-arc-view .ws-img{flex:1}

.ws-tag{display:inline-block;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;padding:2px 7px;border-radius:6px;
  background:var(--panel-2);border:1px solid var(--line-soft);color:var(--muted);text-transform:uppercase}
.ws-tag.dirty{color:var(--gold);border-color:var(--gold-line)}

/* раздел «Сервер» (app/src/server.php; снимок снимает хост combine-server-probe.py): карточки в сетке */
.ws-srv{flex:1;overflow:auto;padding:14px 18px 40px}
.ws-srv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(440px,1fr));gap:14px;align-items:start}
.ws-card{border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);padding:14px 16px;min-width:0}
.ws-card h3{font-size:14.5px;font-weight:600;margin:0 0 10px;display:flex;align-items:center;gap:8px;min-width:0}
.ws-card h3 span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-card h4{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);font-weight:500;margin:14px 0 6px}
.ws-kv{width:100%;border-collapse:collapse;font-size:13.5px}
.ws-kv th{text-align:left;color:var(--muted);font-weight:500;padding:4px 12px 4px 0;white-space:nowrap;width:1%;vertical-align:top}
.ws-kv td{padding:4px 0;vertical-align:top;min-width:0;word-break:break-word}
.ws-kv td a{color:var(--text);text-decoration:underline;text-decoration-color:var(--line-hover)}
.ws-kv td a:hover{color:var(--gold)}
.ws-svc{width:100%;border-collapse:collapse;font-size:13px}
.ws-svc td{padding:4px 6px 4px 0;border-top:1px solid var(--line-soft);vertical-align:middle}
.ws-svc td:first-child{width:14px;padding-right:8px}
.ws-svc td.n{font-family:var(--font-mono);font-size:12.5px;white-space:nowrap}
.ws-svc td.n a{color:var(--text)}
.ws-svc td.n a:hover{color:var(--gold)}
.ws-svc td.st{color:var(--muted);min-width:0}
.ws-svc td.v{font-family:var(--font-mono);font-size:11.5px;color:var(--faint);text-align:right;white-space:nowrap}
.ws-c-ok{color:var(--ok)}.ws-c-warn{color:var(--gold)}.ws-c-bad{color:var(--danger)}.ws-c-off{color:var(--faint)}
.ws-dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--gold);vertical-align:middle;flex:none}
.ws-dot.ok{background:var(--ok)}.ws-dot.warn{background:var(--gold)}.ws-dot.bad{background:var(--danger);box-shadow:0 0 0 3px rgba(217,85,85,.2)}.ws-dot.off{background:var(--dim)}
.ws-meter{display:inline-block;width:90px;height:6px;background:var(--track);border-radius:4px;overflow:hidden;vertical-align:middle;margin-left:6px}
.ws-meter i{display:block;height:100%;background:var(--ok)}
.ws-meter.warn i{background:var(--gold)}.ws-meter.bad i{background:var(--danger)}
.ws-sub{color:var(--faint);font-size:12px}
.ws-err{color:var(--danger);font-size:12.5px;margin:0 0 10px;padding:8px 10px;border:1px solid rgba(217,85,85,.35);border-radius:8px;background:rgba(217,85,85,.08);line-height:1.5}
.ws-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.ws-chip{font-size:12px;color:var(--muted);background:var(--panel-2);border:1px solid var(--line-soft);border-radius:7px;padding:2px 8px}
.ws-chip b{color:var(--text);font-weight:600}
.ws-vers{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.ws-vers span{font-family:var(--font-mono);font-size:11px;color:var(--faint);background:var(--panel-2);border-radius:6px;padding:2px 7px;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-links{display:flex;flex-wrap:wrap;gap:8px}
.ws-note{margin-top:10px;font-size:13.5px}
.ws-srv .ws-empty{padding:40px 20px}
/* две плитки «Прод» и «Тест» (12.10.2026): сверху CPU/RAM/DISK, ниже адреса, службы, docker, LXD, KVM, версии */
.ws-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(460px,1fr));gap:14px;align-items:start;margin:0 0 14px}
.ws-tile{border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);padding:14px 16px 12px;min-width:0}
.ws-tile.warn{border-color:var(--gold-line)}
.ws-tile.bad{border-color:rgba(217,85,85,.5)}
.ws-tile h3{font-size:17px;font-weight:600;margin:0;display:flex;align-items:center;gap:8px}
.ws-tile-sub{font-size:12px;color:var(--faint);margin:3px 0 12px;line-height:1.4;word-break:break-word}
.ws-tile-top{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:0 0 12px}
.ws-m{background:var(--panel-2);border:1px solid var(--line-soft);border-radius:10px;padding:8px 10px 8px;min-width:0}
.ws-m .k{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.12em;color:var(--faint)}
.ws-m .v{font-size:26px;font-weight:600;line-height:1.15;letter-spacing:-.01em;margin:2px 0 6px}
.ws-m.warn .v{color:var(--gold)}.ws-m.bad .v{color:var(--danger)}
.ws-m .bar{height:5px;border-radius:3px;background:var(--track);overflow:hidden}
.ws-m .bar.none{background:transparent;border-top:1px dashed var(--line-soft);height:0;margin-top:2px;margin-bottom:2px}
.ws-m .bar i{display:block;height:100%;background:var(--ok)}
.ws-m.warn .bar i{background:var(--gold)}.ws-m.bad .bar i{background:var(--danger)}
.ws-m .s{font-size:11.5px;color:var(--muted);margin-top:6px;line-height:1.4;word-break:break-word}
.ws-tile-rows{display:flex;flex-direction:column;gap:6px}
.ws-row{display:flex;gap:10px;align-items:flex-start;min-width:0}
.ws-row .k{flex:none;width:58px;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);padding-top:5px}
.ws-row .b{display:flex;flex-wrap:wrap;gap:4px;min-width:0}
.ws-chip{display:inline-flex;align-items:center;gap:5px;max-width:100%;white-space:nowrap}
.ws-chip .ws-sub{font-size:11px;overflow:hidden;text-overflow:ellipsis}
.ws-chip a{color:var(--text);text-decoration:none}
.ws-chip a:hover{color:var(--gold)}
.ws-chip.bad{border-color:rgba(217,85,85,.5);color:var(--text)}
.ws-chip.warn{border-color:var(--gold-line)}
.ws-chip.off{opacity:.7}
.ws-chip .ws-dot{width:7px;height:7px;box-shadow:none}
.ws-srv-foot{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;margin:0 0 14px}
.ws-srv-foot .k{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);margin-right:6px}
/* форма «Настроить» */
.ws-form{max-width:980px}
.ws-form h3{font-size:14.5px;font-weight:600;margin:20px 0 4px}
.ws-form h3:first-child{margin-top:0}
.ws-form .ws-sub{margin-bottom:8px;line-height:1.5}
.ws-form label{display:block;font-size:12.5px;color:var(--muted);margin:8px 0}
.ws-form input,.ws-form select,.ws-form textarea{width:100%;margin-top:4px;background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font:13px/1.4 var(--font-body);outline:none}
.ws-form input:focus,.ws-form select:focus,.ws-form textarea:focus{border-color:var(--gold-dim)}
.ws-form textarea{font-family:var(--font-mono);font-size:12.5px;resize:vertical}
.ws-form select option{background:var(--panel)}
.ws-frow{display:flex;gap:6px;align-items:center;margin:6px 0;flex-wrap:wrap}
.ws-frow input,.ws-frow select{width:auto;flex:1 1 140px;margin:0}
.ws-frow input.wide{flex:3 1 320px}
.ws-frow input.narrow{flex:0 0 84px}
.ws-frow select{flex:0 0 250px}
.ws-frow .del{color:var(--faint);padding:4px 7px;border-radius:6px;font-size:13px}
.ws-frow .del:hover{color:var(--danger);background:var(--panel-2)}
.ws-form code{font-family:var(--font-mono);font-size:12px;background:var(--panel-2);padding:1px 5px;border-radius:5px}
.ws-form .btn{margin-top:4px}

/* раздел «Лента» (app/src/feed.php): одна хронология по дням, фильтр-чипы по типам, поиск по загруженному */
.ws-feed{padding:6px 18px 40px;max-width:1100px}
.ws-feed-chips{display:flex;flex-wrap:wrap;gap:4px}
.ws-chip-t{cursor:pointer;opacity:.5;transition:opacity .15s,border-color .15s}
.ws-chip-t:hover{opacity:.85}
.ws-chip-t.on{opacity:1;color:var(--text);border-color:var(--gold-line);background:var(--gold-soft)}
.ws-feed-q{width:170px;background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:5px 10px;font:13px var(--font-body);outline:none}
.ws-feed-q:focus{border-color:var(--gold-dim)}
.ws-feed-day{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);padding:16px 0 6px;border-bottom:1px solid var(--line-soft);margin-bottom:4px;position:sticky;top:0;background:var(--bg);z-index:1}
.ws-ev{display:flex;gap:10px;align-items:baseline;padding:5px 6px;border-radius:7px;font-size:13.5px;line-height:1.45}
.ws-ev:hover{background:var(--panel)}
.ws-ev .tm{font-family:var(--font-mono);font-size:11.5px;color:var(--faint);flex:none;width:38px}
.ws-ev .ic{flex:none;width:18px;text-align:center;font-size:13px;opacity:.85}
.ws-ev .tx{min-width:0;flex:1;word-break:break-word}
.ws-ev .tx a{color:var(--text);text-decoration:underline;text-decoration-color:var(--line-hover)}
.ws-ev .tx a:hover{color:var(--gold)}
.ws-feed-card{font-family:var(--font-mono);font-size:12.5px;color:var(--gold)!important;text-decoration:none!important}
.ws-feed-ct{color:var(--muted)}
.ws-feed-ct::after{content:' —';color:var(--faint)}
.ws-feed-who{margin-left:8px;font-size:11.5px;color:var(--faint)}
.ws-feed-repo{font-family:var(--font-mono);font-size:11.5px;color:var(--muted);background:var(--panel-2);border-radius:5px;padding:0 5px}
.ws-feed-hash{font-family:var(--font-mono);font-size:11px;color:var(--faint);margin-left:4px}
.ws-ev.t-prod .tx{font-weight:500}
.ws-ev.t-commit .tx{color:var(--muted)}
.ws-ev.t-commit .tx .ws-feed-repo{color:var(--text)}
.ws-ev.t-pipeline .tx{color:var(--muted)}
.ws-ev.t-comment .tx::before{content:'«';color:var(--faint)}
.ws-ev.t-comment .tx::after{content:'»';color:var(--faint)}
.ws-ev.s-bad .tx,.ws-ev.s-bad .ic{color:var(--danger)}
.ws-ev.s-warn .ic{color:var(--gold)}
.ws-ev.s-ok.t-server .ic{color:var(--ok)}
.ws-feed-foot{padding:18px 0;text-align:center}

/* раздел «Исходники» (app/src/src.php): дерево, файл с номерами строк, история, дифф коммита */
.ws-src{padding:8px 18px 40px}
.ws-crumbs a{color:var(--muted);padding:3px 6px;border-radius:6px;text-decoration:none;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-crumbs a:hover{color:var(--text);background:var(--panel-2)}
.ws-src-ref{max-width:220px;background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:5px 8px;font:12.5px var(--font-mono);outline:none}
.ws-src-ref:focus{border-color:var(--gold-dim)}
.ws-src-tbl td.n a,.ws-src-tbl td.n>span{display:inline-flex;align-items:center;gap:9px;color:var(--text);text-decoration:none;max-width:100%;padding:2px 0}
.ws-src-tbl td.n a:hover{color:var(--gold)}
.ws-src-tbl td.n>span{color:var(--muted)}
.ws-src-tbl td.t a{text-decoration:none;opacity:.35}
.ws-src-tbl tr:hover td.t a{opacity:1}
/* список репо: имя и ветка — по содержимому, последний коммит — вся оставшаяся ширина (иначе две ячейки .n делили 100 % и коммит сжимался в столбик) */
.ws-src-tbl td.ws-src-name{width:1%;white-space:nowrap}
.ws-src-tbl td.ws-src-branch{white-space:nowrap;text-align:left;padding-right:18px}
.ws-src-tbl td.ws-src-last{white-space:normal;color:var(--muted);width:100%;min-width:260px}
.ws-src-tbl td.ws-src-last .ws-feed-who{margin-left:6px}
.ws-src-commit{font-size:13px;color:var(--text);padding:4px 10px 10px;line-height:1.5}
.ws-src-facts{display:flex;gap:8px;padding:4px 0 10px;flex-wrap:wrap}
.ws-src-facts .btn{text-decoration:none}
.ws-code{font:12.5px/1.55 var(--font-mono);background:var(--code-bg);border:1px solid var(--line-soft);border-radius:var(--r);overflow:auto;padding:8px 0}
.ws-cl{display:flex;min-width:max-content}
.ws-cl .ln{flex:none;width:56px;padding-right:14px;text-align:right;color:var(--faint);user-select:none}
.ws-cl .lc{white-space:pre;padding-right:18px;tab-size:4}
.ws-cl:hover{background:var(--panel)}
.ws-cl.hit{background:var(--gold-soft)}
.ws-cl.hit .ln{color:var(--gold)}
.ws-cl.hit-row{cursor:pointer}
.ws-cl.hit-row:hover .lc{color:var(--gold)}
.ws-src .ws-feed-day a{color:var(--text);text-decoration:none;letter-spacing:0;text-transform:none;font-size:12.5px}
.ws-src .ws-feed-day a:hover{color:var(--gold)}
.ws-chead{margin-bottom:14px}
.ws-cbody{margin:10px 0 0;white-space:pre-wrap;font-size:12.5px;max-height:300px}
.ws-cstat{margin:10px 0 0;font-size:11.5px;color:var(--muted);max-height:260px}
.ws-dfile{margin-bottom:14px;padding:10px 12px}
.ws-dfile h3{font-family:var(--font-mono);font-size:12.5px;margin-bottom:8px}
.ws-dstat{margin-left:auto;font-family:var(--font-mono)}
.ws-diff{font:12px/1.5 var(--font-mono);background:var(--code-bg);border-radius:8px;overflow:auto;max-height:70vh}
.ws-dl{display:flex;min-width:max-content}
.ws-dl .o,.ws-dl .n{flex:none;width:46px;padding-right:8px;text-align:right;color:var(--faint);user-select:none}
.ws-dl .c{white-space:pre;padding:0 14px 0 8px;tab-size:4}
.ws-dl.add{background:rgba(127,169,107,.14)}.ws-dl.add .c{color:#B9D3A3}
.ws-dl.del{background:rgba(217,85,85,.14)}.ws-dl.del .c{color:#E6A1A1}
.ws-dl.gap{background:var(--panel);color:var(--muted)}.ws-dl.gap .c{color:var(--muted)}

/* раздел «SQL»: слева заметки, справа редактор (сворачивается) и результат таблицей */
.ws-sql{flex:1;min-height:0;display:grid;grid-template-columns:250px minmax(0,1fr)}
.ws-sql-list{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--line-soft);background:var(--panel)}
.ws-sql-tools{display:flex;gap:6px;padding:10px 10px 8px;border-bottom:1px solid var(--line-soft)}
.ws-sql-tools .btn-gold{flex:none;padding:5px 10px;font-size:12.5px}
.ws-sql-tools .ws-feed-q{width:auto;flex:1;min-width:0}
.ws-sql-notes{flex:1;overflow:auto;padding:6px}
.ws-sql-note{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;padding:7px 10px;border-radius:8px;color:var(--text);border-left:2px solid transparent}
.ws-sql-note:hover{background:var(--panel-2)}
.ws-sql-note.on{background:var(--gold-soft);border-left-color:var(--gold)}
.ws-sql-note .t{font-size:13px;line-height:1.3;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}
.ws-sql-note .c{font-family:var(--font-mono);font-size:10.5px;color:var(--faint);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* группы (папки) заметок: заголовок сворачивается, вложенные — с отступом */
.ws-sql-grp{display:flex;align-items:center;gap:6px;padding:10px 8px 4px;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);cursor:pointer;user-select:none}
.ws-sql-grp:hover{color:var(--muted)}
.ws-sql-grp.none{cursor:default}
.ws-sql-grp .tri{width:12px;text-align:center;flex:none}
.ws-sql-grp .g{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-sql-grp .n{margin-left:auto;color:var(--dim)}
.ws-sql-grp .acts{display:none;gap:2px;margin-left:4px}
.ws-sql-grp:hover .acts{display:inline-flex}
.ws-sql-grp .acts button{padding:0 4px;color:var(--faint);font-size:12px;letter-spacing:0;text-transform:none}
.ws-sql-grp .acts button:hover{color:var(--text)}
.ws-sql-grp-empty{padding:2px 10px 6px 26px;font-size:12px;color:var(--dim);font-style:italic}
.ws-sql-note.in-grp{padding-left:26px;position:relative}
.ws-sql-note.in-grp::before{content:'';position:absolute;left:13px;top:0;bottom:0;width:1px;background:var(--line-soft)}
.ws-sql-note.in-grp.on::before{background:var(--gold-line)}
.ws-sql-group{flex:0 1 160px;min-width:110px}
.ws-sql-main{display:flex;flex-direction:column;min-height:0;min-width:0}
.ws-sql-ed{flex:0 0 auto;display:flex;flex-direction:column;border-bottom:1px solid var(--line-soft);max-height:80%}
.ws-sql-ed.collapsed .ws-sql-edwrap,.ws-sql-ed.collapsed .ws-sql-split{display:none}
/* подсветка: <pre> с highlight.js под прозрачным textarea — одинаковые шрифт, отступы и прокрутка */
.ws-sql-edwrap{position:relative;height:220px;min-height:80px;background:var(--code-bg)}
.ws-sql-edwrap .ws-sql-hl,.ws-sql-edwrap .ws-sql-q{position:absolute;inset:0;margin:0;padding:14px 18px;font:13px/1.55 var(--font-mono);tab-size:4;white-space:pre;overflow:auto;border:0;border-radius:0}
.ws-sql-edwrap .ws-sql-hl{color:var(--text);pointer-events:none;background:transparent}
.ws-sql-edwrap .ws-sql-hl code{font:inherit;background:transparent;color:inherit}
.ws-sql-edwrap .ws-sql-q{background:transparent;color:transparent;caret-color:var(--text);resize:none;height:auto;min-height:0;z-index:1}
.ws-sql-edwrap .ws-sql-q::placeholder{color:var(--faint)}
.ws-sql-edwrap .ws-sql-q::selection{background:rgba(227,164,74,.3)}
.ws-sql-hl .hljs-keyword,.ws-sql-hl .hljs-operator{color:var(--gold)}
.ws-sql-hl .hljs-string{color:#9BB061}
.ws-sql-hl .hljs-number,.ws-sql-hl .hljs-literal{color:#CD6B5E}
.ws-sql-hl .hljs-built_in,.ws-sql-hl .hljs-type{color:#6B9AC4}
.ws-sql-hl .hljs-comment{color:var(--faint);font-style:italic}
.ws-sql-hl .hljs-variable,.ws-sql-hl .hljs-title{color:#A88BC9}
.ws-sql-split{height:7px;flex:none;cursor:row-resize;background:var(--panel);border-top:1px solid var(--line-soft);position:relative}
.ws-sql-split::after{content:'';position:absolute;left:50%;top:2px;width:36px;height:3px;margin-left:-18px;border-radius:2px;background:var(--line-hover)}
.ws-sql-split:hover{background:var(--panel-2)}
.ws-sql-split:hover::after{background:var(--gold-dim)}
.ws-sql-edbar{display:flex;align-items:center;gap:8px;padding:8px 14px;flex-wrap:wrap;border-bottom:1px solid var(--line-soft);background:var(--panel)}
.ws-sql-ed.collapsed .ws-sql-edbar{border-bottom:0}
.ws-sql-fold{padding:4px 8px;font-size:13px}
.ws-sql-mode .btab.rw.on{color:var(--danger);border-color:rgba(217,85,85,.45);background:rgba(217,85,85,.1)}
.ws-sql-mode .btab[disabled]{opacity:.4;cursor:not-allowed}
.ws-sql-edbar .btn-gold.rw{background:var(--danger);border-color:var(--danger);color:#fff}
.ws-sql-title{flex:1 1 220px;min-width:140px;background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 10px;font:13.5px var(--font-body);outline:none}
.ws-sql-title:focus{border-color:var(--gold-dim)}
.ws-sql-res{flex:1;min-height:0;display:flex;flex-direction:column}
.ws-sql-status{display:flex;align-items:center;gap:10px;padding:8px 14px;font-size:12.5px;color:var(--muted);border-bottom:1px solid var(--line-soft);flex:none}
.ws-sql-res .ws-err{margin:14px}
.ws-sql-tblwrap{flex:1;overflow:auto;min-height:0}
.ws-sql-tbl{border-collapse:separate;border-spacing:0;font:12.5px/1.4 var(--font-mono);min-width:100%}
.ws-sql-tbl th{position:sticky;top:0;z-index:1;background:var(--panel-2);color:var(--muted);font-weight:600;text-align:left;padding:6px 10px;border-bottom:1px solid var(--line);border-right:1px solid var(--line-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-sql-tbl td{padding:4px 10px;border-bottom:1px solid var(--line-soft);border-right:1px solid var(--line-soft);white-space:nowrap;max-width:520px;overflow:hidden;text-overflow:ellipsis;vertical-align:top}
/* ширина колонки — за правый край заголовка (ws.js переводит таблицу в table-layout:fixed при первом захвате) */
.ws-sql-tbl th .ws-sql-rz{position:absolute;right:-4px;top:0;bottom:0;width:9px;cursor:col-resize;z-index:2}
.ws-sql-tbl th .ws-sql-rz:hover{background:var(--gold-line)}
body.ws-colrz{cursor:col-resize;user-select:none}
.ws-sql-tbl td.num{text-align:right;font-variant-numeric:tabular-nums}
.ws-sql-tbl td.null{color:var(--faint);font-style:italic}
.ws-sql-tbl th.n,.ws-sql-tbl td.n{color:var(--faint);text-align:right;width:1%;background:var(--panel)}
.ws-sql-tbl tr:hover td{background:var(--panel)}
.ws-sql-tbl td.ml{white-space:pre-wrap;word-break:break-word;max-width:none;min-width:320px;overflow:visible;text-overflow:clip}
.ws-sql-tbl td.cut{cursor:pointer}
.ws-sql-tbl td.cut:hover{background:var(--gold-soft)}
.ws-sql-more{display:block;margin-top:4px;font-size:11.5px;color:var(--gold)}
/* «Структура» (13.10.2026): вкладки слева, дерево объектов, карточки таблицы/объекта/базы в области результата */
.ws-sql-side{margin:10px 10px 0;align-self:stretch}
.ws-sql-side .btab{flex:1;justify-content:center}
.ws-sql-tools .btn{flex:none;padding:5px 9px;font-size:13px}
.ws-sql-dbhead{display:flex;flex-direction:column;gap:2px;padding:8px 10px;margin:0 0 4px;border-radius:8px;cursor:pointer;border-left:2px solid transparent;color:var(--text)}
.ws-sql-dbhead:hover{background:var(--panel-2)}
.ws-sql-dbhead.on{background:var(--gold-soft);border-left-color:var(--gold)}
.ws-sql-dbhead b{font-size:13px;font-family:var(--font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-sql-dbhead .ws-sub{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-sql-tree{flex:1;overflow:auto;padding:6px}
.ws-sql-tree .ws-sql-note .t{-webkit-line-clamp:1;font-family:var(--font-mono);font-size:12.5px;word-break:break-all}
.ws-sql-tree .ws-sql-note{padding-top:5px;padding-bottom:5px}
.ws-sql-vhead{flex-wrap:wrap;row-gap:4px}
.ws-sql-vhead b{font-size:14px;color:var(--text);font-family:var(--font-mono)}
.ws-sql-vtabs{margin:8px 14px 0;align-self:flex-start}
.ws-sql-vtabs + .ws-sql-tblwrap{margin-top:8px;border-top:1px solid var(--line-soft)}
.ws-sql-sch td.k{font-weight:600;color:var(--text)}
.ws-sql-sch td.key{color:var(--gold);font-weight:600}
.ws-sql-sch tr.clk{cursor:pointer}
.ws-sql-sch th.srt{cursor:pointer;user-select:none}
.ws-sql-sch th.srt:hover{color:var(--text)}
.ws-sql-lnk{background:none;border:0;padding:0;color:var(--gold);cursor:pointer;font:inherit}
.ws-sql-lnk:hover{text-decoration:underline}
.ws-sql-ddlwrap{flex:1;min-height:0;display:flex;flex-direction:column}
.ws-sql-ddlbar{display:flex;gap:6px;padding:8px 14px}
.ws-sql-ddl{flex:1;min-height:0;margin:0;padding:12px 18px 18px;font:12.5px/1.55 var(--font-mono);white-space:pre;overflow:auto;color:var(--text);background:var(--code-bg);border-top:1px solid var(--line-soft)}
.ws-sql-ddl code{font:inherit;background:transparent;color:inherit}
@media (max-width:760px){.ws-sql{grid-template-columns:1fr}.ws-sql-list{max-height:34vh;border-right:0;border-bottom:1px solid var(--line-soft)}.ws-sql-ed{max-height:none}.ws-sql-edwrap{height:150px}}

/* раздел «Git»: Gitea во фрейме на всю высоту (шапку Gitea прячет её header.tmpl) */
.ws-git{flex:1;width:100%;min-height:0;border:0;background:var(--bg)}
.ws-git-meta{font-family:var(--font-mono);font-size:11.5px;color:var(--faint);overflow:hidden;text-overflow:ellipsis;max-width:48vw}
@media (max-width:760px){.ws-src{padding:4px 8px 40px}.ws-src-ref{max-width:140px}.ws-cl .ln{width:40px;padding-right:8px}}
@media (max-width:760px){.ws-feed{padding:4px 8px 40px}.ws-feed-q{width:100%}.ws-ev{gap:7px;padding:5px 2px}.ws-feed-who{display:block;margin:0}}

@media (max-width:760px){
  .ws-body{flex-direction:column}
  .ws-nav{width:auto;flex-direction:row;overflow-x:auto;padding:6px 8px;border-right:0;border-bottom:1px solid var(--line-soft)}
  .ws-nav button{white-space:nowrap;border-left:0;border-bottom:2px solid transparent;border-radius:6px}
  .ws-nav button.on{border-bottom-color:var(--gold)}
  .ws-nav .ws-soon{display:none}
  .ws-bar{padding:8px 12px}
  .ws-drop{padding:4px 8px 40px}
  .ws-tbl td.t{display:none}
  .ws-tbl tr:not(:hover) td.a button{opacity:.7}
  .ws-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px}
  .ws-tile-a{opacity:.8}
  .ws-arc{grid-template-columns:1fr}
  .ws-arc-view{min-height:40vh;border-top:1px solid var(--line-soft)}
  .ws-srv{padding:8px 10px 40px}
  .ws-srv-grid{grid-template-columns:1fr}
  .ws-tiles{grid-template-columns:1fr}
  .ws-tile-top{grid-template-columns:1fr 1fr}
  .ws-row{flex-direction:column;gap:3px}
  .ws-svc td.v{white-space:normal}
  .ws-fname{max-width:100%}
}
/* раздел «Настройки»: страница ⚙ (app.css .set-*) внутри рабочего места */
/* на всю ширину, как остальные разделы, но с мерой: колонки строк и абзацы ограничены, лишняя ширина уходит подсказкам;
   шрифты на шаг крупнее — мелкие подписи страницы ⚙ (9.5–11px) здесь нечитаемы (Виталий 12.10) */
.ws-main>.set-page{padding:18px 26px 64px;margin:0;max-width:none;overflow:auto;flex:1;gap:22px}
.ws-main .set-status{gap:10px}
.ws-main .set-chip{padding:8px 14px}
.ws-main .set-chip-l{font-size:11px}
.ws-main .set-chip-v{font-size:14.5px}
.ws-main .set-cols{grid-template-columns:220px minmax(0,1fr);gap:30px}
.ws-main .set-nav{top:0}
.ws-main .set-nav button{font-size:15px;padding:10px 16px}
.ws-main .set-sec{padding:22px 28px 24px}
.ws-main .set-h{font-size:19px}
.ws-main .set-agent{font-size:11.5px}
.ws-main .set-h3{font-size:15.5px}
.ws-main .set-p{font-size:14.5px;max-width:92ch;line-height:1.6}
.ws-main .set-row{padding:13px 0;gap:8px 18px}
.ws-main .set-row.kv{grid-template-columns:minmax(0,260px) minmax(0,300px) minmax(0,1fr) 28px}
.ws-main .set-row.hd{font-size:11px}
.ws-main .set-lbl{font-size:15px}
.ws-main .set-lbl small{font-size:11.5px}
.ws-main .set-cell>.chip,.ws-main .set-eff{max-width:320px}
.ws-main .chip{font-size:12.5px;padding:6px 28px 6px 10px}
.ws-main .chip.chip-mini{font-size:11.5px;padding:4px 20px 4px 9px}
.ws-main .set-cap{font-size:11px}
.ws-main .set-note{font-size:14px;line-height:1.55}
.ws-main .set-val{font-size:15.5px}
.ws-main .set-help{width:26px;height:26px;font-size:12px}
.ws-main .set-hint{font-size:14px;max-width:92ch}
.ws-main .set-foot{font-size:12px}
.ws-main .set-ta-l{font-size:14.5px}
.ws-main .set-ta-l small{font-size:11.5px}
.ws-main .set-acc-h,.ws-main .set-more summary{font-size:14.5px}
.ws-main .set-cid{font-size:12px}
.ws-main .set-skill-d{font-size:13.5px}
.ws-main .set-skill-chat{font-size:13.5px}
.ws-main .set-main textarea,.ws-main .set-main input[type=text],.ws-main .set-main input[type=number]{font-size:14px}
.ws-main .set-main table{font-size:14px}

/* раздел «Цели» (#75, 13.10.2026): «Ждёт человека» сверху, плитки целей по одной в ряд.
   Цвета статусов — токены доски: сделано --ok, ждёт --gold, делается --t-all, очередь --muted, подумать --faint;
   цвет цели — палитра групп чата (chat.css --cs-*) */
.wg{display:flex;flex-direction:column;gap:18px}
.wg .s-done{--sc:var(--ok)} .wg .s-wait{--sc:var(--gold)} .wg .s-doing{--sc:var(--t-all)} .wg .s-queue{--sc:var(--muted)} .wg .s-think{--sc:var(--faint)} .wg .s-arch{--sc:var(--dim)}
.wg-dot{flex:none;width:10px;height:10px;border-radius:50%;background:var(--gc,var(--line));display:inline-block}
.wg-dot.c-gold{--gc:var(--cs-gold)} .wg-dot.c-green{--gc:var(--cs-green)} .wg-dot.c-blue{--gc:var(--cs-blue)}
.wg-dot.c-purple{--gc:var(--cs-purple)} .wg-dot.c-red{--gc:var(--cs-red)} .wg-dot.c-gray{--gc:var(--cs-gray)}
.wg-dot.c-none{background:transparent;border:1.5px dashed var(--faint)}
.ws-crumbs .cur .wg-dot{margin-right:7px}

/* «Ждёт человека» */
.wg-wait{border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);padding:12px 14px 8px}
.wg-wait.on{border-color:var(--gold-line)}
.wg-h{margin:0 0 6px;font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.wg-wait.on .wg-h{color:var(--gold)}
.wg-h span{color:var(--faint);font-weight:400}
.wg-ok{color:var(--ok);font-size:13.5px;padding:2px 0 6px}
.wg-wrow{display:grid;grid-template-columns:auto minmax(0,1fr) auto minmax(0,200px) 72px;align-items:center;gap:12px;
  padding:7px 6px;border-top:1px solid var(--line-soft);color:var(--text);text-decoration:none;border-radius:6px;font-size:13.5px}
.wg-wrow:first-of-type{border-top:0}
.wg-wrow:hover{background:var(--panel-2)}
.wg-wrow:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
.wg-id{font-family:var(--font-mono);font-size:12px;color:var(--gold)}
.wg-wt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wg-st{font-size:11.5px;padding:2px 8px;border-radius:999px;white-space:nowrap;color:var(--gold);background:var(--gold-soft);border:1px solid var(--gold-line)}
.wg-st.s-blocked{color:var(--text);background:transparent;border-color:var(--line)}
.wg-wg{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wg-none{color:var(--faint);font-style:italic}
.wg-for{font-family:var(--font-mono);font-size:11.5px;color:var(--faint);text-align:right;white-space:nowrap}

/* плитки целей */
.wg-tiles{display:flex;flex-direction:column;gap:10px}
.wg-tile{position:relative;border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);padding:13px 16px 12px;
  transition:border-color .15s,background .15s}
.wg-tile:hover{border-color:var(--line-hover);background:var(--panel-2)}
.wg-tile.warn{border-color:var(--gold-line)}
.wg-tile.svc,.wg-tile.fin{opacity:.62}
.wg-tile.svc:hover,.wg-tile.fin:hover{opacity:1}
.wg-tile.none{border-style:dashed;background:transparent}
.wg-top{display:flex;align-items:center;gap:9px;min-width:0}
.wg-name{font-size:15.5px;font-weight:600;color:var(--text);text-decoration:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wg-name::after{content:'';position:absolute;inset:0;border-radius:inherit}   /* вся плитка — ссылка на экран цели */
.wg-name:focus-visible{outline:none}
.wg-tile:has(.wg-name:focus-visible){outline:2px solid var(--gold);outline-offset:2px}
.wg-n{font-weight:400;color:var(--muted)}
.wg-tag{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;color:var(--faint);border:1px solid var(--line);border-radius:5px;padding:0 5px;white-space:nowrap}
.wg-last{margin-left:auto;font-family:var(--font-mono);font-size:11.5px;color:var(--faint);white-space:nowrap}
.wg-menu{position:relative;z-index:1;flex:none;width:28px;height:26px;border-radius:7px;color:var(--muted);font-size:16px;line-height:1}
.wg-menu:hover,.wg-menu:focus-visible{color:var(--text);background:var(--card)}
.wg-note{font-size:12.5px;color:var(--muted);margin:3px 0 0 19px;line-height:1.45;overflow-wrap:anywhere}
.wg-bar{display:flex;height:8px;margin:11px 0 9px;border-radius:999px;background:var(--track);overflow:hidden;gap:2px}
.wg-seg{flex:0 1 0;min-width:3px;background:var(--sc)}
.wg-foot{display:flex;align-items:center;flex-wrap:wrap;gap:6px 14px}
.wg-sum{font-size:12.5px;color:var(--text);white-space:nowrap}
.wg-chips{display:flex;flex-wrap:wrap;gap:5px}
.wg-chip{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--muted);background:var(--panel-2);border:1px solid var(--line-soft);
  border-radius:999px;padding:1px 9px;white-space:nowrap}
.wg-chip i{width:7px;height:7px;border-radius:50%;background:var(--sc)}
.wg-chip b{color:var(--text);font-weight:600;font-family:var(--font-mono);font-size:11px}
.wg-chip.warn{color:var(--gold);border-color:var(--gold-line);background:var(--gold-soft)}
.wg-chip.warn b{color:var(--gold)}
.wg-empty{padding:28px 20px;text-align:center;color:var(--muted);font-size:14px;line-height:1.6;border:1px dashed var(--line);border-radius:var(--r-lg)}
.wg-fin>summary{cursor:pointer;list-style:none;font-size:13px;color:var(--muted);padding:6px 4px;width:max-content}
.wg-fin>summary::before{content:'▸ ';color:var(--faint)}
.wg-fin[open]>summary::before{content:'▾ '}
.wg-fin>summary:hover{color:var(--text)}
.wg-fin>.wg-tiles{margin-top:6px}

/* форма «+ Цель» */
.wg-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px 18px;align-items:end;border:1px solid var(--gold-line);border-radius:var(--r-lg);
  background:var(--panel);padding:14px 16px}
.wg-form-h{grid-column:1/-1;font-weight:600;font-size:14.5px}
.wg-f{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted);min-width:0}
.wg-f small{color:var(--faint);font-size:11px}
.wg-f input{width:100%;background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font:14px var(--font-body);outline:none}
.wg-f input:focus{border-color:var(--gold)}
.wg-f.wide{grid-column:1/-1}
.wg-colors{display:flex;gap:7px;padding:5px 0}
.wg-form-a{grid-column:1/-1;display:flex;gap:8px}

@media (max-width:760px){
  .wg-wrow{display:flex;flex-wrap:wrap;gap:5px 10px}
  .wg-wt{flex:1 1 calc(100% - 64px);white-space:normal}
  .wg-wg{flex:1 1 0}
  .wg-tile{padding:12px 12px 11px}
  .wg-name{font-size:15px}
  .wg-note{margin-left:0}
  .wg-form{grid-template-columns:1fr}
}
#wg-list{display:flex;flex-direction:column;gap:18px}
#wg-form:empty{display:none}

/* ---------- экран цели #ws/goals/<id> (#76, 13.10.2026) ---------- */
/* карточка, открытая с экрана цели, — шторкой над оверлеем рабочего места (45); класс снимает closeDrawer */
body.dw-over .scrim{z-index:46}
body.dw-over .drawer{z-index:47}
.wg-head{border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);padding:14px 16px 12px}
.wg-head.none{border-style:dashed;background:transparent}
.wg-title{margin:0;font-size:18px;font-weight:600;min-width:0;overflow-wrap:anywhere}
.wg-blk{display:flex;flex-direction:column}
.wg-blk.s-wait>.wg-h{color:var(--gold)}
.wg-donebox>summary{cursor:pointer;list-style:none;width:max-content;padding:2px 0}
.wg-donebox>summary::-webkit-details-marker{display:none}
.wg-donebox>summary::before{content:'▸ ';color:var(--faint)}
.wg-donebox[open]>summary::before{content:'▾ '}
.wg-donebox>summary:hover{color:var(--text)}
.wg-rows{display:flex;flex-direction:column;border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);overflow:hidden}
.wg-row{display:flex;align-items:center;gap:10px;
  padding:8px 10px;border-top:1px solid var(--line-soft);cursor:pointer;font-size:14px;color:var(--text);
  border-left:3px solid var(--sc,transparent)}
.wg-row:first-child{border-top:0}
.wg-row:hover{background:var(--panel-2)}
.wg-row:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
.wg-row.on{background:var(--gold-soft)}
.wg-row>.wg-wt{flex:1 1 0;min-width:0}
.wg-grip{display:inline-flex;align-items:center;gap:6px;cursor:grab;color:var(--faint);font-size:12px;letter-spacing:-2px;padding:4px 2px;touch-action:none;user-select:none}
.wg-grip:hover{color:var(--text)}
.wg-step{font-family:var(--font-mono);font-size:11px;color:var(--muted);min-width:22px;text-align:center;
  border:1px solid var(--line);border-radius:6px;padding:1px 4px;margin-left:6px}
.wg-ck{display:inline-flex;align-items:center;padding:4px 2px;cursor:pointer}
.wg-ck input{width:16px;height:16px;accent-color:var(--gold);cursor:pointer}
.wg-tags{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end;font-size:11.5px}
.wg-tags .wg-st{font-size:11px;padding:1px 7px}
.wg-st.s-doing,.wg-st.s-a-doing{color:var(--t-all);background:transparent;border-color:currentColor}
.wg-st.s-todo,.wg-st.s-a-todo,.wg-st.s-backlog,.wg-st.s-inbox{color:var(--muted);background:transparent;border-color:var(--line)}
.wg-st.s-prod,.wg-st.s-a-done{color:var(--ok);background:transparent;border-color:currentColor}
.wg-after{white-space:nowrap;color:var(--gold);border:1px dashed var(--gold-line);border-radius:999px;padding:1px 7px;font-size:11px}
.wg-ty{color:var(--muted);white-space:nowrap}
.wg-tags .cprio-1{color:var(--danger)} .wg-tags .cprio-2{color:var(--gold)} .wg-tags .cprio-3{color:var(--muted)} .wg-tags .cprio-4{color:var(--prio-low)}
.wg-tags [class^="cprio-"]{font-family:var(--font-mono);font-size:11px}
.wg-by{flex:none;width:150px;display:flex;flex-direction:column;align-items:flex-end;font-size:12px;color:var(--muted);min-width:0;line-height:1.3}
.wg-by>span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wg-dt{font-family:var(--font-mono);font-size:11px;color:var(--faint)}
.wg-row .wg-menu{width:26px;height:24px}
.wg-row.sortable-chosen{background:var(--panel-2)}
/* «Без цели»: строка выбора */
.wg-selbar{position:sticky;top:-14px;z-index:2;display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;padding:8px 12px;
  border:1px dashed var(--line);border-radius:var(--r-lg);background:var(--bg);font-size:13px;color:var(--muted)}
.wg-selbar.on{border-style:solid;border-color:var(--gold-line);color:var(--text)}
.wg-selbar b{font-family:var(--font-mono)}
.wg-pick{max-height:min(60vh,420px);overflow:auto}
.wg-pick .chat-pop-i{display:flex;align-items:center;gap:8px;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* «Добавить карточки» */
.wg-add{display:flex;flex-direction:column;gap:10px;border:1px solid var(--gold-line);border-radius:var(--r-lg);background:var(--panel);padding:12px 14px}
.wg-add-h{display:flex;align-items:center;gap:10px;font-size:14.5px}
.wg-add-h .d-close{margin-left:auto}
.wg-add-n{font-family:var(--font-mono);font-size:11.5px;color:var(--faint)}
.wg-add-q{width:100%;background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font:14px var(--font-body);outline:none}
.wg-add-q:focus{border-color:var(--gold)}
.wg-add-list{max-height:min(48vh,420px);overflow:auto;border:1px solid var(--line-soft);border-radius:var(--r);background:var(--bg)}
.wg-add-row{border-left:0}
.wg-add-msg{padding:14px;text-align:center;color:var(--muted);font-size:13px}
#wg-add:empty{display:none}
#wg-one{display:flex;flex-direction:column;gap:16px}
@media (max-width:760px){
  .wg-row{flex-wrap:wrap;gap:4px 8px;padding:9px 8px}
  .wg-row>.wg-wt{order:5;flex:1 1 100%;white-space:normal;overflow-wrap:anywhere}
  .wg-row>.wg-tags{order:6;justify-content:flex-start}
  .wg-row>.wg-by{order:7;width:auto;flex-direction:row;gap:8px;align-items:center;margin-left:auto}
  .wg-row>.wg-menu{order:4;margin-left:auto}
  .wg-head{padding:12px 12px 11px}
  .wg-title{font-size:16px}
}

/* лейблы внутри цели и вид «Плитки» (13.10.2026, ws.js wlTiles): плитка на лейбл, внутри маленькие карточки-прямоугольники.
   Просьба Виталия: плитки крупные — 3 в ряд, 2 ряда на экран (высота от окна, внутри прокрутка), карточки сеткой.
   Заливка карточки по статусу: сделано --ok, подумать --wl-think (жёлтый), делается --t-all, ждёт --gold, архив тусклым */
.wg{--wl-think:#E8C84A}
.wl-sw{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;margin-right:4px}
.wl-sw button{padding:5px 11px;font-size:12.5px;color:var(--muted);background:transparent;border-radius:0}
.wl-sw button+button{border-left:1px solid var(--line)}
.wl-sw button:hover{color:var(--text)}
.wl-sw button.on{color:var(--text);background:var(--card)}
.wl-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:start}
.wl-tile{--lc:var(--line);position:relative;display:flex;flex-direction:column;gap:8px;min-width:0;
  height:calc((100vh - 320px) / 2);min-height:260px;   /* два ряда плиток под шапкой цели без прокрутки страницы */
  border:1px solid var(--line-soft);border-top:3px solid var(--lc);border-radius:var(--r-lg);background:var(--panel);padding:10px 12px 12px}
.wl-tile.c-gold{--lc:var(--cs-gold)} .wl-tile.c-green{--lc:var(--cs-green)} .wl-tile.c-blue{--lc:var(--cs-blue)}
.wl-tile.c-purple{--lc:var(--cs-purple)} .wl-tile.c-red{--lc:var(--cs-red)} .wl-tile.c-gray{--lc:var(--cs-gray)}
.wl-tile.none{border-style:dashed;background:transparent}
.wl-tile.alldone{opacity:.72}
.wl-tile.alldone:hover{opacity:1}
.wl-tile.sortable-chosen{border-color:var(--gold-line)}
.wl-head{display:flex;align-items:center;gap:8px;min-width:0;cursor:grab;user-select:none}
.wl-head button{cursor:pointer}
.wl-grip{color:var(--faint);font-size:12px;letter-spacing:-2px;padding:2px 0;touch-action:none}
.wl-tile:hover .wl-grip{color:var(--text)}
.wl-title{margin:0;flex:1;min-width:0;font-size:15px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wl-sum{font-family:var(--font-mono);font-size:11.5px;color:var(--faint);white-space:nowrap}
.wl-sum b{color:var(--ok);font-weight:600}
.wl-plus{flex:none;width:26px;height:24px;border-radius:7px;color:var(--muted);font-size:17px;line-height:1}
.wl-plus:hover,.wl-plus:focus-visible{color:var(--gold);background:var(--card)}
.wl-tile .wg-menu{width:26px;height:24px}
.wl-note{font-size:12.5px;color:var(--muted);line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere;cursor:text;
  border-radius:6px;padding:2px 5px;margin:-4px -5px 0;max-height:4.4em;overflow:hidden}
.wl-note:hover,.wl-note:focus-visible{background:var(--card);outline:none}
.wl-note.empty{color:var(--faint);font-style:italic}
.wl-note.edit{max-height:none;overflow:visible;padding:0;margin:-4px 0 0;cursor:auto;background:transparent}
.wl-note-ta{display:block;width:100%;box-sizing:border-box;font:inherit;font-size:12.5px;line-height:1.45;color:var(--text);background:var(--code-bg);
  border:1px solid var(--gold);border-radius:6px;padding:4px 6px;resize:none;outline:none;overflow:hidden}
.wl-bar{margin:0;height:5px;flex:none}
.wl-body{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:8px;margin:0 -4px;padding:0 4px}
.wl-cards,.wl-done{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px;align-content:start}
.wl-cards:empty:only-child{min-height:84px}   /* пустая плитка — место, куда бросить карточку */
.wl-cards:empty+.wl-done{border-top:0;padding-top:0}   /* всё сделано — без просвета над сделанными */
.wl-zone{display:flex;flex-direction:column;gap:6px;border-top:1px dashed var(--line-soft);padding-top:5px}
.wl-zone[data-kind="arch"]{border-top-color:var(--dim)}   /* архивные — своей зоной под сделанными (Виталий 14.10) */
.wl-zone.fold .wl-done{display:none}
.wl-fold{align-self:flex-start;display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--faint);padding:1px 7px 1px 3px;border-radius:6px;cursor:pointer}
.wl-fold:hover,.wl-fold:focus-visible{color:var(--text);background:var(--card)}
.wl-fold i{font-style:normal;display:inline-block;transition:transform .15s}
.wl-zone.fold .wl-fold i{transform:rotate(-90deg)}
.wl-fold b{font-weight:600;color:var(--muted)}
.wl-zone.fold .wl-fold b{color:var(--text)}
.wl-card{--tint:transparent;display:flex;flex-direction:column;gap:4px;min-width:0;min-height:98px;padding:7px 9px 8px;cursor:pointer;
  font-size:12.5px;color:var(--text);border:1px solid var(--line-soft);border-left:3px solid var(--sc,transparent);border-radius:9px;
  background:var(--card);background:color-mix(in srgb,var(--tint) 14%,var(--card))}
.wl-card:hover{border-color:var(--line-hover);background:var(--card-hover);background:color-mix(in srgb,var(--tint) 22%,var(--card-hover))}
.wl-card:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
.wl-card.s-done{--tint:var(--ok)}
.wl-card.s-think{--tint:var(--wl-think);--sc:var(--wl-think)}
.wl-card.s-doing{--tint:var(--t-all)}
.wl-card.s-wait{--tint:var(--gold)}
.wl-card.s-arch,.wl-card.arch{--tint:var(--muted);--sc:var(--dim);opacity:.55}
.wl-card.arch:hover{opacity:.9}
.wl-card.ghost{opacity:.35}
.wl-c1,.wl-c2{display:flex;align-items:center;gap:6px;font-size:11px;min-width:0}
.wl-c1 .wg-step{margin-left:0;min-width:20px}
.wl-c1 [class^="cprio-"]{font-family:var(--font-mono);margin-left:auto}
.wl-c1 .cprio-1{color:var(--danger)} .wl-c1 .cprio-2{color:var(--gold)} .wl-c1 .cprio-3{color:var(--muted)} .wl-c1 .cprio-4{color:var(--prio-low)}
.wl-t{flex:1;line-height:1.35;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;overflow:hidden}
.wl-c2{margin-top:auto;flex-wrap:wrap;gap:4px 6px}
.wl-st{color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.wl-card.s-done .wl-st{color:var(--ok)}
.wl-card.s-doing .wl-st{color:var(--t-all)}
.wl-card.s-wait .wl-st{color:var(--gold)}
.wl-c2 .wg-after{font-size:10.5px;padding:0 6px}
/* аналитика (доска «Аналитика»: расследование, итог — отчёт) — пометка на карточке и строке, рамка пунктиром */
.wl-an{font-size:10px;color:var(--gold);border:1px solid var(--gold-line);border-radius:999px;padding:0 6px;white-space:nowrap;line-height:1.5}
.wl-card.an{border-style:dashed;border-left-style:solid}
.wg-tags .wl-an{font-size:10.5px}
.wl-done .wl-card{min-height:72px;padding:6px 8px 7px;font-size:12px;gap:2px}
.wl-done .wl-t{-webkit-line-clamp:2}
.wl-done .wl-c1,.wl-done .wl-c2{font-size:10.5px}
/* чип лейбла у строки в списке */
.wl-chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--muted);white-space:nowrap;max-width:150px;overflow:hidden;text-overflow:ellipsis;
  border:1px solid var(--line-soft);border-radius:999px;padding:1px 7px 1px 5px}
.wl-chip::before{content:'';flex:none;width:7px;height:7px;border-radius:50%;background:var(--lc,var(--line))}
.wl-chip.c-gold{--lc:var(--cs-gold)} .wl-chip.c-green{--lc:var(--cs-green)} .wl-chip.c-blue{--lc:var(--cs-blue)}
.wl-chip.c-purple{--lc:var(--cs-purple)} .wl-chip.c-red{--lc:var(--cs-red)} .wl-chip.c-gray{--lc:var(--cs-gray)}
/* форма лейбла и выбор лейбла в меню */
.wl-form textarea{width:100%;background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font:14px var(--font-body);outline:none;resize:vertical;line-height:1.4}
.wl-form textarea:focus{border-color:var(--gold)}
.wg-pick .chat-pop-i.on{color:var(--gold)}
@media (max-width:1180px){
  .wl-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:760px){
  .wl-grid{grid-template-columns:1fr}
  .wl-tile{height:auto;min-height:0;max-height:70vh}
  .wl-sw button{padding:5px 8px}
}

/* «Знания» и «Грабли» цели (#128, 18.10.2026, ws.js wkSection): две колонки под шапкой цели; грабли — красной чертой слева.
   Текст — с переносами как набран; таблица строками «|» — моноширинным. Ниже карточек — «Лента цели» (правки), свёрнута */
.wk{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.wk-col{display:flex;flex-direction:column;gap:6px;min-width:0}
.wk-h{display:flex;align-items:center;gap:10px}
.wk-h .wg-h{margin:0}
.wk-col.k-trap .wk-h .wg-h{color:var(--danger)}
.wk-add{margin-left:auto;padding:3px 10px;font-size:12px}
.wk-list{display:flex;flex-direction:column;border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);overflow:hidden}
.wk-row{padding:8px 10px 6px 12px;border-top:1px solid var(--line-soft);border-left:3px solid var(--ok)}
.wk-col.k-trap .wk-row{border-left-color:var(--danger)}
.wk-row:first-child{border-top:0}
.wk-text{font-size:13.5px;line-height:1.5;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere}
.wk-text.mono{font-family:var(--font-mono);font-size:12px;white-space:pre;overflow-x:auto}
.wk-meta{display:flex;align-items:center;gap:8px;margin-top:4px;font-size:11.5px;color:var(--muted);min-height:24px}
.wk-src{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}
.wk-src.none{color:var(--faint);font-style:italic}
.wk-card{background:none;border:0;padding:0;font:11.5px var(--font-mono);color:var(--gold);cursor:pointer}
.wk-card:hover{text-decoration:underline}
.wk-files{font-family:var(--font-mono);font-size:11px;color:var(--muted);overflow-wrap:anywhere}
.wk-meta .wg-dt{margin-left:auto;white-space:nowrap}
/* одно правило — одна строка (#150): ссылка — пунктир слева, под текстом — откуда она, похожие строки и кто ссылается */
.wk-row.ref{border-left-style:dashed}
.wk-rels{display:flex;flex-wrap:wrap;gap:2px 14px;margin-top:4px;font-size:11.5px;color:var(--muted)}
.wk-rel.copy{color:var(--gold-dim)}
.wk-rel.gone{color:var(--faint);font-style:italic}
/* похожая строка в этой цели (#166): доска не записала новую (409) — выбор «Заменить её» или «Записать отдельно» */
.wk-alike{display:flex;flex-direction:column;gap:6px;border:1px solid var(--gold-line);border-radius:8px;background:var(--gold-soft);padding:8px 10px}
.wk-alh{font-size:12.5px;color:var(--text)}
.wk-ali{display:flex;align-items:flex-start;gap:10px}
.wk-ali .wk-text{flex:1;min-width:0;font-size:12.5px}
.wk-ali .btn,.wk-ala .btn{flex:none;white-space:nowrap}
.wk-goal{background:none;border:0;padding:0;font:inherit;color:var(--gold);cursor:pointer}
.wk-goal:hover{text-decoration:underline}
.wk-row.wk-flash{animation:wk-flash 2.2s ease-out}
@keyframes wk-flash{0%,30%{background:var(--gold-soft)}100%{background:transparent}}
@media (prefers-reduced-motion:reduce){.wk-row.wk-flash{animation:none;background:var(--gold-soft)}}
.wk-acts{display:flex;gap:2px;opacity:0;transition:opacity .12s}
.wk-row:hover .wk-acts,.wk-acts:focus-within{opacity:1}
.wk-acts .wg-menu{width:24px;height:22px}
.wk-empty{font-size:12.5px;color:var(--faint);border:1px dashed var(--line);border-radius:var(--r-lg);padding:9px 12px}
.wk-form{display:flex;flex-direction:column;gap:8px;border:1px solid var(--gold-line);border-radius:var(--r-lg);background:var(--panel);padding:10px 12px}
.wk-list .wk-form{border:0;border-radius:0;border-top:1px solid var(--line-soft)}
.wk-list .wk-form:first-child{border-top:0}
.wk-form textarea{width:100%;box-sizing:border-box;resize:vertical;background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;
  padding:8px 10px;font:13.5px/1.5 var(--font-body);outline:none}
.wk-form textarea:focus{border-color:var(--gold)}
.wk-f2{display:grid;grid-template-columns:110px minmax(0,1fr);gap:8px}
.wk-srcl{margin-top:-2px}
.wk-srca{background:none;border:0;padding:0;color:var(--faint);cursor:pointer;font:12px var(--font-body)}
.wk-srca:hover{color:var(--gold)}
.wk-form .wg-form-a{align-items:center}
.wk-keys{margin-left:auto;font-size:11px;color:var(--faint)}
.wk-hlist{display:flex;flex-direction:column;border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);overflow:hidden}
.wk-hrow{display:flex;align-items:baseline;gap:10px;padding:6px 10px;border-top:1px solid var(--line-soft);font-size:12.5px;color:var(--muted)}
.wk-hrow:first-child{border-top:0}
.wk-hwho{flex:none;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}
.wk-hwhat{min-width:0;overflow-wrap:anywhere}
.wk-hwhat b{font-weight:600;color:var(--ok)}
.wk-hwhat b.k-trap{color:var(--danger)}
/* вопросы владельцу (#131): блок под колонками знаний — во всю ширину, золотая полоска; «Куда» — ответ на вопрос */
.wk-asks{grid-column:1/-1}
.wk-col.k-ask .wk-h .wg-h{color:var(--gold)}
.wk-col.k-ask .wk-row{border-left-color:var(--gold)}
.wk-ahint{font-size:12px;color:var(--muted)}
.wk-to{max-width:240px}
.wk-to select{background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 9px;font:13.5px var(--font-body);outline:none}
.wk-to select:focus{border-color:var(--gold)}
.wk-hwhat b.k-ask{color:var(--gold)}
/* «Ещё карточки — цель не главная» и «След цели» (#129, ws.js wtMore/wtTrace): свёрнуты под карточками цели.
   Строка следа — путь, сколько карточек правили, последняя; «общий» файл (правили многие цели) приглушён */
.wt-rows,.wt-files{display:flex;flex-direction:column;border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);overflow:hidden}
.wt-via{flex:none;width:18px;text-align:center;font-family:var(--font-mono);font-size:12px;color:var(--ok)}
.wt-via.files{color:var(--muted)}
.wt-file{display:flex;align-items:baseline;gap:10px;padding:6px 10px;border-top:1px solid var(--line-soft);font-size:12.5px;color:var(--muted)}
.wt-file:first-child{border-top:0}
.wt-path{flex:1 1 0;min-width:0;font-family:var(--font-mono);font-size:12px;color:var(--text);overflow-wrap:anywhere}
.wt-repo{color:var(--faint);margin-right:6px}
.wt-repo::after{content:':'}
.wt-n{flex:none;white-space:nowrap}
.wt-file.common .wt-path{color:var(--muted)}
.wt-common{flex:none;font-size:11px;color:var(--faint);border:1px dashed var(--line);border-radius:999px;padding:0 7px}
.wt-cut{font-size:11.5px;color:var(--faint);padding:4px 2px 0}
/* «Тесты» цели (#135, 18.10.2026, ws.js wttSection): плитки под знаниями — последний прогон цветом черты слева
   (✓ --ok, ✗ --danger, ⚠ стенд --gold); клик — под плитками окно теста: скрипт моноширинным и история прогонов.
   Только просмотр: тесты пишет исполнитель */
.wtt{display:flex;flex-direction:column;gap:6px;margin-top:14px}
.wtt-ro{margin-left:auto;font-size:11.5px;color:var(--faint)}
.wtt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.wtt .r-pass{--rc:var(--ok)} .wtt .r-fail{--rc:var(--danger)} .wtt .r-stand{--rc:var(--gold)}
.wtt-tile{--rc:var(--line);display:flex;flex-direction:column;gap:4px;min-width:0;text-align:left;cursor:pointer;font:inherit;color:var(--text);
  border:1px solid var(--line-soft);border-left:3px solid var(--rc);border-radius:var(--r-lg);background:var(--panel);padding:8px 10px}
.wtt-tile:hover{border-color:var(--line);border-left-color:var(--rc)}
.wtt-tile.on{border-color:var(--gold-line);border-left-color:var(--rc)}
.wtt-t{display:flex;gap:6px;align-items:baseline;min-width:0}
.wtt-mark{flex:none;width:14px;text-align:center;font-weight:600;color:var(--rc,var(--faint))}
.wtt-name{font-size:13px;line-height:1.35;overflow-wrap:anywhere}
.wtt-meta{display:flex;gap:8px;font:11.5px var(--font-mono);color:var(--muted)}
.wtt-meta .none{color:var(--faint);font-style:italic;font-family:var(--font-body)}
.wtt-meta .wg-dt{margin-left:auto;white-space:nowrap}
.wtt-one{display:flex;flex-direction:column;gap:6px;border:1px solid var(--gold-line);border-radius:var(--r-lg);background:var(--panel);padding:10px 12px}
.wtt-oh{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--muted)}
.wtt-oh b{font-size:13.5px;color:var(--text);font-weight:600;overflow-wrap:anywhere}
.wtt-oh .wg-dt{margin-left:auto;white-space:nowrap}
.wtt-oh .wg-menu{width:24px;height:22px}
.wtt-kind{font:11px var(--font-mono);border:1px solid var(--line);border-radius:999px;padding:0 7px}
.wtt-code{margin:0;max-height:420px;overflow:auto;background:var(--code-bg);border:1px solid var(--line-soft);border-radius:8px;
  padding:10px 12px;font:12.5px/1.55 var(--font-mono);color:var(--text);white-space:pre;tab-size:4}
.wtt-code code{display:block;font:inherit;color:inherit;background:transparent}
/* токены теста — та же палитра, что у диффа (.dv в app.css) */
.wtt-code .hljs-keyword,.wtt-code .hljs-literal,.wtt-code .hljs-type{color:#FF7B72}
.wtt-code .hljs-string,.wtt-code .hljs-regexp,.wtt-code .hljs-meta .hljs-string{color:#A5D6FF}
.wtt-code .hljs-comment,.wtt-code .hljs-quote{color:#7D8B97;font-style:italic}
.wtt-code .hljs-number,.wtt-code .hljs-attr{color:#79C0FF}
.wtt-code .hljs-variable,.wtt-code .hljs-template-variable{color:#FFA657}
.wtt-code .hljs-title,.wtt-code .hljs-title.function_,.wtt-code .hljs-section{color:#D2A8FF}
.wtt-code .hljs-title.class_,.wtt-code .hljs-built_in{color:#FFA657}
.wtt-code .hljs-meta,.wtt-code .hljs-symbol{color:#79C0FF}
.wtt-code .hljs-params{color:#C9D4DC}
.wtt-hh{margin:4px 0 0}
.wtt-runs{display:flex;flex-direction:column;border:1px solid var(--line-soft);border-radius:var(--r-lg);overflow:hidden}
.wtt-run{display:flex;align-items:baseline;gap:10px;padding:5px 10px;border-top:1px solid var(--line-soft);font-size:12px;color:var(--muted)}
.wtt-run:first-child{border-top:0}
.wtt-run .wg-dt{flex:none;white-space:nowrap}
.wtt-took{flex:none;white-space:nowrap}
.wtt-note{flex:1 1 0;min-width:0;font:11.5px/1.45 var(--font-mono);white-space:pre-wrap;overflow-wrap:anywhere;max-height:7.5em;overflow:auto}
@media (max-width:760px){
  .wk{grid-template-columns:1fr}
  .wtt-run{flex-wrap:wrap;gap:2px 8px}
  .wtt-note{flex:1 1 100%}
  .wt-file{flex-wrap:wrap;gap:2px 8px}
  .wt-path{flex:1 1 100%}
  .wk-acts{opacity:1}
  .wk-keys{display:none}
  .wk-hrow{flex-wrap:wrap;gap:2px 8px}
  .wk-hwhat{flex:1 1 100%}
}
/* разбор истории по целям (#130): панель над плитками — запуск, ход, список целей на утверждение */
.wgh{border:1px solid var(--line-soft);border-radius:var(--r-lg);background:var(--panel);padding:12px 14px;margin-bottom:12px;display:flex;flex-direction:column;gap:8px}
.wgh.on{border-color:var(--gold-line)}
.wgh-h{display:flex;align-items:center;gap:10px}
.wgh-t{font-weight:600;font-size:14.5px}
.wgh-st{font:11px var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.wgh-st.s-proposed{color:var(--gold)}
.wgh-st.s-failed{color:var(--danger)}
.wgh-st.s-done{color:var(--ok)}
.wgh-h .wg-menu{margin-left:auto}
.wgh-p{margin:0;font-size:13.5px;line-height:1.55;color:var(--muted)}
.wgh-p.ok{color:var(--ok)}
.wgh-p.bad{color:var(--danger)}
.wgh-prog{font:13px var(--font-mono);color:var(--text)}
.wgh-who{font-size:11.5px;color:var(--faint)}
.wgh-a{display:flex;gap:8px;flex-wrap:wrap}
.wgh-list{display:flex;flex-direction:column;border:1px solid var(--line-soft);border-radius:var(--r-lg);max-height:60vh;overflow-y:auto}
.wgh-row{display:flex;gap:10px;align-items:flex-start;padding:8px 10px;border-top:1px solid var(--line-soft)}
.wgh-row:first-child{border-top:0}
.wgh-on{margin-top:8px;accent-color:var(--gold)}
.wgh-f{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr);gap:6px 10px;flex:1;min-width:0}
.wgh-f input{width:100%;background:var(--code-bg);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:6px 9px;font:13.5px var(--font-body);outline:none}
.wgh-f input:focus{border-color:var(--gold)}
.wgh-f input[readonly]{background:transparent;border-color:transparent;color:var(--muted)}
.wgh-title{font-weight:600}
.wgh-ex{grid-column:1/-1;font-size:12px;color:var(--muted);display:flex;flex-wrap:wrap;gap:4px 6px;align-items:center}
.wgh-row:has(.wgh-on:not(:checked)) .wgh-f{opacity:.45}
@media (max-width:760px){.wgh-f{grid-template-columns:1fr}}
/* «Знания по истории» (#131): открытые вопросы всех целей в панели над плитками — цель ссылкой, ответ в её окне */
.wgk-asks{display:flex;flex-direction:column;gap:6px}
.wgk-ah{font-size:12.5px;color:var(--muted)}
.wgk-ah span{color:var(--gold)}
.wgk-list{display:flex;flex-direction:column;border:1px solid var(--line-soft);border-radius:var(--r-lg);max-height:50vh;overflow-y:auto}
.wgk-ask{display:flex;gap:10px;align-items:baseline;padding:7px 10px;border-top:1px solid var(--line-soft);border-left:3px solid var(--gold);font-size:13px}
.wgk-ask:first-child{border-top:0}
.wgk-goal{flex:none;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text);font-weight:600;text-decoration:none}
.wgk-goal:hover{text-decoration:underline}
.wgk-q{flex:1;min-width:0;color:var(--text);overflow-wrap:anywhere;white-space:pre-wrap}
@media (max-width:760px){.wgk-ask{flex-wrap:wrap}.wgk-goal{max-width:100%}}
