:root{--bg:#f4f6f8;--ink:#182a34;--muted:#7b8992;--line:#e4e9ed;--accent:#097b70}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}aside{position:fixed;inset:0 auto 0 0;width:224px;padding:38px 25px;background:#102c32;color:#d8e8e8}.brand{font-size:24px;letter-spacing:4px}.brand:first-letter{color:#74dfbb}.tag{font-size:12px;color:#8ca9ad;margin:16px 0 48px}nav a{display:block;color:#b6cdd0;padding:15px;text-decoration:none;border-radius:9px;margin:8px 0}nav a:first-child{background:#234047;color:white}.aside-bottom{position:absolute;bottom:28px;font-size:12px;color:#84bdac}.aside-bottom small{display:block;color:#769398;margin-top:12px}main{margin-left:224px;padding:48px;max-width:1600px}header,.section-head{display:flex;justify-content:space-between;align-items:center;gap:16px}header{margin-bottom:32px}.eyebrow{color:var(--accent);font-size:11px;font-weight:700;letter-spacing:2px}h1{font-size:32px;margin:12px 0}p{color:var(--muted);line-height:1.7}button{border:0;border-radius:8px;background:var(--accent);color:white;padding:12px 20px;font:inherit;cursor:pointer}.ghost{color:var(--ink);background:#eef3f5}button:hover{filter:brightness(.95)}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.stats article,.card{background:white;border:1px solid var(--line);border-radius:12px;padding:24px}.stats label,.stats small{display:block;color:var(--muted)}.stats strong{display:block;font-size:30px;margin:18px 0 8px;font-weight:600}.stats small{font-size:11px}section{margin-bottom:34px}h2{font-size:18px;font-weight:600}.section-head{margin-bottom:16px}.section-head span{font-size:12px;color:var(--muted)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:18px}.card h3{margin:0 0 12px}.card small{color:var(--muted)}.badge{font-size:11px;background:#e5f4ef;color:#168066;border-radius:5px;padding:4px 8px}.badge.test{color:#a5741e;background:#fff5dc}.address{font-family:monospace;overflow-wrap:anywhere;background:#f7f9fa;padding:12px;border-radius:6px;margin:16px 0;font-size:11px}.row{display:flex;justify-content:space-between;gap:10px;margin:12px 0}.actions{display:flex;gap:10px;margin-top:18px}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:10px;background:white}table{width:100%;border-collapse:collapse;text-align:left;font-size:12px}th{color:var(--muted);font-weight:500;background:#f9fafb}td,th{padding:17px 20px;border-bottom:1px solid var(--line)}td small{display:block;color:var(--muted);margin-top:6px}.empty{text-align:center;padding:38px;background:white;border:1px dashed #ced9dd;border-radius:12px;color:var(--muted);grid-column:1/-1}.event{padding:14px 18px;border-bottom:1px solid var(--line);background:white;font-size:12px}.event small{color:var(--muted)}footer{color:var(--muted);font-size:12px}.switch{font-size:12px;color:var(--muted)}dialog{border:0;border-radius:16px;width:600px;max-width:94vw;padding:30px;box-shadow:0 20px 100px #102c3230}dialog::backdrop{background:#112a3266}form label{display:block;margin:16px 0;color:#4b616b;font-size:12px}form input,form select{display:block;width:100%;margin-top:8px;padding:11px;border:1px solid #d7e1e5;border-radius:6px;font:inherit;background:white}.pair{display:grid;grid-template-columns:1fr 2fr;gap:15px}.hint{font-size:11px}#error,#formError{color:#ad3434;margin:14px 0;white-space:pre-wrap}.balance{font-size:12px;color:var(--muted);line-height:1.7;white-space:pre-line}@media(max-width:950px){aside{width:170px;padding:30px 15px}main{margin-left:170px;padding:25px}.stats{grid-template-columns:repeat(2,1fr)}}@media(max-width:600px){aside{position:static;width:auto;padding:20px}aside nav,.tag,.aside-bottom{display:none}main{margin:0;padding:20px}.grid{grid-template-columns:1fr}h1{font-size:25px}header button{padding:10px}.stats strong{font-size:24px}}
form label.check{display:flex;align-items:center;gap:10px}form label.check input{display:inline-block;width:auto;margin:0}form textarea{display:block;width:100%;margin-top:8px;padding:11px;border:1px solid #d7e1e5;border-radius:6px;font:inherit;background:white;resize:vertical}

#memberList .ghost{padding:6px 10px;margin-top:5px;font-size:12px;white-space:nowrap}
#computeResult{min-height:1.4em;color:var(--accent)}

#workers table{min-width:900px}#workers td,#workers th{padding:16px 14px}.device-row>td:first-child{max-width:280px;overflow-wrap:anywhere}.numeric{white-space:nowrap;font-variant-numeric:tabular-nums}.worker-actions{display:flex;gap:6px}.worker-switch{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}.worker-switch input{appearance:none;width:30px;height:18px;border-radius:12px;background:#bdc8ce;position:relative;cursor:pointer;margin:0}.worker-switch input:before{content:"";position:absolute;width:12px;height:12px;top:3px;left:3px;background:white;border-radius:50%}.worker-switch input:checked{background:var(--accent)}.worker-switch input:checked:before{left:15px}.worker-switch input:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.worker-switch input:disabled{opacity:.5}.worker-expanded>td{background:#f8fbfa;padding:24px!important;border-left:3px solid var(--accent)}#thermalPanel{max-width:1000px}#thermalPanel .pair{grid-template-columns:1fr 1fr;max-width:700px}#thermalPanel h2{margin-top:0}#thermalPanel details{max-width:700px;border-top:1px solid var(--line);padding-top:16px}#thermalPanel summary{cursor:pointer;color:var(--accent)}.worker-details{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;border-bottom:1px solid var(--line);padding:8px 0 22px}.worker-details span,.worker-details b{display:block}.worker-details span{font-size:11px;color:var(--muted);margin-bottom:8px}.worker-details b{font-weight:500}.sensor-detail{grid-column:span 2}button:disabled{opacity:.6;cursor:wait}

[hidden]{display:none!important}

@media(max-width:950px){#thermalPanel{width:calc(100vw - 280px)}}@media(max-width:600px){#thermalPanel{width:calc(100vw - 94px)}#thermalPanel .pair{grid-template-columns:1fr}.worker-details{grid-template-columns:1fr 1fr}}

#thermalPanel{position:sticky;left:14px}

/* One semantic device table; mobile renders the same rows as cards. */
@media(max-width:760px){
 aside{position:static;width:auto;padding:18px 20px}.brand{font-size:20px}.tag,.aside-bottom{display:none}
 aside nav{display:flex;gap:8px;margin-top:12px}nav a{margin:0;padding:9px 12px;font-size:12px}
 main{margin:0;padding:20px;max-width:100%}header{align-items:flex-start}header h1{font-size:26px}
 .stats{gap:10px}.stats article{padding:16px}.stats strong{font-size:25px}.grid{grid-template-columns:minmax(0,1fr)}
 .card{padding:18px}.actions{flex-wrap:wrap}.actions button{flex:1 1 auto}.section-head{flex-wrap:wrap}
 #workers .table-wrap{border:0;background:transparent;overflow:visible}
 #workers table,#memberList{display:block;width:100%;min-width:0}
 #workers thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
 #memberList .device-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px 18px;background:white;border:1px solid var(--line);border-radius:12px;margin-bottom:14px;padding:18px}
 #workers .device-row>td{display:block;border:0;padding:0;max-width:none;min-width:0;white-space:normal;overflow-wrap:anywhere}
 .device-name,.device-status,.device-controls{grid-column:1/-1}.device-name strong{font-size:15px}
 .device-row [data-label]:before{content:attr(data-label);display:block;color:var(--muted);font-size:11px;margin-bottom:7px}
 .device-row .device-status{border-bottom:1px solid var(--line)!important;padding-bottom:12px!important}
 .device-row .device-status:before{display:inline;margin-right:8px}
 .device-row .numeric{font-size:18px;font-variant-numeric:tabular-nums}.worker-switch{font-size:14px;min-height:24px}
 .device-controls .worker-actions{justify-content:flex-end;border-top:1px solid var(--line);padding-top:12px}
 #memberList .ghost{min-height:40px;padding:8px 16px;margin:0}
 #workers .worker-expanded{display:block;margin-top:-15px;margin-bottom:14px}
 #workers .worker-expanded>td{display:block;padding:18px!important;border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:0 0 12px 12px}
 #thermalPanel{position:static;width:100%;max-width:100%}#thermalPanel .pair{grid-template-columns:1fr 1fr;gap:12px}
 .worker-details{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px}.sensor-detail{grid-column:1/-1;overflow-wrap:anywhere}
 #thermalTitle{overflow-wrap:anywhere;line-height:1.5}form input,form select,form textarea{font-size:16px;min-width:0}form label{min-width:0}
 dialog{padding:20px}.event{overflow-wrap:anywhere}.row{flex-wrap:wrap}.card h3{overflow-wrap:anywhere}
}
@media(max-width:380px){main{padding:14px}#thermalPanel .pair,.pair{grid-template-columns:1fr}header{flex-wrap:wrap}.stats small{line-height:1.5}}

#workerDownload{width:800px;max-width:calc(100vw - 32px);box-sizing:border-box}
#workerDownload h2{font-size:20px;overflow-wrap:anywhere}#downloadGroupID{width:100%;box-sizing:border-box;margin:8px 0;font-family:monospace}#downloadFeedback{margin-left:12px;font-size:12px}
.download-platforms{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin:20px 0}.download-platforms article{border:1px solid var(--line);border-radius:12px;padding:18px}.download-platforms p,.download-platforms li{font-size:13px;line-height:1.7}.download-platforms ol{padding-left:20px}.download-link{display:block;text-align:center;background:var(--accent);color:white;padding:12px;border-radius:8px;text-decoration:none}.download-config{font-size:13px;line-height:1.8}.download-config dt{font-weight:600}.download-config dd{margin:0 0 10px;overflow-wrap:anywhere}
@media(max-width:760px){.download-platforms{grid-template-columns:minmax(0,1fr)}#workerDownload{padding:18px}#workerDownload input{font-size:16px}}

#macInstallCommand{width:100%;box-sizing:border-box;font:13px/1.6 monospace;overflow-wrap:anywhere;resize:vertical}
