.layout{display:flex;min-height:100vh;background:var(--bg-darker);flex-direction:column}.mobile-header{position:fixed;top:0;left:0;right:0;height:calc(56px + env(safe-area-inset-top,0px));padding-top:env(safe-area-inset-top,0px);background:var(--bg-dark);border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between;padding-left:1rem;padding-right:1rem;z-index:90;-webkit-app-region:drag}.mobile-menu-btn{background:none;border:none;color:var(--text-primary);padding:.5rem;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:8px;-webkit-app-region:no-drag}.mobile-menu-btn:active{background:var(--card-bg)}.mobile-header-title{font-size:1.1rem;font-weight:700;color:var(--primary-color)}.mobile-header-status{padding:.5rem}.mobile-header-status .status-dot{width:10px;height:10px;border-radius:50%;background:var(--success);display:block;animation:pulse 2s infinite}.sidebar-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;z-index:99;animation:fadeIn .2s ease}.sidebar{background:var(--bg-dark);border-right:1px solid var(--border-color);display:flex;flex-direction:column;transition:all .3s ease;position:sticky;top:0;height:100vh;width:260px;z-index:100}.sidebar.mobile{position:fixed;top:0;left:0;bottom:0;width:280px;transform:translate(-100%);box-shadow:none}.sidebar.mobile.open{transform:translate(0);box-shadow:4px 0 24px #0006}.sidebar.mobile.closed{transform:translate(-100%)}.sidebar:not(.mobile).open{width:260px}.sidebar:not(.mobile).closed{width:80px}.sidebar-header{padding:1.5rem;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border-color)}.logo{display:flex;align-items:center;gap:.75rem}.logo-icon{font-size:1.75rem}.logo-text{font-size:1.25rem;font-weight:700;color:var(--primary-color);white-space:nowrap}.menu-toggle{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:.5rem;display:flex;align-items:center;justify-content:center;border-radius:6px;transition:all .2s}.menu-toggle:hover{background:var(--card-bg);color:var(--text-primary)}.nav-menu{flex:1;padding:1rem;display:flex;flex-direction:column;gap:.5rem;overflow-y:auto;-webkit-overflow-scrolling:touch}.nav-item{display:flex;align-items:center;gap:.75rem;padding:.875rem 1rem;border-radius:8px;color:var(--text-secondary);text-decoration:none;transition:all .2s;white-space:nowrap;min-height:44px}.nav-item:hover{background:var(--card-bg);color:var(--text-primary)}.nav-item.active{background:var(--primary-color);color:#fff}.sidebar:not(.mobile).closed .nav-item{justify-content:center}.sidebar:not(.mobile).closed .nav-item span{display:none}.sidebar-footer{padding:1.5rem;border-top:1px solid var(--border-color);display:flex;flex-direction:column;gap:1rem}.user-info{padding-bottom:.5rem}.user-details{display:flex;flex-direction:column;gap:.25rem}.user-email{font-size:.875rem;color:var(--text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-role{font-size:.75rem;color:var(--primary-color);text-transform:uppercase;letter-spacing:.5px}.logout-button{display:flex;align-items:center;gap:.75rem;width:100%;padding:.75rem 1rem;background:#ef44441a;border:1px solid rgba(239,68,68,.3);border-radius:8px;color:var(--error);cursor:pointer;transition:all .2s;font-size:.875rem;font-weight:500;min-height:44px}.logout-button:hover{background:#ef444433;border-color:var(--error)}.sidebar:not(.mobile).closed .logout-button{justify-content:center;padding:.75rem}.sidebar:not(.mobile).closed .logout-button span{display:none}.status-indicator{display:flex;align-items:center;gap:.75rem}.status-dot{width:8px;height:8px;border-radius:50%;background:var(--success);animation:pulse 2s infinite}.status-text{font-size:.875rem;color:var(--text-secondary);white-space:nowrap}.sidebar:not(.mobile).closed .status-text{display:none}.sidebar:not(.mobile).closed .status-indicator{display:none}.main-content.mobile{padding-top:calc(56px + env(safe-area-inset-top,0px))}@media (min-width: 768px){.layout{flex-direction:row}}.login-container{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--bg-darker) 0%,var(--bg-dark) 100%);padding:2rem}.login-card{background:var(--card-bg);border:1px solid var(--border-color);border-radius:16px;padding:3rem;max-width:420px;width:100%;box-shadow:0 20px 60px #0000004d}.login-header{text-align:center;margin-bottom:2rem}.logo-circle{width:80px;height:80px;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 1.5rem;box-shadow:0 8px 16px #10b9814d}.logo-icon{font-size:2.5rem}.login-header h1{font-size:1.75rem;font-weight:700;color:var(--text-primary);margin-bottom:.5rem}.login-header p{color:var(--text-secondary);font-size:.95rem}.login-form,.form-group{margin-bottom:1.5rem}.form-group label{display:block;color:var(--text-primary);font-size:.875rem;font-weight:500;margin-bottom:.5rem}.form-group input{width:100%;padding:.875rem 1rem;background:var(--bg-dark);border:1px solid var(--border-color);border-radius:8px;color:var(--text-primary);font-size:.95rem;transition:all .2s}.form-group input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #10b9811a}.form-group input:disabled{opacity:.5;cursor:not-allowed}.form-group input::placeholder{color:var(--text-secondary)}.error-message{background:#ef44441a;border:1px solid var(--error);border-radius:8px;padding:.875rem 1rem;color:var(--error);margin-bottom:1.5rem;font-size:.875rem}.login-button{width:100%;padding:1rem;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border:none;border-radius:8px;color:#fff;font-size:1rem;font-weight:600;cursor:pointer;transition:all .2s;box-shadow:0 4px 12px #10b9814d}.login-button:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 16px #10b98166}.login-button:active:not(:disabled){transform:translateY(0)}.login-button:disabled{opacity:.6;cursor:not-allowed;transform:none}.login-footer{text-align:center;padding-top:1.5rem;border-top:1px solid var(--border-color)}.login-footer p{color:var(--text-secondary);font-size:.875rem}@media (max-width: 480px){.login-card{padding:2rem}.login-header h1{font-size:1.5rem}.logo-circle{width:64px;height:64px}.logo-icon{font-size:2rem}}.ov-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:1.5rem}.ov-title{font-size:1.75rem;font-weight:700;letter-spacing:-.02em}.ov-subtitle{color:var(--text-secondary);font-size:.9rem;margin-top:.2rem}.ov-header-actions{display:flex;align-items:center;gap:.75rem}.ov-last-update{font-size:.78rem;color:var(--text-secondary)}.ov-refresh-btn{background:#94a3b81a;border:1px solid rgba(148,163,184,.2);border-radius:.5rem;padding:.4rem;cursor:pointer;color:#94a3b8;display:flex;align-items:center;transition:background .15s}.ov-refresh-btn:hover{background:#94a3b833}.ov-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;margin-bottom:1.5rem}.ov-kpi{background:var(--card-bg);border:1px solid var(--border-color);border-radius:.75rem;padding:1rem 1.25rem;display:flex;align-items:center;gap:.85rem;transition:border-color .15s}.ov-kpi:hover{border-color:#94a3b84d}.ov-kpi.has-alert{border-color:#ef444466;background:#ef444405}.ov-kpi-icon{width:42px;height:42px;border-radius:.65rem;display:flex;align-items:center;justify-content:center;flex-shrink:0}.ov-kpi-icon.green{background:#10b9811f;color:#10b981}.ov-kpi-icon.blue{background:#3b82f61f;color:#3b82f6}.ov-kpi-icon.purple{background:#a855f71f;color:#a855f7}.ov-kpi-icon.cyan{background:#06b6d41f;color:#06b6d4}.ov-kpi-icon.amber{background:#f59e0b1f;color:#f59e0b}.ov-kpi-icon.red{background:#ef44441f;color:#ef4444}.ov-kpi-value{font-size:1.5rem;font-weight:700;line-height:1.2}.ov-kpi-secondary{font-size:.85rem;color:var(--text-secondary);font-weight:400;margin-left:.15rem}.ov-kpi-label{font-size:.8rem;color:var(--text-secondary)}.ov-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;margin-bottom:1.5rem}.ov-card{background:var(--card-bg);border:1px solid var(--border-color);border-radius:.75rem;padding:1.25rem}.ov-card-title{font-size:1rem;font-weight:600;margin-bottom:1rem;display:flex;align-items:center;gap:.5rem}.ov-card-subtitle{font-size:.78rem;color:var(--text-secondary);font-weight:400;margin-left:auto}.ov-health-banner{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-radius:.5rem;margin-bottom:1rem}.ov-health-banner.ok{background:#10b98114;border:1px solid rgba(16,185,129,.2)}.ov-health-banner.error{background:#ef444414;border:1px solid rgba(239,68,68,.2)}.ov-health-status{font-weight:600;font-size:.9rem}.ov-health-detail{font-size:.78rem;color:var(--text-secondary)}.ov-services{display:flex;flex-direction:column;gap:.5rem}.ov-service-row{display:flex;justify-content:space-between;align-items:center;padding:.35rem 0;font-size:.85rem;border-bottom:1px solid rgba(51,65,85,.2)}.ov-service-row:last-child{border-bottom:none}.ov-service-status{font-size:.8rem;font-weight:500}.ov-service-status.up{color:#10b981}.ov-service-status.down{color:#ef4444}.ov-badge{background:#ef444426;color:#ef4444;font-size:.7rem;font-weight:600;padding:.1rem .45rem;border-radius:9999px;margin-left:.5rem}.ov-empty-alerts{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem 1rem;color:var(--text-secondary);gap:.5rem;font-size:.85rem}.ov-alerts-list{display:flex;flex-direction:column;gap:.5rem;max-height:320px;overflow-y:auto}.ov-alert-item{display:flex;align-items:center;gap:.6rem;padding:.5rem .75rem;border-radius:.5rem;font-size:.82rem}.ov-alert-item.critical{background:#ef444414;border-left:3px solid #ef4444}.ov-alert-item.warning{background:#f59e0b14;border-left:3px solid #f59e0b}.ov-alert-icon{flex-shrink:0;opacity:.7}.ov-alert-body{flex:1;min-width:0}.ov-alert-mac{font-family:monospace;font-size:.75rem;color:var(--text-secondary);margin-right:.4rem}.ov-alert-time{font-size:.72rem;color:var(--text-secondary);white-space:nowrap}.ov-alerts-more{text-align:center;font-size:.78rem;color:var(--text-secondary);padding:.5rem}.ov-conn-content{display:flex;align-items:center;gap:2rem;flex-wrap:wrap;justify-content:center}.ov-conn-details{display:flex;flex-direction:column;gap:.4rem}.ov-conn-row{display:flex;align-items:center;gap:.4rem;font-size:.85rem}.ov-conn-row.sub{padding-left:1.2rem;font-size:.78rem;color:var(--text-secondary)}.ov-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.ov-dot.green{background:#10b981}.ov-dot.gray{background:#64748b}.ov-dot-inline{width:8px;height:8px;border-radius:50%;display:inline-block}.ov-dot-inline.green{background:#22c55e;box-shadow:0 0 4px #22c55e80}.ov-ring{position:relative;width:100px;height:100px;flex-shrink:0}.ov-ring-center{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center}.ov-ring-value{font-size:1.3rem;font-weight:700}.ov-ring-label{font-size:.68rem;color:var(--text-secondary)}.ov-sensor-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:1rem}.ov-sensor-card{text-align:center;padding:.75rem;border-radius:.5rem;background:#33415526}.ov-sensor-icon{margin-bottom:.35rem}.ov-sensor-icon.red{color:#ef4444}.ov-sensor-icon.blue{color:#3b82f6}.ov-sensor-icon.green{color:#10b981}.ov-sensor-icon.amber{color:#f59e0b}.ov-sensor-value{font-size:1.2rem;font-weight:700;margin-bottom:.15rem}.ov-sensor-range{font-size:.7rem;color:var(--text-secondary);margin-bottom:.15rem}.ov-sensor-label{font-size:.75rem;color:var(--text-secondary)}.ov-empty-sensors{text-align:center;padding:2rem;color:var(--text-secondary);font-size:.85rem}.ov-bar-chart{display:flex;flex-direction:column;gap:.65rem}.ov-bar-row{display:flex;align-items:center;gap:.75rem}.ov-bar-label{min-width:110px;font-size:.78rem;color:var(--text-secondary);text-align:right}.ov-bar-track{flex:1;height:20px;background:#33415566;border-radius:4px;overflow:hidden}.ov-bar-fill{height:100%;border-radius:4px;transition:width .5s ease;min-width:2px}.ov-bar-fill.green{background:linear-gradient(90deg,#059669,#10b981)}.ov-bar-fill.amber{background:linear-gradient(90deg,#d97706,#f59e0b)}.ov-bar-fill.red{background:linear-gradient(90deg,#dc2626,#ef4444)}.ov-bar-value{min-width:30px;font-size:.82rem;font-weight:500;text-align:right}.ov-uptime-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.ov-uptime-item{text-align:center;padding:1rem;background:#33415526;border-radius:.5rem}.ov-uptime-label{font-size:.78rem;color:var(--text-secondary);margin-bottom:.5rem}.ov-uptime-value{font-size:1.5rem;font-weight:700}.ov-table-wrap{overflow-x:auto}.ov-table{width:100%;border-collapse:collapse;font-size:.82rem}.ov-table thead th{text-align:left;padding:.5rem .65rem;color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border-color);white-space:nowrap}.ov-table tbody td{padding:.5rem .65rem;border-bottom:1px solid rgba(51,65,85,.2)}.ov-table tbody tr:hover{background:#33415526}.ov-table tbody tr:last-child td{border-bottom:none}.ov-table .mono{font-family:monospace;font-size:.75rem}.ov-mini-gauge{display:inline-flex;align-items:center;gap:.3rem}.ov-mini-gauge-track{width:50px;height:5px;background:#33415580;border-radius:3px;overflow:hidden}.ov-mini-gauge-fill{height:100%;border-radius:3px;transition:width .3s}.ov-rssi-val{font-size:.75rem;color:var(--text-secondary)}.ov-model{display:inline-block;padding:.1rem .4rem;border-radius:4px;font-size:.72rem;font-weight:500;background:#3b82f61f;color:#3b82f6}.ov-model.box{background:#10b9811f;color:#10b981}.ov-model.mini{background:#a855f71f;color:#a855f7}@media (max-width: 900px){.ov-grid-2{grid-template-columns:1fr}.ov-kpi-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}}@media (max-width: 480px){.ov-kpi-grid{grid-template-columns:1fr}.ov-sensor-grid{grid-template-columns:1fr 1fr}.ov-bar-label{min-width:80px;font-size:.72rem}}.tc-container{background:#1e293b80;border:1px solid rgba(148,163,184,.12);border-radius:.75rem;padding:1rem;margin-top:1rem}.tc-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.65rem}.tc-title{display:flex;align-items:center;gap:.4rem;font-size:.9rem;font-weight:600;margin:0;color:#e2e8f0}.tc-time-btns{display:flex;border:1px solid rgba(148,163,184,.15);border-radius:.35rem;overflow:hidden}.tc-tbtn{padding:.2rem .55rem;border:none;border-right:1px solid rgba(148,163,184,.12);background:#1e293b99;color:#94a3b8;font-size:.72rem;cursor:pointer;transition:all .15s}.tc-tbtn:last-child{border-right:none}.tc-tbtn.active{background:#10b98126;color:#10b981;font-weight:600}.tc-tbtn:hover:not(.active){background:#94a3b814}.tc-legend{display:flex;gap:.4rem;margin-bottom:.75rem;flex-wrap:wrap}.tc-legend-btn{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .5rem;border-radius:9999px;font-size:.7rem;border:1px solid rgba(148,163,184,.15);background:none;color:#94a3b8;cursor:pointer;transition:all .15s}.tc-legend-btn.active{background:color-mix(in srgb,var(--sc) 12%,transparent);color:var(--sc);border-color:color-mix(in srgb,var(--sc) 30%,transparent)}.tc-legend-btn:hover:not(.active){border-color:#94a3b84d}.tc-chart-wrap{position:relative}.tc-svg{width:100%;height:auto}.tc-loading,.tc-empty{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:1.5rem;color:#94a3b8;font-size:.82rem}.tc-spinner{width:1rem;height:1rem;border:2px solid rgba(148,163,184,.2);border-top-color:#10b981;border-radius:50%;animation:tc-spin .6s linear infinite}@keyframes tc-spin{to{transform:rotate(360deg)}}.tc-summary{display:flex;gap:1.25rem;margin-top:.5rem;padding-top:.5rem;border-top:1px solid rgba(148,163,184,.08);flex-wrap:wrap}.tc-sum-item{display:flex;flex-direction:column}.tc-sum-label{font-size:.68rem;opacity:.7;text-transform:uppercase;letter-spacing:.04em}.tc-sum-range{font-size:.82rem;font-weight:600}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000bf;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem;animation:fadeIn .2s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-content{background:linear-gradient(135deg,#1e293b,#0f172a);border:1px solid rgba(148,163,184,.1);border-radius:1rem;max-width:900px;width:100%;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 25px 50px -12px #00000080;animation:slideUp .3s ease-out}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1.5rem;border-bottom:1px solid rgba(148,163,184,.1);background:linear-gradient(135deg,#10b9811a,#0596690d)}.modal-title{font-size:1.5rem;font-weight:700;color:#fff;margin:0}.modal-subtitle{font-size:.875rem;color:#94a3b8;margin:.25rem 0 0;font-family:monospace}.modal-close{background:#94a3b81a;border:1px solid rgba(148,163,184,.2);border-radius:.5rem;padding:.5rem;cursor:pointer;color:#94a3b8;transition:all .2s;display:flex;align-items:center;justify-content:center}.modal-close:hover{background:#ef444433;border-color:#ef44444d;color:#ef4444}.modal-body{flex:1;overflow-y:auto;padding:1.5rem}.modal-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem;gap:1rem;color:#94a3b8}.spinner{width:3rem;height:3rem;border:3px solid rgba(16,185,129,.2);border-top-color:#10b981;border-radius:50%;animation:spin .8s linear infinite}.modal-error{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem;gap:1rem;color:#ef4444;text-align:center}.retry-button{background:linear-gradient(135deg,#10b981,#059669);border:none;border-radius:.5rem;padding:.75rem 1.5rem;color:#fff;font-weight:600;cursor:pointer;transition:all .2s}.retry-button:hover{transform:translateY(-2px);box-shadow:0 10px 20px -10px #10b98180}.info-section{margin-bottom:2rem}.info-section:last-child{margin-bottom:0}.section-title{font-size:1.125rem;font-weight:700;color:#fff;margin:0 0 1rem;padding-bottom:.5rem;border-bottom:2px solid rgba(16,185,129,.3)}.info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem}.info-item{display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:#94a3b80d;border:1px solid rgba(148,163,184,.1);border-radius:.5rem;transition:all .2s}.info-item:hover{background:#94a3b814;border-color:#10b9814d}.info-icon{width:1.25rem;height:1.25rem;color:#10b981;flex-shrink:0;margin-top:.125rem}.info-label{font-size:.75rem;color:#94a3b8;margin:0 0 .25rem}.info-value{font-size:.9375rem;font-weight:600;color:#fff;margin:0}.switches-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.switch-card{background:#94a3b80d;border:1px solid rgba(148,163,184,.1);border-radius:.75rem;padding:1rem;transition:all .2s}.switch-card:hover{background:#94a3b814;border-color:#10b9814d;transform:translateY(-2px)}.switch-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem;padding-bottom:.75rem;border-bottom:1px solid rgba(148,163,184,.1)}.switch-name{display:flex;align-items:center;gap:.5rem;font-size:1rem;font-weight:600;color:#fff}.switch-name svg{color:#10b981}.switch-status{padding:.25rem .75rem;border-radius:9999px;font-size:.75rem;font-weight:600;border:none;cursor:pointer;transition:all .2s;position:relative}.switch-status:not(:disabled):hover{transform:scale(1.05);box-shadow:0 4px 12px #0000004d}.switch-status:disabled{cursor:not-allowed;opacity:.7}.switch-status.active{background:#10b98133;color:#10b981;border:1px solid rgba(16,185,129,.4)}.switch-status.active:not(:disabled):hover{background:#10b9814d}.switch-status.inactive{background:#94a3b833;color:#94a3b8;border:1px solid rgba(148,163,184,.3)}.switch-status.inactive:not(:disabled):hover{background:#94a3b84d}.switch-status.toggling{animation:pulse 1s ease-in-out infinite}.toggling-text{display:inline-flex;align-items:center;gap:.25rem}.switch-details{display:flex;flex-direction:column;gap:.75rem}.detail-row{display:flex;justify-content:space-between;align-items:center;font-size:.875rem}.detail-label{color:#94a3b8;font-weight:500}.detail-value{color:#fff;font-weight:600}.franja-info{background:#10b9810d;border:1px solid rgba(16,185,129,.2);border-radius:.5rem;padding:.75rem}.franja-item{margin-top:.5rem}.franja-item:first-child{margin-top:0}.franja-name{font-size:.875rem;font-weight:600;color:#10b981;margin:0 0 .25rem}.franja-time,.franja-type,.franja-schedule,.franja-humidity{font-size:.8125rem;color:#cbd5e1;margin:.125rem 0}.modal-body::-webkit-scrollbar{width:8px}.modal-body::-webkit-scrollbar-track{background:#94a3b80d;border-radius:4px}.modal-body::-webkit-scrollbar-thumb{background:#10b9814d;border-radius:4px}.modal-body::-webkit-scrollbar-thumb:hover{background:#10b98180}.add-device-tabs{display:flex;gap:.5rem;margin-bottom:1.5rem;border-bottom:1px solid #334155}.add-device-tab{padding:.75rem 1.5rem;background:transparent;border:none;color:#94a3b8;border-bottom:2px solid transparent;cursor:pointer;font-size:.95rem;font-weight:500;transition:all .2s;min-height:44px}.add-device-tab.active{color:#10b981;border-bottom-color:#10b981}.add-device-form{display:flex;flex-direction:column;gap:1.25rem}.add-device-field{display:flex;flex-direction:column}.add-device-label{display:block;color:#e2e8f0;font-size:.875rem;font-weight:500;margin-bottom:.5rem}.add-device-input{width:100%;padding:.75rem;background:#1e293b;border:1px solid #334155;border-radius:.5rem;color:#e2e8f0;font-size:16px;outline:none;min-height:44px;box-sizing:border-box}.add-device-input:focus{border-color:#10b981}.add-device-hint{font-size:.75rem;color:#94a3b8;margin-top:.25rem}.add-device-msg{padding:.75rem;border-radius:.5rem;font-size:.875rem}.add-device-msg.error{background:#7f1d1d;border:1px solid #991b1b;color:#fca5a5}.add-device-msg.success{background:#064e3b;border:1px solid #059669;color:#6ee7b7}.add-device-actions{display:flex;gap:.75rem;margin-top:.5rem}.add-device-cancel{flex:1;padding:.75rem;background:#1e293b;border:1px solid #334155;border-radius:.5rem;color:#e2e8f0;font-size:.95rem;font-weight:500;cursor:pointer;min-height:44px}.add-device-cancel:disabled{opacity:.5;cursor:not-allowed}.add-device-submit{flex:1;padding:.75rem;border:none;border-radius:.5rem;color:#fff;font-size:.95rem;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.5rem;min-height:44px}.add-device-submit:disabled{cursor:not-allowed}@media (max-width: 768px){.modal-overlay{padding:0;align-items:flex-end}.modal-content{max-height:95vh;max-height:95dvh;border-radius:1rem 1rem 0 0;max-width:100%;animation:slideUpMobile .3s ease-out}@keyframes slideUpMobile{0%{transform:translateY(100%);opacity:.8}to{transform:translateY(0);opacity:1}}.modal-header{padding:1rem;position:sticky;top:0;z-index:1;background:linear-gradient(135deg,#10b98126,#0596691a);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.modal-title{font-size:1.2rem}.modal-body{padding:1rem}.info-grid,.switches-grid{grid-template-columns:1fr}.switch-header{flex-wrap:wrap;gap:.5rem}.switch-status{min-height:36px;padding:.375rem 1rem}.info-item{padding:.75rem}.retry-button{min-height:44px;width:100%}.add-device-tabs{gap:0}.add-device-tab{flex:1;padding:.75rem .5rem;font-size:.85rem;text-align:center}.add-device-actions{flex-direction:column}.add-device-cancel,.add-device-submit{width:100%}}.pagination-container{display:flex;align-items:center;justify-content:space-between;padding:1rem 0;margin-top:1.5rem;border-top:1px solid rgba(148,163,184,.1);flex-wrap:wrap;gap:.75rem}.pagination-info{font-size:.85rem;color:var(--text-secondary, #94a3b8)}.pagination-highlight{font-weight:600;color:var(--text-primary, #e2e8f0)}.pagination-controls{display:flex;align-items:center;gap:.25rem}.pagination-btn{display:flex;align-items:center;justify-content:center;min-width:2rem;height:2rem;padding:0 .5rem;border:1px solid rgba(148,163,184,.15);border-radius:.375rem;background:#1e293b80;color:var(--text-secondary, #94a3b8);font-size:.8rem;font-weight:500;cursor:pointer;transition:all .15s ease}.pagination-btn:hover:not(:disabled){background:#3b82f626;border-color:#3b82f64d;color:#60a5fa}.pagination-btn:disabled{opacity:.35;cursor:not-allowed}.pagination-btn.pagination-page.active{background:#3b82f633;border-color:#3b82f666;color:#60a5fa;font-weight:700}@media (max-width: 640px){.pagination-container{flex-direction:column;align-items:center}}.admin-page-container{min-height:100vh;background:linear-gradient(135deg,#0f172a,#1e293b,#0f172a);padding:2rem}.admin-page-content{max-width:1600px;margin:0 auto}.page-header{margin-bottom:2rem;display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.page-title{display:flex;align-items:center;gap:1rem;margin-bottom:.5rem}.page-title-icon{width:3rem;height:3rem;background:linear-gradient(135deg,#10b981,#059669);border-radius:1rem;display:flex;align-items:center;justify-content:center;box-shadow:0 10px 30px -10px #10b98180}.page-title h1{font-size:2.5rem;font-weight:700;color:#fff;margin:0}.page-subtitle{font-size:1.125rem;color:#94a3b8;margin-left:4rem}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1.5rem;margin-bottom:2rem}.stat-card{position:relative;overflow:hidden;background:#1e293b99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.5rem;padding:1.5rem;border:1px solid rgba(148,163,184,.1);transition:all .3s ease}.stat-card:hover{transform:translateY(-5px);border-color:#10b9814d;box-shadow:0 20px 40px -10px #10b98133}.stat-card:before{content:"";position:absolute;top:0;right:0;width:8rem;height:8rem;background:radial-gradient(circle,rgba(16,185,129,.1) 0%,transparent 70%);border-radius:50%;transform:translate(40%,-40%)}.stat-card-content{position:relative;z-index:1}.stat-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem}.stat-label{font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#64748b}.stat-icon{opacity:.7;transition:opacity .3s ease}.stat-card:hover .stat-icon{opacity:1}.stat-value{font-size:3rem;font-weight:700;color:#fff;line-height:1;margin-bottom:.5rem}.stat-description{font-size:.875rem;color:#64748b}.filters-container{background:#1e293b99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.5rem;padding:1.5rem;border:1px solid rgba(148,163,184,.1);margin-bottom:2rem}.filters-content{display:flex;flex-direction:column;gap:1rem}@media (min-width: 1024px){.filters-content{flex-direction:row}}.search-wrapper{flex:1;position:relative}.search-icon{position:absolute;left:1rem;top:50%;transform:translateY(-50%);color:#64748b;transition:color .3s ease;pointer-events:none}.search-input{width:100%;padding:.875rem 1rem .875rem 3rem;background:#0f172ab3;border:1px solid rgba(148,163,184,.2);border-radius:1rem;color:#fff;font-size:.875rem;transition:all .3s ease}.search-input:focus{outline:none;border-color:#10b981;box-shadow:0 0 0 3px #10b9811a}.search-input:focus+.search-icon{color:#10b981}.filter-buttons{display:flex;gap:.75rem;flex-wrap:wrap}.filter-btn{display:flex;align-items:center;gap:.5rem;padding:.875rem 1.5rem;border-radius:1rem;font-weight:600;font-size:.875rem;transition:all .3s ease;border:none;cursor:pointer}.filter-btn:not(.active){background:#33415580;color:#94a3b8}.filter-btn:not(.active):hover{background:#334155cc;transform:translateY(-2px)}.filter-btn.active{background:linear-gradient(135deg,#10b981,#059669);color:#fff;box-shadow:0 10px 20px -5px #10b98166}.filter-info{display:flex;align-items:center;gap:.5rem;margin-top:1rem;font-size:.875rem;color:#94a3b8}.filter-info-highlight{font-weight:700;color:#10b981}.items-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(350px,1fr));gap:1.5rem;margin-bottom:2rem}.item-card{position:relative;overflow:hidden;background:#1e293b99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.25rem;padding:1.25rem;border:1px solid rgba(148,163,184,.1);transition:all .3s ease}.item-card:hover{transform:translateY(-5px) scale(1.02);border-color:#10b9814d;box-shadow:0 20px 40px -10px #10b9814d}.item-card:before{content:"";position:absolute;top:0;right:0;width:10rem;height:10rem;background:radial-gradient(circle,rgba(16,185,129,.1) 0%,transparent 70%);border-radius:50%;transform:translate(40%,-40%);transition:transform .5s ease}.item-card:hover:before{transform:translate(30%,-30%) scale(1.5)}.item-card-content{position:relative;z-index:1}.item-header{display:flex;align-items:start;justify-content:space-between;margin-bottom:1rem;gap:1rem}.item-title{font-size:1.375rem;font-weight:700;color:#fff;margin-bottom:.375rem;transition:color .3s ease}.item-card:hover .item-title{color:#10b981}.item-subtitle{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#94a3b8}.status-badge{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:1rem;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.status-badge.active{background:#10b98133;color:#10b981;border:1px solid rgba(16,185,129,.3)}.status-badge.inactive{background:#64748b33;color:#64748b;border:1px solid rgba(100,116,139,.3)}.status-dot{width:.5rem;height:.5rem;background:currentColor;border-radius:50%;animation:pulse 2s ease-in-out infinite}.item-info-grid{display:flex;flex-direction:column;gap:.625rem;margin-bottom:1rem}.info-row{display:flex;align-items:center;justify-content:space-between;padding:.75rem;background:#0f172a80;border-radius:.75rem;transition:background .3s ease}.info-row:hover{background:#0f172acc}.info-label{display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:500;color:#94a3b8}.info-value{font-size:.875rem;font-weight:600;color:#fff}.info-value.mono{font-family:Courier New,monospace;font-size:.75rem;background:#0f172acc;padding:.25rem .75rem;border-radius:.5rem}.tags-section{border-top:1px solid rgba(148,163,184,.1);padding-top:1rem;margin-top:1rem}.tags-label{font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#64748b;margin-bottom:.75rem}.tags-container{display:flex;flex-wrap:wrap;gap:.5rem}.tag{display:inline-flex;align-items:center;gap:.25rem;padding:.375rem .75rem;border-radius:.625rem;background:linear-gradient(135deg,#10b9811a,#0596691a);color:#10b981;border:1px solid rgba(16,185,129,.2);font-size:.6875rem;font-weight:600;transition:all .3s ease}.tag:hover{transform:scale(1.1);background:linear-gradient(135deg,#10b98133,#05966933)}.empty-state{text-align:center;padding:5rem 2rem;background:#1e293b66;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.5rem;border:1px dashed rgba(148,163,184,.3)}.empty-state-icon{display:inline-block;padding:1.5rem;background:#33415580;border-radius:1.5rem;margin-bottom:1.5rem}.empty-state-title{font-size:1.5rem;font-weight:600;color:#94a3b8;margin-bottom:.5rem}.empty-state-description{font-size:.875rem;color:#64748b}.loading-container{display:flex;align-items:center;justify-content:center;min-height:50vh}.loading-content{text-align:center}.loading-spinner{width:4rem;height:4rem;border:4px solid rgba(16,185,129,.2);border-top-color:#10b981;border-radius:50%;animation:spin 1s linear infinite;margin:0 auto 1rem}.loading-text{font-size:1rem;color:#94a3b8}.add-device-btn{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.5rem;background:linear-gradient(135deg,#10b981,#059669);border:none;border-radius:.5rem;color:#fff;font-size:.95rem;font-weight:600;cursor:pointer;box-shadow:0 4px 6px -1px #0000004d;transition:all .2s;white-space:nowrap;min-height:44px}.add-device-btn:hover{transform:translateY(-2px);box-shadow:0 6px 12px -2px #10b98166}.add-device-btn:active{transform:translateY(0)}.device-stats-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.device-items-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}@media (max-width: 768px){.admin-page-container{padding:.75rem}.page-header{margin-bottom:1.25rem;flex-direction:column;gap:.75rem;align-items:stretch}.add-device-btn{width:100%;justify-content:center;padding:.625rem 1rem;font-size:.9rem}.device-stats-grid{grid-template-columns:1fr 1fr!important}.device-items-grid{grid-template-columns:1fr!important}.page-title{gap:.75rem}.page-title h1{font-size:1.5rem}.page-title-icon{width:2.25rem;height:2.25rem;border-radius:.75rem}.page-subtitle{margin-left:3rem;font-size:.875rem}.stats-grid{grid-template-columns:1fr 1fr!important;gap:.75rem;margin-bottom:1.25rem}.stat-card{border-radius:1rem;padding:1rem}.stat-value{font-size:2rem}.stat-label{font-size:.75rem}.filters-container{border-radius:1rem;padding:1rem;margin-bottom:1.25rem}.search-input{font-size:16px}.filter-buttons{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;flex-wrap:nowrap;gap:.5rem;padding-bottom:.25rem}.filter-btn{flex:0 0 auto;padding:.75rem 1rem;border-radius:.75rem;font-size:.8rem;min-height:44px}.items-grid{grid-template-columns:1fr!important;gap:.75rem;margin-bottom:1.25rem}.item-card{border-radius:1rem;padding:1rem}.item-card:hover{transform:none}.item-title{font-size:1.1rem!important}.item-header{flex-direction:column;gap:.5rem;align-items:flex-start!important}.status-badge{align-self:flex-start;font-size:.7rem;padding:.375rem .75rem}.empty-state{padding:3rem 1.5rem;border-radius:1rem}.empty-state-title{font-size:1.1rem}.loading-container{min-height:40vh}}@media (max-width: 480px){.admin-page-container{padding:.5rem}.stats-grid{grid-template-columns:1fr!important}.stat-value{font-size:1.75rem}.page-title h1{font-size:1.25rem}.page-subtitle{margin-left:0;font-size:.8rem}}.ch-page{padding:0}.ch-header{margin-bottom:1.25rem}.ch-title{font-size:1.75rem;font-weight:700;letter-spacing:-.02em}.ch-subtitle{color:var(--text-secondary);font-size:.9rem;margin-top:.15rem}.ch-tabs{display:flex;gap:.25rem;background:#33415533;border-radius:.5rem;padding:.2rem;margin-bottom:1.25rem;width:fit-content}.ch-tab{display:flex;align-items:center;gap:.4rem;padding:.5rem 1rem;border:none;background:none;color:var(--text-secondary);cursor:pointer;border-radius:.4rem;font-size:.85rem;font-weight:500;transition:all .15s}.ch-tab.active{background:var(--card-bg);color:var(--text-primary);box-shadow:0 1px 3px #0003}.ch-tab:hover:not(.active){color:var(--text-primary)}.ch-stats{display:flex;gap:1.5rem;flex-wrap:wrap;margin-bottom:1.25rem;padding:.75rem 1rem;background:var(--card-bg);border:1px solid var(--border-color);border-radius:.5rem}.ch-stat{display:flex;flex-direction:column;align-items:center;min-width:80px}.ch-stat-value{font-size:1.3rem;font-weight:700}.ch-stat-value.green{color:#10b981}.ch-stat-value.purple{color:#a855f7}.ch-stat-value.red{color:#ef4444}.ch-stat-label{font-size:.72rem;color:var(--text-secondary);text-align:center}.ch-filters{display:flex;align-items:center;gap:1rem;margin-bottom:1.25rem;flex-wrap:wrap}.ch-search{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--card-bg);border:1px solid var(--border-color);border-radius:.5rem;flex:1;min-width:200px;max-width:350px;color:var(--text-secondary)}.ch-search input{background:none;border:none;color:inherit;outline:none;font-size:.85rem;width:100%}.ch-filter-btns{display:flex;gap:.35rem}.ch-filter-btn{padding:.4rem .8rem;border:1px solid var(--border-color);border-radius:.4rem;background:none;color:var(--text-secondary);cursor:pointer;font-size:.8rem;transition:all .15s}.ch-filter-btn.active{background:#3b82f626;color:#3b82f6;border-color:#3b82f64d}.ch-filter-count{font-size:.78rem;color:var(--text-secondary);margin-left:auto}.ch-cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:1rem;margin-bottom:1.25rem}.ch-client-card{background:var(--card-bg);border:1px solid var(--border-color);border-radius:.75rem;padding:1.15rem;transition:border-color .15s}.ch-client-card:hover{border-color:#94a3b84d}.ch-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.ch-card-name{font-weight:600;font-size:1.05rem}.ch-status{font-size:.75rem;font-weight:500;padding:.15rem .5rem;border-radius:9999px}.ch-status.online{color:#10b981;background:#10b9811f}.ch-status.offline{color:#64748b;background:#64748b1f}.ch-card-email{display:flex;align-items:center;gap:.35rem;font-size:.8rem;color:var(--text-secondary);margin-bottom:.75rem}.ch-card-details{display:flex;flex-direction:column;gap:.4rem}.ch-detail{display:flex;align-items:center;gap:.35rem;font-size:.82rem}.ch-detail .green{color:#10b981;font-size:.78rem}.ch-trial-badge{display:inline-flex;align-items:center;gap:.2rem;padding:.1rem .35rem;border-radius:9999px;font-size:.68rem;font-weight:600;background:#8b5cf61f;color:#8b5cf6;margin-left:.35rem}.ch-rooms{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.25rem}.ch-room-tag{font-size:.7rem;padding:.1rem .4rem;border-radius:4px;background:#10b98114;color:#10b981}.ch-card-footer{display:flex;align-items:center;gap:.35rem;font-size:.72rem;color:var(--text-secondary);margin-top:.75rem;padding-top:.65rem;border-top:1px solid rgba(51,65,85,.3)}.ch-table-wrap{overflow-x:auto;margin-bottom:1.25rem}.ch-table{width:100%;border-collapse:collapse;font-size:.82rem;background:var(--card-bg);border:1px solid var(--border-color);border-radius:.75rem;overflow:hidden}.ch-table thead th{text-align:left;padding:.65rem .75rem;color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border-color);white-space:nowrap}.ch-table tbody td{padding:.6rem .75rem;border-bottom:1px solid rgba(51,65,85,.2)}.ch-table tbody tr:hover{background:#3341551f}.ch-table tbody tr:last-child td{border-bottom:none}.ch-user-cell{display:flex;flex-direction:column}.ch-user-name{font-weight:500}.ch-user-id{font-size:.72rem;color:var(--text-secondary);font-family:monospace}.ch-dimmed{color:var(--text-secondary)}.ch-device-count{font-weight:500}.ch-device-count .green{color:#10b981;font-size:.78rem}.ch-plan-btn{display:inline-flex;align-items:center;gap:.3rem;padding:.25rem .6rem;border-radius:.4rem;font-size:.78rem;font-weight:600;cursor:pointer}.ch-plan-dropdown{position:absolute;top:100%;left:0;z-index:50;background:var(--card-bg);border:1px solid var(--border-color);border-radius:.5rem;padding:.25rem;min-width:180px;box-shadow:0 8px 24px #0000004d}.ch-plan-option{display:flex;justify-content:space-between;width:100%;padding:.5rem .75rem;border:none;border-radius:.35rem;cursor:pointer;font-size:.82rem;background:transparent}.ch-plan-option:hover{background:#3341554d!important}.ch-plan-limit{font-size:.7rem;opacity:.6}.ch-sub-badge{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .55rem;border-radius:9999px;font-size:.75rem;font-weight:500}.ch-sub-badge.active{background:#10b9811f;color:#10b981}.ch-sub-badge.inactive{background:#ef44441f;color:#ef4444}.ch-sub-badge.trial{background:#8b5cf61f;color:#8b5cf6}.ch-sub-badge.trial.expired{background:#ef44441f;color:#ef4444}.ch-actions{display:flex;gap:.35rem}.ch-action-btn{padding:.3rem .6rem;border:none;border-radius:.35rem;font-size:.75rem;font-weight:500;cursor:pointer;transition:opacity .15s}.ch-action-btn:hover{opacity:.8}.ch-action-btn.danger{background:#ef4444;color:#fff}.ch-action-btn.success{background:#10b981;color:#fff}.ch-action-btn.trial{background:#8b5cf626;color:#8b5cf6;border:1px solid rgba(139,92,246,.3)}.ch-action-btn.muted{background:#64748b26;color:#94a3b8;border:1px solid rgba(100,116,139,.3)}.ch-empty{text-align:center;padding:3rem;color:var(--text-secondary);display:flex;flex-direction:column;align-items:center;gap:.75rem}.ch-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40}.ch-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.ch-modal{background:var(--card-bg);border:1px solid var(--border-color);border-radius:.75rem;padding:1.5rem;max-width:440px;width:90%}.ch-modal-header{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem}.ch-modal-header h3{font-size:1.1rem;font-weight:600}.ch-modal-body{font-size:.9rem;line-height:1.5;margin-bottom:1.5rem}.ch-modal-actions{display:flex;justify-content:flex-end;gap:.75rem}.ch-modal-cancel{padding:.5rem 1rem;border:1px solid var(--border-color);border-radius:.4rem;background:none;color:var(--text-secondary);cursor:pointer}.ch-modal-confirm{padding:.5rem 1rem;border:none;border-radius:.4rem;color:#fff;cursor:pointer;font-weight:600}@media (max-width: 768px){.ch-cards-grid{grid-template-columns:1fr}.ch-stats{gap:1rem}.ch-filters{flex-direction:column;align-items:stretch}.ch-search{max-width:none}}.firmware-page{min-height:100vh;background:linear-gradient(135deg,#0f172a,#1e293b,#0f172a);padding:2rem}.firmware-page .firmware-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:2rem}.firmware-page .firmware-header h1{font-size:2.5rem;font-weight:700;color:#fff;margin:0}.firmware-page .btn-refresh{display:flex;align-items:center;gap:.5rem;padding:.875rem 1.5rem;background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:none;border-radius:1rem;cursor:pointer;font-size:.875rem;font-weight:600;transition:all .3s ease}.firmware-page .btn-refresh:hover{transform:translateY(-2px);box-shadow:0 10px 20px -5px #10b98166}.firmware-page .firmware-controls{background:#1e293b99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.5rem;padding:1.5rem;border:1px solid rgba(148,163,184,.1);margin-bottom:2rem}.firmware-page .firmware-url-input{margin-bottom:1.5rem}.firmware-page .firmware-url-input label{display:block;font-weight:600;font-size:.875rem;text-transform:uppercase;letter-spacing:.05em;color:#64748b;margin-bottom:.75rem}.firmware-page .firmware-url-input input{width:100%;padding:.875rem 1rem;background:#0f172ab3;border:1px solid rgba(148,163,184,.2);border-radius:1rem;color:#fff;font-size:.875rem;transition:all .3s ease}.firmware-page .firmware-url-input input:focus{outline:none;border-color:#10b981;box-shadow:0 0 0 3px #10b9811a}.firmware-page .bulk-actions{display:flex;gap:.75rem;flex-wrap:wrap}.firmware-page .btn-select-all,.firmware-page .btn-bulk-update{padding:.875rem 1.5rem;border:none;border-radius:1rem;font-size:.875rem;font-weight:600;cursor:pointer;transition:all .3s ease}.firmware-page .btn-select-all{background:#33415580;color:#94a3b8}.firmware-page .btn-select-all:hover{background:#334155cc;transform:translateY(-2px)}.firmware-page .btn-bulk-update{background:linear-gradient(135deg,#10b981,#059669);color:#fff}.firmware-page .btn-bulk-update:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 10px 20px -5px #10b98166}.firmware-page .btn-bulk-update:disabled{opacity:.6;cursor:not-allowed}.firmware-page .stats-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1.5rem;margin-bottom:2rem}.firmware-page .firmware-stat-card{position:relative;overflow:hidden;background:#1e293b99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.5rem;padding:1.5rem;border:1px solid rgba(148,163,184,.1);text-align:center;transition:all .3s ease}.firmware-page .firmware-stat-card:hover{transform:translateY(-5px);border-color:#10b9814d;box-shadow:0 20px 40px -10px #10b98133}.firmware-page .firmware-stat-value{font-size:3rem;font-weight:700;color:#fff;line-height:1;margin-bottom:.5rem}.firmware-page .firmware-stat-label{font-size:.875rem;color:#64748b}.firmware-page .devices-table-container{background:#1e293b99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.5rem;border:1px solid rgba(148,163,184,.1);overflow:hidden;margin-bottom:2rem}.firmware-page .devices-table{width:100%;border-collapse:collapse}.firmware-page .devices-table thead{background:linear-gradient(135deg,#10b981,#059669);color:#fff}.firmware-page .devices-table th{padding:1rem;text-align:left;font-weight:600;font-size:.75rem;text-transform:uppercase;letter-spacing:.05em}.firmware-page .devices-table tbody tr{border-bottom:1px solid rgba(148,163,184,.1);transition:all .2s ease}.firmware-page .devices-table tbody tr:hover{background-color:#0f172a4d}.firmware-page .devices-table tbody tr.selected{background-color:#10b9811a}.firmware-page .devices-table td{padding:1rem;font-size:.875rem;color:#fff}.firmware-page .mac-cell code{background:#0f172acc;padding:.25rem .75rem;border-radius:.5rem;font-family:Courier New,monospace;font-size:.75rem;color:#10b981}.firmware-page .version-badge{background:linear-gradient(135deg,#10b98133,#05966933);color:#10b981;border:1px solid rgba(16,185,129,.3);padding:.375rem .75rem;border-radius:1rem;font-size:.75rem;font-weight:600;display:inline-block}.firmware-page .user-info{display:flex;flex-direction:column;gap:.25rem}.firmware-page .user-name{font-weight:600;color:#fff;font-size:.875rem}.firmware-page .user-email{font-size:.75rem;color:#94a3b8}.firmware-page .firmware-status-badge{padding:.375rem .75rem;border-radius:1rem;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;display:inline-block}.firmware-page .firmware-status-badge.updating{background:#ff980033;color:#ff9800;border:1px solid rgba(255,152,0,.3);animation:firmware-pulse 1.5s ease-in-out infinite}.firmware-page .firmware-status-badge.success{background:#10b98133;color:#10b981;border:1px solid rgba(16,185,129,.3)}.firmware-page .firmware-status-badge.error{background:#ef444433;color:#ef4444;border:1px solid rgba(239,68,68,.3)}@keyframes firmware-pulse{0%,to{opacity:1}50%{opacity:.6}}.firmware-page .btn-update{padding:.5rem 1rem;background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:none;border-radius:.75rem;cursor:pointer;font-size:.875rem;font-weight:600;transition:all .3s ease}.firmware-page .btn-update:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 10px 20px -5px #10b98166}.firmware-page .btn-update:disabled{opacity:.6;cursor:not-allowed;animation:firmware-rotate 1s linear infinite}@keyframes firmware-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.firmware-page .no-devices{padding:5rem 2rem;text-align:center;color:#94a3b8;font-size:1.1rem}.firmware-page .firmware-info{background:#1e293b99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:1.5rem;border-radius:1.5rem;border:1px solid rgba(148,163,184,.1);border-left:4px solid #10b981}.firmware-page .firmware-info h3{margin-top:0;color:#fff;font-size:1.2rem;font-weight:600}.firmware-page .firmware-loading,.firmware-page .firmware-error{padding:5rem 2rem;text-align:center;background:#1e293b66;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.5rem;border:1px dashed rgba(148,163,184,.3)}.firmware-page .firmware-loading{color:#10b981;font-size:1.2rem}.firmware-page .firmware-error{color:#ef4444}.firmware-page .firmware-error p{margin-bottom:1.5rem;font-size:1.1rem}.firmware-page .btn-retry{padding:.875rem 1.5rem;background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:none;border-radius:1rem;cursor:pointer;font-size:.875rem;font-weight:600;transition:all .3s ease}.firmware-page .btn-retry:hover{transform:translateY(-2px);box-shadow:0 10px 20px -5px #10b98166}.firmware-page .latest-versions-section{background:#1e293b99;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.5rem;padding:1.5rem;border:1px solid rgba(148,163,184,.1);margin-bottom:2rem}.firmware-page .latest-versions-section h3{color:#fff;font-size:1.25rem;font-weight:600;margin:0 0 1.5rem}.firmware-page .versions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1rem}.firmware-page .version-card{background:#0f172ab3;border:1px solid rgba(148,163,184,.2);border-radius:1rem;padding:1.25rem;display:flex;flex-direction:column;gap:.75rem}.firmware-page .version-model{font-size:1.125rem;font-weight:600;color:#10b981}.firmware-page .version-tag{font-size:.875rem;color:#fff;font-weight:500}.firmware-page .version-date{font-size:.75rem;color:#94a3b8}.firmware-page .btn-use-version{padding:.625rem 1rem;background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:none;border-radius:.75rem;cursor:pointer;font-size:.813rem;font-weight:600;transition:all .3s ease;margin-top:.5rem}.firmware-page .btn-use-version:hover{transform:translateY(-2px);box-shadow:0 5px 15px #10b9814d}.firmware-page .input-hint{display:block;margin-top:.5rem;font-size:.75rem;color:#94a3b8;font-style:italic}.firmware-page .bulk-update-progress{background:#1e293bcc;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1.5rem;padding:1.5rem;border:1px solid rgba(16,185,129,.3);margin-bottom:2rem;box-shadow:0 10px 30px -5px #10b98133}.firmware-page .bulk-update-progress .progress-header{display:flex;align-items:center;gap:.75rem;margin-bottom:1rem}.firmware-page .bulk-update-progress .progress-icon{font-size:1.5rem;animation:pulse 2s ease-in-out infinite}.firmware-page .bulk-update-progress .progress-text{font-size:1rem;font-weight:600;color:#fff}.firmware-page .bulk-update-progress .progress-bar-container{width:100%;height:8px;background:#0f172ab3;border-radius:1rem;overflow:hidden;margin-bottom:.75rem}.firmware-page .bulk-update-progress .progress-bar-fill{height:100%;background:linear-gradient(90deg,#10b981,#059669);border-radius:1rem;transition:width .5s ease;box-shadow:0 0 10px #10b98180}.firmware-page .bulk-update-progress .progress-info{text-align:center}.firmware-page .bulk-update-progress .progress-info small{font-size:.75rem;color:#94a3b8;font-style:italic}.firmware-page .firmware-version-cell{display:flex;flex-direction:column;gap:.25rem}.firmware-page .update-available-badge{display:inline-block;padding:.25rem .5rem;background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;border-radius:.5rem;font-size:.688rem;font-weight:600;white-space:nowrap}.firmware-page .device-name-cell{display:flex;align-items:center;gap:.5rem}.firmware-page .active-indicator{color:#10b981;font-size:.75rem;animation:pulse 2s ease-in-out infinite}.firmware-page .status-cell{display:flex;flex-direction:column;gap:.25rem}.firmware-page .status-active{display:inline-block;padding:.25rem .5rem;background:linear-gradient(135deg,#10b981,#059669);color:#fff;border-radius:.5rem;font-size:.688rem;font-weight:600}.firmware-page .status-inactive{display:inline-block;padding:.25rem .5rem;background:#64748b4d;color:#94a3b8;border-radius:.5rem;font-size:.688rem;font-weight:600}@media (max-width: 768px){.firmware-page{padding:.75rem}.firmware-page .firmware-header{flex-direction:column;gap:.75rem;align-items:flex-start;margin-bottom:1.25rem}.firmware-page .firmware-header h1{font-size:1.5rem}.firmware-page .btn-refresh{width:100%;justify-content:center}.firmware-page .stats-summary{grid-template-columns:1fr 1fr 1fr;gap:.75rem}.firmware-page .firmware-stat-card{border-radius:1rem;padding:1rem}.firmware-page .firmware-stat-value{font-size:2rem}.firmware-page .firmware-controls{border-radius:1rem;padding:1rem;margin-bottom:1.25rem}.firmware-page .devices-table-container{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:1rem;margin-bottom:1.25rem}.firmware-page .devices-table{min-width:800px;font-size:.85rem}.firmware-page .devices-table th,.firmware-page .devices-table td{padding:.75rem .5rem}.firmware-page .bulk-actions{flex-direction:column;align-items:stretch}.firmware-page .btn-select-all,.firmware-page .btn-bulk-update{width:100%;min-height:44px;justify-content:center;display:flex;align-items:center}.firmware-page .versions-grid{grid-template-columns:1fr}.firmware-page .latest-versions-section{border-radius:1rem;padding:1rem;margin-bottom:1.25rem}.firmware-page .latest-versions-section h3{font-size:1rem}.firmware-page .firmware-info-banner{border-radius:.75rem;padding:.75rem;font-size:.85rem}.firmware-page .bulk-update-progress{border-radius:1rem;padding:1rem}}@media (max-width: 480px){.firmware-page .stats-summary{grid-template-columns:1fr}}.sh-page{padding:0}.sh-header{margin-bottom:1.25rem}.sh-title{font-size:1.75rem;font-weight:700;letter-spacing:-.02em}.sh-subtitle{color:var(--text-secondary);font-size:.9rem;margin-top:.15rem}.sh-tabs{display:flex;gap:.25rem;background:#33415533;border-radius:.5rem;padding:.2rem;margin-bottom:1.25rem;width:fit-content}.sh-tab{display:flex;align-items:center;gap:.4rem;padding:.5rem 1rem;border:none;background:none;color:var(--text-secondary);cursor:pointer;border-radius:.4rem;font-size:.85rem;font-weight:500;transition:all .15s}.sh-tab.active{background:var(--card-bg);color:var(--text-primary);box-shadow:0 1px 3px #0003}.sh-tab:hover:not(.active){color:var(--text-primary)}.sh-section{animation:sh-fade .15s ease}@keyframes sh-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.sh-log-filters{display:flex;flex-wrap:wrap;gap:.75rem;align-items:flex-end;margin-bottom:1rem;padding:1rem;background:var(--card-bg);border:1px solid var(--border-color);border-radius:.5rem}.sh-filter-group{display:flex;flex-direction:column;gap:.3rem;min-width:120px}.sh-filter-label{font-size:.68rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.sh-select{background:#0f172a99;border:1px solid var(--border-color);border-radius:.375rem;padding:.45rem .65rem;color:var(--text-primary);font-size:.8rem;cursor:pointer}.sh-select option{background:#1e293b}.sh-select:focus{outline:none;border-color:#10b981}.sh-filter-btns{display:flex;gap:.3rem}.sh-fbtn{display:flex;align-items:center;gap:.3rem;padding:.45rem .65rem;background:#94a3b814;border:1px solid var(--border-color);border-radius:.375rem;color:var(--text-secondary);font-size:.8rem;cursor:pointer;transition:all .15s}.sh-fbtn:hover{color:var(--text-primary);border-color:#94a3b84d}.sh-fbtn.active{background:#10b98126;color:#10b981;border-color:#10b9814d}.sh-action-btn{display:inline-flex;align-items:center;gap:.35rem;padding:.45rem .9rem;border:none;border-radius:.375rem;font-size:.8rem;font-weight:600;cursor:pointer;transition:all .15s;color:#fff}.sh-action-btn.primary{background:#10b981}.sh-action-btn.primary:hover{background:#059669}.sh-action-btn.accent{background:#3b82f6}.sh-action-btn.accent:hover{background:#2563eb}.sh-action-btn:disabled{opacity:.5;cursor:not-allowed}.sh-spinning{animation:sh-spin 1s linear infinite}@keyframes sh-spin{to{transform:rotate(360deg)}}.sh-search-bar{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--card-bg);border:1px solid var(--border-color);border-radius:.5rem;margin-bottom:1rem}.sh-search-bar input{flex:1;background:none;border:none;color:var(--text-primary);outline:none;font-size:.85rem}.sh-search-bar button{padding:.35rem .75rem;background:#10b98126;color:#10b981;border:1px solid rgba(16,185,129,.3);border-radius:.35rem;font-size:.78rem;font-weight:600;cursor:pointer}.sh-search-bar button:disabled{opacity:.4;cursor:not-allowed}.sh-log-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem;margin-bottom:1rem}.sh-log-stat{display:flex;align-items:center;gap:.75rem;padding:.85rem;background:var(--card-bg);border:1px solid var(--border-color);border-radius:.5rem}.sh-log-stat-label{display:block;font-size:.7rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.sh-log-stat-value{display:block;font-size:1.3rem;font-weight:700}.sh-error{display:flex;align-items:center;gap:.75rem;padding:1rem;background:#ef44441a;border:1px solid rgba(239,68,68,.25);border-radius:.5rem;color:#fca5a5;margin-bottom:1rem}.sh-loading{display:flex;align-items:center;justify-content:center;gap:.75rem;padding:2rem;color:var(--text-secondary)}.sh-spinner{width:1.25rem;height:1.25rem;border:2px solid rgba(148,163,184,.2);border-top-color:#10b981;border-radius:50%;animation:sh-spin .6s linear infinite}.sh-logs-container{background:var(--card-bg);border:1px solid var(--border-color);border-radius:.5rem;overflow:hidden}.sh-logs-count{padding:.6rem .85rem;font-size:.78rem;color:var(--text-secondary);border-bottom:1px solid var(--border-color)}.sh-logs-list{max-height:600px;overflow-y:auto}.sh-log-entry{display:grid;grid-template-columns:150px 180px 1fr;gap:.75rem;padding:.5rem .85rem;border-bottom:1px solid rgba(51,65,85,.15);font-size:.78rem;font-family:JetBrains Mono,monospace;line-height:1.4}.sh-log-entry:hover{background:#3341551f}.sh-log-ts{color:var(--text-secondary);white-space:nowrap}.sh-log-stream{color:#64748b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sh-log-msg{word-break:break-word}.sh-log-error{border-left:3px solid #ef4444}.sh-log-error .sh-log-msg{color:#fca5a5}.sh-log-warning{border-left:3px solid #f59e0b}.sh-log-warning .sh-log-msg{color:#fcd34d}.sh-log-disconnect{border-left:3px solid #f97316}.sh-log-disconnect .sh-log-msg{color:#fdba74}.sh-log-success{border-left:3px solid #10b981}.sh-log-success .sh-log-msg{color:#6ee7b7}.sh-log-info{border-left:3px solid transparent}.sh-empty{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:3rem;color:var(--text-secondary);text-align:center}.sh-cost-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.sh-time-btns{display:flex;border:1px solid var(--border-color);border-radius:.4rem;overflow:hidden}.sh-tbtn{padding:.45rem .85rem;border:none;border-right:1px solid var(--border-color);background:#1e293b80;color:var(--text-secondary);font-size:.82rem;cursor:pointer;transition:all .15s}.sh-tbtn:last-child{border-right:none}.sh-tbtn.active{background:#3b82f626;color:#60a5fa;font-weight:600}.sh-tbtn:hover:not(.active){background:#3b82f614}.sh-load-bar{width:100%;height:3px;background:#94a3b81f;border-radius:2px;overflow:hidden}.sh-load-progress{height:100%;width:50%;background:linear-gradient(90deg,#3b82f6,#60a5fa);animation:sh-loadmove 1.5s infinite}@keyframes sh-loadmove{0%{transform:translate(-100%)}to{transform:translate(300%)}}.sh-cost-alerts{margin-bottom:1rem;display:flex;flex-direction:column;gap:.5rem}.sh-calert{display:flex;gap:.65rem;padding:.85rem;border-radius:.5rem;align-items:flex-start}.sh-calert>div{flex:1}.sh-calert strong{display:block;margin-bottom:.2rem}.sh-calert p{margin:.15rem 0 0;font-size:.82rem}.sh-calert-critical{background:#ef444414;color:#f87171;border-left:3px solid #ef4444}.sh-calert-warning{background:#f59e0b14;color:#fbbf24;border-left:3px solid #f59e0b}.sh-calert-info{background:#3b82f614;color:#60a5fa;border-left:3px solid #3b82f6}.sh-metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.75rem;margin-bottom:1rem}.sh-metric{background:var(--card-bg);border:1px solid var(--border-color);border-radius:.5rem;padding:1rem;display:flex;flex-direction:column}.sh-metric-label{font-size:.78rem;color:var(--text-secondary);margin-bottom:.35rem}.sh-metric-value{font-size:1.5rem;font-weight:600}.sh-metric-sub{font-size:.72rem;color:var(--text-secondary);margin-top:.2rem}.sh-cost-card{background:var(--card-bg);border:1px solid var(--border-color);border-radius:.75rem;padding:1.25rem}.sh-cost-card h3{font-size:1.05rem;font-weight:600;margin:0 0 1rem}.sh-cost-card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;flex-wrap:wrap;gap:.75rem}.sh-total-badge{display:inline-flex;align-items:center;gap:.3rem;padding:.3rem .7rem;border-radius:9999px;font-size:.85rem;font-weight:500;background:#3b82f61f;color:#60a5fa}.sh-table-wrap{overflow-x:auto}.sh-table{width:100%;border-collapse:collapse;font-size:.82rem}.sh-table thead th{text-align:left;padding:.65rem .85rem;color:var(--text-secondary);font-weight:500;border-bottom:1px solid var(--border-color);white-space:nowrap}.sh-table tbody td{padding:.6rem .85rem;border-bottom:1px solid rgba(51,65,85,.15)}.sh-table tbody tr:hover{background:#3341551a}.sh-svc-name{display:inline-flex;align-items:center;gap:.5rem}.sh-budget-bar{width:80px;height:5px;background:#94a3b81f;border-radius:3px;overflow:hidden;display:inline-block;vertical-align:middle;margin-right:.5rem}.sh-budget-fill{height:100%;background:#10b981;border-radius:3px;transition:width .3s}.sh-budget-fill.near{background:#f59e0b}.sh-budget-fill.over{background:#ef4444}.sh-budget-text{font-size:.72rem;color:var(--text-secondary)}.sh-status-chip{display:inline-flex;align-items:center;gap:.25rem;padding:.15rem .5rem;border-radius:9999px;font-size:.72rem;font-weight:500}.sh-status-chip.ok{background:#10b9811f;color:#34d399}.sh-status-chip.warning{background:#f59e0b1f;color:#fbbf24}.sh-status-chip.error{background:#ef44441f;color:#f87171}.sh-savings{color:#34d399;font-weight:500}.sh-recs{display:flex;flex-direction:column;gap:.5rem}@media (max-width: 768px){.sh-log-filters{flex-direction:column}.sh-log-entry{grid-template-columns:1fr;gap:.2rem}.sh-metrics-grid{grid-template-columns:1fr}.sh-cost-header{flex-direction:column;align-items:flex-start;gap:.75rem}}.app{min-height:100vh;display:flex}.main-content{flex:1;padding:2rem;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}@media (max-width: 768px){.main-content{padding:1rem}}.page{max-width:1400px;margin:0 auto}@media (max-width: 768px){.page{padding:0}}.page-header{margin-bottom:2rem}.page-title{font-size:2rem;font-weight:600;margin-bottom:.5rem;color:var(--text-primary)}@media (max-width: 768px){.page-title{font-size:1.5rem}}.page-description{color:var(--text-secondary);font-size:.95rem}.card{background:var(--card-bg);border:1px solid var(--border-color);border-radius:12px;padding:1.5rem;margin-bottom:1.5rem}@media (max-width: 768px){.card{padding:1rem;border-radius:8px}}.card-title{font-size:1.25rem;font-weight:600;margin-bottom:1rem;color:var(--text-primary)}.loading{text-align:center;padding:3rem;color:var(--text-secondary)}.error{background:#ef44441a;border:1px solid var(--error);border-radius:8px;padding:1rem;color:var(--error);margin-bottom:1rem}*{margin:0;padding:0;box-sizing:border-box}:root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;line-height:1.5;font-weight:400;--primary-color: #10b981;--secondary-color: #059669;--bg-dark: #0f172a;--bg-darker: #020617;--card-bg: #1e293b;--text-primary: #f1f5f9;--text-secondary: #94a3b8;--border-color: #334155;--success: #22c55e;--warning: #f59e0b;--error: #ef4444;--info: #3b82f6}body{margin:0;background-color:var(--bg-darker);color:var(--text-primary);min-height:100vh;min-height:100dvh;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overscroll-behavior-y:contain}#root{min-height:100vh;min-height:100dvh}@supports (padding: env(safe-area-inset-top)){body{padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}}button,a,.nav-item{-webkit-user-select:none;user-select:none}button,input,select,textarea{font-size:16px}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-dark)}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}
