:root{--bg:#f4f6f9;--card:#fff;--fg:#0f172a;--muted:#64748b;--line:#e2e8f0;--brand:#0369a1;--brand-fg:#fff;--good:#047857;--warn:#b45309;--bad:#b91c1c;--r:12px;font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
@media (prefers-color-scheme:dark){:root{--bg:#0b1220;--card:#111a2e;--fg:#e2e8f0;--muted:#94a3b8;--line:#1e2a44;--brand:#38bdf8;--brand-fg:#06202e;--good:#34d399;--warn:#fbbf24;--bad:#f87171}}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);line-height:1.5}
a{color:var(--brand)}
header.top{display:flex;gap:1rem;align-items:center;flex-wrap:wrap;padding:.75rem 1.25rem;background:var(--card);border-bottom:1px solid var(--line)}
header.top b{font-size:1.05rem}header.top nav{display:flex;gap:.25rem;flex-wrap:wrap;margin-right:auto}
header.top nav a{padding:.4rem .8rem;border-radius:8px;text-decoration:none;color:var(--muted);font-weight:600}
header.top nav a.on{background:var(--bg);color:var(--fg)}
main{max-width:1180px;margin:0 auto;padding:1.25rem}
h1{font-size:1.4rem;margin:.2rem 0 1rem}h2{font-size:1.1rem;margin:0 0 .75rem}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:1rem 1.1rem;margin-bottom:1rem;overflow-x:auto}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:.75rem;margin-bottom:1rem}
.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:.8rem 1rem}
.stat small{display:block;color:var(--muted);font-size:.78rem;text-transform:uppercase;letter-spacing:.04em}.stat strong{font-size:1.15rem}
table{width:100%;border-collapse:collapse;font-size:.92rem}th,td{text-align:left;padding:.5rem .6rem;border-bottom:1px solid var(--line);vertical-align:middle}th{color:var(--muted);font-weight:600;font-size:.8rem}
.row{display:flex;gap:.4rem;flex-wrap:wrap;align-items:center}
button,.btn{font:inherit;cursor:pointer;border:1px solid var(--line);background:var(--card);color:var(--fg);padding:.4rem .75rem;border-radius:8px;font-weight:600}
button:hover{border-color:var(--brand)}button.primary{background:var(--brand);color:var(--brand-fg);border-color:var(--brand)}button.danger{color:var(--bad);border-color:var(--bad)}button:disabled{opacity:.5;cursor:wait}
button.sm{padding:.2rem .55rem;font-size:.82rem}
input,select{font:inherit;padding:.5rem .65rem;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--fg);width:100%}
label{display:block;font-weight:600;font-size:.85rem;margin:.6rem 0 .2rem}label.chk{display:flex;gap:.5rem;align-items:center;font-weight:500}label.chk input{width:auto}
.tag{display:inline-block;padding:.1rem .55rem;border-radius:999px;font-size:.78rem;font-weight:700;background:var(--bg);border:1px solid var(--line)}
.tag.good{color:var(--good);border-color:var(--good)}.tag.warn{color:var(--warn);border-color:var(--warn)}.tag.bad{color:var(--bad);border-color:var(--bad)}
.muted{color:var(--muted)}.err{color:var(--bad);font-weight:600;margin:.5rem 0}.ok{color:var(--good);font-weight:600}
.login{max-width:380px;margin:12vh auto;padding:0 1rem}
dialog{border:1px solid var(--line);border-radius:var(--r);padding:1.25rem;background:var(--card);color:var(--fg);max-width:min(560px,94vw);width:100%}
dialog::backdrop{background:rgb(0 0 0/.5)}
pre{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:.75rem;overflow:auto;max-height:55vh;font-size:.8rem;white-space:pre-wrap;word-break:break-all}
code{background:var(--bg);padding:.1rem .35rem;border-radius:5px;word-break:break-all}
.toast{position:fixed;right:1rem;bottom:1rem;background:var(--fg);color:var(--bg);padding:.6rem 1rem;border-radius:10px;font-weight:600;max-width:80vw}
