:root{
  --bg:#0f1115; --panel:#171a21; --panel2:#1f2430; --border:#2a3140;
  --text:#e6e9ef; --muted:#9aa3b2; --primary:#3b82f6; --primary-h:#2b6fd6;
  --ok:#16a34a; --err:#dc2626; --danger:#b91c1c;
  --radius:8px;
}
*{box-sizing:border-box}
body{margin:0;font:14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Ubuntu,sans-serif;background:var(--bg);color:var(--text)}
a{color:var(--primary);text-decoration:none}
a:hover{color:var(--primary-h)}
.muted{color:var(--muted)}
code{background:#0003;padding:1px 5px;border-radius:4px}

.topbar{display:flex;align-items:center;gap:12px;padding:10px 16px;background:var(--panel);border-bottom:1px solid var(--border)}
.topbar .brand{font-weight:700;color:var(--text)}
.topbar .spacer{flex:1}
.topbar .user{color:var(--muted)}
.topbar form{display:inline}
.topbar-gear{font-size:13px;color:var(--muted)}
.topbar-gear:hover{color:var(--text)}
button.link{background:none;border:none;color:var(--muted);cursor:pointer;font:inherit}
button.link:hover{color:var(--text)}

main{padding:16px}
h1{font-size:20px;margin:0 0 12px}
h2{font-size:16px;margin:0 0 8px}

button,.primary,.mini{
  font:inherit;border:1px solid var(--border);background:var(--panel2);color:var(--text);
  padding:6px 12px;border-radius:var(--radius);cursor:pointer;
}
button:hover{border-color:#3a4456}
.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.primary:hover{background:var(--primary-h)}
.danger{background:var(--danger);border-color:var(--danger);color:#fff}
.mini{padding:2px 8px;font-size:12px}
.del-cell{margin-left:4px;color:var(--err)}

.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:16px}
.login-wrap{max-width:340px;margin:40px auto}
.login-wrap .card{display:flex;flex-direction:column;gap:10px}
label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}
input,textarea,select{font:inherit;background:var(--bg);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:8px}
input:focus,textarea:focus{outline:none;border-color:var(--primary)}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px}
.brand-card{display:flex;flex-direction:column;gap:6px}
.brand-card .brand-name{font-weight:600;font-size:16px}

