:root{
  --bg:#0d1117; --panel:#161b22; --panel2:#1c2129; --border:#30363d;
  --text:#e6edf3; --dim:#8b949e; --accent:#2f81f7; --green:#3fb950; --red:#f85149; --amber:#d29922;
}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;background:var(--bg);color:var(--text)}
.hidden{display:none !important}

header{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--border)}
header h1{font-size:20px;margin:0}
.head-actions{display:flex;gap:8px}
footer{padding:14px 22px;color:var(--dim);font-size:13px;text-align:center}

button{cursor:pointer;border:1px solid var(--border);background:var(--accent);color:#fff;border-radius:8px;padding:8px 14px;font-size:13px}
button.ghost{background:transparent;color:var(--text)}
button:hover{filter:brightness(1.1)}
button.danger{background:transparent;color:var(--red);border-color:var(--red)}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px;padding:22px}
.device{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px}
.device-head{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.dot{width:10px;height:10px;border-radius:50%;background:var(--red)}
.dot.on{background:var(--green);box-shadow:0 0 6px var(--green)}
.device-head h2{font-size:16px;margin:0}
.device-head small{color:var(--dim)}
.online-tag{margin-left:auto;font-size:12px;color:var(--dim)}
.device.empty{opacity:.55}

.row{border-top:1px solid var(--border);padding:10px 0}
.row-label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--dim);margin-bottom:8px}
.row-controls{display:flex;gap:8px;align-items:center}
.row-controls select{flex:1;background:var(--panel2);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:7px 9px;font-size:13px}
.meter{flex:0 0 90px;height:18px;background:var(--panel2);border:1px solid var(--border);border-radius:6px;overflow:hidden;position:relative}
.meter i{display:block;height:100%;width:0%;background:linear-gradient(90deg,var(--green),var(--amber),var(--red));transition:width .08s linear}
.meter.live{border-color:var(--green)}

.login{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:var(--bg)}
.login-card{background:var(--panel);padding:32px;border:1px solid var(--border);border-radius:14px;width:320px;text-align:center}
.login-card h1{margin:0 0 6px}
.login-card .sub{color:var(--dim);margin:0 0 18px}
.login-card input{width:100%;padding:11px;border-radius:8px;border:1px solid var(--border);background:var(--panel2);color:var(--text);margin-bottom:12px}
.login-card button{width:100%;padding:11px}
.err{color:var(--red);font-size:13px;min-height:18px}

dialog{border:1px solid var(--border);background:var(--panel);color:var(--text);border-radius:12px;width:400px;padding:22px}
dialog::backdrop{background:rgba(0,0,0,.6)}
dialog label{display:block;font-size:13px;color:var(--dim);margin:12px 0 6px}
dialog input{width:100%;padding:9px;border-radius:8px;border:1px solid var(--border);background:var(--panel2);color:var(--text)}
.dialog-actions{display:flex;gap:8px;margin-top:16px;justify-content:flex-end}
.result{font-size:12px;color:var(--green);margin-top:12px}
.result code{display:block;background:var(--panel2);padding:8px;border-radius:6px;font-size:11px;word-break:break-all;color:var(--amber)}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--panel2);border:1px solid var(--border);padding:10px 16px;border-radius:8px;font-size:13px;z-index:99}