.history-modal-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000000b3;display:flex;align-items:center;justify-content:center;z-index:10000;padding:20px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.history-modal{background:linear-gradient(135deg,#fff,#f3f4f6);border-radius:16px;max-width:1200px;width:100%;max-height:90vh;overflow:hidden;box-shadow:0 25px 50px -12px #00000080;display:flex;flex-direction:column;animation:modalSlideIn .3s ease-out}@keyframes modalSlideIn{0%{transform:translateY(-50px);opacity:0}to{transform:translateY(0);opacity:1}}.history-modal-header{padding:24px 32px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid rgba(255,255,255,.2)}.history-modal-header h2{margin:0;font-size:1.5rem;font-weight:600;display:flex;align-items:center;gap:12px}.close-btn{background:#fff3;border:2px solid rgba(255,255,255,.3);color:#fff;width:40px;height:40px;border-radius:50%;font-size:1.5rem;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-weight:700}.close-btn:hover{background:#ffffff4d;transform:rotate(90deg);border-color:#ffffff80}.history-modal-body{padding:24px 32px;overflow-y:auto;flex:1}.loading-state,.error-state,.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;min-height:300px}.spinner{width:50px;height:50px;border:4px solid #e5e7eb;border-top-color:#667eea;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:20px}@keyframes spin{to{transform:rotate(360deg)}}.loading-state p{color:#6b7280;font-size:1.1rem;margin:0}.error-state p{color:#dc2626;font-size:1.1rem;margin-bottom:20px}.error-state button{background:#ef4444;color:#fff;border:none;padding:12px 24px;border-radius:8px;font-size:1rem;cursor:pointer;transition:background .2s ease}.error-state button:hover{background:#dc2626}.empty-state p{color:#9ca3af;font-size:1.2rem;margin:0}.charts-container{display:flex;flex-direction:column;gap:20px}.chart-section{background:#fff;padding:24px;border-radius:12px;box-shadow:0 4px 6px -1px #0000001a;border:1px solid #e5e7eb}.chart-section h3{margin:0 0 20px;color:#1f2937;font-size:1.25rem;font-weight:600;display:flex;align-items:center;gap:8px}.history-info{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:20px 24px;border-radius:12px;text-align:center;margin-top:16px}.history-info p{margin:8px 0;font-size:1rem}.history-info strong{font-weight:700;font-size:1.1rem}.date-range{opacity:.9;font-size:.9rem!important;margin-top:4px!important}@media(max-width:768px){.history-modal{max-width:100%;max-height:95vh;margin:0;border-radius:12px}.history-modal-header{padding:16px 20px}.history-modal-header h2{font-size:1.2rem}.history-modal-body{padding:16px 20px}.chart-section{padding:16px}.chart-section h3{font-size:1.1rem}}.history-modal-body::-webkit-scrollbar{width:8px}.history-modal-body::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.history-modal-body::-webkit-scrollbar-thumb{background:#9ca3af;border-radius:4px}.history-modal-body::-webkit-scrollbar-thumb:hover{background:#6b7280}.header-actions{display:flex;align-items:center;gap:10px}.debug-btn{background:#ffffff26;border:2px solid rgba(255,255,255,.3);color:#fff;padding:6px 14px;border-radius:20px;font-size:.85rem;cursor:pointer;transition:all .2s ease;font-weight:500;white-space:nowrap}.debug-btn:hover{background:#ffffff40;border-color:#ffffff80}.debug-btn.active{background:#ffc8004d;border-color:#ffc80099}.debug-table-container{padding:4px 0}.debug-info{font-size:.85rem;color:#6b7280;margin-bottom:12px}.debug-table-scroll{overflow-x:auto;border-radius:8px;border:1px solid #e5e7eb}.debug-table{width:100%;border-collapse:collapse;font-size:.82rem;min-width:700px}.debug-table thead tr{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.debug-table th{padding:10px 12px;text-align:left;font-weight:600;white-space:nowrap}.debug-table td{padding:7px 12px;border-bottom:1px solid #f3f4f6;font-family:monospace;white-space:nowrap}.debug-table tr.even td{background:#fff}.debug-table tr.odd td{background:#f9fafb}.debug-table tr:hover td{background:#eff6ff}.debug-table td.cell-nan{color:#ef4444;font-weight:600}.top5-section{margin-top:4px}.top5-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.top5-column{border:1px solid #e5e7eb;border-radius:10px;overflow:hidden}.top5-column-header{padding:10px 14px;font-size:.88rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;text-align:center;color:#fff}.top5-header-today{background:linear-gradient(135deg,#3b82f6,#2563eb)}.top5-header-week{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}.top5-header-total{background:linear-gradient(135deg,#10b981,#059669)}.top5-row{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid #f3f4f6;font-size:.85rem}.top5-row:last-child{border-bottom:none}.top5-row:nth-child(odd){background:#fafafa}.top5-rank{width:20px;height:20px;border-radius:50%;background:#e5e7eb;color:#374151;font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.top5-row:first-of-type .top5-rank{background:#fbbf24;color:#78350f}.top5-date{flex:1;color:#6b7280;font-size:.82rem;font-variant-numeric:tabular-nums}.top5-value{font-weight:700;color:#1f2937;font-size:.9rem;white-space:nowrap;font-variant-numeric:tabular-nums}.top5-empty{padding:20px 12px;text-align:center;color:#9ca3af;font-size:.85rem;font-style:italic}@media(max-width:768px){.top5-grid{grid-template-columns:1fr;gap:12px}}[data-theme=dark] .history-modal{background:linear-gradient(135deg,#1e2340,#16213e)}[data-theme=dark] .history-modal-body{background:transparent}[data-theme=dark] .chart-section{background:#1e233ce6;border-color:#ffffff14}[data-theme=dark] .chart-section h3{color:#e2e8f0}[data-theme=dark] .history-modal-body::-webkit-scrollbar-track{background:#1e2340}[data-theme=dark] .history-modal-body::-webkit-scrollbar-thumb{background:#374151}[data-theme=dark] .debug-table-scroll{border-color:#374151}[data-theme=dark] .debug-info{color:#94a3b8}[data-theme=dark] .debug-table tr.even td{background:#1e2340;color:#e2e8f0}[data-theme=dark] .debug-table tr.odd td{background:#252b50;color:#e2e8f0}[data-theme=dark] .debug-table tr:hover td{background:#2d3561}[data-theme=dark] .debug-table td{border-color:#2d3748}[data-theme=dark] .top5-column{border-color:#ffffff14}[data-theme=dark] .top5-row{border-color:#ffffff0f}[data-theme=dark] .top5-row:nth-child(odd){background:#ffffff08}[data-theme=dark] .top5-rank{background:#374151;color:#d1d5db}[data-theme=dark] .top5-date{color:#94a3b8}[data-theme=dark] .top5-value{color:#e2e8f0}[data-theme=dark] .top5-empty{color:#4b5563}.device-card{background:#ffffffbf;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-radius:16px;padding:20px 20px 12px;box-shadow:0 8px 24px #0000001f,inset 0 1px #ffffffe6;transition:all .3s ease;position:relative;border:1px solid rgba(255,255,255,.6);border-left:5px solid rgba(255,255,255,.5);display:flex;flex-direction:column;height:100%}.device-card:hover{background:#ffffffe0;box-shadow:0 12px 32px #0000002e,inset 0 1px #fffffff2;transform:translateY(-2px)}.device-card.card-active{border-left-color:#22c55e}.device-card.card-active .device-icon{background:#22c55e2e;color:#16a34a}.device-card.card-dimmer{border-left-color:#f97316}.device-card.card-dimmer .device-icon{background:#f973162e;color:#ea580c}.device-card.card-inactive{border-left-color:#d1d5db}.device-card.card-inactive .device-icon{background:#9ca3af2e;color:#6b7280}.device-card.card-sensor{border-left-color:#38bdf8}.device-card.card-sensor .device-icon{background:#38bdf82e;color:#0284c7}.device-card.card-energy{border-left-color:#eab308}.device-card.card-energy .device-icon{background:#eab3082e;color:#ca8a04}.device-card.card-shutter{border-left-color:#64748b}.device-card.card-shutter .device-icon{background:#64748b2e;color:#475569}.device-card.card-alert{border-left-color:#ef4444}.device-card.card-alert .device-icon{background:#ef44442e;color:#dc2626}.device-card.card-motion{border-left-color:#f97316}.device-card.card-motion .device-icon{background:#f973162e;color:#ea580c}.device-card.card-gate{border-left-color:#f59e0b}.device-card.card-gate .device-icon{background:#f59e0b2e;color:#d97706}.device-card.card-scene{border-left-color:#8b5cf6}.device-card.card-scene .device-icon{background:#8b5cf62e;color:#7c3aed}.device-card.card-default{border-left-color:#e5e7eb}.device-card.card-default .device-icon{background:#f0f0f0}.device-card:hover{box-shadow:0 8px 20px #00000026;border-color:#667eea}.device-header{display:flex;gap:15px;margin-bottom:20px}.device-body{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.v2-temperature-card,.v2-switch-card,.v2-dimmer-card,.v2-shutter-card{width:100%;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.device-icon{font-size:32px;display:flex;align-items:center;justify-content:center;min-width:50px;height:50px;background:#f0f0f0;border-radius:8px;transition:background .3s ease,color .3s ease}.device-info{flex:1}.device-actions{display:flex;gap:8px;align-items:flex-start}.device-favorite-btn{background:transparent;border:none;font-size:22px;cursor:pointer;transition:all .2s ease;padding:4px 8px;line-height:1;border-radius:6px}.device-favorite-btn:hover{background:#fff3cd;transform:scale(1.1)}.device-favorite-btn.active{color:#ffc107;filter:drop-shadow(0 0 4px rgba(255,193,7,.5))}.device-details-btn{background:#eef2ff;border:1px solid #c7d2fe;color:#4c51bf;border-radius:6px;padding:6px 10px;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s ease;align-self:flex-start}.device-details-btn:hover{background:#e0e7ff;border-color:#a5b4fc}.device-name{margin:0;font-size:18px;font-weight:700;color:#333;line-height:1.2}.device-type{margin:4px 0 0;font-size:12px;color:#999;text-transform:uppercase;letter-spacing:.5px}.device-room{margin:2px 0 0;font-size:12px;color:#667eea;font-weight:500}.device-card-footer{display:flex;align-items:center;justify-content:space-between;margin-top:auto;padding-top:10px}.device-lastupdate{font-size:10px;color:#bbb;font-weight:300;opacity:.7;transition:all .2s ease;cursor:default}.device-lastupdate:hover{color:#333;opacity:1;font-weight:400}.btn-history{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;padding:6px 12px;border-radius:6px;font-size:11px;font-weight:600;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;gap:4px;opacity:.8;box-shadow:0 2px 4px #0000001a}.btn-history:hover{opacity:1;transform:translateY(-1px);box-shadow:0 4px 8px #667eea66}.btn-history:active{transform:translateY(0)}.device-status{display:flex;justify-content:space-between;align-items:center;background:#f8f8f8;padding:10px 15px;border-radius:8px;margin-bottom:15px;font-size:14px}.status-label{color:#666;font-weight:500}.status-value{color:#333;font-weight:700;font-size:16px}.devdoor-section{display:flex;justify-content:center;align-items:center;padding:15px;margin-bottom:10px}.devdoor-container{display:flex;flex-direction:column;align-items:center;gap:10px}.devdoor-icon{width:120px;height:148px;transition:transform .3s ease}.devdoor-icon.door-open{animation:door-pulse 2s ease-in-out infinite;filter:drop-shadow(0 0 10px rgba(220,38,38,.5)) drop-shadow(0 4px 8px rgba(0,0,0,.2))}.devdoor-icon.door-closed{filter:drop-shadow(0 0 8px rgba(34,197,94,.5)) drop-shadow(0 4px 8px rgba(0,0,0,.2))}.door-svg{width:100%;height:100%}.devdoor-status{font-size:15px;font-weight:700;padding:4px 16px;border-radius:20px;letter-spacing:.3px}.devdoor-status.status-open{color:#dc2626;background:#dc26261a;border:1.5px solid rgba(220,38,38,.3)}.devdoor-status.status-closed{color:#22c55e;background:#22c55e1a;border:1.5px solid rgba(34,197,94,.3)}@keyframes door-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.temperature-display{display:flex;flex-direction:column;align-items:flex-end;gap:8px}.temp-value{font-size:48px;font-weight:700;color:#667eea;line-height:1;display:flex;align-items:flex-start;gap:4px}.temp-unit{font-size:24px;font-weight:400;color:#999;margin-top:4px}.humidity-value{font-size:32px;color:#64b5f6;font-weight:700}.shutter-control{margin-bottom:10px}.shutter-buttons{display:flex;flex-direction:column;gap:8px;max-width:200px;margin:0 auto}.shutter-btn{display:flex;align-items:center;justify-content:flex-start;gap:15px;padding:12px 20px;background:linear-gradient(145deg,#f8f8f8,#e0e0e0);border:none;border-radius:10px;box-shadow:0 6px 12px #0003,0 3px 6px #00000026,inset 0 -3px 6px #00000026,inset 0 3px 6px #fff6;transition:all .2s ease;cursor:pointer;font-weight:600;color:#333;position:relative;overflow:hidden}.shutter-btn:before{content:"";position:absolute;top:0;left:0;right:0;height:50%;background:linear-gradient(180deg,rgba(255,255,255,.3) 0%,transparent 100%);pointer-events:none}.shutter-btn:hover:not(:disabled){background:linear-gradient(145deg,#fff,#e8e8e8);transform:translateY(-2px);box-shadow:0 8px 16px #00000040,0 4px 8px #0003,inset 0 -3px 6px #00000026,inset 0 3px 6px #ffffff80}.shutter-btn:active:not(:disabled){transform:translateY(1px);box-shadow:0 2px 4px #0003,inset 0 4px 8px #00000040,inset 0 -2px 4px #fff3}.shutter-btn:disabled{opacity:.5;cursor:not-allowed}.shutter-icon{font-size:20px;font-weight:700;filter:drop-shadow(0 1px 2px rgba(0,0,0,.3))}.shutter-label{font-size:14px;text-shadow:0 1px 2px rgba(255,255,255,.8)}.shutter-up{border-left:5px solid #4caf50;box-shadow:0 6px 12px #4caf504d,0 3px 6px #00000026,inset 0 -3px 6px #00000026,inset 0 3px 6px #fff6}.shutter-up:hover:not(:disabled){box-shadow:0 8px 16px #4caf5066,0 4px 8px #0003,inset 0 -3px 6px #00000026,inset 0 3px 6px #ffffff80}.shutter-down{border-left:5px solid #f44336;box-shadow:0 6px 12px #f443364d,0 3px 6px #00000026,inset 0 -3px 6px #00000026,inset 0 3px 6px #fff6}.shutter-down:hover:not(:disabled){box-shadow:0 8px 16px #f4433666,0 4px 8px #0003,inset 0 -3px 6px #00000026,inset 0 3px 6px #ffffff80}.switch-control{display:flex;align-items:center;justify-content:center;margin-top:20px}.switch-button{width:100px;height:100px;border-radius:50%;border:none;cursor:pointer;position:relative;transition:all .3s ease;box-shadow:0 10px 20px #00000059,0 6px 10px #00000040,inset 0 -5px 10px #00000059,inset 0 5px 10px #ffffff40;display:flex;align-items:center;justify-content:center}.switch-button:before{content:"";position:absolute;top:10px;left:20%;right:20%;height:30%;background:#ffffff59;border-radius:50%;filter:blur(10px)}.switch-button:hover{transform:scale(1.08);box-shadow:0 14px 24px #00000073,0 8px 14px #00000059,inset 0 -5px 10px #00000059,inset 0 5px 10px #ffffff40}.switch-button:active{transform:scale(.98);box-shadow:0 5px 10px #00000059,inset 0 5px 15px #00000073,inset 0 -3px 6px #ffffff26}.switch-button:disabled{opacity:.5;cursor:not-allowed}.switch-off{background:linear-gradient(145deg,#7c8591,#4b5563);border:3px solid #2d3748}.switch-off:hover:not(:disabled){background:linear-gradient(145deg,#8c95a1,#5b6573)}.switch-on{background:linear-gradient(145deg,#34d870,#16a34a);border:3px solid #15803d;box-shadow:0 8px 16px #22c55e80,0 4px 8px #22c55e4d,inset 0 -4px 8px #0000004d,inset 0 4px 8px #ffffff4d}.switch-on:hover:not(:disabled){background:linear-gradient(145deg,#44e880,#26b35a);box-shadow:0 12px 20px #22c55e99,0 6px 12px #22c55e66,inset 0 -4px 8px #0000004d,inset 0 4px 8px #ffffff4d}.switch-label{font-weight:700;font-size:24px;color:#fff;letter-spacing:1.5px;text-shadow:0 2px 6px rgba(0,0,0,.4);z-index:1}.device-actions{display:flex;gap:8px;margin-bottom:10px}.btn{flex:1;padding:10px 12px;border:none;border-radius:6px;cursor:pointer;font-weight:700;font-size:16px;transition:all .3s;display:flex;align-items:center;justify-content:center;min-height:40px}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-on{background:#4caf50;color:#fff}.btn-on:hover:not(:disabled){background:#45a049;transform:scale(1.05)}.btn-toggle{background:#ff9800;color:#fff}.btn-toggle:hover:not(:disabled){background:#fb8c00;transform:scale(1.05)}.btn-off{background:#f44336;color:#fff}.btn-off:hover:not(:disabled){background:#da190b;transform:scale(1.05)}.error-message{background:#ffe6e6;color:#d32f2f;padding:8px 12px;border-radius:6px;font-size:12px;margin-bottom:10px;border-left:3px solid #d32f2f}.loading-spinner{position:absolute;top:10px;right:10px;width:20px;height:20px;border:2px solid #f0f0f0;border-top:2px solid #667eea;border-radius:50%;animation:spin 1s linear infinite}.barometer{display:flex;justify-content:center;align-items:center;padding:10px 0;margin-bottom:10px;cursor:pointer}.barometer-svg{width:220px;height:220px;filter:drop-shadow(0 4px 8px rgba(0,0,0,.15))}.barometer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a00;display:flex;align-items:center;justify-content:center;z-index:30;animation:baro-overlay-in .5s ease forwards}.barometer-overlay.closing{animation:baro-overlay-out .5s ease forwards;pointer-events:none}@keyframes baro-overlay-in{0%{background:#0f172a00}to{background:#0f172abf}}@keyframes baro-overlay-out{0%{background:#0f172abf}to{background:#0f172a00}}.barometer-zoomed{display:flex;flex-direction:column;align-items:center;cursor:pointer;animation:baro-zoom-in .6s cubic-bezier(.22,1,.36,1) forwards}.barometer-zoomed.closing{animation:baro-zoom-out .5s ease forwards}@keyframes baro-zoom-in{0%{transform:translate(var(--baro-dx, 0),var(--baro-dy, 0)) scale(.15);opacity:0}40%{opacity:1}to{transform:translate(0) scale(1);opacity:1}}@keyframes baro-zoom-out{0%{transform:translate(0) scale(1);opacity:1}60%{opacity:.6}to{transform:translate(var(--baro-dx, 0),var(--baro-dy, 0)) scale(.15);opacity:0}}.barometer-svg-zoomed{width:min(500px,85vw);height:min(500px,85vw);filter:drop-shadow(0 8px 24px rgba(0,0,0,.4))}.barometer-title{margin:0 0 10px;font-size:22px;font-weight:700;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.3);font-family:serif}.barometer-subtitle{margin:10px 0 0;font-size:16px;color:#ffffffd9;font-family:serif}.barometer-close{position:absolute;top:20px;right:20px;border:none;background:#ffffff26;width:40px;height:40px;border-radius:50%;cursor:pointer;font-size:20px;color:#fff;transition:background .2s;z-index:31}.barometer-close:hover{background:#ffffff4d}@media(max-width:480px){.barometer-svg{width:180px;height:180px}.barometer-svg-zoomed{width:90vw;height:90vw}.barometer-title{font-size:18px}}.lux-widget{margin-top:12px;margin-bottom:8px;padding:14px 8px 8px;display:flex;flex-direction:column;align-items:center;background:#ffffff0f;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-radius:16px;border:1px solid rgba(255,255,255,.1)}.lux-arc-svg{width:200px;height:130px;overflow:visible}.lux-labels{display:flex;justify-content:space-between;width:200px;margin-top:4px;padding:0 4px;font-size:10px;color:#9ca3af;font-weight:500}.lux-label-current{font-weight:700;color:#6b7280}[data-theme=dark] .lux-widget{background:#ffffff0a;border-color:#ffffff14}[data-theme=dark] .lux-labels{color:#4b5563}[data-theme=dark] .lux-label-current{color:#9ca3af}.barometer-container{margin-top:15px;display:flex;justify-content:center;align-items:center;padding:10px}.barometer-compact{width:180px;height:180px;cursor:pointer;transition:transform .2s ease}.barometer-compact:hover{transform:scale(1.05)}.barometer-svg-compact{width:100%;height:100%}@media(max-width:768px){.barometer-container{padding:5px}.barometer-compact{width:140px;height:140px}}.dimmer-control{margin-top:15px;display:flex;flex-direction:column;align-items:center;gap:16px}.dimmer-top{display:flex;align-items:center;gap:20px}.switch-button--small{width:70px!important;height:70px!important}.dimmer-percent{font-size:32px;font-weight:700;color:#f97316;min-width:70px;text-align:center}.dimmer-slider{width:100%;height:8px;border-radius:4px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:linear-gradient(to right,#f97316,#fde68a);cursor:pointer;outline:none}.dimmer-slider::-webkit-slider-thumb{-webkit-appearance:none;width:24px;height:24px;border-radius:50%;background:#f97316;cursor:grab;box-shadow:0 2px 8px #f9731680;border:3px solid white;transition:transform .1s ease}.dimmer-slider::-webkit-slider-thumb:active{cursor:grabbing;transform:scale(1.2)}.dimmer-slider::-moz-range-thumb{width:24px;height:24px;border-radius:50%;background:#f97316;cursor:grab;box-shadow:0 2px 8px #f9731680;border:3px solid white}.dimmer-slider:disabled{opacity:.5;cursor:not-allowed}.rgb-control{margin-top:15px;display:flex;flex-direction:column;align-items:center;gap:16px}.rgb-brightness-slider{background:linear-gradient(to right,#1a1a1a,#fff)!important}.rgb-palette{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.rgb-color-btn{width:32px;height:32px;border-radius:50%;border:3px solid rgba(255,255,255,.8);cursor:pointer;transition:all .2s ease;box-shadow:0 2px 6px #00000040}.rgb-color-btn:hover:not(:disabled){transform:scale(1.2);box-shadow:0 4px 12px #00000059;border-color:#fff}.rgb-color-btn:disabled{opacity:.5;cursor:not-allowed}.baie-vitree-display{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:140px}.baie-vitree-svg-container{width:120px;height:140px;display:flex;justify-content:center;align-items:center;transition:filter .3s ease}.baie-vitree-open{filter:drop-shadow(0 0 10px rgba(239,68,68,.7)) drop-shadow(0 4px 8px rgba(0,0,0,.2))}.baie-vitree-closed{filter:drop-shadow(0 0 8px rgba(34,197,94,.5)) drop-shadow(0 4px 8px rgba(0,0,0,.2))}.baie-vitree-status{font-size:1.05rem;font-weight:700;padding:4px 16px;border-radius:20px;display:flex;align-items:center;gap:6px}.baie-vitree-status:before{content:"";width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.baie-vitree-status-open{color:#f87171;background:#dc26261a;border:1.5px solid rgba(220,38,38,.3)}.baie-vitree-status-open:before{background:#ef4444;box-shadow:0 0 6px #ef4444}.baie-vitree-status-closed{color:#22c55e;background:#22c55e1a;border:1.5px solid rgba(34,197,94,.3)}.baie-vitree-status-closed:before{background:#22c55e;box-shadow:0 0 6px #22c55e}.vibrating{animation:vibrate .3s infinite}@keyframes vibrate{0%,to{transform:translate(0) rotate(0)}10%{transform:translate(-2px,-1px) rotate(-1deg)}20%{transform:translate(2px,1px) rotate(1deg)}30%{transform:translate(-2px,1px) rotate(-.5deg)}40%{transform:translate(2px,-1px) rotate(.5deg)}50%{transform:translate(-1px,2px) rotate(-1deg)}60%{transform:translate(1px,-2px) rotate(1deg)}70%{transform:translate(-2px,-1px) rotate(-.5deg)}80%{transform:translate(2px,1px) rotate(.5deg)}90%{transform:translate(-1px,-2px) rotate(-1deg)}}.portail-display{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:20px;min-height:180px;cursor:pointer}.ordi-status-display{display:flex;justify-content:center;align-items:center;padding:20px;font-size:18px;font-weight:700;border-radius:8px}.pv-production{margin-top:15px;padding:20px;border-radius:12px;background:linear-gradient(135deg,#fef3c7,#fde047,#facc15);border:2px solid #eab308;display:flex;flex-direction:column;align-items:center;gap:10px;box-shadow:0 4px 12px #eab30833;transition:all .3s ease}.pv-production:hover{transform:translateY(-2px);box-shadow:0 6px 16px #eab3084d}.pv-icon{font-size:48px;text-shadow:0 2px 4px rgba(0,0,0,.1)}.pv-value{font-size:32px;font-weight:700;color:#78350f;text-align:center;text-shadow:0 1px 2px rgba(255,255,255,.5)}.pv-mini-chart{margin-top:12px;width:100%}.pv-chart-label{font-size:10px;color:#9ca3af;text-align:center;margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px}.pv-chart-message{font-size:11px;color:#9ca3af;text-align:center;padding:8px 0;font-style:italic}[data-theme=dark] .pv-chart-message{color:#6b7280}.phone-presence-display{margin:12px 0;display:flex;justify-content:center;align-items:center}.presence-status{font-size:18px;font-weight:600;padding:12px 24px;border-radius:10px;text-align:center;transition:all .3s ease;box-shadow:0 2px 8px #0000001a;min-width:140px;display:flex;align-items:center;justify-content:center;gap:8px}.presence-icon{font-size:32px;transition:all .3s ease}.presence-text{font-size:16px}.presence-status.present{background:linear-gradient(135deg,#fff,#f5f5f5);color:#dc2626;border:2px solid #dc2626;animation:pulse-present 2s ease-in-out infinite}.presence-status.present .presence-icon{filter:hue-rotate(0deg) saturate(2)}.presence-status.absent{background:linear-gradient(135deg,#f5f5f5,#e5e5e5);color:#6b7280;border:2px solid #d1d5db}.presence-status.absent .presence-icon{filter:grayscale(100%) opacity(.7)}@keyframes pulse-present{0%,to{box-shadow:0 4px 12px #10b9814d}50%{box-shadow:0 6px 20px #10b98180}}@media(max-width:480px){.device-card{padding:15px}.device-header{gap:12px;margin-bottom:15px}.device-icon{font-size:28px;min-width:45px;height:45px}.device-name{font-size:16px}.btn{font-size:14px;padding:8px 10px;min-height:36px}}[data-theme=dark] .device-card{background:var(--card-bg);border-color:var(--card-border);box-shadow:var(--card-shadow)}[data-theme=dark] .device-card:hover{background:var(--card-bg-hover);box-shadow:var(--card-shadow-hover);border-color:#667eea66}[data-theme=dark] .device-name{color:var(--text-primary)}[data-theme=dark] .device-type{color:var(--text-muted)}[data-theme=dark] .device-room{color:#818cf8}[data-theme=dark] .device-lastupdate{color:#475569}[data-theme=dark] .device-lastupdate:hover{color:#94a3b8}[data-theme=dark] .device-details-btn{background:#1e2340;border-color:#3730a3;color:#818cf8}[data-theme=dark] .device-details-btn:hover{background:#252b50;border-color:#4f46e5}[data-theme=dark] .device-favorite-btn:hover{background:#ffc1071a}[data-theme=dark] .error-message{background:#ef444426;border-color:#dc2626;color:#f87171}[data-theme=dark] .device-status{background:#ffffff0f;color:var(--text-secondary)}[data-theme=dark] .status-label{color:#94a3b8}[data-theme=dark] .status-value{color:#e2e8f0}[data-theme=dark] .switch-button.switch-off{background:#374151;border-color:#4b5563;color:#9ca3af}[data-theme=dark] .switch-button.switch-off:hover:not(:disabled){background:#4b5563}[data-theme=dark] .dimmer-percent{color:#fb923c}[data-theme=dark] .dimmer-slider{accent-color:#f97316}[data-theme=dark] .temp-value{color:#fca5a5}[data-theme=dark] .humidity-value{color:#93c5fd}[data-theme=dark] .pv-production{background:#eab3081a;border-color:#eab3084d}[data-theme=dark] .pv-value{color:#fde047}[data-theme=dark] .presence-status{color:var(--text-secondary)}[data-theme=dark] .presence-status.present{background:linear-gradient(135deg,#dc262626,#dc262614);color:#fca5a5}[data-theme=dark] .presence-status.absent{background:linear-gradient(135deg,#1e233ccc,#2d3748cc);color:#94a3b8}[data-theme=dark] .barometer,[data-theme=dark] .barometer-compact{background:#1e233c99}[data-theme=dark] .btn-history{background:#667eea26;border-color:#667eea4d;color:#818cf8}[data-theme=dark] .btn-history:hover{background:#667eea40}[data-theme=dark] .btn-on{background:#10b98126;border-color:#10b9814d;color:#34d399}[data-theme=dark] .btn-toggle{background:#3b82f626;border-color:#3b82f64d;color:#60a5fa}[data-theme=dark] .btn-off{background:#ef444426;border-color:#ef44444d;color:#f87171}[data-theme=dark] .shutter-btn{background:#1e2340;border-color:#374151;color:#94a3b8}[data-theme=dark] .shutter-btn:hover:not(:disabled){background:#252b50}[data-theme=dark] .ordi-status-display{background:#1e233ccc!important;border-color:#374151!important}:root{--v2-card-bg: #1e293b;--v2-card-border-sensor: #38bdf8;--v2-card-border-on: #22c55e;--v2-card-border-off: #374151;--v2-card-border-dimmer: #f97316;--v2-text-muted: #64748b;--v2-text-secondary: #94a3b8;--v2-temp-color: #0284c7;--v2-temp-color-light: #0ea5e9}[data-theme=dark]{--v2-temp-color: #38bdf8;--v2-temp-color-light: #7dd3fc}.v2-temperature-card{display:flex;align-items:center;gap:20px;padding:16px 8px 8px;margin-top:4px}.v2-thermometer{flex-shrink:0;filter:drop-shadow(0 2px 8px rgba(56,189,248,.25))}.v2-temp-values{display:flex;flex-direction:column;gap:10px}.v2-temp-value-main{font-size:52px;font-weight:800;line-height:1;color:var(--v2-temp-color);display:flex;align-items:flex-start;gap:4px;letter-spacing:-1px}.v2-temp-unit{font-size:24px;font-weight:500;margin-top:6px;opacity:.7}.v2-humidity-row{display:flex;align-items:center;gap:6px}.v2-drop-icon{flex-shrink:0}.v2-humidity-value{font-size:22px;font-weight:700;color:var(--v2-temp-color-light)}.v2-switch-card{display:flex;flex-direction:column;align-items:center;gap:10px;padding:12px 8px 8px;margin-top:4px}.v2-bulb-container{display:flex;align-items:center;justify-content:center;position:relative;border-radius:50%;transition:filter .4s ease}.v2-bulb-glow{filter:drop-shadow(0 0 16px rgba(253,224,71,.55)) drop-shadow(0 0 32px rgba(249,115,22,.25));animation:v2-pulse-glow 2.5s ease-in-out infinite}@keyframes v2-pulse-glow{0%,to{filter:drop-shadow(0 0 14px rgba(253,224,71,.5)) drop-shadow(0 0 28px rgba(249,115,22,.2))}50%{filter:drop-shadow(0 0 22px rgba(253,224,71,.75)) drop-shadow(0 0 44px rgba(249,115,22,.35))}}.v2-bulb-svg{transition:filter .4s ease,opacity .4s ease}.v2-switch-status{font-size:18px;font-weight:700;letter-spacing:.3px}.v2-status-on{color:#22c55e}.v2-status-off{color:#64748b}.v2-switch-watts{font-size:12px;color:var(--v2-text-muted);font-weight:400}.v2-toggle-row{display:flex;align-items:center;justify-content:flex-end;width:100%;padding-right:4px}.v2-toggle-switch{position:relative;display:inline-flex;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none}.v2-toggle-input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.v2-toggle-track{width:44px;height:24px;background:#374151;border-radius:12px;position:relative;transition:background .3s ease;border:1px solid rgba(255,255,255,.08);display:flex;align-items:center}.v2-toggle-input:disabled+.v2-toggle-track{opacity:.5;cursor:not-allowed}.v2-toggle-thumb{position:absolute;left:3px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .3s ease,box-shadow .3s ease;box-shadow:0 1px 4px #0000004d}.v2-toggle-input:checked+.v2-toggle-track .v2-toggle-thumb{transform:translate(20px);box-shadow:0 1px 6px #22c55e66}.v2-toggle-top-right{position:absolute;top:0;right:0}.v2-dimmer-card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:12px 8px 8px;margin-top:4px}.v2-dimmer-bulb-area{position:relative;display:flex;align-items:center;justify-content:center;width:100%}.v2-dimmer-percent{font-size:52px;font-weight:800;line-height:1;letter-spacing:-2px;transition:color .4s ease}.v2-dimmer-percent-on{color:#f97316}.v2-dimmer-percent-off{color:#475569}.v2-dimmer-pct-unit{font-size:24px;font-weight:500;margin-left:2px;opacity:.7}.v2-dimmer-slider-wrap{width:100%;padding:0 4px}.v2-dimmer-slider{width:100%;height:8px;border-radius:4px;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;outline:none;border:none;transition:background .15s ease}.v2-dimmer-slider::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;border-radius:50%;background:#fff;cursor:grab;box-shadow:0 2px 10px #f9731680,0 1px 3px #0006;border:2px solid rgba(249,115,22,.7);transition:transform .1s ease,box-shadow .1s ease}.v2-dimmer-slider::-webkit-slider-thumb:active{cursor:grabbing;transform:scale(1.25);box-shadow:0 4px 14px #f97316b3,0 2px 6px #00000080}.v2-dimmer-slider::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:#fff;cursor:grab;box-shadow:0 2px 10px #f9731680;border:2px solid rgba(249,115,22,.7)}.v2-dimmer-slider:disabled{opacity:.4;cursor:not-allowed}[data-theme=dark] .v2-temp-value-main{color:var(--v2-temp-color)}[data-theme=dark] .v2-humidity-value{color:var(--v2-temp-color-light)}[data-theme=dark] .v2-status-on{color:#4ade80}[data-theme=dark] .v2-status-off{color:#4b5563}[data-theme=dark] .v2-switch-watts{color:#475569}[data-theme=dark] .v2-toggle-track{background:#1f2937;border-color:#ffffff0d}[data-theme=dark] .v2-dimmer-percent-on{color:#fb923c}[data-theme=dark] .v2-dimmer-percent-off{color:#334155}.v2-status-on{color:#16a34a}.v2-status-off{color:#9ca3af}.v2-toggle-track{background:#d1d5db;border-color:#00000014}.v2-toggle-input:checked+.v2-toggle-track{background:#22c55e;border-color:#16a34a}.v2-toggle-thumb{box-shadow:0 1px 4px #00000040}.v2-dimmer-percent-on{color:#ea580c}.v2-dimmer-percent-off{color:#9ca3af}.v2-shutter-card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:8px 0}.v2-shutter-svg{filter:drop-shadow(0 2px 6px rgba(71,85,105,.4));transition:filter .3s ease}.v2-shutter-status{font-size:2rem;font-weight:800;color:#e2e8f0;line-height:1}.v2-shutter-label{font-size:.8rem;color:#64748b;text-transform:uppercase;letter-spacing:.07em;margin-top:2px}.v2-shutter-buttons{display:flex;gap:10px;width:100%}.v2-shutter-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:10px 8px;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:#ffffff0d;color:#e2e8f0;font-size:.82rem;font-weight:600;cursor:pointer;transition:background .2s ease,border-color .2s ease,color .2s ease,transform .15s ease}.v2-shutter-btn:hover:not(:disabled){background:#ffffff1f;transform:translateY(-1px)}.v2-shutter-btn-up:hover:not(:disabled){border-color:#22c55e;color:#22c55e}.v2-shutter-btn-down:hover:not(:disabled){border-color:#64748b;color:#94a3b8}.v2-shutter-btn:disabled{opacity:.4;cursor:not-allowed}.v2-shutter-status{color:#1e293b}[data-theme=dark] .v2-shutter-status{color:#e2e8f0}[data-theme=dark] .v2-shutter-label{color:#64748b}[data-theme=dark] .v2-shutter-btn{background:#ffffff0d;border-color:#ffffff14;color:#e2e8f0}[data-theme=dark] .v2-shutter-btn:hover:not(:disabled){background:#ffffff1f}[data-theme=dark] .v2-shutter-btn-up:hover:not(:disabled){border-color:#22c55e;color:#22c55e}[data-theme=dark] .v2-shutter-btn-down:hover:not(:disabled){border-color:#64748b;color:#94a3b8}.device-list-container{padding:20px;max-width:1400px;margin:0 auto;min-height:100vh}.device-list-header{background:#ffffffbf;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.6);padding:30px;border-radius:16px;margin-bottom:30px;box-shadow:0 8px 24px #0000001a}.device-list-header h1{margin:0 0 20px;color:#1e1b4b;font-size:28px;font-weight:700}.header-actions{display:flex;gap:10px;align-items:center}.search-input{flex:1;padding:10px 15px;border:2px solid #ddd;border-radius:8px;font-size:16px;transition:border-color .3s}.search-input:focus{outline:none;border-color:#667eea}.refresh-btn{padding:10px 20px;background:#667eea;color:#fff;border:none;border-radius:8px;cursor:pointer;font-weight:700;transition:background .3s}.refresh-btn:hover:not(:disabled){background:#764ba2}.refresh-btn:disabled{opacity:.6;cursor:not-allowed}.error-banner{background:#fee;border:2px solid #f88;color:#d33;padding:15px 20px;border-radius:8px;margin-bottom:20px;display:flex;justify-content:space-between;align-items:center}.error-banner button{padding:8px 16px;background:#f88;color:#fff;border:none;border-radius:4px;cursor:pointer}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;background:#fff;border-radius:12px;box-shadow:0 4px 6px #0000001a}.spinner{border:4px solid #f0f0f0;border-top:4px solid #667eea;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite;margin-bottom:20px}.loading-container p{color:#666;font-size:16px}.empty-state{background:#fff;padding:60px 20px;border-radius:12px;text-align:center;color:#999;font-size:18px;box-shadow:0 4px 6px #0000001a}.room-group{margin-bottom:30px}.room-title{color:#fff;font-size:24px;margin-bottom:15px;padding-left:10px;border-left:4px solid white}.devices-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px;margin-bottom:20px;align-items:stretch}@media(max-width:768px){.devices-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:15px}}@media(max-width:480px){.devices-grid{grid-template-columns:1fr;gap:10px}.device-list-header{padding:20px}.device-list-header h1{font-size:22px;margin-bottom:15px}.header-actions{flex-direction:column}.search-input,.refresh-btn{width:100%}}.device-list-footer{background:#fff;padding:20px;border-radius:12px;text-align:center;color:#666;box-shadow:0 4px 6px #0000001a;margin-top:30px}.device-list-footer p{margin:0;font-size:14px}.device-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a99;display:flex;align-items:center;justify-content:center;z-index:20;padding:20px}.device-modal{background:#fff;border-radius:12px;width:min(900px,95vw);max-height:90vh;overflow:hidden;box-shadow:0 20px 40px #0003;display:flex;flex-direction:column}.device-modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px 10px;border-bottom:1px solid #e5e7eb}.device-modal-header h2{margin:0;font-size:20px;color:#111827}.device-modal-header p{margin:4px 0 0;color:#6b7280;font-size:13px;text-transform:uppercase;letter-spacing:.5px}.device-modal-close{border:none;background:#f3f4f6;width:32px;height:32px;border-radius:50%;cursor:pointer;font-size:16px;color:#374151}.device-modal-close:hover{background:#e5e7eb}.device-modal-content{padding:20px 24px 24px;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px;overflow:auto}.device-modal-section{background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;padding:12px 14px;min-height:200px}.device-modal-section h3{margin:0 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:#4b5563}.device-modal-section pre{margin:0;white-space:pre-wrap;word-break:break-word;font-family:Courier New,Courier,monospace;font-size:12px;color:#111827}.rooms-tabs{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap;background:#ffffff1a;padding:15px;border-radius:8px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.room-tab{padding:10px 20px;background:#fff3;border:2px solid rgba(255,255,255,.3);color:#fff;font-weight:600;border-radius:6px;cursor:pointer;transition:all .3s ease;display:flex;align-items:center;gap:8px;font-size:14px}.room-tab:hover{background:#ffffff4d;border-color:#ffffff80;transform:translateY(-2px)}.room-tab.active{background:#fff;color:#667eea;border-color:#fff;box-shadow:0 4px 12px #00000026}.device-count{background:#0000001a;padding:2px 8px;border-radius:12px;font-size:12px;font-weight:700}[data-theme=dark] .device-list-header{background:#141932d9;border-color:#ffffff0f}[data-theme=dark] .device-list-header h1{color:#e2e8f0}[data-theme=dark] .search-input{background:var(--input-bg);border-color:var(--input-border);color:var(--text-primary)}[data-theme=dark] .search-input:focus{border-color:#818cf8}[data-theme=dark] .search-input::placeholder{color:var(--text-muted)}[data-theme=dark] .room-title{color:var(--room-title-color);border-left-color:#818cf8}[data-theme=dark] .room-tab{background:#ffffff14;border-color:#ffffff1f}[data-theme=dark] .room-tab:hover{background:#ffffff24}[data-theme=dark] .room-tab.active{background:#4f46e5;color:#fff;border-color:#4f46e5}[data-theme=dark] .device-list-footer{background:#141932d9;color:var(--text-secondary)}[data-theme=dark] .loading-container{background:#141932d9}[data-theme=dark] .loading-container p{color:var(--text-secondary)}[data-theme=dark] .empty-state{background:#141932d9;color:var(--text-muted)}.login-container{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#667eea,#764ba2);padding:20px}.login-box{background:#fff;border-radius:12px;box-shadow:0 20px 60px #0000004d;padding:40px;width:100%;max-width:400px}.login-title{margin:0 0 10px;font-size:32px;font-weight:700;text-align:center;color:#333}.login-subtitle{margin:0 0 30px;font-size:16px;text-align:center;color:#666}.login-form{display:flex;flex-direction:column;gap:20px}.form-group{display:flex;flex-direction:column;gap:8px}.form-group label{font-size:14px;font-weight:600;color:#333}.form-group input{padding:12px 16px;border:2px solid #e0e0e0;border-radius:8px;font-size:16px;transition:all .3s}.form-group input:focus{outline:none;border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.form-group input:disabled{background-color:#f5f5f5;cursor:not-allowed}.login-button{padding:14px 24px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;transition:all .3s;margin-top:10px}.login-button:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 20px #667eea66}.login-button:active:not(:disabled){transform:translateY(0)}.login-button:disabled{opacity:.6;cursor:not-allowed}.login-error{padding:12px;background-color:#fee;border:1px solid #fcc;border-radius:6px;color:#c33;font-size:14px;text-align:center}.login-version{margin:20px 0 0;font-size:11px;color:#bbb;text-align:center;font-family:monospace;letter-spacing:.02em}.db-modal-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:9999;animation:fadeIn .2s ease}.db-modal{background:#fff;border-radius:16px;width:90%;max-width:900px;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 20px 60px #0000004d;animation:slideUp .3s ease}.db-modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #e5e7eb;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border-radius:16px 16px 0 0}.db-modal-header h2{margin:0;font-size:1.5rem;font-weight:600}.db-modal-header .close-btn{background:#fff3;border:none;color:#fff;font-size:1.5rem;width:36px;height:36px;border-radius:8px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}.db-modal-header .close-btn:hover{background:#ffffff4d;transform:scale(1.1)}.db-modal-body{overflow-y:auto;padding:24px}.db-section{margin-bottom:32px}.db-section h3{margin:0 0 16px;font-size:1.2rem;color:#1f2937;border-bottom:2px solid #e5e7eb;padding-bottom:8px}.db-table{width:100%;border-collapse:collapse;background:#f9fafb;border-radius:8px;overflow:hidden}.db-table td{padding:12px 16px;border-bottom:1px solid #e5e7eb}.db-table td:first-child{width:180px;color:#6b7280}.db-table td code{background:#fff;padding:4px 8px;border-radius:4px;font-size:.9rem;color:#1f2937;border:1px solid #e5e7eb}.status-badge{padding:4px 12px;border-radius:12px;font-size:.85rem;font-weight:600}.status-badge.success{background:#d1fae5;color:#065f46}.status-badge.error{background:#fee2e2;color:#991b1b}.status-badge.warning{background:#fef3c7;color:#92400e}.env-badge{padding:4px 12px;border-radius:12px;font-size:.85rem;font-weight:600}.env-badge.prod{background:#dbeafe;color:#1e40af}.env-badge.dev{background:#fef3c7;color:#92400e}.migrations-list{display:flex;flex-direction:column;gap:12px}.migration-item{display:flex;align-items:center;gap:16px;padding:16px;background:#f9fafb;border-radius:8px;border:1px solid #e5e7eb;transition:all .2s}.migration-item:hover{background:#f3f4f6;box-shadow:0 2px 8px #0000000d}.migration-number{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.9rem;flex-shrink:0}.migration-details{flex:1}.migration-name{font-weight:600;color:#1f2937;margin-bottom:4px}.migration-timestamp{display:flex;gap:8px;align-items:center;font-size:.85rem}.timestamp-label{color:#6b7280}.migration-timestamp code{background:#fff;padding:2px 8px;border-radius:4px;color:#4b5563;border:1px solid #e5e7eb}.migration-status{font-size:1.5rem;flex-shrink:0}.tables-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(350px,1fr));gap:16px}.table-card{background:#f9fafb;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;transition:all .2s}.table-card:hover{box-shadow:0 4px 12px #0000001a;border-color:#667eea}.table-header{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:12px 16px;display:flex;justify-content:space-between;align-items:center}.table-header h4{margin:0;font-size:1rem;font-weight:600}.row-count{background:#fff3;padding:4px 10px;border-radius:12px;font-size:.85rem;font-weight:600}.columns-list{padding:12px;display:flex;flex-direction:column;gap:8px}.column-item{display:flex;align-items:center;gap:8px;padding:8px;background:#fff;border-radius:4px;font-size:.85rem}.column-name{font-weight:600;color:#1f2937;flex:1}.column-type{color:#6b7280;font-family:monospace;font-size:.8rem}.column-badge{padding:2px 6px;border-radius:4px;font-size:.7rem;font-weight:700;text-transform:uppercase}.column-badge.pk{background:#dbeafe;color:#1e40af}.column-badge.nn{background:#fef3c7;color:#92400e}.table-error{padding:12px 16px;color:#dc2626;font-size:.9rem}.empty-state{text-align:center;color:#9ca3af;padding:32px;font-style:italic}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(30px);opacity:0}to{transform:translateY(0);opacity:1}}@media(max-width:768px){.db-modal{width:95%;max-height:95vh}.tables-grid{grid-template-columns:1fr}.migration-item{flex-direction:column;align-items:flex-start}}@keyframes dash-flow{0%{stroke-dashoffset:24}to{stroke-dashoffset:0}}.mapping-page{max-width:1400px;margin:0 auto;padding:16px 20px;position:relative}.mapping-notif{position:fixed;top:16px;left:50%;transform:translate(-50%);padding:10px 22px;border-radius:8px;font-weight:600;font-size:14px;z-index:1000;box-shadow:0 4px 16px #0003}.mapping-notif.ok{background:#10b981;color:#fff}.mapping-notif.err{background:#ef4444;color:#fff}.mapping-header{text-align:center;margin-bottom:12px}.mapping-header h1{font-size:22px;color:var(--text-primary, #1f2937);margin-bottom:10px}.mapping-room-tabs{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-bottom:10px}.mapping-room-tab{padding:5px 14px;border-radius:20px;border:2px solid var(--section-border, #e5e7eb);background:var(--section-bg, #fff);color:var(--text-secondary, #6b7280);font-size:12px;cursor:pointer;transition:all .15s;white-space:nowrap}.mapping-room-tab:hover{border-color:#667eea;color:#667eea}.mapping-room-tab.active{background:#667eea;border-color:#667eea;color:#fff;font-weight:600}.mapping-search-wrap{position:relative;max-width:320px;margin:0 auto}.mapping-search{width:100%;padding:8px 32px 8px 12px;font-size:13px;border:1.5px solid var(--section-border, #ddd);border-radius:8px;background:var(--input-bg, #fff);color:var(--text-primary, #1f2937);outline:none;box-sizing:border-box}.mapping-search:focus{border-color:#667eea}.mapping-search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;color:#9ca3af;cursor:pointer;font-size:14px}.mapping-instruction{min-height:34px;display:flex;align-items:center;justify-content:center;gap:10px;font-size:13px;color:var(--text-secondary, #6b7280);padding:6px 12px;border-radius:8px;margin-bottom:8px;transition:background .2s,color .2s}.mapping-instruction.visible{background:#667eea1a;color:var(--text-primary, #1f2937)}.btn-cancel{padding:4px 12px;border-radius:6px;border:1.5px solid #667eea;background:transparent;color:#667eea;font-size:12px;cursor:pointer}.btn-cancel:hover{background:#667eea;color:#fff}.mapping-body{display:grid;grid-template-columns:280px 80px 1fr;height:65vh;min-height:380px;position:relative;background:var(--section-bg, #fff);border-radius:12px;box-shadow:0 2px 12px #00000014;border:1px solid var(--section-border, #e5e7eb)}.mapping-svg{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:3;overflow:visible}.mapping-col{overflow-y:auto;padding:10px 8px;display:flex;flex-direction:column;gap:4px}.mapping-col-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted, #9ca3af);padding:0 4px 6px;border-bottom:1px solid var(--section-border, #e5e7eb);margin-bottom:4px;flex-shrink:0}.mapping-col-devices{border-right:1px solid var(--section-border, #e5e7eb)}.mapping-col-widgets{border-left:1px solid var(--section-border, #e5e7eb)}.mapping-device-item{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:7px;border:1.5px solid var(--section-border, #e5e7eb);background:var(--card-bg, #f9fafb);cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s;flex-shrink:0;position:relative;z-index:2}.mapping-device-item:hover{border-color:#667eea66;background:#667eea0a}.mapping-device-item.selected{border-color:#667eea;background:#667eea1a;box-shadow:0 0 0 2px #667eea33}.mapping-device-item.mapped{border-left:3px solid var(--dc, #10b981)}.mdi-body{flex:1;min-width:0}.mdi-name{font-size:13px;font-weight:600;color:var(--text-primary, #1f2937);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mdi-room{font-size:11px;color:#667eea;margin-top:1px}.mdi-badge{flex-shrink:0;width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:16px;position:relative;opacity:.85}.mdi-remove{display:none;position:absolute;top:-5px;right:-5px;width:14px;height:14px;border-radius:50%;background:#ef4444;color:#fff;border:none;font-size:8px;cursor:pointer;align-items:center;justify-content:center;line-height:1;padding:0}.mapping-device-item:hover .mdi-remove{display:flex}.mapping-widget-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:4px 8px 8px;align-content:start;position:relative;z-index:2}.wcard{height:72px;border-radius:10px;border:2px solid var(--section-border, #e5e7eb);background:var(--card-bg, #f9fafb);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;position:relative;transition:transform .15s,border-color .15s,box-shadow .15s,opacity .2s;cursor:default}.wcard.offset{margin-top:18px}.mapping-widget-grid.picking .wcard{cursor:pointer}.mapping-widget-grid.picking .wcard:hover{border-color:var(--wc, #667eea);transform:scale(1.06);box-shadow:0 4px 14px #0000001f}.wcard.current{border-color:var(--wc, #667eea);box-shadow:0 0 0 3px color-mix(in srgb,var(--wc,#667eea) 30%,transparent)}.wcard.has-links{border-color:color-mix(in srgb,var(--wc,#667eea) 40%,var(--section-border,#e5e7eb))}.wcard-icon{font-size:22px;line-height:1}.wcard-label{font-size:10px;font-weight:600;color:var(--text-secondary, #6b7280);text-align:center;padding:0 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.wcard-badge{position:absolute;top:-6px;right:-6px;font-size:10px;font-weight:700;background:var(--wc, #667eea);color:#fff;border-radius:10px;padding:1px 5px;min-width:16px;text-align:center;box-shadow:0 1px 4px #0003}.mapping-loading,.mapping-error,.mapping-empty{text-align:center;padding:40px;color:var(--text-secondary, #6b7280)}.mapping-saving{position:fixed;bottom:20px;right:20px;background:#1f2937;color:#fff;padding:8px 16px;border-radius:8px;font-size:13px;z-index:100}[data-theme=dark] .mapping-body{background:#1e2340;border-color:#ffffff14}[data-theme=dark] .mapping-device-item{background:#252b50;border-color:#ffffff1a}[data-theme=dark] .mapping-device-item:hover{background:#667eea1a}[data-theme=dark] .wcard{background:#252b50;border-color:#ffffff1a}[data-theme=dark] .mdi-name{color:#e2e8f0}[data-theme=dark] .wcard-label{color:#94a3b8}[data-theme=dark] .mapping-room-tab{background:#1e2340;border-color:#ffffff1a;color:#94a3b8}[data-theme=dark] .mapping-search{background:#1e2340;border-color:#ffffff1a;color:#e2e8f0}[data-theme=dark] .mapping-instruction.visible{background:#667eea26}.config-page{max-width:1200px;margin:0 auto;padding:20px}.config-header{margin-bottom:40px;text-align:center}.config-header h1{font-size:32px;color:#333;margin-bottom:10px}.config-description{font-size:16px;color:#666;margin-bottom:20px}.config-actions{margin:20px auto;text-align:center}.btn-database-info{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;padding:12px 24px;font-size:16px;font-weight:600;border-radius:8px;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px #667eea4d}.btn-database-info:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 4px 16px #667eea66}.btn-database-info:active:not(:disabled){transform:translateY(0)}.btn-database-info:disabled{opacity:.6;cursor:not-allowed}.search-filter{position:relative;max-width:600px;margin:20px auto 0}.search-input{width:100%;padding:12px 40px 12px 16px;font-size:16px;border:2px solid #e0e0e0;border-radius:8px;outline:none;transition:all .3s ease;box-sizing:border-box}.search-input:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.clear-search{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:transparent;border:none;color:#999;font-size:20px;cursor:pointer;padding:5px 10px;border-radius:4px;transition:all .2s ease}.clear-search:hover{background:#f5f5f5;color:#333}.no-results{text-align:center;padding:40px;font-size:18px;color:#999;font-style:italic}.room-actions{display:flex;justify-content:center;gap:12px;margin-top:16px;padding:12px}.btn-expand-all,.btn-collapse-all{padding:8px 16px;font-size:14px;font-weight:500;border:2px solid #667eea;border-radius:6px;cursor:pointer;transition:all .3s ease;background:#fff;color:#667eea}.btn-expand-all:hover,.btn-collapse-all:hover{background:#667eea;color:#fff;transform:translateY(-2px);box-shadow:0 2px 8px #667eea4d}.btn-expand-all:active,.btn-collapse-all:active{transform:translateY(0)}.loading,.error{text-align:center;padding:40px;font-size:18px;color:#666}.error{color:#d32f2f}.btn-reload{margin-top:20px;padding:10px 20px;background:#667eea;color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:16px}.btn-reload:hover{background:#5568d3}.system-config-section{background:#fff;border-radius:12px;padding:20px;margin-bottom:30px;box-shadow:0 2px 8px #0000001a;border-left:4px solid #667eea}.system-config-header h2{font-size:22px;color:#333;margin:0;display:flex;align-items:center;gap:10px;-webkit-user-select:none;user-select:none}.system-config-header h2:hover{color:#667eea}.devices-config-section{background:#fff;border-radius:12px;padding:20px;margin-bottom:30px;box-shadow:0 2px 8px #0000001a;border-left:4px solid #4caf50}.devices-error-banner{margin:12px 0;padding:12px 16px;background:#fff3cd;border:1px solid #ffc107;border-radius:8px;color:#856404;font-size:.9rem}.btn-reload-inline{background:none;border:1px solid #856404;border-radius:4px;color:#856404;cursor:pointer;padding:2px 8px;font-size:.85rem;margin-left:8px}.btn-reload-inline:hover{background:#ffc107;color:#fff}.devices-config-header h2{font-size:22px;color:#333;margin:0;display:flex;align-items:center;gap:10px;-webkit-user-select:none;user-select:none}.devices-config-header h2:hover{color:#4caf50}.system-config-form{margin-top:20px;padding-top:20px;border-top:1px solid #e0e0e0}.form-group{margin-bottom:20px}.form-group label{display:block;font-size:14px;font-weight:600;color:#555;margin-bottom:8px}.form-input{width:100%;padding:12px;font-size:16px;border:2px solid #e0e0e0;border-radius:8px;outline:none;transition:all .3s ease;box-sizing:border-box;background:#fff}.form-input:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.form-input::placeholder{color:#aaa;font-style:italic}.form-hint{display:block;margin-top:6px;font-size:12px;color:#999;font-style:italic}.form-actions{margin-top:24px;text-align:right}.btn-save{background:linear-gradient(135deg,#4caf50,#45a049);color:#fff;border:none;padding:12px 32px;font-size:16px;font-weight:600;border-radius:8px;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px #4caf504d}.btn-save:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 4px 16px #4caf5066}.btn-save:active:not(:disabled){transform:translateY(0)}.btn-save:disabled{opacity:.6;cursor:not-allowed}.error-message{padding:12px;background:#ffebee;color:#c62828;border-radius:6px;margin-bottom:16px;font-size:14px;border-left:4px solid #c62828}.success-message{padding:12px;background:#e8f5e9;color:#2e7d32;border-radius:6px;margin-bottom:16px;font-size:14px;border-left:4px solid #4caf50}.room-section{background:#fff;border-radius:12px;padding:20px;margin-bottom:24px;box-shadow:0 2px 8px #0000001a}.room-title{font-size:24px;color:#333;margin-bottom:20px;display:flex;align-items:center;gap:12px;border-bottom:2px solid #f0f0f0;padding-bottom:12px;-webkit-user-select:none;user-select:none;transition:all .2s ease}.room-title.clickable:hover{color:#667eea;border-bottom-color:#667eea}.room-toggle{font-size:18px;min-width:20px;display:inline-block;transition:transform .2s ease}.room-icon{font-size:28px}.room-count{font-size:16px;color:#999;font-weight:400}.devices-list{display:flex;flex-direction:column;gap:12px}.device-config-item{display:flex;align-items:center;justify-content:space-between;padding:16px;background:#f8f8f8;border-radius:8px;transition:all .3s ease;border:2px solid transparent;gap:16px}.device-config-item.visible{background:#f0f9ff;border-color:#667eea}.device-config-item.hidden{background:#f5f5f5;opacity:.6}.device-config-info{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.device-config-name{font-size:16px;font-weight:600;color:#333}.device-config-type{font-size:12px;color:#999;text-transform:uppercase;letter-spacing:.5px}.device-config-room{font-size:12px;color:#667eea;font-weight:500}.device-config-controls{display:flex;align-items:center;gap:16px;flex-shrink:0}.btn-favorite{padding:8px 12px;font-size:24px;border:2px solid #e0e0e0;border-radius:6px;background:#fff;cursor:pointer;transition:all .3s ease;line-height:1;min-width:50px}.btn-favorite:hover{border-color:#ffc107;transform:scale(1.1)}.btn-favorite.active{background:linear-gradient(135deg,#ffd54f,#ffc107);border-color:#ffa000;box-shadow:0 2px 8px #ffc10766}.btn-favorite.active:hover{transform:scale(1.15);box-shadow:0 4px 12px #ffc10780}.widget-selector{display:flex;align-items:center;gap:8px}.widget-selector label{font-size:14px;color:#666;font-weight:500;white-space:nowrap}.widget-select{padding:8px 12px;font-size:14px;border:2px solid #e0e0e0;border-radius:6px;background:#fff;cursor:pointer;outline:none;transition:all .2s ease;min-width:200px}.widget-select:hover:not(:disabled){border-color:#667eea}.widget-select:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.widget-select:disabled{opacity:.5;cursor:not-allowed;background:#f5f5f5}.widget-select optgroup{font-weight:600;color:#333;font-size:13px}.widget-select option{padding:8px;font-size:14px}.device-config-status{min-width:100px;text-align:right}.status-visible{color:#4caf50;font-weight:600;font-size:14px}.status-hidden{color:#999;font-weight:600;font-size:14px}.toggle-switch{position:relative;display:inline-block;width:60px;height:34px;margin-left:20px}.toggle-switch input{opacity:0;width:0;height:0}.toggle-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:.4s;border-radius:34px}.toggle-slider:before{position:absolute;content:"";height:26px;width:26px;left:4px;bottom:4px;background-color:#fff;transition:.4s;border-radius:50%}.toggle-switch input:checked+.toggle-slider{background-color:#667eea}.toggle-switch input:focus+.toggle-slider{box-shadow:0 0 1px #667eea}.toggle-switch input:checked+.toggle-slider:before{transform:translate(26px)}.toggle-switch:hover .toggle-slider{background-color:#aaa}.toggle-switch input:checked:hover+.toggle-slider{background-color:#5568d3}@media(max-width:768px){.config-page{padding:15px}.config-header h1{font-size:24px}.room-title{font-size:20px}.device-config-item{flex-direction:column;align-items:flex-start;gap:12px}.toggle-switch{margin-left:0}.device-config-status{margin-left:0;text-align:left}}[data-theme=dark] .config-header h1{color:#e2e8f0}[data-theme=dark] .config-description{color:#94a3b8}[data-theme=dark] .search-input{background:#1e2340;border-color:#374151;color:#e2e8f0}[data-theme=dark] .search-input:focus{border-color:#818cf8;box-shadow:0 0 0 3px #818cf826}[data-theme=dark] .search-input::placeholder{color:#64748b}[data-theme=dark] .clear-search:hover{background:#252b50;color:#e2e8f0}[data-theme=dark] .no-results{color:#64748b}.plugin-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:8px 0}.plugin-toggle-info{display:flex;flex-direction:column;gap:4px;flex:1}.plugin-toggle-title{font-size:1rem;font-weight:600;color:var(--text-primary)}.plugin-toggle-desc{font-size:.82rem;color:var(--text-secondary);line-height:1.5}[data-theme=dark] .plugin-toggle-title{color:#e2e8f0}[data-theme=dark] .plugin-toggle-desc{color:#94a3b8}.tab-button-enphase{background:#f59e0b2e!important;border:1px solid rgba(245,158,11,.35)}.tab-button-enphase:hover{background:#f59e0b4d!important}.tab-button-enphase.active{background:#f59e0b!important;color:#1a1a1a!important}.tab-button-mapping{background:#667eea26!important;border:1px solid rgba(102,126,234,.35)}.tab-button-mapping:hover{background:#667eea47!important}.tab-button-mapping.active{background:#667eea!important;color:#fff!important}.widget-mode-toggle{display:flex;gap:8px;margin:12px 0;padding:0 4px}.widget-mode-btn{flex:1;padding:9px 16px;border-radius:8px;border:2px solid var(--section-border, #e5e7eb);background:var(--section-bg, #fff);color:var(--text-secondary, #6b7280);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s}.widget-mode-btn:hover{border-color:#667eea;color:#667eea}.widget-mode-btn.active{background:#667eea;border-color:#667eea;color:#fff;font-weight:600}.favorites-page{max-width:1400px;margin:0 auto;padding:20px;min-height:100vh}.favorites-header{text-align:center;margin-bottom:40px}.favorites-header h1{font-size:36px;color:#fff;margin-bottom:10px;text-shadow:0 2px 8px rgba(0,0,0,.2)}.favorites-subtitle{font-size:16px;color:#ffffffd9}.favorites-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px}.empty-favorites{text-align:center;padding:80px 20px;color:#999}.empty-icon{font-size:80px;margin-bottom:20px;opacity:.3}.empty-favorites h2{font-size:24px;color:#666;margin-bottom:10px}.empty-favorites p{font-size:16px;color:#999}.loading-container,.error-container{text-align:center;padding:60px 20px}.loading-spinner{border:4px solid #f3f3f3;border-top:4px solid #667eea;border-radius:50%;width:50px;height:50px;animation:spin 1s linear infinite;margin:0 auto 20px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.btn-retry{margin-top:20px;padding:12px 24px;background:#667eea;color:#fff;border:none;border-radius:8px;font-size:16px;cursor:pointer;transition:all .3s ease}.btn-retry:hover{background:#5568d3;transform:translateY(-2px);box-shadow:0 4px 12px #667eea4d}@media(max-width:768px){.favorites-grid{grid-template-columns:1fr}.favorites-header h1{font-size:28px}}[data-theme=dark] .favorites-header h1{color:#e2e8f0;text-shadow:0 2px 8px rgba(0,0,0,.5)}[data-theme=dark] .favorites-subtitle{color:#cbd5e1d9}[data-theme=dark] .empty-favorites h2{color:#94a3b8}[data-theme=dark] .empty-favorites p{color:#64748b}.enphase-page{padding:24px;min-height:60vh;display:flex;flex-direction:column;align-items:center;gap:24px}.enphase-header{display:flex;align-items:center;gap:16px;flex-wrap:wrap;width:100%;max-width:720px}.enphase-title{margin:0;font-size:1.6rem;font-weight:700;color:var(--text-primary);flex:1}.enphase-last-update{font-size:.82rem;color:var(--text-secondary)}.enphase-refresh-hint{color:var(--text-muted)}.enphase-refresh-btn{background:#ffffff26;border:1px solid rgba(255,255,255,.3);color:var(--text-primary);border-radius:50%;width:36px;height:36px;font-size:1.2rem;cursor:pointer;transition:background .2s,transform .3s;display:flex;align-items:center;justify-content:center;flex-shrink:0}.enphase-refresh-btn:hover{background:#ffffff40;transform:rotate(180deg)}[data-theme=dark] .enphase-refresh-btn{background:#ffffff14;border-color:#ffffff26}.enphase-loading,.enphase-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:60px 24px;color:var(--text-secondary);font-size:1rem}.enphase-spinner{width:48px;height:48px;border:4px solid rgba(245,158,11,.2);border-top-color:#f59e0b;border-radius:50%;animation:enphase-spin .9s linear infinite}@keyframes enphase-spin{to{transform:rotate(360deg)}}.enphase-error-icon{font-size:2.5rem}.enphase-retry-btn{padding:10px 24px;background:#f59e0b;color:#1a1a1a;border:none;border-radius:8px;font-size:.95rem;font-weight:600;cursor:pointer;transition:background .2s}.enphase-retry-btn:hover{background:#d97706}.enphase-missing-warning{width:100%;max-width:720px;background:#f59e0b1f;border:1px solid rgba(245,158,11,.4);border-radius:10px;padding:14px 18px;color:var(--text-primary);font-size:.9rem;line-height:1.6}.enphase-missing-warning small{color:var(--text-secondary)}.enphase-diagram-container{width:100%;display:flex;flex-direction:column;align-items:center;gap:28px}.enphase-svg{width:100%;max-width:480px;height:auto;background:radial-gradient(ellipse at center,#1e233ce6,#0a0c19fa);border-radius:20px;border:1px solid rgba(255,255,255,.08);box-shadow:0 20px 60px #00000080,inset 0 1px #ffffff0d;padding:10px}:root:not([data-theme=dark]) .enphase-svg{background:radial-gradient(ellipse at center,#14142deb,#050512fa)}.noeud-icone{dominant-baseline:middle}.noeud-watts{font-size:13px;font-weight:700;dominant-baseline:middle}.noeud-watts-solaire{fill:#fbbf24}.noeud-watts-maison{fill:#c084fc}.noeud-watts-reseau{fill:#22d3ee}.noeud-kwh{font-size:10px;fill:#ffffff8c;dominant-baseline:middle}.noeud-label{font-size:11px;font-weight:600;letter-spacing:.03em}.label-solaire{fill:#fbbf24}.label-maison{fill:#c084fc}.label-reseau{fill:#22d3ee}.arc-anime{stroke-linecap:round}.arc-sol-maison{animation:dash-sol-maison 1.8s linear infinite}.arc-sol-reseau{animation:dash-sol-reseau 2s linear infinite}.arc-res-maison{animation:dash-res-maison 2.2s linear infinite}.arc-inactif{stroke-linecap:round;opacity:.35}@keyframes dash-sol-maison{0%{stroke-dashoffset:0}to{stroke-dashoffset:-54}}@keyframes dash-sol-reseau{0%{stroke-dashoffset:0}to{stroke-dashoffset:-54}}@keyframes dash-res-maison{0%{stroke-dashoffset:0}to{stroke-dashoffset:-54}}.noeud-solaire{animation:pulse-solaire 3s ease-in-out infinite}.noeud-maison{animation:pulse-maison 3.4s ease-in-out infinite}.noeud-reseau{animation:pulse-reseau 3.8s ease-in-out infinite}@keyframes pulse-solaire{0%,to{opacity:1}50%{opacity:.75}}@keyframes pulse-maison{0%,to{opacity:1}50%{opacity:.72}}@keyframes pulse-reseau{0%,to{opacity:1}50%{opacity:.68}}.enphase-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;width:100%}@media(max-width:520px){.enphase-summary{grid-template-columns:1fr}}.enphase-summary-card{background:var(--card-bg);border:1px solid var(--card-border);border-radius:14px;padding:16px 14px;display:flex;flex-direction:column;align-items:center;gap:4px;box-shadow:var(--card-shadow);transition:transform .2s,box-shadow .2s}.enphase-summary-card.clickable{cursor:pointer}.enphase-summary-card.clickable:hover{transform:translateY(-3px);box-shadow:var(--card-shadow-hover)}.summary-history-hint{font-size:.72rem;opacity:.6;margin-top:6px}.enphase-summary-card.solaire{border-top:3px solid #f59e0b}.enphase-summary-card.maison{border-top:3px solid #a855f7}.enphase-summary-card.reseau{border-top:3px solid #06b6d4}.summary-icon{font-size:1.6rem}.summary-label{font-size:.8rem;font-weight:600;color:var(--text-secondary);text-align:center;text-transform:uppercase;letter-spacing:.05em}.summary-watts{font-size:1.4rem;font-weight:800;color:var(--text-primary);margin-top:2px}.enphase-summary-card.solaire .summary-watts{color:#f59e0b}.enphase-summary-card.maison .summary-watts{color:#a855f7}.enphase-summary-card.reseau .summary-watts{color:#06b6d4}.summary-kwh{font-size:.78rem;color:var(--text-muted);text-align:center}.summary-device-name{font-size:.68rem;color:var(--text-muted);text-align:center;margin-top:4px;opacity:.7;font-style:italic}.reseau-direction{font-size:.7rem;font-weight:400;color:var(--text-muted)}.viz-tab-bar{display:flex;gap:6px;width:100%;max-width:720px;background:#00000040;border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:6px;flex-wrap:wrap}[data-theme=dark] .viz-tab-bar{background:#0006;border-color:#ffffff0f}.viz-tab-btn{flex:1;min-width:100px;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 6px;background:transparent;border:1px solid transparent;border-radius:10px;color:var(--text-secondary);cursor:pointer;transition:background .18s,color .18s,border-color .18s;font-family:inherit}.viz-tab-btn:hover{background:#f59e0b14;color:var(--text-primary);border-color:#f59e0b33}.viz-tab-btn--active{background:#f59e0b26;border-color:#f59e0b80;color:#f59e0b}[data-theme=dark] .viz-tab-btn--active{background:#f59e0b1f;border-color:#f59e0b66}.viz-tab-num{font-size:1rem;font-weight:800;line-height:1}.viz-tab-label{font-size:.7rem;font-weight:500;letter-spacing:.02em;white-space:nowrap}.viz2-deux-graphiques{display:grid;grid-template-columns:1fr 1fr;gap:16px;width:100%}.viz2-graphique-container{width:100%;background:radial-gradient(ellipse at center,#141932eb,#060814fc);border:1px solid rgba(255,255,255,.08);border-radius:16px;padding:20px 16px 16px;box-shadow:0 16px 48px #00000073,inset 0 1px #ffffff0a}[data-theme=dark] .viz2-graphique-container{background:radial-gradient(ellipse at center,#0c1024f5,#03040c)}.viz2-graphique-titre{font-size:.82rem;font-weight:600;color:#ffffff80;text-transform:uppercase;letter-spacing:.06em;margin-bottom:12px;text-align:center}.viz2-tooltip{background:#0a0c1cf5;border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:10px 14px;box-shadow:0 8px 24px #00000080}.viz2-tooltip-heure{font-size:.78rem;font-weight:700;color:#ffffffa6;margin:0 0 6px;letter-spacing:.04em}.viz2-tooltip-ligne{font-size:.82rem;font-weight:600;margin:2px 0}.viz2-info{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:40px 24px;background:#0a0c1cb3;border:1px solid rgba(255,255,255,.07);border-radius:16px;color:var(--text-secondary);font-size:.92rem;text-align:center;width:100%}[data-theme=dark] .viz2-info{background:#050610d9}.viz2-info-icon{font-size:2rem}.viz2-info-sub{font-size:.8rem;color:var(--text-muted);margin:0}.viz2-chargement{display:flex;flex-direction:column;align-items:center;gap:14px;padding:40px 24px;color:var(--text-secondary);font-size:.92rem}@media(max-width:900px){.viz2-deux-graphiques{grid-template-columns:1fr}}@media(max-width:520px){.viz2-graphique-container{padding:14px 8px 12px}}:root{--bg-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);--card-bg: rgba(255, 255, 255, .75);--card-bg-hover: rgba(255, 255, 255, .88);--card-border: rgba(255, 255, 255, .6);--card-shadow: 0 8px 24px rgba(0, 0, 0, .12), inset 0 1px 0 rgba(255, 255, 255, .9);--card-shadow-hover: 0 12px 32px rgba(0, 0, 0, .18), inset 0 1px 0 rgba(255, 255, 255, .95);--text-primary: #1f2937;--text-secondary: #6b7280;--text-muted: #9ca3af;--header-bg: rgba(255, 255, 255, .75);--header-border: rgba(255, 255, 255, .6);--input-bg: #ffffff;--input-border: #ddd;--section-bg: #ffffff;--section-border: #e5e7eb;--room-title-color: white}[data-theme=dark]{--bg-gradient: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);--card-bg: rgba(30, 35, 60, .85);--card-bg-hover: rgba(40, 46, 74, .95);--card-border: rgba(255, 255, 255, .08);--card-shadow: 0 8px 24px rgba(0, 0, 0, .4), inset 0 1px 0 rgba(255, 255, 255, .06);--card-shadow-hover: 0 12px 32px rgba(0, 0, 0, .55), inset 0 1px 0 rgba(255, 255, 255, .08);--text-primary: #e2e8f0;--text-secondary: #94a3b8;--text-muted: #64748b;--header-bg: rgba(20, 25, 50, .85);--header-border: rgba(255, 255, 255, .08);--input-bg: #1e2340;--input-border: #374151;--section-bg: #1e2340;--section-border: #2d3748;--room-title-color: #cbd5e1}html,body,#root,.App{background:var(--bg-gradient)}.App{width:100%;min-height:100vh;padding:0;margin:0}.App.loading{display:flex;align-items:center;justify-content:center;background:var(--bg-gradient)}.loading-spinner{color:#fff;font-size:24px;font-weight:600}.app-header{display:flex;justify-content:space-between;align-items:center;padding:20px 40px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 2px 10px #0000001a;gap:20px;position:fixed;top:0;left:0;right:0;z-index:100}[data-theme=dark] .app-header{background:linear-gradient(135deg,#2d1b69,#1e1040);box-shadow:0 2px 10px #0006}.app-header h1{margin:0;font-size:28px;font-weight:700}.app-tabs{display:flex;gap:8px;flex:1;justify-content:center}.tab-button{padding:12px 24px;background:#ffffff26;color:#fff;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;transition:all .3s;outline:none}.tab-button:hover{background:#ffffff40}.tab-button.active{background:#fff;color:#667eea}.app-content{padding:100px 20px 20px}.header-user{display:flex;align-items:center;gap:16px}.username{font-size:14px;font-weight:500;opacity:.95}.logout-button{padding:10px 20px;background:#fff3;color:#fff;border:2px solid white;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:all .3s}.logout-button:hover{background:#fff;color:#667eea}.darkmode-toggle{background:#ffffff26;border:2px solid rgba(255,255,255,.3);border-radius:50%;width:40px;height:40px;font-size:18px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;padding:0}.darkmode-toggle:hover{background:#ffffff40;transform:scale(1.1)}@media(max-width:1200px){.App{padding:0}}@media(max-width:768px){.App{padding:0}}body.degraded-mode *{animation:none!important;transition:none!important}.degraded-badge{background:#ea580cd9;color:#fff;font-size:.72rem;font-weight:600;padding:4px 10px;border-radius:20px;letter-spacing:.02em;white-space:nowrap}
