.card{background-color:var(--color-bg-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-sm);transition:all var(--transition-fast)}.card-hoverable:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.card-clickable{cursor:pointer}.card-padding-none{padding:0}.card-padding-sm{padding:var(--spacing-md)}.card-padding-md{padding:var(--spacing-lg)}.card-padding-lg{padding:var(--spacing-xl)}.card-header{padding-bottom:var(--spacing-md);border-bottom:var(--border-width) solid var(--color-divider);margin-bottom:var(--spacing-md)}.card-body{flex:1}.card-footer{padding-top:var(--spacing-md);border-top:var(--border-width) solid var(--color-divider);margin-top:var(--spacing-md)}.badge{display:inline-flex;align-items:center;gap:var(--spacing-xs);font-weight:var(--font-weight-medium);border-radius:var(--border-radius-full);white-space:nowrap;line-height:1}.badge-sm{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-xs)}.badge-md{padding:var(--spacing-xs) var(--spacing-md);font-size:var(--font-size-sm)}.badge-primary{background-color:var(--color-primary-light);color:var(--color-primary)}.badge-success{background-color:var(--color-success-light);color:var(--color-success)}.badge-warning{background-color:var(--color-warning-light);color:var(--color-warning-hover)}.badge-danger{background-color:var(--color-danger-light);color:var(--color-danger)}.badge-info{background-color:var(--color-info-light);color:var(--color-info)}.badge-neutral{background-color:var(--color-bg-elevated);color:var(--color-text-secondary);border:var(--border-width) solid var(--color-border)}.badge-dot{padding-left:var(--spacing-sm)}.badge-dot-indicator{width:6px;height:6px;border-radius:50%;background-color:currentColor}.spinner{border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .8s linear infinite}.spinner-sm{width:20px;height:20px;border-width:2px}.spinner-md{width:32px;height:32px;border-width:3px}.spinner-lg{width:48px;height:48px;border-width:4px}.spinner-xl{width:64px;height:64px;border-width:5px}.spinner-wrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--spacing-md)}.spinner-fullscreen{min-height:200px}.spinner-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:var(--color-bg-overlay);display:flex;align-items:center;justify-content:center;z-index:var(--z-modal)}.spinner-message{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--spacing-sm);font-weight:var(--font-weight-medium);border-radius:var(--border-radius-md);transition:all var(--transition-fast);cursor:pointer;border:var(--border-width) solid transparent;white-space:nowrap;-webkit-user-select:none;user-select:none}.btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.btn-sm{padding:var(--spacing-xs) var(--spacing-md);font-size:var(--font-size-sm);min-height:32px}.btn-md{padding:var(--spacing-sm) var(--spacing-lg);font-size:var(--font-size-base);min-height:40px}.btn-lg{padding:var(--spacing-md) var(--spacing-xl);font-size:var(--font-size-lg);min-height:48px}.btn-primary{background-color:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background-color:var(--color-primary-hover)}.btn-secondary{background-color:var(--color-bg-elevated);color:var(--color-text-primary);border-color:var(--color-border)}.btn-secondary:hover:not(:disabled){background-color:var(--color-bg-secondary);border-color:var(--color-border-hover)}.btn-success{background-color:var(--color-success);color:#fff}.btn-success:hover:not(:disabled){background-color:var(--color-success-hover)}.btn-danger{background-color:var(--color-danger);color:#fff}.btn-danger:hover:not(:disabled){background-color:var(--color-danger-hover)}.btn-ghost{background-color:transparent;color:var(--color-text-primary)}.btn-ghost:hover:not(:disabled){background-color:var(--color-bg-elevated)}.btn-full{width:100%}.btn-loading{position:relative;pointer-events:none}.btn-spinner{animation:spin 1s linear infinite;display:inline-block}.btn-content-loading{opacity:.6}.error-message{display:flex;align-items:flex-start;gap:var(--spacing-md);padding:var(--spacing-lg);background-color:var(--color-danger-light);border:var(--border-width) solid var(--color-danger);border-radius:var(--border-radius-md);color:var(--color-text-primary)}.error-icon{font-size:var(--font-size-xl);flex-shrink:0}.error-content{flex:1;display:flex;flex-direction:column;gap:var(--spacing-sm)}.error-text{margin:0;font-size:var(--font-size-base);line-height:var(--line-height-normal)}.error-retry{align-self:flex-start}.chart-panel{border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, 10px);padding:12px 12px 6px;background:var(--color-surface, #fff);min-width:0}.chart-panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:6px}.chart-panel-title{font-size:.82rem;font-weight:600;color:var(--color-text, #111827)}.chart-panel-unit{font-size:.7rem;color:var(--color-text-secondary, #6b7280);white-space:nowrap}.chart-panel-empty{display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary, #6b7280);font-size:.85rem}.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}.metric-grid-empty{display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary, #6b7280);font-size:.85rem}.power-chart-container{width:100%;position:relative}.power-chart-loading,.power-chart-empty{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.power-chart-empty p{color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.power-chart-controls{display:flex;gap:var(--spacing-xs);margin-bottom:var(--spacing-sm);flex-wrap:wrap}.power-chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px}.power-chart-group-btn{padding:var(--spacing-xs) var(--spacing-md);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background:transparent;color:var(--color-text-secondary);font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast)}.power-chart-group-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.power-chart-group-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.dashboard{width:100%}.dashboard-header{margin-bottom:var(--spacing-xl)}.dashboard-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-sm)}.dashboard-subtitle{font-size:var(--font-size-lg);color:var(--color-text-secondary);margin:0}.stats-grid{display:grid;gap:var(--spacing-md);grid-template-columns:repeat(2,1fr);margin-bottom:var(--spacing-xl)}@media (min-width: 768px){.stats-grid{grid-template-columns:repeat(4,1fr)}}.stat-card{text-align:center}.stat-value{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-primary);line-height:var(--line-height-tight)}.stat-label{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-top:var(--spacing-xs)}.dashboard-section{margin-bottom:var(--spacing-xl)}.section-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-bottom:0}.section-header-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--spacing-md);gap:var(--spacing-sm)}.sensor-picker-wrapper{position:relative}.sensor-picker-btn{padding:var(--spacing-xs) var(--spacing-sm);font-size:var(--font-size-sm);border:1px solid var(--color-border);border-radius:var(--border-radius-md);background:var(--color-bg-secondary);color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-fast);white-space:nowrap}.sensor-picker-btn:hover{border-color:var(--color-primary);color:var(--color-text-primary)}.sensor-picker-dropdown{position:absolute;right:0;top:calc(100% + 4px);min-width:260px;background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);z-index:50;padding:var(--spacing-xs) 0}.sensor-picker-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-xs) var(--spacing-sm);border-bottom:1px solid var(--color-border);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary)}.sensor-picker-actions{display:flex;gap:var(--spacing-xs)}.sensor-picker-link{background:none;border:none;color:var(--color-primary);cursor:pointer;font-size:var(--font-size-xs);padding:2px 4px;border-radius:var(--border-radius-sm)}.sensor-picker-link:hover{background:var(--color-bg-secondary)}.sensor-picker-item{display:flex;align-items:center;gap:var(--spacing-xs);padding:var(--spacing-xs) var(--spacing-sm);cursor:pointer;font-size:var(--font-size-sm);transition:var(--transition-fast)}.sensor-picker-item:hover{background:var(--color-bg-secondary)}.sensor-picker-item input[type=checkbox]{accent-color:var(--color-primary);width:16px;height:16px;cursor:pointer}.sensor-picker-name{flex:1;color:var(--color-text-primary)}.sensor-picker-count{font-size:.75rem;color:var(--color-text-secondary);margin-left:.25rem}.readings-grid{display:grid;gap:var(--spacing-md);grid-template-columns:1fr}@media (min-width: 640px){.readings-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.readings-grid{grid-template-columns:repeat(3,1fr)}}.sensor-value-card{border-left:3px solid transparent;transition:border-color var(--transition-fast)}.sensor-value-card.selected{border-left-color:var(--color-primary)}.sensor-card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:var(--spacing-md)}.sensor-card-identity{display:flex;align-items:center;gap:var(--spacing-sm)}.sensor-card-name{font-weight:var(--font-weight-semibold);color:var(--color-text-primary);font-size:var(--font-size-sm)}.sensor-card-toggle{display:flex;align-items:center;gap:var(--spacing-xs);cursor:pointer;font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.sensor-card-toggle input[type=checkbox]{accent-color:var(--color-primary)}.sensor-card-toggle-label{-webkit-user-select:none;user-select:none}.sensor-card-values{display:flex;flex-direction:column;gap:var(--spacing-xs)}.sensor-card-primary{display:flex;align-items:flex-end;gap:var(--spacing-lg)}.sensor-card-metric-value{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight)}.sensor-card-metric-value:first-child{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold)}.sensor-card-diag{display:flex;gap:var(--spacing-md);margin-top:2px}.sensor-card-diag-item{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-family:var(--font-family-mono)}.sensor-card-timestamp{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-top:var(--spacing-xs)}.sensor-card-no-data{color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.sensor-card-metric-block{display:flex;flex-direction:column;align-items:flex-start;gap:1px}.sensor-card-metric-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);line-height:1}.sensor-card-aq-section{display:flex;flex-direction:column;gap:var(--spacing-xs);padding-top:var(--spacing-xs);border-top:var(--border-width) solid var(--color-divider);margin-top:var(--spacing-xs)}.sensor-card-iaq-banner{display:flex;align-items:center;gap:var(--spacing-sm)}.sensor-card-iaq-score{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);line-height:var(--line-height-tight)}.sensor-card-iaq-info{display:flex;flex-direction:column;gap:1px}.sensor-card-iaq-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold)}.sensor-card-iaq-accuracy{font-size:var(--font-size-xs)}.sensor-card-aq-metrics{display:flex;flex-wrap:wrap;gap:var(--spacing-sm)}.sensor-card-aq-item{display:flex;flex-direction:column;gap:1px}.sensor-card-aq-value{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);font-family:var(--font-family-mono)}.sensor-card-aq-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.energy-cards-grid{display:grid;gap:var(--spacing-md);grid-template-columns:1fr;margin-bottom:var(--spacing-lg)}@media (min-width: 768px){.energy-cards-grid{grid-template-columns:repeat(auto-fit,minmax(400px,1fr))}}.energy-card{border-left:3px solid var(--color-chart-power, #f59e0b)}.energy-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--spacing-md)}.energy-card-name{font-weight:var(--font-weight-semibold);color:var(--color-text-primary);font-size:var(--font-size-sm)}.energy-card-values{display:flex;flex-direction:column;gap:var(--spacing-sm)}.energy-card-total{display:flex;flex-direction:column;gap:2px}.energy-card-total-value{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-chart-power, #f59e0b);line-height:var(--line-height-tight)}.energy-card-total-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}.energy-card-phases{display:flex;gap:var(--spacing-md)}.energy-phase{display:flex;align-items:center;gap:var(--spacing-xs);font-size:var(--font-size-sm);color:var(--color-text-secondary)}.energy-phase-label{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:var(--border-radius-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);color:#fff}.energy-phase-label.phase-a{background:var(--color-chart-phase-a, #ef4444)}.energy-phase-label.phase-b{background:var(--color-chart-phase-b, #3b82f6)}.energy-phase-label.phase-c{background:var(--color-chart-phase-c, #10b981)}.energy-phase-table{width:100%;border-collapse:collapse;font-size:var(--font-size-xs);margin-bottom:var(--spacing-sm)}.energy-phase-table th{text-align:left;font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);padding:var(--spacing-xs) var(--spacing-xs);border-bottom:var(--border-width) solid var(--color-divider)}.energy-phase-table td{padding:var(--spacing-xs) var(--spacing-xs);color:var(--color-text-secondary);font-family:var(--font-family-mono);font-size:var(--font-size-xs)}.energy-phase-table tbody tr:not(:last-child) td{border-bottom:var(--border-width) solid var(--color-divider)}.energy-card-totals{display:flex;gap:var(--spacing-md);padding-top:var(--spacing-sm);border-top:var(--border-width) solid var(--color-divider);flex-wrap:wrap}.energy-card-total-item{display:flex;flex-direction:column;gap:2px}.energy-card-total-item-value{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);font-family:var(--font-family-mono)}.energy-card-total-item-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.energy-card-cumulative-value{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);font-family:var(--font-family-mono)}.energy-card-cumulative-label,.energy-card-timestamp{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.chart-header{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:var(--spacing-sm)}.time-range-controls{display:flex;flex-direction:column;align-items:flex-end;gap:var(--spacing-sm)}.health-info{display:flex;flex-direction:column;gap:var(--spacing-sm)}.health-row{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-md)}.health-label{font-weight:var(--font-weight-medium);color:var(--color-text-secondary);font-size:var(--font-size-sm)}.health-value{font-family:var(--font-family-mono);font-size:var(--font-size-sm);color:var(--color-text-primary)}.boardtype-card{transition:var(--transition-base)}.boardtype-card-header{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-md)}.boardtype-card-header-left{display:flex;align-items:center;gap:var(--spacing-sm);flex-wrap:wrap;min-width:0}.boardtype-card-name{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.boardtype-card-header-right{flex-shrink:0}.boardtype-card-firmware-count{font-size:var(--font-size-sm);color:var(--color-text-tertiary);font-weight:var(--font-weight-medium)}.boardtype-card-body{display:flex;flex-direction:column;gap:var(--spacing-md)}.boardtype-card-details{display:flex;flex-direction:column;gap:var(--spacing-sm)}.boardtype-card-detail{display:flex;align-items:baseline;gap:var(--spacing-sm)}.boardtype-card-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-weight:var(--font-weight-medium);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}.boardtype-card-magic{font-family:SF Mono,Fira Code,Fira Mono,Roboto Mono,monospace;font-size:var(--font-size-sm);color:var(--color-primary);background:var(--color-bg-secondary);padding:2px var(--spacing-xs);border-radius:var(--border-radius-sm)}.boardtype-card-value{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.boardtype-card-sensors{display:flex;flex-direction:column;gap:var(--spacing-xs)}.boardtype-card-sensor-badges{display:flex;flex-wrap:wrap;gap:var(--spacing-xs)}.boardtype-card-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-sm);padding-top:var(--spacing-sm);border-top:1px solid var(--color-border)}.boardtype-card-admin-actions{display:flex;align-items:center;gap:var(--spacing-xs)}.boardtype-card-firmware-list{padding-top:var(--spacing-sm);border-top:1px solid var(--color-border)}.boardtype-card-no-firmware{font-size:var(--font-size-sm);color:var(--color-text-tertiary);text-align:center;padding:var(--spacing-md) 0;margin:0}.boardtype-card-firmware-table-wrapper{overflow-x:auto}.boardtype-card-firmware-table{width:100%;border-collapse:collapse;font-size:var(--font-size-sm)}.boardtype-card-firmware-table th{text-align:left;font-weight:var(--font-weight-medium);color:var(--color-text-tertiary);font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.05em;padding:var(--spacing-xs) var(--spacing-sm);border-bottom:1px solid var(--color-border);white-space:nowrap}.boardtype-card-firmware-table td{padding:var(--spacing-xs) var(--spacing-sm);border-bottom:1px solid var(--color-border);color:var(--color-text-secondary);vertical-align:middle}.boardtype-card-firmware-table tbody tr:last-child td{border-bottom:none}.boardtype-card-firmware-latest{background:rgba(var(--color-success-rgb, 34, 197, 94),.05)}.boardtype-card-fw-version code{font-family:SF Mono,Fira Code,Fira Mono,Roboto Mono,monospace;font-size:var(--font-size-xs);color:var(--color-text-primary);font-weight:var(--font-weight-medium)}.boardtype-card-fw-md5{font-family:SF Mono,Fira Code,Fira Mono,Roboto Mono,monospace;font-size:var(--font-size-xs);color:var(--color-text-tertiary);cursor:help}.boardtype-card-fw-changelog{max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.boardtype-card-fw-actions{display:flex;align-items:center;gap:var(--spacing-xs)}@media (max-width: 768px){.boardtype-card-actions{flex-direction:column;align-items:stretch}.boardtype-card-admin-actions{flex-wrap:wrap;justify-content:flex-end}}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:var(--color-bg-overlay);display:flex;align-items:center;justify-content:center;z-index:var(--z-modal);padding:var(--spacing-md);animation:fadeIn var(--transition-fast)}.modal{background-color:var(--color-bg-elevated);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-xl);max-height:90vh;overflow-y:auto;display:flex;flex-direction:column;animation:slideInUp var(--transition-base)}.modal-sm{width:100%;max-width:400px}.modal-md{width:100%;max-width:600px}.modal-lg{width:100%;max-width:800px}.modal-xl{width:100%;max-width:1200px}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-lg);border-bottom:var(--border-width) solid var(--color-divider)}.modal-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0}.modal-close{font-size:2rem;line-height:1;color:var(--color-text-secondary);background:none;border:none;cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:var(--border-radius-sm);transition:all var(--transition-fast)}.modal-close:hover{color:var(--color-text-primary);background-color:var(--color-bg-secondary)}.modal-body{padding:var(--spacing-lg);flex:1;overflow-y:auto}.modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--spacing-sm);padding:var(--spacing-lg);border-top:var(--border-width) solid var(--color-divider)}.boardtype-form{display:flex;flex-direction:column;gap:var(--spacing-md)}.boardtype-form-textarea{resize:vertical;min-height:80px;font-family:inherit}.firmware-upload-form{display:flex;flex-direction:column;gap:var(--spacing-md)}.firmware-upload-textarea{resize:vertical;min-height:80px;font-family:inherit}.firmware-upload-file-input{padding:var(--spacing-sm);cursor:pointer}.firmware-upload-file-input::file-selector-button{background:var(--color-bg-secondary);color:var(--color-text-primary);border:1px solid var(--color-border);border-radius:var(--border-radius-sm);padding:var(--spacing-xs) var(--spacing-sm);margin-right:var(--spacing-sm);cursor:pointer;font-size:var(--font-size-sm);transition:var(--transition-fast)}.firmware-upload-file-input::file-selector-button:hover{background:var(--color-bg-elevated)}.ota-deploy-content{display:flex;flex-direction:column;gap:var(--spacing-md)}.ota-deploy-firmware-info{display:flex;flex-direction:column;gap:var(--spacing-xs);padding:var(--spacing-sm) var(--spacing-md);background-color:var(--color-bg-secondary);border-radius:var(--border-radius-sm)}.ota-deploy-firmware-info .ota-deploy-value{display:flex;align-items:center;gap:var(--spacing-sm)}.ota-deploy-label{font-size:var(--font-size-sm);color:var(--color-text-secondary);font-weight:var(--font-weight-medium)}.ota-deploy-value{color:var(--color-text-primary);font-size:var(--font-size-base)}.ota-deploy-field{display:flex;flex-direction:column;gap:var(--spacing-xs)}.ota-deploy-no-devices{color:var(--color-text-secondary);font-size:var(--font-size-sm);font-style:italic;margin:0}.ota-deploy-checkbox{display:flex;align-items:center}.ota-deploy-checkbox label{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-sm);color:var(--color-text-secondary);cursor:pointer}.ota-deploy-checkbox input[type=checkbox]{accent-color:var(--color-primary)}.ota-deploy-progress{display:flex;flex-direction:column;gap:var(--spacing-sm)}.ota-deploy-progress-header{display:flex;align-items:center;justify-content:space-between}.ota-deploy-progress-bar-container{position:relative;height:24px;background-color:var(--color-bg-secondary);border-radius:var(--border-radius-sm);overflow:hidden}.ota-deploy-progress-bar{height:100%;background-color:var(--color-primary);border-radius:var(--border-radius-sm);transition:width .3s ease}.ota-deploy-progress-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.ota-deploy-success{color:var(--color-success);font-size:var(--font-size-sm);margin:0}.ota-deploy-skipped{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin:0}.ota-deploy-error{color:var(--color-danger);font-size:var(--font-size-sm);margin:0}.fw-matrix-wrap{overflow-x:auto;border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem)}.fw-matrix{width:100%;border-collapse:collapse;font-size:var(--font-size-sm, .875rem)}.fw-matrix thead th{text-align:left;padding:.6rem .75rem;font-weight:600;color:var(--color-text-secondary, #6b7280);border-bottom:1px solid var(--color-border, #e5e7eb);white-space:nowrap}.fw-matrix td{padding:.6rem .75rem;border-bottom:1px solid var(--color-border-subtle, #f1f5f9);vertical-align:top}.fw-bt-name{font-weight:600;color:var(--color-text, #111827)}.fw-subtle{color:var(--color-text-secondary, #6b7280);font-size:.8rem}.fw-profile{font-family:var(--font-mono, monospace);font-size:.78rem;padding:.05rem .4rem;border-radius:var(--radius-sm, .25rem);background:var(--color-surface-alt, #f1f5f9)}.fw-no-profile{color:var(--color-warning, #d97706);font-size:.8rem}.fw-ver{font-variant-numeric:tabular-nums;font-weight:500}.fw-dist{display:flex;flex-wrap:wrap;gap:.25rem}.fw-dist-chip{font-size:.72rem;padding:.05rem .4rem;border-radius:999px;background:var(--color-surface-alt, #f1f5f9);color:var(--color-text-secondary, #6b7280);white-space:nowrap}.fw-dist-chip.is-behind{color:var(--color-warning, #d97706);font-weight:600}.fw-actions{white-space:nowrap}.fw-link{border:none;background:none;color:var(--color-primary, #2563eb);cursor:pointer;font-size:var(--font-size-sm, .875rem);padding:.1rem .4rem}.fw-link:hover{text-decoration:underline}.fw-danger{color:var(--color-danger, #dc2626)}.fleet-filters{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem}.fleet-filters select,.fleet-filter-search{padding:.4rem .6rem;font-size:var(--font-size-sm, .875rem);border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem);background:var(--color-surface, #fff);color:var(--color-text, #111827)}.fleet-filter-search{flex:1 1 12rem;min-width:10rem}.fleet-filter-check{display:flex;align-items:center;gap:.35rem;font-size:var(--font-size-sm, .875rem);color:var(--color-text-secondary, #6b7280);white-space:nowrap}.fleet-table-wrap{overflow-x:auto;border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem)}.fleet-table{width:100%;border-collapse:collapse;font-size:var(--font-size-sm, .875rem)}.fleet-table thead th{text-align:left;padding:.6rem .75rem;font-weight:600;color:var(--color-text-secondary, #6b7280);border-bottom:1px solid var(--color-border, #e5e7eb);white-space:nowrap}.fleet-table td{padding:.6rem .75rem;border-bottom:1px solid var(--color-border-subtle, #f1f5f9);vertical-align:top}.fleet-row{cursor:pointer}.fleet-row:hover{background:var(--color-surface-hover, #f8fafc)}.fleet-col-check{width:2rem;text-align:center}.fleet-status-cell{display:flex;align-items:center;gap:.4rem}.fleet-error-badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .35rem;font-size:.7rem;font-weight:700;color:#fff;background:var(--color-danger, #dc2626);border-radius:999px}.fleet-room{font-weight:600;color:var(--color-text, #111827)}.fleet-subtle{color:var(--color-text-secondary, #6b7280);font-size:.8rem}.fleet-board{font-weight:500}.fleet-chips{display:flex;flex-wrap:wrap;gap:.25rem;margin-top:.2rem}.fleet-chip{font-size:.68rem;padding:.05rem .35rem;border-radius:var(--radius-sm, .25rem);background:var(--color-surface-alt, #f1f5f9);color:var(--color-text-secondary, #6b7280)}.fleet-cap-badge{margin-left:.4rem;font-size:.68rem;font-weight:600;padding:.05rem .35rem;border-radius:999px;color:#fff;background:var(--color-warning, #d97706);white-space:nowrap}.fleet-fw{font-variant-numeric:tabular-nums}.fleet-fw-drift{color:var(--color-warning, #d97706);font-weight:600;font-size:.8rem}.fleet-stale{color:var(--color-danger, #dc2626)}.fleet-cert-warn{color:var(--color-warning, #d97706);font-weight:600}.fleet-empty{padding:2rem;text-align:center;color:var(--color-text-secondary, #6b7280);border:1px dashed var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem)}.adoption-inbox{display:flex;flex-direction:column;gap:.5rem;padding:.6rem .9rem;margin-bottom:1rem;border:1px solid var(--color-warning-border, #fcd34d);background:var(--color-warning-bg, #fffbeb);border-radius:var(--radius-md, .5rem);font-size:var(--font-size-sm, .875rem);color:var(--color-warning-text, #92400e)}.adoption-inbox-line{display:flex;align-items:center;gap:.6rem}.adoption-inbox-line code{font-family:var(--font-mono, monospace);font-size:.8em}.adoption-inbox-icon{font-size:1rem}.adoption-inbox-text{flex:1;font-weight:500}.adoption-inbox-review{padding:.3rem .8rem;font-size:var(--font-size-sm, .875rem);font-weight:600;color:#fff;background:var(--color-warning, #d97706);border:none;border-radius:var(--radius-md, .5rem);cursor:pointer}.adoption-inbox-review:hover{filter:brightness(.95)}@media (prefers-color-scheme: dark){.adoption-inbox{background:#d977061f;color:#fcd34d}}.fleet-bulk-bar{position:sticky;bottom:0;display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-top:.75rem;padding:.6rem .9rem;background:var(--color-surface, #fff);border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem);box-shadow:0 -4px 12px #0000000f;z-index:var(--z-sticky, 1020)}.fleet-bulk-count{font-weight:600;font-size:var(--font-size-sm, .875rem);color:var(--color-text, #111827)}.fleet-bulk-actions{display:flex;align-items:center;gap:.5rem}.fleet-bulk-clear{padding:.3rem .7rem;font-size:var(--font-size-sm, .875rem);border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem);background:none;color:var(--color-text-secondary, #6b7280);cursor:pointer}.fleet-bulk-result{font-size:var(--font-size-sm, .875rem);color:var(--color-text-secondary, #6b7280)}.add-device-form{display:flex;flex-direction:column;gap:.7rem}.add-device-field{display:flex;flex-direction:column;gap:.25rem;font-size:.8rem;color:var(--color-text-secondary, #6b7280)}.add-device-input{padding:.45rem .6rem;font-size:var(--font-size-sm, .875rem);border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem);background:var(--color-surface, #fff);color:var(--color-text, #111827)}.fleet-page{position:relative}.fleet-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:1rem}.fleet-title{font-size:1.5rem;font-weight:700;margin:0;color:var(--color-text, #111827)}.fleet-subtitle{margin:.15rem 0 0;color:var(--color-text-secondary, #6b7280);font-size:var(--font-size-sm, .875rem)}.drawer-section{margin-bottom:1.25rem}.drawer-section-title{margin:0 0 .5rem;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-secondary, #6b7280)}.drawer-detail-row{display:flex;justify-content:space-between;gap:1rem;padding:.35rem 0;border-bottom:1px solid var(--color-border-subtle, #f1f5f9)}.drawer-detail-label{color:var(--color-text-secondary, #6b7280)}.drawer-detail-value{text-align:right;color:var(--color-text, #111827)}.drawer-detail-value.mono{font-family:var(--font-mono, monospace);font-size:.8rem}.drawer-muted{color:var(--color-text-secondary, #6b7280)}.drawer-warn{color:var(--color-warning, #d97706);font-weight:600}.drawer-cap-banner{padding:.6rem .75rem;margin-bottom:1rem;font-size:.8rem;border:1px solid var(--color-warning-border, #fcd34d);background:var(--color-warning-bg, #fffbeb);color:var(--color-warning-text, #92400e);border-radius:var(--radius-md, .5rem)}.drawer-form-group{margin-bottom:.9rem}.drawer-form-label{display:block;margin-bottom:.25rem;font-size:.8rem;color:var(--color-text-secondary, #6b7280)}.drawer-form-input{width:100%;padding:.45rem .6rem;font-size:var(--font-size-sm, .875rem);border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem);background:var(--color-surface, #fff);color:var(--color-text, #111827)}.drawer-form-actions{display:flex;align-items:center;gap:.75rem;margin-top:1rem}.drawer-form-error{color:var(--color-danger, #dc2626);font-size:.8rem;margin-bottom:.5rem}.drawer-form-note{color:var(--color-text-secondary, #6b7280);font-size:.78rem}.drawer-adopt{display:flex;flex-direction:column;align-items:flex-start;gap:.5rem;padding:.75rem;margin-bottom:1rem;border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem);background:var(--color-surface-alt, #f8fafc)}.drawer-adopt.is-pending{border-color:var(--color-primary, #2563eb);background:#2563eb0f}.drawer-adopt-note{font-size:.8rem;color:var(--color-text-secondary, #6b7280)}.history-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.6rem}.history-item{padding:.5rem .7rem;border-left:2px solid var(--color-primary, #2563eb);background:var(--color-surface-alt, #f8fafc);border-radius:0 var(--radius-md, .5rem) var(--radius-md, .5rem) 0}.history-room{font-weight:600;color:var(--color-text, #111827)}.history-span{font-size:.8rem;color:var(--color-text-secondary, #6b7280)}.history-by{font-size:.75rem;color:var(--color-text-secondary, #6b7280);font-style:italic}.ts-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:.75rem;flex-wrap:wrap;margin-bottom:.75rem}.ts-toolbar .drawer-form-group{margin-bottom:0}.ts-ack-all{border:1px solid var(--color-border, #d1d5db);background:var(--color-surface, #fff);color:var(--color-primary, #2563eb);font-size:.8rem;padding:.35rem .7rem;border-radius:var(--radius-sm, .25rem);cursor:pointer;white-space:nowrap}.ts-ack-all:hover:not(:disabled){background:var(--color-surface-alt, #f1f5f9)}.ts-ack-all:disabled{opacity:.6;cursor:default}.evt-timeline{display:flex;flex-direction:column;gap:.5rem}.evt-row{display:flex;gap:.6rem;padding:.5rem 0;border-bottom:1px solid var(--color-border-subtle, #f1f5f9)}.evt-sev{flex:0 0 auto;align-self:flex-start;font-size:.64rem;font-weight:700;letter-spacing:.03em;padding:.1rem .4rem;border-radius:999px;color:#fff}.evt-info{background:#6b7280}.evt-warning{background:#d97706}.evt-error{background:#dc2626}.evt-critical{background:#991b1b}.evt-main{flex:1;min-width:0}.evt-line{display:flex;align-items:center;gap:.5rem}.evt-type{font-weight:600;font-size:.8rem;color:var(--color-text, #111827)}.evt-count{font-size:.72rem;font-weight:700;color:#fff;background:var(--color-danger, #dc2626);border-radius:999px;padding:.05rem .4rem}.evt-ack{margin-left:auto;flex-shrink:0;border:1px solid var(--color-border, #d1d5db);background:var(--color-surface, #fff);color:var(--color-primary, #2563eb);font-size:.72rem;padding:.1rem .5rem;border-radius:var(--radius-sm, .25rem);cursor:pointer}.evt-ack:hover:not(:disabled){background:var(--color-surface-alt, #f1f5f9)}.evt-ack:disabled{opacity:.6;cursor:default}.evt-acked{margin-left:auto;flex-shrink:0;font-size:.72rem;color:var(--color-success, #16a34a)}.evt-message{font-size:.82rem;color:var(--color-text, #111827);word-break:break-word}.evt-time{font-size:.72rem;color:var(--color-text-secondary, #6b7280);margin-top:.1rem}.evt-empty{padding:1.5rem;text-align:center;color:var(--color-text-secondary, #6b7280)}.evt-more{margin-top:.5rem;padding:.4rem;font-size:var(--font-size-sm, .875rem);border:1px solid var(--color-border, #e5e7eb);border-radius:var(--radius-md, .5rem);background:var(--color-surface, #fff);color:var(--color-text, #111827);cursor:pointer}.device-drawer-scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000040;z-index:var(--z-modal-backdrop, 1040)}.device-drawer{position:fixed;top:0;right:0;bottom:0;width:min(560px,100%);display:flex;flex-direction:column;background:var(--color-surface, #fff);border-left:1px solid var(--color-border, #e5e7eb);box-shadow:-8px 0 24px #0000001f;z-index:var(--z-modal, 1050)}.device-drawer-head{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--color-border, #e5e7eb)}.device-drawer-title{display:flex;flex-direction:column}.device-drawer-room{font-weight:700;font-size:1.05rem;color:var(--color-text, #111827)}.device-drawer-id{font-size:.8rem;color:var(--color-text-secondary, #6b7280);font-family:var(--font-mono, monospace)}.device-drawer-head-right{display:flex;align-items:center;gap:.75rem}.device-drawer-close{border:none;background:none;font-size:1.1rem;cursor:pointer;color:var(--color-text-secondary, #6b7280);line-height:1}.device-drawer-tabs{display:flex;gap:.25rem;padding:0 1rem;border-bottom:1px solid var(--color-border, #e5e7eb);overflow-x:auto}.device-drawer-tab{padding:.6rem .75rem;border:none;background:none;font-size:var(--font-size-sm, .875rem);color:var(--color-text-secondary, #6b7280);cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap}.device-drawer-tab.is-active{color:var(--color-primary, #2563eb);border-bottom-color:var(--color-primary, #2563eb);font-weight:600}.device-drawer-body{flex:1;overflow-y:auto;padding:1.25rem}.drawer-tab{font-size:var(--font-size-sm, .875rem)}@media (max-width: 768px){.device-drawer{width:100%;border-left:none}}.confirm-modal-content{display:flex;flex-direction:column;gap:var(--spacing-md)}.confirm-modal-message{color:var(--color-text-primary);font-size:var(--font-size-base);line-height:1.5;margin:0}.confirm-modal-detail{color:var(--color-danger);font-size:var(--font-size-sm);line-height:1.5;margin:0;padding:var(--spacing-sm) var(--spacing-md);background-color:#ef44441a;border-radius:var(--border-radius-sm);border-left:3px solid var(--color-danger)}.confirm-modal-typed{display:flex;flex-direction:column;gap:var(--spacing-xs)}.confirm-modal-typed-label{color:var(--color-text-secondary);font-size:var(--font-size-sm)}.confirm-modal-error{color:var(--color-danger);font-size:var(--font-size-sm);margin:0}.rooms-page{width:100%;max-width:900px}.rooms-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:var(--spacing-xl)}.rooms-header-text{flex:1}.rooms-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-sm)}.rooms-subtitle{font-size:var(--font-size-lg);color:var(--color-text-secondary);margin:0}.rooms-table-wrap{overflow-x:auto}.rooms-table{width:100%;border-collapse:collapse}.rooms-table th,.rooms-table td{text-align:left;padding:var(--spacing-sm) var(--spacing-md);border-bottom:1px solid var(--color-border);font-size:var(--font-size-sm);white-space:nowrap}.rooms-table th{font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);background:var(--color-bg-secondary)}.rooms-table td{color:var(--color-text-primary)}.rooms-desc-cell{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rooms-actions{display:flex;gap:var(--spacing-sm)}.rooms-edit-btn,.rooms-delete-btn{padding:4px 10px;font-size:var(--font-size-sm);background:none;border:1px solid;border-radius:var(--border-radius-md);cursor:pointer;font-family:inherit;transition:background var(--transition-base),color var(--transition-base)}.rooms-edit-btn{color:var(--color-primary);border-color:var(--color-primary)}.rooms-edit-btn:hover{background:var(--color-primary);color:#fff}.rooms-delete-btn{color:var(--color-danger);border-color:var(--color-danger)}.rooms-delete-btn:hover{background:var(--color-danger);color:#fff}.rooms-message{font-size:var(--font-size-sm);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-md);margin-bottom:var(--spacing-md)}.rooms-message--success{color:var(--color-success);background:rgba(var(--color-success-rgb, 34, 197, 94),.1)}.rooms-message--error{color:var(--color-danger);background:rgba(var(--color-danger-rgb, 239, 68, 68),.1)}.rooms-form{display:flex;flex-direction:column;gap:var(--spacing-md)}.rooms-form-group{display:flex;flex-direction:column;gap:var(--spacing-xs)}.rooms-form-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.rooms-form-input,.rooms-form-textarea{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);color:var(--color-text-primary);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--border-radius-md);font-family:inherit}.rooms-form-input:focus,.rooms-form-textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px rgba(var(--color-primary-rgb, 59, 130, 246),.15)}.rooms-form-textarea{min-height:80px;resize:vertical}.rooms-form-error{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);color:var(--color-danger);background:rgba(var(--color-danger-rgb, 239, 68, 68),.1);border-radius:var(--border-radius-md)}.rooms-form-actions{display:flex;gap:var(--spacing-sm);justify-content:flex-end}@media (max-width: 640px){.rooms-header{flex-direction:column;gap:var(--spacing-md)}.rooms-table th:nth-child(4),.rooms-table td:nth-child(4){display:none}}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--spacing-3xl) var(--spacing-xl);min-height:300px}.empty-icon{font-size:4rem;margin-bottom:var(--spacing-lg);opacity:.5}.empty-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-bottom:var(--spacing-sm)}.empty-description{font-size:var(--font-size-base);color:var(--color-text-secondary);max-width:400px;margin-bottom:var(--spacing-lg)}.firmware-page{width:100%;display:flex;flex-direction:column;gap:var(--spacing-lg)}.firmware-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--spacing-md);margin-bottom:var(--spacing-sm)}.firmware-header-text{flex:1;min-width:0}.firmware-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin:0 0 var(--spacing-xs) 0}.firmware-subtitle{font-size:var(--font-size-base);color:var(--color-text-secondary);margin:0}.firmware-header-actions{flex-shrink:0;padding-top:var(--spacing-xs)}.firmware-content{min-height:200px}.firmware-grid{display:grid;gap:var(--spacing-lg);grid-template-columns:1fr}@media (min-width: 1024px){.firmware-grid{grid-template-columns:repeat(2,1fr)}}.provision-attempts-section{background:var(--color-warning-bg, #fef3cd);border:1px solid var(--color-warning-border, #ffc107);border-radius:var(--radius-md);padding:var(--spacing-md) var(--spacing-lg)}.provision-attempts-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0 0 var(--spacing-xs) 0}.provision-attempts-desc{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin:0 0 var(--spacing-md) 0}.provision-attempts-list{display:flex;flex-direction:column;gap:var(--spacing-sm)}.provision-attempt-row{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-md);padding:var(--spacing-sm) var(--spacing-md);background:var(--color-bg-primary);border-radius:var(--radius-sm);border:1px solid var(--color-border)}.provision-attempt-info{display:flex;align-items:center;gap:var(--spacing-md);flex-wrap:wrap;min-width:0}.provision-attempt-magic{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);background:var(--color-bg-secondary);padding:2px 8px;border-radius:var(--radius-sm)}.provision-attempt-count{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.provision-attempt-time{font-size:var(--font-size-sm);color:var(--color-text-tertiary)}.provision-attempt-device,.provision-attempt-chip{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.provision-attempt-actions{display:flex;align-items:center;gap:var(--spacing-xs);flex-shrink:0}@media (max-width: 640px){.provision-attempt-row{flex-direction:column;align-items:stretch}.provision-attempt-actions{justify-content:flex-end}}@media (max-width: 640px){.firmware-header{flex-direction:column;align-items:stretch}.firmware-header-actions{padding-top:0}}.analytics{width:100%}.analytics-header{margin-bottom:var(--spacing-xl)}.analytics-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-md)}.analytics-controls{display:flex;align-items:flex-start;gap:var(--spacing-md);flex-wrap:wrap}.analytics-select{padding:var(--spacing-sm) var(--spacing-md);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background:var(--color-surface);color:var(--color-text-primary);font-size:var(--font-size-sm);min-width:200px}.analytics-section{margin-bottom:var(--spacing-xl)}.time-range-controls{display:flex;flex-direction:column;align-items:flex-start;gap:var(--spacing-sm)}.time-range-buttons{display:flex;gap:var(--spacing-xs);flex-wrap:wrap}.time-range-btn{padding:var(--spacing-xs) var(--spacing-md);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background:transparent;color:var(--color-text-secondary);font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast)}.time-range-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.time-range-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.time-range-btn:disabled{opacity:.4;cursor:not-allowed}.custom-range-picker{display:flex;align-items:center;gap:var(--spacing-sm);flex-wrap:wrap}.date-input{padding:var(--spacing-xs) var(--spacing-sm);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background:var(--color-bg-primary);color:var(--color-text-primary);font-size:var(--font-size-sm);font-family:var(--font-family-mono)}.date-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #6366f133}.date-separator{font-size:var(--font-size-sm);color:var(--color-text-tertiary)}.chart-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--spacing-sm)}.metric-selector{display:flex;gap:var(--spacing-xs);flex-wrap:wrap}.metric-btn{padding:var(--spacing-xs) var(--spacing-md);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background:transparent;color:var(--color-text-secondary);font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast)}.metric-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.metric-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.chart-stats-strip{display:flex;gap:var(--spacing-xl);padding:var(--spacing-sm) 0;padding-top:var(--spacing-md);flex-wrap:wrap;border-top:var(--border-width) solid var(--color-border);margin-top:var(--spacing-md)}.chart-stats-item{display:flex;flex-direction:column;gap:2px}.chart-stats-label{font-size:var(--font-size-xs);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em}.chart-stats-value{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);font-family:var(--font-family-mono);color:var(--color-text-primary)}.raw-controls{display:flex;align-items:center;gap:var(--spacing-md);flex-wrap:wrap}.raw-device-select{min-width:220px}.raw-table-wrap{overflow-x:auto;margin-bottom:var(--spacing-md)}.raw-table{width:100%;border-collapse:collapse;font-size:var(--font-size-sm);font-family:var(--font-family-mono)}.raw-table th{text-align:left;padding:var(--spacing-xs) var(--spacing-sm);border-bottom:2px solid var(--color-border);color:var(--color-text-secondary);font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;font-family:var(--font-family-base)}.raw-table td{padding:var(--spacing-xs) var(--spacing-sm);border-bottom:var(--border-width) solid var(--color-border);color:var(--color-text-primary);white-space:nowrap}.raw-table tbody tr:hover{background:var(--color-surface-hover, rgba(255,255,255,.03))}.raw-time{color:var(--color-text-secondary)}.raw-val{text-align:right}.readings-null{color:var(--color-text-tertiary)}.raw-pagination{display:flex;align-items:center;gap:var(--spacing-md);justify-content:center;padding-top:var(--spacing-sm)}.raw-page-info{font-size:var(--font-size-sm);color:var(--color-text-secondary);font-family:var(--font-family-mono);min-width:80px;text-align:center}.raw-zoom-badge{display:inline-block;margin-left:var(--spacing-sm);padding:1px 8px;font-size:var(--font-size-xs);font-weight:var(--font-weight-normal);background:var(--color-primary);color:#fff;border-radius:var(--border-radius-full, 9999px);vertical-align:middle;letter-spacing:.04em;text-transform:uppercase}.no-data-msg{color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.chart-engine-toggle{display:flex;align-items:center;gap:var(--spacing-xs, .25rem);margin-bottom:var(--spacing-sm, .5rem)}.chart-engine-note{margin-left:auto;color:var(--color-text-secondary, #6b7280);font-size:var(--font-size-xs, .75rem);font-variant-numeric:tabular-nums}.rule-card{display:flex;flex-direction:column;gap:var(--spacing-sm)}.rule-card-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-sm);padding-bottom:var(--spacing-sm);border-bottom:var(--border-width) solid var(--color-divider)}.rule-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rule-card-badges{display:flex;gap:var(--spacing-xs);flex-shrink:0}.rule-card-description{font-size:var(--font-size-xs);color:var(--color-text-secondary);margin:0;line-height:1.4}.rule-card-conditions{display:flex;flex-direction:column;gap:2px}.rule-card-condition-item{display:flex;align-items:baseline;gap:var(--spacing-xs);padding-left:var(--spacing-sm)}.rule-card-condition-text{font-size:var(--font-size-sm);color:var(--color-warning);font-family:var(--font-family-mono)}.rule-card-logic{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;font-weight:var(--font-weight-semibold)}.rule-card-action-pair{display:flex;flex-direction:column;gap:2px}.rule-card-action{display:flex;align-items:baseline;gap:var(--spacing-xs)}.rule-card-action-text{font-size:var(--font-size-sm);color:var(--color-primary);font-family:var(--font-family-mono)}.rule-card-meta{display:flex;flex-direction:column;gap:var(--spacing-xs);padding-top:var(--spacing-xs);border-top:var(--border-width) solid var(--color-divider)}.rule-card-row{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-sm)}.rule-card-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}.rule-card-value{font-size:var(--font-size-xs);color:var(--color-text-secondary);font-family:var(--font-family-mono);text-align:right}.rule-card-cmd-acknowledged{color:var(--color-success)}.rule-card-cmd-sent{color:var(--color-warning)}.rule-card-cmd-failed{color:var(--color-danger)}.rule-card-actions{display:flex;gap:var(--spacing-xs);flex-wrap:wrap;padding-top:var(--spacing-sm);border-top:var(--border-width) solid var(--color-divider)}.rule-filter-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-md);flex-wrap:wrap}.rule-filter-controls{display:flex;align-items:center;gap:var(--spacing-sm);flex-wrap:wrap}.rule-filter-select{padding:var(--spacing-xs) var(--spacing-sm);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background-color:var(--color-bg-elevated);color:var(--color-text-primary);font-size:var(--font-size-sm);cursor:pointer;outline:none;transition:border-color var(--transition-fast)}.rule-filter-select:hover{border-color:var(--color-border-hover)}.rule-filter-select:focus{border-color:var(--color-primary)}.rule-filter-count{font-size:var(--font-size-sm);color:var(--color-text-secondary);padding-left:var(--spacing-sm)}.rule-form{display:flex;flex-direction:column;gap:var(--spacing-md)}.rule-form-error{padding:var(--spacing-sm) var(--spacing-md);background-color:var(--color-danger-light);color:var(--color-danger);border-radius:var(--border-radius-md);font-size:var(--font-size-sm)}.rule-form-section-title{display:flex;align-items:center;gap:var(--spacing-sm);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em;padding-top:var(--spacing-xs);border-top:var(--border-width) solid var(--color-divider)}.rule-form-logic-select{padding:2px var(--spacing-xs);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-sm);background-color:var(--color-bg-elevated);color:var(--color-text-primary);font-size:var(--font-size-xs);font-family:inherit;text-transform:none;letter-spacing:normal}.rule-form-group{display:flex;flex-direction:column;gap:var(--spacing-xs);flex:1}.rule-form-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.rule-form-input{padding:var(--spacing-sm);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background-color:var(--color-bg-elevated);color:var(--color-text-primary);font-size:var(--font-size-sm);font-family:inherit;outline:none;transition:border-color var(--transition-fast)}.rule-form-input:focus{border-color:var(--color-primary)}.rule-form-input::placeholder{color:var(--color-text-tertiary)}.rule-form-input-sm{min-width:0;flex:2}.rule-form-input-xs{min-width:0;flex:0 0 60px;text-align:center}.rule-form-input-num{min-width:0;flex:1}.rule-form-condition-row{display:flex;align-items:center;gap:var(--spacing-xs)}.rule-form-condition-fields{display:flex;gap:var(--spacing-xs);flex:1;align-items:center}.rule-form-remove-btn{flex-shrink:0;width:24px;height:24px;border:none;border-radius:var(--border-radius-sm);background:var(--color-danger-light);color:var(--color-danger);font-size:var(--font-size-xs);cursor:pointer;display:flex;align-items:center;justify-content:center;line-height:1}.rule-form-remove-btn:hover{background:var(--color-danger);color:#fff}.rule-form-add-btn{align-self:flex-start;padding:var(--spacing-xs) var(--spacing-sm);border:var(--border-width) dashed var(--color-border);border-radius:var(--border-radius-md);background:transparent;color:var(--color-text-secondary);font-size:var(--font-size-sm);cursor:pointer;transition:all var(--transition-fast)}.rule-form-add-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.rule-form-action-pair{display:flex;gap:var(--spacing-md)}.rule-form-action-group{flex:1;display:flex;flex-direction:column;gap:var(--spacing-xs);padding:var(--spacing-sm);border:var(--border-width) solid var(--color-divider);border-radius:var(--border-radius-md)}.rule-form-action-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}.rule-form-row-fields{display:flex;gap:var(--spacing-md)}@media (max-width: 640px){.rule-form-condition-fields{flex-wrap:wrap}.rule-form-action-pair,.rule-form-row-fields{flex-direction:column}}.rule-form-hint{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.rule-form-actions{display:flex;gap:var(--spacing-sm);justify-content:flex-end;width:100%}.rules-page{width:100%;display:flex;flex-direction:column;gap:var(--spacing-lg)}.rules-header{margin-bottom:var(--spacing-sm)}.rules-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-xs)}.rules-subtitle{font-size:var(--font-size-base);color:var(--color-text-secondary);margin:0}.rules-content{min-height:200px}.rules-grid{display:grid;gap:var(--spacing-lg);grid-template-columns:1fr}@media (min-width: 640px){.rules-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.rules-grid{grid-template-columns:repeat(3,1fr)}}.error-boundary-container{display:flex;align-items:center;justify-content:center;min-height:400px;padding:var(--spacing-xl)}.error-boundary-card{max-width:600px;text-align:center}.error-boundary-icon{font-size:4rem;margin-bottom:var(--spacing-lg)}.error-boundary-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin-bottom:var(--spacing-md)}.error-boundary-message{font-size:var(--font-size-base);color:var(--color-text-secondary);margin-bottom:var(--spacing-lg)}.error-boundary-details{text-align:left;margin-bottom:var(--spacing-lg);background-color:var(--color-bg-secondary);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);padding:var(--spacing-md)}.error-boundary-details summary{cursor:pointer;font-weight:var(--font-weight-medium);margin-bottom:var(--spacing-sm);color:var(--color-text-primary)}.error-boundary-stack{font-family:var(--font-family-mono);font-size:var(--font-size-xs);color:var(--color-text-secondary);overflow-x:auto;white-space:pre-wrap;word-wrap:break-word;margin:0}.error-boundary-actions{display:flex;gap:var(--spacing-sm);justify-content:center}.alert-rule-card{display:flex;flex-direction:column;gap:var(--spacing-sm)}.alert-rule-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--spacing-sm);padding-bottom:var(--spacing-sm);border-bottom:var(--border-width) solid var(--color-divider)}.alert-rule-card-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.alert-rule-card-badges{display:flex;gap:var(--spacing-xs);flex-shrink:0}.alert-rule-card-condition{display:flex;flex-direction:column;gap:var(--spacing-xs)}.alert-rule-card-condition-text{font-size:var(--font-size-sm);color:var(--color-text-primary);font-family:var(--font-family-mono)}.alert-rule-card-hint{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.alert-rule-card-meta{display:flex;flex-direction:column;gap:var(--spacing-xs);padding-top:var(--spacing-xs);border-top:var(--border-width) solid var(--color-divider)}.alert-rule-card-row{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-sm)}.alert-rule-card-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}.alert-rule-card-value{font-size:var(--font-size-xs);color:var(--color-text-secondary);text-align:right}.alert-rule-card-recipients{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}.alert-rule-card-actions{display:flex;gap:var(--spacing-xs);flex-wrap:wrap;padding-top:var(--spacing-sm);border-top:var(--border-width) solid var(--color-divider)}.alert-form{display:flex;flex-direction:column;gap:var(--spacing-md)}.alert-form-error{padding:var(--spacing-sm) var(--spacing-md);background-color:var(--color-danger-light);color:var(--color-danger);border-radius:var(--border-radius-md);font-size:var(--font-size-sm)}.alert-form-section-title{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em;padding-top:var(--spacing-xs);border-top:var(--border-width) solid var(--color-divider)}.alert-form-group{display:flex;flex-direction:column;gap:var(--spacing-xs);flex:1}.alert-form-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.alert-form-input{padding:var(--spacing-sm);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background-color:var(--color-bg-elevated);color:var(--color-text-primary);font-size:var(--font-size-sm);font-family:inherit;outline:none;transition:border-color var(--transition-fast)}.alert-form-input:focus{border-color:var(--color-primary)}.alert-form-input::placeholder{color:var(--color-text-tertiary)}.alert-form-textarea{resize:vertical;min-height:72px;line-height:1.5}.alert-form-row-fields{display:flex;gap:var(--spacing-md)}@media (max-width: 480px){.alert-form-row-fields{flex-direction:column}}.alert-form-hint{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.alert-form-checkbox-group{display:flex;align-items:center}.alert-form-checkbox-label{display:flex;align-items:center;gap:var(--spacing-xs);font-size:var(--font-size-sm);color:var(--color-text-primary);cursor:pointer}.alert-form-checkbox-label input[type=checkbox]{width:16px;height:16px;accent-color:var(--color-primary);cursor:pointer}.alert-form-actions{display:flex;gap:var(--spacing-sm);justify-content:flex-end;width:100%}.notif-page{width:100%;display:flex;flex-direction:column;gap:var(--spacing-lg)}.notif-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--spacing-md);margin-bottom:var(--spacing-sm)}.notif-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-xs)}.notif-subtitle{font-size:var(--font-size-base);color:var(--color-text-secondary);margin:0}.notif-section{margin-bottom:var(--spacing-xl)}.notif-section-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-md);margin-bottom:var(--spacing-md)}.notif-section-header h2{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0}.notif-count{font-size:var(--font-size-sm);color:var(--color-text-tertiary);margin-bottom:var(--spacing-md)}.notif-grid{display:grid;gap:var(--spacing-lg);grid-template-columns:1fr}@media (min-width: 640px){.notif-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.notif-grid{grid-template-columns:repeat(3,1fr)}}.notif-template-card{display:flex;flex-direction:column}.notif-template-type{font-size:var(--font-size-base);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-xs)}.notif-template-subject{font-size:var(--font-size-sm);color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:var(--spacing-md)}.notif-template-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-sm)}.notif-modal-form{display:flex;flex-direction:column;gap:var(--spacing-md)}.notif-modal-field{display:flex;flex-direction:column;gap:var(--spacing-xs)}.notif-modal-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.notif-modal-checkbox-label{display:flex;align-items:center;gap:var(--spacing-xs);cursor:pointer}.notif-modal-input{width:100%;padding:var(--spacing-sm);font-size:var(--font-size-sm);color:var(--color-text-primary);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--border-radius-sm);outline:none;transition:border-color .15s;box-sizing:border-box}.notif-modal-input:focus{border-color:var(--color-primary)}.notif-modal-textarea{width:100%;min-height:200px;padding:var(--spacing-sm);font-family:var(--font-family-mono);font-size:var(--font-size-sm);color:var(--color-text-primary);background:var(--color-bg-primary);border:1px solid var(--color-border);border-radius:var(--border-radius-sm);outline:none;resize:vertical;transition:border-color .15s;box-sizing:border-box}.notif-modal-textarea:focus{border-color:var(--color-primary)}.notif-modal-hint{padding:var(--spacing-sm) var(--spacing-md);background:var(--color-bg-secondary);border-radius:var(--border-radius-md);font-size:var(--font-size-xs);color:var(--color-text-secondary);line-height:1.6}.notif-modal-hint code{font-family:var(--font-family-mono);font-size:var(--font-size-xs);background:var(--color-bg-primary);padding:1px 4px;border-radius:var(--border-radius-sm);border:1px solid var(--color-divider)}.notif-modal-preview{border:1px solid var(--color-border);border-radius:var(--border-radius-md);padding:var(--spacing-md);background:var(--color-bg-primary);max-height:300px;overflow-y:auto;font-size:var(--font-size-sm)}.notif-modal-message{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-sm);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.notif-modal-message-success{color:var(--color-success);background:#22c55e14;border:1px solid var(--color-success)}.notif-modal-message-error{color:var(--color-danger);background:#ef444414;border:1px solid var(--color-danger)}@media (max-width: 640px){.notif-header{flex-direction:column;align-items:stretch}.notif-section-header{flex-direction:column;align-items:stretch;gap:var(--spacing-sm)}}.settings{width:100%;max-width:640px}.settings-header{margin-bottom:var(--spacing-xl)}.settings-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-sm)}.settings-subtitle{font-size:var(--font-size-lg);color:var(--color-text-secondary);margin:0}.settings-card{margin-bottom:var(--spacing-xl)}.settings-form{display:flex;flex-direction:column;gap:var(--spacing-md)}.form-group{display:flex;flex-direction:column;gap:var(--spacing-xs)}.form-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.form-input{padding:var(--spacing-sm) var(--spacing-md);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);background:var(--color-bg-primary);color:var(--color-text-primary);font-size:var(--font-size-base);transition:border-color var(--transition-fast)}.form-input:focus{outline:none;border-color:var(--color-primary)}.form-input-disabled{opacity:.6;cursor:not-allowed}.form-value{font-size:var(--font-size-base);color:var(--color-text-primary);padding:var(--spacing-xs) 0}.form-hint{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.form-error{color:var(--color-danger);font-size:var(--font-size-sm);margin:0}.form-success{color:var(--color-success);font-size:var(--font-size-sm);margin:0}.btn{padding:var(--spacing-sm) var(--spacing-lg);border:none;border-radius:var(--border-radius-md);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--transition-fast);align-self:flex-start}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover)}.users-page{width:100%;max-width:900px}.users-header{margin-bottom:var(--spacing-xl)}.users-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-sm)}.users-subtitle{font-size:var(--font-size-lg);color:var(--color-text-secondary);margin:0}.users-table-wrap{overflow-x:auto}.users-table{width:100%;border-collapse:collapse}.users-table th,.users-table td{text-align:left;padding:var(--spacing-sm) var(--spacing-md);border-bottom:1px solid var(--color-border);font-size:var(--font-size-sm);white-space:nowrap}.users-table th{font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);background:var(--color-bg-secondary)}.users-table td{color:var(--color-text-primary)}.users-name-cell{display:flex;align-items:center;gap:var(--spacing-sm)}.users-you-badge{font-size:var(--font-size-xs);color:var(--color-primary);background:rgba(var(--color-primary-rgb, 59, 130, 246),.1);padding:2px 6px;border-radius:var(--border-radius-sm);font-weight:var(--font-weight-medium)}.users-role-select{padding:4px 8px;font-size:var(--font-size-sm);color:var(--color-text-primary);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--border-radius-md);cursor:pointer;font-family:inherit}.users-role-select:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px rgba(var(--color-primary-rgb, 59, 130, 246),.15)}.users-role-select:disabled{opacity:.5;cursor:not-allowed}.users-actions{display:flex;gap:var(--spacing-sm)}.users-delete-btn{padding:4px 10px;font-size:var(--font-size-sm);color:var(--color-danger);background:none;border:1px solid var(--color-danger);border-radius:var(--border-radius-md);cursor:pointer;font-family:inherit;transition:background var(--transition-base),color var(--transition-base)}.users-delete-btn:hover{background:var(--color-danger);color:#fff}.users-message{font-size:var(--font-size-sm);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-md);margin-bottom:var(--spacing-md)}.users-message--success{color:var(--color-success);background:rgba(var(--color-success-rgb, 34, 197, 94),.1)}.users-message--error{color:var(--color-danger);background:rgba(var(--color-danger-rgb, 239, 68, 68),.1)}@media (max-width: 640px){.users-table th:nth-child(4),.users-table td:nth-child(4){display:none}}.smtp-settings{width:100%;max-width:640px}.smtp-settings-header{margin-bottom:var(--spacing-xl)}.smtp-settings-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-sm)}.smtp-settings-subtitle{font-size:var(--font-size-lg);color:var(--color-text-secondary);margin:0}.smtp-settings-card{margin-bottom:var(--spacing-xl)}.smtp-status-grid{display:flex;flex-direction:column;gap:var(--spacing-md)}.smtp-status-row{display:flex;align-items:center;justify-content:space-between}.smtp-status-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.smtp-status-value{font-size:var(--font-size-base);color:var(--color-text-primary)}.smtp-config-form{display:flex;flex-direction:column;gap:var(--spacing-lg)}.smtp-config-field{display:flex;flex-direction:column;gap:var(--spacing-xs);flex:1}.smtp-config-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.smtp-config-input{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);color:var(--color-text-primary);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--border-radius-md);transition:border-color var(--transition-base);font-family:inherit}.smtp-config-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px rgba(var(--color-primary-rgb, 59, 130, 246),.15)}.smtp-config-input::placeholder{color:var(--color-text-tertiary)}.smtp-config-hint{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.smtp-config-row{display:flex;gap:var(--spacing-md)}.smtp-config-message{font-size:var(--font-size-sm);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-md)}.smtp-config-message--success{color:var(--color-success);background:rgba(var(--color-success-rgb, 34, 197, 94),.1)}.smtp-config-message--error{color:var(--color-danger);background:rgba(var(--color-danger-rgb, 239, 68, 68),.1)}.smtp-config-actions{display:flex;justify-content:flex-end}.smtp-checkbox-row{display:flex;align-items:center;gap:var(--spacing-sm)}.smtp-checkbox-row input[type=checkbox]{width:16px;height:16px;accent-color:var(--color-primary);cursor:pointer}.smtp-checkbox-row .smtp-config-label{cursor:pointer;margin:0}.smtp-test-card .smtp-config-form{gap:var(--spacing-lg)}.smtp-test-row{display:flex;align-items:flex-end;gap:var(--spacing-md)}.smtp-test-row-action{flex-shrink:0}.smtp-info-content{display:flex;flex-direction:column}.smtp-info-text{font-size:var(--font-size-sm);color:var(--color-text-secondary);line-height:1.6;margin:0 0 var(--spacing-md) 0}.smtp-info-text:last-child{margin-bottom:0}@media (max-width: 640px){.smtp-config-row{flex-direction:column}.smtp-test-row{flex-direction:column;align-items:stretch}}.sso-settings{width:100%;max-width:640px}.sso-settings-header{margin-bottom:var(--spacing-xl)}.sso-settings-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-sm)}.sso-settings-subtitle{font-size:var(--font-size-lg);color:var(--color-text-secondary);margin:0}.sso-settings-card{margin-bottom:var(--spacing-xl)}.sso-status-grid{display:flex;flex-direction:column;gap:var(--spacing-md);margin-bottom:var(--spacing-lg)}.sso-status-row{display:flex;align-items:center;justify-content:space-between}.sso-status-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.sso-status-value{font-size:var(--font-size-base);color:var(--color-text-primary)}.sso-action{margin-top:var(--spacing-md)}.sso-login-link{text-decoration:none;display:inline-block}.sso-config-form{display:flex;flex-direction:column;gap:var(--spacing-lg)}.sso-config-field{display:flex;flex-direction:column;gap:var(--spacing-xs);flex:1}.sso-config-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.sso-config-input{padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-sm);color:var(--color-text-primary);background:var(--color-bg-secondary);border:1px solid var(--color-border);border-radius:var(--border-radius-md);transition:border-color var(--transition-base);font-family:inherit}.sso-config-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px rgba(var(--color-primary-rgb, 59, 130, 246),.15)}.sso-config-input::placeholder{color:var(--color-text-tertiary)}.sso-config-hint{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.sso-config-row{display:flex;gap:var(--spacing-md)}.sso-config-message{font-size:var(--font-size-sm);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-md)}.sso-config-message--success{color:var(--color-success);background:rgba(var(--color-success-rgb, 34, 197, 94),.1)}.sso-config-message--error{color:var(--color-danger);background:rgba(var(--color-danger-rgb, 239, 68, 68),.1)}.sso-config-actions{display:flex;justify-content:flex-end}.sso-info-text{font-size:var(--font-size-sm);color:var(--color-text-secondary);line-height:1.6;margin:0 0 var(--spacing-md) 0}.sso-info-text:last-child{margin-bottom:0}.sso-info-text code{font-size:var(--font-size-xs);background:var(--color-bg-secondary);padding:2px 6px;border-radius:var(--border-radius-sm);color:var(--color-text-primary)}.sso-info-content{display:flex;flex-direction:column}.sso-role-mapping{display:flex;flex-direction:column;gap:var(--spacing-sm);margin-bottom:var(--spacing-lg);padding:var(--spacing-md);background:var(--color-bg-secondary);border-radius:var(--border-radius-md)}.sso-role-row{display:flex;align-items:center;gap:var(--spacing-md)}.sso-role-description{font-size:var(--font-size-sm);color:var(--color-text-secondary)}@media (max-width: 640px){.sso-config-row{flex-direction:column}}.backup-card{display:flex;flex-direction:column;gap:var(--spacing-sm)}.backup-card-header{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-sm);padding-bottom:var(--spacing-sm);border-bottom:var(--border-width) solid var(--color-divider)}.backup-card-filename{font-family:var(--font-family-mono);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.backup-card-badges{display:flex;align-items:center;gap:var(--spacing-xs);flex-shrink:0}.backup-card-status-wrapper{display:flex;align-items:center;gap:var(--spacing-xs)}.backup-card-body{display:flex;flex-direction:column;gap:var(--spacing-xs)}.backup-card-row{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-sm)}.backup-card-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}.backup-card-value{font-size:var(--font-size-sm);color:var(--color-text-primary);text-align:right}.backup-card-mono{font-family:var(--font-family-mono);font-size:var(--font-size-xs)}.backup-card-error{padding:var(--spacing-xs) var(--spacing-sm);background:color-mix(in srgb,var(--color-danger) 10%,transparent);border-radius:var(--border-radius-sm);border:1px solid color-mix(in srgb,var(--color-danger) 25%,transparent)}.backup-card-error-text{font-size:var(--font-size-xs);color:var(--color-danger);line-height:1.4}.backup-card-actions{display:flex;gap:var(--spacing-xs);flex-wrap:wrap;padding-top:var(--spacing-sm);border-top:var(--border-width) solid var(--color-divider)}.backups-page{width:100%;display:flex;flex-direction:column;gap:var(--spacing-lg)}.backups-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--spacing-md);margin-bottom:var(--spacing-sm)}.backups-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-xs)}.backups-subtitle{font-size:var(--font-size-base);color:var(--color-text-secondary);margin:0}.backups-content{min-height:200px}.backups-list{display:flex;flex-direction:column;gap:var(--spacing-md)}@media (max-width: 480px){.backups-header{flex-direction:column;align-items:stretch}}.auth-form{width:100%;max-width:400px;display:flex;flex-direction:column;gap:var(--spacing-lg)}.auth-form-header{text-align:center;margin-bottom:var(--spacing-md)}.auth-form-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-sm)}.auth-form-subtitle{font-size:var(--font-size-base);color:var(--color-text-secondary);margin:0}.auth-form-group{display:flex;flex-direction:column;gap:var(--spacing-sm)}.auth-form-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.auth-form-input{width:100%;padding:var(--spacing-sm) var(--spacing-md);font-size:var(--font-size-base);color:var(--color-text-primary);background-color:var(--color-bg-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);transition:all var(--transition-fast)}.auth-form-input:hover{border-color:var(--color-border-hover)}.auth-form-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.auth-form-input::placeholder{color:var(--color-text-tertiary)}.auth-form-hint{font-size:var(--font-size-xs);color:var(--color-text-secondary);margin:0}.auth-form-submit{margin-top:var(--spacing-sm)}.auth-form-footer{text-align:center;font-size:var(--font-size-sm);color:var(--color-text-secondary);margin:0}.auth-form-link{color:var(--color-primary);font-weight:var(--font-weight-medium);text-decoration:none;transition:color var(--transition-fast)}.auth-form-link:hover{color:var(--color-primary-hover);text-decoration:underline}.auth-form-sso-btn{margin-top:var(--spacing-sm)}.auth-form-divider{display:flex;align-items:center;gap:var(--spacing-md)}.auth-form-divider:before,.auth-form-divider:after{content:"";flex:1;height:1px;background-color:var(--color-border)}.auth-form-divider-text{font-size:var(--font-size-sm);color:var(--color-text-tertiary);white-space:nowrap}.auth-page{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:var(--spacing-xl);background:linear-gradient(135deg,var(--color-bg-primary) 0%,var(--color-bg-secondary) 100%)}.auth-page-container{display:flex;flex-direction:column;align-items:center;gap:var(--spacing-2xl);width:100%;max-width:480px}.auth-page-brand{text-align:center}.auth-page-brand-icon{font-size:4rem;display:block;margin-bottom:var(--spacing-md)}.auth-page-brand-text{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-sm)}.auth-page-brand-subtitle{font-size:var(--font-size-base);color:var(--color-text-secondary);margin:0}.not-found{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:var(--spacing-xl)}.not-found-content{text-align:center;max-width:500px}.not-found-code{font-size:6rem;font-weight:var(--font-weight-bold);color:var(--color-primary);margin:0;line-height:1}.not-found-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:var(--spacing-lg) 0 var(--spacing-md)}.not-found-description{font-size:var(--font-size-lg);color:var(--color-text-secondary);margin-bottom:var(--spacing-xl)}.mobile-drawer-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#00000080;z-index:var(--z-modal-backdrop);animation:fadeIn var(--transition-fast)}.mobile-drawer{position:fixed;top:0;left:0;bottom:0;width:280px;max-width:85vw;background-color:var(--color-bg-elevated);z-index:var(--z-modal);display:flex;flex-direction:column;transform:translate(-100%);transition:transform var(--transition-slow);box-shadow:var(--shadow-xl)}.mobile-drawer-open{transform:translate(0)}@media (min-width: 768px){.mobile-drawer,.mobile-drawer-overlay{display:none!important}}.mobile-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:var(--border-width) solid var(--color-divider);min-height:var(--header-height-mobile)}.mobile-drawer-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);color:var(--color-text-primary)}.mobile-drawer-close{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:none;color:var(--color-text-secondary);font-size:var(--font-size-lg);cursor:pointer;border-radius:var(--border-radius-md);transition:all var(--transition-fast)}.mobile-drawer-close:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.mobile-drawer-content{flex:1;overflow-y:auto;padding:var(--spacing-sm) 0}.mobile-drawer-section{padding:var(--spacing-xs) 0;border-bottom:var(--border-width) solid var(--color-divider)}.mobile-drawer-section:last-child{border-bottom:none}.mobile-drawer-section-bottom{margin-top:auto}.mobile-drawer-link{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-lg);text-decoration:none;color:var(--color-text-primary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);transition:all var(--transition-fast);min-height:44px}.mobile-drawer-link:hover{background-color:var(--color-bg-secondary)}.mobile-drawer-link-active{color:var(--color-primary);background-color:var(--color-primary-light);font-weight:var(--font-weight-semibold)}.mobile-drawer-link-icon{font-size:var(--font-size-lg);width:24px;text-align:center;flex-shrink:0}.mobile-drawer-link-child{padding-left:calc(var(--spacing-lg) + 32px);font-size:var(--font-size-sm);min-height:40px;position:relative}.mobile-drawer-link-child:before{content:"";position:absolute;left:calc(var(--spacing-lg) + 12px);top:0;bottom:0;width:1px;background-color:var(--color-divider)}.mobile-drawer-tree-toggle{display:flex;align-items:center;gap:var(--spacing-sm);width:100%;padding:var(--spacing-sm) var(--spacing-lg);background:none;border:none;color:var(--color-text-primary);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);font-family:inherit;cursor:pointer;transition:all var(--transition-fast);min-height:44px;text-align:left}.mobile-drawer-tree-toggle:hover{background-color:var(--color-bg-secondary)}.mobile-drawer-tree-toggle-open{color:var(--color-primary)}.mobile-drawer-arrow{margin-left:auto;font-size:10px;transition:transform var(--transition-fast);color:var(--color-text-tertiary)}.mobile-drawer-arrow-open{transform:rotate(180deg)}.mobile-drawer-tree-children{animation:expandIn var(--transition-fast)}@keyframes expandIn{0%{opacity:0;max-height:0}to{opacity:1;max-height:500px}}.mobile-drawer-footer{border-top:var(--border-width) solid var(--color-divider);padding:var(--spacing-md) var(--spacing-lg);display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-sm)}.mobile-drawer-user{display:flex;align-items:center;gap:var(--spacing-sm);min-width:0}.mobile-drawer-user-avatar{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;background-color:var(--color-primary);color:#fff;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);flex-shrink:0}.mobile-drawer-user-info{display:flex;flex-direction:column;min-width:0}.mobile-drawer-user-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-drawer-user-role{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.5px}.mobile-drawer-logout{padding:var(--spacing-xs) var(--spacing-md);background:none;border:var(--border-width) solid var(--color-danger);color:var(--color-danger);border-radius:var(--border-radius-md);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);cursor:pointer;transition:all var(--transition-fast);white-space:nowrap;flex-shrink:0}.mobile-drawer-logout:hover{background-color:var(--color-danger);color:#fff}.header{position:sticky;top:0;z-index:var(--z-sticky);background-color:var(--color-bg-elevated);border-bottom:var(--border-width) solid var(--color-divider);height:var(--header-height-mobile)}@media (min-width: 768px){.header{height:var(--header-height)}}.header-container{display:flex;align-items:center;justify-content:space-between;height:100%;padding:0 var(--spacing-md);max-width:var(--container-max-width);margin:0 auto}.header-left{display:flex;align-items:center;gap:var(--spacing-sm)}.header-hamburger{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:4px;width:36px;height:36px;background:none;border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);cursor:pointer;padding:8px;transition:all var(--transition-fast)}.header-hamburger:hover{border-color:var(--color-primary);background-color:var(--color-bg-secondary)}.header-hamburger-line{display:block;width:18px;height:2px;background-color:var(--color-text-secondary);border-radius:1px;transition:background-color var(--transition-fast)}.header-hamburger:hover .header-hamburger-line{background-color:var(--color-primary)}@media (min-width: 768px){.header-hamburger{display:none}}.header-logo{display:flex;align-items:center;gap:var(--spacing-sm);text-decoration:none;color:var(--color-text-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-lg)}.header-logo-icon{width:28px;height:28px;color:var(--color-primary)}.header-logo-text{display:none}@media (min-width: 768px){.header-logo-text{display:inline}}.header-nav{display:none;gap:var(--spacing-sm);flex:1;justify-content:center}@media (min-width: 768px){.header-nav{display:flex}}.header-nav-link{padding:var(--spacing-sm) var(--spacing-md);color:var(--color-text-secondary);text-decoration:none;font-weight:var(--font-weight-medium);border-radius:var(--border-radius-md);transition:all var(--transition-fast)}.header-nav-link:hover{color:var(--color-text-primary);background-color:var(--color-bg-secondary)}.header-theme-toggle{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--border-radius-md);border:var(--border-width) solid var(--color-border);background:none;color:var(--color-text-secondary);font-size:var(--font-size-lg);cursor:pointer;transition:all var(--transition-fast)}.header-theme-toggle:hover{border-color:var(--color-primary);color:var(--color-primary);background-color:var(--color-bg-secondary)}.header-actions{display:flex;align-items:center;gap:var(--spacing-md)}.header-user{position:relative}.header-user-button{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-xs) var(--spacing-sm);background:none;border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);cursor:pointer;transition:all var(--transition-fast)}.header-user-button:hover{border-color:var(--color-border-hover);background-color:var(--color-bg-secondary)}.header-user-avatar{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background-color:var(--color-primary);color:#fff;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm)}.header-user-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.header-user-menu{position:absolute;top:calc(100% + var(--spacing-xs));right:0;min-width:200px;background-color:var(--color-bg-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);padding:var(--spacing-xs);z-index:var(--z-dropdown);animation:slideInDown var(--transition-fast)}.header-user-menu-item{display:block;width:100%;padding:var(--spacing-sm) var(--spacing-md);text-align:left;text-decoration:none;color:var(--color-text-primary);border-radius:var(--border-radius-sm);border:none;background:none;font-size:var(--font-size-sm);cursor:pointer;transition:background-color var(--transition-fast)}.header-user-menu-item:hover{background-color:var(--color-bg-secondary)}.header-user-menu-logout{color:var(--color-danger)}.header-admin{position:relative}.header-admin-toggle{display:flex;align-items:center;gap:var(--spacing-xs);background:none;border:none;cursor:pointer;font-size:inherit;font-family:inherit}.header-admin-arrow{font-size:10px;transition:transform var(--transition-fast)}.header-admin-arrow-open{transform:rotate(180deg)}.header-admin-menu{position:absolute;top:calc(100% + var(--spacing-xs));left:0;min-width:180px;background-color:var(--color-bg-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);padding:var(--spacing-xs);z-index:var(--z-dropdown);animation:slideInDown var(--transition-fast)}.header-admin-menu-item{display:block;width:100%;padding:var(--spacing-sm) var(--spacing-md);text-decoration:none;color:var(--color-text-primary);border-radius:var(--border-radius-sm);font-size:var(--font-size-sm);transition:background-color var(--transition-fast)}.header-admin-menu-item:hover{background-color:var(--color-bg-secondary)}.app-layout{display:flex;flex-direction:column;min-height:100vh;background-color:var(--color-bg-primary)}.app-main{flex:1;padding-bottom:var(--spacing-md)}.app-container{width:100%;max-width:var(--container-max-width);margin:0 auto;padding:var(--spacing-md)}@media (min-width: 768px){.app-container{padding:var(--spacing-xl)}}.section{display:flex;flex-direction:column;gap:var(--spacing-lg, 1.5rem)}.section-header{display:flex;flex-direction:column;gap:var(--spacing-md, 1rem);border-bottom:1px solid var(--color-border, #e5e7eb);padding-bottom:0}.section-title{margin:0;font-size:var(--font-size-2xl, 1.5rem);font-weight:600;color:var(--color-text, #111827)}.section-tabs{display:flex;gap:var(--spacing-xs, .25rem);overflow-x:auto;scrollbar-width:none}.section-tabs::-webkit-scrollbar{display:none}.section-tab{padding:var(--spacing-sm, .5rem) var(--spacing-md, 1rem);border-bottom:2px solid transparent;color:var(--color-text-secondary, #6b7280);font-size:var(--font-size-sm, .875rem);font-weight:500;text-decoration:none;white-space:nowrap;transition:color .15s ease,border-color .15s ease}.section-tab:hover{color:var(--color-text, #111827)}.section-tab--active{color:var(--color-primary, #2563eb);border-bottom-color:var(--color-primary, #2563eb)}.section-body{min-width:0}:root{--color-primary: #667eea;--color-primary-hover: #5568d3;--color-primary-light: rgba(102, 126, 234, .1);--color-primary-rgb: 102, 126, 234;--color-success: #51cf66;--color-success-hover: #47b85d;--color-success-light: rgba(81, 207, 102, .1);--color-warning: #ffd43b;--color-warning-hover: #e6bf35;--color-warning-light: rgba(255, 212, 59, .1);--color-danger: #ff6b6b;--color-danger-hover: #e65a5a;--color-danger-light: rgba(255, 107, 107, .1);--color-info: #4dabf7;--color-info-hover: #339af0;--color-info-light: rgba(77, 171, 247, .1);--color-text-primary: #1a1a1a;--color-text-secondary: rgba(0, 0, 0, .7);--color-text-tertiary: rgba(0, 0, 0, .5);--color-text-disabled: rgba(0, 0, 0, .38);--color-bg-primary: #ffffff;--color-bg-secondary: #f5f5f5;--color-bg-elevated: #ffffff;--color-bg-overlay: rgba(0, 0, 0, .3);--color-border: rgba(0, 0, 0, .12);--color-border-hover: rgba(0, 0, 0, .24);--color-divider: rgba(0, 0, 0, .08);--color-status-active: #51cf66;--color-status-offline: #868e96;--color-status-error: #ff6b6b;--color-status-maintenance: #ffd43b;--color-chart-temperature: #ff6b6b;--color-chart-humidity: #667eea;--color-chart-grid: rgba(0, 0, 0, .08);--color-chart-power: #f59e0b;--color-chart-phase-a: #ef4444;--color-chart-phase-b: #3b82f6;--color-chart-phase-c: #10b981;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--spacing-2xl: 3rem;--spacing-3xl: 4rem;--font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-mono: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "Courier New", monospace;--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-base: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-2xl: 1.5rem;--font-size-3xl: 2rem;--font-size-4xl: 2.5rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75;--border-radius-sm: .25rem;--border-radius-md: .5rem;--border-radius-lg: .75rem;--border-radius-xl: 1rem;--border-radius-full: 9999px;--border-width: 1px;--border-width-thick: 2px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 10px 10px -5px rgba(0, 0, 0, .04);--z-dropdown: 1000;--z-sticky: 1020;--z-fixed: 1030;--z-modal-backdrop: 1040;--z-modal: 1050;--z-popover: 1060;--z-tooltip: 1070;--transition-fast: .15s cubic-bezier(.4, 0, .2, 1);--transition-base: .2s cubic-bezier(.4, 0, .2, 1);--transition-slow: .3s cubic-bezier(.4, 0, .2, 1);--header-height: 64px;--header-height-mobile: 56px;--sidebar-width: 260px;--sidebar-collapsed-width: 64px;--mobile-nav-height: 56px;--container-max-width: 1440px;--container-padding: var(--spacing-md);--breakpoint-sm: 640px;--breakpoint-md: 768px;--breakpoint-lg: 1024px;--breakpoint-xl: 1280px;--breakpoint-2xl: 1536px}@media (prefers-color-scheme: dark){:root{--color-text-primary: rgba(255, 255, 255, .87);--color-text-secondary: rgba(255, 255, 255, .6);--color-text-tertiary: rgba(255, 255, 255, .38);--color-text-disabled: rgba(255, 255, 255, .3);--color-bg-primary: #1a1a1a;--color-bg-secondary: #242424;--color-bg-elevated: #2d2d2d;--color-bg-overlay: rgba(0, 0, 0, .5);--color-border: rgba(255, 255, 255, .12);--color-border-hover: rgba(255, 255, 255, .24);--color-divider: rgba(255, 255, 255, .08);--color-chart-grid: rgba(255, 255, 255, .08)}}[data-theme=light]{--color-text-primary: #1a1a1a;--color-text-secondary: rgba(0, 0, 0, .7);--color-text-tertiary: rgba(0, 0, 0, .5);--color-text-disabled: rgba(0, 0, 0, .38);--color-bg-primary: #ffffff;--color-bg-secondary: #f5f5f5;--color-bg-elevated: #ffffff;--color-bg-overlay: rgba(0, 0, 0, .3);--color-border: rgba(0, 0, 0, .12);--color-border-hover: rgba(0, 0, 0, .24);--color-divider: rgba(0, 0, 0, .08);--color-chart-grid: rgba(0, 0, 0, .08)}[data-theme=dark]{--color-text-primary: rgba(255, 255, 255, .87);--color-text-secondary: rgba(255, 255, 255, .6);--color-text-tertiary: rgba(255, 255, 255, .38);--color-text-disabled: rgba(255, 255, 255, .3);--color-bg-primary: #1a1a1a;--color-bg-secondary: #242424;--color-bg-elevated: #2d2d2d;--color-bg-overlay: rgba(0, 0, 0, .5);--color-border: rgba(255, 255, 255, .12);--color-border-hover: rgba(255, 255, 255, .24);--color-divider: rgba(255, 255, 255, .08);--color-chart-grid: rgba(255, 255, 255, .08)}.container{width:100%;max-width:var(--container-max-width);margin-left:auto;margin-right:auto;padding-left:var(--container-padding);padding-right:var(--container-padding)}.hidden-mobile{display:none}@media (min-width: 768px){.hidden-mobile{display:block}}.visible-mobile{display:block}@media (min-width: 768px){.visible-mobile{display:none}}.hidden-tablet{display:block}@media (min-width: 768px) and (max-width: 1023px){.hidden-tablet{display:none}}@media (max-width: 767px){button,a,input[type=checkbox],input[type=radio]{min-height:44px;min-width:44px}}.text-responsive-sm{font-size:var(--font-size-sm)}@media (min-width: 768px){.text-responsive-sm{font-size:var(--font-size-base)}}.text-responsive-base{font-size:var(--font-size-base)}@media (min-width: 768px){.text-responsive-base{font-size:var(--font-size-lg)}}.text-responsive-lg{font-size:var(--font-size-lg)}@media (min-width: 768px){.text-responsive-lg{font-size:var(--font-size-xl)}}.spacing-responsive-sm{padding:var(--spacing-sm)}@media (min-width: 768px){.spacing-responsive-sm{padding:var(--spacing-md)}}.spacing-responsive-md{padding:var(--spacing-md)}@media (min-width: 768px){.spacing-responsive-md{padding:var(--spacing-lg)}}.grid-responsive{display:grid;gap:var(--spacing-md);grid-template-columns:1fr}@media (min-width: 640px){.grid-responsive{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.grid-responsive{grid-template-columns:repeat(3,1fr)}}@media (min-width: 1280px){.grid-responsive{grid-template-columns:repeat(4,1fr)}}.flex-responsive{display:flex;flex-direction:column;gap:var(--spacing-md)}@media (min-width: 768px){.flex-responsive{flex-direction:row}}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-size-adjust:100%}body{font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-text-primary);background-color:var(--color-bg-primary);min-height:100vh;overflow-x:hidden}#root{width:100%}h1,h2,h3,h4,h5,h6{font-weight:var(--font-weight-semibold);line-height:var(--line-height-tight);margin-bottom:var(--spacing-md)}h1{font-size:var(--font-size-3xl)}h2{font-size:var(--font-size-2xl)}h3{font-size:var(--font-size-xl)}h4{font-size:var(--font-size-lg)}h5{font-size:var(--font-size-base)}h6{font-size:var(--font-size-sm)}p{margin-bottom:var(--spacing-md)}a{color:var(--color-primary);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--color-primary-hover)}code{font-family:var(--font-family-mono);font-size:.875em;background-color:var(--color-bg-elevated);padding:.125rem .25rem;border-radius:var(--border-radius-sm)}input,textarea,select{font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}button{font-family:inherit;font-size:inherit;line-height:inherit;cursor:pointer;border:none;background:none}button:disabled{cursor:not-allowed;opacity:.6}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-bg-secondary)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--border-radius-sm)}::-webkit-scrollbar-thumb:hover{background:var(--color-border-hover)}*:focus{outline:none}*:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes slideInDown{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-in{animation:fadeIn var(--transition-base)}.slide-in-up{animation:slideInUp var(--transition-base)}.slide-in-down{animation:slideInDown var(--transition-base)}@media print{*,*:before,*:after{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}img{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}}
