:root{--bg-main: #f0f4f8;--bg-card: #ffffff;--bg-sidebar: #ffffff;--text-main: #1e293b;--text-muted: #64748b;--primary: #3b82f6;--primary-hover: #2563eb;--border: #e2e8f0;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .05), 0 2px 4px -1px rgba(0, 0, 0, .03);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .05), 0 4px 6px -2px rgba(0, 0, 0, .025);--radius-lg: 16px;--radius-md: 12px;--radius-sm: 8px;--success: #10b981;--danger: #ef4444;--warning: #f59e0b;--info: #06b6d4;--sidebar-width: 260px}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Inter,system-ui,-apple-system,sans-serif;background-color:var(--bg-main);color:var(--text-main);-webkit-font-smoothing:antialiased}.app{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-width);background:var(--bg-sidebar);border-right:1px solid var(--border);display:flex;flex-direction:column;position:fixed;height:100vh;z-index:50;transition:transform .3s ease}.sidebar-header{padding:24px;border-bottom:1px solid var(--border)}.logo{display:flex;align-items:center;gap:12px}.logo-icon{width:40px;height:40px;background:var(--primary);border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;color:#fff}.logo-icon svg{width:24px;height:24px}.logo-text{display:flex;flex-direction:column}.logo-title{font-weight:700;font-size:1.1rem;color:var(--text-main)}.logo-sub{font-size:.75rem;color:var(--text-muted)}.sidebar-nav{padding:20px 16px;flex:1;display:flex;flex-direction:column;gap:8px}.nav-item{display:flex;align-items:center;gap:12px;padding:12px 16px;background:transparent;border:none;border-radius:var(--radius-md);color:var(--text-muted);font-size:.95rem;font-weight:500;cursor:pointer;transition:all .2s;width:100%;text-align:left}.nav-item svg{width:20px;height:20px}.nav-item:hover{background:#f1f5f9;color:var(--text-main)}.nav-item.active{background:#eff6ff;color:var(--primary)}.sidebar-footer{padding:20px 16px;border-top:1px solid var(--border)}.connection-badge{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#f8fafc;border-radius:var(--radius-sm);font-size:.8rem;font-weight:500;color:var(--text-muted);margin-bottom:12px;border:1px solid var(--border)}.conn-dot{width:8px;height:8px;border-radius:50%;background:var(--danger)}.conn-dot.online{background:var(--success)}.btn-logout{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-muted);font-weight:500;cursor:pointer;transition:all .2s}.btn-logout:hover{background:#fef2f2;color:var(--danger);border-color:#fca5a5}.btn-logout svg{width:18px;height:18px}.main-content{flex:1;margin-left:var(--sidebar-width);padding:32px 40px;max-width:1200px}.page{display:none;animation:fadeIn .4s ease}.page.active{display:block}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.page-header{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:32px}h1{font-size:1.8rem;font-weight:700;color:var(--text-main);margin-bottom:6px}.subtitle{color:var(--text-muted);font-size:.95rem}.select-glass,.input-glass{background:#fff;border:1px solid var(--border);color:var(--text-main);padding:10px 16px;border-radius:var(--radius-sm);font-family:inherit;font-size:.9rem;outline:none;cursor:pointer;box-shadow:var(--shadow-sm)}.select-glass:hover,.input-glass:hover{border-color:#cbd5e1}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px;box-shadow:var(--shadow-md)}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.card-header h3{font-size:1.1rem;font-weight:600}.badge{background:#f1f5f9;color:var(--text-muted);padding:4px 10px;border-radius:20px;font-size:.75rem;font-weight:600;border:1px solid var(--border)}.badge-live{background:#ecfdf5;color:var(--success);border-color:#a7f3d0}.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px;margin-bottom:24px}.stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;display:flex;align-items:center;gap:16px;box-shadow:var(--shadow-md);transition:transform .2s}.stat-card:hover{transform:translateY(-2px)}.stat-icon{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.temp-icon{background:#fee2e2;color:var(--danger)}.humidity-icon{background:#e0f2fe;color:var(--info)}.ac-icon{background:#dbeafe;color:var(--primary)}.rooms-icon{background:#f3f4f6;color:var(--text-muted)}.stat-info{display:flex;flex-direction:column}.stat-value{font-size:1.5rem;font-weight:700;color:var(--text-main);line-height:1.2}.stat-label{font-size:.8rem;color:var(--text-muted);font-weight:500}.dash-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.wide-card{grid-column:1 / -1}.gauge-wrapper{position:relative;display:flex;justify-content:center;margin:20px 0}.gauge-center{position:absolute;bottom:10px;text-align:center}.gauge-temp{font-size:3rem;font-weight:800;color:var(--text-main);line-height:1}.gauge-unit{font-size:1rem;color:var(--text-muted);font-weight:600}.gauge-labels{display:flex;justify-content:space-between;color:var(--text-muted);font-size:.8rem;font-weight:500;margin-top:-10px}.gauge-status{font-weight:700}.ac-power-indicator{display:flex;align-items:center;gap:8px;font-size:.85rem;font-weight:600;color:var(--text-muted);background:#f8fafc;padding:6px 12px;border-radius:20px;border:1px solid var(--border)}.power-dot{width:8px;height:8px;border-radius:50%;background:var(--danger)}.ac-power-indicator.on .power-dot{background:var(--success)}.ac-power-indicator.on{color:var(--success);border-color:#a7f3d0;background:#ecfdf5}.control-desc{color:var(--text-muted);font-size:.9rem;margin-bottom:24px;line-height:1.5}.toggle-wrapper{display:flex;align-items:center;justify-content:center;gap:16px;margin:30px 0}.toggle-label{font-size:1rem;font-weight:600;color:var(--text-muted)}.toggle-switch{position:relative;width:70px;height:36px}.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:#cbd5e1;transition:.4s;border-radius:36px}.toggle-slider:before{position:absolute;content:"";height:28px;width:28px;left:4px;bottom:4px;background-color:#fff;transition:.4s;border-radius:50%;box-shadow:0 2px 4px #0003}input:checked+.toggle-slider{background-color:var(--success)}input:checked+.toggle-slider:before{transform:translate(34px)}input:disabled+.toggle-slider{opacity:.5;cursor:not-allowed}.control-feedback{text-align:center;font-size:.85rem;font-weight:500;opacity:0;transition:opacity .3s;height:20px}.chart-wrap{position:relative;height:300px;width:100%}.chart-wrap-lg{height:400px}.history-controls{display:flex;flex-wrap:wrap;gap:20px;margin-bottom:24px;background:var(--bg-card);padding:20px;border-radius:var(--radius-lg);border:1px solid var(--border);box-shadow:var(--shadow-sm)}.filter-group{display:flex;flex-direction:column;gap:8px}.filter-group label{font-size:.8rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px}.filter-btns{display:flex;background:#f1f5f9;padding:4px;border-radius:var(--radius-sm);border:1px solid var(--border)}.filter-btn{background:transparent;border:none;color:var(--text-muted);padding:6px 12px;border-radius:6px;font-size:.85rem;font-weight:500;cursor:pointer;transition:all .2s}.filter-btn:hover{color:var(--text-main)}.filter-btn.active{background:#fff;color:var(--text-main);box-shadow:var(--shadow-sm)}.network-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:24px;margin-bottom:24px}.device-card{text-align:center;padding:32px 24px}.device-icon{font-size:3rem;margin-bottom:16px}.device-card h3{font-size:1.2rem;color:var(--text-main);margin-bottom:4px}.device-role{color:var(--text-muted);font-size:.85rem;margin-bottom:20px}.device-details{display:flex;flex-direction:column;gap:8px;background:#f8fafc;padding:16px;border-radius:var(--radius-md);margin-bottom:20px;font-family:monospace;font-size:.8rem;color:var(--text-muted);border:1px solid var(--border)}.device-status{display:flex;align-items:center;justify-content:center;gap:8px;font-weight:600;font-size:.9rem}.status-indicator{width:10px;height:10px;border-radius:50%;background:#cbd5e1}.status-indicator.online{background:var(--success);box-shadow:0 0 8px #10b98166}.status-indicator.offline{background:var(--danger)}.topology-card pre{background:#1e293b;color:#f8fafc;padding:24px;border-radius:var(--radius-md);overflow-x:auto;font-size:.9rem;line-height:1.5}.mobile-nav-toggle{display:none;background:none;border:none;color:var(--text-main);cursor:pointer;padding:8px}@media (max-width: 1024px){.dash-grid{grid-template-columns:1fr}}@media (max-width: 768px){.sidebar{transform:translate(-100%)}.sidebar.show{transform:translate(0);box-shadow:4px 0 24px #0000001a}.main-content{margin-left:0;padding:20px;width:100%}.mobile-nav-toggle{display:block;margin-right:16px}.page-header{flex-direction:column;align-items:flex-start;gap:16px}.header-actions,.header-actions select{width:100%}.history-controls{flex-direction:column}.filter-btns{width:100%;justify-content:space-between}.filter-btn{flex:1;text-align:center;padding:8px 4px;font-size:.75rem}}.login-wrapper{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-card{width:100%;max-width:400px;padding:40px;text-align:center}.login-subtitle{color:var(--text-muted);margin-bottom:30px;font-size:.95rem}.input-group{text-align:left;margin-bottom:20px}.input-group label{display:block;font-size:.85rem;font-weight:600;margin-bottom:8px;color:var(--text-muted)}.input-group input{width:100%;padding:12px 16px;border-radius:var(--radius-md);border:1px solid var(--border);background:#f8fafc;color:var(--text-main);font-size:1rem;outline:none;transition:border-color .2s}.input-group input:focus{border-color:var(--primary);background:#fff}.btn-login{width:100%;padding:14px;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-md);font-size:1rem;font-weight:600;cursor:pointer;transition:background .2s;margin-top:10px}.btn-login:hover{background:var(--primary-hover)}#login-error{color:var(--danger);font-size:.85rem;margin-top:16px;opacity:0;transition:opacity .3s}
