:root{
  --bg:#f3f6fb;--surface:#fff;--surface-2:#f7f9fc;--ink:#08173a;--muted:#70809b;--line:#e8eef7;
  --blue:#0f6fff;--blue-2:#2d82ff;--blue-soft:#eaf3ff;--green:#15b86b;--danger:#e94949;
  --shadow:0 10px 32px rgba(35,74,132,.09);--r-xl:28px;--r-lg:22px;--r-md:17px;--r-sm:13px;
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink);background:var(--bg)
}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg)}button,input,select{font:inherit}button{cursor:pointer}.hidden{display:none!important}
body{display:flex;justify-content:center}.app-shell{width:100%;max-width:520px;min-height:100vh;background:linear-gradient(180deg,#f8fbff 0,#f5f8fd 55%,#f4f7fb 100%);position:relative;padding-bottom:92px;overflow-x:hidden}
.page{padding:22px 20px 28px}.status-spacer{height:max(6px,env(safe-area-inset-top))}.topline,.row,.device-title,.section-head,.nav,.segmented,.control-row,.scene-row,.node-row{display:flex;align-items:center}.topline{justify-content:space-between;gap:12px}.greeting{font-size:34px;line-height:1.05;margin:10px 0 3px;font-weight:800;letter-spacing:-1.2px}.subtle{color:var(--muted);font-size:14px}.headline{font-size:35px;line-height:1.08;margin:28px 0 16px;font-weight:800;letter-spacing:-1.3px}.icon-btn,.round-btn{border:0;background:var(--surface);box-shadow:var(--shadow);border-radius:999px;width:48px;height:48px;display:grid;place-items:center;color:var(--ink)}.icon-btn.small{width:40px;height:40px;box-shadow:none;border:1px solid var(--line)}
.icon{width:24px;height:24px;display:block}.icon.sm{width:19px;height:19px}.blue-icon{color:var(--blue)}
.chips{display:flex;gap:9px;overflow:auto;padding:1px 0 5px;scrollbar-width:none}.chips::-webkit-scrollbar{display:none}.chip{white-space:nowrap;border:0;background:var(--surface);color:var(--ink);padding:12px 17px;border-radius:16px;box-shadow:0 5px 16px rgba(31,76,143,.05)}.chip.active{background:var(--blue);color:white}
.card{background:rgba(255,255,255,.94);border:1px solid rgba(227,235,247,.9);border-radius:var(--r-lg);box-shadow:var(--shadow)}.feature-card{margin-top:14px;padding:15px}.device-title{gap:11px}.device-icon{width:48px;height:48px;border-radius:15px;background:var(--blue-soft);display:grid;place-items:center;color:var(--blue);flex:none}.device-name{font-weight:750;font-size:16px}.device-meta{color:var(--muted);font-size:13px;margin-top:2px}.spacer{flex:1}.toggle{appearance:none;width:52px;height:30px;border-radius:999px;background:#d6dfeb;position:relative;transition:.2s;border:0}.toggle:before{content:"";width:24px;height:24px;border-radius:50%;background:#fff;position:absolute;left:3px;top:3px;box-shadow:0 2px 8px rgba(0,0,0,.15);transition:.2s}.toggle:checked{background:var(--blue)}.toggle:checked:before{transform:translateX(22px)}
.hero{height:180px;border-radius:18px;overflow:hidden;margin:14px 0 10px;background:#eaf0f8}.hero img{width:100%;height:100%;object-fit:cover;display:block}.scene-mini{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.scene-mini button{border:0;background:var(--surface-2);border-radius:14px;padding:10px 5px;color:var(--ink)}.scene-mini button.active{background:var(--blue-soft);color:#0b57cc}.scene-mini span{display:block;font-size:11px;margin-top:6px}
.section-head{justify-content:space-between;margin:28px 2px 13px}.section-head h2{margin:0;font-size:22px;letter-spacing:-.5px}.link{border:0;background:none;color:var(--blue);padding:8px;font-weight:650}.plus{width:42px;height:42px;border-radius:14px;border:0;background:var(--blue);color:#fff;display:grid;place-items:center;box-shadow:0 8px 18px rgba(15,111,255,.23)}
.list-card{padding:12px 13px;margin-bottom:10px}.device-row{display:flex;align-items:center;gap:11px}.device-row .device-icon{width:42px;height:42px}.power-dot{width:43px;height:43px;border-radius:999px;border:0;background:var(--blue);color:#fff;display:grid;place-items:center}.chev{color:#64748b;margin-left:3px}.quick-grid,.device-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.quick-grid{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:10px}.quick-card,.device-card{padding:14px;min-height:126px}.quick-card{min-height:94px}.device-card{display:flex;flex-direction:column;gap:9px}.device-card-top{display:flex;align-items:flex-start;justify-content:space-between}.device-card .device-icon{width:42px;height:42px}.device-card .foot{margin-top:auto;background:var(--surface-2);border-radius:13px;padding:9px 10px;display:flex;align-items:center;justify-content:space-between;font-size:13px}.online{display:inline-flex;align-items:center;gap:5px;color:var(--muted);font-size:12px}.online:before{content:"";width:7px;height:7px;border-radius:50%;background:#bac5d4}.online.yes:before{background:var(--green)}
.bottom-nav{position:fixed;z-index:20;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,520px);height:84px;padding:9px 12px max(9px,env(safe-area-inset-bottom));background:rgba(255,255,255,.96);backdrop-filter:blur(18px);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(4,1fr)}.bottom-nav button{border:0;background:none;color:#8090a8;font-size:11px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px}.bottom-nav button.active{color:var(--blue);font-weight:700}
.page-title{font-size:25px;font-weight:800;margin:0}.topbar{display:grid;grid-template-columns:48px 1fr 48px;align-items:center;margin:8px 0 18px}.topbar .page-title{text-align:center}.room-hero{height:230px;border-radius:24px;overflow:hidden;box-shadow:var(--shadow)}.room-hero img{width:100%;height:100%;object-fit:cover}
.segmented{gap:9px;margin:8px 0 18px}.segmented button{flex:1;border:0;background:var(--surface);padding:13px 8px;border-radius:17px;color:#52627c;display:flex;align-items:center;justify-content:center;gap:7px;box-shadow:0 6px 20px rgba(44,78,126,.06)}.segmented button.active{background:var(--blue);color:#fff}
.ac-card{padding:17px}.temp-dial{position:relative;height:260px;display:grid;place-items:center;margin-top:8px}.temp-ring{width:230px;height:230px;border-radius:50%;border:15px solid #dceafe;border-left-color:var(--blue);border-top-color:var(--blue);transform:rotate(-35deg);position:absolute}.temp-knob{position:absolute;width:28px;height:28px;background:var(--blue-2);border:5px solid #fff;border-radius:50%;top:28px;right:62px;box-shadow:0 5px 14px rgba(15,111,255,.3)}.temp-value{text-align:center;z-index:1}.temp-value strong{display:block;font-size:51px;letter-spacing:-2px}.temp-value span{color:var(--muted)}.temp-min,.temp-max{position:absolute;bottom:18px;font-size:13px;color:#45556f}.temp-min{left:38px}.temp-max{right:38px}.temp-actions{display:flex;gap:13px;justify-content:center;margin-top:-10px}.circle-action{width:52px;height:52px;border:0;border-radius:50%;background:var(--blue);color:white;display:grid;place-items:center}.temp-step{width:52px;height:52px;border:0;border-radius:50%;background:var(--surface-2);font-size:25px;color:var(--ink)}
.control-row{margin-top:8px;background:var(--surface-2);border-radius:16px;padding:9px 12px;gap:12px}.control-row .divider{width:1px;height:40px;background:var(--line)}.schedule-card{padding:16px;margin-top:16px}.schedule-head{display:flex;align-items:center;gap:10px}.schedule-head h3{margin:0;font-size:19px}.time-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}.time-box{background:var(--surface-2);padding:11px;border-radius:14px}.time-box label{display:block;color:var(--muted);font-size:12px}.time-box input{width:100%;border:0;background:transparent;font-size:17px;font-weight:700;margin-top:4px;color:var(--ink)}
.roller-actions{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-top:20px}.roller-actions button{border:0;border-radius:18px;padding:18px 8px;background:var(--surface);box-shadow:var(--shadow);font-weight:700;color:var(--ink)}.roller-actions button.primary{background:var(--blue);color:white}.big-status{text-align:center;padding:35px 10px}.big-status .device-icon{margin:0 auto 14px;width:68px;height:68px;border-radius:22px}.big-status h2{font-size:28px;margin:0 0 5px}.range{width:100%;accent-color:var(--blue);margin:18px 0}
.scene-list{display:grid;gap:12px}.scene-row{padding:17px;gap:12px}.scene-row .device-icon{width:46px;height:46px}.scene-row button{border:0;background:var(--blue);color:#fff;padding:10px 14px;border-radius:13px;font-weight:700}.node-row{padding:13px 0;border-bottom:1px solid var(--line);gap:10px}.node-row:last-child{border-bottom:0}.badge{display:inline-flex;padding:5px 9px;border-radius:999px;background:var(--blue-soft);color:#0b57cc;font-size:12px;font-weight:700}.badge.green{background:#e8f8f0;color:#0a8b50}.profile-card{padding:18px;margin-top:12px}.danger{color:var(--danger)}
.modal-backdrop{position:fixed;z-index:50;inset:0;background:rgba(8,23,58,.35);display:flex;align-items:flex-end;justify-content:center}.modal{width:min(100%,520px);background:#fff;border-radius:26px 26px 0 0;padding:20px 20px max(24px,env(safe-area-inset-bottom));box-shadow:0 -15px 50px rgba(8,23,58,.15)}.modal h2{margin:0 0 14px}.field{margin:10px 0}.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}.field input,.field select{width:100%;border:1px solid var(--line);background:var(--surface-2);border-radius:13px;padding:12px 13px;color:var(--ink)}.modal-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}.btn{border:0;border-radius:14px;padding:13px 16px;background:var(--surface-2);font-weight:750}.btn.primary{background:var(--blue);color:#fff}.btn.full{width:100%;margin-top:12px}
.login{min-height:100vh;padding:36px 26px;display:flex;flex-direction:column;justify-content:center}.login-logo{width:74px;height:74px;border-radius:24px;background:linear-gradient(135deg,#0f6fff,#65a7ff);display:grid;place-items:center;color:#fff;box-shadow:0 15px 32px rgba(15,111,255,.25)}.login h1{font-size:36px;margin:20px 0 5px;letter-spacing:-1px}.pin{font-size:28px!important;letter-spacing:10px;text-align:center}.login .card{padding:18px;margin-top:22px}.login-error{color:var(--danger);min-height:20px;font-size:13px;margin-top:8px}.toast{position:fixed;z-index:100;left:50%;bottom:100px;transform:translate(-50%,20px);background:#10213f;color:#fff;padding:11px 16px;border-radius:13px;opacity:0;pointer-events:none;transition:.2s;max-width:min(90vw,420px);text-align:center;font-size:13px}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(min-width:700px){body{padding:24px}.app-shell{min-height:calc(100vh - 48px);border-radius:34px;box-shadow:0 25px 70px rgba(30,58,100,.18);overflow:hidden}.bottom-nav{bottom:24px;border-radius:0 0 34px 34px}.modal-backdrop{align-items:center}.modal{border-radius:26px;max-width:480px}}

/* v0.2.0 — lightweight interaction layer */
button,.card,.device-icon,.toggle,.bottom-nav button{transition:transform .16s ease,box-shadow .2s ease,background-color .2s ease,color .2s ease,opacity .2s ease}
button:active,.pressable:active{transform:scale(.975)}
.pressable{cursor:pointer}.offline .device-icon{filter:grayscale(.25)}
.page-enter{animation:pageIn .24s cubic-bezier(.2,.75,.3,1) both}.modal-backdrop{animation:fadeIn .18s ease both}.modal{animation:sheetUp .24s cubic-bezier(.2,.75,.3,1) both}
.hero{display:block;width:100%;border:0;padding:0;cursor:pointer}.hero img{transition:transform .45s ease}.hero:active img{transform:scale(1.015)}
.power-dot{background:#cbd6e6}.power-dot.on,.circle-action.on{background:var(--blue);box-shadow:0 8px 22px rgba(15,111,255,.28)}
.circle-action:not(.on){background:#d7e0ec;color:#6d7e98}.detail-power{margin:22px auto 0}
.quick-name{margin-top:8px}.device-grid-page{margin-top:15px}.span-2{grid-column:1/-1}
.empty-card{background:rgba(255,255,255,.72);border:1px dashed #cfdaea;border-radius:18px;padding:22px;text-align:center;color:var(--muted);font-size:13px}
.search-box{display:flex;align-items:center;gap:9px;margin-top:19px;background:#fff;border:1px solid var(--line);box-shadow:0 8px 24px rgba(31,76,143,.06);border-radius:17px;padding:0 12px;color:#7788a4}.search-box input{border:0;outline:0;background:transparent;min-width:0;flex:1;padding:13px 0;color:var(--ink)}.clear-search{border:0;background:transparent;color:#8795aa;font-size:22px;line-height:1;padding:5px}
.room-hero.compact{height:150px;margin-top:14px;position:relative}.room-hero-label{position:absolute;left:13px;right:13px;bottom:12px;background:rgba(255,255,255,.9);backdrop-filter:blur(10px);border-radius:14px;padding:10px 12px;display:flex;justify-content:space-between;align-items:center}.room-hero-label strong{font-size:15px}.room-hero-label span{font-size:12px;color:var(--muted)}
.scenes-page{margin-top:24px}.scene-row .scene-edit{background:var(--surface-2);color:var(--ink);width:38px;height:38px;padding:0;display:grid;place-items:center}.scene-row button.busy{opacity:.55;pointer-events:none}.scene-row button.busy .icon{animation:spin .65s linear infinite}
.status-card{display:flex;align-items:center;gap:12px}.status-card .device-icon{width:46px;height:46px}.install-btn{display:flex;align-items:center;justify-content:center;gap:8px}.mini-action{width:36px;height:36px;border:0;border-radius:12px;background:var(--surface-2);display:grid;place-items:center;color:var(--ink);padding:0}.small-icon{width:38px;height:38px;border-radius:12px}
.control-block{margin-top:24px;text-align:left}.control-label{display:flex;align-items:center;justify-content:space-between;font-weight:700}.speed-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-top:14px}.speed-grid button{border:0;border-radius:14px;padding:12px 4px;background:var(--surface-2);color:var(--ink);font-weight:800}.speed-grid button.active{background:var(--blue);color:#fff;box-shadow:0 7px 18px rgba(15,111,255,.2)}
.mini-control{width:40px;height:40px}.control-row select{border:0;background:transparent;color:var(--ink);font-weight:700;outline:none}.roller-actions button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px}.roller-actions button .icon{width:21px;height:21px}
.temp-ring{width:230px;height:230px;border:0;background:conic-gradient(from 220deg,var(--blue) 0 calc(var(--temp-p)*.72),#dceafe calc(var(--temp-p)*.72) 72%,transparent 72% 100%);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 15px),#000 calc(100% - 14px));mask:radial-gradient(farthest-side,transparent calc(100% - 15px),#000 calc(100% - 14px));transform:none;position:absolute}.temp-knob{display:none}
.day-pills{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-top:14px}.day-pill input{display:none}.day-pill span{display:grid;place-items:center;height:34px;border-radius:11px;background:var(--surface-2);font-size:11px;color:#6c7d97}.day-pill input:checked+span{background:var(--blue-soft);color:#0b57cc;font-weight:800}
.sensor-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:24px}.sensor-value{background:var(--surface-2);border-radius:16px;padding:14px;text-align:left}.sensor-value span{display:block;font-size:11px;color:var(--muted);text-transform:capitalize}.sensor-value strong{display:block;margin-top:5px;font-size:18px;overflow-wrap:anywhere}
.modal-scroll{max-height:min(88vh,760px);overflow:auto}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.modal-head h2{margin:0}.modal-scroll>.modal-head{position:sticky;top:-20px;z-index:4;margin:-20px -20px 14px;padding:20px;background:rgba(255,255,255,.97);backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}.advanced{margin:14px 0;border:1px solid var(--line);border-radius:15px;padding:0 12px}.advanced summary{cursor:pointer;padding:13px 0;font-weight:700;color:#465875}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.danger-surface{background:#fff1f1;color:var(--danger);display:flex;align-items:center;justify-content:center;gap:7px}.hint-card{background:var(--blue-soft);color:#355679;border-radius:14px;padding:12px 13px;font-size:13px;line-height:1.45}.scene-actions{display:grid;gap:9px}.scene-action-row{display:grid;grid-template-columns:1fr 1fr 36px;gap:7px;align-items:center}.scene-action-row select{width:100%;min-width:0;border:1px solid var(--line);background:var(--surface-2);border-radius:12px;padding:10px;color:var(--ink)}
.is-spinning .icon{animation:fanSpin 1.3s linear infinite;transform-origin:center}.is-glowing{box-shadow:0 0 0 6px rgba(15,111,255,.05),0 8px 24px rgba(15,111,255,.16)}.is-breathing{animation:breathe 1.8s ease-in-out infinite}.online.yes:before{animation:onlinePulse 2s ease-out infinite}
@keyframes pageIn{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes sheetUp{from{transform:translateY(28px);opacity:.7}to{transform:none;opacity:1}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fanSpin{to{transform:rotate(360deg)}}@keyframes breathe{50%{transform:scale(1.04);box-shadow:0 0 0 7px rgba(15,111,255,.05)}}@keyframes onlinePulse{0%{box-shadow:0 0 0 0 rgba(21,184,107,.32)}70%{box-shadow:0 0 0 7px rgba(21,184,107,0)}100%{box-shadow:0 0 0 0 rgba(21,184,107,0)}}
@media(max-width:360px){.page{padding-left:15px;padding-right:15px}.greeting{font-size:30px}.headline{font-size:31px}.quick-grid{gap:8px}.form-grid{grid-template-columns:1fr}.scene-action-row{grid-template-columns:1fr 1fr 34px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* v0.2.1 — command confirmation + guided pairing */
.app-shell{padding-bottom:108px}.page{padding-bottom:42px}
.command-pending{display:inline-flex;align-items:center;gap:6px;color:var(--blue);font-weight:750}.command-pending:before{content:"";width:10px;height:10px;border:2px solid #bcd6ff;border-top-color:var(--blue);border-radius:50%;animation:spin .7s linear infinite}
.device-card:has(.command-pending),.feature-card:has(.command-pending){box-shadow:0 10px 32px rgba(15,111,255,.13)}
.pair-steps{display:flex;align-items:center;justify-content:center;margin:6px 0 16px}.pair-steps span{width:29px;height:29px;border-radius:50%;display:grid;place-items:center;background:var(--blue-soft);color:var(--blue);font-size:12px;font-weight:800}.pair-steps span.done{background:var(--blue);color:white}.pair-steps i{width:42px;height:2px;background:#dce7f6}
.pair-empty{text-align:center;padding:16px 8px 8px}.pair-empty h3{margin:12px 0 5px}.pair-empty p{color:var(--muted);font-size:13px;line-height:1.5;margin:0 auto 12px;max-width:330px}.pair-radar{width:68px;height:68px;border-radius:24px;background:var(--blue-soft);color:var(--blue);display:grid;place-items:center;margin:auto;animation:breathe 1.8s ease-in-out infinite}.field-note{font-size:11px;color:var(--muted);margin-top:6px}.manual-link{background:transparent;color:#60708a}.pair-submit:disabled{opacity:.65;cursor:wait}
@media(prefers-reduced-motion:reduce){.command-pending:before,.pair-radar{animation:none!important}}

/* v0.2.2 — confirmed scene/schedule feedback */
[data-run-scene].busy{opacity:.58;pointer-events:none;position:relative}
[data-run-scene].busy:after{content:"";display:inline-block;width:10px;height:10px;margin-left:6px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .65s linear infinite;vertical-align:-1px}
@media(prefers-reduced-motion:reduce){[data-run-scene].busy:after{animation:none!important}}

/* v0.2.3 Android Hub connection — intentionally small and native-looking. */
.hub-connect{max-width:430px;margin:0 auto;padding-bottom:32px}.radar-logo .icon{animation:hubPulse 1.6s ease-in-out infinite}.hub-list{display:grid;gap:10px;width:100%;margin:18px 0 12px}.hub-candidate{width:100%;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px;text-align:left;border:0;cursor:pointer}.hub-candidate strong,.hub-candidate small{display:block}.hub-candidate small{margin-top:3px;color:var(--muted,#7c8799)}.hub-empty{text-align:center;color:var(--muted,#7c8799);font-size:14px}.hub-manual{width:100%;margin-top:12px}.hub-inline{display:flex;align-items:center;gap:7px;margin:12px 0 2px;padding:8px 11px;border-radius:14px;background:#edf4ff;color:#48627f;font-size:12px}.hub-inline .icon{width:16px}.hub-inline button{margin-left:auto;border:0;background:transparent;color:#1677ff;font-weight:700}.hub-native-card{margin-top:10px}.text-action{width:auto;padding:0 9px;font-weight:700;color:#1677ff}.btn:disabled{opacity:.58;pointer-events:none}@keyframes hubPulse{50%{transform:scale(1.08);opacity:.72}}@media(prefers-reduced-motion:reduce){.radar-logo .icon{animation:none}}

/* v0.2.4 — Smart Install: one compact Web-only sheet for Android/iOS. */
.smart-install-backdrop{position:fixed;z-index:120;inset:0;background:rgba(8,23,58,.38);display:flex;align-items:flex-end;justify-content:center;padding:12px 12px max(12px,env(safe-area-inset-bottom));animation:fadeIn .18s ease both}.smart-install-card{width:min(100%,500px);background:#fff;border-radius:26px;padding:10px 18px 18px;box-shadow:0 24px 70px rgba(8,23,58,.24);animation:sheetUp .24s cubic-bezier(.2,.75,.3,1) both}.install-grabber{width:38px;height:4px;border-radius:99px;background:#d9e1ec;margin:0 auto 12px}.install-head{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:12px}.install-head h2{font-size:20px;line-height:1.15;margin:0 0 4px}.install-app-icon{width:52px;height:52px;border-radius:17px;background:linear-gradient(135deg,#0f6fff,#65a7ff);color:#fff;display:grid;place-items:center;box-shadow:0 10px 24px rgba(15,111,255,.22)}.install-app-icon .icon{width:27px;height:27px}.install-close{font-size:23px;line-height:1}.install-copy{margin:16px 0 4px;padding:13px 14px;border-radius:16px;background:var(--surface-2);color:#44556f;font-size:14px;line-height:1.5}.install-later{background:transparent;color:var(--muted);margin-top:7px}.install-steps{display:grid;gap:9px;background:transparent;padding:8px 0 2px}.install-steps>div{display:grid;grid-template-columns:28px 1fr;gap:9px;align-items:start;background:var(--surface-2);padding:11px 12px;border-radius:14px}.install-steps span{width:25px;height:25px;border-radius:50%;display:grid;place-items:center;background:var(--blue-soft);color:var(--blue);font-weight:800;font-size:12px}.install-btn{margin-top:12px}.install-btn .icon{width:18px;height:18px}
@media(min-width:700px){.smart-install-backdrop{align-items:center}.smart-install-card{border-radius:26px}}
@media(prefers-reduced-motion:reduce){.smart-install-backdrop,.smart-install-card{animation:none!important}}

/* v0.3.3 — Universal IR/Wi-Fi compatibility + ESP32 Firmware Manager */
.remote-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:22px}.remote-btn{min-height:48px}.ha-entity-list{display:grid;gap:8px;margin-top:14px}.ha-entity-list .node-row{padding:10px 0;border-bottom:1px solid var(--line)}.ha-entity-list .node-row:last-child{border-bottom:0}

.install-ca-warning code{display:block;margin-top:8px;font-size:10px;line-height:1.35;word-break:break-all;color:#243752;background:#fff;border:1px solid #dce6f3;border-radius:10px;padding:8px}.install-ca-warning{font-size:12px}

.stack-actions{display:grid;gap:10px;margin:14px 0}.check-row{display:flex;align-items:flex-start;gap:10px;font-size:14px;line-height:1.4;color:var(--muted);padding:8px 2px}.check-row input{margin-top:2px;accent-color:var(--blue)}

/* v0.3.4.1 · ESP32 Firmware Tool Reliability */
.firmware-entry{width:100%;text-align:left;border:0;color:inherit;font:inherit;display:flex;align-items:center;gap:12px;margin:0 0 8px;cursor:pointer}
.firmware-tool-status{display:flex;align-items:center;gap:12px;padding:12px 14px;margin:12px 0;border-radius:18px;background:#fff5f3;border:1px solid #ffd9d1}
.firmware-tool-status>span{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:#ffebe7;color:#c33;font-weight:800}
.firmware-tool-status.ready{background:#f0fbf5;border-color:#d5f2e2}.firmware-tool-status.ready>span{background:#dcf7e8;color:#16834f}
.firmware-port-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.firmware-port-row .mini-action{min-width:52px;height:44px}
.firmware-progress{height:9px;background:#e8eef8;border-radius:999px;overflow:hidden;margin:6px 0 10px}.firmware-progress i{display:block;height:100%;border-radius:inherit;background:#0b6cff;transition:width .25s ease}
.firmware-job-head{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:4px}.firmware-log{margin:14px 0;max-height:250px;overflow:auto;border-radius:16px;background:#10151f;color:#dce7f8;padding:12px;font:12px/1.55 ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;word-break:break-word}
.firmware-error{border-color:#ffd4cf;background:#fff2f0}.firmware-safe-note code{font-size:12px}
@media (prefers-reduced-motion:reduce){.firmware-progress i{transition:none}}
/* v0.3.4.1 · Firmware Tool Reliability */
.firmware-confirm-online{display:flex;align-items:flex-start;gap:10px;margin:12px 0;padding:12px 13px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2);font-size:13px}.firmware-confirm-online input{margin-top:3px}.firmware-confirm-online span{display:grid;gap:3px}.firmware-confirm-online small{color:var(--muted);line-height:1.35}.firmware-verified{background:#eefbf4;border:1px solid #d1f0df;color:#18744a}.firmware-warning{background:#fff8e8;border:1px solid #f7e2ad;color:#7a5b10}
.firmware-detected{color:#16744a;font-weight:650}.firmware-preflight{margin:12px 0;border:1px solid var(--line);border-radius:16px;overflow:hidden;background:#fff}.firmware-preflight-head{padding:11px 13px;background:var(--surface-2);border-bottom:1px solid var(--line)}.firmware-check{display:flex;gap:10px;padding:10px 13px;border-bottom:1px solid var(--line);align-items:flex-start}.firmware-check:last-child{border-bottom:0}.firmware-check>span{display:grid;place-items:center;flex:0 0 24px;width:24px;height:24px;border-radius:50%;font-weight:800;background:#eef3fb;color:#4f6687}.firmware-check>div{display:grid;gap:2px;min-width:0}.firmware-check small{color:var(--muted);line-height:1.35}.firmware-check.ok>span{background:#dcf7e8;color:#16834f}.firmware-check.bad>span{background:#ffe8e5;color:#b83a2f}.firmware-check.warn>span{background:#fff2cf;color:#8a6200}.firmware-action-grid{display:grid;grid-template-columns:1fr 1.2fr;gap:9px;margin-top:12px}.firmware-action-grid .btn{margin-top:0}@media(max-width:390px){.firmware-action-grid{grid-template-columns:1fr}}
.firmware-serial-summary{margin:12px 0;padding:12px 13px;border:1px solid var(--line);border-radius:16px;background:#fbfdff}.firmware-mini-grid{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px}.firmware-mini-status{font-size:12px;padding:6px 9px;border-radius:999px;background:#eef3fb;color:#60728e}.firmware-mini-status.ok{background:#e6f8ef;color:#18744a}.firmware-panic{margin-top:9px;color:#a0362f;font-size:12px;font-weight:700}.firmware-log.compact{max-height:150px;margin-bottom:0}.firmware-serial-summary details{margin-top:10px}.firmware-serial-summary summary{cursor:pointer;color:#3567a8;font-size:12px;font-weight:700}.commission-hero{display:flex;align-items:center;gap:12px;padding:12px 0}.commission-hero>span{display:grid;place-items:center;width:42px;height:42px;border-radius:50%;background:#dcf7e8;color:#16834f;font-size:22px;font-weight:800}.commission-hero h3{margin:0 0 3px}.commission-hero small{color:var(--muted)}.commission-list{display:grid;gap:8px;margin:12px 0}.commission-list label{display:flex;align-items:flex-start;gap:10px;padding:11px 12px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2)}.commission-list input{margin-top:4px}.commission-list span{display:grid;gap:2px}.commission-list small{color:var(--muted);line-height:1.35}

/* v0.3.4.9 · MQTT & Login Reliability Hardening */
.firmware-port-confidence{padding:8px 10px;border-radius:12px;background:#f4f7fb;border:1px solid #e2e9f3}.firmware-port-confidence.high{background:#eefbf4;border-color:#d1f0df;color:#18744a}.firmware-port-confidence.medium{background:#fff8e8;border-color:#f7e2ad;color:#7a5b10}.firmware-port-confidence.low{background:#f5f6f8;border-color:#e1e5eb;color:#667085}
.firmware-recovery{display:grid;gap:4px}.firmware-recovery small{color:inherit;opacity:.86;line-height:1.4}.firmware-recovery.usb{background:#fff8e8;border-color:#f7e2ad}.firmware-recovery.toolchain,.firmware-recovery.compile{background:#eef5ff;border-color:#d5e5ff}.firmware-recovery.network{background:#f3f8ff;border-color:#dce9fb}.firmware-error-detail{margin:10px 0}.firmware-error-detail summary{cursor:pointer;color:#60708a;font-size:12px;font-weight:700}.firmware-error-detail .firmware-error{margin-top:8px}
.commission-hero.ready>span{background:#16834f;color:#fff}.commission-auto{display:grid;gap:8px;margin:12px 0}.commission-status{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:14px;background:#fbfcfe}.commission-status>span{display:grid;place-items:center;flex:0 0 25px;width:25px;height:25px;border-radius:50%;background:#eef3fb;color:#60728e;font-weight:800}.commission-status>div{display:grid;gap:2px;min-width:0}.commission-status small{color:var(--muted);line-height:1.35}.commission-status.ok>span{background:#dcf7e8;color:#16834f}.commission-status.warn>span{background:#fff2cf;color:#8a6200}.commission-status.bad>span{background:#ffe8e5;color:#b83a2f}.commission-status.pending>span{background:#eef3fb;color:#60728e}.commission-section-title{font-size:12px;font-weight:800;color:#60708a;text-transform:uppercase;letter-spacing:.04em;margin:2px 2px 0}.firmware-commission>.btn.full{margin-top:10px}.hardware-gate .commission-status>div{flex:1}.hardware-gate .commission-status>.mini-action{flex:0 0 auto;margin-left:auto;white-space:nowrap}.hardware-gate details{margin:10px 0}.hardware-gate summary{cursor:pointer;font-size:12px;font-weight:700;color:#3567a8}

.first-run-card{margin-top:34px;padding:24px;text-align:center}.first-run-card .first-run-icon{width:58px;height:58px;margin:0 auto 14px;border-radius:18px;display:grid;place-items:center;background:var(--blue-soft);color:var(--blue)}.first-run-card h2{margin:0 0 8px}.first-run-card p{margin:0 0 18px;color:var(--muted);line-height:1.5}.first-run-card .btn+.btn{margin-top:9px}.node-health{display:flex;gap:6px;align-items:center;margin-top:4px;font-size:12px}.node-health span{color:var(--muted)}.node-health.good b{color:var(--green)}.node-health.warn b{color:#9a6a00}.node-health.bad b{color:var(--danger)}

/* v0.3.5.0 · UX Simplification */
:root{--muted:#5f708b}
button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid rgba(15,111,255,.28);outline-offset:2px}
button:disabled,input:disabled,select:disabled{cursor:not-allowed;opacity:.5}
.plus,.mini-action,.scene-edit,.day-pill span{min-width:44px;min-height:44px}
.bottom-nav button{color:#687991;min-height:56px}
.home-head{margin-top:4px}.home-head .greeting{font-size:30px}.home-chips{margin-top:20px}.home-section{margin-top:22px}.home-device-grid{margin-bottom:8px}
.hub-status-btn{position:relative}.hub-status-btn>i{position:absolute;right:8px;top:8px;width:9px;height:9px;border-radius:50%;background:var(--green);border:2px solid #fff}
.home-scenes{padding:12px;background:rgba(255,255,255,.78);border:1px solid var(--line);border-radius:18px}.home-scenes button{min-height:58px}
.device-alert{display:flex;gap:5px;align-items:center;margin-top:5px;font-size:11px;line-height:1.25}.device-alert span{color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:145px}.device-alert.warn b{color:#8a6200}.device-alert.bad b{color:var(--danger)}
.offline [data-power],.offline [data-power-btn]{pointer-events:none}
.tech-settings{margin-top:22px;border:1px solid var(--line);border-radius:20px;background:rgba(255,255,255,.78);overflow:hidden}.tech-settings>summary{list-style:none;display:flex;align-items:center;gap:12px;padding:15px;cursor:pointer}.tech-settings>summary::-webkit-details-marker{display:none}.tech-settings>summary small{display:block;color:var(--muted);font-size:12px;margin-top:2px}.tech-settings[open]>summary .chev{transform:rotate(90deg)}.tech-settings-body{padding:0 12px 12px;border-top:1px solid var(--line)}.compact-head{margin-top:20px}.compact-head h2{font-size:18px}
.alt-actions{margin-top:12px}.alt-actions>summary,.firmware-advanced>summary{cursor:pointer;text-align:center;color:var(--blue);font-weight:750;padding:12px;list-style:none}.alt-actions>summary::-webkit-details-marker,.firmware-advanced>summary::-webkit-details-marker{display:none}.alt-actions[open]>summary,.firmware-advanced[open]>summary{color:#52627c}.tech-node-note{text-align:center;margin-top:8px}
.auto-detect-card{display:grid;grid-template-columns:32px 1fr auto;align-items:center;gap:10px;margin:10px 0 12px;padding:12px;border:1px solid var(--line);border-radius:16px;background:var(--surface-2)}.auto-detect-card>span{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#eef3fb;color:#60728e;font-weight:800}.auto-detect-card.high{background:#eefbf4;border-color:#d1f0df}.auto-detect-card.high>span{background:#d9f4e5;color:#16834f}.auto-detect-card b,.auto-detect-card small{display:block}.auto-detect-card small{color:var(--muted);font-size:12px;margin-top:2px}.firmware-advanced{margin:8px 0 14px;border:1px solid var(--line);border-radius:16px;padding:0 12px;background:#fbfcfe}.firmware-advanced>summary{text-align:left;padding:12px 0}.firmware-advanced[open]>summary{border-bottom:1px solid var(--line)}
.gate-progress{display:grid;gap:2px;margin:14px 0;padding:12px 14px;border-radius:15px;background:var(--surface-2)}.gate-progress span{font-size:12px;color:var(--muted)}.gate-groups{display:grid;gap:10px}.gate-group{padding:13px}.gate-group-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.gate-group-head b,.gate-group-head small{display:block}.gate-group-head small{color:var(--muted);font-size:12px;margin-top:2px}.gate-board-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.gate-board{border:1px solid var(--line);background:var(--surface-2);border-radius:14px;padding:10px 6px;min-height:78px;display:grid;place-items:center;gap:2px;color:var(--ink)}.gate-board>span{font-size:18px;color:#7b8ba3}.gate-board b{font-size:11px;line-height:1.15;text-align:center}.gate-board small{font-size:10px;color:var(--muted)}.gate-board.ok{background:#eefbf4;border-color:#d1f0df}.gate-board.ok>span,.gate-board.ok small{color:#16834f}
@media(max-width:360px){.page{padding-left:16px;padding-right:16px}.greeting{font-size:29px}.home-head .greeting{font-size:27px}.gate-board-grid{gap:6px}.gate-board{padding:9px 4px}.device-alert span{max-width:115px}}
.schedule-card{padding:0;margin-top:16px;overflow:hidden}.schedule-summary{display:flex;align-items:center;gap:10px;padding:15px 16px;cursor:pointer;list-style:none}.schedule-summary::-webkit-details-marker{display:none}.schedule-summary span>small{display:block;color:var(--muted);font-size:12px;margin-top:2px}.schedule-card[open] .schedule-summary{border-bottom:1px solid var(--line)}.schedule-card[open] .schedule-summary .chev{transform:rotate(90deg)}.schedule-body{padding:14px 16px 16px}.schedule-body .schedule-head{margin-bottom:8px}.detail-power:disabled,.roller-actions button:disabled,.segmented button:disabled,.temp-step:disabled{filter:grayscale(.15)}

/* v0.3.5.1 — state consistency + mobile detail polish */
.app-shell{padding-bottom:calc(132px + env(safe-area-inset-bottom))}.page{padding-bottom:calc(58px + env(safe-area-inset-bottom))}.toggle:disabled{opacity:1;background:#cbd5e1}.toggle:checked:disabled{background:#9fb5d3}.toggle:disabled:before{box-shadow:none}.last-known-state{color:#5f708b}.offline .foot{color:#5f708b}.firmware-security-note details{margin-top:8px}.firmware-security-note summary{cursor:pointer;font-weight:700;color:#355679}.firmware-security-note code{font-size:11px}

/* v0.3.5.2 UX state polish: one connectivity authority + neutral offline controls. */
.hub-status-btn>i{background:#f59e0b}.hub-status-btn.ok>i{background:var(--green)}.hub-status-btn.warn>i{background:#f59e0b}
.status-card.warn .device-icon{color:#a16207;background:#fff7df}.status-card.warn .device-name{color:#7c5a12}
.toggle:checked:disabled{background:#cbd5e1}.circle-action.on:disabled,.segmented button.active:disabled,.speed-grid button.active:disabled{background:#cbd5e1!important;color:#64748b!important;box-shadow:none!important}.range:disabled{accent-color:#9aa9bd;opacity:.7}.control-row select:disabled{color:#7b8799}.offline .device-icon{filter:grayscale(.55);box-shadow:none}.offline .foot{background:#f4f6f9}.offline .last-known-state{font-weight:600}.offline .toggle{cursor:not-allowed}
.offline-detail .device-icon{filter:grayscale(.6);box-shadow:none}.offline-detail .temp-ring{border-left-color:#cbd5e1;border-top-color:#cbd5e1}.offline-detail .roller-actions button.primary:disabled{background:#cbd5e1;color:#64748b;box-shadow:none}

/* v0.3.6.1 — Motion Polish: state-driven micro-interactions only. */
.device-icon{position:relative}
button,.pressable,.device-icon,.temp-ring,.temp-value strong,.bottom-nav .icon{transition-timing-function:cubic-bezier(.2,.75,.3,1)}
button:active,.pressable:active{transform:scale(.97)}
.bottom-nav button.active .icon{transform:translateY(-2px) scale(1.04)}
.scene-mini button.busy,.scene-row button.busy{animation:controlPulse .8s ease-in-out infinite}

/* Pending/ACK feedback follows command lifecycle, never click alone. */
.motion-pending .device-icon::before{content:"";position:absolute;inset:-5px;border:2px solid rgba(15,111,255,.22);border-top-color:var(--blue);border-radius:18px;animation:motionSpin .8s linear infinite;pointer-events:none}
.motion-pending .command-pending{display:inline-flex;align-items:center;gap:5px;color:#45698f;font-weight:700}
.motion-pending .command-pending::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--blue);animation:pendingDot .8s ease-in-out infinite}
.motion-confirmed .device-icon::after{content:"✓";position:absolute;right:-6px;top:-7px;display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--green);color:#fff;font-size:12px;font-weight:900;border:2px solid #fff;box-shadow:0 4px 12px rgba(21,184,107,.28);animation:ackPop .65s cubic-bezier(.2,.8,.25,1) both;pointer-events:none}
.motion-failed{animation:motionShake .28s ease-in-out 1}

/* Fan motion speed is derived from confirmed/current device state. */
.is-spinning.fan-speed-1 .icon{animation-duration:1.65s}
.is-spinning.fan-speed-2 .icon{animation-duration:1.25s}
.is-spinning.fan-speed-3 .icon{animation-duration:.9s}
.is-spinning.fan-speed-4 .icon{animation-duration:.7s}
.is-spinning.fan-speed-5 .icon{animation-duration:.55s}

/* AC: calm glow while truly online+on; setpoint change gets one short tick. */
.ac-active .temp-ring{animation:acGlow 2.3s ease-in-out infinite}
.temp-changing .temp-value strong{animation:tempTick .34s cubic-bezier(.2,.8,.25,1) both}

/* Roller visualization follows actual moving + direction state only. */
.roller-moving-up .icon{animation:rollerUp .7s ease-in-out infinite alternate}
.roller-moving-down .icon{animation:rollerDown .7s ease-in-out infinite alternate}

/* Realtime indicator: one ping on recovered/open, slow pulse only while reconnecting. */
.online.yes:before{animation:none}
.hub-status-btn.online-ping>i{animation:hubOnlinePing .72s ease-out 1}
.hub-status-btn.reconnecting>i{animation:hubReconnect 1.15s ease-in-out infinite}

@keyframes motionSpin{to{transform:rotate(360deg)}}
@keyframes pendingDot{50%{opacity:.28;transform:scale(.75)}}
@keyframes ackPop{0%{opacity:0;transform:scale(.45)}45%{opacity:1;transform:scale(1.14)}100%{opacity:0;transform:scale(.92)}}
@keyframes motionShake{0%,100%{transform:none}30%{transform:translateX(-3px)}65%{transform:translateX(3px)}}
@keyframes controlPulse{50%{opacity:.72;transform:scale(.985)}}
@keyframes acGlow{50%{filter:drop-shadow(0 0 9px rgba(15,111,255,.18))}}
@keyframes tempTick{0%{transform:scale(.92);opacity:.7}70%{transform:scale(1.06)}100%{transform:scale(1);opacity:1}}
@keyframes rollerUp{from{transform:translateY(3px)}to{transform:translateY(-3px)}}
@keyframes rollerDown{from{transform:translateY(-3px)}to{transform:translateY(3px)}}
@keyframes hubOnlinePing{0%{box-shadow:0 0 0 0 rgba(21,184,107,.45)}100%{box-shadow:0 0 0 10px rgba(21,184,107,0)}}
@keyframes hubReconnect{50%{opacity:.35;transform:scale(.78)}}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
  .is-spinning .icon,.roller-moving-up .icon,.roller-moving-down .icon,.ac-active .temp-ring,.hub-status-btn.reconnecting>i{animation:none!important}
}

/* v0.3.6.2 — Light/Dark/System theme. */
.theme-card{display:grid;gap:14px}.theme-card-head{display:flex;align-items:center;gap:12px}.theme-choice{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.theme-choice button{min-height:48px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2);color:var(--muted);display:flex;align-items:center;justify-content:center;gap:6px;font-size:12px;font-weight:750}.theme-choice button.active{background:var(--blue);border-color:var(--blue);color:#fff;box-shadow:0 7px 18px rgba(15,111,255,.2)}
html[data-theme="dark"]{
  color-scheme:dark;
  --bg:#08111f;--surface:#111c2d;--surface-2:#162338;--ink:#eef5ff;--muted:#9dafc8;--line:#263750;
  --blue:#2d72d9;--blue-2:#76aaff;--blue-soft:#0d2038;--green:#39d98a;--danger:#ff7474;
  --shadow:0 12px 34px rgba(0,0,0,.28)
}
html[data-theme="dark"],html[data-theme="dark"] body{background:var(--bg);color:var(--ink)}
html[data-theme="dark"] .app-shell{background:linear-gradient(180deg,#0a1423 0,#0b1626 55%,#0a1321 100%)}
html[data-theme="dark"] .card{background:rgba(17,28,45,.96);border-color:var(--line)}
html[data-theme="dark"] .bottom-nav{background:rgba(12,22,37,.96);border-top-color:var(--line)}
html[data-theme="dark"] .bottom-nav button{color:#91a2ba}
html[data-theme="dark"] .bottom-nav button.active{color:#76aaff}
html[data-theme="dark"] .home-scenes,html[data-theme="dark"] .tech-settings{background:rgba(17,28,45,.82);border-color:var(--line)}
html[data-theme="dark"] .modal{background:var(--surface);box-shadow:0 -18px 50px rgba(0,0,0,.42)}
html[data-theme="dark"] .modal-backdrop{background:rgba(1,7,18,.62)}
html[data-theme="dark"] .search-box{background:var(--surface);color:var(--muted)}
html[data-theme="dark"] .room-hero-label{background:rgba(17,28,45,.92)}
html[data-theme="dark"] .empty-card{background:rgba(17,28,45,.72);border-color:#334761}
html[data-theme="dark"] .hero{background:#132238}
html[data-theme="dark"] .scene-mini button.active,html[data-theme="dark"] .badge{background:var(--blue-soft);color:#9dc2ff}
html[data-theme="dark"] .badge.green{background:#123827;color:#72e6aa}
html[data-theme="dark"] .segmented button{color:#b1bfd2}
html[data-theme="dark"] .temp-ring{background:conic-gradient(from 220deg,var(--blue) 0 calc(var(--temp-p)*.72),#223653 calc(var(--temp-p)*.72) 72%,transparent 72% 100%)}
html[data-theme="dark"] .temp-knob{border-color:var(--surface)}
html[data-theme="dark"] .temp-min,html[data-theme="dark"] .temp-max{color:var(--muted)}
html[data-theme="dark"] .chev,html[data-theme="dark"] .clear-search{color:#93a5be}
html[data-theme="dark"] .circle-action:not(.on){background:#26364b;color:#9aacbf}
html[data-theme="dark"] .toggle{background:#35445a}
html[data-theme="dark"] .toggle:disabled,html[data-theme="dark"] .toggle:checked:disabled{background:#334155}
html[data-theme="dark"] .toggle:before{background:#e8eef8}
html[data-theme="dark"] .last-known-state,html[data-theme="dark"] .offline .foot{color:#9dafc8}
html[data-theme="dark"] .offline .foot{background:#142033}
html[data-theme="dark"] .status-card.warn .device-icon{color:#f3c75f;background:#392f19}
html[data-theme="dark"] .status-card.warn .device-name{color:#f3d788}
html[data-theme="dark"] .device-alert.warn b,html[data-theme="dark"] .node-health.warn b{color:#f3c75f}
html[data-theme="dark"] .firmware-security-note summary,html[data-theme="dark"] .firmware-serial-summary summary,html[data-theme="dark"] .hardware-gate summary{color:#91b9f4}
html[data-theme="dark"] .firmware-advanced,html[data-theme="dark"] .firmware-serial-summary,html[data-theme="dark"] .commission-status{background:#101b2c}
html[data-theme="dark"] .firmware-port-confidence,html[data-theme="dark"] .auto-detect-card>span,html[data-theme="dark"] .firmware-mini-status,html[data-theme="dark"] .commission-status>span{background:#1c2a3f;color:#a8b8ce}
html[data-theme="dark"] .auto-detect-card.high,html[data-theme="dark"] .gate-board.ok,html[data-theme="dark"] .firmware-port-confidence.high{background:#123126;border-color:#24533d;color:#72e6aa}
html[data-theme="dark"] .auto-detect-card.high>span,html[data-theme="dark"] .firmware-mini-status.ok,html[data-theme="dark"] .firmware-check.ok>span,html[data-theme="dark"] .commission-status.ok>span{background:#153d2c;color:#72e6aa}
html[data-theme="dark"] .firmware-check.warn>span,html[data-theme="dark"] .commission-status.warn>span{background:#3a3017;color:#f3c75f}
html[data-theme="dark"] .firmware-check.bad>span,html[data-theme="dark"] .commission-status.bad>span{background:#412326;color:#ff9a9a}
html[data-theme="dark"] .firmware-recovery.usb,html[data-theme="dark"] .firmware-port-confidence.medium{background:#332b18;border-color:#5e4a1d;color:#f3c75f}
html[data-theme="dark"] .firmware-recovery.toolchain,html[data-theme="dark"] .firmware-recovery.compile,html[data-theme="dark"] .firmware-recovery.network{background:#102747;border-color:#21446d}
html[data-theme="dark"] .firmware-port-confidence.low{background:#172131;border-color:#2a374a;color:#9dafc8}
html[data-theme="dark"] .gate-board{background:#152237;color:var(--ink)}
html[data-theme="dark"] .gate-board>span{color:#9dafc8}
html[data-theme="dark"] .motion-pending .command-pending{color:#9dc2ff}
html[data-theme="dark"] .motion-confirmed .device-icon::after{border-color:var(--surface)}
html[data-theme="dark"] .hub-status-btn>i{border-color:#0c1625}
html[data-theme="dark"] input,html[data-theme="dark"] select{color-scheme:dark}
html[data-theme="dark"] img{filter:saturate(.92) brightness(.9)}
html[data-theme="dark"] .login-logo,html[data-theme="dark"] .device-icon,html[data-theme="dark"] .icon,html[data-theme="dark"] .room-hero-label{filter:none}

/* Universal IR learning */
.ir-learned{margin-top:14px;border:1px solid var(--line);border-radius:15px;padding:12px;background:var(--surface-2)}
.ir-learned .control-label{margin-bottom:6px}.ir-learned-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-top:1px solid var(--line)}
.ir-learned-row:first-of-type{border-top:0}.ir-learned-row>span{font-size:13px;font-weight:700}.ir-learn-success{margin-top:12px;display:grid;gap:4px}.ir-learn-success span{font-size:12px;opacity:.82}.ir-learn-success .btn{margin-top:7px}
[data-ir-custom-wrap][hidden]{display:none}
html[data-theme="dark"] .ir-learned{background:var(--surface-2)}

.scan-progress{height:8px;border-radius:999px;background:var(--line);overflow:hidden;margin:10px 0 6px}.scan-progress i{display:block;height:100%;border-radius:inherit;background:currentColor;transition:width .2s ease}

/* v0.3.6.15 — lightweight add-device wizard */
.add-source-head{display:flex;align-items:center;justify-content:space-between;margin:16px 2px 8px;color:var(--muted);font-size:12px;font-weight:750}.add-source-head strong{min-width:24px;height:24px;border-radius:999px;background:var(--blue-soft);color:var(--blue);display:grid;place-items:center}.add-source-list{display:grid;gap:8px}.add-source-row{display:flex;align-items:center;gap:10px;padding:11px 12px;border:1px solid var(--line);border-radius:15px;background:var(--surface-2)}.add-source-row .device-name{font-size:14px}.add-source-row .device-meta{font-size:11px;margin-top:2px}.pair-empty.compact{padding:14px 6px 2px}.pair-empty.compact .pair-radar{width:58px;height:58px;border-radius:20px}

/* v0.3.6.16 — Daily UX Core: one-glance health + low-friction recovery. */
.home-health{width:100%;margin:12px 0 13px;border:1px solid var(--line);border-radius:16px;background:var(--surface);color:var(--ink);padding:10px 12px;display:grid;grid-template-columns:10px minmax(0,1fr) 20px;align-items:center;gap:10px;text-align:left;box-shadow:0 5px 16px rgba(31,76,143,.045)}
.home-health .health-dot{width:9px;height:9px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px rgba(21,184,107,.1)}
.home-health span:nth-child(2){min-width:0}.home-health b{display:block;font-size:13px;line-height:1.25}.home-health small{display:block;color:var(--muted);font-size:11px;line-height:1.3;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.home-health .icon{color:var(--muted)}
.home-health.warn .health-dot{background:#f59e0b;box-shadow:0 0 0 4px rgba(245,158,11,.1)}.home-health.bad .health-dot{background:var(--danger);box-shadow:0 0 0 4px rgba(233,73,73,.1)}
html[data-theme="dark"] .home-health{background:rgba(17,28,45,.96);border-color:var(--line)}

/* v0.3.6.22 — Smart Device Onboarding */
.add-source-main{min-width:0;flex:1}.add-source-actions{display:flex;align-items:center;gap:5px;flex:0 0 auto}.primary-mini{background:var(--blue-soft);color:var(--blue)}.compact-hint{padding:10px 12px;margin-bottom:10px}
@media(max-width:430px){.add-source-row{align-items:flex-start}.add-source-actions{flex-direction:column;align-items:stretch}.add-source-actions .mini-action{min-width:62px}}
.firmware-pin-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:9px}.firmware-pin-grid label{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;padding:9px 10px;border:1px solid var(--line);border-radius:13px;background:#fff}.firmware-pin-grid label>span{display:grid;font-size:12px;font-weight:700}.firmware-pin-grid label small{font-size:10px;color:var(--muted);font-weight:600}.firmware-pin-grid select{min-width:92px;padding:8px 28px 8px 9px}.firmware-wiring{margin:10px 0 12px;padding:12px;border:1px solid var(--line);border-radius:15px;background:#fff}.firmware-wiring-head{display:flex;justify-content:space-between;gap:10px;align-items:flex-start;margin-bottom:8px}.firmware-wiring-head small{color:var(--muted);text-align:right}.firmware-component-list{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.firmware-component-list span{font-size:10.5px;padding:5px 7px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line)}.firmware-wire-list{display:grid;gap:6px}.firmware-wire-row{display:grid;grid-template-columns:64px 18px 1fr;gap:6px;align-items:center;font-size:11px;padding:7px 8px;border-radius:10px;background:var(--surface-2)}.firmware-wire-row b{color:var(--blue)}.firmware-wiring ul{margin:9px 0 0;padding-left:18px;color:var(--muted);font-size:11px;line-height:1.45}.firmware-wiring-safe{padding-top:8px;border-top:1px dashed var(--line)}@media(max-width:390px){.firmware-pin-grid{grid-template-columns:1fr}.firmware-wiring-head{display:grid}.firmware-wiring-head small{text-align:left}}
html[data-theme="dark"] .firmware-pin-grid label,html[data-theme="dark"] .firmware-wiring{background:#101b2c}
