/* ── Tokens ──────────────────────────────────────────────────── */
:root {
  --bg:        #080c10;
  --s1:        #0d1117;
  --s2:        #111923;
  --s3:        #18232f;
  --border:    rgba(0,200,230,.09);
  --border-hi: rgba(0,200,230,.25);
  --cyan:      #00d4ff;
  --green:     #00ff88;
  --amber:     #f5a623;
  --red:       #ef4444;
  --text:      #dde8f0;
  --mid:       #7a9ab8;
  --dim:       #364e63;
  --mono: "SF Mono","JetBrains Mono","Fira Code",Consolas,monospace;
  --r: 6px;
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;background:var(--bg);color:var(--text);
  font-family:var(--mono);font-size:12px;-webkit-font-smoothing:antialiased;overflow:hidden}

/* ── App shell ───────────────────────────────────────────────── */
#app{
  display:grid;
  grid-template-rows:50px 36px 1fr 130px;
  height:100dvh;gap:0;
}

/* ── Header ──────────────────────────────────────────────────── */
header{
  display:flex;align-items:center;justify-content:space-between;
  padding:0 18px;background:var(--s1);
  border-bottom:1px solid var(--border);gap:12px;flex-shrink:0;
}
#brand{display:flex;align-items:center;gap:10px}
#logo-mark{font-size:22px;color:var(--cyan);filter:drop-shadow(0 0 10px var(--cyan));animation:logo-pulse 4s ease-in-out infinite}
@keyframes logo-pulse{0%,100%{filter:drop-shadow(0 0 10px var(--cyan))}50%{filter:drop-shadow(0 0 20px var(--cyan))}}
#brand-text{display:flex;flex-direction:column;line-height:1.15}
#brand-name{font-size:15px;font-weight:700;letter-spacing:3px;color:var(--text)}
#brand-sub{font-size:8px;letter-spacing:3px;color:var(--cyan);opacity:.7}
#header-center{display:flex;flex-direction:column;align-items:center;gap:3px}
#system-status{display:flex;align-items:center;gap:6px}
#status-dot{width:7px;height:7px;border-radius:50%;background:var(--dim);flex-shrink:0;transition:background .3s}
#status-dot.live{background:var(--green);box-shadow:0 0 8px var(--green);animation:blink 2.5s ease-in-out infinite}
#status-dot.working{background:var(--amber);animation:blink .8s ease-in-out infinite}
#status-dot.error{background:var(--red)}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.35}}
#status-text{font-size:10px;letter-spacing:2.5px;color:var(--mid)}
#clock{font-size:20px;letter-spacing:2px;color:var(--cyan);font-variant-numeric:tabular-nums}
#header-right{display:flex;gap:18px}
.hstat{display:flex;flex-direction:column;align-items:flex-end;gap:2px}
.hstat-label{font-size:8px;letter-spacing:2px;color:var(--dim)}
.hstat-value{font-size:18px;letter-spacing:1px;color:var(--text);font-variant-numeric:tabular-nums}

/* ── Tab bar — always visible ────────────────────────────────── */
#mob-tabs{
  display:flex;background:var(--s1);border-bottom:1px solid var(--border);
  flex-shrink:0;
}
.mtab{
  flex:1;background:none;border:none;border-bottom:2px solid transparent;
  color:var(--dim);font-family:var(--mono);font-size:9px;letter-spacing:2px;
  padding:8px 4px;cursor:pointer;transition:color .2s,border-color .2s;
}
.mtab.active{color:var(--cyan);border-bottom-color:var(--cyan)}

/* ── Main — tab layout on all screen sizes ───────────────────── */
main{display:block;height:100%;overflow:hidden;background:var(--s1)}
main>section{background:var(--s1);display:none;flex-direction:column;overflow:hidden;height:100%}
main>section.panel-active{display:flex}

