*{box-sizing:border-box}body{margin:0;font:14px system-ui,sans-serif;color:#1d2433;background:#f4f6fa}
header{display:flex;align-items:center;gap:20px;padding:8px 16px;background:#0f2a4a;color:#fff}header a{color:#fff;text-decoration:none}
.brand{font-weight:700;font-size:16px}nav a{margin-right:14px;opacity:.85}nav a:hover{opacity:1}.logout{margin-left:auto;display:flex;gap:10px;align-items:center}
button{background:#1f6feb;color:#fff;border:0;border-radius:6px;padding:7px 14px;cursor:pointer}main{padding:16px}
.split{display:flex;padding:0;height:calc(100vh - 46px)}aside{width:320px;overflow:auto;background:#fff;border-right:1px solid #dde3ec;padding:12px}
#map{flex:1}#map.full{height:55vh;border-radius:8px}#devs{list-style:none;padding:0;margin:0}#devs li{padding:10px;border-bottom:1px solid #eef1f5;cursor:pointer}
#devs li small{display:block;color:#5b6577}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px}.on{background:#2da44e}.off{background:#b0b7c3}
table{width:100%;border-collapse:collapse;background:#fff;margin-top:12px}th,td{padding:6px 8px;border-bottom:1px solid #eef1f5;text-align:left}th{background:#f0f3f8}
.bar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:12px}input,select{padding:6px;border:1px solid #c9d1dd;border-radius:6px}
.card{background:#fff;padding:20px;border-radius:10px;max-width:380px;display:flex;flex-direction:column;gap:12px;box-shadow:0 2px 10px #0001}
.card label{display:flex;flex-direction:column;gap:4px}.login{display:flex;justify-content:center;align-items:center;height:100vh}
.err{color:#b42318}.ok{color:#1a7f37}
