:root{
  --bg:#0f1115; --panel:#181b22; --panel2:#20242e; --line:#2a2f3a;
  --txt:#e6e9ef; --muted:#8b93a3; --accent:#3b82f6; --accent2:#2563eb;
  --ok:#22c55e; --warn:#f59e0b; --danger:#ef4444;
}
*{box-sizing:border-box}
body{margin:0;font-family:system-ui,"Segoe UI",Roboto,Arial,sans-serif;
  background:var(--bg);color:var(--txt)}
h1,h2,h3{margin:0 0 .5rem}
a{color:var(--accent);text-decoration:none}

/* Login */
.login-body{display:flex;align-items:center;justify-content:center;min-height:100vh}
.login-card{background:var(--panel);padding:2rem;border-radius:14px;width:340px;
  border:1px solid var(--line);box-shadow:0 10px 40px rgba(0,0,0,.5)}
.login-card h1{font-size:1.4rem;text-align:center}
.subtitle{color:var(--muted);text-align:center;margin-bottom:1.2rem;font-size:.9rem}
.login-card label{display:block;margin:.6rem 0 .25rem;font-size:.85rem;color:var(--muted)}
.login-card input{width:100%;padding:.6rem;border-radius:8px;border:1px solid var(--line);
  background:var(--panel2);color:var(--txt)}
.login-card button{width:100%;margin-top:1.2rem}
.error{color:var(--danger);margin-top:.8rem;font-size:.85rem;text-align:center}

/* Layout */
.topbar{display:flex;justify-content:space-between;align-items:center;
  padding:.8rem 1.2rem;background:var(--panel);border-bottom:1px solid var(--line)}
.brand{font-weight:600}
.conn{font-size:.8rem;color:var(--warn);margin-left:.5rem}
.conn.ok{color:var(--ok)} .conn.bad{color:var(--danger)}
.container{max-width:1100px;margin:1.2rem auto;padding:0 1rem}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:12px;
  padding:1rem;margin-bottom:1.2rem}
.panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.8rem}
.actions{display:flex;gap:.5rem;flex-wrap:wrap}

/* Buttons */
.btn{background:var(--accent);color:#fff;border:none;padding:.5rem .9rem;
  border-radius:8px;cursor:pointer;font-size:.9rem}
.btn:hover{background:var(--accent2)}
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--txt)}
.btn.ghost:hover{background:var(--panel2)}
.btn.danger{background:var(--danger)} .btn.small{padding:.3rem .6rem;font-size:.8rem}

/* Table */
.tbl{width:100%;border-collapse:collapse}
.tbl th,.tbl td{padding:.6rem;text-align:left;border-bottom:1px solid var(--line);font-size:.9rem}
.tbl th{color:var(--muted);font-weight:500}
.badge{padding:.15rem .5rem;border-radius:20px;font-size:.75rem}
.badge.on{background:rgba(34,197,94,.15);color:var(--ok)}
.badge.off{background:rgba(139,147,163,.15);color:var(--muted)}

/* Modal */
.modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.6);
  align-items:center;justify-content:center;z-index:50}
.modal.open{display:flex}
.modal-card{background:var(--panel);padding:1.5rem;border-radius:12px;width:380px;
  border:1px solid var(--line)}
.modal-card.wide{width:640px}
.modal-card label{display:block;margin:.6rem 0 .2rem;font-size:.85rem;color:var(--muted)}
.modal-card input,.modal-card select{width:100%;padding:.5rem;border-radius:8px;
  border:1px solid var(--line);background:var(--panel2);color:var(--txt)}
.modal-foot{display:flex;gap:.5rem;justify-content:flex-end;margin-top:1.2rem}
.row{display:flex;gap:.5rem;margin:.5rem 0}
.row input{flex:1}
.scan-result{max-height:320px;overflow:auto;margin-top:.8rem}
.scan-item{display:flex;justify-content:space-between;align-items:center;
  padding:.5rem;border:1px solid var(--line);border-radius:8px;margin-bottom:.4rem}
.scan-item .pi{color:var(--ok)}

.log{background:#0a0c10;padding:1rem;border-radius:8px;max-height:360px;overflow:auto;
  font-family:ui-monospace,monospace;font-size:.8rem;white-space:pre-wrap}

/* Control page */
.control-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.2rem;
  max-width:1100px;margin:1.2rem auto;padding:0 1rem}
.camera-panel{grid-row:span 2}
.camera{width:100%;border-radius:8px;background:#000;min-height:280px;object-fit:contain}
.joystick-zone{position:relative;height:200px;background:var(--panel2);
  border-radius:10px;margin-bottom:1rem}
.speed label{display:block;margin:.5rem 0 .2rem;font-size:.85rem;color:var(--muted)}
.speed input{width:100%}
.hint{color:var(--muted);font-size:.82rem}
.lidar{background:#0a0c10;border-radius:8px;display:block;margin:auto}
.status{font-family:ui-monospace,monospace;font-size:.85rem;line-height:1.7}
.status b{color:var(--accent)}
@media(max-width:820px){.control-grid{grid-template-columns:1fr}.camera-panel{grid-row:auto}}
