.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}.sensor-chart-container{width:100%;position:relative}.sensor-chart-loading,.sensor-chart-empty{display:flex;align-items:center;justify-content:center;height:100%;min-height:200px}.sensor-chart-empty p{color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.chart-tooltip{background:var(--color-bg-elevated);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);padding:var(--spacing-sm) var(--spacing-md);box-shadow:var(--shadow-lg)}.chart-tooltip-time{font-size:var(--font-size-xs);color:var(--color-text-secondary);margin:0 0 var(--spacing-xs) 0}.chart-tooltip-value{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);margin:0;line-height:var(--line-height-normal)}.sensor-chart-area{user-select:none;-webkit-user-select:none;cursor:crosshair}.chart-zoom-bar{display:flex;align-items:center;justify-content:flex-end;gap:var(--spacing-sm);padding:0 4px 6px 0}.chart-zoom-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.chart-zoom-reset{padding:2px 10px;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-primary);background:transparent;border:var(--border-width) solid var(--color-primary);border-radius:var(--border-radius-sm);cursor:pointer;transition:background .15s,color .15s}.chart-zoom-reset:hover{background:var(--color-primary);color:#fff}.roc-chart-container{width:100%;position:relative}.roc-chart-loading,.roc-chart-empty{display:flex;align-items:center;justify-content:center;height:100%;color:var(--color-text-tertiary)}.roc-chart-tooltip{background:var(--color-surface);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);padding:var(--spacing-sm) var(--spacing-md);box-shadow:var(--shadow-md)}.roc-chart-tooltip-time{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-bottom:var(--spacing-xs)}.roc-chart-tooltip-value{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);margin:0}.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-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)}.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)}.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)}.device-filter-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-md);flex-wrap:wrap}.device-filter-controls{display:flex;align-items:center;gap:var(--spacing-sm);flex-wrap:wrap}.device-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)}.device-filter-select:hover{border-color:var(--color-border-hover)}.device-filter-select:focus{border-color:var(--color-primary)}.device-filter-count{font-size:var(--font-size-sm);color:var(--color-text-secondary);padding-left:var(--spacing-sm)}.device-card{display:flex;flex-direction:column;gap:var(--spacing-sm)}.device-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)}.device-card-id{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}.device-card-body{display:flex;flex-direction:column;gap:var(--spacing-xs)}.device-card-row{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-sm)}.device-card-label{font-size:var(--font-size-xs);color:var(--color-text-tertiary);text-transform:uppercase;letter-spacing:.05em}.device-card-value{font-size:var(--font-size-sm);color:var(--color-text-primary);text-align:right}.device-card-time{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.device-card-reading{font-family:var(--font-family-mono);font-size:var(--font-size-xs)}.device-card-provision{padding-top:var(--spacing-sm);display:flex}.device-card-provision .btn{width:100%}.device-card-footer{padding-top:var(--spacing-xs);border-top:var(--border-width) solid var(--color-divider);display:flex;justify-content:space-between;align-items:center}.device-card-board{font-size:var(--font-size-xs);color:var(--color-text-secondary)}.device-card-firmware{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-family:var(--font-family-mono)}.device-detail{display:flex;flex-direction:column;gap:var(--spacing-lg)}.device-detail-section{display:flex;flex-direction:column;gap:var(--spacing-sm)}.device-detail-section-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.05em;margin:0;padding-bottom:var(--spacing-xs);border-bottom:var(--border-width) solid var(--color-divider)}.device-detail-grid{display:flex;flex-direction:column;gap:var(--spacing-xs)}.device-detail-row{display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-md);padding:var(--spacing-xs) 0}.device-detail-label{font-size:var(--font-size-sm);color:var(--color-text-secondary);flex-shrink:0}.device-detail-value{font-size:var(--font-size-sm);color:var(--color-text-primary);text-align:right;word-break:break-all}.device-detail-mono{font-family:var(--font-family-mono);font-size:var(--font-size-xs)}.device-detail-no-cert{font-size:var(--font-size-sm);color:var(--color-text-tertiary);font-style:italic;margin:0}.device-detail-cert-btn{margin-top:var(--spacing-sm);align-self:flex-start}.device-detail-table-wrap{overflow-x:auto}.device-detail-table{width:100%;border-collapse:collapse;font-size:var(--font-size-xs)}.device-detail-table th,.device-detail-table td{text-align:left;padding:var(--spacing-xs) var(--spacing-sm);border-bottom:var(--border-width) solid var(--color-divider)}.device-detail-table th{font-weight:var(--font-weight-medium);color:var(--color-text-secondary);white-space:nowrap}.device-detail-table td{color:var(--color-text-primary)}.device-remote-cards{display:flex;flex-direction:column;gap:var(--spacing-sm)}.device-remote-card{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-md);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-md);border:var(--border-width) solid var(--color-border);background:var(--color-bg-primary);border-left:3px solid var(--color-border);transition:border-color var(--transition-fast)}.device-remote-card:hover{border-color:var(--color-border-hover)}.device-remote-card--warning{border-left-color:var(--color-warning)}.device-remote-card--warning:hover{border-left-color:var(--color-warning-hover)}.device-remote-card--danger{border-left-color:var(--color-danger)}.device-remote-card--danger:hover{border-left-color:var(--color-danger-hover)}.device-remote-card-body{display:flex;flex-direction:column;gap:2px;min-width:0}.device-remote-card-title{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-primary)}.device-remote-card-desc{font-size:var(--font-size-xs);color:var(--color-text-tertiary);line-height:var(--line-height-normal)}.device-detail-banner{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-md);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.device-detail-banner--warning{background:color-mix(in srgb,var(--color-warning) 12%,transparent);color:var(--color-warning);border:var(--border-width) solid color-mix(in srgb,var(--color-warning) 30%,transparent)}.device-detail-banner--danger{background:color-mix(in srgb,var(--color-danger) 12%,transparent);color:var(--color-danger);border:var(--border-width) solid color-mix(in srgb,var(--color-danger) 30%,transparent)}.device-detail-banner--success{background:color-mix(in srgb,var(--color-success) 12%,transparent);color:var(--color-success);border:var(--border-width) solid color-mix(in srgb,var(--color-success) 30%,transparent)}.calibration-form{display:flex;flex-direction:column;gap:var(--spacing-sm)}.calibration-form-desc{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin:0}.calibration-inputs{display:flex;flex-direction:column;gap:var(--spacing-xs)}.calibration-input-row{display:flex;align-items:center;gap:var(--spacing-md)}.calibration-input-label{font-size:var(--font-size-sm);color:var(--color-text-secondary);min-width:100px;flex-shrink:0}.calibration-input{flex:1;padding:var(--spacing-xs) var(--spacing-sm);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-sm);background:var(--color-bg-primary);color:var(--color-text-primary);font-size:var(--font-size-sm);font-family:var(--font-family-mono);max-width:160px}.calibration-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--color-primary) 20%,transparent)}.calibration-active{display:flex;flex-direction:column;gap:var(--spacing-sm)}.calibration-info{display:flex;flex-direction:column;gap:2px;font-size:var(--font-size-sm);color:var(--color-text-primary)}.calibration-hint{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.calibration-count{font-family:var(--font-family-mono);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary)}.calibration-count--good{color:var(--color-success)}.calibration-actions{display:flex;gap:var(--spacing-sm);margin-top:var(--spacing-xs)}.calibration-result{display:flex;flex-direction:column;gap:var(--spacing-sm)}.device-detail-actions{display:flex;gap:var(--spacing-sm);justify-content:flex-end;width:100%}.readings-header{display:flex;align-items:center;justify-content:space-between;gap:var(--spacing-sm)}.readings-header .device-detail-section-title{border-bottom:none;padding-bottom:0;margin:0}.readings-range-controls{display:flex;gap:2px}.readings-range-btn{padding:2px 10px;font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-sm);background:var(--color-bg-primary);color:var(--color-text-secondary);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast),border-color var(--transition-fast)}.readings-range-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.readings-range-btn.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.readings-time{font-family:var(--font-family-mono);white-space:nowrap;font-size:var(--font-size-xs)}.readings-load-more{margin-top:var(--spacing-xs);width:100%;padding:var(--spacing-xs);font-size:var(--font-size-xs);color:var(--color-primary);background:none;border:var(--border-width) dashed var(--color-border);border-radius:var(--border-radius-sm);cursor:pointer;transition:border-color var(--transition-fast),color var(--transition-fast)}.readings-load-more:hover:not(:disabled){border-color:var(--color-primary)}.readings-load-more:disabled{color:var(--color-text-tertiary);cursor:default}.device-form{display:flex;flex-direction:column;gap:var(--spacing-md)}.device-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)}.device-form-group{display:flex;flex-direction:column;gap:var(--spacing-xs);flex:1}.device-form-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary)}.device-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)}.device-form-input:focus{border-color:var(--color-primary)}.device-form-input::placeholder{color:var(--color-text-tertiary)}.device-form-row-fields{display:flex;gap:var(--spacing-md)}@media (max-width: 480px){.device-form-row-fields{flex-direction:column}}.device-form-actions{display:flex;gap:var(--spacing-sm);justify-content:flex-end;width:100%}.devices-page{width:100%;display:flex;flex-direction:column;gap:var(--spacing-lg)}.devices-header{margin-bottom:var(--spacing-sm)}.devices-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-xs)}.devices-subtitle{font-size:var(--font-size-base);color:var(--color-text-secondary);margin:0}.devices-content{min-height:200px}.devices-grid{display:grid;gap:var(--spacing-lg);grid-template-columns:1fr}@media (min-width: 640px){.devices-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.devices-grid{grid-template-columns:repeat(3,1fr)}}.cmd-confirm{display:flex;flex-direction:column;gap:var(--spacing-md)}.cmd-confirm-question{font-size:var(--font-size-sm);color:var(--color-text-primary);margin:0;line-height:var(--line-height-relaxed)}.cmd-confirm-device-id{font-family:var(--font-family-mono);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)}.cmd-confirm-callout{font-size:var(--font-size-sm);line-height:var(--line-height-normal);padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-md);border-left:3px solid}.cmd-confirm-callout--info{background:var(--color-primary-light);border-left-color:var(--color-primary);color:var(--color-text-secondary)}.cmd-confirm-callout--danger{background:var(--color-danger-light);border-left-color:var(--color-danger);color:var(--color-text-secondary)}.cmd-confirm-typed{display:flex;flex-direction:column;gap:var(--spacing-xs)}.cmd-confirm-label{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.cmd-confirm-input{width:100%;padding:var(--spacing-xs) var(--spacing-sm);border:var(--border-width) solid var(--color-border);border-radius:var(--border-radius-md);font-size:var(--font-size-sm);font-family:var(--font-family-mono);background:var(--color-bg-primary);color:var(--color-text-primary);transition:border-color var(--transition-fast);box-sizing:border-box}.cmd-confirm-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px var(--color-primary-light)}.cmd-confirm-input:disabled{opacity:.6;cursor:not-allowed}.cmd-confirm-message{font-size:var(--font-size-sm);padding:var(--spacing-xs) var(--spacing-sm);border-radius:var(--border-radius-md)}.cmd-confirm-message--success{color:var(--color-success);background:var(--color-success-light)}.cmd-confirm-message--error{color:var(--color-danger);background:var(--color-danger-light)}.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)}}.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)}.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}.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}.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%}.test-email-card{margin-bottom:var(--spacing-md)}.test-email-card-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}.test-email-card-description{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin:0}.test-email-form{display:flex;flex-direction:column;gap:var(--spacing-sm)}.test-email-input-row{display:flex;gap:var(--spacing-sm);align-items:center}.test-email-input{flex:1;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)}.test-email-input:focus{border-color:var(--color-primary)}.test-email-input::placeholder{color:var(--color-text-tertiary)}.test-email-input:disabled{opacity:.6;cursor:not-allowed}.test-email-message{padding:var(--spacing-sm) var(--spacing-md);border-radius:var(--border-radius-md);font-size:var(--font-size-sm)}.test-email-success{background-color:var(--color-success-light, rgba(34, 197, 94, .1));color:var(--color-success)}.test-email-error{background-color:var(--color-danger-light);color:var(--color-danger)}@media (max-width: 480px){.test-email-input-row{flex-direction:column;align-items:stretch}}.alerts-page{width:100%;display:flex;flex-direction:column;gap:var(--spacing-lg)}.alerts-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--spacing-md);margin-bottom:var(--spacing-sm)}.alerts-header-text{flex:1;min-width:0}.alerts-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-xs)}.alerts-subtitle{font-size:var(--font-size-base);color:var(--color-text-secondary);margin:0}.alerts-content{min-height:200px}.alerts-count{font-size:var(--font-size-sm);color:var(--color-text-tertiary);margin-bottom:var(--spacing-md)}.alerts-grid{display:grid;gap:var(--spacing-lg);grid-template-columns:1fr}@media (min-width: 640px){.alerts-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.alerts-grid{grid-template-columns:repeat(3,1fr)}}@media (max-width: 640px){.alerts-header{flex-direction:column;align-items:stretch}}.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}}.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}.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}}.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}}.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}}.device-cert-card{height:100%}.device-cert-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--spacing-sm);margin-bottom:var(--spacing-md)}.device-cert-card-info{display:flex;flex-direction:column;gap:var(--spacing-xs);min-width:0}.device-cert-card-device-id{font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-cert-card-room{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.device-cert-card-expiry{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--spacing-xs);margin-bottom:var(--spacing-md);padding:var(--spacing-sm);background:var(--color-bg-secondary);border-radius:var(--border-radius-sm)}.device-cert-card-expiry-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--color-text-tertiary)}.device-cert-card-expiry-value{font-size:var(--font-size-sm);color:var(--color-text-primary)}.device-cert-card-expiry-relative{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.device-cert-card-no-cert{font-size:var(--font-size-sm);color:var(--color-text-tertiary);margin:0 0 var(--spacing-md) 0;font-style:italic}.device-cert-card-actions{display:flex;gap:var(--spacing-xs);flex-wrap:wrap;margin-top:auto}.certificates-page{width:100%;display:flex;flex-direction:column;gap:var(--spacing-lg)}.certificates-header{margin-bottom:var(--spacing-sm)}.certificates-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin-bottom:var(--spacing-xs)}.certificates-subtitle{font-size:var(--font-size-base);color:var(--color-text-secondary);margin:0}.certificates-ca-card{margin-bottom:var(--spacing-md)}.certificates-ca-description{font-size:var(--font-size-sm);color:var(--color-text-secondary);line-height:1.6;margin:0 0 var(--spacing-lg) 0}.certificates-devices-section{display:flex;flex-direction:column;gap:var(--spacing-lg)}.certificates-devices-header{display:flex;flex-direction:column;gap:var(--spacing-md)}@media (min-width: 640px){.certificates-devices-header{flex-direction:row;align-items:center;justify-content:space-between}}.certificates-devices-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0}.certificates-search{width:100%;max-width:320px}.certificates-search-input{width:100%;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-sm);transition:border-color var(--transition-fast)}.certificates-search-input:focus{outline:none;border-color:var(--color-primary)}.certificates-search-input::placeholder{color:var(--color-text-tertiary)}.certificates-content{min-height:200px}.certificates-grid{display:grid;gap:var(--spacing-lg);grid-template-columns:1fr}@media (min-width: 640px){.certificates-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width: 1024px){.certificates-grid{grid-template-columns:repeat(3,1fr)}}.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}}.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)}}.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}}.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}}.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)}.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)}}: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}}