/* ── Panel header ────────────────────────────────────────────── */
.panel-hdr{
  display:flex;align-items:center;justify-content:space-between;
  padding:7px 14px;border-bottom:1px solid var(--border);flex-shrink:0;
}
.panel-title{font-size:8px;letter-spacing:3px;color:var(--dim);font-weight:700}
.panel-hdr-right{display:flex;align-items:center;gap:6px}
.panel-badge{font-size:8px;letter-spacing:2px;padding:2px 7px;border-radius:3px;background:var(--s3);color:var(--dim);border:1px solid var(--border)}
.panel-badge.active{background:rgba(0,255,136,.08);color:var(--green);border-color:rgba(0,255,136,.25);animation:badge-glow 3s ease-in-out infinite}
.panel-badge.warn{background:rgba(245,166,35,.08);color:var(--amber);border-color:rgba(245,166,35,.25)}
.panel-badge.alert{background:rgba(239,68,68,.1);color:var(--red);border-color:rgba(239,68,68,.3);animation:badge-glow .5s ease-in-out infinite}
@keyframes badge-glow{0%,100%{opacity:1}50%{opacity:.5}}
.dot-live{width:6px;height:6px;border-radius:50%;background:var(--dim);transition:background .3s}
.dot-live.on{background:var(--green);box-shadow:0 0 5px var(--green);animation:blink 2s ease-in-out infinite}

/* ── Visual panel ────────────────────────────────────────────── */
#visual-panel{min-height:0}
#camera-wrap{
  flex:1;position:relative;background:#000;overflow:hidden;min-height:0;
}
#video{width:100%;height:100%;object-fit:cover;display:block}
#video.mirrored{transform:scaleX(-1)}
#face-overlay{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
#face-overlay.mirrored{transform:scaleX(-1)}

#scan-bar{position:absolute;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);opacity:0;pointer-events:none;top:10%}
#scan-bar.active{opacity:1;animation:scan 3.5s ease-in-out infinite}
@keyframes scan{0%{top:5%}50%{top:92%}100%{top:5%}}

.corner-guide{position:absolute;width:18px;height:18px;border-color:var(--cyan);border-style:solid;opacity:.5}
.corner-guide.tl{top:10px;left:10px;border-width:2px 0 0 2px}
.corner-guide.tr{top:10px;right:10px;border-width:2px 2px 0 0}
.corner-guide.bl{bottom:34px;left:10px;border-width:0 0 2px 2px}
.corner-guide.br{bottom:34px;right:10px;border-width:0 2px 2px 0}

/* Camera side buttons (flip / night / sound) */
.cam-side-btn{
  position:absolute;right:10px;
  background:rgba(0,0,0,.55);border:1px solid var(--border-hi);
  color:var(--cyan);font-size:18px;width:36px;height:36px;
  border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;
  transition:background .2s,color .2s,border-color .2s;z-index:10;-webkit-tap-highlight-color:transparent;
}
.cam-side-btn:active{background:rgba(0,212,255,.2)}
#cam-flip-btn{top:10px}
#night-btn{top:54px}
#sound-btn{top:98px}
#night-btn[data-mode="off"]{color:var(--dim)}
#night-btn[data-mode="auto"]{color:var(--cyan)}
#night-btn[data-mode="on"]{color:var(--green);border-color:rgba(0,255,136,.4);box-shadow:0 0 10px rgba(0,255,136,.25)}
#sound-btn.muted{color:var(--dim)}

/* Night vision: software low-light boost on the visible feed */
#video.night-boost{filter:brightness(1.85) contrast(1.18) saturate(1.12)}

/* Full-screen alert pulse */
#alert-flash{
  position:fixed;inset:0;pointer-events:none;z-index:300;
  background:radial-gradient(ellipse at center,transparent 38%,rgba(239,68,68,.38));
  opacity:0;transition:opacity .14s ease;
}
#alert-flash.on{opacity:1}

#cam-hud{
  position:absolute;bottom:0;left:0;right:0;
  display:flex;justify-content:space-between;align-items:flex-end;
  padding:8px 12px;
  background:linear-gradient(transparent,rgba(8,12,16,.8));
  pointer-events:none;
}
.hud-block{display:flex;flex-direction:column;gap:2px}
.hud-center{align-items:center}.hud-right{align-items:flex-end}
.hud-lbl{font-size:7px;letter-spacing:2px;color:var(--dim)}
.hud-val{font-size:12px;color:var(--cyan);letter-spacing:1px}
#sensor-note{position:absolute;top:8px;left:50%;transform:translateX(-50%);font-size:7px;letter-spacing:1.5px;color:rgba(0,212,255,.35);white-space:nowrap;pointer-events:none}

