:root{--bg:#f5f6f8;--surface:#fff;--surface-2:#f0f2f5;--border:#dde1e7;--text:#1b1f24;--muted:#667085;--primary:#1d4ed8;--primary-hover:#1e40af;--primary-text:#fff;--danger:#c0262d;--ok:#157f3c;--ok-bg:#e6f4ea;--warn:#9a6200;--warn-bg:#fff4dc;--error-bg:#fde8e8;--info:#1d4ed8;--info-bg:#e5edff;--radius:8px;--shadow:0 1px 2px #1018280f, 0 1px 3px #1018281a;--mono:ui-monospace, "JetBrains Mono", "SFMono-Regular", Menlo, Consolas, monospace;color:var(--text);background:var(--bg);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px}@media (prefers-color-scheme:dark){:root{--bg:#0f1216;--surface:#171b21;--surface-2:#1e232b;--border:#2b323c;--text:#e6e9ee;--muted:#8b95a5;--primary:#3b82f6;--primary-hover:#2563eb;--danger:#ef4444;--ok:#4ade80;--ok-bg:#12301d;--warn:#fbbf24;--warn-bg:#33270b;--error-bg:#3a1515;--info:#93b4ff;--info-bg:#172447;--shadow:none}}*{box-sizing:border-box}body{background:var(--bg);margin:0}h1{margin:0;font-size:20px}h2{margin:0 0 12px;font-size:17px}h3{margin:18px 0 8px;font-size:15px}code,.mono{font-family:var(--mono);font-size:12.5px}.muted{color:var(--muted)}.small{font-size:12px}.warn-text{color:var(--warn)}.error-text{color:var(--danger)}.grow{flex:1}.app{min-height:100vh}.topbar{z-index:10;background:var(--surface);border-bottom:1px solid var(--border);align-items:center;gap:24px;height:52px;padding:0 20px;display:flex;position:sticky;top:0}.brand{white-space:nowrap;align-items:center;gap:8px;font-weight:700;display:flex}.brand.big{justify-content:center;margin-bottom:8px;font-size:20px}.topbar nav{flex:1;gap:2px;display:flex;overflow-x:auto}.topbar nav a{color:var(--muted);white-space:nowrap;border-radius:6px;padding:8px 12px;font-weight:500;text-decoration:none}.topbar nav a:hover{background:var(--surface-2);color:var(--text)}.topbar nav a.active{color:var(--primary);background:var(--info-bg)}.user{white-space:nowrap;align-items:center;gap:10px;display:flex}main{max-width:none;margin:0;padding:16px 24px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.row{flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0;display:flex}.row.end{justify-content:flex-end}.toolbar{gap:8px;margin-bottom:12px;display:flex}.toolbar.filters{flex-wrap:wrap;align-items:center}.toolbar.filters select{width:auto;max-width:240px}.tech-checks{gap:12px;padding:0 4px;display:flex}.tech-checks label.check{white-space:nowrap;gap:5px;margin:0}.filters-total{margin-left:auto}.grid2{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:0 16px;display:grid}.split{grid-template-columns:repeat(auto-fit,minmax(420px,1fr));align-items:start;gap:0 24px;display:grid}.cards{grid-template-columns:repeat(auto-fit,minmax(420px,1fr));align-items:start;gap:16px;display:grid}.cards>.card{margin-bottom:0}@media (max-width:700px){.grid2{grid-template-columns:1fr}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:16px;padding:16px 18px}.card h3:first-child{margin-top:0}.with-side{grid-template-columns:200px 1fr;gap:24px;display:grid}.side{flex-direction:column;gap:2px;display:flex}.side h1{margin-bottom:12px}.side a{color:var(--text);border-radius:6px;padding:8px 10px;text-decoration:none}.side a:hover{background:var(--surface-2)}.side a.active{background:var(--info-bg);color:var(--primary);font-weight:600}.side-content{min-width:0}@media (max-width:800px){.with-side{grid-template-columns:1fr}}button{font:inherit;border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:6px 12px;display:inline-flex}button:hover:not(:disabled){background:var(--surface-2)}button:disabled{opacity:.55;cursor:not-allowed}button.primary{background:var(--primary);border-color:var(--primary);color:var(--primary-text)}button.primary:hover:not(:disabled){background:var(--primary-hover)}button.danger{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 40%, var(--border))}.modal-foot button.danger,.row.end button.danger{background:var(--danger);color:#fff;border-color:var(--danger)}button.link{color:var(--primary);background:0 0;border:0;padding:4px}button.icon{background:0 0;border:0;padding:0 6px;font-size:22px;line-height:1}input,select,textarea{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:6px;width:100%;padding:7px 10px}input:focus,select:focus,textarea:focus,button:focus-visible{outline:2px solid color-mix(in srgb, var(--primary) 50%, transparent);outline-offset:0;border-color:var(--primary)}input[type=checkbox]{width:auto}textarea.code{font-family:var(--mono);resize:vertical;font-size:13px;line-height:1.5}input.search{max-width:640px;padding:9px 12px}fieldset{border:0;margin:0;padding:0}.field{flex-direction:column;gap:4px;margin-bottom:12px;display:flex}.field-label{font-size:12.5px;font-weight:600}.field-hint{color:var(--muted);font-size:12px}label.check{align-items:center;gap:8px;margin:8px 0 12px;display:flex}.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow-x:auto}table{border-collapse:collapse;background:var(--surface);width:100%}.side-content>table,section>table{border:1px solid var(--border);border-radius:var(--radius)}th,td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:9px 12px}th{text-transform:uppercase;letter-spacing:.02em;color:var(--muted);background:var(--surface-2);white-space:nowrap;font-size:12px;font-weight:600}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:color-mix(in srgb, var(--surface-2) 60%, transparent)}table.clickable tbody tr{cursor:pointer}table.compact th,table.compact td{padding:5px 10px}tr.disabled td{opacity:.6}td.actions{text-align:right;white-space:nowrap}td.actions button+button{margin-left:6px}td.details{word-break:break-all;max-width:420px}.tabs{border-bottom:1px solid var(--border);gap:4px;margin-bottom:12px;display:flex;overflow-x:auto}.tabs button{color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;padding:8px 14px;font-weight:500}.tabs button.active{color:var(--primary);border-bottom-color:var(--primary)}.count{background:var(--danger);color:#fff;text-align:center;border-radius:10px;min-width:20px;margin-left:6px;padding:0 6px;font-size:11px;font-weight:700;line-height:18px;display:inline-block}.tabs .count{background:var(--primary)}.badge{background:var(--surface-2);color:var(--muted);white-space:nowrap;border-radius:10px;padding:1px 8px;font-size:11.5px;font-weight:600;display:inline-block}.badge.ok{background:var(--ok-bg);color:var(--ok)}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.error{background:var(--error-bg);color:var(--danger)}.badge.info{background:var(--info-bg);color:var(--info)}.alert{white-space:pre-line;border:1px solid #0000;border-radius:6px;margin:10px 0;padding:10px 12px}.alert.error{background:var(--error-bg);color:var(--danger)}.alert.warn{background:var(--warn-bg);color:var(--warn)}.alert.ok{background:var(--ok-bg);color:var(--ok)}.empty{text-align:center;color:var(--muted);justify-content:center;align-items:center;gap:8px;padding:40px;display:flex}.spinner{vertical-align:middle;border:2px solid;border-right-color:#0000;border-radius:50%;width:14px;height:14px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.pagination{justify-content:flex-end;align-items:center;gap:8px;padding:12px 0;display:flex}.pagination .muted{margin-right:auto}.kv{grid-template-columns:repeat(auto-fill,minmax(110px,max-content) minmax(230px,1fr));gap:6px 16px;margin-bottom:12px;display:grid}.kv>span{color:var(--muted)}.kv>b{font-weight:500}ul.plain{padding-left:18px}pre{margin:0}pre.script-preview,pre.secret{background:var(--surface-2);border:1px solid var(--border);font-family:var(--mono);border-radius:6px;padding:10px 12px;font-size:12.5px;overflow-x:auto}pre.secret{-webkit-user-select:all;user-select:all;word-break:break-all;white-space:pre-wrap;font-size:15px}pre.wrap{white-space:pre-wrap;word-break:break-all}.cmdlog details{border:1px solid var(--border);background:var(--surface);border-radius:6px;margin-bottom:6px}.cmdlog summary{cursor:pointer;padding:6px 10px}.cmdlog summary.ok .mark{color:var(--ok)}.cmdlog summary.fail{color:var(--danger)}.cmdlog pre{border-top:1px solid var(--border);font-family:var(--mono);background:var(--surface-2);max-height:260px;padding:8px 10px;font-size:12px;overflow:auto}.vars{flex-wrap:wrap;gap:6px;margin-bottom:8px;display:flex}.vars .var{font-family:var(--mono);flex-direction:column;align-items:flex-start;gap:0;padding:3px 8px;font-size:12px}.vars .var span{color:var(--muted);white-space:normal;text-align:left;font-family:Inter,system-ui,sans-serif;font-size:11px}.scopes{grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:4px 16px;display:grid}.scopes label{align-items:baseline;gap:8px;padding:3px 0;display:flex}.scopes code{min-width:130px}.modal-backdrop{z-index:100;background:#00000073;justify-content:center;align-items:flex-start;padding:6vh 16px;display:flex;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--surface);border:1px solid var(--border);border-radius:10px;width:100%;max-width:640px;box-shadow:0 20px 50px #0000004d}.modal.wide{max-width:min(1280px,96vw)}.modal-backdrop{padding-top:4vh}.modal-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:14px 18px;display:flex}.modal-head h2{margin:0}.modal-body{padding:16px 18px}.modal-foot{border-top:1px solid var(--border);justify-content:flex-end;gap:8px;padding:12px 18px;display:flex}.login-wrap{justify-content:center;align-items:center;min-height:100vh;padding:16px;display:flex}.card.login,form.login{background:var(--surface);border:1px solid var(--border);width:100%;max-width:380px;box-shadow:var(--shadow);border-radius:10px;padding:24px}form.login button.primary{justify-content:center;width:100%;padding:9px}.toasts{z-index:200;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:16px;right:16px}.toast{background:var(--surface);border:1px solid var(--border);border-radius:8px;max-width:420px;padding:10px 14px;box-shadow:0 8px 24px #0000002e}.toast.ok{border-left:4px solid var(--ok)}.toast.error{border-left:4px solid var(--danger)}.toast.info{border-left:4px solid var(--primary)}td.mono,td.nowrap{white-space:nowrap}ul.conflicts{margin:6px 0;padding:0;list-style:none}ul.conflicts li{justify-content:space-between;align-items:center;gap:12px;padding:4px 0;display:flex}.alert button.danger.small-btn{background:var(--surface);padding:3px 10px}.ok-text{color:var(--ok)}details.unauth-log summary{cursor:pointer;margin:6px 0}.prohibited{background:var(--danger);color:#fff;white-space:nowrap;border-radius:6px;padding:4px 10px;font-size:12.5px;font-weight:700;display:inline-block}.alert.prohibited-alert{background:var(--danger);color:#fff}.live-dot{background:var(--muted);border-radius:50%;width:9px;height:9px;display:inline-block}.live-dot.on{background:var(--ok);box-shadow:0 0 0 0 color-mix(in srgb, var(--ok) 60%, transparent);animation:2s infinite live-pulse}@keyframes live-pulse{70%{box-shadow:0 0 0 7px #0000}}select.inline-select{width:auto;padding:2px 6px}.matchbox{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-2);flex-direction:column;gap:8px;min-height:80px;max-height:420px;padding:10px;display:flex;overflow-y:auto}.matchbox-brand{background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:8px 10px}.matchbox-head{align-items:center;gap:10px;margin-bottom:6px;display:flex}.matchbox-head .danger-link{color:var(--danger);margin-left:auto}.matchbox-models{flex-wrap:wrap;gap:6px;display:flex}label.chip{border:1px solid var(--border);cursor:pointer;border-radius:14px;align-items:center;gap:5px;padding:3px 9px;font-size:12.5px;display:inline-flex}label.chip.on{background:var(--info-bg);border-color:var(--primary);color:var(--primary)}details.cfg-block{border:1px solid var(--border);background:var(--surface);border-radius:6px;margin-bottom:6px}details.cfg-block summary{cursor:pointer;padding:7px 10px}table.kvtable td:first-child{width:40%}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}th.sortable:hover{color:var(--text)}th.sorted{color:var(--primary)}.sort-ind{opacity:.45;margin-left:5px;font-size:10px}th.sorted .sort-ind{opacity:1}button.small-btn{padding:2px 8px;font-size:12px}tr.subrow td{border-top:0;padding-top:0}.session{flex-wrap:wrap;align-items:center;gap:4px 18px;display:flex}.perm-grid{gap:2px;display:grid}.perm-row{border-radius:6px;grid-template-columns:minmax(220px,280px) 150px 1fr;align-items:center;gap:12px;padding:6px 8px;display:grid}.perm-row.on{background:var(--surface-2)}.perm-row label.check{margin:0}.perm-row select{width:100%}@media (max-width:720px){.perm-row{grid-template-columns:1fr 140px}.perm-row>span:last-child{grid-column:1/-1}}.perm-summary{flex-wrap:wrap;gap:4px;display:inline-flex}.perm-chip{border:1px solid var(--border);white-space:nowrap;border-radius:999px;padding:1px 8px}.perm-chip.editor b{color:var(--primary)}.check-col{width:32px}tr.selected td{background:var(--info-bg)}.bulk-table{max-height:50vh;overflow:auto}.progress{background:var(--surface-2);border-radius:3px;height:6px;margin:6px 0 10px;overflow:hidden}.progress>div{background:var(--primary);height:100%;transition:width .3s}.board-map{flex-wrap:wrap;gap:8px 16px;display:flex}.board-map label{align-items:center;gap:4px;display:flex}.picker{position:relative}.picker>summary{cursor:pointer;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);white-space:nowrap;padding:7px 28px 7px 10px;list-style:none;position:relative}.picker>summary::-webkit-details-marker{display:none}.picker>summary:after{content:"▾";color:var(--muted);position:absolute;right:10px}.picker-menu{z-index:20;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);min-width:240px;max-height:320px;box-shadow:var(--shadow);padding:6px 10px;position:absolute;top:calc(100% + 4px);left:0;overflow:auto}.picker-menu label.check{white-space:nowrap;margin:4px 0}
