:root {
  --bg:#020704; --bg2:#04110a; --panel:#06150c; --panel2:#081b10;
  --line:#137a3b; --line2:#22d866; --green:#52ff8a; --green2:#9dffbc;
  --muted:#69a77d; --text:#d7ffe3; --amber:#ffd35a; --red:#ff5858; --blue:#75d7ff;
  --shadow:0 0 18px rgba(34,216,102,.16);
}
*{box-sizing:border-box} html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:Consolas,"Lucida Console",monospace}
body{min-height:100vh;background:radial-gradient(circle at 20% 0,rgba(34,216,102,.08),transparent 34%),linear-gradient(180deg,#020704 0,#010402 100%)}
button,input,select{font:inherit}.scanlines{position:fixed;z-index:9999;inset:0;pointer-events:none;background:linear-gradient(rgba(0,0,0,0) 50%,rgba(0,0,0,.17) 50%);background-size:100% 4px;opacity:.5}
.topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:13px 18px;background:rgba(2,7,4,.96);border-bottom:2px solid var(--line2);box-shadow:0 3px 25px rgba(0,0,0,.5)}
.brand{display:flex;align-items:center;gap:13px}.brand-mark{display:grid;place-items:center;width:44px;height:44px;border:2px solid var(--line2);color:var(--green);font-size:22px;font-weight:800;box-shadow:var(--shadow);background:#031008}
h1,h2,h3,p{margin:0}h1{font-size:clamp(18px,2.3vw,30px);letter-spacing:2px;color:var(--green)}.subtitle{margin-top:4px;color:var(--muted);font-size:11px;letter-spacing:1px}.top-status{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}
.shell{width:min(1550px,100%);margin:0 auto;padding:16px}.tabs{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:12px}.tab,.btn{border:1px solid var(--line);background:#06150c;color:var(--green2);padding:9px 12px;cursor:pointer;text-transform:uppercase;letter-spacing:.7px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.6)}.tab:hover,.btn:hover{border-color:var(--line2);background:#0a2415;color:#fff}.tab.active{border:2px solid var(--line2);background:#0b2d19;color:#fff;box-shadow:var(--shadow)}.danger-tab{color:#ff9b9b}.danger-tab.active{border-color:var(--red);box-shadow:0 0 18px rgba(255,88,88,.18)}
.summary-grid{display:grid;grid-template-columns:repeat(4,minmax(110px,1fr)) minmax(220px,1.7fr);gap:8px;margin-bottom:12px}.stat{border:1px solid var(--line);background:var(--panel);padding:11px;min-height:69px}.stat b{display:block;color:var(--green);font-size:24px;line-height:1.1;overflow-wrap:anywhere}.stat span{display:block;margin-top:6px;color:var(--muted);font-size:11px;letter-spacing:.8px}.stat.wide b{font-size:14px;margin-top:5px}
.panel{display:none;border:1px solid var(--line);background:rgba(4,17,10,.85);box-shadow:var(--shadow);min-height:460px}.panel.active{display:block}.panel-head{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:14px;border-bottom:1px solid var(--line)}.panel-head h2{color:var(--green);letter-spacing:2px}.panel-head p{margin-top:4px;color:var(--muted);font-size:12px}.toolbar{display:flex;gap:8px;flex-wrap:wrap}.input{border:1px solid var(--line);background:#020a05;color:var(--text);padding:9px 10px;outline:none;min-width:180px}.input:focus{border-color:var(--line2);box-shadow:0 0 10px rgba(34,216,102,.15)}select.input{cursor:pointer}.btn.compact{padding:7px 9px;font-size:11px}.btn.primary{border-color:var(--line2);background:#0d321d;color:#fff}.btn.warn{border-color:#a97d16;color:var(--amber)}.btn.danger{border-color:#aa3333;color:#ffb1b1;background:#260707}.btn.danger:hover{border-color:var(--red);background:#3b0a0a}.wide-btn{width:100%;margin-top:10px}
.pill{display:inline-block;border:1px solid currentColor;padding:5px 8px;font-size:11px;letter-spacing:1px}.pill.ok{color:var(--green)}.pill.warn{color:var(--amber)}.pill.bad{color:var(--red)}.pill.unknown{color:var(--muted)}
.camera-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:10px;padding:12px}.camera-card{border:1px solid var(--line);background:#041008;min-width:0}.camera-card.stream-bad{border-color:#8d3030}.camera-preview{position:relative;background:#000;aspect-ratio:16/9;overflow:hidden;border-bottom:1px solid var(--line)}.camera-preview img{width:100%;height:100%;display:block;object-fit:cover}.camera-preview .preview-fail{position:absolute;inset:0;display:grid;place-items:center;color:var(--red);background:repeating-linear-gradient(135deg,#090202,#090202 10px,#120404 10px,#120404 20px);font-size:12px;text-align:center;padding:20px}.cam-overlay{position:absolute;left:7px;top:7px;background:rgba(0,0,0,.8);border:1px solid var(--line);padding:4px 6px;color:var(--green);font-size:10px}.camera-body{padding:11px}.camera-title{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}.camera-title h3{color:var(--green2);font-size:17px;overflow-wrap:anywhere}.camera-id{color:var(--muted);font-size:11px}.camera-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.mini{border:1px solid currentColor;padding:4px 6px;font-size:10px}.mini.ok{color:var(--green)}.mini.warn{color:var(--amber)}.mini.bad{color:var(--red)}.mini.muted{color:var(--muted)}.camera-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.camera-actions .btn{font-size:10px;padding:7px 8px}.camera-detail{margin-top:8px;color:var(--muted);font-size:10px;line-height:1.4}
.status-grid,.fix-layout{display:grid;grid-template-columns:repeat(2,minmax(320px,1fr));gap:10px;padding:12px}.box{border:1px solid var(--line);background:#031008;padding:12px;min-width:0}.box h3{color:var(--green);font-size:14px;letter-spacing:1px;margin-bottom:10px;border-bottom:1px dashed var(--line);padding-bottom:7px}.issues-box{grid-column:1/-1}.kv-list{display:grid;gap:0}.kv{display:grid;grid-template-columns:minmax(120px,.65fr) minmax(0,1.35fr);gap:10px;padding:7px 0;border-bottom:1px dotted #13582c;font-size:12px}.kv .k{color:var(--muted)}.kv .v{color:var(--text);overflow-wrap:anywhere}.issue-list{display:grid;gap:6px}.issue{border-left:3px solid var(--muted);background:#06150c;padding:8px 10px;font-size:11px}.issue.warning{border-color:var(--amber)}.issue.critical{border-color:var(--red)}.issue .scope{color:var(--muted);margin-right:7px}.muted,.hint{color:var(--muted);font-size:11px;line-height:1.5}.hint{margin-top:10px;border-left:2px solid var(--line);padding-left:8px}.danger-text{color:#d68f8f}.danger-input{border-color:#7f2525}.label{display:block;color:var(--muted);font-size:10px;margin:10px 0 5px;letter-spacing:1px}.action-stack{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:10px}
.audit-layout{display:grid;grid-template-columns:minmax(340px,.75fr) minmax(460px,1.25fr);gap:10px;padding:12px}.logbox{margin:0;background:#010503;border:1px solid #124e29;color:#bafccc;padding:10px;white-space:pre-wrap;overflow:auto;max-height:560px;font-size:10px;line-height:1.42}.logbox.small{max-height:220px;margin-top:10px}.notice{margin-bottom:12px;border:1px solid var(--line2);background:#071d10;padding:10px 12px;color:var(--green2);font-size:12px}.notice.error{border-color:var(--red);background:#210606;color:#ffd0d0}.notice.warning{border-color:var(--amber);background:#201a05;color:#ffebad}.hidden{display:none!important}
.dialog{width:min(980px,96vw);max-height:94vh;border:2px solid var(--line2);background:#020704;color:var(--text);padding:0;box-shadow:0 0 60px rgba(0,0,0,.8),var(--shadow)}.dialog::backdrop{background:rgba(0,0,0,.82)}.dialog-shell{padding:14px}.dialog-head{display:flex;justify-content:space-between;gap:15px;align-items:flex-start;border-bottom:1px solid var(--line);padding-bottom:10px}.dialog-head h2{color:var(--green)}.dialog-preview{margin:10px 0;background:#000;border:1px solid var(--line);height:min(45vh,420px);display:grid;place-items:center;overflow:hidden}.dialog-preview img{width:100%;height:100%;object-fit:contain}.dialog-actions{display:flex;gap:7px;flex-wrap:wrap}.edit-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}.edit-grid>div{border:1px solid var(--line);padding:9px}.edit-grid h3{font-size:11px;color:var(--muted);margin-bottom:7px}.footer{display:flex;justify-content:space-between;gap:20px;color:#3f8b58;width:min(1550px,100%);margin:0 auto;padding:10px 16px 20px;font-size:10px;letter-spacing:1px}
@media(max-width:900px){.topbar{position:static;align-items:flex-start;flex-direction:column}.top-status{justify-content:flex-start}.summary-grid{grid-template-columns:repeat(2,1fr)}.stat.wide{grid-column:1/-1}.status-grid,.fix-layout,.audit-layout{grid-template-columns:1fr}.issues-box{grid-column:auto}.panel-head{align-items:flex-start;flex-direction:column}.toolbar{width:100%}.toolbar .input{flex:1}.edit-grid{grid-template-columns:1fr}.camera-grid{grid-template-columns:1fr}}
.source-layout{display:grid;grid-template-columns:minmax(420px,1.15fr) minmax(320px,.85fr);gap:10px;padding:12px}.source-candidates-box{grid-column:1/-1}.source-list{display:grid;gap:7px}.source-row{display:grid;grid-template-columns:minmax(220px,1fr) auto auto;gap:8px;align-items:center;border-bottom:1px dotted #13582c;padding:8px 0}.source-row b{display:block;color:var(--green2);font-size:12px}.source-row span{display:block;color:var(--muted);font-size:10px;margin-top:3px}.source-row-state{display:flex;gap:5px;flex-wrap:wrap}.source-row-state .mini{display:inline-block;margin:0}.source-table{display:grid;gap:4px}.source-table-row{display:grid;grid-template-columns:minmax(130px,.8fr) minmax(130px,.8fr) minmax(90px,.5fr) minmax(150px,1fr);gap:8px;padding:7px 8px;border-bottom:1px dotted #13582c;font-size:11px}.source-table-row span:first-child{color:var(--green2)}.source-editor{border:1px solid var(--line);padding:10px;margin-top:10px}.source-editor>h3{color:var(--green);font-size:12px;margin-bottom:6px}.source-editor-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.source-editor-grid .input{width:100%}
@media(max-width:900px){.source-layout{grid-template-columns:1fr}.source-candidates-box{grid-column:auto}.source-row{grid-template-columns:1fr}.source-table-row{grid-template-columns:1fr 1fr}.source-editor-grid{grid-template-columns:1fr}}

/* v1.6 RedPoint global account sidecard */
.account-chip{display:flex;align-items:center;gap:8px;min-width:168px;border:1px solid var(--line);background:#041008;color:var(--text);padding:5px 8px;cursor:pointer;text-align:left}
.account-chip:hover{border-color:var(--line2);box-shadow:var(--shadow)}.account-chip strong,.account-chip small{display:block}.account-chip strong{font-size:11px;color:var(--green2);letter-spacing:.6px}.account-chip small{font-size:9px;color:var(--muted);margin-top:2px}.account-dot{width:9px;height:9px;border-radius:50%;background:var(--muted);box-shadow:0 0 8px currentColor}.account-chip.auth-ok .account-dot{background:var(--green)}.account-chip.auth-warn .account-dot{background:var(--amber)}
.sidecard-backdrop{position:fixed;z-index:98;inset:0;background:rgba(0,0,0,.58)}.account-sidecard{position:fixed;z-index:99;right:0;top:0;height:100vh;width:min(430px,96vw);transform:translateX(105%);transition:transform .18s ease;background:#020704;border-left:2px solid var(--line2);box-shadow:-20px 0 60px rgba(0,0,0,.75);padding:14px;overflow:auto}.account-sidecard.open{transform:translateX(0)}.sidecard-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;border-bottom:1px solid var(--line);padding-bottom:11px}.sidecard-head h2{color:var(--green);letter-spacing:1px}.eyebrow{display:block;color:var(--muted);font-size:9px;letter-spacing:1.5px;margin-bottom:4px}.sidecard-session{display:flex;align-items:center;gap:12px;border:1px solid var(--line);background:#031008;padding:12px;margin:12px 0}.account-avatar{display:grid;place-items:center;width:48px;height:48px;border:2px solid var(--line2);color:var(--green);font-weight:800;font-size:20px}.sidecard-session strong,.sidecard-session span{display:block}.sidecard-session strong{color:var(--green2);font-size:15px}.sidecard-session span{color:var(--muted);font-size:10px;margin-top:3px}.sidecard-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:12px}.auth-dialog{width:min(920px,96vw)}.auth-frame-wrap{margin:10px 0;border:1px solid var(--line);background:#000}.auth-frame-wrap iframe{display:block;width:100%;height:min(68vh,680px);border:0;background:#050805}.auth-frame-note{padding:7px 9px;color:var(--muted);font-size:10px;border-top:1px solid var(--line)}
@media(max-width:900px){.account-chip{min-width:0}.account-chip span:last-child{display:none}.sidecard-actions{grid-template-columns:1fr}}

/* v1.7.1 proper RP module / domain SSO bridge */
.bridge-state{border:1px solid var(--line);background:#031008;padding:10px;margin:10px 0}.bridge-state strong,.bridge-state span{display:block}.bridge-state strong{font-size:11px;letter-spacing:.8px}.bridge-state span{font-size:9px;color:var(--muted);margin-top:4px;line-height:1.45}.bridge-state.ok{border-color:var(--green);box-shadow:0 0 12px rgba(0,255,80,.08)}.bridge-state.ok strong{color:var(--green)}.bridge-state.warn{border-color:var(--amber)}.bridge-state.warn strong{color:var(--amber)}


/* v1.7.1 DVR permission gate */
.access-gate{width:min(980px,calc(100% - 32px));margin:26px auto 10px;padding:0}.access-gate.hidden{display:none!important}.access-gate-card{border:1px solid var(--line2);background:#031008;padding:22px;box-shadow:var(--shadow)}.access-gate-card h2{color:var(--green);margin:4px 0 10px}.access-gate-card p{color:var(--muted);line-height:1.6;max-width:760px}.access-locked{display:none}.shell.access-ready{display:block}

/* v1.7.1 hard camera inventory + OpenWrt reservation planning */
.physical-lock{color:var(--green2);border:1px solid var(--line);padding:2px 4px;font-size:9px;letter-spacing:.7px}.section-gap{margin-top:16px!important}.source-table-row small{display:block;color:var(--muted);font-size:9px;margin-top:2px}.inventory-row{grid-template-columns:minmax(180px,1fr) minmax(160px,.8fr) minmax(180px,1fr) minmax(150px,.8fr)}.ok-text{color:var(--green)}.warn-text{color:var(--amber)}
@media(max-width:900px){.inventory-row{grid-template-columns:1fr 1fr}}