/* ── Enrollment strip ────────────────────────────────────────── */
#enroll-strip{
  display:flex;align-items:center;gap:6px;padding:8px 12px;
  border-top:1px solid var(--border);flex-shrink:0;
}
#person-name{
  flex:1;background:var(--s3);border:1px solid var(--border);
  border-radius:var(--r);padding:0 10px;height:34px;font-size:12px;
  color:var(--text);outline:none;font-family:var(--mono);
  transition:border-color .2s;
}
#person-name::placeholder{color:var(--dim)}
#person-name:focus{border-color:var(--cyan)}
.enroll-btn{
  height:34px;padding:0 10px;background:var(--s3);border:1px solid var(--border-hi);
  color:var(--cyan);font-size:10px;letter-spacing:1.5px;border-radius:var(--r);
  cursor:pointer;font-family:var(--mono);white-space:nowrap;
  display:inline-flex;align-items:center;transition:background .2s;
  -webkit-tap-highlight-color:transparent;
}
.enroll-btn:active{background:rgba(0,212,255,.1)}
.enroll-btn.icon-btn{padding:0;width:34px;justify-content:center;font-size:14px;flex-shrink:0}

/* ── Enrolled persons bar ────────────────────────────────────── */
#enrolled-bar{
  padding:6px 12px;border-top:1px solid var(--border);flex-shrink:0;
  overflow-x:auto;min-height:40px;display:flex;align-items:center;
}
#enrolled-list{display:flex;gap:6px;align-items:center;flex-wrap:nowrap}
.enrolled-empty{font-size:10px;color:var(--dim);letter-spacing:1px}
.enrolled-chip{
  display:flex;align-items:center;gap:5px;padding:3px 8px 3px 4px;
  background:var(--s3);border:1px solid var(--border);border-radius:20px;
  white-space:nowrap;animation:ev-in .2s ease;
}
.enrolled-avatar{
  width:20px;height:20px;border-radius:50%;background:linear-gradient(135deg,var(--cyan),rgba(0,212,255,.4));
  display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;color:#000;flex-shrink:0;
}
.enrolled-name{font-size:10px;color:var(--text);letter-spacing:.5px}
.enrolled-samples{font-size:8px;color:var(--cyan);letter-spacing:.5px;opacity:.7}
.enrolled-del{background:none;border:none;color:var(--dim);font-size:14px;cursor:pointer;padding:0 2px;line-height:1;transition:color .2s}
.enrolled-del:hover{color:var(--red)}

/* ── Mesh mode ───────────────────────────────────────────────── */
#mesh-strip{
  display:flex;align-items:center;gap:6px;padding:7px 12px;
  border-top:1px solid var(--border);flex-shrink:0;
}
.mesh-label{font-size:8px;letter-spacing:2px;color:var(--dim);flex-shrink:0}
#mesh-room{
  flex:1;min-width:0;background:var(--s3);border:1px solid var(--border);
  border-radius:var(--r);padding:0 10px;height:30px;font-size:11px;
  color:var(--text);outline:none;font-family:var(--mono);
  text-transform:uppercase;transition:border-color .2s;
}
#mesh-room::placeholder{color:var(--dim);text-transform:none}
#mesh-room:focus{border-color:var(--cyan)}
#mesh-strip .enroll-btn{height:30px}
#mesh-status{font-size:8px;letter-spacing:1.5px;color:var(--dim);flex-shrink:0}
#mesh-status.mesh-on{color:var(--green);animation:blink 2.5s ease-in-out infinite}

#mesh-grid-wrap{padding:6px 12px;border-top:1px solid var(--border);flex-shrink:0}
#mesh-grid{display:flex;gap:6px;overflow-x:auto}
.mesh-tile{
  position:relative;flex-shrink:0;width:132px;height:99px;cursor:pointer;
  border:1px solid var(--border-hi);border-radius:4px;overflow:hidden;
  background:#000;transition:width .25s ease,height .25s ease,border-color .3s;
}
.mesh-tile video{width:100%;height:100%;object-fit:cover;display:block}
.mesh-tile.big{width:280px;height:210px}
.mesh-tile-name{
  position:absolute;top:3px;left:4px;font-size:7px;letter-spacing:1px;
  color:var(--cyan);background:rgba(8,12,16,.72);padding:1px 5px;border-radius:2px;
}
.mesh-tile-status{
  position:absolute;bottom:3px;left:4px;font-size:7px;letter-spacing:1px;
  color:var(--amber);background:rgba(8,12,16,.72);padding:1px 5px;border-radius:2px;
}
.mesh-tile.live .mesh-tile-status{color:var(--green)}
.mesh-tile.alert{
  border-color:var(--red);
  box-shadow:0 0 16px rgba(239,68,68,.65);
  animation:blink .45s ease-in-out 5;
}