.editor{display:grid;grid-template-columns:400px 1fr;gap:16px;align-items:start}
@media(max-width:780px){.editor{grid-template-columns:1fr}}
.tree{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:10px;max-height:82vh;overflow:auto;display:flex;flex-direction:column}
.tree-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.tree-brand-wrap{display:flex;align-items:center;gap:4px;flex:1;min-width:0}
.tree-head .tree-brand{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.tree-toggles{display:inline-flex;gap:2px;flex-shrink:0}
.tree-toggle{font-size:13px;line-height:1;padding:3px 6px}

/* ── Туглы шапки дерева (🔢 порядок / 👁 скрытое) ── */
#tree-eye.active,#tree-order-hide.active{color:var(--primary);background:var(--panel2);border-color:var(--border)}

/* ── Контекстное меню (правый клик) ── */
.ctx-menu{position:fixed;z-index:1000;min-width:200px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:4px;box-shadow:0 10px 30px #000a;font-size:13px}
.ctx-item{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:6px;cursor:pointer;color:var(--text);position:relative;white-space:nowrap}
.ctx-item:hover{background:var(--panel2)}
.ctx-item .ci{width:1.4em;text-align:center;flex-shrink:0;display:inline-flex;justify-content:center;font-variant-emoji:text;color:var(--muted)}
.ctx-item:hover .ci{color:var(--text)}
.ctx-sep{height:1px;background:var(--border);margin:4px 6px}
.ctx-item.danger,.ctx-item.danger .ci{color:var(--danger)}
.ctx-item.danger:hover{background:rgba(185,28,28,.16)}
.ctx-item.disabled{opacity:.5;cursor:not-allowed}
.ctx-item.disabled:hover{background:transparent}
.ctx-caption{padding:6px 10px 3px;font-size:11px;color:var(--muted);max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ctx-mark{color:var(--primary);font-size:11px}
.ctx-item.disabled:hover .ci{color:var(--muted)}
.ctx-has-sub > .ci::after{content:"▸";position:absolute;right:8px;font-size:10px;color:var(--muted)}
.ctx-submenu{position:absolute;left:100%;top:-5px;min-width:180px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:4px;box-shadow:0 8px 24px #0008;display:none}
.ctx-has-sub:hover > .ctx-submenu,.ctx-has-sub.open > .ctx-submenu{display:block}

/* ── Finder-подобное дерево ── */
.tree-root{font-size:13px;overflow:auto;flex:1}
.tree-children{list-style:none;margin:0;padding:0}
.tree-children .tree-children{margin-left:14px;border-left:1px dashed #2a314055;padding-left:4px}
.tree-node{margin:1px 0}
.tree-row{display:flex;align-items:center;gap:2px;padding:2px 2px;border-radius:4px}
.tree-row:hover{background:#1c2230}
.tree-row:hover .tree-actions{opacity:1}
.tree-row.current{background:#15203a;box-shadow:inset 2px 0 0 var(--primary)}
.disclosure{background:none;border:none;color:var(--muted);cursor:pointer;width:18px;padding:0;font-size:10px;text-align:center;flex-shrink:0;font-variant-emoji:text;line-height:1}
.disclosure:hover{color:var(--text)}
.disclosure.open{color:var(--primary)}
.disclosure-spacer{display:inline-block;width:18px;flex-shrink:0}
.tree-name{display:flex;align-items:center;gap:5px;cursor:pointer;color:var(--text);flex:1;min-width:0;padding:1px 2px;overflow:hidden}
.tree-name.dir:hover{color:var(--primary)}
.tree-name.file{color:var(--muted);cursor:default}
.tree-icon{flex-shrink:0;width:1.4em;text-align:center;display:inline-flex;align-items:center;justify-content:center;font-variant-emoji:text;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif}
.tree-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}
.tree-root:not(.show-files) .tree-node.file{display:none}
.tree-node.hidden-file .tree-label{opacity:.55}
.tree-node.system-folder .tree-label{opacity:.6}
.badge{font-size:9px;font-style:normal;background:var(--panel2);border:1px solid var(--border);border-radius:3px;padding:0 3px;color:var(--muted)}
.badge-md{color:#86efac;border-color:#2d5a2d}
.badge-xlsx{color:#9bc1ff;border-color:#2d4a6a}
.tree-actions{display:flex;gap:1px;opacity:0;transition:opacity .1s}
.icon-btn{font:inherit;border:1px solid transparent;background:transparent;color:var(--muted);cursor:pointer;padding:2px 5px;border-radius:4px;font-size:12px;text-decoration:none;display:inline-flex;align-items:center;line-height:1}
.icon-btn:hover{background:var(--panel2);border-color:var(--border);color:var(--text)}
.icon-btn.danger:hover{color:#fca5a5;border-color:#5a2d2d}
.tree-empty{padding:4px 6px;font-size:12px}

/* ── Страница «Настройки проекта» (правая панель) ── */
.project-page{display:flex;flex-direction:column}
.project-page .pr-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.project-page .pr-head strong{font-size:16px}
.project-page .pr-head-brand{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.project-page .pr-head #pr-close{margin-left:auto}
.pr-nav{display:flex;gap:6px;flex-wrap:wrap;position:sticky;top:8px;z-index:20;
  background:var(--panel);border:1px solid var(--border);border-radius:20px;padding:5px 8px;margin-bottom:4px}
.pr-nav a{font-size:12px;color:var(--muted);padding:3px 10px;border-radius:14px;white-space:nowrap}
.pr-nav a:hover{color:var(--text);background:var(--panel2)}
.pr-sec{display:flex;flex-direction:column;gap:8px;padding:14px 2px 6px;border-top:1px solid var(--border);scroll-margin-top:56px}
.pr-sec:first-of-type{border-top:none}
.pr-sec h3{margin:0;font-size:15px;color:var(--text)}
.pr-build-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pr-build-controls .build-chip{flex-shrink:0}
.pr-test-hint{margin:0}
.pr-sec .bs-info{margin:0}
.pr-sec .bs-dist{margin:0}
.pr-sec .bs-form{margin:0}

/* ── Общие элементы блоков настроек ── */
.bs-info{display:flex;flex-direction:column;gap:4px}
.bs-info>div{display:flex;gap:6px;align-items:center;font-size:12px}
.bs-info dt{color:var(--muted);min-width:90px;margin:0}
.bs-info dd{margin:0;display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.bs-form{display:flex;flex-direction:column;gap:8px}
.bs-form label{flex-direction:row;align-items:center;gap:6px}
.bs-form input{flex:1}
.bs-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

.mkdir-form{display:flex;gap:4px;margin-top:10px}
.mkdir-form input{flex:1}

.panel{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:16px;min-height:60vh}
.edit-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.edit-head .actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}

/* ── Хлебные крошки заголовка панели (h2.crumbs) ── */
.crumbs{margin:0;font-size:16px;line-height:1.4;word-break:break-word;display:flex;flex-wrap:wrap;align-items:baseline;gap:0 2px}
.crumbs .crumb{color:inherit;text-decoration:none;border-radius:4px;padding:1px 3px;margin:0 -1px}
a.crumb{cursor:pointer}
a.crumb:hover{color:var(--primary-h);text-decoration:underline;text-underline-offset:3px}
.crumbs .crumb-sep{color:var(--muted);user-select:none;padding:0 1px}
.crumbs .crumb-cur{color:var(--text);font-weight:600}

/* ── Чип статуса сборки ── */
.build-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:4px 10px;border-radius:20px;border:1px solid var(--border);background:var(--panel2);color:var(--muted);min-height:26px;line-height:1;white-space:nowrap;max-width:100%}
.build-chip .bc-ic{display:inline-flex;align-items:center;justify-content:center;width:1.2em;font-variant-emoji:text}
.build-chip .bc-tx{overflow:hidden;text-overflow:ellipsis}
.build-chip.building{border-color:#3a5a8a;color:#9bc1ff;background:#15203a}
.build-chip.building .bc-ic{animation:sbspin 1s linear infinite}
.build-chip.ok{border-color:#2d5a2d;color:#86efac;background:#13261c}
.build-chip.err{border-color:#5a2d2d;color:#fca5a5;background:#2a1515}
.build-chip.warn{border-color:#5a4a2d;color:#e0c070;background:#2a2115}
@keyframes sbspin{from{transform:rotate(0)}to{transform:rotate(360deg)}}
.tabs details{border:1px solid var(--border);border-radius:var(--radius);padding:8px 12px;margin-bottom:10px;background:var(--panel2)}
.tabs summary{cursor:pointer;font-weight:600;padding:4px 0}
.md-form{display:flex;flex-direction:column;gap:10px;margin-top:10px}
.upload-form{display:flex;gap:8px;margin:10px 0}
.filelist{margin:8px 0;padding-left:18px}

.xlsx-sheet{border:1px solid var(--border);border-radius:6px;padding:8px;margin:10px 0;background:var(--bg)}
.sheet-head{display:flex;gap:8px;align-items:center;margin-bottom:6px}
.sheet-head input{max-width:160px}
.table-wrap{overflow:auto}
table.grid{border-collapse:collapse;width:100%}
table.grid td{padding:2px;border:1px solid var(--border);position:relative}
table.grid td input{width:100%;border:none;background:transparent;padding:4px}
table.grid td input:focus{background:#1a2030;outline:1px solid var(--primary)}

.toast{padding:8px 12px;border-radius:6px;margin:6px 0;background:var(--panel2);border:1px solid var(--border)}
.toast.ok{border-color:var(--ok);color:#86efac}
.toast.err{border-color:var(--err);color:#fca5a5}
#toast-host,.toast-host{margin-top:8px}

/* ── Frontmatter ── */
.md-editor{margin-top:10px;display:flex;flex-direction:column;gap:10px}
.fm-head{display:flex;align-items:center;gap:8px}
.fm-head strong{flex:1}
.fm-rows{display:flex;flex-direction:column;gap:6px}
.fm-row{display:flex;gap:6px;align-items:center}
.fm-row .fm-key{max-width:180px;font-weight:600}
.fm-row .fm-val{flex:1}
.fm-row .fm-raw{flex:1;font-family:ui-monospace,Menlo,monospace;font-size:12px}

/* ── Теги (frontmatter tags: чипы-ссылки на папки) ── */
.fm-tags-row{width:100%}
.tags-block{position:relative;display:flex;flex-wrap:wrap;gap:6px;align-items:center;
  flex:1;border:1px solid var(--border);border-radius:6px;padding:5px 8px;background:var(--bg);cursor:text}
.tags-block:focus-within{border-color:var(--primary)}
.tag-chip{display:inline-flex;align-items:center;gap:5px;max-width:100%;
  background:var(--panel2);border:1px solid var(--border);border-radius:20px;
  padding:1px 4px 1px 10px;font-size:12px;line-height:1.6}
.tag-chip .tag-tx{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tag-chip .tag-x{border:none;background:none;color:var(--muted);cursor:pointer;
  font:inherit;font-size:11px;padding:0 5px;border-radius:50%}
.tag-chip .tag-x:hover{color:var(--err)}
.tag-chip.tag-implicit{border-style:dashed;color:var(--muted);padding-right:10px}
.tag-chip.tag-implicit::before{content:"📂 ";font-size:11px}
.tag-chip.tag-unknown{border-color:var(--err);border-style:dotted}
.tag-chip.tag-unknown .tag-tx{color:var(--err)}
.tag-input{flex:1;min-width:130px;border:none;background:none;padding:3px 2px;font-size:12px}
.tag-input:focus{outline:none;border:none}
.tag-dd{position:absolute;top:calc(100% + 4px);left:0;z-index:30;min-width:280px;max-width:100%;
  background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:0 8px 24px #000a;max-height:260px;overflow:auto}
.tag-opt{display:flex;justify-content:space-between;gap:12px;width:100%;text-align:left;
  border:none;background:none;border-radius:6px;padding:6px 10px;cursor:pointer}
.tag-opt:hover,.tag-opt.active{background:var(--panel2)}
.tag-opt-path{color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:55%}
.md-actions{display:flex;align-items:center;gap:12px}

/* ── XLSX grid ── */
.xlsx-tabs{display:flex;flex-direction:column;gap:10px;margin-top:8px}
.xlsx-sheet{border:1px solid var(--border);border-radius:6px;padding:8px;background:var(--bg)}
.sheet-head{display:flex;gap:8px;align-items:center;margin-bottom:6px;flex-wrap:wrap}
.sheet-head .sheet-name-text{font-weight:600;font-size:13px;color:var(--text)}
.sheet-head .sheet-name-input{max-width:200px;font-weight:600}
.sheet-head .grow{flex:1}
.table-wrap{overflow:auto;max-height:60vh}
table.sbgrid{border-collapse:collapse;user-select:none;width:auto}
table.sbgrid th,table.sbgrid td{border:1px solid var(--border);padding:0;font-weight:400;vertical-align:top}
table.sbgrid th.rh{background:var(--panel2);padding:2px;text-align:center;font-size:11px;color:var(--muted);position:sticky;left:0;z-index:2;min-width:24px}
table.sbgrid td{min-width:120px}
table.sbgrid td input{width:100%;border:none;background:transparent;padding:5px 6px;color:var(--text);font:inherit}
table.sbgrid td input:focus{background:#16203a;outline:1px solid var(--primary)}
table.sbgrid td.sel{background:#1d2b4d;outline:1px solid var(--primary)}
/* первая строка данных = заголовки */
table.sbgrid tbody tr:first-child td{background:#1b2330;font-weight:600}
table.sbgrid tbody tr:first-child td input{font-weight:600}
table.sbgrid tbody tr:first-child td.hidden-col{background:#3a2a1a}
table.sbgrid tbody tr:first-child td.hidden-col input{text-decoration:line-through}
table.sbgrid tbody tr:first-child td::after{content:"⚡";font-size:9px;opacity:.35;position:absolute;top:1px;right:2px;cursor:pointer}
.xlsx-tools{display:flex;gap:8px;margin-top:10px;align-items:center}

/* ── Медиа и Документация (разделённые) ── */
.media-panel,.docs-panel{display:flex;flex-direction:column;gap:14px}
.media-row,.docs-row{border:1px solid var(--border);border-radius:8px;padding:10px;background:var(--panel2)}
.media-row-head,.docs-row-head{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.media-row-head h3,.docs-row-head h3{margin:0;font-size:14px;color:var(--text);font-weight:600}
.media-row-head .count,.docs-row-head .count{font-size:11px}
.upload-form{margin-left:auto;display:inline-flex}
.upload-zone{display:inline-flex;align-items:center;gap:6px;border:1px dashed var(--border);border-radius:6px;padding:6px 12px;background:var(--bg);color:var(--muted);font-size:12px;cursor:pointer;white-space:nowrap;user-select:none}
.upload-zone:hover{border-color:var(--primary);color:var(--text)}
.upload-zone .uz-ic{font-variant-emoji:text}
.upload-zone .uz-tx{pointer-events:none}
.upload-zone input[type=file]{display:none}
.upload-zone.over,.upload-zone.over:hover{border-color:var(--primary);background:#15203a;color:#9bc1ff}
/* drop в любом месте подраздела — подсветка всей секции */
.media-row.drop-anywhere,.docs-row.drop-anywhere{border-color:var(--primary);background:#15203a;box-shadow:inset 0 0 0 1px var(--primary)}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-top:10px}
.gallery .thumb{border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--bg);position:relative}
.gallery .thumb img{width:100%;height:120px;object-fit:contain;display:block;background:#0006}
.gallery .thumb.drawing img{outline:2px solid #b68a2e;outline-offset:-2px}
.gallery .thumb .cap{font-size:11px;padding:4px 6px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gallery .thumb .tactions{display:flex;padding:4px 6px;justify-content:flex-end;gap:2px}
.gallery .thumb.drawing::after{content:"чертёж";position:absolute;top:4px;left:4px;background:#b68a2e;color:#000;font-size:10px;padding:1px 5px;border-radius:4px}
.img-size{position:absolute;top:4px;right:4px;background:#0009;color:#fff;font-size:10px;line-height:1.5;padding:1px 5px;border-radius:4px;pointer-events:none;max-width:calc(100% - 8px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ── Документация (список) ── */
.doclist{list-style:none;padding:0;margin:8px 0 0}
.doclist li{display:flex;align-items:center;gap:8px;padding:5px 4px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.doclist li:last-child{border-bottom:none}
.doclist li .doc-ic{flex-shrink:0}
.doclist li a{color:var(--primary);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.doclist li .doc-size{font-size:11px}
.doclist li .doc-actions{display:flex;gap:2px;opacity:0}
.doclist li:hover .doc-actions{opacity:1}
.media-panel h3{font-size:13px;margin:14px 0 6px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}

/* ── Toast с инфо о сборке ── */
.toast{display:flex;flex-direction:column;gap:6px}
.toast-msg{display:block}
.toast-build{margin-top:6px;padding-top:6px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:4px}
.toast-build .tb-row{display:flex;align-items:center;gap:5px;font-size:12px;flex-wrap:wrap}
.toast-build code{background:#0003;padding:1px 5px;border-radius:4px}
.tb-hint{font-size:11px;margin-top:2px}

/* ── EasyMDE тёмная тема ── */
.EasyMDEContainer{--bg:#0f1115}
.EasyMDEContainer .editor-toolbar{background:var(--panel2);border-color:var(--border)}
.EasyMDEContainer .editor-toolbar button,.EasyMDEContainer .editor-toolbar .separator{color:var(--muted)}
.EasyMDEContainer .editor-toolbar button.active,.EasyMDEContainer .editor-toolbar button:hover{background:#15203a;color:var(--text);border-color:var(--border)}
.EasyMDEContainer .CodeMirror{background:var(--bg);color:var(--text);border-color:var(--border);min-height:240px;border-radius:0 0 6px 6px}
.EasyMDEContainer .CodeMirror .CodeMirror-cursor{border-left-color:var(--text)}
.EasyMDEContainer .editor-preview{background:var(--panel);color:var(--text)}
.EasyMDEContainer .editor-preview pre,.EasyMDEContainer .editor-preview code{background:#0003}
.editor-preview-full.editor-preview,.editor-preview-side.editor-preview{color:var(--text)}

/* ── Кнопки/формы (унификация) ── */
.btn{font:inherit;border:1px solid var(--border);background:var(--panel2);color:var(--text);
     padding:6px 12px;border-radius:var(--radius);cursor:pointer;text-decoration:none;display:inline-block}
.btn:hover{border-color:#3a4456;color:var(--text)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.primary:hover{background:var(--primary-h)}
.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}
.btn.ghost{background:transparent}
.small{font-size:12px}
.warn{color:#fbbf24}

/* ── Админка: пользователи ── */
.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.users-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:8px 0 12px}
.users-table{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.users-table th,.users-table td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--border);vertical-align:middle}
.users-table thead th{background:var(--panel2);font-size:12px;color:var(--muted);font-weight:600}
.users-table tbody tr:last-child td{border-bottom:none}
.users-table .row-actions{display:flex;gap:6px;justify-content:flex-end;white-space:nowrap}
.badge.admin{color:#fbbf24;border-color:#5a4a1d;background:#3a2e0e}
.chip{display:inline-block;margin:1px 2px;font-size:11px}
.user-form{margin-top:16px}
.user-form h3{margin:0 0 12px;font-size:16px}
.user-form form{display:flex;flex-direction:column;gap:12px}
.user-form .check{flex-direction:row;align-items:center;gap:8px;color:var(--text)}
.user-form .brands-fieldset{border:1px solid var(--border);border-radius:6px;padding:10px}
.user-form .brands-fieldset legend{font-size:12px;color:var(--muted);padding:0 6px}
.brands-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px;margin-top:6px}
.chip-check{flex-direction:row;align-items:center;gap:6px;background:var(--panel2);padding:4px 8px;border-radius:6px;border:1px solid var(--border);font-size:13px;color:var(--text);cursor:pointer}
.chip-check:hover{border-color:#3a4456}
.form-actions{display:flex;gap:8px;margin-top:4px}

/* htmx toast (глобальные уведомления из HX-Trigger) */
#global-toast{position:fixed;bottom:16px;right:16px;z-index:1000;max-width:360px}
#global-toast .toast{box-shadow:0 4px 16px #0008}

/* ── Виджет статуса загрузки (левый нижний угол, фиксированный) ── */
.upload-status{position:fixed;bottom:16px;left:16px;z-index:1100;min-width:300px;max-width:380px;
  background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:14px 16px;
  box-shadow:0 10px 28px #000c;font-size:14px;color:var(--text)}
.upload-status[hidden]{display:none}
.upload-status .us-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.upload-status .us-title{flex:1;font-weight:600;font-size:15px;line-height:1.2}
.upload-status .us-pct{font-variant-numeric:tabular-nums;color:var(--muted);font-weight:700;font-size:13px}
.upload-status .us-spinner{flex-shrink:0;width:16px;height:16px;border:2px solid var(--border);
  border-top-color:var(--primary);border-radius:50%;animation:sbspin 1s linear infinite}
.upload-status .us-bar{height:8px;background:var(--panel2);border-radius:6px;overflow:hidden;border:1px solid var(--border)}
.upload-status .us-fill{height:100%;width:0;background:linear-gradient(90deg,var(--primary),#7db1ff);transition:width .3s ease}
.upload-status .us-sub{margin-top:8px;font-size:12px;color:var(--muted)}
.upload-status.ok .us-fill{background:var(--ok)}
.upload-status.ok .us-spinner{border-top-color:var(--ok);animation:none}
.upload-status.err .us-fill{background:var(--err)}
.upload-status.err .us-title{color:#fca5a5}
.upload-status.err .us-spinner{border-top-color:var(--err);animation:none}

/* ── Блок «Собранные сайты» в настройках бренда ── */
.bs-dist{border:1px solid var(--border);border-radius:8px;padding:10px;margin:10px 0;background:var(--bg)}
.bs-dist-head{margin-bottom:8px}
.bs-dist-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 0;border-top:1px solid var(--border);flex-wrap:wrap}
.bs-dist-row:first-of-type{border-top:none}
.bs-dist-main{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
.bs-dist-env{font-weight:700;font-size:12px;color:#9bc1ff;background:#15203a;border:1px solid #3a5a8a;padding:1px 7px;border-radius:5px;letter-spacing:.03em}
.bs-dist-path{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:240px}
.bs-dist-actions{display:flex;gap:6px;flex-shrink:0}

/* ── Структура контента (медиа-папки + категории) в настройках бренда ── */
.bs-structure{border:1px solid var(--border);border-radius:8px;padding:10px;margin:10px 0;background:var(--bg)}
.cv-form{display:flex;flex-direction:column;gap:12px;margin-top:8px}
.cv-block{display:flex;flex-direction:column;gap:6px}
.cv-block-title{font-size:12px;color:var(--muted)}
.cv-rows{display:flex;flex-direction:column;gap:6px}
.cv-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cv-ord{display:flex;gap:2px;flex-shrink:0}
.cv-row>input{flex:1;min-width:110px}
.cv-row>input[data-name="slot_label"]{flex:1.2}
.cv-chk{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--muted);white-space:nowrap;cursor:pointer}
.cv-add{align-self:flex-start}

/* ── Заголовок редактора: крошки слева, время изменения справа ── */
.edit-title{display:flex;justify-content:space-between;align-items:baseline;gap:12px;min-width:0;flex:1}
.edit-title .crumbs{flex:0 1 auto}
.edit-title .folder-mtime{flex-shrink:0}

/* ── Секции редактора (Описание/Таблицы): заголовок + «Изменено» и ⓘ справа ── */
.sec-summary{display:flex;align-items:center;gap:10px;min-width:0}
.sec-summary .sec-title{flex:0 1 auto}
.sec-summary .sec-meta{margin-left:auto;display:inline-flex;align-items:center;gap:8px;min-width:0}
.sec-summary .sec-changed{font-weight:400;font-size:11px;white-space:nowrap}
.sec-info{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;
  border:1px solid var(--border);border-radius:50%;font-size:11px;font-style:italic;font-weight:600;
  color:var(--muted);background:var(--bg);cursor:help;text-decoration:none;flex-shrink:0;line-height:1}
a.sec-info{cursor:pointer}
a.sec-info:hover{border-color:var(--primary);color:var(--primary-h);text-decoration:none}

/* бейдж типа папки в дереве */
.badge-type{color:#c4b5fd;border-color:#4c3a6a;background:#221a33;font-variant-emoji:text}

/* Каталог Excel (секция настроек проекта) */
.ce-panel{display:flex;flex-direction:column;gap:8px}
.ce-hint{margin:0;line-height:1.45}
.ce-hint code{background:#0003;padding:1px 4px;border-radius:4px}
.ce-note{margin:0;color:#9bc1ff;font-size:12px}
.ce-json{width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;line-height:1.4;min-height:180px;resize:vertical;white-space:pre;overflow:auto}
.ce-panel .bs-actions{flex-wrap:wrap}
.ce-spin{font-size:12px;color:var(--muted)}
.ce-result{border-top:1px solid var(--border);padding-top:8px;display:flex;flex-direction:column;gap:8px}
.ce-result-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.ce-warn summary{cursor:pointer;color:var(--muted);font-size:12px}
.ce-warn ul{margin:6px 0 0;padding-left:18px;font-size:12px;color:#fca5a5;max-height:180px;overflow:auto}


/* ── Карточный просмотр подпапок (browse) ── */
.cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;margin-top:14px}
.folder-card{position:relative;border:1px solid var(--border);border-radius:10px;background:var(--panel2);overflow:hidden;transition:border-color .12s,box-shadow .12s}
.folder-card:hover{border-color:var(--primary);box-shadow:0 4px 14px #0006}
.folder-card .card-link{display:flex;flex-direction:column;height:100%;color:var(--text);cursor:pointer}
.card-thumb{display:flex;align-items:center;justify-content:center;aspect-ratio:1/1;background:var(--bg);overflow:hidden;border-bottom:1px solid var(--border);position:relative}
.card-thumb img{width:100%;height:100%;object-fit:contain;display:block}
.card-placeholder{font-size:44px;opacity:.45;font-variant-emoji:text;line-height:1;user-select:none}
.card-name{display:block;padding:8px 10px 2px;font-size:13px;font-weight:600;line-height:1.3;overflow-wrap:break-word}
.folder-card .card-link:hover .card-name{color:var(--primary)}
.card-badges{display:flex;gap:4px;padding:4px 10px 9px;min-height:22px}
.folder-card .card-edit{position:absolute;top:6px;right:6px;opacity:0;background:var(--panel);border-color:var(--border);font-size:13px}
.folder-card:hover .card-edit{opacity:1}
.folder-card .card-edit:hover{color:var(--primary)}


/* ── Даты изменения (mtime) ── */
.tree-date{font-size:10px;color:var(--muted);opacity:.7;white-space:nowrap;padding-right:2px}
.tree-row:hover .tree-date{opacity:1}
.folder-mtime{font-size:12px;white-space:nowrap}
.cap-date{font-size:10px;padding:0 6px 4px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.doc-date{font-size:11px}
.card-date{display:block;padding:0 10px 8px;font-size:11px}

/* ── Журнал действий (audit log) ── */
.jrn-panel{display:flex;flex-direction:column;gap:8px}
.jrn-filter{display:flex;gap:6px;flex-wrap:wrap}
.jrn-filter input{flex:1;min-width:120px}
.jrn-table-wrap{max-height:46vh;overflow:auto;border-radius:var(--radius)}
.jrn-table td,.jrn-table th{padding:5px 10px;font-size:12px}
.jrn-table .jrn-ts{white-space:nowrap;color:var(--muted)}
.jrn-table .jrn-path{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jrn-pager{display:flex;align-items:center;gap:8px}

/* ── Undo-тост удаления (30 сек + кнопка «Отменить») ── */
#global-toast .toast-undo{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:280px}
.toast-undo .undo-right{display:flex;align-items:center;gap:8px;flex-shrink:0}
.toast-undo .undo-count{font-size:11px;min-width:34px;text-align:right;font-variant-numeric:tabular-nums}

/* ── Корзина ── */
.trash-panel{display:flex;flex-direction:column;gap:6px}
.trash-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.trash-item{display:flex;align-items:center;gap:8px;padding:6px 2px;border-top:1px solid var(--border);flex-wrap:wrap}
.trash-item:first-child{border-top:none}
.trash-item .ti-ic{flex-shrink:0;font-variant-emoji:text}
.trash-item .ti-main{flex:1;min-width:120px;overflow:hidden}
.trash-item .ti-name{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.trash-item .ti-name code{font-size:11px}
.trash-item .ti-left{flex-shrink:0;min-width:86px;text-align:right}
.trash-item .ti-actions{display:flex;gap:4px;flex-shrink:0}
.trash-foot{display:flex;justify-content:flex-end;padding-top:8px;margin-top:4px;border-top:1px solid var(--border)}

/* ── Админ: бэкапы контента ── */
.ab-card{margin-bottom:14px}
.ab-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.ab-head strong{font-size:15px}
.ab-head-actions{display:flex;gap:6px;margin-left:auto;flex-wrap:wrap;align-items:center}
.ab-upload-label{cursor:pointer;position:relative;overflow:hidden}
.ab-table .ab-name{font-size:11px}
.ab-table .badge.ab-s3{color:#9bc1ff;border-color:#2d4a6a}
.ab-status{position:fixed;bottom:14px;right:14px;z-index:900;min-width:300px;max-width:420px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;box-shadow:0 10px 30px #000a;display:flex;flex-direction:column;gap:4px}
.ab-status-label{font-size:13px;font-weight:600}
.ab-status-sub{font-size:11px}
.ab-progress{height:5px;border-radius:3px;background:var(--bg);overflow:hidden}
.ab-progress-bar{height:100%;width:0;background:var(--primary);transition:width .4s ease}

/* --- drag-сортировка (sortdnd.js): долгое нажатие → перетаскивание --- */
body.drag-sort{cursor:grabbing}
body.drag-sort *{cursor:grabbing!important;user-select:none!important;-webkit-user-select:none!important}
.tree-row,.folder-card{-webkit-touch-callout:none}
.card-thumb img{-webkit-user-drag:none;user-drag:none}
#tree-root .tree-node.dragging > .tree-row{opacity:.45;background:#15203a;box-shadow:inset 0 0 0 1px var(--primary)}
.folder-card.dragging{opacity:.45;border-color:var(--primary)}
#tree-root .tree-node.drop-before > .tree-row{box-shadow:inset 0 2px 0 var(--primary)}
#tree-root .tree-node.drop-after > .tree-row{box-shadow:inset 0 -2px 0 var(--primary)}
.folder-card.drop-before{box-shadow:0 -3px 0 0 var(--primary), 0 4px 14px #0006}
.folder-card.drop-after{box-shadow:0 3px 0 0 var(--primary), 0 4px 14px #0006}

/* ── Виджеты полей (field-widgets.js): полоса чипов + модалка иконок ── */
.fw-host{display:flex;flex-direction:column;gap:6px;margin:8px 0}
.fw-host[hidden]{display:none}
.fw-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  background:var(--panel2);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px}
.fw-label{font-size:12px;color:var(--muted);flex-shrink:0}
.fw-chips{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.fw-chip{display:inline-flex;align-items:center;justify-content:center;
  min-width:30px;height:30px;padding:0 6px;border-radius:6px;cursor:pointer;
  background:var(--bg);border:1px solid var(--border);color:var(--text);font:inherit}
.fw-chip:hover{border-color:var(--err)}
.fw-chip .fw-glyph{font-size:18px;line-height:1}
.fw-chip.fw-unknown{border-style:dotted;color:var(--muted)}
.fw-add{flex-shrink:0}
.fw-overlay{position:fixed;inset:0;z-index:1200;background:#000a;
  display:flex;align-items:center;justify-content:center;padding:20px}
.fw-modal{width:min(720px,94vw);max-height:86vh;display:flex;flex-direction:column;
  background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:0 16px 50px #000c}
.fw-modal-head{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--border)}
.fw-modal-head strong{flex-shrink:0}
.fw-search{flex:1;max-width:320px;padding:6px 10px}
.fw-modal-body{overflow:auto;padding:12px 14px;flex:1}
.fw-modal-foot{display:flex;align-items:center;gap:8px;padding:12px 14px;border-top:1px solid var(--border)}
.fw-modal-foot .grow{flex:1}
.fw-group{margin-bottom:14px}
.fw-group-title{font-size:12px;color:var(--muted);margin-bottom:8px;text-transform:uppercase;letter-spacing:.4px}
.fw-group .fw-item{display:inline-flex;flex-direction:column;align-items:center;gap:6px;
  width:104px;margin:0 6px 8px 0;padding:10px 6px;border-radius:8px;cursor:pointer;
  background:var(--bg);border:1px solid var(--border);color:var(--text);font:inherit;
  vertical-align:top;text-align:center}
.fw-group .fw-item:hover{border-color:var(--primary)}
.fw-group .fw-item.on{border-color:var(--primary);background:#15203a;box-shadow:inset 0 0 0 1px var(--primary)}
.fw-item .fw-glyph{font-size:26px;line-height:1;color:var(--text)}
.fw-item .fw-name{font-size:11px;color:var(--muted);line-height:1.25;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
  word-break:break-word}
.fw-item.on .fw-name{color:var(--text)}

/* ── Пикер медиа в md-редакторе (кнопка «изображение») + drop в текст ── */
.sb-pick-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px}
.sb-pick-item{display:flex;flex-direction:column;align-items:center;gap:4px;
  padding:6px;border-radius:8px;background:var(--bg);border:1px solid var(--border);
  cursor:pointer;color:var(--text);font:inherit;min-width:0}
.sb-pick-item:hover{border-color:var(--primary)}
.sb-pick-item img{width:100%;height:78px;object-fit:contain;display:block;background:#0006;border-radius:4px}
.sb-pick-item .sb-pick-icon{font-size:30px;line-height:78px}
.sb-pick-cap{font-size:10px;color:var(--muted);max-width:100%;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-pick-item:hover .sb-pick-cap{color:var(--text)}
.sb-picker-path{flex:1;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* подсветка редактора при drag&drop файлов/медиа */
.CodeMirror.sb-drop{outline:2px dashed var(--primary);outline-offset:-4px;background:#15203a22}

/* ── Особенности (badges): полоса чипов в редакторе + вкладка справочника ── */
.fw-badges-bar{margin:0 0 8px}
.fw-badge-chip img{width:22px;height:22px;object-fit:contain;display:block}
.fw-badge-chip .fw-badge-title{font-size:12px;white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}
.fw-badge-chip.fw-unknown{font-size:12px}
.fw-badge-chip.fw-alias{border-style:dashed}
.fw-badge-noicon{font-size:16px;line-height:1;color:var(--muted)}
.fw-badge-item .fw-badge-img{width:30px;height:30px;object-fit:contain}
.fw-badge-placeholder{display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;font-size:20px;color:var(--muted);
  border:1px dotted var(--border);border-radius:6px}
.bdg-row{align-items:flex-start}
.bdg-icon{flex-shrink:0;width:46px;height:46px;display:flex;align-items:center;justify-content:center;
  background:var(--bg);border:1px solid var(--border);border-radius:8px;cursor:pointer;overflow:hidden}
.bdg-icon:hover{border-color:var(--primary)}
.bdg-icon img{width:100%;height:100%;object-fit:contain;pointer-events:none}
.bdg-icon .bdg-noicon{color:var(--muted);font-size:18px;pointer-events:none}
.bdg-fields{flex:1;min-width:220px;display:flex;flex-direction:column;gap:6px}
.bdg-fields>input{width:100%}
.bdg-meta{display:flex;gap:6px;flex-wrap:wrap}
.bdg-meta .bdg-key{flex:0 0 180px;font-size:12px;color:var(--muted)}
.bdg-meta input[data-name="badge_aliases"]{flex:1;min-width:160px;font-size:12px}

/* ── Каталог-синк (секция настроек проекта, _catalog_sync.html) ── */
.sync-panel{display:flex;flex-direction:column;gap:10px}
.sync-err{color:var(--err);margin:0}
.sync-warn{margin:4px 0 0;color:#c9821e;font-size:13px}
.sync-status{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sync-chip{display:inline-block;padding:2px 10px;border-radius:999px;
  background:var(--bg);border:1px solid var(--border);font-size:12px}
.sync-chip-off{color:var(--muted);border-style:dashed}
.sync-chip-applied{border-color:var(--primary);color:var(--primary)}
.sync-mini-chip{display:inline-block;margin-left:6px;padding:0 6px;border-radius:999px;
  font-size:10px;border:1px solid var(--border);color:var(--muted)}
.sync-actions{flex-wrap:wrap}
.sync-progress{border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px}
.sync-progress-label{display:flex;gap:8px;align-items:baseline;margin-bottom:6px}
.sync-progress-track{height:6px;border-radius:4px;background:var(--bg);overflow:hidden}
.sync-progress-bar{height:100%;width:0;background:var(--primary);transition:width .4s}
/* плавающая карточка прогресса/результата синка (контекстное меню дерева) */
.sync-float{position:fixed;right:16px;bottom:16px;z-index:1000;width:340px;max-width:calc(100vw - 32px);
  background:var(--panel,#fff);box-shadow:0 6px 24px rgba(0,0,0,.18);margin:0}
.sync-float .sync-progress-label{align-items:center}
.sync-float-title{font-weight:600;font-size:13px}
.sync-spin{width:12px;height:12px;flex:0 0 12px;border-radius:50%;
  border:2px solid var(--border);border-top-color:var(--primary);
  animation:sync-spin .8s linear infinite}
@keyframes sync-spin{to{transform:rotate(360deg)}}
.sync-float.sync-result{padding:10px 12px}
.sync-result-msg{font-size:13px;margin-bottom:8px;word-break:break-word}
/* уведомление о scope-сверке в панели */
.sync-scope-note{display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  border:1px dashed var(--border);border-radius:var(--radius);padding:6px 10px;margin:6px 0;
  font-size:12.5px;background:var(--bg)}
.sync-summary{margin:2px 0}
.sync-summary a{margin-left:2px}
.sync-table{width:100%;border-collapse:collapse;font-size:13px}
.sync-table th,.sync-table td{padding:6px 8px;border-bottom:1px solid var(--border);
  text-align:left;vertical-align:top}
.sync-table th{color:var(--muted);font-weight:600;font-size:12px}
.sync-col-sel{width:26px}
.sync-col-status{width:90px;white-space:nowrap}
.sync-col-path{max-width:280px}
.sync-path{word-break:break-word}
.sync-codes{word-break:break-all}
.sync-badge{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;
  border:1px solid var(--border)}
.sync-badge-ok{color:#3d9a50;border-color:#3d9a5055}
.sync-badge-changed{color:var(--primary);border-color:var(--primary)}
.sync-badge-likely{color:#c9821e;border-color:#c9821e66}
.sync-badge-unmatched{color:var(--err);border-color:var(--err)}
.sync-issue{color:var(--muted)}
.sync-confirm{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.sync-cand-select{max-width:230px;font-size:12px;padding:3px 6px}
.sync-pager{display:flex;gap:10px;align-items:center}
.sync-config summary{cursor:pointer;margin:6px 0}

/* ── Бейдж «↻ синк» (дерево/редактор, обновлённые каталог-синком товары) ── */
.badge-sync{color:#fbbf24;border-color:#5a4a1d;background:#3a2e0e;cursor:help;white-space:nowrap}
.edit-title .badge-sync{margin-left:8px;vertical-align:middle}
