:root{--primary: #3b82f6;--primary-dark: #2563eb;--primary-light: #60a5fa;--success: #22c55e;--success-light: #86efac;--warning: #f59e0b;--warning-light: #fcd34d;--danger: #ef4444;--danger-light: #fca5a5;--heating: #f97316;--heating-light: #fdba74;--cold: #06b6d4;--cold-light: #67e8f9;--bg: #0f172a;--bg-secondary: #1e293b;--bg-card: #1e293b;--bg-hover: #334155;--text: #f1f5f9;--text-secondary: #94a3b8;--text-muted: #64748b;--border: #334155;--border-light: #475569;--sidebar-width: 240px;--radius: 12px;--radius-sm: 8px;--shadow: 0 4px 6px -1px rgba(0, 0, 0, .3);--shadow-lg: 0 10px 25px -3px rgba(0, 0, 0, .4)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.6}.app{display:flex;min-height:100vh;min-height:100dvh}.mobile-header{display:none;position:fixed;top:0;left:0;right:0;height:60px;background:var(--bg-secondary);border-bottom:1px solid var(--border);padding:0 1rem;align-items:center;justify-content:space-between;z-index:9998}.mobile-header *{pointer-events:auto}.mobile-menu-btn{background:var(--bg-hover);border:2px solid var(--primary);color:var(--text);padding:.75rem;cursor:pointer;z-index:9999;position:relative;-webkit-tap-highlight-color:rgba(59,130,246,.3);touch-action:manipulation;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);transition:background .2s;min-width:44px;min-height:44px;pointer-events:auto!important}.mobile-menu-btn:hover,.mobile-menu-btn:active,.mobile-menu-btn:focus{background:var(--primary);color:#fff;outline:none}.mobile-logo{display:flex;align-items:center;gap:.5rem;color:var(--text);font-weight:700;font-size:1rem}.mobile-logo svg{color:var(--primary)}.mobile-header-spacer{width:40px}.sidebar-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;z-index:150}.sidebar{width:var(--sidebar-width);background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;position:fixed;height:100vh;height:100dvh;z-index:200;transition:transform .3s ease}.sidebar-header{padding:1.5rem;border-bottom:1px solid var(--border)}.logo{display:flex;align-items:center;gap:.75rem;color:var(--text);font-weight:700;font-size:1.1rem}.logo svg{color:var(--primary)}.nav-links{flex:1;padding:1rem .75rem;display:flex;flex-direction:column;gap:.25rem}.nav-link{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;color:var(--text-secondary);text-decoration:none;border-radius:var(--radius-sm);transition:all .2s}.nav-link:hover{background:var(--bg-hover);color:var(--text)}.nav-link.active{background:var(--primary);color:#fff}.nav-divider{height:1px;background:var(--border);margin:.5rem 0}.sidebar-footer{padding:1rem;border-top:1px solid var(--border);text-align:center}.version{color:var(--text-muted);font-size:.75rem}.main-content{flex:1;margin-left:var(--sidebar-width);min-height:100vh;background:var(--bg)}.page-header{background:var(--bg-secondary);border-bottom:1px solid var(--border);padding:1.5rem 2rem;position:sticky;top:0;z-index:50}.header-content{display:flex;justify-content:space-between;align-items:center;max-width:1400px;margin:0 auto}.header-title{display:flex;align-items:center;gap:1rem}.header-title svg{color:var(--primary)}.header-title h1{font-size:1.5rem;font-weight:700}.header-title p{color:var(--text-secondary);font-size:.875rem}.header-actions{display:flex;align-items:center;gap:.75rem}.header-search{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:200px}.header-search svg{color:var(--text-muted);flex-shrink:0}.header-search input{flex:1;background:transparent;border:none;color:var(--text);font-size:.9rem;outline:none;min-width:0}.header-search input::placeholder{color:var(--text-muted)}.header-search:focus-within{border-color:var(--primary)}.btn-primary{display:flex;align-items:center;gap:.5rem;padding:.625rem 1.25rem;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-sm);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.btn-primary:hover:not(:disabled){background:var(--primary-dark)}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{display:flex;align-items:center;gap:.5rem;padding:.625rem 1.25rem;background:var(--bg-hover);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.btn-secondary:hover:not(:disabled){background:var(--border)}.stats-bar{display:flex;gap:1rem;padding:1rem 2rem;background:var(--bg-secondary);border-bottom:1px solid var(--border);overflow-x:auto}.stat-item{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;background:var(--bg);border-radius:var(--radius-sm);cursor:pointer;transition:all .2s;min-width:fit-content}.stat-item:hover{background:var(--bg-hover)}.stat-item.online .stat-value{color:var(--success)}.stat-item.offline .stat-value{color:var(--danger)}.stat-value{font-weight:700;font-size:1.1rem}.stat-label{color:var(--text-secondary);font-size:.75rem}.heating-stats{display:flex;gap:1.5rem;padding:1.5rem 2rem;background:var(--bg-secondary);border-bottom:1px solid var(--border)}.heating-stat{display:flex;align-items:center;gap:.75rem;padding:1rem 1.5rem;background:var(--bg);border-radius:var(--radius)}.heating-stat svg.active{color:var(--heating);animation:pulse 2s infinite}.heating-stat.warning{border:1px solid var(--warning)}.heating-stat.warning svg{color:var(--warning)}.toolbar{display:flex;gap:1rem;padding:1rem 2rem;align-items:center;flex-wrap:wrap}.search-box{display:flex;align-items:center;gap:.5rem;padding:.625rem 1rem;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);flex:1;max-width:400px}.search-box input{flex:1;background:transparent;border:none;color:var(--text);font-size:.875rem;outline:none}.search-box input::placeholder{color:var(--text-muted)}.filter-group{display:flex;align-items:center;gap:.5rem}.filter-group select{padding:.625rem 1rem;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.875rem;cursor:pointer}.view-toggle{display:flex;border:1px solid var(--border);border-radius:var(--radius-sm);overflow:hidden}.view-toggle button{padding:.625rem .75rem;background:var(--bg-secondary);border:none;color:var(--text-secondary);cursor:pointer;transition:all .2s}.view-toggle button:hover{background:var(--bg-hover)}.view-toggle button.active{background:var(--primary);color:#fff}.devices-container{padding:1.5rem 2rem;display:grid;gap:1rem}.devices-container.grid{grid-template-columns:repeat(auto-fill,minmax(350px,1fr))}.devices-container.list{grid-template-columns:1fr}.device-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;transition:all .2s}.device-card:hover{border-color:var(--primary);box-shadow:var(--shadow)}.device-card.offline{opacity:.7;border-color:var(--danger)}.device-card-header{display:flex;align-items:center;gap:1rem;padding:1rem;cursor:pointer}.device-card-icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:var(--bg);border-radius:var(--radius-sm);color:var(--primary)}.device-card-info{flex:1}.device-name{font-weight:600;font-size:.95rem;margin-bottom:.25rem;display:flex;align-items:center;gap:.5rem}.btn-edit-name{background:none;border:none;color:var(--text-muted);padding:.2rem;cursor:pointer;border-radius:4px;opacity:0;transition:all .2s}.device-card:hover .btn-edit-name{opacity:1}.btn-edit-name:hover{background:var(--bg-hover);color:var(--primary)}.device-name-edit{display:flex;align-items:center;gap:.25rem;margin-bottom:.25rem}.device-name-edit input{flex:1;padding:.35rem .5rem;background:var(--bg);border:1px solid var(--primary);border-radius:4px;color:var(--text);font-size:.9rem;font-weight:600}.device-name-edit input:focus{outline:none}.device-name-edit .btn-save,.device-name-edit .btn-cancel{padding:.35rem;border:none;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center}.device-name-edit .btn-save{background:var(--success);color:#fff}.device-name-edit .btn-save:hover{background:#16a34a}.device-name-edit .btn-cancel{background:var(--bg-hover);color:var(--text-muted)}.device-name-edit .btn-cancel:hover{background:var(--danger);color:#fff}.device-meta{display:flex;gap:.75rem;font-size:.75rem;color:var(--text-secondary)}.device-gen{padding:.125rem .5rem;background:var(--bg);border-radius:4px;font-size:.65rem;text-transform:uppercase}.device-gen.gen2{color:var(--success)}.device-gen.gen1{color:var(--text-muted)}.api-clawd-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.125rem .5rem;background:#3b82f633;color:var(--primary);border-radius:4px;font-size:.7rem;font-weight:500}.api-clawd-btn{cursor:pointer;border:none;font:inherit}.api-clawd-btn:hover:not(:disabled){background:#3b82f659}.api-clawd-btn:disabled{opacity:.7;cursor:wait}.device-card-status{display:flex;align-items:center;gap:.5rem;color:var(--text-muted)}.status-online{color:var(--success)}.status-offline{color:var(--danger)}.device-capabilities{display:flex;flex-wrap:wrap;gap:.5rem;padding:0 1rem 1rem}.capability-pill{display:flex;align-items:center;gap:.25rem;padding:.25rem .5rem;background:var(--bg);border-radius:4px;font-size:.7rem;color:var(--text-secondary)}.capability-pill.switch{color:var(--primary-light)}.capability-pill.temp{color:var(--heating-light)}.capability-pill.humidity{color:var(--cold-light)}.capability-pill.power{color:var(--warning-light)}.capability-pill.input{color:var(--success-light)}.device-card-expanded{border-top:1px solid var(--border);padding:1rem}.device-card-toolbar{display:flex;justify-content:flex-end;margin-bottom:1rem}.btn-refresh{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.75rem;cursor:pointer;transition:all .2s}.btn-refresh:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.device-offline-message,.device-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;padding:2rem;color:var(--text-muted)}.device-offline-message svg{color:var(--danger)}.data-section{margin-bottom:1.25rem}.data-section h4{font-size:.75rem;text-transform:uppercase;color:var(--text-muted);margin-bottom:.75rem;letter-spacing:.5px}.switches-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.75rem}.switch-item{background:var(--bg);border-radius:var(--radius-sm);padding:.75rem;display:flex;flex-direction:column;gap:.5rem}.switch-item.on{border:1px solid var(--success)}.switch-item.off{border:1px solid var(--border)}.switch-info{display:flex;justify-content:space-between;align-items:center}.switch-label{font-size:.75rem;color:var(--text-secondary)}.switch-state{font-size:.7rem;font-weight:600;padding:.125rem .375rem;border-radius:4px}.switch-state.on{background:var(--success);color:#fff}.switch-state.off{background:var(--bg-hover);color:var(--text-muted)}.switch-toggle{align-self:center;padding:.5rem;background:transparent;border:none;cursor:pointer;transition:all .2s}.switch-toggle.on{color:var(--success)}.switch-toggle.off{color:var(--text-muted)}.switch-toggle:hover:not(:disabled){transform:scale(1.1)}.switch-power{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:var(--warning);justify-content:center}.sensor-grid{display:flex;gap:1rem}.sensor-item{display:flex;flex-direction:column;align-items:center;gap:.25rem;padding:1rem;background:var(--bg);border-radius:var(--radius-sm);min-width:100px}.sensor-item.temp svg{color:var(--heating)}.sensor-item.humidity svg{color:var(--cold)}.sensor-value{font-size:1.5rem;font-weight:700}.sensor-label{font-size:.7rem;color:var(--text-muted)}.energy-grid{display:flex;flex-wrap:wrap;gap:1rem}.energy-item{display:flex;flex-direction:column;padding:.75rem 1rem;background:var(--bg);border-radius:var(--radius-sm)}.energy-value{font-size:1.25rem;font-weight:700;color:var(--warning)}.energy-label{font-size:.7rem;color:var(--text-muted)}.energy-phases{display:flex;gap:.5rem}.phase-item{display:flex;flex-direction:column;align-items:center;padding:.5rem .75rem;background:var(--bg);border-radius:var(--radius-sm)}.phase-label{font-size:.65rem;color:var(--text-muted)}.phase-value{font-size:.875rem;font-weight:600}.inputs-grid{display:flex;flex-wrap:wrap;gap:.5rem}.input-item{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--bg);border-radius:var(--radius-sm)}.input-item.active{border:1px solid var(--success)}.input-label{font-size:.75rem;color:var(--text-secondary)}.input-state{font-size:.65rem;font-weight:600;color:var(--text-muted)}.input-state.active{color:var(--success)}.system-info .system-grid{display:flex;flex-wrap:wrap;gap:1rem}.system-item{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:var(--text-secondary)}.wifi-rssi{color:var(--text-muted);font-size:.65rem}.dashboard-page{padding-bottom:2rem}.dashboard-hero{background:linear-gradient(135deg,var(--primary-dark) 0%,var(--primary) 100%);padding:2.5rem 2rem;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:2rem}.hero-content{display:flex;align-items:center;gap:1.5rem}.hero-icon{width:80px;height:80px;background:#fff3;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}.hero-text h1{font-size:1.75rem;font-weight:700;margin-bottom:.25rem}.hero-text p{opacity:.9}.hero-stats{display:flex;gap:1.5rem}.hero-stat{display:flex;align-items:center;gap:.75rem;padding:1rem 1.5rem;background:#ffffff26;border-radius:var(--radius);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.stat-icon.online{color:var(--success-light)}.stat-icon.offline{color:var(--danger-light)}.stat-content{display:flex;flex-direction:column}.stat-content .stat-value{font-size:1.25rem;font-weight:700}.stat-content .stat-label{font-size:.75rem;opacity:.8}.section{padding:1.5rem 2rem}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.section-title{display:flex;align-items:center;gap:.5rem;font-size:1.1rem;font-weight:600}.section-link{color:var(--primary);text-decoration:none;font-size:.875rem}.section-link:hover{text-decoration:underline}.quick-access-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem}.quick-card{display:flex;align-items:center;gap:1rem;padding:1.5rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);text-decoration:none;color:var(--text);transition:all .2s}.quick-card:hover{border-color:var(--primary);transform:translateY(-2px);box-shadow:var(--shadow-lg)}.quick-card-icon{width:56px;height:56px;display:flex;align-items:center;justify-content:center;background:var(--bg);border-radius:var(--radius)}.quick-card.heating .quick-card-icon{color:var(--heating)}.quick-card.energy .quick-card-icon{color:var(--warning)}.quick-card.lights .quick-card-icon{color:var(--primary-light)}.quick-card.setup .quick-card-icon{color:var(--text-secondary)}.quick-card-content h3{font-size:1rem;margin-bottom:.25rem}.quick-card-content p{font-size:.8rem;color:var(--text-secondary)}.quick-card-badge{margin-left:auto;padding:.25rem .5rem;background:var(--bg);border-radius:4px;font-size:.7rem;color:var(--text-secondary);display:flex;align-items:center;gap:.25rem}.heating-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem}.heating-grid-dashboard{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem}.dashboard-room-card{display:flex;flex-direction:column;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;text-decoration:none;color:inherit;transition:all .2s;position:relative;overflow:hidden}.dashboard-room-card:hover{border-color:var(--primary);transform:translateY(-2px);box-shadow:var(--shadow)}.dashboard-room-card.heating{border-color:var(--heating)}.dashboard-room-card.heating:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--heating)}.dashboard-room-card.emergency{border-color:var(--warning)}.dashboard-room-card.emergency:before{background:var(--warning)}.dashboard-room-card.off{opacity:.6}.drc-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.drc-header h4{font-size:1rem;font-weight:600;margin:0}.drc-badges{display:flex;gap:.25rem}.drc-badge{font-size:.9rem;padding:.15rem .3rem;border-radius:4px;background:#ffffff1a}.drc-badge.heating{background:#f9731633}.drc-badge.offline{background:#ef444433}.drc-badge.online{background:#22c55e33}.drc-temp{display:flex;align-items:baseline;gap:.75rem;margin-bottom:.75rem}.drc-current{font-size:2.5rem;font-weight:700;line-height:1}.drc-current small{font-size:1.25rem;color:var(--text-secondary)}.drc-current.offline{color:var(--text-muted)}.drc-diff{font-size:.85rem;font-weight:600;padding:.2rem .5rem;border-radius:4px}.drc-diff.warm{background:var(--heating);color:#fff}.drc-diff.cold{background:var(--cold);color:#fff}.drc-diff.ok{background:var(--success);color:#fff}.drc-footer{display:flex;justify-content:space-between;align-items:center;padding-top:.5rem;border-top:1px solid var(--border);font-size:.8rem}.drc-setpoint{color:var(--text-secondary)}.drc-mode{padding:.2rem .5rem;border-radius:4px;font-weight:600;font-size:.7rem;text-transform:uppercase}.drc-mode.auto{background:#3b82f633;color:var(--primary)}.drc-mode.on{background:#f9731633;color:var(--heating)}.drc-mode.off{background:#64748b33;color:var(--text-muted)}.drc-emergency{position:absolute;bottom:0;left:0;right:0;background:var(--warning);color:#000;text-align:center;padding:.25rem;font-size:.7rem;font-weight:600}@media(max-width:768px){.heating-grid-dashboard{grid-template-columns:1fr 1fr;gap:.75rem}.dashboard-room-card{padding:.75rem}.drc-header h4{font-size:.85rem}.drc-current{font-size:1.75rem}.drc-current small{font-size:.9rem}.drc-diff{font-size:.7rem;padding:.15rem .35rem}.drc-footer{font-size:.7rem}}@media(max-width:480px){.heating-grid-dashboard{grid-template-columns:1fr}.drc-temp{flex-wrap:wrap}}.room-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:1rem}.room-card.off{opacity:.6}.room-card.heating{border-color:var(--heating)}.room-card .current-temp{font-size:1.75rem;font-weight:700}.room-card .current-temp.offline{color:var(--text-muted)}.room-card .heating-indicator.active{color:var(--heating)}.room-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.room-header h4{font-size:.95rem}.room-mode{font-size:.65rem;padding:.125rem .5rem;border-radius:4px;text-transform:uppercase;font-weight:600}.room-mode.auto{background:var(--primary);color:#fff}.room-mode.on{background:var(--heating);color:#fff}.room-mode.off{background:var(--bg-hover);color:var(--text-muted)}.room-temp{margin-bottom:.5rem}.current-temp{font-size:1.75rem;font-weight:700}.target-temp{display:block;font-size:.75rem;color:var(--text-secondary)}.room-status{font-size:.75rem}.device-type-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:1rem}.device-type-card{display:flex;align-items:center;gap:.75rem;padding:1rem 1.25rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);transition:all .2s;cursor:pointer}.device-type-card:hover{border-color:var(--primary);transform:translateY(-2px);box-shadow:var(--shadow)}.type-image,.type-icon{width:48px;height:48px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm)}.type-icon{font-size:1.5rem}.type-image img{max-width:100%;max-height:100%;object-fit:contain;filter:drop-shadow(0 2px 4px rgba(0,0,0,.3))}.type-icon{color:var(--primary)}.type-info{display:flex;align-items:baseline;gap:.25rem}.type-count{font-weight:700;font-size:1.5rem;color:var(--primary)}.type-name{font-size:.875rem;color:var(--text-secondary)}.projects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1rem}.project-card{display:flex;align-items:center;gap:1rem;padding:1rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);text-decoration:none;color:var(--text);transition:all .2s}.project-card:hover{border-color:var(--primary)}.project-icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:var(--bg);border-radius:var(--radius-sm);color:var(--primary)}.project-content{flex:1}.project-content h4{font-size:.95rem}.project-content p{font-size:.75rem;color:var(--text-secondary)}.project-status{font-size:.65rem;padding:.25rem .5rem;border-radius:4px}.project-status.active{background:var(--success);color:#fff}.project-status.inactive{background:var(--bg-hover);color:var(--text-muted)}.alert-banner{display:flex;align-items:center;gap:1rem;padding:1rem;border-radius:var(--radius);background:var(--bg-card)}.alert-banner.warning{border:1px solid var(--warning)}.alert-banner.warning svg{color:var(--warning)}.alert-content{flex:1}.alert-content strong{display:block;margin-bottom:.25rem}.alert-content p{font-size:.8rem;color:var(--text-secondary)}.alert-action{padding:.5rem 1rem;background:var(--warning);color:#fff;border-radius:var(--radius-sm);text-decoration:none;font-size:.8rem;font-weight:500}.heating-page,.heating-project-page{padding-bottom:2rem}.heating-project-page .page-header{padding:1.5rem 2rem;background:var(--bg-secondary);border-bottom:1px solid var(--border)}.heating-project-page .header-nav{margin-bottom:1rem}.heating-project-page .back-link{display:inline-flex;align-items:center;gap:.5rem;color:var(--text-secondary);text-decoration:none;font-size:.875rem;transition:color .2s}.heating-project-page .back-link:hover{color:var(--primary)}.heating-project-page .header-content{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem}.heating-project-page .error-container{max-width:500px;margin:3rem auto;text-align:center;padding:3rem}.heating-project-page .error-container svg{color:var(--danger);margin-bottom:1rem}.heating-project-page .error-container h2{margin-bottom:.5rem}.heating-project-page .error-container p{color:var(--text-secondary);margin-bottom:1.5rem}.heating-project-page .error-actions{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}.heating-rooms-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1.5rem;padding:1.5rem 2rem}.heating-room-card{padding:1.5rem}.heating-room-card.disabled{opacity:.6}.heating-room-card .room-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.heating-room-card .room-header h3{font-size:1.125rem;font-weight:600}.mode-badge{display:flex;align-items:center;gap:.25rem;padding:.375rem .75rem;border-radius:var(--radius-sm);font-size:.75rem;font-weight:600;text-transform:uppercase}.mode-badge.auto{background:var(--primary);color:#fff}.mode-badge.on{background:var(--heating);color:#fff}.mode-badge.off{background:var(--bg-hover);color:var(--text-muted)}.temp-section{text-align:center;margin-bottom:1.5rem}.current-setpoint{display:flex;align-items:baseline;justify-content:center;gap:.25rem}.temp-section .temp-value{font-size:3rem;font-weight:700;color:var(--heating)}.temp-section .temp-unit{font-size:1.5rem;color:var(--text-secondary)}.temp-section .temp-label{font-size:.875rem;color:var(--text-muted)}.setpoint-slider{margin-bottom:1.5rem}.setpoint-slider input[type=range]{width:100%;height:8px;background:var(--bg);border-radius:4px;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.setpoint-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:24px;height:24px;background:var(--heating);border-radius:50%;cursor:pointer;border:3px solid white;box-shadow:var(--shadow)}.setpoint-slider input[type=range]:disabled{opacity:.5;cursor:not-allowed}.slider-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--text-muted);margin-top:.5rem}.mode-buttons{display:flex;gap:.5rem;margin-bottom:1.5rem}.mode-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:.375rem;padding:.75rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.mode-btn:hover{background:var(--bg-hover);color:var(--text)}.mode-btn.active{background:var(--primary);border-color:var(--primary);color:#fff}.mode-btn.on.active{background:var(--heating);border-color:var(--heating)}.mode-btn.off.active{background:var(--cold);border-color:var(--cold)}.room-details{border-top:1px solid var(--border);padding-top:1rem}.detail-row{display:flex;justify-content:space-between;padding:.375rem 0;font-size:.875rem}.detail-label{color:var(--text-muted)}.detail-value{font-weight:500}@media(max-width:768px){.heating-rooms-grid{padding:1rem;gap:1rem;grid-template-columns:1fr}.heating-room-card{padding:1rem}.temp-section .temp-value{font-size:2.5rem}.mode-btn{padding:.5rem;font-size:.75rem}.rooms-grid{padding:1rem;gap:1rem;grid-template-columns:1fr}.room-card-large{padding:1rem}.room-card-large .room-title-row h3{font-size:1rem}.room-card-large .room-status-row{gap:.25rem}.status-indicator{font-size:.7rem;padding:.3rem .5rem}.status-indicator svg{width:12px;height:12px}.temp-display{flex-wrap:wrap;gap:.5rem}.temp-value{font-size:2.5rem}.temp-unit{font-size:1.2rem}.data-age{font-size:.65rem;padding:.15rem .4rem}.temp-diff{font-size:.7rem;padding:.2rem .4rem}.temp-chart{margin:.5rem 0;padding:.25rem}.temp-chart-labels{font-size:.6rem}.temp-chart-legend{font-size:.55rem;gap:.5rem}.setpoint-control{margin-bottom:1rem}.setpoint-buttons{gap:.5rem}.btn-setpoint{padding:.4rem .6rem;font-size:.75rem}.setpoint-value{font-size:1.1rem}.mode-buttons{gap:.25rem}.btn-mode{padding:.4rem .6rem;font-size:.7rem}.emergency-info{padding:.5rem;font-size:.75rem}.room-info{flex-wrap:wrap;gap:.5rem}.info-item{font-size:.7rem}.heating-project-page .header-content{flex-direction:column;align-items:flex-start}.heating-stats{flex-wrap:wrap;gap:.75rem;padding:1rem}.heating-stat{flex:1 1 45%;padding:.75rem;gap:.5rem}.heating-stat .stat-value{font-size:1.25rem}.heating-stat .stat-label{font-size:.7rem}.page-header{padding:1rem}.page-header .header-content{flex-direction:column;gap:1rem}.page-header .header-title{flex-direction:row;gap:.75rem}.page-header .header-title h1{font-size:1.25rem}.page-header .header-title p{font-size:.75rem}.page-header .header-actions{width:100%;flex-wrap:wrap;justify-content:flex-start}.page-header .header-actions .btn-primary,.page-header .header-actions .btn-secondary{flex:1;min-width:120px;justify-content:center}.settings-section{margin-bottom:1rem}.settings-content{padding:.75rem}.settings-grid{grid-template-columns:1fr;gap:.75rem}.setting-item label{font-size:.75rem}.setting-item input{padding:.5rem}}.rooms-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:1.5rem;padding:1.5rem 2rem}.room-card-large{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);min-width:0;padding:1.5rem;position:relative;overflow:hidden}.room-card-large.heating{border-color:var(--heating)}.room-card-large.heating:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--heating)}.room-card-large.offline{opacity:.7}.room-card-large .room-header{display:flex;flex-direction:column;gap:.75rem;margin-bottom:1.5rem}.room-card-large h3{font-size:1.1rem;margin:0}.room-badges{display:flex;gap:.5rem}.room-card-large .room-title-row{display:flex;align-items:center;justify-content:space-between;width:100%}.room-card-large .room-status-row{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;width:100%}.badge{display:flex;align-items:center;gap:.25rem;padding:.25rem .5rem;border-radius:4px;font-size:.7rem;font-weight:500}.badge.heating{background:var(--heating);color:#fff}.badge.offline{background:var(--danger);color:#fff}.badge.emergency{background:linear-gradient(135deg,#dc2626,#f97316);color:#fff;animation:emergency-pulse 2s ease-in-out infinite}.badge.emergency.heating{background:linear-gradient(135deg,#dc2626,#f97316)}.badge.emergency.pause{background:linear-gradient(135deg,#64748b,#475569)}@keyframes emergency-pulse{0%,to{opacity:1}50%{opacity:.7}}.emergency-info{background:linear-gradient(135deg,#dc262626,#f9731626);border:1px solid rgba(220,38,38,.4);border-radius:var(--radius-sm);padding:.75rem 1rem;margin-top:.75rem}.emergency-header{display:flex;align-items:center;gap:.5rem;color:#f97316;margin-bottom:.5rem}.emergency-details{display:flex;flex-direction:column;gap:.25rem}.emergency-status{display:flex;align-items:center;justify-content:space-between;gap:1rem}.emergency-status span.heating{color:var(--heating);font-weight:600}.emergency-status span.pause{color:var(--text-secondary);font-weight:600}.emergency-timer{background:#0000004d;padding:.25rem .5rem;border-radius:4px;font-family:SF Mono,monospace;font-size:.85rem}.emergency-schedule{font-size:.8rem;color:var(--text-muted)}.special-mode-control{padding:.75rem 0;border-top:1px solid var(--border)}.special-mode-control label{display:block;font-size:.85rem;font-weight:500;color:var(--text-secondary);margin-bottom:.5rem}.special-mode-buttons{display:flex;gap:.5rem}.btn-special{flex:1;display:flex;align-items:center;justify-content:center;gap:.375rem;padding:.5rem .75rem;border-radius:var(--radius-sm);font-size:.8rem;font-weight:600;cursor:pointer;transition:all .2s;border:2px solid var(--border);background:transparent;color:var(--text-secondary)}.btn-special:hover{border-color:var(--primary);color:var(--primary)}.btn-special.active.boost{background:linear-gradient(135deg,#f97316,#ef4444);border-color:transparent;color:#fff}.btn-special.active.winter{background:linear-gradient(135deg,#06b6d4,#0ea5e9);border-color:transparent;color:#fff}.btn-special.active.off{background:var(--bg-hover);border-color:var(--primary);color:var(--primary)}.boost-info{background:linear-gradient(135deg,#f9731626,#ef444426);border:1px solid rgba(249,115,22,.4);border-radius:var(--radius-sm);padding:.75rem 1rem;margin-top:.75rem}.boost-header{display:flex;align-items:center;gap:.5rem;color:#f97316;margin-bottom:.5rem}.boost-details{display:flex;align-items:center;justify-content:space-between;gap:1rem}.boost-status{color:var(--heating);font-weight:600}.boost-timer{background:#0000004d;padding:.25rem .5rem;border-radius:4px;font-family:SF Mono,monospace;font-size:.85rem}.status-indicator.boost{background:#f9731633;border:1px solid rgba(249,115,22,.5);color:#f97316}.winter-info{background:linear-gradient(135deg,#06b6d426,#0ea5e926);border:1px solid rgba(6,182,212,.4);border-radius:var(--radius-sm);padding:.75rem 1rem;margin-top:.75rem}.winter-header{display:flex;align-items:center;gap:.5rem;color:var(--cold);margin-bottom:.5rem}.winter-details{display:flex;flex-direction:column;gap:.25rem}.winter-status-detail{display:flex;align-items:center;justify-content:space-between;gap:1rem}.winter-status-detail span.heating{color:var(--heating);font-weight:600}.winter-status-detail span.pause{color:var(--text-secondary);font-weight:600}.winter-timer{background:#0000004d;padding:.25rem .5rem;border-radius:4px;font-family:SF Mono,monospace;font-size:.85rem}.winter-schedule{font-size:.8rem;color:var(--text-muted)}.status-indicator.winter{background:#06b6d433;border:1px solid rgba(6,182,212,.5);color:var(--cold)}.temp-chart{margin:.75rem 0;padding:.5rem;background:#0003;border-radius:var(--radius-sm)}.temp-chart svg{display:block;width:100%}.temp-chart-labels .humidity-range{color:var(--cold-light);font-size:.9em}.temp-chart-labels{display:flex;justify-content:space-between;font-size:.7rem;color:var(--text-muted);margin-top:.25rem}.chart-timespan{color:var(--text-secondary)}.temp-chart-empty{padding:1rem;text-align:center;color:var(--text-muted);font-size:.8rem}.temp-chart-legend{display:flex;gap:.75rem;justify-content:center;margin-top:.25rem;font-size:.65rem;color:var(--text-muted)}.legend-item{display:flex;align-items:center;gap:.25rem}.legend-color{width:10px;height:6px;border-radius:2px}.legend-color.heating{background:var(--heating)}.legend-color.idle{background:var(--surface-hover, #334155)}.legend-color.emergency{background:var(--warning)}.legend-color.humidity{background:var(--cold)}.settings-section{margin-bottom:1.5rem;background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border)}.settings-toggle{display:flex;align-items:center;gap:.5rem;width:100%;padding:1rem;background:none;border:none;color:var(--text);font-size:.95rem;font-weight:500;cursor:pointer;text-align:left}.settings-toggle:hover{background:var(--bg-hover)}.toggle-arrow{margin-left:auto;transition:transform .2s;font-size:.8rem;color:var(--text-muted)}.toggle-arrow.open{transform:rotate(180deg)}.settings-content{padding:1rem;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:1rem}.setting-row{display:flex;justify-content:space-between;align-items:center;gap:1rem}.setting-row label{display:flex;flex-direction:column;gap:.25rem}.setting-row label small{color:var(--text-muted);font-size:.75rem}.setting-row input[type=number]{width:80px;padding:.5rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);text-align:center}.setting-group{padding:.75rem;background:#0003;border-radius:var(--radius-sm)}.setting-group h4{margin:0 0 .5rem;font-size:.85rem;color:var(--text-secondary)}.setting-row-inline{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.setting-row-inline label{color:var(--text-muted);font-size:.85rem}.setting-row-inline input{width:60px;padding:.375rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);text-align:center}.setting-row-inline span{color:var(--text-muted);font-size:.8rem}.room-title-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.75rem}.room-title-row h3{margin:0;font-size:1.1rem;font-weight:600}.room-title-actions{display:flex;gap:.25rem}.room-name-input{flex:1;background:var(--bg);border:1px solid var(--primary);border-radius:var(--radius-sm);padding:.25rem .5rem;color:var(--text);font-size:1.1rem;font-weight:600}.room-name-input:focus{outline:none;box-shadow:0 0 0 2px #3b82f64d}.room-status-row{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.status-indicator{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.5rem .75rem;border-radius:var(--radius-sm);font-size:.85rem;font-weight:500}.status-indicator.heating{background:#f9731633;color:var(--heating);border:1px solid rgba(249,115,22,.4)}.status-indicator.idle{background:#64748b33;color:var(--text-secondary);border:1px solid rgba(100,116,139,.4)}.status-indicator.emergency{background:linear-gradient(135deg,#dc262633,#f9731633);color:#f97316;border:1px solid rgba(220,38,38,.5);animation:emergency-pulse 2s ease-in-out infinite}.status-indicator.online{background:#22c55e33;color:var(--success);border:1px solid rgba(34,197,94,.4)}.status-indicator.offline{background:#ef444433;color:var(--danger);border:1px solid rgba(239,68,68,.4)}.status-timer{background:#0000004d;padding:.1rem .4rem;border-radius:4px;font-size:.75rem;font-family:SF Mono,monospace}.temp-display{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem 1rem;margin-bottom:1.5rem;min-width:0}.current-temp-large{display:flex;align-items:baseline}.temp-value{font-size:3.5rem;font-weight:700;line-height:1}.temp-unit{font-size:1.5rem;color:var(--text-secondary)}.temp-unknown{font-size:3.5rem;color:var(--text-muted)}.humidity-display{display:inline-flex;align-items:center;gap:.25rem;color:var(--cold);font-size:.9rem;flex-shrink:0}.temp-diff{padding:.25rem .5rem;border-radius:4px;font-size:.8rem;font-weight:500}.temp-diff.warm{background:var(--heating);color:#fff}.temp-diff.cold{background:var(--cold);color:#fff}.temp-diff.ok{background:var(--success);color:#fff}.data-age{display:flex;align-items:center;gap:.25rem;padding:.2rem .5rem;border-radius:4px;font-size:.75rem;font-weight:500}.data-age.age-green{background:#22c55e33;color:var(--success)}.data-age.age-yellow{background:#f59e0b33;color:var(--warning)}.data-age.age-red{background:#ef444433;color:var(--danger)}.setpoint-control{margin-bottom:1.5rem}.setpoint-control label{display:block;font-size:.75rem;color:var(--text-muted);margin-bottom:.5rem}.setpoint-buttons{display:flex;align-items:center;gap:.75rem}.btn-setpoint{display:flex;align-items:center;gap:.25rem;padding:.5rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);cursor:pointer;transition:all .2s}.btn-setpoint:hover:not(:disabled){background:var(--bg-hover)}.btn-setpoint:disabled{opacity:.5;cursor:not-allowed}.setpoint-value{font-size:1.5rem;font-weight:700;min-width:80px;text-align:center}.mode-control{margin-bottom:1.5rem}.mode-control label{display:block;font-size:.75rem;color:var(--text-muted);margin-bottom:.5rem}.mode-buttons{display:flex;gap:.5rem}.btn-mode{display:flex;align-items:center;gap:.375rem;padding:.5rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;transition:all .2s;font-size:.85rem}.btn-mode:hover:not(:disabled){background:var(--bg-hover)}.btn-mode.active{color:#fff}.btn-mode.active.auto{background:var(--primary);border-color:var(--primary)}.btn-mode.active.on{background:var(--heating);border-color:var(--heating)}.btn-mode.active.off{background:var(--text-muted);border-color:var(--text-muted)}.room-info{display:flex;flex-wrap:wrap;gap:1rem;padding-top:1rem;border-top:1px solid var(--border)}.info-item{display:flex;align-items:center;gap:.375rem;font-size:.75rem;color:var(--text-secondary)}.btn-edit-assignment{display:flex;align-items:center;gap:.375rem;padding:.375rem .75rem;background:transparent;border:1px dashed var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.75rem;cursor:pointer;transition:all .2s;margin-left:auto}.btn-edit-assignment:hover{background:var(--bg-hover);border-color:var(--primary);color:var(--primary)}.edit-assignment-modal{max-width:500px}.form-info-text{margin-bottom:1.5rem;padding:1rem;background:var(--bg);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.875rem;line-height:1.6}.form-info-text strong{color:var(--warning)}.current-assignment{margin-top:1.5rem;padding:1rem;background:var(--bg);border-radius:var(--radius-sm);border:1px solid var(--border)}.current-assignment h4{font-size:.875rem;color:var(--text);margin-bottom:.75rem}.assignment-row{display:flex;justify-content:space-between;padding:.5rem 0;border-bottom:1px solid var(--border)}.assignment-row:last-child{border-bottom:none}.assignment-label{color:var(--text-secondary);font-size:.875rem}.assignment-value{color:var(--text);font-size:.875rem;font-weight:500}.room-loading{position:absolute;top:0;right:0;bottom:0;left:0;background:#0f172acc;display:flex;align-items:center;justify-content:center}.heating-info{margin:2rem;padding:1.5rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius)}.heating-info h4{margin-bottom:1rem}.heating-info ul{list-style:none;display:flex;flex-direction:column;gap:.5rem}.heating-info li{font-size:.875rem;color:var(--text-secondary)}.setup-page{padding-bottom:2rem}.discovery-panel{margin:1rem 2rem;background:var(--bg-card);border:2px solid var(--primary);border-radius:var(--radius);box-shadow:0 0 20px #3b82f626}.discovery-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:linear-gradient(135deg,rgba(59,130,246,.1),transparent);border-bottom:1px solid var(--border)}.discovery-header h3{display:flex;align-items:center;gap:.75rem;font-size:1.1rem;color:var(--primary-light)}.btn-close{background:none;border:none;color:var(--text-muted);font-size:1.5rem;cursor:pointer;line-height:1;padding:.25rem;border-radius:4px;transition:all .2s}.btn-close:hover{color:var(--text);background:var(--bg-hover)}.discovery-content{padding:1.5rem}.discovery-form{display:flex;gap:1rem;align-items:flex-end}.form-group{flex:1;max-width:300px}.form-group label{display:block;font-size:.75rem;color:var(--text-muted);margin-bottom:.5rem;text-transform:uppercase;letter-spacing:.5px}.form-group input{width:100%;padding:.75rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.9rem;font-family:monospace}.form-group input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px #3b82f633}.form-hint{display:block;font-size:.7rem;color:var(--text-muted);margin-top:.5rem}.btn-scan{min-width:180px}.discovery-results{border-top:1px solid var(--border);margin-top:1.5rem;padding-top:1.5rem}.discovery-results-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.discovery-results-header h4{font-size:1rem;color:var(--success)}.all-registered{color:var(--text-muted);font-size:.85rem}.discovered-list{display:flex;flex-direction:column;gap:.5rem;max-height:400px;overflow-y:auto}.discovered-item{display:flex;justify-content:space-between;align-items:center;padding:1rem;background:var(--bg);border-radius:var(--radius-sm);border:1px solid var(--border);transition:all .2s}.discovered-item:hover{border-color:var(--border-light)}.discovered-item.registered{opacity:.6;background:transparent}.discovered-item.just-added{border-color:var(--success);background:#22c55e0d}.discovered-main{display:flex;flex-direction:column;gap:.5rem}.discovered-info{display:flex;gap:.75rem;align-items:center}.discovered-model{font-weight:600;font-size:.95rem}.discovered-details{display:flex;gap:1rem;font-size:.8rem;color:var(--text-muted)}.discovered-ip{font-family:monospace;color:var(--primary-light)}.discovered-mac{font-family:monospace}.discovered-fw{font-size:.75rem}.discovered-gen{font-size:.65rem;padding:.2rem .5rem;border-radius:4px;font-weight:600;text-transform:uppercase}.discovered-gen.gen1{background:var(--warning);color:#000}.discovered-gen.gen2{background:var(--success);color:#000}.discovered-action{flex-shrink:0}.btn-add{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-sm);font-size:.85rem;cursor:pointer;transition:all .2s}.btn-add:hover:not(:disabled){background:var(--primary-dark)}.btn-add:disabled{opacity:.7;cursor:not-allowed}.badge-registered,.badge-added{display:flex;align-items:center;gap:.35rem;font-size:.8rem;padding:.4rem .75rem;border-radius:var(--radius-sm)}.badge-registered{color:var(--text-muted);background:var(--bg-hover)}.badge-added{color:var(--success);background:#22c55e26}.btn-success{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:var(--success);color:#000;border:none;border-radius:var(--radius-sm);font-size:.85rem;font-weight:500;cursor:pointer;transition:all .2s}.btn-success:hover:not(:disabled){background:var(--success-light)}.btn-success:disabled{opacity:.7;cursor:not-allowed}.btn-sm{padding:.4rem .75rem;font-size:.8rem}.success-banner{display:flex;align-items:center;gap:.75rem;margin:0 2rem 1rem;padding:.75rem 1rem;background:#22c55e26;border:1px solid var(--success);border-radius:var(--radius-sm);color:var(--success)}.success-banner button{margin-left:auto;background:none;border:none;color:var(--success);font-size:1.25rem;cursor:pointer;padding:.25rem;line-height:1}.toolbar-spacer{flex:1}.btn-secondary.active{background:var(--primary);color:#fff;border-color:var(--primary)}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem 2rem;color:var(--text-muted);text-align:center}.empty-state svg{margin-bottom:1rem;opacity:.5}.error-banner{display:flex;align-items:flex-start;gap:.75rem;padding:.75rem 1rem;margin:1rem 2rem;background:#ef44441a;border:1px solid var(--danger);border-radius:var(--radius-sm);color:var(--danger)}.error-banner-content{flex:1;min-width:0}.error-details{margin-top:.5rem;font-size:.8rem}.error-details summary{cursor:pointer;opacity:.9}.error-details pre{margin-top:.35rem;padding:.5rem;background:#0000004d;border-radius:4px;white-space:pre-wrap;word-break:break-all;font-size:.75rem;max-height:120px;overflow-y:auto}.error-banner button{background:none;border:none;color:var(--danger);cursor:pointer}.error-banner .error-retry{margin-left:auto;display:inline-flex;align-items:center;gap:.35rem;font-size:.875rem;padding:.25rem .5rem;border-radius:4px;background:#ef444426}.error-banner .error-retry:hover{background:#ef444440}.error-banner .error-dismiss{font-size:1.25rem;padding:0 .25rem}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem;gap:1rem;color:var(--text-muted)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.spinning{animation:spin 1s linear infinite}.energy-page{padding-bottom:2rem}.energy-summary{display:flex;gap:1.5rem;padding:1.5rem 2rem;background:var(--bg-secondary);border-bottom:1px solid var(--border);flex-wrap:wrap}.summary-card{display:flex;align-items:center;gap:1rem;padding:1.25rem 1.5rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius)}.summary-card.main{background:linear-gradient(135deg,var(--warning) 0%,#f97316 100%);border:none;color:#fff}.summary-card.main .summary-icon{background:#fff3;color:#fff}.summary-icon{width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:var(--bg-hover);border-radius:var(--radius-sm);color:var(--warning)}.summary-content{display:flex;flex-direction:column}.summary-value{font-size:1.5rem;font-weight:700}.summary-label{font-size:.8rem;opacity:.8}.energy-devices-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem;padding:0 2rem}.energy-device-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem}.energy-device-card.offline{opacity:.6}.energy-device-card .device-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.25rem}.energy-device-card h4{font-size:.95rem}.status-dot{width:8px;height:8px;border-radius:50%}.status-dot.online{background:var(--success)}.status-dot.offline{background:var(--danger)}.device-model{font-size:.75rem;color:var(--text-muted);margin-bottom:1rem}.device-energy-data{display:flex;flex-direction:column;gap:.75rem}.energy-value{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0;border-bottom:1px solid var(--border)}.energy-value.main .value{font-size:1.5rem;font-weight:700;color:var(--warning)}.energy-value .value{font-weight:600}.energy-value .label{font-size:.75rem;color:var(--text-muted)}.phase-breakdown{display:flex;flex-direction:column;gap:.5rem}.phase-label{font-size:.7rem;color:var(--text-muted);text-transform:uppercase}.phases{display:flex;gap:.75rem}.phase{padding:.375rem .625rem;background:var(--bg);border-radius:var(--radius-sm);font-size:.75rem;font-family:monospace}.switches-power{display:grid;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:.5rem;margin-top:.5rem}.switch-power-item{display:flex;flex-direction:column;align-items:center;padding:.5rem;background:var(--bg);border-radius:var(--radius-sm);font-size:.75rem}.switch-power-item.on{border:1px solid var(--success)}.switch-power-item .switch-label{font-size:.65rem;color:var(--text-muted)}.switch-power-item .switch-power{font-weight:600;color:var(--warning)}.switch-power-item .switch-state{font-size:.6rem;padding:.125rem .25rem;border-radius:3px;margin-top:.25rem}.switch-power-item .switch-state.on{background:var(--success);color:#fff}.switch-power-item .switch-state.off{background:var(--bg-hover);color:var(--text-muted)}.device-offline{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:1.5rem;color:var(--danger);font-size:.85rem}.time-range-selector{display:flex;align-items:center;gap:1rem;padding:1rem 2rem;background:var(--bg-card);border-bottom:1px solid var(--border);flex-wrap:wrap}.time-range-selector>span{color:var(--text-secondary);font-size:.875rem}.time-range-buttons{display:flex;gap:.5rem;flex-wrap:wrap}.time-range-btn{padding:.5rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.875rem;cursor:pointer;transition:all .2s}.time-range-btn:hover{background:var(--bg-hover);color:var(--text)}.time-range-btn.active{background:var(--primary);border-color:var(--primary);color:#fff}.phases-grid{display:flex;gap:.5rem;flex-wrap:wrap}.phase-item{display:flex;flex-direction:column;padding:.5rem .75rem;background:var(--bg);border-radius:var(--radius-sm);min-width:70px;text-align:center}.phase-item .phase-name{font-size:.7rem;color:var(--text-muted);text-transform:uppercase}.phase-item .phase-value{font-size:.875rem;font-weight:600;color:var(--warning);font-family:monospace}.energy-device-card .device-header{display:flex;justify-content:space-between;align-items:center;cursor:pointer;padding-bottom:.5rem;border-bottom:1px solid var(--border);margin-bottom:.75rem}.energy-device-card .device-header-right{display:flex;align-items:center;gap:.5rem}.energy-device-card.expanded{background:var(--bg-hover)}.device-chart-section{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--border)}.chart-loading{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:2rem;color:var(--text-secondary)}.chart-stats{display:flex;gap:1.5rem;margin-bottom:1rem;flex-wrap:wrap}.chart-stat{display:flex;flex-direction:column}.chart-stat .stat-value{font-size:1.25rem;font-weight:700;color:var(--primary)}.chart-stat .stat-label{font-size:.75rem;color:var(--text-muted)}.chart-container{background:var(--bg);border-radius:var(--radius-sm);padding:1rem}.main-chart-section{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;margin-bottom:2rem}.main-chart-section .section-title{margin-bottom:1rem}.main-chart-container{background:var(--bg);border-radius:var(--radius-sm);padding:1rem}.no-chart-data{text-align:center;padding:2rem;color:var(--text-secondary)}.no-chart-data.main{padding:3rem;display:flex;flex-direction:column;align-items:center;gap:.5rem}.no-chart-data.main svg{color:var(--text-muted);margin-bottom:.5rem}.chart-loading{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:3rem;color:var(--text-secondary)}.no-chart-data .hint{font-size:.75rem;color:var(--text-muted);margin-top:.5rem}@media(max-width:768px){.time-range-selector{padding:.75rem 1rem}.time-range-buttons{width:100%;overflow-x:auto;padding-bottom:.25rem}.time-range-btn{padding:.375rem .75rem;font-size:.75rem;white-space:nowrap}.phases-grid{gap:.375rem}.phase-item{min-width:60px;padding:.375rem .5rem}.chart-stats{gap:1rem}.chart-stat .stat-value{font-size:1rem}}.desktop-search,.mobile-search{display:none}.search-trigger{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-secondary);cursor:pointer;transition:all .2s;font-size:.875rem}.search-trigger:hover{background:var(--bg-hover);border-color:var(--primary);color:var(--text)}.search-trigger-text{min-width:80px;text-align:left}.search-kbd{padding:.125rem .375rem;background:var(--bg);border:1px solid var(--border);border-radius:4px;font-size:.7rem;font-family:monospace;color:var(--text-muted)}.search-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:300}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;z-index:10000;display:flex;align-items:center;justify-content:center;padding:1rem}.modal{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);max-width:600px;width:100%;max-height:90vh;overflow-y:auto}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;border-bottom:1px solid var(--border)}.modal-header h2{display:flex;align-items:center;gap:.75rem;font-size:1.25rem;font-weight:600}.modal-content{padding:1.5rem}.modal-footer{display:flex;justify-content:flex-end;gap:.75rem;padding:1.25rem 1.5rem;border-top:1px solid var(--border);background:var(--bg)}.sync-error-overlay{background:#000000d9;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.sync-error-modal{z-index:10001;position:relative;background:#1e293b!important;border:2px solid #ef4444!important;box-shadow:0 0 0 4px #ef44444d}.sync-error-modal .modal-header{background:#ef444426;border-bottom-color:#ef4444}.sync-error-modal .modal-header h2{color:#fca5a5}.sync-error-modal .modal-content{padding:1.5rem;background:#0f172a}.sync-error-details{white-space:pre-wrap;word-break:break-all;font-family:ui-monospace,monospace;font-size:1rem;line-height:1.6;background:#0f172a!important;padding:1.25rem!important;border-radius:8px;border:1px solid #475569;color:#e2e8f0!important;margin:0}.scan-modal{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);max-width:600px;width:90%;max-height:90vh;overflow-y:auto;z-index:401}.scan-modal-header{display:flex;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;border-bottom:1px solid var(--border);background:linear-gradient(135deg,rgba(59,130,246,.1),transparent)}.scan-modal-header h2{display:flex;align-items:center;gap:.75rem;font-size:1.25rem;font-weight:600;color:var(--primary-light)}.scan-modal-content{padding:1.5rem}.scan-info{background:#3b82f61a;border:1px solid var(--primary);border-radius:var(--radius-sm);padding:1rem;margin-bottom:1.5rem}.scan-info p{margin:0;color:var(--text);line-height:1.6}.scan-steps{margin-bottom:1rem}.scan-steps h3{font-size:1rem;margin-bottom:.75rem}.scan-steps ol{margin:0;padding-left:1.5rem;color:var(--text-secondary)}.scan-steps li{margin-bottom:.5rem}.scan-command{display:flex;align-items:center;gap:.75rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:1rem;margin-bottom:1.5rem}.scan-command code{flex:1;font-family:SF Mono,Fira Code,monospace;font-size:.85rem;color:var(--success);word-break:break-all}.btn-copy{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-sm);font-size:.8rem;cursor:pointer;transition:all .2s;white-space:nowrap}.btn-copy:hover{background:var(--primary-dark)}.scan-script-info{margin-bottom:1.5rem}.scan-script-info h4{font-size:.85rem;color:var(--text-muted);margin-bottom:.5rem}.scan-script-info code{display:block;font-family:SF Mono,Fira Code,monospace;font-size:.8rem;color:var(--text-secondary);background:var(--bg);padding:.5rem .75rem;border-radius:var(--radius-sm)}.scan-output h4{font-size:.9rem;margin-bottom:.75rem}.scan-output ul{margin:0;padding-left:1.5rem;color:var(--text-secondary);font-size:.9rem}.scan-output li{margin-bottom:.35rem}.scan-output code{background:var(--bg);padding:.15rem .4rem;border-radius:4px;font-size:.8rem}.scan-modal-footer{display:flex;justify-content:flex-end;gap:.75rem;padding:1.25rem 1.5rem;border-top:1px solid var(--border);background:var(--bg)}.form-group{margin-bottom:1.25rem}.form-group label{display:block;font-size:.875rem;font-weight:500;margin-bottom:.5rem;color:var(--text)}.form-group input,.form-group select{width:100%;padding:.75rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.875rem}.form-group input:focus,.form-group select:focus{outline:none;border-color:var(--primary)}.form-hint{display:flex;align-items:center;gap:.375rem;font-size:.75rem;color:var(--text-muted);margin-top:.5rem}.form-hint.warning{color:var(--warning)}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.input-with-unit{display:flex;align-items:center}.input-with-unit input{flex:1;border-radius:var(--radius-sm) 0 0 var(--radius-sm)}.input-with-unit span{padding:.75rem;background:var(--bg-hover);border:1px solid var(--border);border-left:none;border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--text-secondary);font-size:.875rem}.channel-buttons{display:flex;gap:.5rem}.channel-btn{flex:1;padding:.75rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s}.channel-btn:hover{background:var(--bg-hover)}.channel-btn.active{background:var(--primary);border-color:var(--primary);color:#fff}.form-info{padding:1rem;background:var(--bg);border-radius:var(--radius-sm);border:1px solid var(--border)}.form-info p{margin-bottom:.5rem;font-size:.875rem}.form-info ul{margin:0;padding-left:1.25rem;font-size:.8rem;color:var(--text-secondary)}.form-info li{margin-bottom:.25rem}.btn-icon-small{padding:.25rem;background:transparent;border:none;color:var(--text-muted);border-radius:4px;cursor:pointer;transition:all .2s}.btn-icon-small:hover{background:var(--bg-hover);color:var(--text)}.btn-icon-small.danger:hover{background:#ef444433;color:var(--danger)}@media(max-width:768px){.modal-overlay{padding:0;align-items:flex-end}.modal{max-width:100%;max-height:90vh;border-radius:var(--radius) var(--radius) 0 0}.form-row{grid-template-columns:1fr}.channel-buttons{flex-wrap:wrap}.channel-btn{flex:0 0 calc(50% - .25rem)}}.search-modal{position:fixed;top:10%;left:50%;transform:translate(-50%);width:90%;max-width:560px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-lg);z-index:301;overflow:hidden;max-height:80vh;display:flex;flex-direction:column}.search-header{display:flex;align-items:center;padding:1rem;border-bottom:1px solid var(--border);gap:.75rem}.search-icon{color:var(--text-muted);flex-shrink:0}.search-input{flex:1;background:none;border:none;color:var(--text);font-size:1rem;outline:none}.search-input::placeholder{color:var(--text-muted)}.search-close{background:none;border:none;color:var(--text-muted);cursor:pointer;padding:.25rem;display:flex;border-radius:var(--radius-sm);transition:all .2s}.search-close:hover{background:var(--bg-hover);color:var(--text)}.search-results{flex:1;overflow-y:auto;padding:.5rem;min-height:100px}.search-loading,.search-empty{padding:2rem;text-align:center;color:var(--text-secondary)}.search-results-header{padding:.5rem .75rem;font-size:.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.search-results-list{display:flex;flex-direction:column;gap:.25rem}.search-result-item{display:flex;align-items:center;gap:.75rem;padding:.75rem;background:none;border:none;border-radius:var(--radius-sm);cursor:pointer;text-align:left;width:100%;transition:background .15s}.search-result-item:hover{background:var(--bg-hover)}.result-icon{width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:var(--bg);border-radius:var(--radius-sm);color:var(--primary);flex-shrink:0}.result-info{flex:1;min-width:0}.result-name{font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.result-details{display:flex;gap:.75rem;font-size:.75rem;color:var(--text-muted);flex-wrap:wrap}.result-ip{font-family:monospace}.result-mac{font-family:monospace;opacity:.7}.result-status{flex-shrink:0}.result-status.online{color:var(--success)}.result-status.offline{color:var(--danger)}.search-hints{padding:1rem;color:var(--text-secondary);font-size:.875rem}.search-hints p{margin-bottom:.5rem;color:var(--text-muted)}.search-hints ul{list-style:none;display:flex;flex-direction:column;gap:.5rem}.search-hints li{padding:.5rem;background:var(--bg);border-radius:var(--radius-sm)}.search-footer{display:flex;justify-content:center;gap:1.5rem;padding:.75rem;border-top:1px solid var(--border);font-size:.75rem;color:var(--text-muted)}.search-footer kbd{padding:.125rem .375rem;background:var(--bg);border:1px solid var(--border);border-radius:4px;font-family:monospace;margin-right:.25rem}@media(max-width:768px){.desktop-search{display:none}.mobile-search{display:block}.search-trigger{padding:.5rem;background:transparent;border:none}.search-trigger-text,.search-kbd{display:none}.search-modal{top:0;left:0;right:0;transform:none;width:100%;max-width:100%;border-radius:0;max-height:100vh;height:100vh}.search-header{padding-top:max(1rem,env(safe-area-inset-top))}.search-footer{padding-bottom:max(.75rem,env(safe-area-inset-bottom))}}.wireguard-status{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:var(--radius-sm);font-size:.75rem;font-weight:600;margin-bottom:.5rem}.wireguard-status.loading{background:var(--bg-hover);color:var(--text-muted)}.wireguard-status.connected{background:#22c55e26;color:var(--success);border:1px solid rgba(34,197,94,.3)}.wireguard-status.disconnected{background:#ef444426;color:var(--danger);border:1px solid rgba(239,68,68,.3)}.wireguard-status svg{flex-shrink:0}.vpn-offline-container{display:flex;flex-direction:column;gap:.5rem}.vpn-error-banner{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:#ef44441a;border:1px solid rgba(239,68,68,.2);border-radius:var(--radius-sm);color:var(--danger);font-size:.7rem;line-height:1.3}.vpn-error-banner svg{flex-shrink:0}.switch-preview{display:flex;flex-wrap:wrap;gap:.5rem;padding:.75rem;padding-top:0}.switch-preview.loading{display:flex;align-items:center;gap:.5rem;color:var(--text-muted);font-size:.75rem}.switch-preview-btn{display:flex;align-items:center;gap:.375rem;padding:.5rem .75rem;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg);cursor:pointer;transition:all .2s;font-size:.8rem;font-weight:600}.switch-preview-btn:hover{border-color:var(--primary)}.switch-preview-btn.on{background:#22c55e26;border-color:var(--success);color:var(--success)}.switch-preview-btn.off{background:var(--bg);color:var(--text-muted)}.switch-preview-btn .switch-label{white-space:nowrap}.switch-preview-btn .switch-power{padding:.125rem .375rem;background:#fbbf2433;color:var(--warning);border-radius:4px;font-size:.7rem;margin-left:.25rem}.switch-preview-btn:disabled{opacity:.7;cursor:not-allowed}.live-values-preview{display:flex;flex-wrap:wrap;gap:.75rem;padding:.75rem;padding-top:0}.live-value{display:flex;align-items:center;gap:.375rem;padding:.5rem .75rem;border-radius:var(--radius-sm);font-size:.875rem;font-weight:600}.live-value.temp{background:#3b82f626;color:#3b82f6;border:1px solid rgba(59,130,246,.3)}.live-value.power{background:#fbbf2426;color:var(--warning);border:1px solid rgba(251,191,36,.3)}.live-value.humidity{background:#06b6d426;color:#06b6d4;border:1px solid rgba(6,182,212,.3)}.live-value svg{flex-shrink:0}.activity-page{padding:1.5rem;max-width:1200px}.activity-page .page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.activity-page .header-left{display:flex;align-items:center;gap:1rem}.activity-page .header-left svg{color:var(--primary)}.activity-page .header-left h1{font-size:1.5rem;margin-bottom:.25rem}.activity-page .header-left p{color:var(--text-secondary);font-size:.875rem}.activity-page .btn-icon{background:var(--bg-card);border:1px solid var(--border);color:var(--text);padding:.5rem;border-radius:var(--radius-sm);cursor:pointer;transition:all .2s}.activity-page .btn-icon:hover{background:var(--bg-hover)}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1rem;margin-bottom:1.5rem}.stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;text-align:center;cursor:pointer;transition:all .2s}.stat-card:hover{background:var(--bg-hover);border-color:var(--primary);transform:translateY(-2px)}.stat-card .stat-value{font-size:2rem;font-weight:700;color:var(--primary)}.stat-card .stat-label{color:var(--text-secondary);font-size:.75rem;text-transform:uppercase;letter-spacing:.5px}.issues-section{margin-bottom:1.5rem;padding:1rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:var(--radius)}.issues-header{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem;color:var(--danger)}.issues-header h3{font-size:1rem;font-weight:600}.issues-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:.75rem}.issue-card{display:flex;gap:.75rem;padding:.75rem;background:var(--bg-card);border:1px solid var(--danger);border-radius:var(--radius-sm);cursor:pointer;transition:all .2s}.issue-card:hover{background:var(--bg-hover);transform:translateY(-2px)}.issue-icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;background:#ef444433;border-radius:50%;color:var(--danger);flex-shrink:0}.issue-content{flex:1;display:flex;flex-direction:column;gap:.25rem}.issue-content strong{font-size:.875rem;color:var(--text)}.issue-stats{display:flex;gap:.75rem;font-size:.75rem}.issue-count{color:var(--danger);font-weight:600}.issue-duration{color:var(--text-secondary)}.issue-last{font-size:.75rem;color:var(--text-muted)}.filter-bar{display:flex;gap:1.5rem;flex-wrap:wrap;padding:1rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:1.5rem;align-items:center}.btn-clear-filters{display:flex;align-items:center;gap:.375rem;padding:.5rem .75rem;background:var(--danger);color:#fff;border:none;border-radius:var(--radius-sm);font-size:.75rem;cursor:pointer;transition:all .2s;margin-left:auto}.btn-clear-filters:hover{background:#dc2626}.filter-group{display:flex;align-items:center;gap:.5rem;color:var(--text-secondary);font-size:.875rem}.filter-group select{background:var(--bg);border:1px solid var(--border);color:var(--text);padding:.5rem .75rem;border-radius:var(--radius-sm);font-size:.875rem}.activity-timeline{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.activity-timeline .loading-container,.activity-timeline .empty-state{padding:3rem;text-align:center;color:var(--text-secondary)}.activity-timeline .empty-state svg{opacity:.3;margin-bottom:1rem}.activity-timeline .empty-state h3{margin-bottom:.5rem}.timeline{max-height:600px;overflow-y:auto}.timeline-item{display:flex;gap:1rem;padding:1rem 1.25rem;border-bottom:1px solid var(--border);transition:background .2s}.timeline-item:hover{background:var(--bg-hover)}.timeline-item:last-child{border-bottom:none}.timeline-icon{flex-shrink:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--bg);border-radius:50%}.timeline-content{flex:1;min-width:0}.timeline-header{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;margin-bottom:.25rem}.activity-action{font-weight:600;color:var(--text)}.activity-source{display:inline-flex;align-items:center;gap:.25rem;padding:.125rem .5rem;border-radius:999px;font-size:.7rem;font-weight:600;color:#fff;text-transform:uppercase;letter-spacing:.5px}.activity-device{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:var(--text-secondary);margin-bottom:.25rem}.activity-device strong{color:var(--text)}.device-ip{font-family:monospace;font-size:.75rem;color:var(--text-muted)}.activity-description{font-size:.875rem;color:var(--text-secondary);margin-bottom:.25rem}.activity-trigger{font-size:.75rem;color:var(--text-muted)}.timeline-time{flex-shrink:0;display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:var(--text-muted);white-space:nowrap}.source-legend{margin-top:1.5rem;padding:1rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius)}.source-legend h4{font-size:.875rem;color:var(--text-secondary);margin-bottom:.75rem}.legend-items{display:flex;flex-wrap:wrap;gap:1rem}.legend-item{display:flex;align-items:center;gap:.5rem;font-size:.8rem;color:var(--text-secondary)}.legend-badge{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;color:#fff}.text-green-500{color:#22c55e}.text-red-500{color:#ef4444}.text-blue-500{color:#3b82f6}.text-orange-500{color:#f97316}.text-yellow-500{color:#eab308}.text-amber-600{color:#d97706}.loading-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--bg);color:var(--text);font-size:1.25rem}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--bg) 0%,#1a365d 100%);padding:1rem}.login-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:2.5rem;width:100%;max-width:360px;box-shadow:var(--shadow-lg)}.login-card.shake{animation:shake .5s ease-in-out}@keyframes shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-10px)}40%,80%{transform:translate(10px)}}.login-header{text-align:center;margin-bottom:2rem}.login-logo{width:80px;height:80px;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;color:#fff}.login-header h1{font-size:1.5rem;margin-bottom:.5rem;color:var(--text)}.login-header p{color:var(--text-secondary);font-size:.9rem}.login-form{display:flex;flex-direction:column;align-items:center;gap:1.5rem}.pin-display{display:flex;gap:1rem;justify-content:center}.pin-dot{width:20px;height:20px;border-radius:50%;border:2px solid var(--border-light);background:transparent;transition:all .2s}.pin-dot.filled{background:var(--primary);border-color:var(--primary)}.pin-dot.error{border-color:var(--danger);background:var(--danger)}.pin-input-hidden{position:absolute;opacity:0;pointer-events:none}.login-error{display:flex;align-items:center;gap:.5rem;color:var(--danger);font-size:.875rem;padding:.5rem 1rem;background:#ef44441a;border-radius:var(--radius-sm)}.keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem;width:100%;max-width:240px}.keypad-btn{width:64px;height:64px;border-radius:50%;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:1.5rem;font-weight:600;cursor:pointer;transition:all .15s;display:flex;align-items:center;justify-content:center}.keypad-btn:hover{background:var(--bg-hover);border-color:var(--primary)}.keypad-btn:active{transform:scale(.95);background:var(--primary);color:#fff}.keypad-btn.backspace{font-size:1.25rem;color:var(--text-secondary)}.keypad-empty{width:64px;height:64px}.login-submit{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;max-width:240px;padding:.875rem 1.5rem;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);color:#fff;border:none;border-radius:var(--radius);font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s}.login-submit:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 4px 12px #3b82f666}.login-submit:disabled{opacity:.5;cursor:not-allowed}.logout-btn{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:transparent;border:1px solid var(--border);color:var(--text-secondary);border-radius:var(--radius-sm);font-size:.75rem;cursor:pointer;transition:all .2s;margin-bottom:.5rem;width:100%;justify-content:center}.logout-btn:hover{background:#ef44441a;border-color:var(--danger);color:var(--danger)}.loading-spinner{width:40px;height:40px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}@media(max-width:1024px){:root{--sidebar-width: 200px}.dashboard-hero{padding:1.25rem}.hero-stats{gap:.75rem}.hero-stat{padding:.75rem 1rem}.quick-access-grid,.heating-grid{grid-template-columns:repeat(2,1fr)}.device-type-grid{grid-template-columns:repeat(3,1fr)}.stats-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:768px){.mobile-header{display:flex}.sidebar-overlay{display:block}.sidebar{transform:translate(-100%);width:280px;box-shadow:var(--shadow-lg)}.sidebar.open{transform:translate(0)}.main-content{margin-left:0;padding-top:60px}.dashboard-hero{flex-direction:column;text-align:center;padding:1rem;gap:1rem}.hero-content{flex-direction:column;align-items:center}.hero-icon{width:60px;height:60px}.hero-text h1{font-size:1.25rem}.hero-text p{font-size:.875rem}.hero-stats{width:100%;justify-content:center;gap:.5rem}.hero-stat{flex:1;min-width:80px;padding:.75rem .5rem}.stat-value{font-size:1.25rem}.stat-label{font-size:.65rem}.section{padding:0 1rem;margin-bottom:1.5rem}.section-title{font-size:1rem}.quick-access-grid{grid-template-columns:1fr;gap:.75rem}.quick-card{padding:1rem}.quick-card-icon svg{width:24px;height:24px}.quick-card-content h3{font-size:1rem}.heating-grid{grid-template-columns:1fr;gap:.75rem}.room-card{padding:1rem}.device-type-grid{grid-template-columns:repeat(2,1fr);gap:.5rem}.device-type-card{padding:.75rem}.projects-grid{grid-template-columns:1fr}.page-header{padding:1rem;flex-direction:column;gap:1rem;text-align:center}.page-header h1{font-size:1.25rem}.activity-page{padding:1rem}.activity-page .page-header{flex-direction:column;text-align:center}.activity-page .header-left{flex-direction:column}.activity-page .header-left h1{font-size:1.25rem}.stats-grid{grid-template-columns:repeat(2,1fr);gap:.5rem}.stat-card{padding:.75rem}.stat-card .stat-value{font-size:1.5rem}.issues-grid{grid-template-columns:1fr}.issue-card{padding:.5rem}.filter-bar{flex-direction:column;gap:.75rem;padding:.75rem}.filter-group{width:100%}.filter-group select{flex:1;width:100%}.btn-clear-filters{width:100%;justify-content:center;margin-left:0}.timeline-item{flex-direction:column;gap:.5rem;padding:.75rem 1rem}.timeline-icon,.timeline-time{align-self:flex-start}.timeline-header{flex-direction:column;align-items:flex-start;gap:.5rem}.source-legend{padding:.75rem}.legend-items{flex-direction:column;gap:.5rem}.alert-banner{flex-direction:column;text-align:center;gap:.75rem}.devices-container{padding:1rem}.devices-container.grid{grid-template-columns:1fr}}@media(max-width:480px){.sidebar.open{width:100%}.dashboard-hero{padding:.75rem}.hero-icon{width:50px;height:50px}.hero-icon svg{width:28px;height:28px}.hero-stats{flex-direction:column}.hero-stat{flex-direction:row;justify-content:space-between;padding:.75rem 1rem}.hero-stat .stat-icon{margin-bottom:0;margin-right:.75rem}.hero-stat .stat-content{flex-direction:row;align-items:center;gap:.5rem}.quick-access-grid{gap:.5rem}.quick-card{flex-direction:row;align-items:center;gap:1rem;padding:.875rem 1rem}.quick-card-icon{width:40px;height:40px}.quick-card-content{flex:1;text-align:left}.quick-card-badge{position:static}.rooms-grid{padding:.75rem;gap:.75rem}.room-card-large{padding:.75rem}.room-card-large .room-title-row h3{font-size:.9rem}.room-card-large .room-status-row{grid-template-columns:1fr;gap:.25rem}.status-indicator{font-size:.65rem;justify-content:center}.temp-display{flex-direction:column;align-items:flex-start;gap:.5rem}.current-temp-large{width:100%;justify-content:center}.temp-value{font-size:2rem}.humidity-display{width:100%;justify-content:center}.temp-chart{margin:.5rem 0}.setpoint-buttons{flex-direction:column;gap:.5rem}.btn-setpoint{width:100%;justify-content:center}.setpoint-value{order:-1;width:100%;text-align:center;margin-bottom:.5rem}.mode-buttons{flex-direction:column}.btn-mode{width:100%;justify-content:center}.page-header .header-actions{flex-direction:column}.page-header .header-actions button{width:100%}.login-card{padding:1.5rem}.login-logo{width:60px;height:60px}.login-logo svg{width:32px;height:32px}.login-header h1{font-size:1.25rem}.keypad{max-width:200px;gap:.5rem}.keypad-btn{width:56px;height:56px;font-size:1.25rem}.keypad-empty{width:56px;height:56px}.device-type-grid{grid-template-columns:1fr}.device-type-card{flex-direction:row;justify-content:flex-start;gap:1rem;text-align:left}.stats-grid{grid-template-columns:1fr}}@media(hover:none)and (pointer:coarse){.nav-link{padding:1rem}.keypad-btn{-webkit-tap-highlight-color:transparent}.keypad-btn:active{transform:scale(.95);background:var(--primary);color:#fff}.btn-icon,.logout-btn,.mobile-menu-btn{min-width:44px;min-height:44px}}@media(max-width:768px)and (orientation:landscape){.login-page{padding:.5rem}.login-card{max-width:100%;flex-direction:row;flex-wrap:wrap;justify-content:center;gap:1rem}.login-header{width:100%;margin-bottom:.5rem}.login-form{gap:1rem}.keypad{max-width:180px}.keypad-btn{width:48px;height:48px;font-size:1rem}.keypad-empty{width:48px;height:48px}}@supports (padding: max(0px)){.mobile-header{padding-left:max(1rem,env(safe-area-inset-left));padding-right:max(1rem,env(safe-area-inset-right))}.sidebar{padding-left:env(safe-area-inset-left)}.main-content{padding-left:max(0px,env(safe-area-inset-left));padding-right:max(0px,env(safe-area-inset-right));padding-bottom:env(safe-area-inset-bottom)}.login-page{padding-bottom:max(1rem,env(safe-area-inset-bottom))}}@media print{.sidebar,.mobile-header,.logout-btn,.mobile-menu-btn{display:none!important}.main-content{margin-left:0;padding-top:0}}.rooms-page{padding:1.5rem}.rooms-page .page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.rooms-page .header-title{display:flex;align-items:center;gap:.75rem}.rooms-page .header-title h1{font-size:1.5rem;font-weight:600}.rooms-page .header-actions{display:flex;gap:.75rem}.new-room-form{margin-bottom:1.5rem;padding:1rem}.new-room-form h3{margin-bottom:.75rem;font-size:1rem}.new-room-form .form-row{display:flex;gap:.5rem;flex-wrap:wrap}.new-room-form input,.new-room-form select{padding:.5rem .75rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);font-size:.875rem;flex:1;min-width:150px}.new-room-form select{min-width:180px}.rooms-container{display:flex;flex-direction:column;gap:1rem}.room-card{padding:0;overflow:hidden}.room-header{display:flex;justify-content:space-between;align-items:center;padding:1rem;cursor:pointer;transition:background .2s}.room-header:hover{background:var(--bg-hover)}.room-info{display:flex;align-items:center;gap:.75rem}.room-info h3{font-size:1rem;font-weight:600}.room-floor{background:var(--primary);color:#fff;padding:.125rem .5rem;border-radius:4px;font-size:.75rem;font-weight:500}.room-meta{display:flex;align-items:center;gap:.5rem}.device-count{color:var(--text-secondary);font-size:.875rem}.edit-form{display:flex;align-items:center;gap:.5rem}.edit-form input{padding:.25rem .5rem;border:1px solid var(--primary);border-radius:4px;background:var(--bg);color:var(--text);font-size:.875rem;width:200px}.room-devices{padding:0 1rem 1rem;display:flex;flex-direction:column;gap:.5rem}.room-devices .no-devices{color:var(--text-muted);font-size:.875rem;text-align:center;padding:1rem;border:2px dashed var(--border);border-radius:var(--radius-sm)}.room-device{display:flex;justify-content:space-between;align-items:center;padding:.5rem .75rem;background:var(--bg);border-radius:var(--radius-sm);border:1px solid var(--border)}.room-device .device-info{display:flex;align-items:center;gap:.5rem}.room-device .device-name{font-weight:500;font-size:.875rem}.room-device .device-model{color:var(--text-secondary);font-size:.75rem}.room-device.online .status-online{color:var(--success)}.room-device.offline .status-offline{color:var(--danger)}.unassigned-section{margin-top:2rem;padding-top:1.5rem;border-top:1px solid var(--border)}.unassigned-section h2{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;margin-bottom:.5rem}.unassigned-section .hint{color:var(--text-muted);font-size:.875rem;margin-bottom:1rem}.unassigned-devices{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:.75rem}.unassigned-device{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:grab;transition:all .2s}.unassigned-device:hover{border-color:var(--primary);background:var(--bg-hover)}.unassigned-device:active{cursor:grabbing}.unassigned-device .device-name{font-weight:500;flex:1}.unassigned-device .device-model{color:var(--text-secondary);font-size:.75rem}.unassigned-device .device-ip{color:var(--text-muted);font-size:.75rem}.empty-state{text-align:center;padding:3rem}.empty-state svg{color:var(--text-muted);margin-bottom:1rem}.empty-state h3{margin-bottom:.5rem}.empty-state p{color:var(--text-secondary)}.backfill-modal{max-width:700px;max-height:80vh;overflow-y:auto}.backfill-section{margin-bottom:1.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--border)}.backfill-section:last-child{border-bottom:none;margin-bottom:0}.backfill-section h3{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem;font-size:1rem}.backfill-items{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem;max-height:200px;overflow-y:auto}.backfill-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:var(--bg);border-radius:var(--radius-sm);font-size:.875rem;flex-wrap:wrap}.backfill-item strong{color:var(--primary-light)}.backfill-item .matched-devices{color:var(--text-secondary);font-size:.75rem}.backfill-item .arrow{color:var(--text-muted)}.backfill-item .detected-room{color:var(--success)}.backfill-item .confidence{color:var(--text-muted);font-size:.75rem}.backfill-section .empty{color:var(--text-muted);font-style:italic}.btn-icon{padding:.375rem;border:none;background:transparent;color:var(--text-secondary);border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.btn-icon:hover{background:var(--bg-hover);color:var(--text)}.btn-icon.danger:hover{background:#ef444433;color:var(--danger)}@media(max-width:768px){.rooms-page{padding:1rem}.rooms-page .page-header{flex-direction:column;align-items:flex-start}.rooms-page .header-actions{width:100%;justify-content:flex-end}.new-room-form .form-row{flex-direction:column}.new-room-form input,.new-room-form select{width:100%}.room-header{flex-direction:column;align-items:flex-start;gap:.75rem}.room-meta{width:100%;justify-content:space-between}.unassigned-devices{grid-template-columns:1fr}.backfill-modal{margin:1rem;max-height:calc(100vh - 2rem)}}.presence-page{padding:1.5rem;max-width:1400px;margin:0 auto}.add-device-form{background:var(--bg-secondary);border:1px solid var(--primary);border-radius:var(--radius);padding:1.5rem;margin-bottom:1.5rem}.add-device-form h3{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem;color:var(--primary)}.add-device-form .form-row{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:1rem}.add-device-form .form-group label{display:block;font-size:.8rem;color:var(--text-secondary);margin-bottom:.5rem}.add-device-form .form-group input{width:100%;padding:.75rem;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.9rem}.add-device-form .form-group input:focus{outline:none;border-color:var(--primary)}.add-device-form .form-actions{display:flex;justify-content:flex-end;gap:.75rem}.device-mac{font-size:.65rem;color:var(--text-muted);font-family:monospace;letter-spacing:.5px}.device-name-sub{font-size:.7rem;color:var(--text-secondary)}.since-time{font-size:.75rem;color:var(--text-secondary);font-weight:500}.btn-icon-tiny.danger:hover{background:#ef444433;color:var(--danger)}@media(max-width:768px){.add-device-form .form-row{grid-template-columns:1fr}}.presence-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin-bottom:2rem}.presence-stats .stat-card{display:flex;align-items:center;gap:1rem;padding:1.25rem;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius)}.presence-stats .stat-card.present{border-left:4px solid var(--success)}.presence-stats .stat-card.present svg{color:var(--success)}.presence-stats .stat-card.absent{border-left:4px solid var(--text-muted)}.presence-stats .stat-card.absent svg{color:var(--text-muted)}.presence-stats .stat-card.hidden-stat{border-left:4px solid var(--warning);position:relative}.presence-stats .stat-card.hidden-stat svg{color:var(--warning)}.toggle-hidden{position:absolute;right:1rem;padding:.25rem .5rem;font-size:.7rem;background:var(--bg-hover);border:1px solid var(--border);border-radius:4px;color:var(--text-secondary);cursor:pointer}.toggle-hidden:hover{background:var(--bg)}.presence-section{margin-bottom:2rem}.presence-section h2{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;margin-bottom:1rem;color:var(--text)}.presence-section.present-section h2{color:var(--success)}.presence-section.absent-section h2{color:var(--text-muted)}.presence-section.hidden-section h2{color:var(--warning)}.section-hint{font-size:.8rem;color:var(--text-muted);margin-bottom:1rem}.device-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}.device-grid.compact{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.presence-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;transition:all .2s}.presence-card:hover{border-color:var(--primary)}.presence-card.present{border-left:4px solid var(--success)}.presence-card.absent{border-left:4px solid var(--text-muted)}.presence-card.hidden{opacity:.6;border-left:4px solid var(--warning)}.presence-card.favorite{background:linear-gradient(135deg,var(--bg-secondary) 0%,rgba(250,204,21,.05) 100%)}.presence-card .card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem}.person-info{display:flex;align-items:center;gap:.75rem}.person-icon{font-size:1.5rem}.device-icon{color:var(--text-muted)}.person-details{display:flex;flex-direction:column}.person-name{font-weight:600;color:var(--text)}.device-name{font-size:.75rem;color:var(--text-muted)}.card-actions{display:flex;gap:.25rem}.btn-icon-tiny{padding:.25rem;background:transparent;border:none;color:var(--text-muted);border-radius:4px;cursor:pointer;transition:all .2s}.btn-icon-tiny:hover{background:var(--bg-hover);color:var(--text)}.btn-icon-tiny.active{color:var(--warning)}.edit-name{display:flex;gap:.25rem}.edit-name input{padding:.25rem .5rem;font-size:.875rem;background:var(--bg);border:1px solid var(--border);border-radius:4px;color:var(--text);width:120px}.edit-name button{padding:.25rem;background:var(--bg-hover);border:1px solid var(--border);border-radius:4px;color:var(--text);cursor:pointer}.edit-name button:hover{background:var(--primary);color:#fff}.card-status{display:flex;justify-content:space-between;align-items:center}.status-badge{display:inline-flex;align-items:center;gap:.25rem;padding:.25rem .5rem;font-size:.7rem;font-weight:600;border-radius:4px;text-transform:uppercase}.status-badge.present{background:#22c55e33;color:var(--success)}.status-badge.absent{background:#94a3b833;color:var(--text-muted)}.last-seen{font-size:.75rem;color:var(--text-muted)}.auto-hidden-badge{font-size:.7rem;color:var(--warning)}.presence-logs-panel{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:2rem;max-height:400px;overflow:hidden;display:flex;flex-direction:column}.panel-header{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid var(--border)}.panel-header h3{display:flex;align-items:center;gap:.5rem;font-size:1rem;margin:0}.logs-list{overflow-y:auto;flex:1}.log-item{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-bottom:1px solid var(--border)}.log-item:last-child{border-bottom:none}.log-item.arrived .log-icon{color:var(--success)}.log-item.left .log-icon{color:var(--text-muted)}.log-content{flex:1;display:flex;flex-direction:column}.log-name{font-weight:500;color:var(--text)}.log-event{font-size:.8rem;color:var(--text-secondary)}.log-duration{color:var(--text-muted)}.log-time{font-size:.75rem;color:var(--text-muted);white-space:nowrap}.no-logs{padding:2rem;text-align:center;color:var(--text-muted)}.presence-info{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem;margin-top:2rem}.presence-info h4{margin-bottom:.75rem}.presence-info ul{margin:0;padding-left:1.25rem;font-size:.875rem;color:var(--text-secondary)}.presence-info li{margin-bottom:.25rem}.empty-state.small{padding:1.5rem;text-align:center;background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius)}.empty-state.small p{margin:0;color:var(--text-muted)}@media(max-width:768px){.presence-page{padding:1rem}.presence-stats,.device-grid{grid-template-columns:1fr}.presence-logs-panel{max-height:300px}.log-item{flex-wrap:wrap}.log-time{width:100%;margin-top:.25rem;margin-left:2rem}}.live-values-preview.cached{opacity:.7;border-style:dashed}.data-age{font-size:.7rem;color:var(--text-secondary);background:var(--bg-secondary);padding:.2rem .5rem;border-radius:4px;margin-left:auto}.last-seen-info{padding:.5rem 1rem;font-size:.75rem;color:var(--text-secondary)}.cached-data-display{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;background:linear-gradient(135deg,#3b82f61a,#9333ea1a);border:1px dashed rgba(255,255,255,.2);border-radius:8px;margin:.5rem 0}.cached-values{display:flex;gap:1.5rem;align-items:center}.cached-value{display:flex;align-items:center;gap:.5rem}.cached-value.temp svg{color:#f97316}.cached-value.humidity svg{color:#3b82f6}.cached-value.power svg{color:#eab308}.cached-value .value{font-size:1.1rem;font-weight:600;color:var(--text-primary)}.cached-age{font-size:.75rem;color:var(--text-secondary);background:#ffffff1a;padding:.25rem .75rem;border-radius:12px;white-space:nowrap}.vpn-info-container{display:flex;flex-direction:column;gap:.5rem}.vpn-details{background:#22c55e1a;border:1px solid rgba(34,197,94,.2);border-radius:8px;padding:.5rem .75rem;font-size:.7rem}.vpn-detail-row{display:flex;justify-content:space-between;align-items:center;padding:.15rem 0}.vpn-label{color:var(--text-secondary)}.vpn-value{color:var(--text-primary);font-family:monospace;font-size:.65rem}.btn-auto-refresh{display:flex;align-items:center;gap:.4rem;padding:.5rem .75rem;border-radius:6px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;font-size:.8rem;transition:all .2s}.btn-auto-refresh.active{background:#22c55e26;border-color:#22c55e4d;color:#22c55e}.btn-auto-refresh:hover{background:var(--bg-tertiary)}@keyframes spin-slow{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spinning-slow{animation:spin-slow 3s linear infinite}.last-update{font-size:.7rem;color:var(--text-secondary);margin-left:auto}.wireguard-status.clickable{cursor:pointer;-webkit-user-select:none;user-select:none}.wireguard-status.clickable:hover{background:#22c55e33}.vpn-details-dropdown{background:var(--bg-secondary);border:1px solid rgba(34,197,94,.2);border-radius:8px;padding:.5rem .75rem;font-size:.7rem;margin-top:.5rem;max-height:150px;overflow-y:auto;animation:slideDown .2s ease-out}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.vpn-details-dropdown::-webkit-scrollbar{width:6px}.vpn-details-dropdown::-webkit-scrollbar-track{background:var(--bg-tertiary);border-radius:3px}.vpn-details-dropdown::-webkit-scrollbar-thumb{background:#22c55e66;border-radius:3px}.vpn-details-dropdown::-webkit-scrollbar-thumb:hover{background:#22c55e99}.sidebar{overflow:hidden}.sidebar nav{flex:1;overflow-y:auto;overflow-x:hidden;padding-bottom:1rem}.sidebar nav::-webkit-scrollbar{width:6px}.sidebar nav::-webkit-scrollbar-track{background:transparent}.sidebar nav::-webkit-scrollbar-thumb{background:#fff3;border-radius:3px}.sidebar nav::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.vpn-details-dropdown{max-height:none;overflow-y:visible}.sidebar{overflow-y:auto!important;overflow-x:hidden!important}.sidebar::-webkit-scrollbar{width:6px}.sidebar::-webkit-scrollbar-track{background:transparent}.sidebar::-webkit-scrollbar-thumb{background:#fff3;border-radius:3px}.sidebar::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.pool-heating-page{padding:0}.pool-heating-page .page-header{margin-bottom:24px}.pool-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-bottom:24px}.pool-stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:20px;display:flex;align-items:flex-start;gap:16px;position:relative;transition:border-color .3s,box-shadow .3s}.pool-stat-card.main-temp{grid-column:span 1}.pool-stat-card.active-green{border-color:var(--success);box-shadow:0 0 20px #22c55e26}.pool-stat-card.active-blue{border-color:var(--primary);box-shadow:0 0 20px #3b82f626}.pool-stat-card.active-orange{border-color:var(--heating);box-shadow:0 0 20px #f9731626}.pool-stat-card.reached{border-color:var(--success)}.pool-stat-card .stat-icon{width:48px;height:48px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;background:#3b82f61a;color:var(--primary);flex-shrink:0}.pool-stat-card .stat-icon.solar{background:#facc151a;color:#facc15}.pool-stat-card .stat-icon.pump{background:#3b82f61a;color:var(--primary)}.pool-stat-card .stat-icon.heater{background:#f973161a;color:var(--heating)}.pool-stat-card .stat-body{display:flex;flex-direction:column;gap:2px;min-width:0}.pool-stat-card .stat-label{font-size:.8rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.pool-stat-card .stat-value-large{font-size:1.6rem;font-weight:700;color:var(--text);line-height:1.2}.pool-stat-card .stat-sub{font-size:.75rem;color:var(--text-muted)}.pool-stat-card .stat-badge{position:absolute;top:12px;right:12px;display:flex;align-items:center;gap:4px;padding:4px 8px;border-radius:20px;font-size:.7rem;font-weight:600}.pool-stat-card .stat-badge.success{background:#22c55e26;color:var(--success)}.pool-stat-card .stat-badge.heating{background:#f9731626;color:var(--heating);animation:pulse-glow 2s ease-in-out infinite}@keyframes pulse-glow{0%,to{opacity:1}50%{opacity:.6}}.connection-badge{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:20px;font-size:.75rem;font-weight:500}.connection-badge.online{background:#22c55e26;color:var(--success)}.connection-badge.offline{background:#ef444426;color:var(--danger)}.pool-progress-card{padding:20px;margin-bottom:24px}.progress-header{display:flex;align-items:center;gap:10px;margin-bottom:12px;color:var(--primary)}.progress-header h3{flex:1;font-size:1rem;font-weight:600;color:var(--text)}.progress-pct{font-size:1.1rem;font-weight:700;color:var(--primary)}.progress-bar-container{position:relative;height:12px;background:var(--bg);border-radius:6px;overflow:visible}.progress-bar-fill{height:100%;border-radius:6px;background:linear-gradient(90deg,var(--cold),var(--primary));transition:width 1s ease}.progress-bar-fill.reached{background:linear-gradient(90deg,var(--primary),var(--success))}.progress-labels{display:flex;justify-content:space-between;margin-top:6px;font-size:.75rem;color:var(--text-muted)}.progress-current{font-weight:600;color:var(--primary)}.pool-flow-card{padding:20px;margin-bottom:24px}.flow-header{display:flex;align-items:center;gap:10px;margin-bottom:20px;color:var(--primary)}.flow-header h3{flex:1;font-size:1rem;font-weight:600;color:var(--text)}.flow-state-badge{padding:4px 12px;border-radius:20px;font-size:.7rem;font-weight:600;color:#fff}.flow-diagram{display:flex;flex-direction:column;gap:24px}.flow-section-title{display:flex;align-items:center;gap:6px;font-size:.8rem;color:var(--text-secondary);margin-bottom:12px;text-transform:uppercase;letter-spacing:.05em}.flow-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:center}.flow-node{display:flex;flex-direction:column;align-items:center;gap:4px;padding:12px 16px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:80px;transition:all .3s}.flow-node span{font-size:.75rem;font-weight:500}.flow-node small{font-size:.7rem;color:var(--text-muted)}.flow-node.active{border-color:var(--primary);background:#3b82f60d}.flow-node.active.heating{border-color:var(--heating);background:#f9731614;color:var(--heating)}.flow-arrow{color:var(--text-muted);transition:color .3s;flex-shrink:0}.flow-arrow.active{animation:arrow-pulse 1.5s ease-in-out infinite}@keyframes arrow-pulse{0%,to{opacity:1;transform:translate(0)}50%{opacity:.5;transform:translate(4px)}}.pool-details-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin-bottom:24px}.pool-detail-card{padding:20px}.pool-detail-card h4{display:flex;align-items:center;gap:8px;font-size:.95rem;margin-bottom:16px;color:var(--text)}.detail-list{display:flex;flex-direction:column;gap:10px}.detail-row{display:flex;justify-content:space-between;align-items:center;padding:6px 0;border-bottom:1px solid var(--border)}.detail-row:last-child{border-bottom:none}.detail-row span:first-child{color:var(--text-secondary);font-size:.85rem}.detail-value{font-weight:600;font-size:.9rem}.detail-value.danger{color:var(--danger)}.rule-list{display:flex;flex-direction:column;gap:10px}.rule-item{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:var(--radius-sm);font-size:.85rem}.rule-item.met{background:#22c55e14;color:var(--success)}.rule-item.unmet{background:#ef444414;color:var(--danger)}.rule-divider{height:1px;background:var(--border);margin:4px 0}.rule-result{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:var(--radius-sm);font-size:.85rem;font-weight:600;background:#64748b1a;color:var(--text-secondary)}.rule-result.active{background:#f973161f;color:var(--heating)}.pool-grid-card{padding:20px;margin-bottom:24px}.pool-grid-card h4{display:flex;align-items:center;gap:8px;margin-bottom:16px;font-size:.95rem}.grid-power-display{display:flex;flex-direction:column;gap:8px}.grid-bar{height:20px;background:var(--bg);border-radius:10px;overflow:hidden}.grid-bar-fill{height:100%;border-radius:10px;transition:width 1s ease}.grid-bar.feeding .grid-bar-fill{background:linear-gradient(90deg,var(--success),#86efac)}.grid-bar.consuming .grid-bar-fill{background:linear-gradient(90deg,var(--danger),#fca5a5)}.grid-labels{display:flex;justify-content:space-between;font-size:.8rem}.grid-value{font-weight:600;color:var(--text)}.grid-threshold{color:var(--text-muted)}.pool-footer{padding:16px 0;margin-top:16px;border-top:1px solid var(--border)}.footer-info{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--text-muted);flex-wrap:wrap}.footer-dot{opacity:.4}.pool-midas-card{padding:20px;margin-bottom:24px}.midas-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:12px}.midas-title{display:flex;align-items:center;gap:10px;color:var(--primary)}.midas-title h3{font-size:1rem;font-weight:600;color:var(--text)}.midas-status-badges{display:flex;gap:8px;flex-wrap:wrap}.midas-badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:20px;font-size:.7rem;font-weight:600}.midas-badge.online{background:#22c55e1f;color:var(--success)}.midas-badge.offline{background:#ef44441f;color:var(--danger)}.midas-badge.running{background:#3b82f61f;color:var(--primary)}.midas-badge.stopped{background:#64748b1f;color:var(--text-muted)}.midas-badge.silent{background:#a855f71f;color:#a855f7}.midas-badge.error{background:#ef444426;color:var(--danger);animation:pulse-glow 2s ease-in-out infinite}.midas-temps{display:flex;align-items:center;gap:12px;margin-bottom:20px;flex-wrap:wrap;justify-content:center}.midas-temp-block{display:flex;flex-direction:column;align-items:center;gap:4px;padding:14px 18px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:90px}.midas-temp-block.highlight{border-color:var(--heating);background:#f973160f}.midas-temp-block.target{border-color:var(--primary);background:#3b82f60f}.midas-temp-block.delta{border-color:var(--success);background:#22c55e0f}.midas-temp-label{font-size:.7rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.midas-temp-value{font-size:1.3rem;font-weight:700;color:var(--text)}.midas-temp-block.highlight .midas-temp-value{color:var(--heating)}.midas-temp-block.delta .midas-temp-value{color:var(--success)}.midas-temp-arrow{color:var(--text-muted);flex-shrink:0}.midas-details{display:flex;flex-direction:column;gap:8px}.midas-details .detail-row{padding:8px 0}.midas-details .error-row{background:#ef44440d;padding:8px 12px;border-radius:var(--radius-sm);border:none}.pool-history-section{margin-top:32px}.history-header{display:flex;align-items:center;gap:10px;margin-bottom:20px;color:var(--primary);flex-wrap:wrap}.history-header h2{flex:1;font-size:1.15rem;font-weight:600;color:var(--text)}.history-controls{display:flex;gap:4px;align-items:center}.btn-timerange{padding:4px 10px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text-secondary);font-size:.75rem;cursor:pointer;transition:all .2s}.btn-timerange:hover{background:var(--bg-hover);color:var(--text)}.btn-timerange.active{background:var(--primary);color:#fff;border-color:var(--primary)}.history-chart{padding:16px;margin-bottom:16px}.history-chart h4{display:flex;align-items:center;gap:8px;font-size:.85rem;margin-bottom:12px;color:var(--text-secondary)}.history-decisions{padding:16px;margin-bottom:16px}.history-decisions h4{display:flex;align-items:center;gap:8px;font-size:.9rem;margin-bottom:16px;color:var(--text)}.empty-hint{color:var(--text-muted);font-size:.85rem;text-align:center;padding:20px}.decision-list{display:flex;flex-direction:column;gap:8px;max-height:400px;overflow-y:auto}.decision-row{display:grid;grid-template-columns:auto auto 1fr auto;align-items:center;gap:12px;padding:10px 14px;background:var(--bg);border-radius:var(--radius-sm);border-left:3px solid var(--border);font-size:.8rem}.decision-time{color:var(--text-muted);font-size:.75rem;white-space:nowrap}.decision-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:12px;font-size:.7rem;font-weight:600;white-space:nowrap}.decision-reason{color:var(--text-secondary);font-size:.75rem;min-width:0;overflow:hidden;text-overflow:ellipsis}.decision-values{display:flex;gap:8px;font-size:.7rem;color:var(--text-muted);white-space:nowrap}.history-table-section{padding:0;margin-bottom:16px;overflow:hidden}.table-toggle{width:100%;display:flex;align-items:center;gap:8px;padding:14px 16px;border:none;background:transparent;color:var(--text-secondary);font-size:.85rem;cursor:pointer;transition:background .2s}.table-toggle:hover{background:var(--bg-hover);color:var(--text)}.table-scroll{overflow-x:auto;max-height:500px;overflow-y:auto}.pool-log-table{width:100%;border-collapse:collapse;font-size:.75rem;white-space:nowrap}.pool-log-table th{position:sticky;top:0;background:var(--bg-secondary);padding:8px 10px;text-align:left;font-weight:600;color:var(--text-secondary);border-bottom:1px solid var(--border);z-index:1}.pool-log-table td{padding:6px 10px;border-bottom:1px solid rgba(255,255,255,.04);color:var(--text)}.pool-log-table tr:hover td{background:#ffffff08}.pool-log-table tr.row-heating td{background:#f973160a}.td-time{color:var(--text-muted)}.td-on{color:var(--success);font-weight:600}.td-off{color:var(--text-muted)}.decision-mini{font-weight:500;font-size:.7rem}@media(max-width:768px){.pool-stats-grid{grid-template-columns:1fr 1fr;gap:10px}.pool-stat-card{padding:14px;flex-direction:column;gap:10px}.pool-stat-card .stat-value-large{font-size:1.3rem}.pool-details-grid{grid-template-columns:1fr}.flow-row{gap:4px}.flow-node{padding:8px 10px;min-width:60px}.flow-node span{font-size:.65rem}.midas-temps{gap:8px}.midas-temp-block{padding:10px 14px;min-width:70px}.midas-temp-value{font-size:1.1rem}.midas-header{flex-direction:column;align-items:flex-start}.decision-row{grid-template-columns:1fr;gap:6px}.decision-values,.history-controls{flex-wrap:wrap}}@media(max-width:480px){.pool-stats-grid{grid-template-columns:1fr}}.pool-stat-card{position:relative}.inline-adjuster{display:inline-flex!important;align-items:center;gap:6px}.btn-adj-inline{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;border:1px solid rgba(255,255,255,.25);background:#ffffff1a;color:inherit;cursor:pointer;transition:all .2s;padding:0;font-size:0}.btn-adj-inline:hover:not(:disabled){background:#3b82f6b3;border-color:#3b82f6e6}.btn-adj-inline:disabled{opacity:.3;cursor:not-allowed}.inline-adj-val{font-weight:700;min-width:50px;text-align:center}.btn-card-toggle{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border-radius:6px;border:none;font-weight:600;font-size:.75rem;cursor:pointer;transition:all .2s;position:absolute;top:12px;right:12px}.btn-card-toggle.on{background:#22c55e;color:#fff}.btn-card-toggle.on:hover:not(:disabled){background:#16a34a}.btn-card-toggle.off{background:#64748b;color:#fff}.btn-card-toggle.off:hover:not(:disabled){background:#475569}.btn-card-toggle:disabled{opacity:.6;cursor:not-allowed}.btn-card-emergency{display:inline-flex;align-items:center;gap:4px;padding:5px 10px;border-radius:6px;border:1px solid #ef4444;background:#ef444426;color:#fca5a5;font-weight:700;font-size:.7rem;cursor:pointer;transition:all .2s;position:absolute;top:12px;right:12px}.btn-card-emergency:hover:not(:disabled){background:#ef4444;color:#fff}.btn-card-emergency:disabled{opacity:.6;cursor:not-allowed}.card-action-ok{position:absolute;top:14px;right:14px}.action-ok{color:#22c55e;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.pool-circuit-card{margin-bottom:24px;overflow:hidden}.circuit-header{display:flex;align-items:center;gap:10px;margin-bottom:8px}.circuit-header h3{margin:0;font-size:1.1rem;font-weight:600;flex:1}.circuit-status-badge{display:inline-flex;align-items:center;padding:4px 12px;border-radius:20px;font-size:.75rem;font-weight:600;border:1px solid}.pool-circuit-svg{width:100%;height:auto}.circuit-desktop{max-height:360px}.circuit-mobile{display:none}.pipe-flow-active{animation:pipeFlow 1.2s linear infinite}@keyframes pipeFlow{0%{stroke-dashoffset:0}to{stroke-dashoffset:-48}}@media(max-width:600px){.circuit-desktop{display:none}.circuit-mobile{display:block;max-height:520px}}
