*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}:root{--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;--font-mono: "Share Tech Mono", "Inter", sans-serif;--color-primary: #0891b2;--color-primary-strong: #0e7490;--color-primary-soft: rgba(8, 145, 178, .12);--gradient-primary: linear-gradient(135deg, #22d3ee 0%, #0891b2 55%, #0e7490 100%);--gradient-temp: linear-gradient(180deg, #0fb5d6 0%, #0369a1 100%);--color-success: #059669;--color-success-bright: #10b981;--color-heater: #ea580c;--color-heater-bright: #f97316;--color-warning: #d97706;--color-danger: #e11d48;--bg-color: #edf3f7;--bg-accent: rgba(14, 165, 183, .1);--surface: #ffffff;--surface-2: #f3f8fa;--surface-glass: rgba(255, 255, 255, .82);--text-color: #0e2431;--text-light: #5b7280;--border-color: #dde8ee;--border-strong: #c8d8e1;--track: #dbe7ee;--toggle-off: #ccd9e2;--shadow-sm: 0 1px 2px rgba(10, 45, 62, .05), 0 3px 10px rgba(10, 45, 62, .05);--shadow-md: 0 4px 16px rgba(10, 45, 62, .09), 0 2px 5px rgba(10, 45, 62, .05);--shadow-lg: 0 14px 38px rgba(10, 45, 62, .16);--ring: 0 0 0 3px rgba(8, 145, 178, .28);--radius-sm: .65rem;--radius-md: 1rem;--radius-lg: 1.25rem;--radius-xl: 1.75rem;--radius-full: 999px;--border-radius: .75rem;--spacing-xs: .4rem;--spacing-sm: .7rem;--spacing-md: 1.1rem;--spacing-lg: 1.6rem;--spacing-xl: 2.2rem;--font-size-xs: .7rem;--font-size-sm: .78rem;--font-size-md: .88rem;--font-size-lg: 1.05rem;--font-size-xl: 1.25rem;--font-size-2xl: 2.6rem;--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1)}.dark{--color-primary: #2cc9e0;--color-primary-strong: #67e0f2;--color-primary-soft: rgba(44, 201, 224, .16);--gradient-primary: linear-gradient(135deg, #34d9ec 0%, #0891b2 60%, #155e75 100%);--gradient-temp: linear-gradient(180deg, #7ce7f8 0%, #0ea5cf 100%);--color-success: #34d399;--color-success-bright: #34d399;--color-heater: #fb923c;--color-heater-bright: #fb923c;--color-warning: #fbbf24;--color-danger: #fb7185;--bg-color: #07141b;--bg-accent: rgba(34, 211, 238, .08);--surface: #0d212b;--surface-2: #0a1a23;--surface-glass: rgba(10, 28, 37, .78);--text-color: #e4f0f4;--text-light: #8ba6b1;--border-color: rgba(139, 166, 177, .17);--border-strong: rgba(139, 166, 177, .32);--track: #17323f;--toggle-off: #24404f;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .25), 0 3px 10px rgba(0, 0, 0, .2);--shadow-md: 0 4px 18px rgba(0, 0, 0, .35), 0 2px 5px rgba(0, 0, 0, .25);--shadow-lg: 0 16px 42px rgba(0, 0, 0, .5);--ring: 0 0 0 3px rgba(44, 201, 224, .35)}html,body{height:100%;font-family:var(--font-sans);font-size:var(--font-size-md);line-height:1.5;color:var(--text-color);background-color:var(--bg-color);-webkit-tap-highlight-color:transparent;font-feature-settings:"cv02","cv03","cv04","cv11"}body{background-image:radial-gradient(1100px 480px at 50% -12%,var(--bg-accent),transparent 65%);background-attachment:fixed}html.dark,body.dark,html.dark body{color:var(--text-color);background-color:var(--bg-color)}::selection{background:var(--color-primary);color:#fff}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--toggle-off);border-radius:var(--radius-full);border:3px solid transparent;background-clip:content-box}:focus-visible{outline:none;box-shadow:var(--ring);border-radius:var(--radius-sm)}input:-webkit-autofill,input:autofill,textarea:-webkit-autofill,textarea:autofill,select:-webkit-autofill,select:autofill{-webkit-box-shadow:0 0 0 1000px var(--surface) inset;box-shadow:0 0 0 1000px var(--surface) inset;-webkit-text-fill-color:var(--text-color);caret-color:var(--text-color)}#root{height:100%;display:flex;flex-direction:column}.app{min-height:100dvh;display:flex;flex-direction:column}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(28px)}to{opacity:1;transform:translate(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-28px)}to{opacity:1;transform:translate(0)}}@keyframes pulse-dot{0%,to{box-shadow:0 0 #10b9818c}55%{box-shadow:0 0 0 6px #10b98100}}@keyframes pop{0%{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}@keyframes flicker{0%,to{transform:scale(1) rotate(-2deg)}30%{transform:scale(1.12) rotate(2deg)}60%{transform:scale(.96) rotate(-1deg)}}@keyframes drift{0%{transform:translate(0) scale(1)}to{transform:translate(3.5rem,2rem) scale(1.12)}}@keyframes breathe{0%,to{filter:drop-shadow(0 10px 26px rgba(3,105,161,.28))}50%{filter:drop-shadow(0 14px 34px rgba(3,105,161,.42))}}.status-bar{position:sticky;top:0;z-index:20;display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-sm);padding:.55rem clamp(.9rem,4vw,1.5rem);font-size:var(--font-size-xs);font-weight:500;color:var(--text-light);background:var(--surface-glass);backdrop-filter:blur(16px) saturate(150%);-webkit-backdrop-filter:blur(16px) saturate(150%);border-bottom:1px solid var(--border-color)}.status-bar .connection-status{display:inline-flex;align-items:center;gap:.45rem;padding:.25rem .7rem .25rem .55rem;border-radius:var(--radius-full);background:var(--color-success-soft, rgba(16, 185, 129, .12));color:var(--color-success);font-weight:600;letter-spacing:.01em;white-space:nowrap}.status-bar .connection-status:before{content:"";width:.48rem;height:.48rem;border-radius:50%;background:var(--color-success-bright);animation:pulse-dot 2.2s ease-out infinite}.status-bar .connection-status.offline{background:#e11d481a;color:var(--color-danger)}.status-bar .connection-status.offline:before{background:var(--color-danger);animation:none}.status-bar .connection-status.connecting{background:#f59e0b1f;color:var(--color-warning)}.status-bar .connection-status.connecting:before{background:var(--color-warning);animation:pulse-dot 1.4s ease-out infinite}.status-bar .last-update{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:.85}.logout-button{border:1px solid var(--border-strong);border-radius:var(--radius-full);padding:.35rem .9rem;background:transparent;color:var(--color-primary);cursor:pointer;font-family:inherit;font-size:var(--font-size-xs);font-weight:600;min-width:6.5rem;text-align:center;transition:background .2s ease,color .2s ease,border-color .2s ease,transform .15s ease,box-shadow .2s ease}.logout-button:hover{background:var(--gradient-primary);border-color:transparent;color:#fff;box-shadow:0 4px 14px #0891b259}.logout-button:active{transform:scale(.96)}.logout-button:disabled{opacity:.55;cursor:default;transform:none;box-shadow:none}.main-content{flex:1;width:100%;max-width:760px;margin:0 auto;padding:1rem clamp(.9rem,4vw,1.4rem) calc(1.2rem + env(safe-area-inset-bottom));overflow-y:auto;min-height:0}.main-content>*{animation:slideInRight .35s var(--ease-out) both}.main-content.slide-from-left>*{animation-name:slideInLeft}.nav-bar{position:sticky;bottom:0;z-index:20;align-self:center;display:flex;gap:.2rem;margin:0 auto calc(.85rem + env(safe-area-inset-bottom));padding:.35rem;border-radius:var(--radius-full);background:var(--surface-glass);backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);border:1px solid var(--border-color);box-shadow:var(--shadow-lg);flex:0 0 auto}.nav-bar button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;color:var(--text-light);padding:.45rem 1.05rem;font-family:inherit;font-size:var(--font-size-sm);font-weight:500;cursor:pointer;border-radius:var(--radius-full);display:flex;flex-direction:column;align-items:center;gap:.1rem;min-width:4.6rem;transition:color .2s ease,background .25s ease,box-shadow .25s ease,transform .2s var(--ease-spring)}.nav-bar button:hover{color:var(--text-color);background:var(--color-primary-soft)}.nav-bar button.active{background:var(--gradient-primary);color:#fff;font-weight:600;box-shadow:0 6px 18px #0891b266;transform:translateY(-1px)}.nav-bar button:active{transform:scale(.95)}.nav-icon{min-height:1.3rem;font-size:1.25rem;line-height:1;transition:transform .25s var(--ease-spring)}.nav-bar button.active .nav-icon{color:#fff;transform:scale(1.12)}.error-message{display:flex;align-items:center;justify-content:center;gap:var(--spacing-sm);padding:.7rem 1rem;margin-bottom:var(--spacing-sm);border-radius:var(--radius-md);border:1px solid rgba(225,29,72,.22);background:#e11d4812;color:var(--color-danger);font-size:var(--font-size-sm);font-weight:500;text-align:center}.error-dismiss{border:0;background:transparent;color:inherit;cursor:pointer;font-size:1rem;line-height:1;padding:.15rem .3rem;border-radius:var(--radius-full);transition:background .2s ease,opacity .2s ease}.error-dismiss:hover{background:#e11d481f;opacity:1}.error-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:grid;place-items:center;padding:1.5rem;background:#05101673;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);animation:rise .25s var(--ease-out) both}.error-dialog{display:flex;align-items:center;justify-content:space-between;gap:1rem;width:100%;max-width:26rem;padding:1.05rem 1.25rem;border-radius:var(--radius-xl);border:1px solid rgba(225,29,72,.3);background:var(--surface);color:var(--color-danger);font-size:var(--font-size-md);font-weight:500;box-shadow:var(--shadow-lg);animation:pop .3s var(--ease-spring) both}.live-page{display:flex;flex-direction:column;gap:.85rem;max-width:680px;margin:0 auto;padding-bottom:.5rem}.live-page>*{transition:opacity .3s ease,filter .3s ease}.live-page.is-offline>*:not(.error-overlay){opacity:.45;filter:grayscale(.85);pointer-events:none}.live-device-row{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-sm);min-height:3.6rem;padding:.7rem 1.1rem;border-radius:var(--radius-lg);background:var(--surface);border:1px solid var(--border-color);box-shadow:var(--shadow-sm);color:var(--text-light);font-size:var(--font-size-md)}.device-power,.mode-link,.equipment-toggle{border:0;background:transparent;font:inherit}.device-power{display:inline-flex;align-items:center;gap:.65rem;color:var(--text-color);font-size:var(--font-size-md);font-weight:600;cursor:pointer}.device-power:disabled,.equipment-toggle:disabled{cursor:default}.switch-track,.equipment-toggle{position:relative;width:3.4rem;height:1.9rem;border-radius:var(--radius-full);background:var(--toggle-off);display:inline-flex;align-items:center;padding:.18rem;transition:background .25s ease,box-shadow .25s ease}.switch-thumb,.equipment-toggle span{width:1.54rem;height:1.54rem;border-radius:50%;background:#fff;box-shadow:0 2px 5px #0a2d3e4d;transform:translate(0);transition:transform .3s var(--ease-spring),background .25s ease}.device-power.is-on .switch-track,.equipment-toggle.is-on{box-shadow:0 0 0 4px var(--color-primary-soft)}.device-power.is-on .switch-track{background:linear-gradient(135deg,var(--color-success-bright),var(--color-success))}.device-power.is-on .switch-thumb,.equipment-toggle.is-on span{transform:translate(1.5rem);background:#fff}.filter-toggle.is-on{background:linear-gradient(135deg,var(--color-success-bright),var(--color-success))}.heater-toggle.is-on{background:linear-gradient(135deg,var(--color-heater-bright),var(--color-heater))}.live-page.is-offline .switch-track,.live-page.is-offline .equipment-toggle{background:var(--toggle-off);box-shadow:none;cursor:not-allowed}.device-power:disabled .switch-track,.equipment-toggle:disabled{cursor:not-allowed}.device-power.is-locked .switch-thumb,.equipment-toggle.is-locked span{opacity:0}.device-power.is-locked .switch-track:before,.equipment-toggle.is-locked:before{content:"🔒";position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;font-size:.78rem;line-height:1}.live-temperature{display:flex;flex-direction:column;align-items:center;padding:.6rem 0 1rem}.seven-segment-temp{font-family:var(--font-mono);font-size:clamp(11rem,44vw,22rem);font-weight:400;letter-spacing:-.06em;line-height:.85;white-space:nowrap;font-variant-numeric:tabular-nums;position:relative;display:inline-flex;align-items:center;justify-content:center;transform:translate(-.03em);background:var(--gradient-temp);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:breathe 5s ease-in-out infinite}.seven-segment-temp small{position:absolute;right:-.9em;bottom:.32em;font-family:inherit;font-size:.2em;line-height:1;letter-spacing:0}.seven-segment-temp.is-adjusting{animation:temp-adjust-blink 1s steps(1) infinite}@keyframes temp-adjust-blink{0%,49%{opacity:1}50%,to{opacity:.15}}.seven-segment-temp.is-error{background:linear-gradient(180deg,#fb7185,#e11d48);-webkit-background-clip:text;background-clip:text;font-size:clamp(7rem,28vw,14rem);animation:error-blink .8s steps(1) infinite}@keyframes error-blink{0%,49%{opacity:1}50%,to{opacity:.2}}.live-quality.error{color:var(--color-danger);border-color:var(--color-danger)}.live-note.error-note{background:#e11d481f;border-color:#e11d4880;color:var(--color-danger);font-weight:600}.live-quality.adjusting{color:var(--color-primary);border-color:var(--color-primary)}.setpoint-panel.is-adjusting{opacity:.75}.setpoint-panel.is-adjusting .setpoint-range.MuiSlider-root{pointer-events:none}.setpoint-adjusting-badge{font-size:1rem;animation:temp-adjust-blink 1s steps(1) infinite}@media (max-width: 480px){.seven-segment-temp{font-weight:500}}.live-quality{margin-top:.5rem;padding:.3rem .85rem;border-radius:var(--radius-full);border:1px solid currentColor;color:var(--color-warning);font-size:var(--font-size-xs);font-weight:600;letter-spacing:.02em;height:1.8rem;box-sizing:border-box;display:flex;align-items:center;justify-content:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.live-quality:empty{visibility:hidden}.setpoint-panel{padding:.7rem 1.1rem 1.8rem;border-radius:var(--radius-lg);background:var(--surface);border:1px solid var(--border-color);box-shadow:var(--shadow-sm);height:145px;box-sizing:border-box;overflow:hidden}.setpoint-panel.is-locked{opacity:.55}.setpoint-panel.is-locked .setpoint-heading{color:var(--text-light)}.setpoint-panel.is-locked .setpoint-heading:after{content:"🔒";font-size:.85rem;margin-left:auto}.setpoint-panel.is-locked .setpoint-range.MuiSlider-root .MuiSlider-rail,.setpoint-panel.is-locked .setpoint-range.MuiSlider-root .MuiSlider-track{opacity:.5}.setpoint-panel.is-locked .setpoint-range.MuiSlider-root .MuiSlider-thumb{box-shadow:none;border-color:var(--border-strong);cursor:not-allowed}.setpoint-heading{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-sm);margin-bottom:1.6rem;color:var(--text-color);font-size:var(--font-size-md);font-weight:600}.setpoint-heading output{min-width:2.9rem;padding:.35rem .75rem;border-radius:var(--radius-full);background:var(--gradient-primary);color:#fff;text-align:center;font-size:var(--font-size-sm);font-weight:700;box-shadow:0 4px 12px #0891b259;font-variant-numeric:tabular-nums}.setpoint-range{width:100%;margin:.35rem 0 .1rem}.setpoint-range.MuiSlider-root{height:.5rem;border-radius:var(--radius-full);padding:0}.setpoint-range.MuiSlider-root .MuiSlider-rail{color:var(--track);opacity:1;height:.5rem;border-radius:var(--radius-full)}.setpoint-range.MuiSlider-root .MuiSlider-track{border:none;height:.5rem;border-radius:var(--radius-full);background:var(--gradient-primary)}.setpoint-range.MuiSlider-root .MuiSlider-thumb{width:1.25rem;height:1.25rem;margin-top:0;margin-left:0;background:#fff;border:4px solid var(--color-primary);box-shadow:0 3px 10px #0a2d3e59;transition:box-shadow .2s ease,transform .2s var(--ease-spring)}.setpoint-range.MuiSlider-root .MuiSlider-thumb:before{display:none}.setpoint-range.MuiSlider-root .MuiSlider-thumb:after{width:2rem;height:2rem}.setpoint-range.MuiSlider-root .MuiSlider-thumb:hover,.setpoint-range.MuiSlider-root .MuiSlider-thumb.Mui-focusVisible{box-shadow:var(--ring),0 3px 10px #0a2d3e59;transform:translate(-50%,-50%) scale(1.08)}.setpoint-range.MuiSlider-root .MuiSlider-mark{width:.3rem;height:.3rem;border-radius:50%;background:var(--border-strong);opacity:1}.setpoint-range.MuiSlider-root .MuiSlider-markActive{background:#ffffffd9}.setpoint-range.MuiSlider-root .MuiSlider-markLabel{top:calc(100% + 8px);color:var(--text-light);font-size:var(--font-size-xs);font-weight:600}@media (pointer: coarse){.setpoint-range.MuiSlider-root .MuiSlider-markLabel{top:calc(100% + 8px)}}.setpoint-range.MuiSlider-root .MuiSlider-valueLabel{background-color:var(--color-primary);background-image:var(--gradient-primary);color:#fff;font-weight:700;padding:.28rem .7rem;border-radius:var(--radius-sm);box-shadow:0 6px 16px #0891b266}.setpoint-range.MuiSlider-root .MuiSlider-valueLabel:before{display:none}.setpoint-range.MuiSlider-root .MuiSlider-valueLabelCircle,.setpoint-range.MuiSlider-root .MuiSlider-valueLabelLabel{background:transparent;color:inherit;padding:0;font-weight:inherit;border-radius:0}.setpoint-locked-note{margin:.4rem 0 0;font-size:var(--font-size-xs);font-weight:600;color:var(--color-warning);text-align:center;height:1.1rem;line-height:1.1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.auto-heater-bubble{display:flex;align-items:center;gap:.7rem;width:100%;height:3.6rem;box-sizing:border-box;padding:.7rem 1rem;border-radius:var(--radius-md);background:var(--surface-2);border:1px solid var(--border-color);margin-top:.4rem;text-align:left;font-family:inherit;color:var(--text-color);overflow:hidden;transition:border-color .2s ease,box-shadow .2s ease,background .2s ease}.auto-heater-bubble .auto-heater-bubble-body{min-width:0}.auto-heater-bubble .auto-heater-label,.auto-heater-bubble .auto-heater-sub{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.auto-heater-bubble.is-idle{cursor:pointer;border-style:dashed}.auto-heater-bubble.is-greyed{opacity:.6;cursor:pointer;border-style:dashed}.auto-heater-bubble.is-idle:hover,.auto-heater-bubble.is-idle:focus-visible{border-color:var(--color-primary);border-style:solid;background:var(--surface);box-shadow:var(--ring);outline:none}.auto-heater-bubble-icon{font-size:1.2rem;flex:0 0 auto}.auto-heater-bubble-body{display:flex;flex-direction:column;gap:.15rem;flex:1;min-width:0}.auto-heater-bubble-action{font-size:1.3rem;color:var(--text-light);flex:0 0 auto}.auto-heater-bubble-stop{flex:0 0 auto;width:2.2rem;height:2.2rem;border:none;border-radius:var(--radius-full);background:var(--color-danger);color:#fff;font-size:1rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:transform .15s ease,box-shadow .2s ease}.auto-heater-bubble-stop:hover,.auto-heater-bubble-stop:focus-visible{transform:scale(1.08);box-shadow:0 3px 10px #e11d4866;outline:none}.auto-heater-bubble-stop:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.auto-heater-bubble.is-idle:disabled{opacity:.55;cursor:not-allowed;border-style:dashed}.auto-heater-label{font-size:var(--font-size-sm);font-weight:700;color:var(--text-color)}.auto-heater-sub{font-size:var(--font-size-xs);color:var(--text-light)}.auto-heater-bar{height:.5rem;border-radius:var(--radius-full);background:var(--track);overflow:hidden}.auto-heater-bar-fill{height:100%;border-radius:var(--radius-full);background:var(--gradient-primary);transition:width .5s ease}.equipment-list{display:flex;flex-direction:column;gap:.85rem}.equipment-row{display:flex;align-items:center;gap:.9rem;min-height:4.4rem;padding:.85rem 1.1rem;border-radius:var(--radius-lg);background:var(--surface);border:1px solid var(--border-color);box-shadow:var(--shadow-sm);transition:box-shadow .25s ease,transform .25s ease,opacity .25s ease}.equipment-row:hover:not(.is-disabled){box-shadow:var(--shadow-md);transform:translateY(-1px)}.equipment-row.is-disabled{opacity:.45;pointer-events:none}.equipment-row-duo{align-items:stretch;gap:.7rem;padding:0;border:none;background:none;box-shadow:none;margin-top:.4rem}.equipment-row-duo:hover:not(.is-disabled){box-shadow:none;transform:none}.equipment-bubble{flex:1;min-width:0;display:flex;align-items:center;gap:.5rem;box-sizing:border-box;height:4.4rem;padding:.7rem .8rem;border-radius:var(--radius-lg);background:var(--surface);border:1px solid var(--border-color);box-shadow:var(--shadow-sm);overflow:hidden;transition:box-shadow .25s ease,transform .25s ease,opacity .25s ease}.equipment-bubble.is-disabled{opacity:.45;pointer-events:none}.equipment-bubble .equipment-toggle{transform:scale(.85)}.equipment-bubble .equipment-name{min-width:0}.equipment-bubble .equipment-name strong{font-size:var(--font-size-sm)}.equipment-bubble .equipment-name small{font-size:var(--font-size-xs)}.equipment-bubble .row-lock-note{font-size:.65rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:8rem}.equipment-bubble .reached-label{font-size:var(--font-size-md)}.equipment-toggle{flex:0 0 auto;cursor:pointer}.equipment-name{min-width:6.5rem;display:flex;flex-direction:column}.equipment-name strong{color:var(--text-color);font-size:var(--font-size-md);font-weight:600}.equipment-name small{color:var(--text-light);font-size:var(--font-size-xs);font-weight:500}.row-lock-note{color:var(--color-warning);font-size:var(--font-size-xs);line-height:1.25;margin-top:.2rem;min-height:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.reached-label{display:inline-flex;font-size:var(--font-size-xl);line-height:1;white-space:nowrap;filter:drop-shadow(0 3px 8px rgba(10,45,62,.25))}.reached-reached{color:var(--color-success-bright);animation:pulse-dot 2.2s ease-out infinite}.reached-heating{animation:flicker 1.6s ease-in-out infinite}.mode-link{margin-left:auto;display:inline-flex;align-items:center;gap:.35rem;padding:.42rem .8rem;border-radius:var(--radius-full);border:1px solid var(--border-color);background:var(--surface-2);color:var(--text-light);cursor:pointer;font-size:var(--font-size-xs);font-weight:700;letter-spacing:.07em;transition:color .2s ease,border-color .2s ease,background .2s ease,transform .15s ease}.mode-link span{margin:0;font-size:1.05rem;line-height:0;vertical-align:0;transition:transform .2s var(--ease-out)}.mode-link:hover:not(:disabled){color:var(--color-primary);border-color:currentColor;background:var(--color-primary-soft)}.mode-link:hover:not(:disabled) span{transform:translate(2px)}.mode-link:active:not(:disabled){transform:scale(.96)}.mode-link:disabled{opacity:.45;cursor:default}.live-note{margin:.2rem 0 0;align-self:center;padding:.5rem 1.1rem;border-radius:var(--radius-full);background:#d977061a;border:1px dashed rgba(217,119,6,.4);color:var(--color-warning);font-size:var(--font-size-sm);font-weight:500;text-align:center}.stats-page,.settings-page{max-width:680px;margin:0 auto;padding-bottom:.5rem}.stats-page>h1,.settings-page>h1{color:var(--text-color);font-size:1.45rem;font-weight:700;letter-spacing:-.01em;margin-bottom:1rem}.stats-page .stats-nav{display:flex;align-items:center;justify-content:center;gap:.5rem;margin-bottom:1rem}.stats-page .stats-nav-button{width:2.5rem;height:2.5rem;border:1px solid var(--border-color);border-radius:var(--radius-full);background:var(--surface);color:var(--text-light);font-size:1.5rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;box-shadow:var(--shadow-sm);transition:all .2s ease}.stats-page .stats-nav-button:hover:not(:disabled){color:var(--color-primary);border-color:var(--color-primary);background:var(--color-primary-soft);transform:translateY(-1px)}.stats-page .stats-nav-button:active:not(:disabled){transform:scale(.92)}.stats-page .stats-nav-button:disabled{opacity:.35;cursor:not-allowed}.stats-page .stats-period-select{padding:.55rem 1rem;border:1px solid var(--border-color);border-radius:var(--radius-full);background-color:var(--surface);color:var(--text-color);font-family:inherit;font-size:var(--font-size-md);font-weight:500;cursor:pointer;box-shadow:var(--shadow-sm);transition:border-color .2s ease,box-shadow .2s ease}.stats-page .stats-period-select:focus-visible{border-color:var(--color-primary);box-shadow:var(--ring)}.card{background:var(--surface);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:1.05rem 1.2rem}.charts-section{display:flex;flex-direction:column;gap:.85rem}.stats-page .chart-card{margin-bottom:.85rem}.stats-page .chart-card h2,.settings-page h2{display:flex;align-items:center;gap:.5rem;color:var(--text-color);font-size:var(--font-size-md);font-weight:700;margin-bottom:.75rem}.stats-page .chart-card h2:before,.settings-page h2:before{content:"";width:.85rem;height:.85rem;flex:0 0 auto;border-radius:.3rem;background:var(--gradient-primary);box-shadow:0 2px 8px #0891b266}.stats-page .summary-table{width:100%;border-collapse:collapse;margin-top:var(--spacing-sm);font-size:var(--font-size-sm)}.stats-page .summary-table th{background:transparent;color:var(--text-light);font-weight:600;text-transform:uppercase;letter-spacing:.06em;font-size:var(--font-size-xs);padding:.5rem .7rem;text-align:left;border-bottom:2px solid var(--border-color)}.stats-page .summary-table td{padding:.6rem .7rem;border-bottom:1px solid var(--border-color);transition:background .15s ease}.stats-page .summary-table tbody tr:last-child td{border-bottom:0}.stats-page .summary-table tbody tr:hover td{background:var(--surface-2)}.settings-page .settings-section{background:var(--surface);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:.35rem 1.1rem;margin-bottom:.9rem}.settings-page h2{margin-top:.9rem}.settings-page .setting-item{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-md);padding:var(--spacing-md) 0;border-bottom:1px solid var(--border-color)}.settings-page .setting-item:last-child{border-bottom:0}.settings-page .setting-label{font-weight:600;color:var(--text-color);font-size:var(--font-size-md)}.settings-page .setting-description{font-size:var(--font-size-sm);color:var(--text-light);margin:.25rem 0 0;line-height:1.45}.settings-page .setting-value{display:flex;align-items:center;gap:var(--spacing-xs);flex:0 0 auto;font-size:var(--font-size-sm);color:var(--text-light)}.settings-page .setting-value input,.settings-page .setting-value select{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text-color);font-family:inherit;font-size:16px;font-weight:600;padding:.45rem .65rem;transition:border-color .2s ease,box-shadow .2s ease,background .2s ease;max-width:6.5rem}.settings-page .setting-value input:focus-visible,.settings-page .setting-value select:focus-visible{outline:none;border-color:var(--color-primary);background:var(--surface);box-shadow:var(--ring)}.settings-page .system-info{margin-top:var(--spacing-lg)}.settings-page .system-info .info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--spacing-sm)}.settings-page .system-info .info-item{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-sm);padding:.7rem .9rem;border-radius:var(--radius-md);background:var(--surface);border:1px solid var(--border-color);font-size:var(--font-size-sm)}.connection-indicator.online{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .6rem;border-radius:var(--radius-full);background:#10b9811f;color:var(--color-success);font-weight:600}.connection-indicator.online:before{content:"";width:.42rem;height:.42rem;border-radius:50%;background:var(--color-success-bright);animation:pulse-dot 2.2s ease-out infinite}.connection-indicator.offline{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .6rem;border-radius:var(--radius-full);background:#e11d481a;color:var(--color-danger);font-weight:600}.connection-indicator.offline:before{content:"";width:.42rem;height:.42rem;border-radius:50%;background:var(--color-danger)}.settings-theme-button{padding:.5rem 1.05rem;border-radius:var(--radius-full);border:1px solid var(--border-strong);background:var(--surface);color:var(--color-primary);cursor:pointer;font-family:inherit;font-size:var(--font-size-sm);font-weight:600;transition:all .2s ease}.settings-theme-button:hover{background:var(--gradient-primary);border-color:transparent;color:#fff;box-shadow:0 4px 14px #0891b259;transform:translateY(-1px)}.settings-theme-button:active{transform:scale(.96)}.settings-note{font-size:var(--font-size-sm);color:var(--text-light);line-height:1.5}.recharts-wrapper{width:100%;height:280px}.dark .recharts-wrapper text{fill:var(--text-light)}.dark .recharts-wrapper .recharts-cartesian-axis-tick-value{fill:var(--text-light)}.mode-card{border:1px solid var(--border-color);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm);overflow:hidden;transition:border-color .25s ease,box-shadow .25s ease,transform .25s var(--ease-out)}.mode-card:hover:not(.disabled){box-shadow:var(--shadow-md);transform:translateY(-1px)}.mode-card.selected{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-soft),var(--shadow-md)}.mode-card.has-error{border-color:var(--color-danger);box-shadow:0 0 0 3px #e11d481f,var(--shadow-sm)}.mode-card.disabled{opacity:.55;background:var(--surface-2)}.mode-error-banner{background:#e11d4814;color:var(--color-danger);border-bottom:1px solid rgba(225,29,72,.2);padding:.7rem 1rem;font-size:var(--font-size-sm);font-weight:500;line-height:1.4}.mode-info-banner{background:#d9770614;color:var(--color-warning);border-bottom:1px solid rgba(217,119,6,.2);padding:.7rem 1rem;font-size:var(--font-size-sm);font-weight:500;line-height:1.4}.mode-card-button{width:100%;padding:1.05rem 1.1rem;border:none;background:transparent;color:var(--text-color);cursor:pointer;font-family:inherit;font-size:var(--font-size-md);font-weight:400;text-align:left;display:flex;align-items:center;justify-content:space-between;transition:background .2s ease}.mode-card-button:hover:not(:disabled){background:var(--color-primary-soft)}.mode-card-button:disabled{opacity:.6;cursor:default}.mode-card.selected .mode-card-button{font-weight:600}.mode-label{font-weight:inherit}.mode-check{display:inline-grid;place-items:center;width:1.35rem;height:1.35rem;border-radius:50%;background:var(--gradient-primary);color:#fff;font-size:.85rem;box-shadow:0 3px 10px #0891b266;animation:pop .3s var(--ease-spring) both}.mode-expand{display:inline-grid;place-items:center;width:1.6rem;height:1.6rem;margin-left:1rem;border-radius:50%;background:var(--color-primary-soft);color:var(--color-primary);font-size:1.15rem;line-height:1}.mode-description{font-size:var(--font-size-sm);color:var(--text-light);margin-top:.35rem;text-align:left;line-height:1.45}.mode-options{margin-top:.5rem;padding-top:1rem;border-top:1px solid var(--border-color);display:flex;flex-direction:column;gap:.75rem}.mode-options .inline-options{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:.5rem}.mode-options .inline-options>div{flex:1 1 0;min-width:6.5rem}.mode-options label{display:block;font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em;margin-bottom:.3rem;white-space:nowrap;color:var(--text-light)}.mode-options select,.mode-options input{width:100%;padding:.45rem .6rem;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:16px;background:var(--surface-2);color:var(--text-color);transition:border-color .2s ease,box-shadow .2s ease,background .2s ease}.mode-options select:focus-visible,.mode-options input:focus-visible{outline:none;border-color:var(--color-primary);background:var(--surface);box-shadow:var(--ring)}.mode-options select{padding-right:.5rem}.mode-options .block-option{margin-bottom:.25rem}.mode-options .block-option label{font-size:var(--font-size-sm);margin-bottom:.45rem}.mode-options .block-option select,.mode-options .block-option input{padding:.7rem .8rem;font-size:16px}.program-slot{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.7rem;border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--surface-2);transition:border-color .2s ease,box-shadow .2s ease}.program-slot:hover{border-color:var(--border-strong)}.program-slot.has-error{border:1.5px solid var(--color-danger);background:#e11d480f;box-shadow:0 0 0 3px #e11d481a}.program-slot select{flex:1;min-width:0;padding:.5rem .6rem;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:var(--font-size-sm);background-color:var(--surface);color:var(--text-color);transition:border-color .2s ease,box-shadow .2s ease}.program-slot select:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:var(--ring)}.slot-separator{color:var(--text-light);font-size:var(--font-size-sm);font-weight:600}.slot-duration{font-size:var(--font-size-xs);font-weight:600;color:var(--color-primary);background:var(--color-primary-soft);padding:.25rem .55rem;border-radius:var(--radius-full);white-space:nowrap;min-width:3rem;text-align:center;font-variant-numeric:tabular-nums}.slot-remove{display:inline-grid;place-items:center;width:1.8rem;height:1.8rem;background:none;border:none;border-radius:50%;color:var(--text-light);cursor:pointer;font-size:1.15rem;padding:0;line-height:1;transition:background .2s ease,color .2s ease,transform .15s ease}.slot-remove:hover{background:#e11d481f;color:var(--color-danger);transform:scale(1.08)}.slot-remove:active{transform:scale(.9)}.slot-error{background:#e11d4814;color:var(--color-danger);border:1px solid rgba(225,29,72,.25);border-radius:var(--radius-sm);padding:.5rem .85rem;margin-bottom:.5rem;font-size:var(--font-size-xs);font-weight:500;line-height:1.4}.slot-add-button{margin-top:.75rem;padding:.65rem 1rem;border:1.5px dashed var(--color-primary);border-radius:var(--radius-md);background:transparent;color:var(--color-primary);cursor:pointer;font-family:inherit;font-size:var(--font-size-sm);font-weight:600;width:100%;transition:background .2s ease,transform .15s ease,box-shadow .2s ease}.slot-add-button:hover{background:var(--color-primary-soft)}.slot-add-button:active{transform:scale(.98)}.slot-help{font-size:var(--font-size-xs);color:var(--text-light);margin-top:.5rem;line-height:1.4}.slot-extras{flex-basis:100%;display:flex;margin-top:.5rem;padding-top:.5rem;border-top:1px dashed var(--border-color)}.slot-extras-controls{display:flex;flex-wrap:nowrap;align-items:center;justify-content:center;gap:.75rem;width:100%}.slot-icon-button{display:inline-flex;align-items:center;justify-content:center;gap:.3rem;height:2rem;padding:0 .55rem;border:1.5px solid var(--border-strong);border-radius:var(--radius-full);background:var(--surface);color:var(--text-light);font-family:inherit;font-size:var(--font-size-xs);font-weight:600;line-height:1;white-space:nowrap;cursor:pointer;transition:border-color .2s ease,background .2s ease,color .2s ease,transform .15s ease,box-shadow .2s ease}.slot-icon-button:hover{transform:translateY(-1px);box-shadow:var(--shadow-sm)}.slot-icon-button:active{transform:scale(.96)}.slot-icon-button.filter.is-on{border-color:var(--color-primary);background:var(--color-primary-soft);color:var(--color-primary)}.slot-icon-button.heater.is-on{border-color:var(--color-danger);background:#e11d481a;color:var(--color-danger)}.slot-icon-button.danger{margin-left:auto;border-color:transparent;background:transparent;color:var(--text-light);padding:.4rem}.slot-icon-button.danger:hover{color:var(--color-danger);border-color:#e11d484d;background:#e11d480f}.slot-icon-button svg{flex-shrink:0}.slot-extra-temp{display:inline-flex;align-items:center;align-self:center;font-size:var(--font-size-sm);font-weight:600;color:var(--text-color);line-height:1}.slot-extra-temp select{min-width:4.6rem;min-height:2.5rem;width:auto;padding:.45rem 1.6rem .45rem .7rem;border:1.5px solid var(--border-strong);border-radius:var(--radius-sm);font-family:inherit;font-size:.95rem;font-weight:600;line-height:1.4;background-color:var(--surface);color:var(--text-color)}.auth-page{position:relative;overflow:hidden;min-height:100dvh;display:grid;place-items:center;padding:1.5rem;background:var(--bg-color)}.auth-page:before,.auth-page:after{content:"";position:absolute;border-radius:50%;filter:blur(90px);opacity:.5;z-index:0;pointer-events:none}.auth-page:before{width:26rem;height:26rem;top:-9rem;left:-9rem;background:radial-gradient(circle at center,rgba(34,211,238,.4),transparent 70%);animation:drift 13s ease-in-out infinite alternate}.auth-page:after{width:30rem;height:30rem;right:-11rem;bottom:-11rem;background:radial-gradient(circle at center,rgba(59,130,246,.32),transparent 70%);animation:drift 16s ease-in-out infinite alternate-reverse}.dark .auth-page:before,.dark .auth-page:after{opacity:.28}.auth-panel{position:relative;z-index:1;width:min(100%,26rem);padding:2.1rem 1.9rem;border:1px solid var(--border-color);border-radius:var(--radius-xl);background:var(--surface-glass);backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%);box-shadow:var(--shadow-lg);animation:rise .5s var(--ease-out) both}.auth-mark{text-align:center}.auth-mark img{width:4.2rem;height:4.2rem;filter:drop-shadow(0 8px 20px rgba(8,145,178,.35))}.auth-kicker{margin:1rem 0 .3rem;background:var(--gradient-primary);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:var(--color-primary);font-size:.74rem;font-weight:700;letter-spacing:.14em;text-align:center;text-transform:uppercase}.auth-panel h1{margin:0;color:var(--text-color);font-size:1.6rem;font-weight:700;letter-spacing:-.01em;text-align:center}.auth-form{display:grid;gap:1rem;margin-top:1.35rem}.auth-field{display:grid;gap:.4rem}.auth-field label{color:var(--text-light);font-size:.82rem;font-weight:600}.auth-field input{width:100%;padding:.75rem .9rem;border:1.5px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-color);font:inherit;font-size:16px;transition:border-color .2s ease,box-shadow .2s ease}.auth-field input:focus{border-color:var(--color-primary);outline:none;box-shadow:var(--ring)}.auth-field input:-webkit-autofill,.auth-field input:autofill{-webkit-box-shadow:0 0 0 1000px var(--surface) inset;box-shadow:0 0 0 1000px var(--surface) inset;-webkit-text-fill-color:var(--text-color)}.auth-submit{margin-top:.4rem;padding:.85rem 1rem;border:0;border-radius:var(--radius-sm);background:var(--gradient-primary);background-size:150% 150%;color:#fff;cursor:pointer;font:inherit;font-size:var(--font-size-md);font-weight:700;letter-spacing:.01em;box-shadow:0 8px 22px #0891b261;transition:transform .2s var(--ease-spring),box-shadow .25s ease,background-position .4s ease}.auth-submit:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 12px 28px #0891b273;background-position:100% 100%}.auth-submit:active:not(:disabled){transform:scale(.97)}.auth-faceid{margin-top:.75rem;width:100%;padding:.75rem 1rem;border:1.5px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-color);font:inherit;font-size:var(--font-size-sm);font-weight:600;cursor:pointer;transition:border-color .2s ease,background .2s ease,transform .15s ease}.auth-faceid:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-primary-soft)}.auth-faceid:active:not(:disabled){transform:scale(.97)}.auth-faceid:disabled{opacity:.6;cursor:not-allowed}.auth-submit:disabled{cursor:default;opacity:.6;transform:none;box-shadow:none}.auth-error{margin:0;padding:.65rem .8rem;border-radius:var(--radius-sm);border:1px solid rgba(225,29,72,.25);background:#e11d4814;color:var(--color-danger);font-size:.82rem;font-weight:500}.auth-loading{color:var(--color-primary);font-weight:600;animation:rise .4s var(--ease-out) both}@media (max-width: 480px){.reached-label{font-size:var(--font-size-lg)}.setpoint-panel,.live-device-row,.equipment-row{padding-left:.85rem;padding-right:.85rem}.equipment-row-duo{padding-left:0;padding-right:0}.nav-bar button{padding:.45rem .8rem;min-width:4.1rem}.status-bar .last-update{display:none}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