/* ── RF panel ────────────────────────────────────────────────── */
#rf-body{flex:1;display:flex;flex-direction:column;overflow:hidden;gap:1px;background:var(--border)}
.rf-block{flex:1;background:var(--s1);padding:5px 14px;display:flex;flex-direction:column;min-height:0}
.rf-lbl{font-size:7px;letter-spacing:1.5px;color:var(--dim);margin-bottom:4px;flex-shrink:0}
.rf-sublbl{opacity:.6}
.rf-block canvas{flex:1;width:100%;min-height:0;display:block}
#rf-meta{display:flex;gap:16px;padding:7px 14px;flex-shrink:0;border-top:1px solid var(--border);background:var(--s1)}
.rf-meta-item{display:flex;flex-direction:column;gap:2px}
.rf-meta-k{font-size:7px;letter-spacing:1.5px;color:var(--dim)}
.rf-meta-v{font-size:11px;color:var(--cyan)}

/* ── Threat panel ────────────────────────────────────────────── */
#threat-panel{overflow-y:auto}
#threat-ring-wrap{display:flex;flex-direction:column;align-items:center;padding:12px 14px;gap:6px;border-bottom:1px solid var(--border)}
#threat-ring-label{font-size:8px;letter-spacing:3px;color:var(--dim)}
#threat-ring-container{position:relative;width:100px;height:100px}
#threat-svg{width:100%;height:100%;transform:rotate(-90deg)}
.ring-track{fill:none;stroke:var(--s3);stroke-width:5}
.ring-fill{fill:none;stroke-width:5;stroke-linecap:butt;transition:stroke-dasharray .6s ease,stroke .6s ease;stroke:var(--green)}
#threat-inner{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}
#threat-pct{font-size:18px;letter-spacing:1px;color:var(--text);font-variant-numeric:tabular-nums}
#threat-word{font-size:9px;letter-spacing:3px;color:var(--green);transition:color .5s}
#threat-word.medium{color:var(--amber)}
#threat-word.high{color:var(--red);animation:blink .5s ease-in-out infinite}

/* ── Face match row ──────────────────────────────────────────── */
#face-match-row{padding:10px 14px;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:4px}
.fm-label{font-size:7px;letter-spacing:2px;color:var(--dim)}
.fm-result{font-size:11px;letter-spacing:.5px;color:var(--mid)}
.fm-result.match-ok{color:var(--green)}
.fm-result.match-fail{color:var(--red)}
.fm-result.match-none{color:var(--dim)}

/* ── Match threshold slider ──────────────────────────────────── */
#thresh-ctrl-row{display:flex;align-items:center;gap:8px;padding:6px 14px 8px;border-bottom:1px solid var(--border);background:rgba(255,255,255,0.02)}
.thresh-label{font-size:7px;letter-spacing:2px;color:var(--dim);white-space:nowrap}
#match-thresh-slider{flex:1;accent-color:var(--cyan);cursor:pointer;height:3px}
.thresh-val{font-size:10px;color:var(--cyan);font-family:var(--mono);min-width:28px;text-align:right}
.thresh-hint{font-size:7px;color:var(--dim);white-space:nowrap}

/* ── Detection meters ────────────────────────────────────────── */
#det-meters{display:flex;flex-direction:column;border-bottom:1px solid var(--border)}
.det-row{padding:9px 14px;border-bottom:1px solid var(--border)}
.det-head{display:flex;align-items:center;gap:7px;margin-bottom:7px}
.det-icon{font-size:13px}
.det-icon.cyan{color:var(--cyan)}.det-icon.amber{color:var(--amber)}.det-icon.red{color:var(--red)}
.det-name{flex:1;font-size:8px;letter-spacing:2px;color:var(--mid)}
.det-pct{font-size:13px;letter-spacing:1px;font-variant-numeric:tabular-nums;color:var(--dim)}
.meter-track{height:3px;background:var(--s3);border-radius:2px;overflow:hidden;margin-bottom:5px}
.meter-fill{height:100%;width:0;border-radius:2px;transition:width .5s ease}
.cyan-fill{background:var(--cyan);box-shadow:0 0 8px var(--cyan)}
.amber-fill{background:var(--amber);box-shadow:0 0 8px var(--amber)}
.red-fill{background:var(--red);box-shadow:0 0 8px var(--red)}
.det-verdict{font-size:8px;letter-spacing:2px;color:var(--dim);transition:color .3s}
.det-verdict.on-cyan{color:var(--cyan)}.det-verdict.on-amber{color:var(--amber)}.det-verdict.on-red{color:var(--red)}

