:root{--accent:#3b82f6;--accent-dark:#2563eb;--sidebar-bg:#1e293b;--sidebar-fg:#cbd5e1;--sidebar-active:#334155;--bg:#f1f5f9;--card:#fff;--border:#e2e8f0;--text:#0f172a;--muted:#64748b;--danger:#ef4444;--radius:10px}*{box-sizing:border-box;margin:0;padding:0}body{color:var(--text);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.5}.layout{min-height:100vh;display:flex}.loading{min-height:100vh;color:var(--muted);place-items:center;display:grid}.sidebar{background:var(--sidebar-bg);width:220px;color:var(--sidebar-fg);flex-direction:column;padding:1rem 0;display:flex}.sidebar .brand{color:#fff;align-items:center;gap:.5rem;padding:.5rem 1.25rem 1rem;font-size:1.2rem;font-weight:700;display:flex}.sidebar nav{flex-direction:column;gap:2px;display:flex}.sidebar .navlink{text-align:left;cursor:pointer;width:100%;color:var(--sidebar-fg);background:0 0;border:none;border-left:3px solid #0000;align-items:center;gap:.55rem;padding:.6rem 1.25rem;font-family:inherit;font-size:.95rem;display:flex}.sidebar .navlink:hover{background:var(--sidebar-active);color:#fff}.sidebar .navlink.active{background:var(--sidebar-active);color:#fff;border-left-color:var(--accent)}.sidebar .bottom{border-top:1px solid #334155;flex-direction:column;gap:2px;margin-top:auto;padding-top:.5rem;display:flex}.sidebar .companion{align-items:center;gap:.5rem;padding:.5rem 1.25rem;font-size:.82rem;display:flex}.sidebar .user{color:#fff;align-items:center;gap:.5rem;padding:.5rem 1.25rem;font-size:.9rem;display:flex}.content{flex:1;min-width:0;padding:1.5rem 2rem}.banner-mock{color:#92400e;border-radius:var(--radius);background:#fef3c7;border:1px solid #fde68a;margin-bottom:1rem;padding:.6rem .9rem;font-size:.88rem}.banner-mock code{background:#fff7ed;border-radius:5px;padding:.05rem .35rem}.topbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.topbar h1{font-size:1.5rem}.toolbar{flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1.25rem;display:flex}input[type=search],select{border:1px solid var(--border);background:#fff;border-radius:8px;padding:.5rem .7rem;font-family:inherit;font-size:.9rem}input:focus,select:focus{outline:2px solid var(--accent);outline-offset:-1px}.btn{border:1px solid var(--border);color:var(--text);border-radius:var(--radius);cursor:pointer;background:#fff;align-items:center;gap:.4rem;padding:.5rem .9rem;font-family:inherit;font-size:.9rem;text-decoration:none;display:inline-flex}.btn:hover{background:#f8fafc}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{background:var(--accent-dark)}.btn.sm{padding:.35rem .6rem;font-size:.82rem}.btn:disabled{opacity:.45;cursor:not-allowed}.tabs{border:1px solid var(--border);border-radius:var(--radius);background:#fff;display:inline-flex;overflow:hidden}.tabs button{cursor:pointer;color:var(--muted);border:none;border-right:1px solid var(--border);background:#fff;padding:.45rem .9rem;font-family:inherit;font-size:.88rem}.tabs button:last-child{border-right:none}.tabs button.active{background:var(--accent);color:#fff}.section-title{text-transform:uppercase;color:var(--muted);letter-spacing:.04em;margin:1.25rem 0 .6rem;font-size:.85rem}.cards{grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:1rem;display:grid}.pcard{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;display:flex;overflow:hidden}.pcard .head{align-items:center;gap:.5rem;padding:.8rem 1rem .2rem;display:flex}.pcard .head .name{flex:1;font-weight:600}.pcard .head .more{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 .3rem;font-size:1rem}.pcard .loc{grid-template-columns:auto 1fr auto;align-items:center;gap:.4rem .7rem;padding:.5rem 1rem;font-size:.9rem;display:grid}.pcard .loc .ver{color:var(--muted);text-align:right;font-size:.82rem}.pcard .meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:.5rem;padding:.4rem 1rem;font-size:.82rem;display:flex}.pcard .foot{border-top:1px solid var(--border);gap:.4rem;margin-top:auto;padding:.6rem 1rem;display:flex}.dot{vertical-align:middle;background:var(--gray,#94a3b8);border-radius:50%;width:10px;height:10px;display:inline-block}.reife{align-items:center;gap:3px;display:inline-flex}.pip{background:var(--border);border-radius:2px;width:9px;height:9px}.pip.on{background:#22c55e}.muted{color:var(--muted)}.tiles{flex-wrap:wrap;gap:.75rem;margin-bottom:1rem;display:flex}.tile{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);min-width:150px;color:var(--muted);flex:1;align-items:center;gap:.5rem;padding:.8rem 1rem;font-size:.9rem;display:flex}.tile b{color:var(--text);margin-left:auto;font-size:1.4rem}.health{align-items:center;gap:.6rem;margin-bottom:.5rem;display:flex}.health-bar{background:var(--border);border-radius:999px;flex:1;height:10px;display:flex;overflow:hidden}.health-bar span{display:block}.grow{text-align:left;border:none;border-bottom:1px solid var(--border);cursor:pointer;background:0 0;align-items:center;gap:.6rem;width:100%;padding:.7rem 1rem;font-family:inherit;font-size:.92rem;display:flex}.grow:last-child{border-bottom:none}.grow:hover{background:#f8fafc}.grow .gname{font-weight:600}.grow .greason{color:var(--muted);font-size:.85rem}.grow .garrow{color:var(--muted);margin-left:auto}.grow-empty{color:var(--muted);padding:.7rem 1rem;font-size:.88rem}.pages{flex-direction:column;gap:.5rem;display:flex}.prow{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.prow-head{text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:.6rem;width:100%;padding:.7rem 1rem;font-family:inherit;font-size:.95rem;display:flex}.prow-head:hover{background:#f8fafc}.prow-head .caret{color:var(--muted);width:1rem}.prow-head .pname{font-weight:600}.prow-head .psum{color:var(--muted);align-items:center;gap:.4rem;margin-left:auto;font-size:.88rem;display:flex}.prow-head .stale{color:#92400e}.matrix{border-collapse:collapse;border-top:1px solid var(--border);width:100%}.matrix th,.matrix td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:.5rem .8rem}.matrix th{color:var(--muted);text-transform:uppercase;letter-spacing:.03em;font-size:.78rem}.matrix td.acell{white-space:nowrap;font-weight:500}.cell{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.cell select{border:1px solid var(--border);background:#fff;border-radius:6px;padding:.25rem .4rem;font-size:.82rem}.cell .ver{color:var(--muted);font-size:.78rem}.cell-act{gap:.2rem;margin-left:auto;display:inline-flex}.ic{cursor:pointer;background:0 0;border:none;padding:0 .15rem;font-size:.95rem;line-height:1;text-decoration:none}dialog{border-radius:var(--radius);border:none;width:min(640px,92vw);margin:auto;padding:0;box-shadow:0 20px 50px #00000040}dialog::backdrop{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#0f172a73}dialog .dlg-head{border-bottom:1px solid var(--border);padding:1rem 1.25rem;font-weight:600}.logbox{padding:1rem 1.25rem}.logbox pre{color:#e2e8f0;white-space:pre-wrap;background:#0f172a;border-radius:8px;max-height:50vh;padding:.8rem;font-family:ui-monospace,monospace;font-size:.8rem;overflow:auto}.dlg-actions{justify-content:flex-end;gap:.5rem;margin-top:.8rem;display:flex}.form{flex-direction:column;gap:.8rem;display:flex}.form label{color:var(--muted);flex-direction:column;gap:.3rem;font-size:.85rem;display:flex}.form label input{border:1px solid var(--border);color:var(--text);background:#fff;border-radius:8px;padding:.5rem .7rem;font-size:.9rem}.cfg{flex-direction:column;gap:.5rem;padding:.6rem .8rem;display:flex}.cfg-row{align-items:center;gap:.5rem;display:flex}.cfg-row input[type=text],.cfg-row select{border:1px solid var(--border);background:#fff;border-radius:6px;flex:1;padding:.4rem .6rem;font-size:.85rem}.cfg-row input[type=color]{border:1px solid var(--border);background:#fff;border-radius:6px;width:34px;height:30px;padding:0}.cfg-row .chk{color:var(--muted);flex:none;align-items:center;gap:.3rem;font-size:.82rem;display:inline-flex}.login-wrap{background:var(--bg);place-items:center;min-height:100vh;padding:1rem;display:grid}.login-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);flex-direction:column;gap:1rem;width:min(360px,92vw);padding:2rem;display:flex}.login-card h1{text-align:center;font-size:1.3rem}.login-card label{color:var(--muted);flex-direction:column;gap:.3rem;font-size:.85rem;display:flex}.login-card input[type=text],.login-card input[type=password]{border:1px solid var(--border);color:var(--text);background:#fff;border-radius:8px;width:100%;padding:.5rem .7rem;font-size:.9rem}.login-card .pw{align-items:center;gap:.3rem;display:flex}.login-card .pw input{flex:1}.login-card .row-chk{flex-direction:row;align-items:center;gap:.4rem}.login-err{color:#b91c1c;background:#fee2e2;border:1px solid #fecaca;border-radius:8px;padding:.5rem .7rem;font-size:.85rem}.info{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);max-width:520px;padding:1rem 1.25rem}.info-row{border-bottom:1px solid var(--border);gap:1rem;padding:.4rem 0;display:flex}.info-row:last-child{border-bottom:none}.info-row>span:first-child{color:var(--muted);width:160px}.info code{background:#f1f5f9;border-radius:5px;padding:.1rem .4rem;font-family:ui-monospace,monospace;font-size:.85rem}@keyframes shimmer{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.skel{padding:.2rem}.skel-bar{background:var(--border);border-radius:6px;height:14px;margin:.4rem 0;animation:1.2s ease-in-out infinite shimmer}.skel-bar.lg{width:240px;height:26px}.skel-bar.sm{width:160px;height:14px;margin-bottom:1.2rem}.skel-cards{grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:1rem;margin-top:1rem;display:grid}.skel-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);min-height:120px;padding:1rem}.stub{min-height:50vh;color:var(--muted);text-align:center;place-items:center;gap:.5rem;display:grid}@media (width<=768px){.layout{flex-direction:column}.sidebar{flex-flow:wrap;align-items:center;width:100%;padding:.5rem}.sidebar nav{flex-flow:wrap}.sidebar .bottom{border-top:none;flex-direction:row;align-items:center;margin-top:0}.content{padding:1rem}}
