body{margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}*{box-sizing:border-box;margin:0;padding:0}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.login-container{align-items:center;background:linear-gradient(135deg,#0f172a,#1e3a8a);display:flex;justify-content:center;min-height:100vh;padding:1.5rem}.login-box{background:#1e293be6;border-radius:1rem;box-shadow:0 20px 60px #00000080;max-width:400px;padding:2rem;width:100%}.login-header{align-items:center;color:#fff;display:flex;gap:1rem;margin-bottom:2rem}.login-header svg{color:#60a5fa}.login-header h1{font-size:1.5rem;margin-bottom:.25rem}.login-header p{color:#94a3b8;font-size:.875rem}.login-form{gap:1rem}.form-group,.login-form{display:flex;flex-direction:column}.form-group{gap:.5rem}.form-group label{color:#fff;font-size:.875rem;font-weight:600}.form-group input{background:#0f172acc;border:1px solid #ffffff1a;border-radius:.5rem;color:#fff;font-size:1rem;outline:none;padding:.75rem 1rem;transition:border-color .2s}.form-group input:focus{border-color:#60a5fa}.error-message{background:#ef444433;border:1px solid #ef4444;border-radius:.5rem;color:#fca5a5;font-size:.875rem;padding:.75rem}.error-message,.login-button{align-items:center;display:flex;gap:.5rem}.login-button{background:#2563eb;border:none;border-radius:.5rem;color:#fff;cursor:pointer;font-size:1rem;font-weight:600;justify-content:center;padding:.75rem 1rem;transition:background .2s}.login-button:hover:not(:disabled){background:#1d4ed8}.login-button:disabled{cursor:not-allowed;opacity:.5}.menu-container{align-items:center;background:linear-gradient(135deg,#0f172a,#1e3a8a);display:flex;justify-content:center;min-height:100vh;padding:2rem}.menu-content{max-width:1200px;width:100%}.menu-header{color:#fff;margin-bottom:3rem;text-align:center}.menu-header svg{color:#60a5fa;margin-bottom:1rem}.menu-header h1{font-size:3rem;margin-bottom:.5rem}.menu-header p{color:#94a3b8;font-size:1.25rem}.menu-grid{grid-gap:2rem;gap:2rem;grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.menu-card{background:#1e293be6;border:2px solid #ffffff1a;border-radius:1.5rem;color:#fff;cursor:pointer;padding:3rem 2rem;text-align:center;transition:all .3s}.menu-card:hover{background:#2563eb33;border-color:#60a5fa;box-shadow:0 20px 60px #60a5fa4d;transform:translateY(-10px)}.menu-card svg{color:#60a5fa;margin-bottom:1.5rem}.menu-card h2{font-size:1.75rem;margin-bottom:.5rem}.menu-card p{color:#94a3b8;font-size:1rem;margin-bottom:1rem}.menu-badge{background:#60a5fa33;border:1px solid #60a5fa;border-radius:.5rem;color:#60a5fa;display:inline-block;font-size:.875rem;font-weight:600;padding:.5rem 1rem}.logout-button{background:#ef444433;border:1px solid #ef4444;border-radius:.75rem;color:#fca5a5;font-size:1rem;padding:1rem;width:100%}.logout-button:hover{background:#ef44444d}.dashboard{background:linear-gradient(135deg,#0f172a,#1e3a8a);color:#fff;min-height:100vh;padding:1.5rem}.dashboard-container{max-width:1400px}.dashboard-header{flex-wrap:wrap;gap:1rem;margin-bottom:2rem}.back-button{align-items:center;background:#475569cc;border:none;border-radius:.5rem;color:#fff;cursor:pointer;display:flex;font-weight:600;gap:.5rem;padding:.5rem 1rem;transition:all .2s}.back-button:hover{background:#475569}.header-left{align-items:center;display:flex;flex:1 1;gap:1rem}.header-left svg{color:#60a5fa;flex-shrink:0}.header-left h1{font-size:2rem;margin-bottom:.25rem}.header-left p{color:#94a3b8;font-size:.875rem}.btn-refresh{align-items:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff26;border:2px solid #ffffff4d;border-radius:12px;box-shadow:0 4px 12px #0003;color:#fff;cursor:pointer;display:flex;font-size:14px;font-weight:600;gap:8px;padding:12px;position:relative;transition:all .3s ease}.btn-refresh:hover:not(:disabled){background:#ffffff40;border-color:#ffffff80;box-shadow:0 6px 16px #0000004d;transform:translateY(-2px)}.btn-refresh:active{box-shadow:0 2px 8px #0003;transform:translateY(0)}.btn-refresh:disabled{cursor:not-allowed;opacity:.5}.error-banner{background:#ef444433;border:1px solid #ef4444;border-radius:.75rem;color:#fca5a5;gap:.5rem;margin-bottom:1.5rem;padding:1rem}.loading-container,.loading-state{background:#1e293bcc;border-radius:1rem;padding:3rem;text-align:center}.loading-container{background:linear-gradient(135deg,#0f172a,#1e3a8a);min-height:100vh}.loading-container p,.loading-state p{color:#94a3b8;font-size:1.25rem;margin-top:1rem}.devices-grid{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:repeat(auto-fill,minmax(350px,1fr))}.device-card{background:#1e293bcc;border-radius:1rem;box-shadow:0 10px 30px #0000004d;padding:1.5rem;transition:all .3s}.device-card.active{background:linear-gradient(135deg,#2563eb,#0ea5e9)}.device-card.inactive{opacity:.75}.device-header{gap:1rem;justify-content:space-between;margin-bottom:1.5rem}.device-header,.device-title{align-items:center;display:flex}.device-title{flex:1 1;gap:.75rem;min-width:0}.device-title h2{font-size:1.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.offline-badge{background:#dc2626;border-radius:.25rem;display:inline-block;font-size:.75rem;font-weight:600;padding:.125rem .5rem}.power-button{align-items:center;border:none;border-radius:.5rem;cursor:pointer;display:flex;flex-shrink:0;font-weight:600;gap:.5rem;padding:.5rem 1rem;transition:all .2s}.power-button.on{background:#fff;color:#2563eb}.power-button.off{background:#475569cc;color:#fff}.power-button:hover{transform:scale(1.05)}.temperature-control{background:#ffffff1a;border-radius:.75rem;margin-bottom:1rem;padding:1.5rem}.temperature-control.disabled{background:#4755694d;opacity:.5}.temp-display{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:1fr 1fr;margin-bottom:1rem}.temp-item{text-align:center}.temp-label{font-size:.875rem;margin-bottom:.5rem;opacity:.8}.temp-value{align-items:center;display:flex;font-size:2rem;gap:.25rem;justify-content:center}.temp-buttons{grid-gap:.5rem;display:grid;gap:.5rem;grid-template-columns:1fr 1fr}.temp-btn{background:#fff3;border:none;border-radius:.5rem;color:#fff;cursor:pointer;font-size:1.25rem;font-weight:700;padding:.75rem;transition:all .2s}.temp-btn:hover{background:#ffffff4d;transform:scale(.95)}.device-info{gap:.75rem}.info-item{background:#ffffff1a;border-radius:.5rem;padding:.75rem}.mode-btn{border:2px solid #0000;font-size:1.5rem;transition:all .2s}.mode-btn:hover{background:#fff3;transform:scale(1.05)}.mode-btn.active{background:#ffffff4d;box-shadow:0 0 10px #ffffff4d}.fan-btn{border:2px solid #0000;font-size:.75rem;padding:.5rem;transition:all .2s}.fan-btn:hover{background:#fff3;transform:scale(1.05)}.fan-btn.active{background:#ffffff4d;box-shadow:0 0 10px #ffffff4d}.cameras-grid{grid-gap:2rem;gap:2rem;grid-template-columns:repeat(auto-fill,minmax(400px,1fr));margin-bottom:2rem}.camera-card{background:#1e293be6;border-radius:1rem;box-shadow:0 10px 30px #0000004d;padding:1.5rem}.camera-header{margin-bottom:1rem}.camera-header h3{font-size:1.5rem}.camera-status{color:#22c55e;font-size:.875rem;font-weight:600}.camera-preview{background:#0f172acc;border-radius:.75rem;margin-bottom:1rem;min-height:200px;padding:1rem;text-align:center}.camera-image{border-radius:.5rem;height:auto}.camera-preview svg{color:#60a5fa;margin-bottom:1rem}.camera-preview p{color:#94a3b8;font-size:1.125rem;margin-bottom:.5rem}.camera-preview small{color:#64748b;font-size:.875rem}.camera-info{background:#ffffff0d;border-radius:.5rem;margin-bottom:1rem;padding:1rem}.camera-info p{color:#cbd5e1;font-size:.875rem}.camera-actions{grid-gap:.75rem;display:grid;gap:.75rem;grid-template-columns:1fr 1fr}.camera-btn{background:#2563eb;border:none;border-radius:.5rem;color:#fff;font-weight:600;padding:.75rem}.camera-btn:hover{background:#1d4ed8}.camera-note{align-items:center;background:#fbbf241a;border:1px solid #f59e0b;border-radius:.75rem;color:#fbbf24;display:flex;gap:.75rem;padding:1rem}.camera-note svg{flex-shrink:0}.spin{animation:spin 1s linear infinite}@media (max-width:768px){.dashboard{padding:1rem}.dashboard-header{align-items:flex-start;flex-direction:column}.header-left h1{font-size:1.5rem}.cameras-grid,.devices-grid{grid-template-columns:1fr}.menu-header h1{font-size:2rem}.menu-grid{grid-template-columns:1fr}}.blind-card{background:#1e293bcc;border-radius:1rem;box-shadow:0 10px 30px #0000004d;padding:1.5rem;transition:all .3s}.blind-card.active{background:linear-gradient(135deg,#059669,#10b981)}.blind-card.inactive{opacity:.6}.blind-status{display:flex;gap:.5rem}.status-badge{gap:.25rem;padding:.25rem .75rem}.status-open{background:#22c55e33;border:1px solid #22c55e;color:#22c55e}.status-closed{background:#ef444433;border:1px solid #ef4444;color:#fca5a5}.status-closing,.status-opening{background:#3b82f633;border:1px solid #3b82f6;color:#60a5fa}.status-stopped{background:#fbbf2433;border:1px solid #f59e0b;color:#fbbf24}.blind-position{background:#ffffff1a;border-radius:.75rem;margin-bottom:1rem;padding:1.5rem}.position-display{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.position-label{font-size:.875rem;opacity:.8}.position-value{font-size:2rem;font-weight:700}.position-bar{background:#fff3;border-radius:.5rem;height:1rem;overflow:hidden;position:relative}.position-fill{background:linear-gradient(90deg,#22c55e,#10b981);border-radius:.5rem;box-shadow:0 0 10px #22c55e80;height:100%;transition:width .5s ease}.blind-controls{grid-gap:.75rem;display:grid;gap:.75rem;grid-template-columns:1fr 1fr 1fr;margin-bottom:1rem}.blind-btn{align-items:center;border:none;border-radius:.75rem;color:#fff;cursor:pointer;display:flex;font-weight:600;gap:.5rem;justify-content:center;padding:1rem;transition:all .2s}.blind-btn:disabled{cursor:not-allowed;opacity:.5}.blind-btn-open{background:linear-gradient(135deg,#22c55e,#10b981)}.blind-btn-open:hover:not(:disabled){background:linear-gradient(135deg,#16a34a,#059669);transform:translateY(-2px)}.blind-btn-stop{background:linear-gradient(135deg,#f59e0b,#f97316)}.blind-btn-stop:hover:not(:disabled){background:linear-gradient(135deg,#d97706,#ea580c);transform:translateY(-2px)}.blind-btn-close{background:linear-gradient(135deg,#3b82f6,#2563eb)}.blind-btn-close:hover:not(:disabled){background:linear-gradient(135deg,#2563eb,#1d4ed8);transform:translateY(-2px)}.blind-presets{background:#ffffff0d;border-radius:.75rem;margin-bottom:1rem;padding:1rem}.preset-label{font-size:.875rem;font-weight:600;margin-bottom:.75rem;opacity:.8}.preset-buttons{grid-gap:.5rem;display:grid;gap:.5rem;grid-template-columns:repeat(5,1fr)}.preset-btn{background:#ffffff1a;border:2px solid #0000;border-radius:.5rem;color:#fff;cursor:pointer;font-weight:600;padding:.75rem;transition:all .2s}.preset-btn:hover:not(:disabled){background:#fff3;border-color:#fff6;transform:scale(1.05)}.preset-btn:disabled{cursor:not-allowed;opacity:.5}.blind-info{background:#ffffff0d;border-radius:.5rem;display:flex;flex-direction:column;gap:.5rem;padding:1rem}.info-row{display:flex;font-size:.875rem;justify-content:space-between}.info-row span:first-child{opacity:.8}.info-row span:last-child{font-weight:600}@keyframes pulse-opening{0%,to{opacity:1}50%{opacity:.6}}@keyframes pulse-closing{0%,to{opacity:1}50%{opacity:.6}}.blind-card .status-opening{animation:pulse-opening 1.5s ease-in-out infinite}.blind-card .status-closing{animation:pulse-closing 1.5s ease-in-out infinite}@media (max-width:768px){.blind-controls{grid-template-columns:1fr}.preset-buttons{grid-template-columns:repeat(3,1fr)}.position-value{font-size:1.5rem}}.tuya-card{background:#1e293bcc;border-radius:1rem;box-shadow:0 10px 30px #0000004d;padding:1.5rem;transition:all .3s}.tuya-card.active{background:linear-gradient(135deg,#7c3aed,#a855f7)}.tuya-card.inactive{opacity:.6}.tuya-info-banner{align-items:flex-start;background:linear-gradient(135deg,#3b82f6,#60a5fa);border-radius:1rem;box-shadow:0 10px 30px #3b82f64d;color:#fff;display:flex;gap:1rem;margin-bottom:2rem;padding:1.5rem}.tuya-info-banner svg{flex-shrink:0;margin-top:.25rem}.tuya-info-banner h3{font-size:1.25rem;margin:0 0 .5rem}.tuya-info-banner p{line-height:1.5;margin:.25rem 0;opacity:.95}.tuya-device-info{background:#ffffff1a;border-radius:.75rem;display:flex;flex-direction:column;gap:1rem;margin-bottom:1rem;padding:1.5rem}.info-section{align-items:center;background:#ffffff0d;border-radius:.5rem;display:flex;gap:1rem;padding:.75rem}.info-section svg{color:#60a5fa;flex-shrink:0}.info-label{font-size:.875rem;margin-bottom:.25rem;opacity:.8}.info-value{font-size:1.125rem;font-weight:600}.device-status{display:flex;gap:.5rem}.status-badge{display:inline-flex;gap:.375rem;padding:.375rem .875rem}.status-online{background:#22c55e33;border:1px solid #22c55e;color:#22c55e}.status-offline{background:#ef444433;border:1px solid #ef4444;color:#fca5a5}.tuya-actions{display:flex;gap:.75rem;margin-bottom:1rem}.tuya-btn{align-items:center;background:linear-gradient(135deg,#3b82f6,#2563eb);border:none;border-radius:.75rem;color:#fff;cursor:pointer;display:flex;flex:1 1;font-size:1rem;font-weight:600;gap:.5rem;justify-content:center;padding:1rem;transition:all .2s}.tuya-btn:hover{box-shadow:0 10px 20px #3b82f64d;transform:translateY(-2px)}.tuya-btn:active{transform:translateY(0)}.tuya-note{background:#ffffff0d;border-left:4px solid #60a5fa;border-radius:.75rem;padding:1.25rem}.tuya-note p{font-weight:600;margin:0 0 .75rem}.tuya-note ul{list-style-type:none;margin:0;padding-left:1.5rem}.tuya-note li{line-height:1.5;margin-bottom:.5rem;padding-left:1.5rem;position:relative}.tuya-note li:before{color:#22c55e;content:"✓";font-weight:700;left:0;position:absolute}.tuya-card[data-type=heatpump]{border-top:4px solid #ef4444}.tuya-card[data-type=heatpump].active{background:linear-gradient(135deg,#dc2626,#f97316)}.tuya-card[data-type=vmc]{border-top:4px solid #06b6d4}.tuya-card[data-type=vmc].active{background:linear-gradient(135deg,#0891b2,#06b6d4)}.menu-card:nth-child(4){border-top:4px solid #ef4444}.menu-card:nth-child(4):hover{background:#ef444433;border-color:#ef4444;box-shadow:0 20px 60px #ef44444d}.menu-card:nth-child(5){border-top:4px solid #06b6d4}.menu-card:nth-child(5):hover{background:#06b6d433;border-color:#06b6d4;box-shadow:0 20px 60px #06b6d44d}@media (max-width:768px){.tuya-info-banner{flex-direction:column;text-align:center}.tuya-info-banner svg{margin:0 auto}.info-section{text-align:center}.info-section,.tuya-actions{flex-direction:column}.menu-grid{grid-template-columns:1fr}}@keyframes pulse-online{0%,to{opacity:1}50%{opacity:.6}}.status-online:before{animation:pulse-online 2s ease-in-out infinite}.tuya-loading{align-items:center;display:flex;flex-direction:column;justify-content:center;min-height:300px;padding:3rem}.tuya-loading svg{color:#60a5fa;margin-bottom:1rem}.tuya-loading p{color:#94a3b8;font-size:1.125rem}.menu-grid{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));margin-bottom:2rem}@media (min-width:1200px){.menu-grid{grid-template-columns:repeat(3,1fr)}}@media (min-width:1600px){.menu-grid{grid-template-columns:repeat(5,1fr)}}.camera-image-container{height:100%;position:relative;width:100%}.camera-loading-overlay{align-items:center;background:#000000b3;border-radius:50%;display:flex;justify-content:center;padding:8px;position:absolute;right:10px;top:10px}.camera-loading-overlay .spin{color:#fff}.camera-timestamp{background:#000000b3;border-radius:4px;bottom:10px;color:#fff;font-size:12px;font-weight:500;left:10px;padding:4px 8px;position:absolute}.camera-card.live-mode{animation:live-pulse 2s ease-in-out infinite;border:2px solid #ef4444;box-shadow:0 0 20px #ef44444d}@keyframes live-pulse{0%,to{box-shadow:0 0 20px #ef44444d}50%{box-shadow:0 0 30px #ef444480}}.camera-status.live{animation:blink 1.5s ease-in-out infinite;color:#ef4444}@keyframes blink{0%,to{opacity:1}50%{opacity:.5}}.camera-btn.live-active{background:#ef4444;border-color:#ef4444;color:#fff}.camera-btn.live-active:hover{background:#dc2626;border-color:#dc2626}.cameras-grid{grid-gap:24px;display:grid;gap:24px;grid-template-columns:repeat(auto-fit,minmax(400px,1fr));padding:20px}.camera-card{background:#fff;border:2px solid #e5e7eb;border-radius:12px;overflow:hidden;transition:all .3s ease}.camera-card:hover{box-shadow:0 8px 24px #0000001a;transform:translateY(-4px)}.camera-header{align-items:center;background:#f9fafb;border-bottom:2px solid #e5e7eb;display:flex;justify-content:space-between;padding:16px}.camera-header h3{color:#1f2937;font-size:18px;font-weight:600;margin:0}.camera-status{color:#10b981;font-size:14px;font-weight:500}.camera-preview{align-items:center;background:#000;color:#fff;display:flex;flex-direction:column;gap:12px;height:300px;justify-content:center;position:relative;width:100%}.camera-image{cursor:pointer;height:100%;object-fit:contain;transition:transform .2s;width:100%}.camera-image:hover{transform:scale(1.02)}.camera-actions{background:#f9fafb;display:flex;gap:8px;padding:16px}.camera-btn{align-items:center;background:#fff;border:2px solid #3b82f6;border-radius:8px;color:#3b82f6;cursor:pointer;display:flex;flex:1 1;font-weight:500;gap:6px;justify-content:center;padding:10px 16px;transition:all .2s}.camera-btn:hover:not(:disabled){background:#3b82f6;color:#fff;transform:translateY(-2px)}.camera-btn:disabled{cursor:not-allowed;opacity:.5}@media (max-width:768px){.cameras-grid{gap:16px;grid-template-columns:1fr;padding:16px}.camera-preview{height:250px}.camera-actions{flex-direction:column}}.app-content{padding:20px}.view-header{background:#fff;border-radius:12px;box-shadow:0 4px 12px #00000026;gap:16px;margin-bottom:24px;padding:20px 24px}.btn-back{background:#f8f9fa;border-radius:8px;justify-content:center;padding:10px}.btn-back:hover{background:#e9ecef}.view-header-title{gap:12px;margin-bottom:4px}.view-header-title h1{color:#212529;font-size:24px;font-weight:600}.view-subtitle{color:#6c757d;font-size:14px}.spinning{animation:spin 1s linear infinite}.error-banner{align-items:center;background:#fff3cd;border:1px solid #ffc107;border-radius:8px;color:#856404;display:flex;gap:12px;margin-bottom:16px;padding:12px 16px}.loading-container{align-items:center;color:#fff;display:flex;flex-direction:column;justify-content:center;padding:60px 20px}.loading-spinner{animation:spin 1s linear infinite;border:4px solid #fff3;border-radius:50%;border-top-color:#4dabf7;height:48px;margin-bottom:16px;width:48px}.status-indicator{align-items:center;display:flex;font-size:14px;font-weight:500;gap:8px}.status-dot{border-radius:50%;height:8px;width:8px}.status-dot.online{background:#51cf66;box-shadow:0 0 8px #51cf6680}.status-dot.offline{background:#868e96}.power-badge{border-radius:16px;font-size:12px;font-weight:600;letter-spacing:.5px;padding:6px 16px;text-transform:uppercase}.power-badge.on{background:#51cf6633;color:#51cf66}.power-badge.off{background:#ffffff26;color:#ffffffb3}.heatpump-container{display:flex;flex-direction:column;gap:20px}.heatpump-status-card{box-shadow:0 8px 24px #0003}.heatpump-status-card.offline{background:linear-gradient(135deg,#495057,#6c757d)}.heatpump-status-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:28px}.temp-display-section{grid-gap:24px;align-items:center;display:grid;gap:24px;grid-template-columns:1fr auto 1fr;margin-bottom:24px}.temp-display-main,.temp-display-target{align-items:center;display:flex;gap:16px}.target-icon,.temp-icon{flex-shrink:0;opacity:.9}.temp-reading{display:flex;flex-direction:column}.temp-value{font-size:52px;font-weight:700;line-height:1;text-shadow:0 2px 8px #0000001a}.temp-label{font-size:13px;margin-top:6px;opacity:.9}.temp-divider{background:#ffffff4d;height:70px;width:2px}.temp-progress{margin-top:20px}.progress-bar{background:#00000026;border-radius:5px;height:10px;margin-bottom:8px;overflow:hidden}.progress-fill{background:#fff;border-radius:5px;height:100%;transition:width .5s ease}.progress-labels{display:flex;font-size:12px;justify-content:space-between;opacity:.85}.heatpump-controls-card{background:#fff;border-radius:16px;box-shadow:0 8px 24px #0003;padding:28px}.heatpump-controls-card h3{color:#212529;font-size:18px;font-weight:600;margin:0 0 24px}.control-section{margin-bottom:28px}.control-section:last-child{margin-bottom:0}.control-header{color:#495057;font-size:15px;gap:10px;margin-bottom:14px}.btn-power,.control-header{align-items:center;display:flex;font-weight:600}.btn-power{border:none;border-radius:12px;cursor:pointer;font-size:16px;gap:12px;justify-content:center;padding:18px;transition:all .3s ease;width:100%}.btn-power.on{background:linear-gradient(135deg,#51cf66,#40c057);box-shadow:0 4px 12px #40c05740;color:#fff}.device-info{border-top:1px solid #ffffff1a;display:flex;flex:1 1;flex-direction:column;gap:1.5rem;margin-top:1.5rem;padding-top:1rem}.info-item{display:flex;flex-direction:column;gap:.75rem}.info-label{color:#ffffffe6;font-size:.75rem;font-weight:600;text-transform:uppercase}.mode-selector{grid-gap:.5rem;display:grid;gap:.5rem;grid-template-columns:repeat(4,1fr)}.mode-btn{align-items:center;aspect-ratio:1;background:#ffffff1a;border:2px solid #fff3;border-radius:.5rem;color:#fff;cursor:pointer;display:flex;font-size:2rem;justify-content:center;min-height:56px;padding:.75rem}.mode-btn:hover{background:#ffffff26}.mode-btn.active{background:#ffffff40;border-color:#fff}.fan-selector{grid-gap:.5rem;display:grid;gap:.5rem;grid-template-columns:repeat(4,1fr)}.fan-btn{align-items:center;background:#ffffff1a;border:2px solid #fff3;border-radius:.5rem;color:#fff;cursor:pointer;display:flex;font-size:.875rem;font-weight:600;justify-content:center;min-height:44px;padding:.5rem .75rem}.fan-btn:hover{background:#ffffff26}.fan-btn.active{background:#ffffff40;border-color:#fff}.heatpump-status-card{background:linear-gradient(135deg,#ff6b6b,#ff8787);border-radius:16px;color:#fff;padding:32px}.vmc-status-card{background:linear-gradient(135deg,#4dabf7,#339af0);border-radius:16px;color:#fff;padding:28px}.vmc-metrics-grid{grid-gap:16px;gap:16px}.metric-card{background:#fff;border-radius:14px;gap:14px;padding:20px}.app-container{background:linear-gradient(135deg,#1e3a5f,#2d4a6f);min-height:100vh}.app-content{margin:0 auto;max-width:1400px;padding:2rem}.view-header{background:#1e293be6;border-radius:1rem;box-shadow:0 10px 30px #0000004d;gap:1rem;margin-bottom:2rem;padding:1.5rem}.btn-back,.view-header{align-items:center;display:flex}.btn-back{background:#ffffff1a;border:none;border-radius:.5rem;color:#fff;cursor:pointer;gap:.5rem;padding:.75rem 1rem;transition:all .2s}.btn-back:hover{background:#ffffff26}.view-header-content{flex:1 1}.view-header-title{align-items:center;color:#fff;display:flex;gap:1rem}.view-header-title h1{font-size:1.75rem;font-weight:700;margin:0}.view-subtitle{color:#ffffffb3;font-size:.875rem;margin-top:.25rem}.heatpump-container,.vmc-container{display:flex;flex-direction:column;gap:2rem}.heatpump-status-card,.vmc-status-card{background:#1e293be6;border-radius:1rem;box-shadow:0 10px 30px #0000004d;padding:2rem;transition:all .3s}.heatpump-status-card.online,.vmc-status-card.online{background:linear-gradient(135deg,#2563eb,#1e40af)}.heatpump-status-card.offline,.vmc-status-card.offline{opacity:.7}.status-header{justify-content:space-between;margin-bottom:1.5rem}.status-header,.status-title{align-items:center;display:flex}.status-title{color:#fff;gap:1rem}.status-title h2{font-size:1.5rem;font-weight:700;margin:0}.status-badge{align-items:center;border-radius:.5rem;display:flex;font-size:.875rem;font-weight:600;gap:.5rem;padding:.5rem 1rem}.status-badge.online{background:#22c55e33;border:1px solid #22c55e66;color:#22c55e}.status-badge.offline{background:#94a3b833;border:1px solid #94a3b866;color:#94a3b8}.power-button-heatpump,.power-button-vmc{align-items:center;background:#ffffff1a;border:2px solid #fff3;border-radius:.5rem;color:#fff;cursor:pointer;display:flex;font-size:.875rem;font-weight:600;gap:.5rem;padding:.75rem 1.5rem;transition:all .2s}.power-button-heatpump:hover,.power-button-vmc:hover{background:#fff3;transform:translateY(-2px)}.power-button-heatpump.on,.power-button-vmc.on{background:#22c55e33;border-color:#22c55e66;color:#22c55e}.vmc-metrics-grid{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));margin-top:1.5rem}.metric-card{align-items:center;background:#fffffff2;border-radius:1rem;box-shadow:0 4px 20px #00000026;display:flex;gap:1.25rem;padding:1.5rem;transition:all .3s}.metric-card:hover{box-shadow:0 8px 30px #00000040;transform:translateY(-5px)}.metric-icon{align-items:center;border-radius:.75rem;display:flex;flex-shrink:0;font-size:1.5rem;height:56px;justify-content:center;width:56px}.metric-card.temp-indoor .metric-icon{background:linear-gradient(135deg,#ef4444,#f87171);color:#fff}.metric-card.temp-outdoor .metric-icon{background:linear-gradient(135deg,#3b82f6,#60a5fa);color:#fff}.metric-card.humidity-indoor .metric-icon{background:linear-gradient(135deg,#10b981,#34d399);color:#fff}.metric-card.humidity-outdoor .metric-icon{background:linear-gradient(135deg,#06b6d4,#22d3ee);color:#fff}.metric-card.co2 .metric-icon{background:linear-gradient(135deg,#8b5cf6,#a78bfa);color:#fff}.metric-card.filter .metric-icon{background:linear-gradient(135deg,#f59e0b,#fbbf24);color:#fff}.metric-content{flex:1 1}.metric-label{color:#6b7280;font-size:.875rem;font-weight:600;letter-spacing:.5px;margin-bottom:.5rem;text-transform:uppercase}.metric-value{align-items:baseline;color:#111827;display:flex;font-size:2rem;font-weight:700;gap:.5rem;line-height:1}.metric-unit{color:#6b7280;font-size:1.25rem;font-weight:600}.metric-status{align-items:center;color:#10b981;display:flex;font-size:.75rem;font-weight:600;gap:.25rem;margin-top:.5rem}.metric-status.warning{color:#f59e0b}.metric-status.error{color:#ef4444}.filter-bar,.humidity-bar{background:#e5e7eb;border-radius:4px;height:8px;margin-top:.75rem;overflow:hidden}.filter-fill,.humidity-fill{border-radius:4px;height:100%;transition:width .5s ease}.humidity-fill{background:linear-gradient(90deg,#10b981,#34d399)}.filter-fill{background:linear-gradient(90deg,#f59e0b,#fbbf24)}.heatpump-info-card,.vmc-climate-comparison{background:#fffffff2;border-radius:1rem;box-shadow:0 10px 30px #00000026;padding:2rem}.comparison-title{align-items:center;color:#111827;display:flex;font-size:1.25rem;font-weight:700;gap:.75rem;margin-bottom:1.5rem}.comparison-grid{grid-gap:1.5rem;display:grid;gap:1.5rem;grid-template-columns:repeat(2,1fr)}.comparison-item{display:flex;flex-direction:column;gap:.5rem}.comparison-label{color:#6b7280;font-size:.875rem;font-weight:600;text-transform:uppercase}.comparison-section{background:#f9fafb;border-radius:.75rem;padding:1rem}.comparison-section h4{color:#374151;font-size:.875rem;font-weight:700;margin-bottom:.75rem}.comparison-value{color:#111827;font-size:1.5rem;font-weight:700}.heatpump-controls-card{background:#fffffff2;border-radius:1rem;box-shadow:0 10px 30px #00000026;padding:2rem}.controls-title{color:#111827;font-size:1.25rem;font-weight:700;margin-bottom:1.5rem}.control-group{display:flex;flex-direction:column;gap:1rem;margin-bottom:1.5rem}.control-label{color:#6b7280;font-size:.875rem;font-weight:600;letter-spacing:.5px;text-transform:uppercase}.control-buttons{display:flex;flex-wrap:wrap;gap:.75rem}.control-btn{background:#f3f4f6;border:2px solid #e5e7eb;border-radius:.75rem;color:#374151;cursor:pointer;flex:1 1;font-size:.875rem;font-weight:600;min-width:120px;padding:.875rem 1.5rem;transition:all .2s}.control-btn:hover{background:#e5e7eb;border-color:#d1d5db;transform:translateY(-2px)}.control-btn.active{background:linear-gradient(135deg,#2563eb,#1e40af);border-color:#1e40af;box-shadow:0 4px 12px #2563eb4d;color:#fff}@media (max-width:768px){.comparison-grid,.vmc-metrics-grid{grid-template-columns:1fr}.control-buttons{flex-direction:column}.control-btn{min-width:100%}}@media (max-width:480px){.app-content,.metric-card{padding:1rem}.metric-icon{height:48px;width:48px}.metric-value{font-size:1.5rem}}.logout-button{align-items:center;background:#ef44441a;border:1px solid #ef44444d;border-radius:8px;color:#ef4444;cursor:pointer;display:flex;font-size:14px;font-weight:600;gap:8px;padding:8px 16px;position:absolute;right:20px;top:20px;transition:all .2s;z-index:100}.logout-button:hover{background:#ef444433;border-color:#ef444480;box-shadow:0 4px 12px #ef44444d;transform:translateY(-2px)}.logout-button:active{transform:translateY(0)}.login-footer{border-top:1px solid #ffffff1a;margin-top:20px;padding-top:20px;text-align:center}.login-footer p{align-items:center;color:#9ca3af;display:flex;font-size:12px;gap:6px;justify-content:center;margin:0}.menu-header{padding-top:40px;position:relative}@media (max-width:768px){.logout-button{font-size:12px;padding:6px 12px;right:10px;top:10px}.logout-button svg{height:14px;width:14px}}.token-indicator{align-items:center;border-radius:6px;bottom:20px;display:flex;font-size:11px;font-weight:600;gap:6px;padding:8px 12px;position:fixed;right:20px;transition:all .3s;z-index:1000}.token-indicator.valid{background:#22c55e1a;border:1px solid #22c55e4d;color:#22c55e}.token-indicator.expiring{background:#fbbf241a;border:1px solid #fbbf244d;color:#fbbf24}.token-indicator.expired{background:#ef44441a;border:1px solid #ef44444d;color:#ef4444}.btn-refresh svg{transition:transform .3s ease}.btn-refresh:hover:not(:disabled) svg{animation:spin 1s linear infinite}.menu-button.dashboard{background:linear-gradient(135deg,#667eea,#764ba2)}.menu-button.dashboard:hover{box-shadow:0 10px 30px #667eea66;transform:translateY(-5px)}.dashboard-container{background:linear-gradient(135deg,#1a1a2e,#16213e);margin:0 auto;max-width:1600px;min-height:100vh;padding:20px}.dashboard-header{align-items:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff0d;border-radius:12px;display:flex;justify-content:space-between;margin-bottom:30px;padding:20px}.dashboard-header h1{color:#fff;font-size:28px;font-weight:600;margin:0}.dashboard-controls,.dashboard-header h1{align-items:center;display:flex;gap:12px}.period-selector{background:#ffffff1a;border:2px solid #fff3;border-radius:8px;color:#fff;cursor:pointer;font-size:14px;padding:10px 16px;transition:all .3s ease}.period-selector:hover{background:#ffffff26;border-color:#fff6}.period-selector option{background:#1a1a2e;color:#fff}.auto-refresh-btn{align-items:center;background:#ffffff1a;border:2px solid #fff3;border-radius:8px;color:#fff;cursor:pointer;display:flex;font-size:14px;gap:8px;padding:10px 16px;transition:all .3s ease}.auto-refresh-btn:hover{background:#ffffff26;border-color:#fff6}.auto-refresh-btn.active{background:#00c8534d;border-color:#00c853}.refresh-btn{align-items:center;background:#0088fe33;border:2px solid #0088fe80;border-radius:8px;color:#fff;cursor:pointer;display:flex;font-size:14px;gap:8px;padding:10px 16px;transition:all .3s ease}.refresh-btn:hover{background:#0088fe4d;border-color:#0088fe;transform:translateY(-2px)}.refresh-btn:disabled{cursor:not-allowed;opacity:.5}.refresh-btn .spinning{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.error-message{background:#ff525233;border:2px solid #ff5252;border-radius:8px;color:#ff5252;margin-bottom:20px;padding:15px;text-align:center}.stats-grid{grid-gap:20px;display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));margin-bottom:30px}.stat-card{align-items:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff0d;border:2px solid #ffffff1a;border-radius:12px;display:flex;gap:16px;padding:20px;transition:all .3s ease}.stat-card:hover{border-color:#ffffff4d;box-shadow:0 10px 30px #0000004d;transform:translateY(-5px)}.stat-icon{align-items:center;border-radius:12px;display:flex;flex-shrink:0;height:60px;justify-content:center;width:60px}.stat-icon.blue{background:linear-gradient(135deg,#0088fe,#06c)}.stat-icon.green{background:linear-gradient(135deg,#00c49f,#097)}.stat-icon.purple{background:linear-gradient(135deg,#8884d8,#66b)}.stat-icon.orange{background:linear-gradient(135deg,#ffbb28,#f90)}.stat-content h3{color:#999;font-size:14px;font-weight:500;letter-spacing:.5px;margin:0 0 8px;text-transform:uppercase}.stat-value{color:#fff;font-size:28px;font-weight:700;line-height:1;margin:0}.stat-subtitle{color:#00c49f;font-size:14px;margin:4px 0 0}.chart-container{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff0d;border:2px solid #ffffff1a;border-radius:12px;margin-bottom:30px;padding:24px}.chart-header{justify-content:space-between;margin-bottom:24px}.chart-header,.chart-header h2{align-items:center;display:flex}.chart-header h2{color:#fff;font-size:20px;font-weight:600;gap:12px;margin:0}.chart-period{color:#999;font-size:14px;font-weight:500}.no-data{align-items:center;color:#666;display:flex;font-size:16px;height:200px;justify-content:center}.charts-row{grid-gap:30px;display:grid;gap:30px;grid-template-columns:repeat(auto-fit,minmax(500px,1fr));margin-bottom:30px}.chart-container.half{margin-bottom:0}.custom-tooltip{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#1a1a2ef2;border:2px solid #fff3;border-radius:8px;padding:12px}.custom-tooltip .label{color:#fff;font-size:14px;font-weight:600;margin:0 0 8px}.custom-tooltip p{font-size:13px;margin:4px 0}.table-container{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff0d;border:2px solid #ffffff1a;border-radius:12px;margin-bottom:30px;padding:24px}.table-header{margin-bottom:20px}.table-header h2{align-items:center;color:#fff;display:flex;font-size:20px;font-weight:600;gap:12px;margin:0}.actions-table,.energy-table{border-collapse:collapse;width:100%}.actions-table thead,.energy-table thead{background:#ffffff0d}.actions-table th,.energy-table th{border-bottom:2px solid #ffffff1a;color:#999;font-size:13px;font-weight:600;letter-spacing:.5px;padding:16px;text-align:left;text-transform:uppercase}.actions-table td,.energy-table td{border-bottom:1px solid #ffffff0d;color:#fff;font-size:14px;padding:14px 16px}.actions-table tbody tr:hover,.energy-table tbody tr:hover{background:#ffffff08}.total-row{background:#00c8531a;border-top:2px solid #00c8534d}.total-row td{color:#00c49f;font-weight:600;padding:16px}@media (max-width:1200px){.charts-row{grid-template-columns:1fr}}@media (max-width:768px){.dashboard-header{flex-direction:column;gap:16px}.dashboard-controls{flex-direction:column;width:100%}.auto-refresh-btn,.period-selector,.refresh-btn{justify-content:center;width:100%}.stats-grid{grid-template-columns:1fr}.stat-card{padding:16px}.stat-value{font-size:24px}.chart-container{padding:16px}.actions-table,.energy-table{font-size:12px}.actions-table td,.actions-table th,.energy-table td,.energy-table th{padding:10px 8px}}.recharts-cartesian-axis-tick-value{fill:#999}.recharts-legend-wrapper{padding-top:20px}.recharts-legend-item-text{color:#fff!important}.recharts-tooltip-wrapper{outline:none}
/*# sourceMappingURL=main.f853f76d.css.map*/