body{font-family:system-ui,sans-serif;max-width:640px;margin:0 auto;padding:24px 16px 80px;background:#0a0a0a;color:#f3f1ea}header{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:32px}.brand{font-weight:700;letter-spacing:.04em;color:#f5c518;text-decoration:none}nav{display:flex;gap:14px;flex-wrap:wrap}nav a{color:#9a9386;text-decoration:none}nav a.active,nav a:hover{color:#f5c518}.eyebrow{color:#f5c518;text-transform:uppercase;letter-spacing:.14em;font-size:.72rem}h1{font-size:1.85rem;margin:0 0 12px}.lead{color:#cfc6b4;line-height:1.5}.muted{color:#9a9386;font-size:.95rem}.tag{color:#9a9386;letter-spacing:.16em;text-transform:uppercase;font-size:.78rem;margin:0 0 16px}.cards{display:grid;gap:12px;margin:20px 0 24px;grid-template-columns:1fr}.boxes{display:grid;gap:10px;margin:16px 0 24px}@media(min-width:520px){.boxes{grid-template-columns:1fr 1fr 1fr}}.card,.box{display:block;padding:16px;border-radius:12px;background:#161616;color:inherit;text-decoration:none;border:1px solid #2a261c}.box h2,.card h2{margin:0 0 6px;font-size:1rem;color:#f5c518}.box p,.card p{margin:0;color:#9a9386;font-size:.9rem}.box.active{border-color:#f5c518}label{display:block;margin-bottom:6px}input,button,select{font:inherit;padding:10px 12px;border-radius:8px;border:0}input,select{width:100%;box-sizing:border-box;margin:0 0 12px;background:#111;color:#f3f1ea;border:1px solid #f5c518}button,.button{display:inline-block;background:#f5c518;color:#111;text-decoration:none;padding:10px 14px;border-radius:8px;border:0;cursor:pointer;font-weight:600}#result{margin-top:20px;line-height:1.5}.status{padding:10px 12px;border-radius:8px;background:#161616;color:#9a9386;margin:0 0 16px}.lights{display:flex;flex-direction:row;justify-content:space-between;align-items:center;gap:8px;margin:4px 0 22px}.light{display:flex;align-items:center;gap:6px;letter-spacing:.12em;font-size:.72rem}.dot{width:12px;height:12px;border-radius:50%;background:#3a3a3a;flex:none}.dot.g{background:#3d8f4a}.dot.y{background:#f5c518}.dot.r{background:#a33}.side{display:flex;flex:0 0 auto;gap:6px;flex-wrap:nowrap}.passline{position:relative}.passline input{padding-right:76px}.passline button{position:absolute;right:6px;top:4px;background:#111;color:#f5c518;border:1px solid #f5c518;padding:6px 8px}button.danger{background:#a33;color:#fff}.rowbtns{display:flex;width:100%;align-items:center;justify-content:space-between;gap:18px;flex-wrap:nowrap}.rowbtns>#save{flex:0 0 auto;padding:10px 22px;font-size:1rem}.side button{flex:0 0 auto;padding:10px 10px;font-size:.85rem;white-space:nowrap}.alarm{border:1px solid #3a3428;border-radius:10px;padding:10px 12px;margin:8px 0}#wifiLog.status.ok{display:block;margin-top:12px}.status.ok{color:#b7e0a0;background:#142416;border:1px solid #3d8f4a;font-size:1rem;padding:8px 10px;display:inline-block;margin:0}.warnbox{background:#2a2210;border:1px solid #f5c518;color:#f5c518;border-radius:12px;padding:12px;margin:10px 0}.status.warn{color:#f5c518}fieldset{border:0;background:#161616;border-radius:12px;padding:16px;margin:0 0 14px}fieldset legend{padding:0 6px;color:#f5c518;font-size:.78rem;letter-spacing:.08em;text-transform:uppercase}.locks fieldset{border:1px solid transparent}.locks fieldset legend{padding:0 8px;background:#0a0a0a}.locks fieldset.open{border-color:#f5c518}.locks fieldset:not(.open) input,.locks fieldset:not(.open) select{pointer-events:none}.row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:10px 0}.row label{margin:0}.val{color:#9a9386;min-width:4.5rem;text-align:right}input[type=range]{width:100%;margin:0 0 8px;accent-color:#f5c518}input[type=checkbox]{width:auto;margin:0;accent-color:#f5c518}.btns,.bar{display:flex;flex-wrap:wrap;gap:16px;margin:16px 0}.bar{position:sticky;bottom:0;background:#0a0a0a;padding:12px 0 8px}fieldset.hidden{display:none}.progress{height:8px;background:#2a261c;border-radius:99px;overflow:hidden;margin:10px 0}.progress>span{display:block;height:100%;width:0;background:#f5c518;transition:width .3s}.doc svg{width:100%;height:auto;display:block}.newrow{display:flex;align-items:center;gap:8px;margin:2px 0 14px;font-size:.9rem}.newrow label{margin:0}.param{position:relative}.param.fresh{border-radius:10px;outline:2px solid #7eb6ff;outline-offset:0}.param.fresh:not(.alarm){padding:10px 12px;margin:8px 0}.param.fresh label,.param.fresh .marknote{color:#7eb6ff}.param.unavail{opacity:.45}.param.hidden{display:none}.marknote{margin:4px 0 0;font-size:.85rem}