:root{color-scheme:dark;--bg:#090e1a;--surface:#10182a;--surface2:#131f35;--border:#233148;--text:#f2f6ff;--muted:#97a8c2;--blue:#768afa;--green:#3bd9a0;--amber:#ffc16d;--red:#fa7189;--panel:#121c2e;--radius:18px}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;-webkit-font-smoothing:antialiased}button,input{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible{outline:2px solid var(--blue);outline-offset:3px}button:disabled{opacity:.5;cursor:not-allowed}.hidden{display:none!important}.app-shell{min-height:100dvh;display:flex}.sidebar{width:248px;flex:none;background:#0e1626;border-right:1px solid #253048;padding:30px 18px 20px;position:sticky;top:0;height:100dvh;display:flex;flex-direction:column}.side-brand{display:flex;align-items:center;gap:11px;padding:0 12px 44px}.logo{width:42px;height:42px;border-radius:12px;background:linear-gradient(140deg,#7587ff,#5b67c8);display:grid;place-items:center;color:#fff;font:bold 32px Arial;box-shadow:0 7px 24px #6476f333}.logo.small{width:34px;height:34px;border-radius:10px;font-size:25px}.side-brand strong{font-weight:800;letter-spacing:1.3px;font-size:19px;display:block;line-height:1.15}.side-brand small,.mobile-brand small{display:block;color:var(--muted);font-size:9px;letter-spacing:1.2px;margin-top:4px}.sidebar-section{margin:0 13px 14px;font-size:10px;color:#6f829e;letter-spacing:1.5px;font-weight:800}.side-link{display:flex;align-items:center;gap:15px;border:0;border-radius:12px;background:transparent;color:var(--muted);height:48px;text-align:left;width:100%;padding:0 14px;margin-bottom:6px;font-weight:600}.side-link:hover{background:#1a2841}.side-link.active{background:#253556;color:#dae2ff}.nav-symbol{font-size:23px;width:27px;text-align:center;color:#a5b9ff}.side-bottom{margin-top:auto;padding:18px 10px;border-top:1px solid #263248;display:flex;align-items:center;gap:10px}.side-bottom b{font-size:12px;display:block}.side-bottom small{font-size:10px;color:var(--muted)}.indicator-circle{width:9px;height:9px;background:var(--green);border-radius:50%;box-shadow:0 0 0 5px #39d9a017}.workspace{min-width:0;flex:1}.topbar{height:72px;border-bottom:1px solid #202d43;background:#0d1423;display:flex;align-items:center;justify-content:space-between;padding:0 39px}.topbar-label{font-size:13px;color:#d5deef;font-weight:650}.crumb{color:#7587a0;margin-left:8px}.top-actions{display:flex;gap:10px;align-items:center}.server-state{display:flex;align-items:center;gap:8px;color:#b6c7da;font-size:12px;margin-right:10px}.pulse{width:7px;height:7px;background:var(--green);border-radius:99px;box-shadow:0 0 0 4px #3bd9a018}.pulse.bad{background:var(--red);box-shadow:0 0 0 4px #fa71891c}.icon-button{height:38px;width:38px;display:grid;place-items:center;border:1px solid #293752;background:#162236;border-radius:11px;color:#c9d6ea}.icon-button svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.mobile-brand{display:none}.content{width:100%;max-width:none;min-width:0;padding:34px 18px 36px;margin:0}.heading-line{display:flex;justify-content:space-between;gap:15px;align-items:flex-end;margin-bottom:28px}.eyebrow{font-size:10px;font-weight:800;letter-spacing:1.5px;color:#91a0fe}.eyebrow-dot{width:6px;height:6px;background:var(--blue);border-radius:50%;display:inline-block;margin-right:6px;vertical-align:middle}h1{font-size:32px;line-height:1.3;letter-spacing:-1px;margin:7px 0 6px;font-weight:780}h1 span{color:#aab5ff}.subtitle,.section-head p{color:var(--muted);margin:0;font-size:13px}.update-label{font-size:12px;color:var(--muted);text-align:right}.update-label b{color:#dde8fa;font-weight:650}.update-label div{font-size:11px;margin-top:2px}.summary-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:30px}.mini-stat{padding:20px 21px;display:flex;gap:15px;align-items:center;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius)}.stat-icon{height:46px;width:46px;border-radius:13px;display:grid;place-items:center;font-size:23px;font-weight:800}.stat-icon.blue{color:#a1afff;background:#647af526}.stat-icon.green{color:var(--green);background:#3bd9a01c}.stat-icon.amber{color:var(--amber);background:#ffc16d18}.mini-label{font-size:12px;color:var(--muted)}.mini-number{font-size:26px;font-weight:770;line-height:1.2;margin-top:2px}.panel-section,.detail-area,.chart-area{margin-top:24px}.section-head{display:flex;justify-content:space-between;gap:18px;align-items:center;margin:0 0 15px}.section-head h2{font-size:19px;letter-spacing:-.25px;font-weight:760;margin:0 0 2px}.section-head h2 span{color:var(--muted);font-weight:550;font-size:15px}.soft-pill{border:1px solid #2b3b55;border-radius:8px;padding:6px 10px;font-size:11px;font-weight:650;color:#a8b6cd;white-space:nowrap}.device-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.device-card{position:relative;padding:21px 22px;border:1px solid #2a3a54;border-radius:20px;background:linear-gradient(135deg,#17253b,#121c2f 65%);color:var(--text);width:100%;text-align:left;min-height:212px;transition:border-color .15s,box-shadow .15s}.device-card:hover{border-color:#596a92}.device-card.selected{border-color:#7387ff;box-shadow:inset 0 0 0 1px #6e82f744,0 0 0 3px #687aff16}.device-top{display:flex;justify-content:space-between;gap:9px;align-items:flex-start}.device-name{font-size:17px;font-weight:760;display:block}.device-id{color:#91a6c2;font-size:11px;display:block;margin-top:3px;overflow:hidden;text-overflow:ellipsis}.status-chip{font-size:11px;font-weight:730;border-radius:40px;padding:5px 9px;background:#3bd9a017;color:#4fe4ad;white-space:nowrap}.status-chip.offline{background:#fa718919;color:#ff9bae}.device-inner{display:flex;align-items:center;justify-content:space-between;margin-top:24px;gap:8px}.device-volt{font-weight:790;font-size:28px;line-height:1.1;letter-spacing:-.6px}.device-volt small{font-size:15px;color:#a7b5cb;font-weight:500}.device-power{display:block;color:#8fa4c0;margin-top:12px;font-size:12px}.soc-ring{--pct:0;flex:none;width:111px;height:111px;border-radius:50%;background:conic-gradient(#43d9ae calc(var(--pct)*1%),#293b55 0);display:grid;place-items:center;box-shadow:0 0 0 6px #1b2b4233}.soc-core{width:91px;height:91px;border-radius:50%;background:#172337;display:flex;flex-direction:column;align-items:center;justify-content:center}.soc-core strong{font-size:26px;line-height:1;font-weight:790}.soc-core small{font-size:10px;color:#8aa0bf;letter-spacing:.6px;margin-top:6px}.device-empty{background:var(--surface);padding:30px;border:1px dashed #31415b;border-radius:16px;color:var(--muted);grid-column:1/-1}.spaced{margin-top:34px}.metrics-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.metric-card{background:#121c2f;border:1px solid var(--border);border-radius:16px;padding:19px;min-width:0}.metric-head{display:flex;align-items:center;justify-content:space-between;color:#9eb1cd;font-size:10px;letter-spacing:.8px;font-weight:750}.metric-glyph{font-size:17px;color:#899cff}.metric-value{font-size:28px;line-height:1.25;white-space:nowrap;letter-spacing:-.5px;font-weight:770;margin-top:15px}.metric-value small{font-size:14px;color:#8396b4;letter-spacing:0;margin-left:4px;font-weight:500}.metric-foot{font-size:11px;color:#8fa1bb;margin-top:6px}.status-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:13px}.status-tile{background:#111b2c;padding:13px 14px;border:1px solid #24324a;border-radius:12px;display:flex;align-items:center;justify-content:space-between;gap:6px;font-size:12px}.status-tile span{color:#94a9c4}.status-tile strong{font-size:12px}.yes{color:#47dda6}.no{color:#f6a4b0}.alarm-box{margin-top:14px;padding:14px 16px;border:1px solid #865946;background:#3a271e;color:#ffd8ad;border-radius:12px;font-size:12px;overflow-wrap:anywhere}.chart-area{border:1px solid var(--border);background:var(--panel);border-radius:19px;padding:23px;margin-top:26px}.chart-section-head{margin:0 0 19px}.range-picker,.metric-picker{display:flex;align-items:center;gap:4px;background:#19263c;border-radius:11px;padding:4px}.range-btn,.metric-btn{border:0;background:transparent;color:#95a9c5;padding:8px 12px;font-size:12px;border-radius:8px;min-height:35px;white-space:nowrap}.range-btn.active,.metric-btn.active{background:#35476a;color:#eff3ff;font-weight:700}.chart-controls{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:11px}.chart-legend{font-size:12px;color:#adbed7;display:flex;align-items:center;gap:8px}.legend-dot{width:8px;height:8px;border-radius:50%;background:#7d91ff}.chart-wrap{position:relative;height:260px;width:100%;overflow:hidden}canvas{display:block;width:100%;height:100%;touch-action:pan-y}.chart-empty{position:absolute;inset:0;display:grid;place-items:center;text-align:center;color:var(--muted);font-size:13px;padding:22px;background:#121c2f}.chart-bottom{display:flex;justify-content:space-between;gap:10px;font-size:11px;color:#8295b1;margin-top:12px}.cell-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:13px}.cell-summary>div{border:1px solid var(--border);border-radius:14px;background:var(--surface);padding:16px}.cell-summary span{display:block;font-size:11px;color:var(--muted)}.cell-summary strong{font-size:22px;display:block;margin-top:7px}.cell-panel{border:1px solid var(--border);background:var(--panel);border-radius:16px;padding:20px}.cell-row{display:grid;grid-template-columns:75px minmax(0,1fr) 90px;gap:12px;align-items:center;padding:8px 0}.cell-row+.cell-row{border-top:1px solid #25304766}.cell-name{font-size:12px;color:#9baecc}.cell-track{height:10px;border-radius:99px;background:#29364c;overflow:hidden}.cell-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,#6e8af1,#47dfb6);min-width:3px}.cell-fill.high{background:linear-gradient(90deg,#f6b35c,#ffc778)}.cell-fill.low{background:linear-gradient(90deg,#7188e6,#95abff)}.cell-value{text-align:right;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}.empty-message{text-align:center;color:var(--muted);padding:24px}.errorbar{background:#36212d;border:1px solid #a15166;color:#ffd1d8;padding:14px 17px;border-radius:12px;margin-bottom:20px;font-size:13px}.footer{display:flex;justify-content:space-between;border-top:1px solid #1e2c42;padding-top:22px;color:#7688a2;font-size:11px;margin-top:36px}.footer-logout{background:transparent;color:#94a7c4;border:0}.mobile-nav{display:none}.login-body{min-height:100dvh;display:grid;place-items:center;padding:24px;background:radial-gradient(ellipse at 50% 10%,#1d2b55 0%,#0b1020 46%,#080e18 100%)}.login-card{width:min(100%,410px);border:1px solid #30415c;background:linear-gradient(160deg,#17243b,#0f192b);border-radius:25px;padding:37px 31px;box-shadow:0 26px 65px #03081770}.login-logo{width:58px;height:58px;border-radius:18px;background:#6c7ef0;font-size:45px;display:grid;place-items:center;margin-bottom:26px}.login-eyebrow{font-size:11px;color:#a6b4ff;font-weight:800;letter-spacing:1.6px}.login-card h1{margin:9px 0;font-size:29px}.login-card p{color:#9eb0cb;font-size:13px;margin:0 0 30px}.login-card label{display:block;margin:17px 0 7px;color:#d1dcef;font-size:12px;font-weight:650}.login-card input{width:100%;height:48px;border:1px solid #344662;background:#0c1525;color:#fff;border-radius:12px;padding:0 13px;font-size:16px}.login-card form button{border:0;border-radius:12px;background:#7185f6;color:white;font-size:15px;font-weight:750;width:100%;height:50px;margin-top:24px;display:flex;justify-content:center;align-items:center;gap:13px}.login-foot{text-align:center;color:#7c91af;margin-top:24px;font-size:11px}.login-error{font-size:12px;border-radius:8px;padding:9px 12px;background:#3e2532;color:#ffc1cb}
@media (max-width:1160px){.sidebar{width:215px}.content{padding:29px 24px}.topbar{padding:0 25px}.metrics-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.status-row{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:780px){.sidebar{display:none}.topbar{height:63px;padding:0 16px}.topbar-label{display:none}.mobile-brand{display:flex;align-items:center;gap:9px}.mobile-brand b{font-size:15px;letter-spacing:.8px}.mobile-brand small{font-size:8px;margin-top:0}.top-actions .logout-desktop{display:none}.server-state{font-size:11px;margin-right:0}.content{padding:24px 16px 100px}.heading-line{align-items:flex-start;margin-bottom:20px}.heading-line h1{font-size:25px}.subtitle{font-size:12px;max-width:250px}.update-label{font-size:11px;margin-top:9px}.update-label div{display:none}.summary-tiles{gap:8px;margin-bottom:22px}.mini-stat{padding:12px 11px;border-radius:13px;gap:9px}.stat-icon{width:34px;height:34px;font-size:19px;border-radius:9px}.mini-label{font-size:10px;line-height:1.25}.mini-number{font-size:22px}.section-head h2{font-size:17px}.section-head p{font-size:11px}.device-grid{gap:11px}.device-card{padding:16px;min-height:185px}.device-inner{margin-top:18px}.device-name{font-size:15px}.device-id{font-size:10px}.device-volt{font-size:24px}.device-volt small{font-size:12px}.soc-ring{width:90px;height:90px}.soc-core{width:72px;height:72px}.soc-core strong{font-size:23px}.soc-core small{font-size:9px}.device-power{font-size:11px;margin-top:10px}.metrics-grid{gap:10px}.metric-card{padding:16px}.metric-value{font-size:25px}.status-row{gap:9px}.chart-area{padding:17px 14px}.chart-wrap{height:235px}.chart-section-head{align-items:flex-start;flex-direction:column;gap:13px}.range-picker{width:100%;justify-content:space-between}.range-btn{flex:1;min-width:0;padding:8px 7px}.mobile-nav{position:fixed;bottom:0;left:0;right:0;z-index:10;background:#10192aef;backdrop-filter:blur(18px);border-top:1px solid #34405b;padding:8px 12px calc(9px + env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(3,1fr);box-shadow:0 -10px 35px #060b1a44}.mobile-nav-link{border:0;background:transparent;color:#8b9cb7;min-height:51px;display:flex;gap:1px;align-items:center;justify-content:center;flex-direction:column;font-size:10px;font-weight:650}.mobile-nav-link span{font-size:23px;line-height:1.35}.mobile-nav-link.active{color:#b7c3ff}.footer{margin-top:27px}.cell-row{grid-template-columns:62px minmax(0,1fr) 72px;gap:9px}}
@media(max-width:520px){.heading-line{flex-direction:column;gap:9px}.update-label{text-align:left;margin:0}.update-label div{display:inline;margin-left:6px}.device-grid{grid-template-columns:1fr}.device-card{min-height:162px;padding:17px 19px}.device-inner{margin-top:14px}.soc-ring{width:101px;height:101px}.soc-core{width:81px;height:81px}.device-volt{font-size:28px}.status-row{grid-template-columns:repeat(2,minmax(0,1fr))}.status-tile{padding:12px 10px;font-size:11px}.chart-controls{align-items:stretch;flex-direction:column;gap:7px}.metric-picker{justify-content:space-between}.metric-btn{flex:1;padding:9px 4px;min-width:0}.chart-legend{align-self:flex-start}.chart-wrap{height:225px}.cell-summary{gap:7px}.cell-summary>div{padding:12px 8px}.cell-summary span{font-size:10px}.cell-summary strong{font-size:17px}.section-head{align-items:flex-start}.cell-panel{padding:14px 11px}.panel-section,.detail-area,.chart-area{margin-top:18px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}

.section-actions,.chart-actions{display:flex;align-items:center;gap:8px}.device-select{background:#18263d;border:1px solid #324461;border-radius:10px;color:#e7edff;padding:10px 12px;min-width:120px;min-height:40px;font-size:12px;max-width:190px}.device-select option{background:#152137;color:#fff}@media(max-width:780px){.chart-actions{width:100%;flex-wrap:wrap}.chart-actions .range-picker{flex:1;min-width:200px}.section-actions{flex-direction:column;align-items:flex-end}.device-select{max-width:155px}}@media(max-width:520px){.chart-actions .device-select{width:100%;max-width:none}.chart-actions .range-picker{width:100%}}

/* v1.6.10: full-width workspace; retain responsive spacing. */
.workspace{width:0;flex:1 1 auto;min-width:0}
.content{width:100%;max-width:none;margin:0;padding-inline:18px}
.device-grid:has(> .device-card:only-child){grid-template-columns:minmax(0,1fr)}
.install-button{height:38px;display:inline-flex;align-items:center;gap:8px;padding:0 13px;background:#243657;border:1px solid #425a83;border-radius:11px;color:#e4ebff;font-size:12px;font-weight:700;white-space:nowrap}
.install-button:hover{background:#31476c}
.install-button svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
@media(max-width:780px){.content{padding-inline:16px}.install-button{padding:0 9px}.install-button span{display:none}.top-actions{gap:7px}}
@media(display-mode:standalone){.install-button{display:none!important}}

/* v1.6.16 - Compact status header and remote BLE controls per JK device. */
.update-strip{display:flex;justify-content:flex-end;align-items:center;margin-bottom:16px;min-height:18px}
.update-strip .update-label{text-align:right;margin:0;font-size:11px}
.update-strip .update-label span{color:var(--muted)}
.device-shell{min-width:0;border:1px solid #293a53;border-radius:20px;background:#131f33;overflow:hidden}
.device-shell .device-card{border:0;border-radius:0;min-height:200px}
.device-shell .device-card.selected{box-shadow:inset 0 0 0 2px #6e82f766}
.device-ble-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;border-top:1px solid #293a53;background:#101a2c;min-height:65px}
.ble-status{font-size:11px;line-height:1.35;color:#acbfd9;min-width:0}
.ble-action{flex-shrink:0;border:1px solid #425a83;background:#283c61;border-radius:10px;color:#e7efff;min-height:40px;padding:8px 12px;font-size:12px;font-weight:700}
.ble-action:hover:not(:disabled){background:#3c5278}
.ble-action.resume{background:#136e56;border-color:#298c6e;color:#f0fff9}
.ble-action.resume:hover:not(:disabled){background:#188765}
@media(max-width:780px){.device-ble-row{flex-wrap:wrap;gap:8px}.ble-action{width:100%}.device-shell .device-card{min-height:170px}}
@media(max-width:520px){.update-strip{justify-content:flex-start}.update-strip .update-label{text-align:left}.device-shell .device-card{min-height:160px}.device-ble-row{flex-wrap:nowrap}.ble-action{width:auto}}
@media(max-width:360px){.device-ble-row{flex-wrap:wrap}.ble-action{width:100%}}

.device-grid:has(> .device-shell:only-child){grid-template-columns:minmax(0,1fr)}
