*{box-sizing:border-box;margin:0;padding:0}:root{--secondary:#3b82f6;--danger:#ef4444;--warning:#f59e0b;--background:#0f172a;--surface:#1e293b;--surface-light:#334155;--text:#f1f5f9;--text-secondary:#94a3b8;--border:#334155;--shadow:#0000004d}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#0f172a;background-color:var(--background);color:#f1f5f9;color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:#1e293b;background:var(--surface)}::-webkit-scrollbar-thumb{background:#334155;background:var(--surface-light);border-radius:5px}::-webkit-scrollbar-thumb:hover{background:#334155;background:var(--border)}.container{margin:0 auto;max-width:1400px;padding:0 20px}.card{background:#1e293b;background:var(--surface);border:1px solid #334155;border:1px solid var(--border);border-radius:12px;box-shadow:0 4px 6px #0000004d;box-shadow:0 4px 6px var(--shadow);padding:24px}.btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:inline-flex;font-size:14px;font-weight:600;gap:8px;padding:10px 20px;transition:all .2s}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-primary{background:#10b981;background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:#059669;background:var(--primary-dark);transform:translateY(-1px)}.btn-secondary{background:#3b82f6;background:var(--secondary);color:#fff}.btn-secondary:hover:not(:disabled){background:#2563eb;transform:translateY(-1px)}.btn-danger{background:#ef4444;background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:#dc2626;transform:translateY(-1px)}.btn-outline{background:#0000;border:1px solid #334155;border:1px solid var(--border);color:#f1f5f9;color:var(--text)}.btn-outline:hover:not(:disabled){background:#334155;background:var(--surface-light)}.input{background:#0f172a;background:var(--background);border:1px solid #334155;border:1px solid var(--border);border-radius:8px;color:#f1f5f9;color:var(--text);font-size:14px;padding:12px;transition:border-color .2s;width:100%}.input:focus{border-color:#10b981;border-color:var(--primary);outline:none}.label{color:#94a3b8;color:var(--text-secondary);display:block;font-size:14px;font-weight:600;margin-bottom:8px}.status-badge{align-items:center;border-radius:20px;display:inline-flex;font-size:12px;font-weight:600;gap:6px;padding:4px 12px}.status-online{background:#10b98133;color:#10b981;color:var(--success)}.status-offline{background:#94a3b833;color:#94a3b8;color:var(--text-secondary)}.status-error{background:#ef444433;color:#ef4444;color:var(--danger)}.status-charging{background:#3b82f633;color:#3b82f6;color:var(--secondary)}.status-discharging{background:#f59e0b33;color:#f59e0b;color:var(--warning)}.grid{grid-gap:20px;display:grid;gap:20px}.grid-2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.grid-3{grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}.grid-4{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:fadeIn .3s ease-out}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.dashboard{margin:0 auto;max-width:1400px}.dashboard-header{align-items:center;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;margin-bottom:32px}.dashboard-header h2{font-size:32px;margin-bottom:4px}.subtitle{color:var(--text-secondary);font-size:14px}.header-actions{align-items:center;display:flex;gap:16px}.connection-status{align-items:center;background:var(--surface-light);border-radius:20px;display:flex;font-size:14px;font-weight:600;gap:8px;padding:8px 16px}.connection-status.connected{color:var(--success)}.connection-status.disconnected{color:var(--text-secondary)}.status-dot{background:currentColor;height:8px;width:8px}.connection-status.connected .status-dot{animation:pulse 2s ease-in-out infinite}.error-banner{background:#ef44441a;border:1px solid var(--danger);border-radius:8px;color:var(--danger);gap:12px;margin-bottom:24px;padding:16px}.error-banner,.loading{align-items:center;display:flex}.loading{flex-direction:column;gap:16px;justify-content:center;min-height:400px}.spinner{animation:spin 1s linear infinite;border:4px solid var(--surface-light);border-top-color:var(--primary);height:48px;width:48px}.empty-state{align-items:center;display:flex;flex-direction:column;gap:16px;padding:80px 40px;text-align:center}.empty-state h3{font-size:24px;margin-top:16px}.empty-state p{color:var(--text-secondary);margin-bottom:16px}.devices-grid{grid-gap:24px;display:grid;gap:24px;grid-template-columns:repeat(auto-fill,minmax(350px,1fr))}.device-card{cursor:pointer;display:flex;flex-direction:column;gap:16px;transition:all .3s ease}.device-card:hover{border-color:var(--primary);box-shadow:0 8px 16px var(--shadow);transform:translateY(-4px)}.device-header{justify-content:space-between}.device-header,.device-icon{align-items:center;display:flex}.device-icon{background:linear-gradient(135deg,var(--primary),var(--secondary));border-radius:12px;color:#fff;height:48px;justify-content:center;width:48px}.pulse-dot{background:currentColor;border-radius:50%;height:6px;margin-right:2px;width:6px}.status-online .pulse-dot{animation:pulse 2s ease-in-out infinite}.device-name{font-size:20px;margin:0}.device-id{color:var(--text-secondary);font-family:monospace;font-size:12px;margin:0}.device-info{border-bottom:1px solid var(--border);border-top:1px solid var(--border);display:flex;flex-direction:column;gap:8px;padding:12px 0}.info-item{align-items:center;color:var(--text-secondary);display:flex;font-size:14px;gap:8px}.info-item .label{font-weight:600}.device-meta{color:var(--text-secondary);display:flex;flex-direction:column;font-size:12px;gap:4px}.device-actions{display:flex;gap:12px;margin-top:auto}.device-actions .btn{flex:1 1;justify-content:center}@media (max-width:768px){.devices-grid{grid-template-columns:1fr}.dashboard-header{align-items:flex-start;flex-direction:column}.header-actions{flex-wrap:wrap;width:100%}}:root{--primary:#10b981;--primary-dark:#059669;--primary-light:#d1fae5;--success:#10b981;--error:#ef4444;--error-light:#fee2e2;--gray-100:#f3f4f6;--gray-200:#e5e7eb;--gray-300:#d1d5db;--gray-500:#6b7280;--gray-700:#374151;--gray-900:#111827;--text:#111827;--text-light:#6b7280}.login-page{align-items:center;animation:fadeInPage .3s ease-in;background:linear-gradient(135deg,#10b981,#059669);display:flex;justify-content:center;min-height:100vh;padding:16px}@keyframes fadeInPage{0%{opacity:0}to{opacity:1}}.login-container{max-width:500px;width:100%}.login-card{background:#fff;border-radius:12px;box-shadow:0 20px 60px #00000026;padding:40px}.login-header{margin-bottom:32px;text-align:center}.login-header svg{color:#10b981;color:var(--primary);margin-bottom:16px}.login-header h1{color:#111827;color:var(--text);font-size:28px;font-weight:700;margin:8px 0}.login-header .subtitle{color:#6b7280;color:var(--text-light);font-size:14px;margin-top:8px}.login-form{margin-bottom:32px}.form-group{margin-bottom:24px}.form-group label{color:#111827;color:var(--text);display:block;font-size:14px;font-weight:600;margin-bottom:8px}.form-input{border:2px solid #d1d5db;border:2px solid var(--gray-300);border-radius:8px;box-sizing:border-box;font-family:inherit;font-size:16px;padding:12px 14px;transition:all .2s ease;width:100%}.form-input:focus{border-color:#10b981;border-color:var(--primary);box-shadow:0 0 0 3px #d1fae5;box-shadow:0 0 0 3px var(--primary-light);outline:none}.form-input:disabled{background-color:#f3f4f6;background-color:var(--gray-100);color:#6b7280;color:var(--gray-500);cursor:not-allowed}.pairing-code-input{font-family:Courier New,monospace;font-size:24px;font-weight:600;letter-spacing:4px;text-align:center}.help-text{color:#6b7280;color:var(--text-light);font-size:12px;margin-top:6px}.error-box{align-items:center;background-color:#fee2e2;background-color:var(--error-light);border:1px solid #ef4444;border:1px solid var(--error);border-radius:8px;color:#ef4444;color:var(--error);display:flex;font-size:14px;gap:12px;margin-bottom:24px;padding:12px 14px}.error-box svg{flex-shrink:0}.login-button{align-items:center;background:#10b981;background:var(--primary);border:none;border-radius:8px;color:#fff;cursor:pointer;display:flex;font-size:16px;font-weight:600;gap:8px;justify-content:center;padding:12px 24px;transition:all .2s ease;width:100%}.login-button:hover:not(:disabled){background:#059669;background:var(--primary-dark);box-shadow:0 10px 20px #10b9814d;transform:translateY(-2px)}.login-button:active:not(:disabled){transform:translateY(0)}.login-button:disabled{background:#d1d5db;background:var(--gray-300);cursor:not-allowed;opacity:.7}.spinner{animation:spin .6s linear infinite;border:2px solid #ffffff4d;border-radius:50%;border-top-color:#fff;height:16px;width:16px}@keyframes spin{to{transform:rotate(1turn)}}.success-card{animation:slideUp .4s ease;background:#fff;border-radius:12px;box-shadow:0 20px 60px #00000026;padding:48px 32px;text-align:center}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.success-card h2{color:#111827;color:var(--text);font-size:24px;font-weight:700;margin:16px 0}.success-card p{color:#6b7280;color:var(--text-light);margin:8px 0}.redirect-text{font-size:13px;margin-top:12px}.info-section{background:#d1fae5;background:var(--primary-light);border-left:4px solid #10b981;border-left:4px solid var(--primary);border-radius:6px;padding:16px}.info-section h3{font-size:14px;font-weight:600;margin:0 0 12px}.info-section h3,.instructions{color:#111827;color:var(--text)}.instructions{font-size:13px;line-height:1.6;margin:0;padding:0 0 0 20px}.instructions li{margin-bottom:6px}.instructions strong{color:#059669;color:var(--primary-dark);font-weight:600}.fade-in{animation:fadeInPage .3s ease-in}@media (max-width:480px){.login-card{padding:24px}.login-header h1{font-size:24px}.pairing-code-input{font-size:20px;letter-spacing:2px}.info-section{margin-top:24px}}.chart-container{padding:24px}.metric-selector{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:24px}.metric-btn{background:#0000;border:1px solid var(--border);border-radius:6px;color:var(--text-secondary);cursor:pointer;font-size:14px;font-weight:600;padding:8px 16px;transition:all .2s}.metric-btn:hover{background:var(--surface-light);border-color:var(--primary);color:var(--text)}.metric-btn.active{background:var(--primary);border-color:var(--primary);color:#fff}.chart-wrapper{height:400px;position:relative}.chart-empty,.chart-loading{align-items:center;display:flex;flex-direction:column;gap:16px;height:400px;justify-content:center}.chart-empty p,.chart-loading p{color:var(--text-secondary)}@media (max-width:768px){.chart-wrapper{height:300px}.metric-selector{justify-content:center}.metric-btn{flex:1 1;min-width:80px}}.battery-card{cursor:pointer;display:flex;flex-direction:column;gap:16px;overflow:hidden;position:relative;transition:all .3s ease}.battery-card:hover{box-shadow:0 6px 12px var(--shadow);transform:translateY(-2px)}.battery-card.selected{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary)}.battery-card:before{background:var(--primary);content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s;width:4px}.battery-card.selected:before{opacity:1}.battery-card-header{align-items:center;display:flex;gap:12px}.battery-card-header svg{color:var(--primary);flex-shrink:0}.battery-card-header h4{flex:1 1;font-size:16px;margin:0}.battery-id{color:var(--text-secondary);display:block;font-family:monospace;font-size:11px;margin-top:2px}.status-dot{border-radius:50%;flex-shrink:0;height:12px;width:12px}.no-data{color:var(--text-secondary);padding:40px 20px;text-align:center}.soc-display{background:var(--background);border-radius:8px;padding:16px;text-align:center}.soc-value{font-size:36px;font-weight:700;line-height:1;margin-bottom:4px}.soc-label{color:var(--text-secondary);font-size:12px;margin-bottom:12px}.soc-bar{background:var(--surface-light);border-radius:4px;height:8px;overflow:hidden}.soc-fill{border-radius:4px;height:100%;transition:width .5s ease}.battery-metrics{grid-gap:12px;display:grid;gap:12px;grid-template-columns:1fr 1fr}.metric{align-items:center;background:var(--background);border-radius:6px;display:flex;gap:8px;padding:8px}.metric svg{color:var(--text-secondary);flex-shrink:0}.metric>div{display:flex;flex-direction:column;min-width:0}.metric-value{font-size:14px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.metric-label{color:var(--text-secondary);font-size:11px}.battery-status{align-items:center;border-top:1px solid var(--border);display:flex;justify-content:space-between;padding-top:12px}.health-indicator{color:var(--text-secondary);font-size:12px}@media (max-width:640px){.battery-metrics{grid-template-columns:1fr}}.device-detail{margin:0 auto;max-width:1400px}.detail-header{gap:20px;margin-bottom:32px}.detail-header,.device-title{align-items:center;display:flex}.device-title{flex:1 1;gap:16px}.device-title h2{font-size:28px;margin:0}.device-info-grid{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin-bottom:32px}.info-card{display:flex;flex-direction:column;gap:8px;padding:16px}.info-label{color:var(--text-secondary);font-size:12px;font-weight:600;letter-spacing:.5px;text-transform:uppercase}.info-value{font-size:18px;font-weight:700}.empty-batteries{align-items:center;display:flex;flex-direction:column;gap:16px;padding:80px 40px;text-align:center}.empty-batteries h3{font-size:20px;margin-top:16px}.empty-batteries p{color:var(--text-secondary)}.batteries-section{margin-bottom:32px}.batteries-section h3{font-size:20px;margin-bottom:16px}.batteries-grid{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.chart-section{margin-top:32px}.chart-header{align-items:center;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-bottom:16px}.chart-header h3{font-size:20px;margin:0}.time-range-selector{background:var(--surface);border:1px solid var(--border);border-radius:8px;display:flex;gap:8px;padding:4px}.range-btn{background:#0000;border:none;border-radius:6px;color:var(--text-secondary);cursor:pointer;font-size:14px;font-weight:600;padding:8px 16px;transition:all .2s}.range-btn:hover{background:var(--surface-light);color:var(--text)}.range-btn.active{background:var(--primary);color:#fff}.error-container{align-items:center;display:flex;flex-direction:column;gap:16px;justify-content:center;min-height:400px}.error-container h2{margin-top:16px}@media (max-width:768px){.detail-header{flex-wrap:wrap}.device-title{align-items:flex-start;flex-direction:column}.batteries-grid{grid-template-columns:1fr}.time-range-selector{width:100%}.range-btn{flex:1 1}}.app{display:flex;flex-direction:column;min-height:100vh}.header{background:var(--surface);border-bottom:1px solid var(--border);box-shadow:0 2px 8px var(--shadow);padding:20px 0;position:-webkit-sticky;position:sticky;top:0;z-index:100}.header-content{justify-content:space-between}.header-content,.logo{align-items:center;display:flex}.logo{color:var(--text);gap:12px;text-decoration:none;transition:transform .2s}.logo:hover{transform:translateY(-2px)}.logo svg{color:var(--primary)}.logo h1{-webkit-text-fill-color:#0000;background:linear-gradient(135deg,var(--primary),var(--secondary));-webkit-background-clip:text;background-clip:text;font-size:24px;margin:0}.logo p{color:var(--text-secondary);font-size:12px;margin:0}.nav{display:flex;gap:20px}.nav-link{border-radius:8px;color:var(--text-secondary);font-weight:500;padding:8px 16px;text-decoration:none;transition:all .2s}.nav-link:hover{background:var(--surface-light);color:var(--text)}.main{flex:1 1;padding:40px 0}.footer{background:var(--surface);border-top:1px solid var(--border);color:var(--text-secondary);font-size:14px;padding:20px 0;text-align:center}.footer .domain{color:var(--primary);font-weight:600;margin-top:4px}@media (max-width:768px){.header-content{flex-direction:column;gap:16px}.logo h1{font-size:20px}.nav{justify-content:center;width:100%}}
/*# sourceMappingURL=main.eab52ef4.css.map*/