.layout{display:flex;min-height:100vh;background:var(--bg-darker)}.sidebar{background:var(--bg-dark);border-right:1px solid var(--border-color);display:flex;flex-direction:column;transition:width .3s ease;position:sticky;top:0;height:100vh}.sidebar.open{width:260px}.sidebar.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}.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}.nav-item:hover{background:var(--card-bg);color:var(--text-primary)}.nav-item.active{background:var(--primary-color);color:#fff}.sidebar.closed .nav-item{justify-content:center}.sidebar.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}.logout-button:hover{background:#ef444433;border-color:var(--error)}.sidebar.closed .logout-button{justify-content:center;padding:.75rem}.sidebar.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.closed .status-text,.sidebar.closed .status-indicator{display:none}.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}}.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}@media (max-width: 768px){.modal-content{max-height:95vh}.info-grid,.switches-grid{grid-template-columns:1fr}}.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-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}@media (max-width: 768px){.admin-page-container{padding:1rem}.page-title h1{font-size:2rem}.page-title-icon{width:2.5rem;height:2.5rem}.page-subtitle{margin-left:3.5rem;font-size:1rem}.stat-value{font-size:2.5rem}.items-grid{grid-template-columns:1fr}.filter-buttons{width:100%}.filter-btn{flex:1;justify-content:center}}.filters-section{display:flex;flex-wrap:wrap;gap:.75rem;align-items:flex-end;margin-bottom:1rem;padding:1rem;background:linear-gradient(135deg,#1e293b99,#0f172acc);border:1px solid rgba(148,163,184,.1);border-radius:.5rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.filter-group{display:flex;flex-direction:column;gap:.375rem;min-width:140px;flex:0 0 auto}.filter-label{font-size:.6875rem;font-weight:600;color:#94a3b8;text-transform:uppercase;letter-spacing:.05em}.filter-select{background:#0f172acc;border:1px solid rgba(148,163,184,.3);border-radius:.375rem;padding:.5rem .75rem;color:#e2e8f0;font-size:.8125rem;cursor:pointer;transition:all .2s}.filter-select option{background:#1e293b;color:#e2e8f0;padding:.5rem}.filter-select:hover{background:#0f172af2;border-color:#10b98166}.filter-select:focus{outline:none;background:#0f172af2;border-color:#10b981;box-shadow:0 0 0 3px #10b9811a}.filter-buttons{display:flex;gap:.375rem;flex-wrap:wrap}.filter-btn{display:flex;align-items:center;gap:.375rem;padding:.5rem .75rem;background:#94a3b81a;border:1px solid rgba(148,163,184,.2);border-radius:.375rem;color:#cbd5e1;font-size:.8125rem;font-weight:500;cursor:pointer;transition:all .2s}.filter-btn:hover{background:#94a3b826;border-color:#10b9814d;color:#fff}.filter-btn.active{background:linear-gradient(135deg,#10b981,#059669);border-color:#10b981;color:#fff;box-shadow:0 4px 6px -1px #10b98133}.refresh-button,.export-button{display:flex;align-items:center;gap:.375rem;padding:.5rem 1rem;background:linear-gradient(135deg,#10b981,#059669);border:none;border-radius:.375rem;color:#fff;font-size:.8125rem;font-weight:600;cursor:pointer;transition:all .2s}.refresh-button:hover,.export-button:hover{transform:translateY(-2px);box-shadow:0 10px 20px -10px #10b98180}.refresh-button:disabled{opacity:.5;cursor:not-allowed;transform:none}.export-button{background:linear-gradient(135deg,#3b82f6,#2563eb)}.export-button:hover{box-shadow:0 10px 20px -10px #3b82f680}.spinning{animation:spin 1s linear infinite}.logs-stats.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem;margin-bottom:1.5rem}.logs-stats .stat-card{display:flex;align-items:center;gap:1rem;padding:1.5rem;background:linear-gradient(135deg,#1e293b99,#0f172acc);border:1px solid rgba(148,163,184,.1);border-radius:.75rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);transition:all .2s;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.logs-stats .stat-card:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border-color:#94a3b833}.logs-stats .stat-icon{width:2.5rem;height:2.5rem;padding:.625rem;background:#10b9811a;border-radius:.5rem;flex-shrink:0}.logs-stats .stat-label{font-size:.75rem;color:#94a3b8;margin:0 0 .25rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.logs-stats .stat-value{font-size:1.75rem;font-weight:700;color:#fff;margin:0}.error-banner{display:flex;align-items:flex-start;gap:1rem;padding:1.25rem;background:linear-gradient(135deg,#ef444426,#dc26261a);border:1px solid rgba(239,68,68,.3);border-radius:.75rem;color:#fca5a5;margin-bottom:1.5rem}.error-banner svg{flex-shrink:0;margin-top:.125rem}.error-title{font-size:.9375rem;font-weight:600;color:#ef4444;margin:0 0 .25rem}.error-message{font-size:.875rem;margin:0 0 .5rem}.error-hint{font-size:.8125rem;color:#94a3b8;font-style:italic;margin:0}.logs-container{background:linear-gradient(135deg,#1e293b99,#0f172acc);border:1px solid rgba(148,163,184,.1);border-radius:.75rem;overflow:hidden;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.logs-header{padding:1rem 1.25rem;border-bottom:1px solid rgba(148,163,184,.1);background:#10b9810d}.logs-count{font-size:.875rem;font-weight:600;color:#10b981;margin:0}.logs-list{max-height:600px;overflow-y:auto}.log-entry{padding:1rem 1.25rem;border-bottom:1px solid rgba(148,163,184,.05);transition:background .2s;font-family:Monaco,Consolas,monospace}.log-entry:hover{background:#94a3b80d}.log-entry:last-child{border-bottom:none}.log-timestamp{font-size:.75rem;color:#94a3b8;margin-bottom:.25rem}.log-stream{font-size:.6875rem;color:#64748b;margin-bottom:.5rem}.log-message{font-size:.8125rem;color:#e2e8f0;line-height:1.5;word-break:break-word}.log-error{border-left:3px solid #ef4444;background:#ef44440d}.log-error .log-message{color:#fca5a5}.log-warning{border-left:3px solid #f59e0b;background:#f59e0b0d}.log-warning .log-message{color:#fcd34d}.log-disconnect{border-left:3px solid #f59e0b;background:#f59e0b08}.log-disconnect .log-message{color:#fbbf24}.log-success{border-left:3px solid #10b981;background:#10b9810d}.log-success .log-message{color:#6ee7b7}.log-info{border-left:3px solid #3b82f6}.search-container{display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;background:linear-gradient(135deg,#1e293b99,#0f172acc);border:1px solid rgba(148,163,184,.1);border-radius:.5rem;margin-bottom:1rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.search-icon{color:#94a3b8;flex-shrink:0;width:1rem;height:1rem}.search-input{flex:1;background:#94a3b81a;border:1px solid rgba(148,163,184,.2);border-radius:.375rem;padding:.5rem .75rem;color:#fff;font-size:.8125rem;transition:all .2s}.search-input::placeholder{color:#64748b}.search-input:focus{outline:none;background:#94a3b826;border-color:#10b981;box-shadow:0 0 0 3px #10b9811a}.search-button{display:flex;align-items:center;gap:.375rem;padding:.5rem 1rem;background:linear-gradient(135deg,#10b981,#059669);border:none;border-radius:.375rem;color:#fff;font-size:.8125rem;font-weight:600;cursor:pointer;transition:all .2s;flex-shrink:0}.search-button:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 10px 20px -10px #10b98180}.search-button:disabled{opacity:.5;cursor:not-allowed}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem 2rem;background:linear-gradient(135deg,#1e293b99,#0f172acc);border:1px solid rgba(148,163,184,.1);border-radius:.75rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);text-align:center}.empty-title{font-size:1.125rem;font-weight:600;color:#cbd5e1;margin:0 0 .5rem}.empty-description{font-size:.875rem;color:#94a3b8;margin:0}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem 2rem;background:linear-gradient(135deg,#1e293b99,#0f172acc);border:1px solid rgba(148,163,184,.1);border-radius:.75rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.loading-spinner{width:3rem;height:3rem;border:3px solid rgba(16,185,129,.2);border-top-color:#10b981;border-radius:50%;animation:spin 1s linear infinite;margin-bottom:1rem}.loading-container p{font-size:.875rem;color:#94a3b8;margin:0}.empty-icon{width:4rem;height:4rem;color:#475569;margin-bottom:1rem}.logs-list::-webkit-scrollbar{width:8px}.logs-list::-webkit-scrollbar-track{background:#94a3b80d}.logs-list::-webkit-scrollbar-thumb{background:#10b9814d;border-radius:4px}.logs-list::-webkit-scrollbar-thumb:hover{background:#10b98180}@media (max-width: 768px){.filters-section{flex-direction:column;align-items:stretch}.filter-group{min-width:100%}.refresh-button,.export-button{margin-left:0;width:100%;justify-content:center}.logs-stats.stats-grid{grid-template-columns:1fr}.filter-buttons{flex-direction:column}.filter-btn{width:100%}}.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 .firmware-header{flex-direction:column;gap:1rem;align-items:flex-start}.firmware-page .stats-summary{grid-template-columns:1fr}.firmware-page .devices-table-container{overflow-x:auto}.firmware-page .devices-table{min-width:900px;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%}.firmware-page .versions-grid{grid-template-columns:1fr}}.cost-monitoring{padding:1.5rem}.cost-monitoring h2{font-size:1.5rem;font-weight:600;margin-bottom:1.5rem;color:var(--text-primary, #e2e8f0)}.cost-monitoring h3{font-size:1.25rem;font-weight:600;margin-bottom:1rem;color:var(--text-primary, #e2e8f0)}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.header-controls{display:flex;gap:1rem;align-items:center}.toggle-group{display:flex;border:1px solid rgba(148,163,184,.2);border-radius:.5rem;overflow:hidden}.toggle-group button{padding:.5rem 1rem;border:none;background:#1e293b99;color:var(--text-secondary, #94a3b8);cursor:pointer;font-size:.875rem;transition:all .2s;border-right:1px solid rgba(148,163,184,.15)}.toggle-group button:last-child{border-right:none}.toggle-group button:hover{background:#3b82f61a}.toggle-group button.active{background:#3b82f633;color:#60a5fa;font-weight:600}.btn-icon{padding:.5rem;border:1px solid rgba(148,163,184,.2);border-radius:.5rem;background:#1e293b99;color:var(--text-secondary, #94a3b8);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.btn-icon:hover:not(:disabled){background:#3b82f626;color:#60a5fa}.btn-icon:disabled{opacity:.5;cursor:not-allowed}.loading-bar{width:100%;height:4px;background:#94a3b826;border-radius:2px;overflow:hidden;margin-top:1rem}.loading-bar-progress{height:100%;background:linear-gradient(90deg,#3b82f6,#60a5fa);animation:loading 1.5s infinite;width:50%}@keyframes loading{0%{transform:translate(-100%)}to{transform:translate(300%)}}.alerts-section{margin-bottom:1.5rem}.alert{display:flex;gap:.75rem;padding:1rem;border-radius:.5rem;margin-bottom:.5rem;align-items:flex-start}.alert>div{flex:1}.alert strong{display:block;margin-bottom:.25rem}.alert p{margin:.25rem 0 0;font-size:.875rem}.alert-error{background:#ef44441a;color:#f87171;border-left:4px solid #ef4444}.alert-warning{background:#f59e0b1a;color:#fbbf24;border-left:4px solid #f59e0b}.alert-info{background:#3b82f61a;color:#60a5fa;border-left:4px solid #3b82f6}.alert.alert-info svg,.alert.alert-warning svg,.alert.alert-error svg{flex-shrink:0}.btn{padding:.625rem 1.25rem;border:none;border-radius:.5rem;cursor:pointer;font-size:.875rem;font-weight:500;transition:all .2s;margin-top:1rem}.btn-primary{background:#3b82f633;color:#60a5fa;border:1px solid rgba(59,130,246,.3)}.btn-primary:hover{background:#3b82f64d}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1.5rem;margin-bottom:1.5rem}.metric-card{background:#1e293b80;border:1px solid rgba(148,163,184,.1);border-radius:.75rem;padding:1.25rem}.metric-label{font-size:.875rem;color:var(--text-secondary, #94a3b8);margin-bottom:.5rem}.metric-value{font-size:2rem;font-weight:600;color:var(--text-primary, #e2e8f0);margin-bottom:.25rem}.metric-subtitle{font-size:.75rem;color:var(--text-secondary, #94a3b8)}.costs-section{display:flex;flex-direction:column;gap:1.5rem}.cost-monitoring .card{background:#1e293b80;border:1px solid rgba(148,163,184,.1);border-radius:.75rem;padding:1.5rem}.card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.chip{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .75rem;border-radius:16px;font-size:.875rem;font-weight:500}.chip-primary{background:#3b82f626;color:#60a5fa}.chip-success{background:#10b98126;color:#34d399}.chip-warning{background:#f59e0b26;color:#fbbf24}.chip-error{background:#ef444426;color:#f87171}.table-container{overflow-x:auto;border:1px solid rgba(148,163,184,.1);border-radius:.5rem}.data-table{width:100%;border-collapse:collapse;font-size:.875rem}.data-table thead{background:#1e293bcc}.data-table th{padding:.75rem 1rem;text-align:left;font-weight:600;color:var(--text-secondary, #94a3b8);border-bottom:1px solid rgba(148,163,184,.15)}.data-table td{padding:.75rem 1rem;border-bottom:1px solid rgba(148,163,184,.08);color:var(--text-primary, #e2e8f0)}.data-table tbody tr:last-child td{border-bottom:none}.data-table tbody tr:hover{background:#3b82f60d}.text-right{text-align:right!important}.service-name{display:flex;align-items:center;gap:.5rem}.budget-bar{width:100px;height:8px;background:#94a3b826;border-radius:4px;overflow:hidden;margin-bottom:.25rem}.progress-bar{height:100%;transition:width .3s ease}.progress-bar.primary{background:#3b82f6}.progress-bar.warning{background:#f59e0b}.progress-bar.error{background:#ef4444}.budget-text{font-size:.75rem;color:var(--text-secondary, #94a3b8)}.recommendations{display:flex;flex-direction:column;gap:.75rem}.savings{color:#34d399;font-weight:500;margin-top:.25rem}@media (max-width: 768px){.header{flex-direction:column;align-items:flex-start}.header-controls{width:100%;flex-direction:column}.toggle-group{width:100%}.toggle-group button{flex:1}.metrics-grid{grid-template-columns:1fr}.card-header{flex-direction:column;align-items:flex-start}}.app{min-height:100vh;display:flex}.main-content{flex:1;padding:2rem;overflow-y:auto}.page{max-width:1400px;margin:0 auto}.page-header{margin-bottom:2rem}.page-title{font-size:2rem;font-weight:600;margin-bottom:.5rem;color:var(--text-primary)}.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}.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}#root{min-height:100vh}::-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}}