/* ── Location grid + accuracy table ──────────────────────────── */
#loc-grid{display:grid;grid-template-columns:1fr 1fr;border-bottom:1px solid var(--border)}
.loc-cell{padding:9px 14px;border-right:1px solid var(--border);border-bottom:1px solid var(--border)}
.loc-cell:nth-child(even){border-right:none}
.loc-k{font-size:7px;letter-spacing:1.5px;color:var(--dim);margin-bottom:3px}
.loc-v{font-size:12px;color:var(--text);letter-spacing:.5px}
#accuracy-table{padding:10px 14px;display:flex;flex-direction:column;gap:5px}
.acc-title{font-size:7px;letter-spacing:3px;color:var(--dim);margin-bottom:4px}
.acc-row{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.acc-k{font-size:10px;color:var(--mid)}
.acc-v{font-size:10px;color:var(--mid);text-align:right;white-space:nowrap}
.acc-v.good{color:var(--green)}

/* ── Event log ───────────────────────────────────────────────── */
#log-wrap{background:var(--s1);border-top:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}
#clear-btn{background:none;border:1px solid var(--border);color:var(--dim);font-size:8px;letter-spacing:2px;padding:2px 8px;cursor:pointer;border-radius:3px;font-family:var(--mono);transition:color .2s,border-color .2s}
#clear-btn:hover{color:var(--cyan);border-color:var(--border-hi)}
#event-log{flex:1;overflow-y:auto;padding:4px 14px;display:flex;flex-direction:column-reverse;gap:2px}
.ev{display:flex;gap:10px;align-items:baseline;padding:2px 0;border-bottom:1px solid rgba(255,255,255,.02);animation:ev-in .25s ease}
@keyframes ev-in{from{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}
.ev-time{font-size:10px;color:var(--dim);font-variant-numeric:tabular-nums;flex-shrink:0}
.ev-tag{font-size:8px;letter-spacing:1.5px;padding:1px 6px;border-radius:2px;flex-shrink:0;white-space:nowrap}
.ev-tag.sys{background:var(--s3);color:var(--dim)}
.ev-tag.human{background:rgba(0,212,255,.08);color:var(--cyan)}
.ev-tag.metal{background:rgba(245,166,35,.08);color:var(--amber)}
.ev-tag.threat{background:rgba(239,68,68,.1);color:var(--red)}
.ev-tag.clear{background:rgba(0,255,136,.08);color:var(--green)}
.ev-tag.weapon{background:rgba(239,68,68,.15);color:var(--red)}
.ev-tag.pad{background:rgba(245,158,11,.15);color:#f59e0b}
.ev-tag.enrolled{background:rgba(0,212,255,.08);color:var(--cyan)}
.ev-msg{font-size:11px;color:var(--mid)}

/* ── Scrollbar ───────────────────────────────────────────────── */
::-webkit-scrollbar{width:3px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}

/* ── Persons panel ───────────────────────────────────────────── */
#persons-panel{overflow:hidden}

/* Evidence snapshots (auto-captured on weapon / POI alerts) */
#evidence-strip{
  display:flex;gap:5px;overflow-x:auto;padding:6px;flex-shrink:0;
  border-bottom:1px solid var(--border);background:rgba(239,68,68,.025);
}
#evidence-strip[hidden]{display:none}
.evidence-item{position:relative;flex-shrink:0;display:block;text-decoration:none}
.evidence-item img{
  width:72px;height:54px;object-fit:cover;display:block;
  border:1px solid rgba(239,68,68,.45);border-radius:3px;
}
.evidence-time{
  position:absolute;bottom:0;left:0;right:0;
  font-size:7px;letter-spacing:.5px;color:var(--red);text-align:center;
  background:rgba(8,12,16,.75);padding:1px 0;border-radius:0 0 3px 3px;
}
#persons-list{flex:1;overflow-y:auto;padding:6px;display:flex;flex-direction:column;gap:4px}
.persons-empty{font-size:10px;color:var(--dim);letter-spacing:1px;padding:12px 6px}
.person-card{
  display:flex;align-items:center;gap:7px;padding:6px;
  background:var(--s2);border:1px solid var(--border);border-radius:var(--r);
  animation:ev-in .25s ease;transition:border-color .4s,background .4s;flex-shrink:0;
}
.person-card.poi{border-color:rgba(239,68,68,.45);background:rgba(239,68,68,.04)}
.person-thumb{
  width:44px;height:44px;object-fit:cover;border-radius:3px;flex-shrink:0;
  border:1px solid var(--border);
}
.person-card-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.person-name{font-size:10px;color:var(--text);letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.person-name.unknown{color:var(--dim)}
.person-time{font-size:8px;color:var(--dim);letter-spacing:1px}
.person-conf{font-size:8px;color:var(--green)}
.person-mesh{font-size:8px;color:var(--cyan);letter-spacing:.5px}
.poi-badge{
  font-size:7px;letter-spacing:1.5px;padding:2px 5px;flex-shrink:0;
  background:rgba(239,68,68,.15);color:var(--red);border:1px solid rgba(239,68,68,.3);
  border-radius:3px;animation:blink .7s ease-in-out infinite;
}

/* ── Gallery overlay ─────────────────────────────────────────── */
#gallery-overlay{
  position:fixed;inset:0;background:rgba(8,12,16,.92);z-index:200;
  display:flex;align-items:center;justify-content:center;
  opacity:0;pointer-events:none;transition:opacity .22s;
}
#gallery-overlay.open{opacity:1;pointer-events:all}
#gallery-panel{
  background:var(--s1);border:1px solid var(--border-hi);border-radius:var(--r);
  width:min(680px,96vw);max-height:86vh;display:flex;flex-direction:column;overflow:hidden;
}
#gallery-drop-zone{
  margin:10px 12px 0;border:2px dashed var(--border);border-radius:var(--r);
  cursor:pointer;display:flex;align-items:center;justify-content:center;
  min-height:72px;transition:border-color .2s,background .2s;flex-shrink:0;
}
#gallery-drop-zone:hover,#gallery-drop-zone.drag-over{border-color:var(--cyan);background:rgba(0,212,255,.03)}
#gallery-drop-inner{display:flex;flex-direction:column;align-items:center;gap:4px;padding:16px}
#gallery-drop-inner>span{font-size:10px;letter-spacing:2px;color:var(--mid)}
.gallery-hint{font-size:9px;color:var(--dim)!important;letter-spacing:1px!important}
#gallery-items{flex:1;overflow-y:auto;padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.gallery-card{
  display:flex;align-items:center;gap:10px;padding:8px;
  background:var(--s2);border:1px solid var(--border);border-radius:var(--r);
}
.gallery-thumb{width:54px;height:54px;object-fit:cover;border-radius:3px;flex-shrink:0;border:1px solid var(--border)}
.gallery-card-info{flex:1;display:flex;flex-direction:column;gap:6px}
.gallery-name-input{
  background:var(--s3);border:1px solid var(--border);border-radius:4px;
  padding:0 8px;height:28px;font-size:11px;color:var(--text);
  outline:none;font-family:var(--mono);width:100%;transition:border-color .2s;
}
.gallery-name-input:focus{border-color:var(--cyan)}
.gallery-name-input::placeholder{color:var(--dim)}
.gallery-card-status{font-size:8px;letter-spacing:1.5px;color:var(--dim)}
.gallery-card-status.ok{color:var(--green)}
.gallery-card-status.fail{color:var(--red)}
.gallery-remove-btn{
  background:none;border:none;color:var(--dim);font-size:16px;
  cursor:pointer;padding:0 4px;line-height:1;flex-shrink:0;transition:color .2s;
}
.gallery-remove-btn:hover{color:var(--red)}
#gallery-footer{
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 12px;border-top:1px solid var(--border);flex-shrink:0;gap:10px;
}
#gallery-status-txt{font-size:10px;letter-spacing:1px;color:var(--mid)}
#gallery-enroll-btn:disabled{opacity:.4;cursor:not-allowed}

/* ── Compact header on small screens ─────────────────────────── */
@media (max-width:680px){
  header{padding:0 10px;gap:6px}
  #header-right .hstat:nth-child(n+3){display:none}
  #clock{font-size:14px}
  #gallery-panel{max-height:92vh}
}
