/* ================= 执法记录仪人脸比对抓拍实时分析大屏 ================= */

/* ---------- 实时抓拍流 ---------- */
.capture-grid {
  height: 100%;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  grid-template-rows: repeat(2, minmax(0, 1fr));   /* 2 行铺满面板，避免出现被裁切的第三行 */
  gap: 10px;
  overflow: hidden;
}

.capture-card {
  position: relative;
  display: flex;
  flex-direction: column;
  background: linear-gradient(180deg, rgba(29, 155, 240, .16), rgba(6, 22, 48, .78));
  border: 1px solid rgba(29, 155, 240, .28);
  border-radius: 4px;
  overflow: hidden;
  animation: captureIn .5s cubic-bezier(.2, .8, .3, 1) both;
}
@keyframes captureIn {
  from { opacity: 0; transform: translateY(-14px) scale(.96); }
  to   { opacity: 1; transform: none; }
}
.capture-card.is-hit { border-color: rgba(255, 77, 94, .75); box-shadow: 0 0 14px rgba(255, 77, 94, .28) inset; }

/* 模拟抓拍画面 */
.capture-shot {
  position: relative;
  flex: 1 1 auto;
  min-height: 0;
  overflow: hidden;
  background:
    radial-gradient(60% 70% at 50% 30%, rgba(0, 229, 255, .18), transparent 70%),
    linear-gradient(180deg, #0a2340, #061a33);
}
.capture-shot .shot-inner {
  position: absolute;
  left: 50%; bottom: 0;
  width: 118px; height: 118px;
  margin-left: -59px;
}
.capture-shot .shot-inner svg { position: absolute; left: 0; bottom: 0; opacity: .9; }
.capture-shot::after {
  content: "";
  position: absolute; inset: 0;
  background: repeating-linear-gradient(0deg, rgba(255,255,255,.035) 0 1px, transparent 1px 3px);
  pointer-events: none;
}
/* 人脸比对框 */
.face-box {
  /* 与 SVG 人像头部圆心 (60,44)/viewBox 120x120 精确对齐 */
  position: absolute;
  left: 40px; top: 21px;
  width: 40px; height: 44px;
  border: 1.5px solid var(--cyan);
  box-shadow: 0 0 10px rgba(0, 229, 255, .55);
}
.face-box::before, .face-box::after {
  content: ""; position: absolute; width: 6px; height: 6px;
}
.face-box.hit { border-color: var(--red); box-shadow: 0 0 12px rgba(255, 77, 94, .75); }

.capture-tag {
  position: absolute;
  right: 6px; top: 6px;
  padding: 0 6px;
  font-size: 11px;
  line-height: 17px;
  border-radius: 3px;
  background: rgba(0, 214, 143, .18);
  color: var(--green);
  border: 1px solid rgba(0, 214, 143, .5);
}
.capture-tag.hit { background: rgba(255, 77, 94, .2); color: var(--red); border-color: rgba(255, 77, 94, .65); }
.capture-no {
  position: absolute;
  left: 6px; top: 6px;
  font-size: 11px;
  color: var(--text-mute);
  font-family: Consolas, monospace;
}
.capture-meta {
  flex: 0 0 auto;
  padding: 6px 8px 7px;
  font-size: 12px;
  line-height: 1.6;
  background: rgba(3, 12, 27, .78);
}
.capture-meta .row1 { display: flex; align-items: center; justify-content: space-between; gap: 6px; }
.capture-meta .name { color: #ffffff; font-weight: 600; letter-spacing: .5px; }
.capture-meta .sim { font-family: Consolas, monospace; color: var(--cyan); }
.capture-meta .row2 { display: flex; align-items: center; justify-content: space-between; color: var(--text-mute); font-size: 11px; }
.capture-meta .row2 .dev { font-family: Consolas, monospace; }

/* ---------- 预警列表 ---------- */
#warn-wrap { height: 100%; }
.mask-id { font-family: Consolas, monospace; color: #9dc4ea; font-size: 12px; }