:root{color-scheme:dark;--bg: #14171c;--bg-2: #1d2127;--bg-3: #272c33;--fg: #eef0f3;--fg-muted: #a6abb3;--essae-red: #d7051f;--essae-red-2: #b00319;--essae-red-soft: rgba(215, 5, 31, .18);--accent: var(--essae-red);--accent-2: #ff9629;--success: #2ecc71;--warn: #ffb020;--danger: #ff6b6b;--info: #4ea1ff;--border: #2e3340}*{box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:absolute;left:-9999px;top:0;z-index:10000;background:var(--essae-red);color:#fff;padding:8px 12px;border-radius:0 0 4px;font-size:13px;text-decoration:none;font-weight:600}.skip-link:focus{left:0;top:0;outline:2px solid #fff;outline-offset:2px}:focus-visible{outline:2px solid #d7051f;outline-offset:2px}.btn:focus-visible,.top-tab:focus-visible{outline-offset:3px}body{margin:0;background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;display:flex;flex-direction:column;min-height:100vh}header{grid-area:header;padding:10px 20px;border-bottom:2px solid var(--essae-red);background:linear-gradient(180deg,var(--bg-2),var(--bg));display:flex;flex-direction:column;gap:10px}.brand-row{display:flex;align-items:center;gap:16px}.brand-logo{height:36px;background:#fff;padding:4px 8px;border-radius:4px}.brand-title{display:flex;flex-direction:column;gap:0}header h1{margin:0;font-size:18px;font-weight:700;letter-spacing:.3px;color:#fff}.brand-tagline{font-size:11px;color:var(--fg-muted);text-transform:uppercase;letter-spacing:1.2px}.controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.controls label{display:flex;align-items:center;gap:6px;font-size:13px}.controls input[type=text],.controls select{background:#111;color:var(--fg);border:1px solid var(--border);padding:4px 6px;border-radius:4px}.btn{display:inline-flex;align-items:center;justify-content:center;background:var(--bg-3);color:var(--fg);border:1px solid var(--border);padding:6px 12px;border-radius:4px;cursor:pointer;font-size:13px;font-weight:500;transition:background .12s,border-color .12s}.btn:hover:not(:disabled){background:#3a414b;border-color:#444c58}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--essae-red);color:#fff;border-color:var(--essae-red);font-weight:600}.btn.primary:hover:not(:disabled){background:var(--essae-red-2);border-color:var(--essae-red-2)}.btn.danger{background:var(--danger);color:#000;border-color:var(--danger)}.player{padding:0;display:flex;flex-direction:column;gap:6px;min-width:0}.seek-row{display:flex;gap:8px;align-items:center;font-size:11px;color:#888;padding:0 4px}.seek-row input[type=range]{flex:1}#time-label{font-family:monospace;font-size:11px;min-width:90px;text-align:right}.stage{width:100%;aspect-ratio:16 / 9;background:#000;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:4px;position:relative;overflow:hidden}canvas{display:block;cursor:crosshair;width:100%;height:100%;object-fit:contain;border:0}#panel{grid-area:panel;border-left:1px solid var(--border);padding:12px;background:var(--bg-2);overflow-y:auto;display:flex;flex-direction:column;gap:8px}#panel h3{margin:8px 0 4px;font-size:14px}#region-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:4px}.region-item{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;background:#1a1a1a;border:1px solid var(--border);border-radius:4px;font-size:13px}.region-item.active{border-color:var(--essae-red)}.region-item button{background:none;border:none;color:var(--danger);cursor:pointer}#json-preview{background:#111;border:1px solid var(--border);padding:8px;border-radius:4px;font-size:11px;max-height:300px;overflow:auto;white-space:pre-wrap}.hint{font-size:11px;color:#888;margin:8px 0 0}.sep{display:inline-block;width:1px;background:var(--border);align-self:stretch}.pill-row{display:flex;flex-wrap:wrap;gap:6px}.pill{display:inline-flex;border-radius:4px;overflow:hidden;font-family:ui-monospace,SFMono-Regular,monospace;font-size:12px;border:1px solid var(--border)}.pill .pl{background:#2a2a2a;color:#aaa;padding:4px 8px}.pill .pv{background:#444;color:#fff;padding:4px 10px;min-width:50px;text-align:center;font-weight:600}.pill .pv.on{background:#2ecc71;color:#000}.pill .pv.warn{background:#ff9f1c;color:#000}.pill .pv.off{background:#555;color:#ccc}.pill .pv.info{background:#4ea1ff;color:#000}.pill .pv.height{background:#f4d35e;color:#000}.pill .pv.person{background:#ff9629;color:#000}.events{list-style:none;padding:0;margin:0;font-family:ui-monospace,SFMono-Regular,monospace;font-size:12px;max-height:300px;overflow-y:auto;background:#111;border:1px solid var(--border);border-radius:4px}.events li{display:flex;justify-content:space-between;gap:8px;padding:4px 8px;border-bottom:1px solid #1f1f1f}.events li:last-child{border-bottom:none}.events .ev-cam{color:#888;min-width:56px}.events .ev-type{font-weight:600;flex:1}.events .ev-type.entry{color:#2ecc71}.events .ev-type.exit{color:#ff9f1c}.events .ev-type.depth_start{color:#4ea1ff}.events .ev-type.depth_stop{color:#aaa}.events .ev-type.stable_centered{color:#2ecc71}.events .ev-time{color:#999}.url-config{display:flex;flex-direction:column;gap:6px}.url-config label{display:flex;align-items:center;gap:6px;font-size:12px;color:#aaa}.url-config input{flex:1;font-family:ui-monospace,monospace;font-size:11px;background:#111;color:#ddd;border:1px solid var(--border);padding:4px 6px;border-radius:3px}.url-config .btn{align-self:flex-start}.cfg-status{font-size:11px;color:#888;min-height:14px}.cfg-status.ok{color:#2ecc71}.cfg-status.err{color:#ff6b6b}.tab-bar{display:flex;gap:0;border-bottom:1px solid var(--border);margin:6px 0 8px}.tab-btn{background:transparent;color:#888;border:none;border-bottom:2px solid transparent;padding:6px 12px;cursor:pointer;font-size:13px}.tab-btn:hover{color:#ccc}.tab-btn.active{color:var(--fg);border-bottom-color:var(--essae-red)}.tab-pane{display:none}.tab-pane.active{display:block}.logs{background:#0d0d0d;border:1px solid var(--border);border-radius:4px;padding:8px;margin:0;font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;line-height:1.4;max-height:400px;overflow:auto;white-space:pre-wrap;word-break:break-word;color:#ccc}.logs .err{color:#ff9f9f}h4.sub{font-size:12px;color:#999;margin:12px 0 6px;text-transform:uppercase;letter-spacing:.5px}.phase-pill .pv{min-width:90px}.pill .pv.phase-IDLE{background:#555;color:#ccc}.pill .pv.phase-PARTIALLY_OUT{background:#ff9f1c;color:#000}.pill .pv.phase-ALIGNING,.pill .pv.phase-WAIT_STABLE{background:#4ea1ff;color:#000}.pill .pv.phase-VEHICLE_STABLE{background:#2ecc71;color:#000}.pill .pv.phase-ANPR_CAPTURE,.pill .pv.phase-SEND_TO_AWS{background:#b48cff;color:#000}.pill .pv.phase-TRANSACTION_COMPLETE{background:#2ecc71;color:#000}.pill .pv.phase-WAITING_FOR_EXIT{background:#ff9f1c;color:#000}.pill .pv.phase-FAULT{background:#d7051f;color:#fff}.pill .pv.phase-OFFLINE{background:#333;color:#777}.signal-row .pv{min-width:22px}.signal-row .pv.sig1{background:#2ecc71;color:#000}.signal-row .pv.sig0{background:#2a2a2a;color:#555}.anpr-row{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.anpr-result{background:#0d0d0d;border:1px solid var(--border);border-radius:4px;padding:8px;margin-top:6px;font-family:ui-monospace,monospace;font-size:12px}.ar-row{display:flex;gap:8px;padding:2px 0}.ar-k{color:#888;min-width:110px}.ar-v{color:#eee}.ar-v.empty{color:#555}.data-table{width:100%;border-collapse:collapse;font-size:12px}.data-table thead th{background:#1a1a1a;color:#888;text-align:left;font-weight:500;padding:6px 8px;border-bottom:1px solid var(--border);text-transform:uppercase;font-size:10px;letter-spacing:.5px}.data-table tbody td{padding:6px 8px;border-bottom:1px solid #1a1a1a;color:#ddd;vertical-align:top}.data-table tbody tr:hover{background:#181818}.data-table .mono{font-family:ui-monospace,monospace}.data-table .small{font-size:11px;color:#999}.data-table.small{font-size:11px}.empty-msg{color:#555;padding:12px;font-size:13px;text-align:center;font-style:italic}.cam-badge{display:inline-block;padding:1px 6px;border-radius:8px;font-size:10px;text-transform:uppercase;letter-spacing:.5px}.cam-front{background:#4ea1ff;color:#000}.cam-back{background:#b48cff;color:#000}.cam-unknown{background:#444;color:#aaa}.txn-badge{display:inline-block;padding:1px 6px;border-radius:4px;font-size:10px;text-transform:uppercase;letter-spacing:.5px}.txn-complete{background:#2ecc71;color:#000}.txn-fault{background:#d7051f;color:#fff}.txn-reset{background:#ff9f1c;color:#000}.txn-open{background:#4ea1ff;color:#000}.hb-pill{display:inline-block;padding:2px 8px;border-radius:8px;font-size:10px;font-weight:600;letter-spacing:.5px}.hb-ok{background:#2ecc71;color:#000}.hb-down{background:#d7051f;color:#fff}.hb-unknown{background:#444;color:#aaa}.hint{color:#888;font-size:11px;margin:6px 0}.top-tabs{display:flex;gap:4px;padding:0 16px;background:#0a0a0a;border-bottom:1px solid var(--border);position:sticky;top:0;z-index:5}.top-tab{background:transparent;color:#888;border:none;border-bottom:2px solid transparent;padding:10px 16px;cursor:pointer;font-size:13px;font-weight:500;letter-spacing:.3px}.top-tab:hover{color:#ddd}.top-tab.active,.top-tab[aria-selected=true]{color:var(--essae-red);border-bottom-color:var(--essae-red)}.brand-status{display:flex;gap:8px;margin-left:auto;align-items:center}.bs-pill{display:inline-flex;gap:0;border-radius:4px;overflow:hidden;font-size:11px;font-weight:600}.bs-pill .bs-k{background:#2a2a2a;color:#888;padding:3px 6px}.bs-pill .bs-v{background:#444;color:#fff;padding:3px 8px}.bs-pill .bs-v.bs-up{background:#2ecc71;color:#000}.bs-pill .bs-v.bs-down{background:#d7051f;color:#fff}.bs-pill .bs-v.bs-?{background:#2a2a2a;color:silver}#page-host{padding:16px}.page{display:none}.page.active{display:block}.page-header{display:flex;align-items:center;gap:12px;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border)}.page-header h2{margin:0;font-size:18px;font-weight:500}.page-actions{margin-left:auto;display:flex;gap:6px;align-items:center}.page-actions input[type=search],.page-actions select{background:#1a1a1a;color:#ddd;border:1px solid var(--border);padding:5px 8px;border-radius:3px;font-size:12px}.muted{color:#888;font-size:12px}.live-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:16px;align-items:start}.live-left{min-width:0;display:flex;flex-direction:column;gap:10px}.live-right{min-width:0;max-height:calc(100vh - 140px);overflow-y:auto}.live-right::-webkit-scrollbar{width:8px}.live-right::-webkit-scrollbar-thumb{background:#2a2a2a;border-radius:4px}.live-left .controls{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:6px;background:#131313;border:1px solid var(--border);border-radius:4px;font-size:11px}.live-left .controls label{font-size:11px;color:#aaa;gap:4px}.live-left .controls .btn{padding:4px 8px;font-size:11px}.live-left .controls .sep{width:1px;background:var(--border);height:18px;margin:0 2px}.live-left h3{margin:8px 0 4px;font-size:13px}.events.compact{max-height:180px;overflow-y:auto;margin:0;padding:0}.events.compact li{font-size:11px;padding:2px 6px}.live-left details{background:#131313;border:1px solid var(--border);border-radius:4px;padding:6px 10px}.live-left details summary{cursor:pointer;font-size:12px;color:#aaa;-webkit-user-select:none;user-select:none}.live-left details summary:hover{color:#ddd}.live-left details[open] summary{color:var(--fg);margin-bottom:6px}.live-left details ul,.live-left details pre{margin:4px 0}.live-left details pre{font-size:10px;max-height:160px;overflow:auto}.live-left details .hint{font-size:10px;margin-top:4px}.live-right h3{margin:8px 0 4px;font-size:13px}.live-right h4.sub{margin:8px 0 4px}.live-right .pill-row{gap:4px}.live-right .pill{font-size:11px}.live-right .pill .pl{padding:3px 6px;font-size:10px}.live-right .pill .pv{padding:3px 8px;font-size:11px;min-width:38px}.live-right .signal-row .pv{min-width:16px;padding:3px 6px}.live-right .anpr-row{margin:6px 0;gap:4px}.live-right .anpr-row .btn,.live-right .anpr-result{padding:6px 8px;font-size:11px}.live-right .ar-row{padding:1px 0}.live-right .ar-k{min-width:80px;font-size:11px}.paged-footer{display:flex;align-items:center;gap:10px;padding:8px 2px;margin-top:6px;font-size:12px;color:#bbb}.paged-footer .btn{padding:4px 10px;font-size:11px}.paged-footer .btn[disabled]{opacity:.4;cursor:not-allowed}.paged-footer .pg-info{flex:1;text-align:center;color:#888}.inline-field{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:#bbb}.inline-field input,.inline-field select{background:#0d0d0d;color:#ddd;border:1px solid var(--border);border-radius:3px;padding:3px 5px;font-size:11px}.legacy-anpr-row{align-items:center}.legacy-imgs{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.legacy-imgs figure{margin:0;max-width:96px}.legacy-imgs figcaption{font-size:10px;color:#888;margin-bottom:2px}.legacy-imgs img{max-width:96px;max-height:64px;object-fit:cover;border:1px solid var(--border);border-radius:2px;display:block}.settings-grid,.export-grid,.health-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:12px}.health-grid-wide{grid-column:1 / -1}.sparkline{vertical-align:middle;color:var(--accent, #6cf)}.card{background:#131313;border:1px solid var(--border);border-radius:4px;padding:12px}.card h3{margin:0 0 4px;font-size:14px}.card .hint{margin:0 0 10px;color:#888;font-size:11px}.card form{display:flex;flex-direction:column;gap:6px}.card label{display:flex;flex-direction:column;gap:2px;font-size:11px;color:#aaa}.card label input,.card label select{background:#0d0d0d;border:1px solid var(--border);color:#eee;padding:5px 8px;border-radius:3px;font-size:12px;font-family:ui-monospace,monospace}.card label input[type=checkbox]{width:auto}.card .row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.card .save-row{display:flex;gap:8px;margin-top:8px;align-items:center}.card .save-status{color:#888;font-size:11px}.card .save-status.ok{color:#2ecc71}.card .save-status.err{color:#ff9f9f}.auth-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#000000d9;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.auth-card{background:#1a1a1a;border:1px solid var(--border);border-radius:6px;padding:24px;width:320px;display:flex;flex-direction:column;gap:10px;box-shadow:0 8px 32px #00000080}.auth-card .brand-logo{width:80px;height:auto;align-self:center}.auth-card h2{margin:0;text-align:center;font-size:20px}.auth-card .hint{margin:0 0 8px;text-align:center;color:#888;font-size:12px}.auth-card label{display:flex;flex-direction:column;gap:3px;font-size:11px;color:#aaa}.auth-card input{background:#0d0d0d;border:1px solid var(--border);color:#eee;padding:8px 10px;border-radius:3px;font-size:13px;font-family:inherit}.auth-card input:focus{outline:1px solid var(--essae-red)}.auth-card .btn{padding:9px 12px;font-size:13px}.auth-err{color:#ff9f9f;font-size:12px;min-height:14px;text-align:center}.toast-host{position:fixed;top:12px;right:12px;z-index:999;display:flex;flex-direction:column;gap:6px;pointer-events:none}.toast{pointer-events:auto;background:#2a2a2a;color:#eee;border-left:3px solid #888;padding:8px 14px;border-radius:4px;font-size:12px;box-shadow:0 2px 6px #0006;cursor:pointer;transform:translate(120%);transition:transform .24s ease;min-width:180px;max-width:360px}.toast.show{transform:translate(0)}.toast-ok{border-left-color:#2ecc71}.toast-info{border-left-color:#4ea1ff}.toast-warn{border-left-color:#ff9f1c}.toast-error{border-left-color:#d7051f}.bs-divider{width:1px;height:20px;background:#333;margin:0 4px}.bs-user{display:inline-flex;gap:6px;align-items:center;background:#131313;padding:3px 8px;border-radius:4px;font-size:11px;color:#ddd}.bs-role{display:inline-block;padding:1px 5px;border-radius:3px;font-size:9px;text-transform:uppercase;font-weight:600}.bs-role.role-admin{background:var(--essae-red);color:#fff}.bs-role.role-operator{background:#4ea1ff;color:#000}.btn-icon{background:transparent;border:1px solid #333;color:#aaa;padding:2px 8px;border-radius:3px;cursor:pointer;font-size:11px}.btn-icon:hover{color:#fff;border-color:#555}.bs-v.phase-pill{padding:3px 10px;font-weight:700}.bs-v.phase-IDLE{background:#555;color:#ccc}.bs-v.phase-PARTIALLY_OUT{background:#ff9f1c;color:#000}.bs-v.phase-ALIGNING,.bs-v.phase-WAIT_STABLE{background:#4ea1ff;color:#000}.bs-v.phase-VEHICLE_STABLE{background:#2ecc71;color:#000}.bs-v.phase-ANPR_CAPTURE,.bs-v.phase-SEND_TO_AWS{background:#b48cff;color:#000}.bs-v.phase-TRANSACTION_COMPLETE{background:#2ecc71;color:#000}.bs-v.phase-WAITING_FOR_EXIT{background:#ff9f1c;color:#000}.bs-v.phase-FAULT{background:#d7051f;color:#fff}.bs-v.phase-OFFLINE{background:#333;color:#777}.card label input[type=password]{font-family:ui-monospace,monospace}.users-table .row-actions{display:flex;gap:4px}.btn.small{padding:3px 8px;font-size:10px}.role-badge{display:inline-block;padding:2px 6px;border-radius:3px;font-size:9px;text-transform:uppercase;font-weight:600}.role-badge.role-admin{background:var(--essae-red);color:#fff}.role-badge.role-operator{background:#4ea1ff;color:#000}.user-add-form{display:flex;gap:6px;align-items:end;flex-wrap:wrap;margin-top:12px;padding-top:12px;border-top:1px solid #1a1a1a}.user-add-form h4{width:100%;margin:0 0 4px;font-size:11px;color:#888;text-transform:uppercase}@media (max-width: 900px){.top-tabs{overflow-x:auto;padding:0 8px}.top-tab{white-space:nowrap;padding:10px 12px}.live-grid{grid-template-columns:1fr}.live-right{max-height:none}.brand-status{display:none}}.svc-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.svc-row .btn{padding:6px 12px;font-size:12px}.sys-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}.sys-card-wide{grid-column:1 / -1}.sys-stat-large{font-size:22px;font-weight:700;color:#fff;margin:4px 0 8px}.sys-stat-sub{font-size:13px;color:#888;font-weight:400}.mt-8{margin-top:8px}.bar{position:relative;width:100%;height:14px;background:#1a1a1a;border-radius:7px;overflow:hidden;border:1px solid #2a2a2a}.bar-fill{height:100%;transition:width .24s ease}.bar-fill.bar-ok{background:linear-gradient(90deg,#2ecc71,#5fdf99)}.bar-fill.bar-warm{background:linear-gradient(90deg,#ffb020,#ff9f1c)}.bar-fill.bar-hot{background:linear-gradient(90deg,#ff6b6b,#d7051f)}.bar-pct{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:10px;color:#000;font-weight:700;mix-blend-mode:difference}.temp-badge{display:inline-block;padding:2px 8px;border-radius:8px;font-family:ui-monospace,monospace;font-size:11px;font-weight:700}.temp-badge.tb-cool{background:#2ecc71;color:#000}.temp-badge.tb-mild{background:#4ea1ff;color:#000}.temp-badge.tb-warm{background:#ffb020;color:#000}.temp-badge.tb-hot{background:#d7051f;color:#fff}.gpio-table .row-actions{display:flex;gap:4px}.sig-state{display:inline-block;padding:2px 8px;border-radius:3px;font-size:10px;font-weight:700;min-width:32px;text-align:center}.sig-state.sig-on{background:#2ecc71;color:#000}.sig-state.sig-off{background:#2a2a2a;color:#777}.bridge-up{color:#2ecc71}.bridge-warn{color:#ff9f1c}.bridge-down{color:#ff6b6b}.raw-row{display:flex;gap:6px;align-items:center;margin-top:6px}.raw-row input{font-family:ui-monospace,monospace;background:#0d0d0d;border:1px solid var(--border);color:#eee;padding:6px 10px;border-radius:3px;font-size:13px;min-width:200px}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.bulk-ops{display:inline-flex;align-items:stretch;gap:6px;padding:3px 8px 3px 10px;border:1px solid var(--border);border-radius:4px;background:linear-gradient(180deg,#131619,#0f1115);position:relative}.bulk-ops-label{align-self:center;font-family:ui-monospace,SFMono-Regular,monospace;font-size:9px;letter-spacing:1.5px;color:var(--fg-muted);padding-right:8px;border-right:1px solid var(--border);-webkit-user-select:none;user-select:none}.bulk-op{padding:4px 10px;font-size:12px;gap:6px}.bulk-op .btn-glyph{width:12px;height:12px;flex:0 0 auto;color:currentColor}.bulk-op.primary .btn-glyph{color:#fff}.anpr-test-card .card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:2px}.anpr-test-card .card-head h3{margin:0}.tech-tag{font-family:ui-monospace,SFMono-Regular,monospace;font-size:10px;letter-spacing:.3px;color:var(--fg-muted);padding:2px 8px;background:#0d0f13;border:1px solid var(--border);border-radius:3px;white-space:nowrap}.anpr-drop{position:relative;display:block;border:1px solid var(--border);border-radius:4px;padding:28px 20px;margin:10px 0 8px;background:radial-gradient(ellipse at center,rgba(215,5,31,.04) 0%,transparent 60%),repeating-linear-gradient(45deg,transparent 0 6px,rgba(255,255,255,.012) 6px 12px),#0d0f13;cursor:pointer;overflow:hidden;transition:border-color .14s,background .14s}.anpr-drop:hover{border-color:#3f4552;background:radial-gradient(ellipse at center,rgba(215,5,31,.06) 0%,transparent 60%),repeating-linear-gradient(45deg,transparent 0 6px,rgba(255,255,255,.016) 6px 12px),#0d0f13}.anpr-drop:focus-visible{outline:none;border-color:var(--essae-red)}.anpr-drop-corner{position:absolute;width:16px;height:16px;pointer-events:none;transition:border-color .14s,width .14s,height .14s}.anpr-drop-corner.c-tl{top:8px;left:8px;border-top:2px solid var(--fg-muted);border-left:2px solid var(--fg-muted)}.anpr-drop-corner.c-tr{top:8px;right:8px;border-top:2px solid var(--fg-muted);border-right:2px solid var(--fg-muted)}.anpr-drop-corner.c-bl{bottom:8px;left:8px;border-bottom:2px solid var(--fg-muted);border-left:2px solid var(--fg-muted)}.anpr-drop-corner.c-br{bottom:8px;right:8px;border-bottom:2px solid var(--fg-muted);border-right:2px solid var(--fg-muted)}.anpr-drop-scan{position:absolute;left:0;right:0;top:0;height:1px;pointer-events:none;background:linear-gradient(90deg,transparent 0%,var(--essae-red) 20%,var(--accent-2) 50%,var(--essae-red) 80%,transparent 100%);opacity:0;transform:translateY(0)}.anpr-drop.scanning .anpr-drop-scan{opacity:.9;animation:anpr-scan 1.6s linear infinite}@keyframes anpr-scan{0%{transform:translateY(0);opacity:.1}10%{opacity:.9}90%{opacity:.9}to{transform:translateY(calc(100% - 1px));opacity:.1}}.anpr-drop.drag-hover{border-color:var(--essae-red);background:radial-gradient(ellipse at center,var(--essae-red-soft) 0%,transparent 65%),repeating-linear-gradient(45deg,transparent 0 6px,rgba(215,5,31,.03) 6px 12px),#12080b}.anpr-drop.drag-hover .anpr-drop-corner{width:22px;height:22px}.anpr-drop.drag-hover .c-tl{border-top-color:var(--essae-red);border-left-color:var(--essae-red)}.anpr-drop.drag-hover .c-tr{border-top-color:var(--essae-red);border-right-color:var(--essae-red)}.anpr-drop.drag-hover .c-bl{border-bottom-color:var(--essae-red);border-left-color:var(--essae-red)}.anpr-drop.drag-hover .c-br{border-bottom-color:var(--essae-red);border-right-color:var(--essae-red)}.anpr-drop.drag-hover .anpr-drop-icon{color:var(--essae-red)}.anpr-drop-inner{display:flex;align-items:center;justify-content:center;gap:18px;text-align:left}.anpr-drop-icon{width:52px;height:52px;color:var(--fg-muted);flex:0 0 auto;transition:color .14s}.anpr-drop-text{display:flex;flex-direction:column;gap:2px}.anpr-drop-primary{font-size:14px;font-weight:600;color:var(--fg);letter-spacing:.2px}.anpr-drop-secondary{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--fg-muted);margin-top:2px}.anpr-drop-secondary .btn{padding:3px 10px;font-size:11px}.anpr-drop-sep{font-family:ui-monospace,SFMono-Regular,monospace;font-size:10px;text-transform:uppercase;letter-spacing:1px;color:#555a64}.anpr-drop-meta{font-family:ui-monospace,SFMono-Regular,monospace;font-size:10px;letter-spacing:.5px;color:#555a64;margin-top:6px}.anpr-test-status{margin-top:8px;padding:4px 2px;font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;letter-spacing:.2px;min-height:18px}.anpr-test-output{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:12px;margin-top:12px;padding-top:12px;border-top:1px dashed var(--border)}@media (max-width: 900px){.anpr-test-output{grid-template-columns:1fr}}.anpr-test-canvas-label{display:flex;justify-content:space-between;align-items:center;font-family:ui-monospace,SFMono-Regular,monospace;font-size:10px;letter-spacing:1.5px;color:var(--fg-muted);padding-bottom:5px;margin-bottom:6px;border-bottom:1px solid var(--border);text-transform:uppercase}.anpr-test-canvas-dim{color:#555a64}.anpr-test-canvas-wrap{min-width:0;background:linear-gradient(45deg,#0a0b0e 25%,transparent 25%) 0 0 / 12px 12px,linear-gradient(-45deg,#0a0b0e 25%,transparent 25%) 0 0 / 12px 12px,linear-gradient(45deg,transparent 75%,#0a0b0e 75%) 0 0 / 12px 12px,linear-gradient(-45deg,transparent 75%,#0a0b0e 75%) 0 0 / 12px 12px,#0d0f13;border:1px solid var(--border);border-radius:3px;padding:6px}.anpr-test-canvas-wrap canvas{display:block;max-width:100%;height:auto;border-radius:2px;background:#000}.anpr-test-summary-wrap{min-width:0}.anpr-test-summary table.data-table{width:100%;font-size:11px}.anpr-test-summary table.data-table th,.anpr-test-summary table.data-table td{padding:5px 6px}.anpr-test-summary table.data-table td.mono{color:var(--fg);letter-spacing:.3px}.anpr-test-summary .empty-msg{padding:20px 8px;text-align:center;color:var(--fg-muted);font-size:12px;font-style:normal;border:1px dashed var(--border);border-radius:3px}.anpr-test-summary .anpr-det-idx{font-family:ui-monospace,SFMono-Regular,monospace;color:var(--fg-muted);font-size:10px;width:22px;text-align:right}.anpr-test-summary .anpr-det-conf{display:flex;align-items:center;gap:5px;min-width:90px}.anpr-test-summary .anpr-det-bar{flex:1;height:6px;background:#0a0b0e;border:1px solid var(--border);border-radius:2px;overflow:hidden;min-width:40px}.anpr-test-summary .anpr-det-bar-fill{display:block;height:100%;background:linear-gradient(90deg,var(--essae-red),var(--accent-2))}.anpr-test-summary .anpr-det-pct{font-family:ui-monospace,SFMono-Regular,monospace;font-size:10px;color:var(--fg-muted);min-width:28px;text-align:right}.anpr-requests-toolbar{display:flex;gap:8px;margin:10px 0 8px}.anpr-requests-toolbar input[type=search]{flex:1;max-width:320px;padding:6px 10px;background:var(--bg-deep);border:1px solid var(--border);border-radius:3px;color:var(--fg);font-family:inherit;font-size:12px}.anpr-req-thumb-cell{width:80px;padding:4px}.anpr-req-thumb{display:block;width:72px;height:54px;object-fit:cover;border:1px solid var(--border);border-radius:2px;background:#0a0b0e;transition:transform .15s ease}.anpr-req-thumb:hover{transform:scale(1.05);border-color:var(--essae-red)}.anpr-req-thumb.placeholder{display:inline-flex;align-items:center;justify-content:center;color:var(--fg-muted);font-family:ui-monospace,monospace}.anpr-req-detail-cell{font-size:11px;color:var(--fg-muted);max-width:340px}.anpr-req-err{color:var(--essae-red);font-family:ui-monospace,monospace;font-size:11px}tr.txn-row{cursor:pointer}tr.txn-row:hover{background:#ffffff09}.txn-id-btn{background:none;border:0;padding:0;margin:0;color:inherit;font:inherit;cursor:pointer;text-align:left}.txn-id-btn:hover{color:var(--essae-red);text-decoration:underline}.txn-detail{margin:16px 0;padding:14px 18px;background:var(--bg-2, #1b1f26);border:1px solid var(--border, #2d333d);border-radius:6px}.txn-detail-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;font-size:13px;color:var(--fg-muted)}.txn-detail-close{background:none;border:0;color:var(--fg-muted);font-size:16px;cursor:pointer;padding:2px 6px}.txn-detail-close:hover{color:var(--essae-red)}.txn-detail-meta{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:6px 14px;margin-bottom:14px}.txn-detail-meta .kv{font-size:12px;display:flex;gap:8px}.txn-detail-meta .k{color:var(--fg-muted);min-width:70px}.txn-detail-meta .v{color:var(--fg);font-family:ui-monospace,monospace}.txn-detail-h{margin:6px 0 8px;font-size:12px;font-weight:500;color:var(--fg-muted);text-transform:uppercase;letter-spacing:.04em}ol.txn-events{list-style:none;padding:0;margin:0;font-family:ui-monospace,monospace;font-size:11.5px;border-left:2px solid var(--border, #2d333d)}ol.txn-events li.ev{display:flex;gap:10px;align-items:baseline;padding:4px 8px 4px 12px;position:relative}ol.txn-events li.ev:before{content:"";position:absolute;left:-5px;top:10px;width:8px;height:8px;border-radius:50%;background:var(--fg-muted)}ol.txn-events .ev-n{color:var(--fg-muted);min-width:22px;text-align:right}ol.txn-events .ev-time{color:var(--fg-muted);min-width:52px}ol.txn-events .ev-cam{color:#9cb6d4}ol.txn-events .ev-type{font-weight:600;color:var(--fg);padding:0 6px}ol.txn-events .ev-entry,ol.txn-events .ev-plc_transaction_begin,ol.txn-events .ev-phase_change{color:#6ec77b}ol.txn-events .ev-exit,ol.txn-events .ev-plc_transaction_end{color:#d9a65a}ol.txn-events .ev-fault,ol.txn-events .ev-stale{color:var(--essae-red)}ol.txn-events .ev-extra{color:var(--fg-muted);font-size:10.5px;margin-left:4px}ol.txn-events .ev-extra .k{color:#7b8498;margin-right:2px}.veh-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;margin:14px 0 18px}.veh-form label{display:flex;flex-direction:column;gap:4px;margin-bottom:10px;font-size:12px;color:var(--fg-muted)}.veh-form input,.veh-form select{padding:6px 8px;background:var(--bg, #141720);border:1px solid var(--border, #2d333d);border-radius:4px;color:var(--fg);font-size:13px}.veh-form .save-row{display:flex;gap:8px;align-items:center;margin-top:10px}#veh-match-out{background:#0d0d0d;color:#cfe8a8;padding:8px;font-size:11px;line-height:1.4;border-radius:4px;max-height:220px;overflow:auto;margin:8px 0 0;white-space:pre-wrap}.row-actions{white-space:nowrap}.row-actions .btn.small{padding:2px 8px;font-size:11px;margin-right:4px}
