:root{--bg: #0d1117;--panel: #161b22;--panel2: #1c2230;--border: #2a3240;--txt: #e6edf3;--dim: #8b949e;--accent: #1f6feb;--accent2:#388bfd;--ok: #2ea043;--warn: #d29922;--danger: #f85149}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--txt);font-family:system-ui,Segoe UI,Roboto,sans-serif}button{font-family:inherit;cursor:pointer}a{color:var(--accent2)}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center}.login-card{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:34px;width:360px;box-shadow:0 20px 60px #0006}.brand{display:flex;align-items:center;gap:10px;margin-bottom:6px}.brand .logo{width:34px;height:34px;border-radius:8px;background:linear-gradient(135deg,var(--accent),#8957e5);display:grid;place-items:center;font-weight:800}.brand h1{font-size:19px;margin:0}.muted{color:var(--dim);font-size:13px}.field{margin-top:14px}.field label{display:block;font-size:12px;color:var(--dim);margin-bottom:5px}.field input{width:100%;padding:11px 12px;background:var(--bg);color:var(--txt);border:1px solid var(--border);border-radius:8px;font-size:14px}.btn{width:100%;margin-top:18px;padding:11px;background:var(--accent);color:#fff;border:0;border-radius:8px;font-size:14px;font-weight:600}.btn:hover{background:var(--accent2)}.btn:disabled{opacity:.6;cursor:default}.err{color:var(--danger);font-size:13px;margin-top:12px}.shell{display:grid;grid-template-columns:220px 1fr;grid-template-rows:56px 1fr;grid-template-areas:"top top" "side main";height:100vh}.topbar{grid-area:top;display:flex;align-items:center;gap:12px;padding:0 18px;background:var(--panel);border-bottom:1px solid var(--border)}.topbar .spacer{flex:1}.topbar .org{font-size:13px;color:var(--dim)}.topbar .org b{color:var(--txt)}.logout{background:transparent;color:var(--dim);border:1px solid var(--border);padding:6px 12px;border-radius:7px;font-size:13px}.logout:hover{color:var(--txt);border-color:var(--dim)}.sidebar{grid-area:side;background:var(--panel);border-right:1px solid var(--border);padding:12px 8px}.nav{display:flex;flex-direction:column;gap:2px}.nav button{display:flex;align-items:center;gap:10px;text-align:left;background:transparent;border:0;color:var(--dim);padding:10px 12px;border-radius:8px;font-size:14px}.nav button.active,.nav button:hover{background:var(--panel2);color:var(--txt)}.main{grid-area:main;padding:20px 24px;overflow:auto}.main h2{margin:0 0 16px;font-size:20px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:22px}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px}.card .k{color:var(--dim);font-size:13px}.card .v{font-size:30px;font-weight:700;margin-top:6px}.card .v.warn{color:var(--warn)}.card .v.danger{color:var(--danger)}.card .v.ok{color:var(--ok)}.panel{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:4px 0;margin-bottom:20px}.panel h3{margin:14px 16px;font-size:15px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px 16px;font-size:13.5px;border-top:1px solid var(--border)}th{color:var(--dim);font-weight:600}.badge{font-size:11px;padding:2px 9px;border-radius:10px;border:1px solid}.badge.pend{color:var(--warn);border-color:var(--warn)}.badge.ok{color:var(--ok);border-color:var(--ok)}.badge.face{color:var(--accent2);border-color:var(--accent2)}.badge.lpr{color:#c08cff;border-color:#c08cff}.badge.danger-b{color:var(--danger);border-color:var(--danger)}.empty{color:var(--dim);padding:18px 16px;font-size:14px}.placeholder{color:var(--dim);border:1px dashed var(--border);border-radius:12px;padding:40px;text-align:center}.trj-bar{display:flex;align-items:center;gap:10px;margin-bottom:14px}.trj-bar input{padding:9px 12px;background:var(--bg);color:var(--txt);border:1px solid var(--border);border-radius:8px;font-size:14px;width:220px}.btn-sm{padding:9px 16px;background:var(--accent);color:#fff;border:0;border-radius:8px;font-weight:600}.btn-sm:hover{background:var(--accent2)}.trj-grid{display:grid;grid-template-columns:1fr 300px;gap:16px}.trj-map{height:520px;border-radius:12px;border:1px solid var(--border);overflow:hidden}.trj-list{max-height:520px;overflow:auto}.trj-list td{vertical-align:top}.pin{background:var(--accent);color:#fff;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-size:13px;font-weight:700;border:2px solid #fff;box-shadow:0 1px 4px #00000080}.pin.sm{width:22px;height:22px;font-size:12px;border-width:1px}.leaflet-popup-content{color:#111}.main.main-full{padding:14px 16px;overflow:hidden}.vw-root{display:flex;flex-direction:column;height:calc(100vh - 84px)}.vw-toolbar{display:flex;align-items:center;gap:10px;padding-bottom:10px;flex-wrap:wrap}.vw-toolbar select{background:var(--bg);color:var(--txt);border:1px solid var(--border);border-radius:7px;padding:6px 9px;font-size:13px}.vw-layouts{display:flex;gap:4px}.vw-lbtn{min-width:30px;height:28px;padding:0 7px;background:var(--bg);border:1px solid var(--border);color:var(--dim);border-radius:6px;font-size:12px;font-weight:600;cursor:pointer}.vw-lbtn:hover{color:var(--txt);border-color:var(--dim)}.vw-lbtn.on{background:var(--accent);border-color:var(--accent);color:#fff}.vw-stage{flex:1;min-height:0;background:#000;border:1px solid var(--border);border-radius:12px;overflow:hidden;padding:4px}.vw-stage:fullscreen{border-radius:0;padding:2px;border:0}.vw-grid2{display:grid;gap:4px;width:100%;height:100%}.vw-grid2>div{min-width:0;min-height:0}.vw-cell{position:relative;width:100%;height:100%;background:#0a0d12;border-radius:7px;overflow:hidden}.vw-cell video{width:100%;height:100%;object-fit:cover;background:#000;display:block}.vw-live2{position:absolute;right:6px;top:6px;font-size:10px;font-weight:700;color:#fff;background:var(--ok);padding:1px 7px;border-radius:9px}.vw-label2{position:absolute;left:6px;bottom:6px;background:#000000a6;padding:2px 8px;border-radius:5px;font-size:11px;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vw-empty{width:100%;height:100%;display:grid;place-items:center;color:#2a3240;font-size:26px;border:1px dashed var(--border);border-radius:7px}.cam-actions{margin-bottom:12px}.link-del{background:transparent;border:0;color:var(--danger);font-size:13px;cursor:pointer}.link-del:hover{text-decoration:underline}.link-edit{background:transparent;border:0;color:var(--accent2);font-size:13px;cursor:pointer;margin-right:10px}.link-edit:hover{text-decoration:underline}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:grid;place-items:center;z-index:50}.modal{background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:22px;width:480px;max-height:90vh;overflow:auto;box-shadow:0 20px 60px #00000080}.modal h3{margin:0 0 14px;font-size:17px}.modal .field{margin-top:12px}.modal .field label{display:block;font-size:12px;color:var(--dim);margin-bottom:5px}.modal .field input,.modal .field select{width:100%;padding:10px 11px;background:var(--bg);color:var(--txt);border:1px solid var(--border);border-radius:8px;font-size:14px}.modal .row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}.chips{display:flex;gap:8px}.chip{background:var(--bg);border:1px solid var(--border);color:var(--dim);padding:7px 14px;border-radius:20px;font-size:13px;cursor:pointer}.chip.on{background:var(--accent);border-color:var(--accent);color:#fff}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.rec-player{background:#000;border:1px solid var(--border);border-radius:12px;min-height:300px;display:grid;place-items:center;overflow:hidden}.rec-player video{width:100%;height:100%;max-height:520px;background:#000}
