*{box-sizing:border-box}body{margin:0;color:#17211f;background:#f4f7f6;font-family:Microsoft YaHei,PingFang SC,Segoe UI,Arial,sans-serif}button,input,select,textarea{font:inherit}button{cursor:pointer}.login-page{min-height:100vh;display:grid;place-items:center;padding:24px;background:#eef4f2}.login-panel{width:min(380px,100%);display:grid;gap:12px;padding:24px;border:1px solid #dce5e1;border-radius:8px;background:#fff}.login-panel h1{font-size:22px}.login-panel p{margin:0 0 6px;color:#60706b}.login-panel button{border:0;border-radius:8px;background:#167c64;color:#fff;padding:11px 14px}.app-shell{min-height:100vh;display:grid;grid-template-columns:240px 1fr}.sidebar{background:#12201d;color:#dbe8e3;padding:18px 14px}.brand{display:flex;gap:12px;align-items:center;padding:8px 8px 20px;border-bottom:1px solid rgba(255,255,255,.12)}.brand-mark{width:38px;height:38px;display:grid;place-items:center;border-radius:8px;color:#13201d;background:#f2c85b}.brand strong,.brand span{display:block}.brand span{margin-top:3px;color:#93a8a1;font-size:12px}nav{display:grid;gap:6px;margin-top:18px}nav button{display:flex;gap:10px;align-items:center;padding:11px 12px;color:#abc0ba;border:0;border-radius:8px;background:transparent;text-align:left}nav button.active{color:#fff;background:#1d3731}main{padding:24px;min-width:0}.topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}h1,h2,h3,p{margin:0}h1{font-size:24px}.topbar p,.panel-head p{margin-top:6px;color:#60706b}.top-actions{display:flex;gap:8px}.icon-btn{width:40px;height:40px;display:grid;place-items:center;border:1px solid #d8e1de;border-radius:8px;background:#fff}.metrics{display:grid;grid-template-columns:repeat(5,minmax(120px,1fr));gap:12px;margin-bottom:16px}.metric{background:#fff;border:1px solid #dce5e1;border-radius:8px;padding:14px}.metric span{color:#60706b;font-size:12px}.metric strong{display:block;margin-top:8px;font-size:24px}.error{padding:10px 12px;margin-bottom:12px;border:1px solid #f0b7b7;border-radius:8px;color:#a93232;background:#fff2f2}.toolbar{display:grid;grid-template-columns:180px 130px minmax(180px,1fr) 92px;gap:10px;margin-bottom:16px}select,input,textarea{width:100%;border:1px solid #d8e1de;border-radius:8px;background:#fff;padding:10px 12px;color:#17211f}textarea{resize:vertical;font-family:Consolas,monospace}.toolbar button,.command-form button,.wifi-actions button,.pager button{border:0;border-radius:8px;background:#167c64;color:#fff;padding:10px 12px}.workspace{display:grid;grid-template-columns:minmax(320px,420px) minmax(360px,1fr) 320px;gap:16px;align-items:start}.device-list,.detail,.commands{background:#fff;border:1px solid #dce5e1;border-radius:8px;min-width:0}.list-head,.panel-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px;border-bottom:1px solid #e5ece9}.list-head span{color:#60706b;font-size:12px}.device-row{width:100%;display:grid;grid-template-columns:24px 1fr 48px;gap:10px;align-items:center;text-align:left;padding:12px 14px;border:0;border-bottom:1px solid #edf2f0;background:#fff;color:#17211f}.device-row.selected{background:#eef8f5}.device-row strong,.device-row small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-row small{margin-top:3px;color:#60706b}i{font-style:normal;color:#8b5a12;font-size:12px}i.online,.status.online{color:#12754d}.pager{display:flex;justify-content:space-between;align-items:center;padding:12px 14px}.pager button:disabled{opacity:.45;cursor:not-allowed}.detail{padding-bottom:16px}.status{border-radius:999px;background:#edf2f0;padding:6px 10px}.sensor-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:14px 14px 0}.sensor-grid div{border:1px solid #d7e5df;border-radius:8px;padding:12px;background:#f2faf6;min-width:0}.sensor-grid span{display:block;color:#60706b;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sensor-grid strong{display:block;margin-top:7px;font-size:18px;overflow-wrap:anywhere}.state-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:14px}.state-grid div{border:1px solid #e1e9e6;border-radius:8px;padding:12px;background:#fbfcfc;min-width:0}.state-grid span{display:block;color:#60706b;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.state-grid strong{display:block;margin-top:7px;overflow-wrap:anywhere}.wifi-box{padding:0 14px 14px;border-top:1px solid #edf2f0}.wifi-box h3{margin:14px 0 12px;font-size:16px}.wifi-form{display:grid;gap:10px}.check-row{display:inline-flex;align-items:center;gap:8px;color:#40524d;font-size:14px}.check-row input{width:16px;height:16px}.wifi-actions{display:flex;flex-wrap:wrap;gap:8px}.wifi-actions button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:118px}.wifi-actions .secondary-btn{background:#315e75}.wifi-actions .danger-btn{background:#a44732}.wifi-actions button:disabled{opacity:.58;cursor:not-allowed}.wifi-form small{color:#12754d;overflow-wrap:anywhere}.command-box{padding:0 14px}.command-box h3{margin:4px 0 12px;font-size:16px}.command-form{display:grid;gap:10px}.command-form button{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:120px}.command-row{display:grid;grid-template-columns:1fr 1fr 82px;gap:8px;padding:11px 14px;border-bottom:1px solid #edf2f0;align-items:center}.command-row span,.command-row strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.command-row .completed{color:#12754d}.command-row .sent{color:#2e69c9}.ota-grid{display:grid;grid-template-columns:repeat(2,minmax(320px,1fr));gap:16px;align-items:start}.form-grid{display:grid;gap:10px;padding:14px}.form-grid button{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:150px;border:0;border-radius:8px;background:#167c64;color:#fff;padding:10px 12px}.form-grid button:disabled{opacity:.58;cursor:not-allowed}.form-grid .wide-btn{width:180px}.hidden-file{display:none}.file-summary{display:grid;gap:5px;padding:10px 12px;border:1px solid #d8e1de;border-radius:8px;background:#fbfcfc}.file-summary strong,.file-summary span{overflow-wrap:anywhere}.file-summary span{color:#60706b;font-size:12px}.package-row{display:grid;gap:5px;padding:12px 14px;border-bottom:1px solid #edf2f0}.package-row label{display:flex;gap:8px;align-items:center;font-weight:700}.package-row small{color:#60706b;overflow-wrap:anywhere}.debug-layout{display:grid;grid-template-columns:minmax(300px,380px) 1fr;gap:16px;align-items:start}.debug-main{display:grid;gap:16px;min-width:0}.debug-grid{display:grid;grid-template-columns:repeat(3,minmax(260px,1fr));gap:16px;align-items:start}.quick-actions{display:flex;flex-wrap:wrap;gap:8px;padding:14px;border-bottom:1px solid #edf2f0}.quick-actions button,.mini-btn{border:0;border-radius:8px;background:#167c64;color:#fff;padding:9px 12px}.mini-btn{font-size:12px;padding:7px 10px}.debug-row{display:grid;gap:6px;padding:12px 14px;border-bottom:1px solid #edf2f0;min-width:0}.debug-row strong,.debug-row span,.debug-row small{overflow-wrap:anywhere}.debug-row span,.debug-row small{color:#60706b;font-size:12px}.debug-row pre{max-height:180px;overflow:auto;margin:0;padding:10px;border:1px solid #e1e9e6;border-radius:8px;background:#fbfcfc;color:#20302c;font-size:12px;line-height:1.45}@media(max-width:1180px){.workspace,.ota-grid,.debug-layout,.debug-grid{grid-template-columns:1fr}.sensor-grid,.metrics{grid-template-columns:repeat(2,1fr)}}@media(max-width:760px){.app-shell{grid-template-columns:1fr}.sidebar{position:static}.toolbar,.sensor-grid,.state-grid{grid-template-columns:1fr}}
