:root{--bg: #0f172a;--card: #1e293b;--card-border: #334155;--text: #e2e8f0;--text-dim: #94a3b8;--accent: #22c55e;--accent-dim: #166534;--danger: #ef4444;--warn: #f59e0b}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,Noto Sans CJK SC,sans-serif;min-height:100vh}#root{max-width:900px;margin:0 auto;padding:1.5rem 1rem 3rem}.topbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:1.25rem;flex-wrap:wrap}.topbar h1{font-size:1.25rem;font-weight:600}.topbar-actions{display:flex;align-items:center;gap:.5rem}.badge{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem;padding:.25rem .7rem;border-radius:999px;background:var(--card);border:1px solid var(--card-border);color:var(--text-dim)}.badge .dot{width:8px;height:8px;border-radius:50%;background:var(--text-dim)}.badge.on .dot{background:var(--accent);box-shadow:0 0 6px var(--accent)}.badge.on{color:var(--accent)}.tabs{display:flex;gap:.5rem;margin-bottom:1.25rem}.tab{flex:1;padding:.55rem 0;text-align:center;background:transparent;color:var(--text-dim);border:1px solid var(--card-border);border-radius:.6rem;font-size:.95rem;cursor:pointer;transition:all .15s}.tab.active{background:var(--accent-dim);color:var(--text);border-color:var(--accent)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem}.card{background:var(--card);border:1px solid var(--card-border);border-radius:.8rem;padding:1.1rem 1.25rem}.card h3{font-size:.8rem;font-weight:500;color:var(--text-dim);text-transform:none;margin-bottom:.6rem}.card .big{font-size:1.5rem;font-weight:600}.card .sub{font-size:.8rem;color:var(--text-dim);margin-top:.25rem}.value-on{color:var(--accent)}.value-off{color:var(--text-dim)}button.btn{padding:.5rem 1.1rem;border-radius:.55rem;border:1px solid var(--card-border);background:#273449;color:var(--text);font-size:.9rem;cursor:pointer;transition:all .15s}button.btn:hover:not(:disabled){border-color:var(--accent)}button.btn:disabled{opacity:.5;cursor:not-allowed}button.btn.primary{background:var(--accent-dim);border-color:var(--accent)}button.btn.stop{background:#451a1a;border-color:var(--danger);color:#fca5a5}input.num{width:6rem;padding:.5rem .7rem;border-radius:.55rem;border:1px solid var(--card-border);background:var(--bg);color:var(--text);font-size:.9rem}.row{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.banner{padding:.6rem 1rem;border-radius:.6rem;font-size:.85rem;margin-bottom:1rem;border:1px solid}.banner.warn{background:#3b2f10;border-color:var(--warn);color:#fcd34d}.banner.error{background:#3b1212;border-color:var(--danger);color:#fca5a5}.banner.ok{background:#0f2e1c;border-color:var(--accent);color:#86efac}.login-wrap{min-height:90vh;display:flex;align-items:center;justify-content:center}.login-card{width:100%;max-width:340px;background:var(--card);border:1px solid var(--card-border);border-radius:1rem;padding:2rem 1.75rem}.login-card h1{font-size:1.3rem;text-align:center;margin-bottom:1.5rem}.login-card input{width:100%;padding:.65rem .8rem;border-radius:.55rem;border:1px solid var(--card-border);background:var(--bg);color:var(--text);font-size:1rem;margin-bottom:.9rem}.login-card input:focus{outline:none;border-color:var(--accent)}.login-card button{width:100%;padding:.65rem;font-size:1rem}.config-table{width:100%;border-collapse:collapse;font-size:.9rem}.config-table td{padding:.45rem .5rem;border-bottom:1px solid var(--card-border)}.config-table td:first-child{color:var(--text-dim);width:45%}.config-table input[type=text],.config-table input[type=number]{width:100%;padding:.35rem .55rem;border-radius:.4rem;border:1px solid var(--card-border);background:var(--bg);color:var(--text);font-size:.85rem}.spin{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.25);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;vertical-align:-2px}@keyframes spin{to{transform:rotate(360deg)}}
