:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}html,body,#root{height:100%;margin:0;padding:0}*{box-sizing:border-box}body{min-width:320px;margin:0}:root{--primary:#2563eb;--primary-dark:#1e40af;--secondary:#64748b;--bg-primary:#fff;--bg-secondary:#f8fafc;--border:#e2e8f0;--text-primary:#1e293b;--text-secondary:#64748b;--success:#22c55e;--warning:#eab308;--error:#ef4444;--sidebar-width:250px;--sidebar-width-collapsed:80px;--topbar-height:60px}@media (prefers-color-scheme:dark){:root{--bg-primary:#1e293b;--bg-secondary:#0f172a;--border:#334155;--text-primary:#f1f5f9;--text-secondary:#cbd5e1}}*{box-sizing:border-box;margin:0;padding:0}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--bg-secondary);color:var(--text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.main-layout{flex-direction:column;height:100vh;display:flex}.topbar{height:var(--topbar-height);background-color:var(--bg-primary);border-bottom:1px solid var(--border);z-index:100;justify-content:space-between;align-items:center;gap:20px;padding:0 20px;display:flex;position:sticky;top:0}.topbar-left{flex:1;align-items:center;gap:15px;display:flex}.sidebar-toggle{cursor:pointer;color:var(--text-primary);background:0 0;border:none;padding:5px 10px;font-size:24px;display:none}.topbar-title{color:var(--text-primary);font-size:20px;font-weight:600}.topbar-right{align-items:center;gap:20px;display:flex}.user-menu{align-items:center;gap:10px;font-size:14px;display:flex}.logout-btn{background-color:var(--primary);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:8px 16px;font-size:14px;transition:background-color .2s}.logout-btn:hover{background-color:var(--primary-dark)}.main-content{flex:1;display:flex;overflow:hidden}.sidebar{width:var(--sidebar-width);background-color:var(--bg-primary);border-right:1px solid var(--border);flex-shrink:0;transition:width .3s;overflow-y:auto}.sidebar.closed{width:var(--sidebar-width-collapsed)}.sidebar-nav{flex-direction:column;gap:4px;padding:10px 0;display:flex}.nav-item{color:var(--text-secondary);cursor:pointer;border-left:3px solid #0000;align-items:center;gap:12px;padding:12px 16px;font-size:14px;text-decoration:none;transition:all .2s;display:flex}.nav-item:hover{background-color:var(--bg-secondary);color:var(--text-primary)}.nav-item.active{background-color:var(--bg-secondary);border-left-color:var(--primary);color:var(--primary);font-weight:600}.nav-icon{flex-shrink:0;font-size:18px}.nav-label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.page-content{background-color:var(--bg-secondary);flex:1;padding:24px;overflow-y:auto}@media (width<=768px){.sidebar-toggle{display:block}.sidebar{left:0;top:var(--topbar-height);height:calc(100vh - var(--topbar-height));z-index:50;position:absolute;box-shadow:2px 0 8px #0000001a}.sidebar.closed{transform:translate(-100%)}.sidebar.open{width:240px}.topbar-left{flex:0}.topbar-title{font-size:18px}.page-content{padding:16px}.main-content{flex-direction:column;position:relative}}@media (width<=425px){.topbar{gap:12px;padding:0 12px}.topbar-title{font-size:16px}.user-menu{gap:8px;font-size:12px}.logout-btn{padding:6px 12px;font-size:12px}.nav-item{gap:10px;padding:10px 12px}.page-content{padding:12px}.sidebar,.sidebar.open{width:220px}}.sidebar::-webkit-scrollbar{width:6px}.page-content::-webkit-scrollbar{width:6px}.sidebar::-webkit-scrollbar-track{background:var(--bg-secondary)}.page-content::-webkit-scrollbar-track{background:var(--bg-secondary)}.sidebar::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.page-content::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.sidebar::-webkit-scrollbar-thumb:hover{background:var(--secondary)}.page-content::-webkit-scrollbar-thumb:hover{background:var(--secondary)}.error-state{border:1px solid var(--error);color:var(--error);background:#ef44441a;border-radius:6px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin:12px 0;padding:12px 16px;display:flex}.error-retry{color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:4px;padding:6px 14px}.live-indicator{color:var(--text-secondary);font-size:.85rem}.live-indicator.open{color:var(--success)}.login-container{background:linear-gradient(135deg,#2563eb 0%,#1e40af 100%);justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.login-box{background-color:var(--bg-primary);border-radius:8px;width:100%;max-width:400px;padding:40px;box-shadow:0 10px 25px #0003}.login-title{color:var(--text-primary);text-align:center;margin-bottom:8px;font-size:28px;font-weight:700}.login-subtitle{color:var(--text-secondary);text-align:center;margin-bottom:32px;font-size:14px}.login-form{flex-direction:column;gap:20px;display:flex}.form-group input{border:1px solid var(--border);background-color:var(--bg-primary);color:var(--text-primary);border-radius:4px;padding:10px 12px;font-size:14px;transition:border-color .2s}.form-group input:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #2563eb1a}.form-group input:disabled{opacity:.6;cursor:not-allowed}.login-button{background-color:var(--primary);color:#fff;cursor:pointer;border:none;border-radius:4px;margin-top:10px;padding:12px 20px;font-size:16px;font-weight:600;transition:background-color .2s}.login-button:hover:not(:disabled){background-color:var(--primary-dark)}.login-button:disabled{opacity:.7;cursor:not-allowed}@media (width<=425px){.login-box{padding:30px 20px}.login-title{font-size:24px}.login-form{gap:16px}.form-group input{padding:10px 12px;font-size:16px}}.dashboard-page{flex-direction:column;gap:32px;display:flex}.page-title{color:var(--text-primary);margin-bottom:12px;font-size:28px;font-weight:700}.status-cards{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;display:grid}.status-card{background-color:var(--bg-primary);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:8px;padding:20px;transition:box-shadow .2s,border-color .2s;display:flex}.status-card:hover{border-color:var(--primary);box-shadow:0 4px 12px #2563eb1a}.card-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;font-size:12px;font-weight:600}.card-value{color:var(--primary);font-size:32px;font-weight:700}.card-value.online{color:var(--success)}.dashboard-section{background-color:var(--bg-primary);border:1px solid var(--border);border-radius:8px;padding:24px}.dashboard-section h2{color:var(--text-primary);margin-bottom:16px;font-size:18px;font-weight:600}.events-table-wrapper{overflow-x:auto}.events-table th{background-color:var(--bg-secondary);text-align:left;color:var(--text-primary);border-bottom:2px solid var(--border);padding:12px;font-weight:600}.plate-cell{font-weight:600}.link-button{color:var(--primary);cursor:pointer;font-weight:600;text-decoration:none;transition:color .2s}.link-button:hover{color:var(--primary-dark);text-decoration:underline}.no-data{text-align:center;color:var(--text-secondary);font-style:italic;padding:32px 12px!important}.worker-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;display:grid}.worker-card{background-color:var(--bg-secondary);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:12px;padding:16px;display:flex}.worker-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.worker-id{color:var(--text-primary);font-family:Courier New,monospace;font-weight:600}.status-badge{text-transform:uppercase;border-radius:3px;padding:4px 8px;font-size:12px;font-weight:600}.worker-info{flex-direction:column;gap:8px;font-size:13px;display:flex}.info-row{color:var(--text-secondary);justify-content:space-between;align-items:center;display:flex}.info-value{color:var(--text-primary);font-weight:600}@media (width<=768px){.status-cards{grid-template-columns:repeat(2,1fr)}.page-title{font-size:24px}.worker-grid{grid-template-columns:1fr}.events-table{font-size:12px}.events-table th,.events-table td{padding:8px}}@media (width<=425px){.status-cards{grid-template-columns:1fr}.page-title{font-size:20px}.dashboard-section{padding:16px}.dashboard-section h2{font-size:16px}.events-table{font-size:11px}.plate-badge{padding:2px 8px;font-size:11px}}.card-value.offline{color:var(--error)}.cameras-page{flex-direction:column;gap:24px;display:flex}.page-header{justify-content:space-between;align-items:center;gap:16px;display:flex}.btn{cursor:pointer;white-space:nowrap;border:none;border-radius:4px;padding:10px 16px;font-size:14px;font-weight:600;transition:all .2s}.btn-primary{background-color:var(--primary);color:#fff}.btn-primary:hover{background-color:var(--primary-dark)}.btn-secondary{background-color:var(--border);color:var(--text-primary)}.btn-secondary:hover{background-color:var(--border);opacity:.8}.btn-danger{background-color:var(--error);color:#fff}.btn-danger:hover{opacity:.8}.btn-small{padding:6px 12px;font-size:12px}.camera-form-section{background-color:var(--bg-primary);border:1px solid var(--border);border-radius:8px;padding:24px}.camera-form-section h2{color:var(--text-primary);margin-bottom:20px;font-size:18px;font-weight:600}.camera-form{flex-direction:column;gap:20px;display:flex}.form-group{flex-direction:column;gap:8px;display:flex}.form-group label{color:var(--text-primary);font-size:14px;font-weight:500}.form-group input,.form-group textarea{border:1px solid var(--border);background-color:var(--bg-primary);color:var(--text-primary);border-radius:4px;padding:10px 12px;font-family:inherit;font-size:14px;transition:border-color .2s}.form-group input:focus,.form-group textarea:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 3px #2563eb1a}.form-group input.error,.form-group textarea.error{border-color:var(--error)}.form-group small{color:var(--text-secondary);font-size:12px}.form-group.checkbox-group input[type=checkbox]{cursor:pointer;width:auto;margin-right:8px}.form-group.checkbox-group label{cursor:pointer;align-items:center;gap:0;font-weight:400;display:flex}.error-message{color:var(--error);font-size:12px}.form-error{border:1px solid var(--error);color:var(--error);text-align:center;background-color:#ef44441a;border-radius:4px;padding:10px 12px;font-size:14px}.form-row{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:16px;display:grid}.form-actions{gap:12px;margin-top:12px;display:flex}.form-actions .btn{flex:1}.empty-state{background-color:var(--bg-primary);border:2px dashed var(--border);text-align:center;border-radius:8px;flex-direction:column;align-items:center;gap:20px;padding:48px 24px;display:flex}.empty-state p{color:var(--text-secondary);margin:0;font-size:16px}.empty-state .btn{align-self:center}.cameras-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;display:grid}.camera-card{background-color:var(--bg-primary);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:16px;padding:20px;transition:box-shadow .2s,border-color .2s;display:flex}.camera-card:hover{border-color:var(--primary);box-shadow:0 4px 12px #2563eb1a}.card-header{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.card-header h3{color:var(--text-primary);word-break:break-word;margin:0;font-size:16px;font-weight:600}.card-badges{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.badge{white-space:nowrap;text-transform:uppercase;border-radius:3px;padding:4px 8px;font-size:11px;font-weight:600;display:inline-block}.badge.pinned{color:var(--primary);background-color:#2563eb33}.badge.enabled{color:var(--success);background-color:#22c55e33}.badge.disabled{color:var(--error);background-color:#ef444433}.card-body{flex-direction:column;gap:12px;font-size:13px;display:flex}.card-row{align-items:flex-start;gap:12px;display:flex}.card-row .label{color:var(--text-secondary);flex-shrink:0;min-width:80px;font-weight:600}.monospace{background-color:var(--bg-secondary);word-break:break-all;color:var(--text-primary);border-radius:3px;padding:4px 8px;font-family:Courier New,monospace}.fallbacks-list{flex-direction:column;gap:6px;display:flex}.fallbacks-list code{font-size:12px}.card-actions{gap:8px;margin-top:8px;display:flex}.card-actions .btn{flex:1}@media (width<=768px){.page-header{flex-direction:column;align-items:stretch}.page-header .btn{width:100%}.cameras-grid,.form-row{grid-template-columns:1fr}.form-actions{flex-direction:column}.card-row{flex-direction:column;gap:4px}.card-row .label{min-width:auto}}.workers-page{flex-direction:column;gap:24px;display:flex}.workers-stats{grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:12px;display:grid}.stat{background-color:var(--bg-primary);border:1px solid var(--border);text-align:center;border-radius:8px;flex-direction:column;gap:8px;padding:16px;display:flex}.stat span{color:var(--text-secondary);text-transform:uppercase;font-size:12px;font-weight:600}.stat strong{color:var(--primary);font-size:28px}.workers-table-wrapper{background-color:var(--bg-primary);border:1px solid var(--border);border-radius:8px;overflow:auto}.workers-table{border-collapse:collapse;width:100%;font-size:13px}.workers-table th{background-color:var(--bg-secondary);text-align:left;color:var(--text-primary);border-bottom:2px solid var(--border);white-space:nowrap;padding:12px;font-weight:600}.workers-table td{border-bottom:1px solid var(--border);color:var(--text-primary);padding:12px}.workers-table tbody tr:hover{background-color:var(--bg-secondary)}.number{text-align:right;font-variant-numeric:tabular-nums}.status-badge{text-transform:uppercase;border-radius:3px;padding:4px 8px;font-size:11px;font-weight:600;display:inline-block}.status-badge.running{color:var(--success);background-color:#22c55e33}.status-badge.idle{color:var(--text-secondary);background-color:#64748b33}.status-badge.connecting{color:var(--warning);background-color:#eab30833}.status-badge.error{color:var(--error);background-color:#ef444433}.action-buttons{justify-content:flex-end;gap:6px;display:flex}.btn-action{cursor:pointer;background:0 0;border:none;border-radius:3px;padding:4px 8px;font-size:16px;transition:background-color .2s}.btn-action:hover{background-color:var(--bg-secondary)}.btn-stop:hover{background-color:#ef444433}.btn-assign:hover{background-color:#22c55e33}.workers-info{background-color:var(--bg-primary);border:1px solid var(--border);border-radius:8px;padding:20px}.workers-info h3{color:var(--text-primary);margin:0 0 12px;font-size:16px;font-weight:600}.workers-info p{color:var(--text-secondary);margin:0;font-size:14px;line-height:1.6}@media (width<=768px){.workers-stats{grid-template-columns:repeat(3,1fr)}.workers-table{font-size:12px}.workers-table th,.workers-table td{padding:8px}.action-buttons{gap:4px}.btn-action{padding:3px 6px;font-size:14px}}@media (width<=425px){.workers-stats{grid-template-columns:1fr}.workers-table{font-size:11px}.workers-table th,.workers-table td{padding:6px}.number{font-size:11px}}.status-badge.busy{color:var(--success);background-color:#22c55e33}.status-badge.down{color:var(--error);background-color:#ef444433}.events-page{flex-direction:column;gap:20px;display:flex}.filters{background-color:var(--bg-primary);border:1px solid var(--border);border-radius:8px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;padding:16px;display:grid}.filter-group{flex-direction:column;gap:6px;display:flex}.filter-group label{color:var(--text-secondary);text-transform:uppercase;font-size:12px;font-weight:600}.filter-group input{border:1px solid var(--border);background-color:var(--bg-primary);color:var(--text-primary);border-radius:4px;padding:8px 12px;font-size:14px;transition:border-color .2s}.filter-group input:focus{border-color:var(--primary);outline:none}.events-summary{color:var(--text-secondary);padding:0 4px;font-size:14px}.events-table-wrapper{background-color:var(--bg-primary);border:1px solid var(--border);border-radius:8px;overflow:auto}.events-table{border-collapse:collapse;width:100%;font-size:13px}.events-table th{background-color:var(--bg-secondary);text-align:left;color:var(--text-primary);border-bottom:2px solid var(--border);white-space:nowrap;padding:12px;font-weight:600}.events-table td{border-bottom:1px solid var(--border);color:var(--text-primary);padding:12px}.events-table tbody tr:hover{background-color:var(--bg-secondary)}.plate-badge{background-color:var(--primary);color:#fff;letter-spacing:1px;border-radius:4px;padding:4px 12px;font-family:Courier New,monospace;font-weight:700;display:inline-block}.confidence-badge{color:var(--success);background-color:#22c55e1a;border-radius:4px;padding:4px 12px;font-weight:600;display:inline-block}.monospace{background-color:var(--bg-secondary);border-radius:3px;padding:4px 8px;font-family:Courier New,monospace}.link{color:var(--primary);cursor:pointer;font-weight:600;text-decoration:none;transition:color .2s}.link:hover{color:var(--primary-dark);text-decoration:underline}.no-data{text-align:center;color:var(--text-secondary);padding:32px 12px;font-style:italic}@media (width<=768px){.filters{grid-template-columns:1fr}.events-table{font-size:12px}.events-table th,.events-table td{padding:8px}}@media (width<=425px){.events-table{font-size:11px}.events-table th,.events-table td{padding:6px}.plate-badge{padding:3px 8px;font-size:10px}}.live-page{flex-direction:column;gap:16px;display:flex}.live-toolbar label,.live-camera-pick{color:var(--text-secondary);flex-direction:column;gap:4px;max-width:320px;font-size:12px;font-weight:600;display:flex}.live-toolbar select,.live-camera-pick select{border:1px solid var(--border);background:var(--bg-primary);min-height:40px;color:var(--text-primary);border-radius:4px;padding:8px;font-size:14px}.live-grid{grid-template-columns:minmax(0,2fr) minmax(260px,1fr);align-items:start;gap:16px;display:grid}@media (width<=900px){.live-grid{grid-template-columns:minmax(0,1fr)}}.live-view{background:#000;border-radius:8px;min-height:200px;position:relative;overflow:hidden}.live-view img{width:100%;height:auto;display:block}.live-empty{color:#94a3b8;text-align:center;padding:80px 16px}.live-test-banner{color:#fff;background:#000000b3;border-radius:6px;padding:8px 12px;font-size:13px;position:absolute;bottom:8px;left:8px;right:8px}.live-panel{border:1px solid var(--border);background:var(--bg-primary);color:var(--text-primary);border-radius:8px;flex-direction:column;gap:12px;padding:16px;display:flex}.live-panel h2{margin:8px 0 0;font-size:15px}.live-panel dl{grid-template-columns:auto 1fr;gap:6px 12px;margin:0;font-size:14px;display:grid}.live-panel dt{color:var(--text-secondary)}.live-panel dd{overflow-wrap:anywhere;margin:0}.live-panel dd.ok{color:var(--success);font-weight:600}.live-panel dd.bad{color:var(--error);font-weight:600}.live-sources,.live-events{flex-direction:column;gap:8px;margin:0;padding:0;font-size:14px;list-style:none;display:flex}.live-source-actions{flex-wrap:wrap;gap:8px;margin-top:6px;display:flex}.live-muted{color:var(--text-secondary);font-size:13px}.live-error{color:var(--error);margin:0}.live-notice{border:1px solid var(--success);background:var(--bg-primary);color:var(--text-primary);border-radius:8px;padding:12px 16px}.test-camera-page{flex-direction:column;gap:16px;max-width:720px;display:flex}.test-camera-controls{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.test-camera-controls label{color:var(--text-secondary);flex-direction:column;gap:4px;font-size:12px;font-weight:600;display:flex}.test-camera-controls select{border:1px solid var(--border);background:var(--bg-primary);min-height:40px;color:var(--text-primary);border-radius:4px;padding:8px;font-size:14px}.test-camera-controls .btn{min-height:40px}.test-camera-state{border:1px solid var(--border);background:var(--bg-primary);color:var(--text-primary);border-radius:8px;flex-direction:column;gap:4px;padding:12px 16px;display:flex}.test-camera-state span{color:var(--text-secondary);font-size:13px}.test-camera-state.state-live{border-color:var(--success)}.test-camera-state.state-reconnecting,.test-camera-state.state-connecting{border-color:var(--warning)}.test-camera-state.state-failed{border-color:var(--error)}.test-camera-warning{border:1px solid var(--warning);color:var(--text-primary);background:var(--bg-primary);border-radius:8px;padding:12px 16px;font-size:14px}.test-camera-preview{object-fit:contain;background:#000;border-radius:8px;width:100%;max-height:60vh}.placeholder-page{flex-direction:column;gap:24px;display:flex}.page-title{color:var(--text-primary);margin:0;font-size:28px;font-weight:700}.placeholder-content{background-color:var(--bg-primary);border:2px dashed var(--border);text-align:center;border-radius:8px;flex-direction:column;align-items:center;gap:20px;padding:60px 40px;display:flex}.placeholder-icon{opacity:.5;font-size:64px}.placeholder-content h2{color:var(--text-primary);margin:0;font-size:20px;font-weight:600}.placeholder-content p{color:var(--text-secondary);max-width:400px;margin:0;font-size:14px;line-height:1.6}.placeholder-note{color:var(--text-secondary);font-size:13px;font-style:italic;margin-top:20px!important}@media (width<=425px){.placeholder-content{padding:40px 20px}.placeholder-icon{font-size:48px}.placeholder-content h2{font-size:18px}}#root{flex-direction:column;height:100vh;display:flex}body{margin:0;padding:0;font-family:system-ui,-apple-system,sans-serif}
