:root{--bg:#fafafa;--card:#fff;--text:#1b1b1b;--muted:#5b5b5b;--border:#e7e7e7;--nav:#1f1f1f;--navBtn:#3a3a3a;--navHover:#4a4a4a;--primary:#007bff;--ok:#28a745;--warn:#ffc107;--danger:#dc3545}.demoRoot{background:var(--bg);min-height:100vh;color:var(--text)!important}.demoRoot .container,.demoRoot .card,.demoRoot .relay,.demoRoot table,.demoRoot th,.demoRoot td,.demoRoot label,.demoRoot h1,.demoRoot h2,.demoRoot h3,.demoRoot p,.demoRoot li{color:var(--text)!important}.demoRoot .muted{color:var(--muted)!important}.demoRoot a:not(.nav a){color:var(--primary)}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0;font-family:sans-serif}.nav{background:var(--nav);flex-wrap:wrap;align-items:center;gap:10px;padding:10px;display:flex}.nav-logo{align-items:center;gap:8px;margin-right:8px;text-decoration:none;display:flex}.nav-logo-box{background:#fff;border-radius:6px;align-items:center;gap:8px;padding:2px 6px;display:flex}.nav-logo-box img{height:22px;display:block}.nav-logo-title{color:#111;letter-spacing:.2px;font-size:.85rem;font-weight:700}.nav a{color:#fff;background:var(--navBtn);border-radius:6px;padding:6px 12px;font-size:.9rem;text-decoration:none;display:inline-block}.nav a.active{background:var(--primary)}.nav a:hover{background:var(--navHover)}.container{max-width:1050px;margin:0 auto 30px;padding:16px 16px 90px}h1{margin:6px 0 16px;font-size:1.5rem}h2{margin-top:20px;font-size:1.15rem}h3{margin:0;font-size:1.05rem}.card{background:var(--card);border-radius:10px;margin-top:12px;padding:14px;box-shadow:0 2px 5px #00000014}.row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.pill{background:#eee;border-radius:999px;margin-right:6px;padding:4px 10px;font-size:.85rem;display:inline-block}.pill.main{background:var(--primary);color:#fff}.pill.ok{background:var(--ok);color:#fff}.pill.warn{background:var(--warn);color:#111}.pill.danger{background:var(--danger);color:#fff}.muted{color:var(--muted);font-size:.9rem}.grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-top:10px;display:grid}.relay{background:#fff;border:1px solid #e7e7e7;border-radius:10px;padding:12px;box-shadow:0 2px 5px #0000000f}.relay-title{margin-bottom:8px;font-weight:700}.relay-sub{color:#666;margin-top:2px;font-size:12px}.btnRow{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}.btn{color:#fff;cursor:pointer;border:none;border-radius:8px;padding:7px 12px;font-size:.85rem}.btn:active{transform:translateY(1px)}.btn.on{background:var(--ok)}.btn.off{background:var(--danger)}.btn.primary{background:var(--primary)}.btn.gray{background:#6c757d}.btn.down{background:var(--danger)}.btn.up{background:var(--ok)}.btn.secondary{color:#222;background:#e9eef5}.btn.secondary:hover{opacity:.92}.status{color:#555;margin-top:8px;font-size:.85rem}.status b{color:#111}.inputs{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-top:10px;display:grid}.inputTile{color:#fff;border-radius:10px;justify-content:space-between;align-items:center;padding:12px;font-weight:700;display:flex;box-shadow:0 2px 5px #00000014}.inputTile small{opacity:.9;margin-top:3px;font-size:11px;font-weight:600;display:block}.inputTile.off{background:#6c757d}.inputTile.on{background:var(--primary)}label{color:#333;margin-bottom:10px;font-size:.9rem;display:block}input[type=text],input[type=password],input[type=number],select,textarea{border:1px solid #d9e3ee;border-radius:8px;outline:none;width:100%;padding:8px 10px;font-size:.9rem}textarea{min-height:180px;font-family:monospace;font-size:.85rem}input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 2px #007bff40}table{border-collapse:collapse;width:100%;margin-top:8px;font-size:.85rem}th,td{border:1px solid var(--border);text-align:left;vertical-align:top;padding:6px 8px}th{background:#f0f0f0}pre{color:#0f0;white-space:pre-wrap;background:#000;border-radius:8px;padding:10px;font-size:12px}footer{text-align:center;color:#666;background:#f1f1f1;border-top:1px solid #e6e6e6;width:100%;padding:10px;font-size:.9rem;position:fixed;bottom:0}
