/* FACTORY PULSE v2 — 관제 메인 추가 규칙
   pulse-cyber.css(CityFlow v3.0 원본 사본)를 고치지 않고 «위에 얹는» 규칙만 둔다.
   색은 --pv3-* 팔레트를 그대로 쓴다. 새 색은 차콜(원천 반영 확인 · M1 초록 금지) 하나뿐이다. */

/* 원문자(①~⑤) — Pretendard 의 원문자는 작은 글자에서 숫자가 뭉개진다. 원문자만 맑은 고딕으로 키워 쓴다(로컬 글꼴 · 네트워크 0) */
@font-face { font-family: "FP Circ"; src: local("Malgun Gothic Bold"), local("MalgunGothicBold"), local("Malgun Gothic"); unicode-range: U+2460-2473; size-adjust: 118%; }
.pv3 { --font-sans: "FP Circ", "Pretendard Variable", system-ui, sans-serif; --font-mono: "JetBrains Mono", "FP Circ", ui-monospace, monospace; font-family: var(--font-sans); }
.pv3 { --fp-charcoal: #3a4656; --fp-charcoal-2: #9fb0c2; --fp-mock: #c084fc;
  /* 초록 0 — 원본 팔레트의 «정상» 색(연두)을 연한 하늘색으로 바꾼다. 승인·반영 확인은 차콜(M1) */
  --pv3-lime: #8fd3ff; }
.pv3-cls[data-cls="norm"] { color: #a5b4fc; }
.pv3-wx__b[data-b="verified"] { color: var(--fp-charcoal-2); }

/* ══ 지도 — 생성 이미지 한 장 ══════════════════════════════════ */
.fp-world {
  position: absolute; left: 0; top: 0;
  z-index: 1;
  transform-origin: 0 0;
  transition: transform 1.5s cubic-bezier(0.22, 0.8, 0.2, 1);
  will-change: transform;
}
.fp-map { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.fp-tint { animation: fp-fade 0.9s ease-out both; }
@keyframes fp-fade { from { opacity: 0; } to { opacity: 1; } }

.fp-zone {
  fill: none;
  stroke: rgba(182, 203, 217, 0.26);
  stroke-width: 1.4;
  stroke-dasharray: 5 5;
  vector-effect: non-scaling-stroke;
}
.fp-zone.is-on {
  fill: rgba(0, 229, 255, 0.05);
  stroke: rgba(0, 229, 255, 0.62);
  stroke-dasharray: none;
  stroke-width: 1.6;
}
.fp-zone.is-hot { stroke: rgba(0, 229, 255, 0.9); stroke-width: 2; filter: drop-shadow(0 0 6px rgba(0, 229, 255, 0.55)); }

.fp-link {
  fill: none;
  stroke-width: 3;
  stroke-linecap: round; stroke-linejoin: round;
  vector-effect: non-scaling-stroke;
  stroke: rgba(255, 215, 0, 0.3);
}
.fp-link[data-tone="info"] { stroke: rgba(0, 229, 255, 0.28); }
.fp-link--flow {
  stroke-width: 2.2;
  stroke: var(--pv3-amber);
  stroke-dasharray: 3 11;
  animation: fp-flow 1.4s linear infinite;
  filter: drop-shadow(0 0 4px rgba(255, 215, 0, 0.7));
}
.fp-link--flow[data-tone="info"] { stroke: var(--pv3-cyan); filter: drop-shadow(0 0 4px rgba(0, 229, 255, 0.7)); }
@keyframes fp-flow { to { stroke-dashoffset: -28; } }

.fp-zlabels { position: absolute; inset: 0; pointer-events: none; z-index: 5; }
.fp-zlab {
  position: absolute;
  display: grid; gap: 1px;
  padding: 4px 9px 5px;
  border: 1px solid rgba(182, 203, 217, 0.22);
  border-radius: 3px;
  background: rgba(3, 13, 26, 0.72);
  white-space: nowrap;
  transition: transform 1.5s cubic-bezier(0.22, 0.8, 0.2, 1);
}
.fp-zlab b { font-size: calc(10.5px * var(--pv3-fs, 1)); font-weight: 700; color: var(--pv3-dim); letter-spacing: 0.01em; }
.fp-zlab small { font-size: calc(9px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-zlab.is-on { border-color: rgba(0, 229, 255, 0.6); background: rgba(3, 20, 34, 0.86); box-shadow: 0 0 14px rgba(0, 229, 255, 0.18); }
.fp-zlab.is-on b { color: var(--pv3-cyan); }
.fp-linklab {
  position: absolute; padding: 2px 7px; border-radius: 999px;
  font-family: var(--font-mono); font-size: calc(9.5px * var(--pv3-fs, 1)); letter-spacing: 0.06em;
  color: #041018; background: var(--pv3-amber); white-space: nowrap;
  transition: transform 1.5s cubic-bezier(0.22, 0.8, 0.2, 1);
}
.fp-linklab[data-tone="info"] { background: var(--pv3-cyan); }

.fp-world .pv3-marker { transition: transform 1.5s cubic-bezier(0.22, 0.8, 0.2, 1); }
.pv3-marker[data-tone="dim"] { --m: var(--fp-charcoal-2); }
.fp-marker--sub .pv3-marker__core { width: 11px; height: 11px; margin: -5.5px 0 0 -5.5px; box-shadow: 0 0 0 3px rgba(9, 11, 14, 0.92), 0 0 0 4px var(--m), 0 0 12px var(--m); }
.fp-marker--sub .pv3-marker__core::before, .fp-marker--sub .pv3-marker__core::after { display: none; }
.fp-marker--sub .pv3-marker__label { top: 14px; font-size: calc(10.5px * var(--pv3-fs, 1)); font-weight: 600; }

/* 지도 칩 — 「생성 이미지 · 가상 공장 — 실존 시설 아님」 */
.pv3-center { position: relative; }
.fp-imgchip {
  position: absolute; top: 2px; right: 0;
  display: inline-flex; align-items: center; gap: 6px;
  margin: 0; padding: 4px 10px;
  border: 1px dashed rgba(255, 215, 0, 0.7); border-radius: 3px;
  background: rgba(3, 13, 26, 0.82);
  color: var(--pv3-amber);
  font-size: calc(10.5px * var(--pv3-fs, 1)); font-weight: 600;
  pointer-events: none;
}
.fp-imgchip svg { width: 14px; height: 14px; stroke: currentColor; stroke-width: 1.7; fill: none; stroke-linecap: round; stroke-linejoin: round; }

/* ══ 헤더 ═══════════════════════════════════════════════════════ */
.fp-feed--off { --f: var(--fp-charcoal-2); }
.fp-feed--off .pv3-feed__dot { background: transparent; border: 1px dashed var(--fp-charcoal-2); box-shadow: none; }
.fp-feed--off .pv3-feed__bar { background: repeating-linear-gradient(90deg, rgba(255,255,255,0.14) 0 3px, transparent 3px 6px); }
.fp-feed--off b { color: var(--pv3-faint); font-family: var(--font-sans); font-weight: 600; }
.pv3-feeds { flex-wrap: nowrap; gap: 14px; align-items: center; }
.pv3-feed__bar { width: 34px; }
.fp-feed-note {
  align-self: center; padding: 1px 6px; border: 1px dashed rgba(147, 174, 194, 0.55); border-radius: 2px;
  font-size: calc(9.5px * var(--pv3-fs, 1)); color: var(--pv3-faint); white-space: nowrap;
}
a.pv3-sitgo { text-decoration: none; }
.fp-clock { display: grid; justify-items: end; line-height: 1.1; }
.fp-clock small { font-family: var(--font-mono); font-size: calc(9px * var(--pv3-fs, 1)); color: var(--pv3-faint); letter-spacing: 0.08em; }

/* ══ 결정 바 ═════════════════════════════════════════════════════ */
.fp-lead-u { font-style: normal; font-size: calc(12px * var(--pv3-fs, 1)); font-weight: 600; margin-inline-start: 3px; color: var(--pv3-dim); }
#pv3-second { display: contents; }
.fp-btn--twin { text-decoration: none; border-color: #ff9418; color: #ffb45a; background: color-mix(in srgb, #ff9418 12%, transparent); }
.fp-btn--twin:hover { background: color-mix(in srgb, #ff9418 26%, transparent); color: #fff; }
.fp-btn--twin svg { width: 15px; height: 15px; stroke: currentColor; stroke-width: 1.8; fill: none; }

/* ══ DECIDE — 차트 ═══════════════════════════════════════════════ */
.fp-chart { display: block; width: 100%; height: auto; overflow: visible; }
.fp-chart text { font-family: var(--font-sans); }
.fp-axis { stroke: rgba(182, 203, 217, 0.45); stroke-width: 1; }
.fp-now { stroke: var(--pv3-cyan); stroke-width: 1.6; filter: drop-shadow(0 0 4px rgba(0, 229, 255, 0.8)); }
.fp-now__t { fill: var(--pv3-cyan); font-size: 9px; font-weight: 800; }
.fp-tl__win { fill: rgba(255, 215, 0, 0.09); stroke: rgba(255, 215, 0, 0.35); stroke-dasharray: 3 3; }
.fp-tl__winlab { fill: var(--pv3-amber); font-size: 10px; font-weight: 800; }
.fp-tl__stem { stroke: rgba(182, 203, 217, 0.35); stroke-width: 1; }
.fp-tl__stem[data-tone="alert"] { stroke: rgba(255, 77, 77, 0.55); }
.fp-tl__dot { fill: var(--pv3-blue); stroke: #030d1a; stroke-width: 1.5; }
.fp-tl__dot[data-tone="alert"] { fill: var(--pv3-red); }
.fp-tl__dot[data-tone="warn"] { fill: var(--pv3-amber); }
.fp-tl__dot[data-tone="info"] { fill: var(--pv3-cyan); }
.fp-tl__dot[data-tone="dim"] { fill: var(--fp-charcoal-2); }
.fp-tl__lab { fill: var(--pv3-text); font-size: 9.5px; font-weight: 600; }
.fp-tl__lab[data-tone="alert"] { fill: #ff8a8a; }
.fp-tl__lab[data-tone="dim"] { fill: var(--pv3-faint); }

.fp-vol__girder { stroke: rgba(182, 203, 217, 0.6); stroke-width: 3; }
.fp-vol__cable { stroke: rgba(182, 203, 217, 0.8); stroke-width: 1.2; }
.fp-vol__zone { fill: rgba(255, 77, 77, 0.16); stroke: var(--pv3-red); stroke-width: 1.3; stroke-dasharray: 4 3; }
.fp-vol__cmp { fill: none; stroke: rgba(182, 203, 217, 0.55); stroke-width: 1; stroke-dasharray: 2 3; }
.fp-vol__load { fill: var(--pv3-amber); stroke: #030d1a; }
.fp-vol__lt { fill: var(--pv3-amber); font-size: 9.5px; font-weight: 700; }
.fp-vol__zt { fill: #ff8a8a; font-size: 9.5px; font-weight: 700; }
.fp-vol__dim { stroke: var(--pv3-cyan); stroke-width: 1; marker-start: none; }
.fp-vol__dt { fill: var(--pv3-cyan); font-size: 9.5px; font-weight: 800; }
.fp-vol__person circle { fill: var(--pv3-red); }
.fp-vol__person line { stroke: var(--pv3-red); stroke-width: 1.8; stroke-linecap: round; }
.fp-vol__pt { fill: var(--pv3-text); font-size: 9.5px; font-weight: 700; }
.fp-vol__ct { fill: var(--pv3-faint); font-size: 8.5px; }

.fp-cov__gap { fill: rgba(255, 77, 77, 0.28); stroke: none; }
.fp-cov__sup { fill: none; stroke: var(--pv3-cyan); stroke-width: 2; filter: drop-shadow(0 0 4px rgba(0, 229, 255, 0.6)); }
.fp-cov__dem { stroke: var(--pv3-amber); stroke-width: 1.6; stroke-dasharray: 4 3; }
.fp-cov__lead { stroke: #ff9418; stroke-width: 1.2; stroke-dasharray: 3 3; }
.fp-cov__pt { fill: var(--pv3-red); stroke: #030d1a; stroke-width: 1.5; }
.fp-cov__t { font-size: 9.5px; font-weight: 700; fill: var(--pv3-text); }
.fp-cov__t[data-k="gap"] { fill: #ff8a8a; }
.fp-cov__t[data-k="sup"], .fp-cov__t[data-k="ord"] { fill: var(--pv3-cyan); }
.fp-cov__t[data-k="dem"] { fill: var(--pv3-amber); }
.fp-cov__t[data-k="lead"] { fill: #ffb45a; }

.fp-swim__k { fill: var(--pv3-dim); font-size: 10px; font-weight: 700; }
.fp-swim__lane { stroke: rgba(182, 203, 217, 0.18); stroke-width: 1; }

/* LOT 계보 */
.fp-lin__n rect { fill: rgba(3, 13, 26, 0.9); stroke: rgba(182, 203, 217, 0.4); stroke-width: 1; }
.fp-lin__n[data-tone="alert"] rect { stroke: var(--pv3-red); fill: rgba(80, 14, 20, 0.55); }
.fp-lin__n[data-tone="warn"] rect { stroke: var(--pv3-amber); fill: rgba(60, 50, 6, 0.45); }
.fp-lin__n[data-tone="dim"] rect { stroke: rgba(147, 174, 194, 0.35); stroke-dasharray: 3 2; }
.fp-lin__t { fill: var(--pv3-text); font-size: 10px; font-weight: 800; font-family: var(--font-mono); }
.fp-lin__n[data-tone="dim"] .fp-lin__t { fill: var(--pv3-faint); }
.fp-lin__s { fill: var(--pv3-faint); font-size: 8.5px; }
.fp-lin__e { fill: none; stroke-width: 1.6; stroke: var(--pv3-red); }
.fp-lin__e[data-tone="dim"] { stroke: rgba(147, 174, 194, 0.4); stroke-dasharray: 3 3; }

/* 요약 · 게이트 (S4) */
.fp-sum { margin: 2px 0 8px; padding: 0 0 0 16px; display: grid; gap: 5px; }
.fp-sum li { font-size: calc(11.5px * var(--pv3-fs, 1)); line-height: 1.55; color: var(--pv3-text); }
.fp-sum li::marker { color: var(--pv3-cyan); font-family: var(--font-mono); font-size: 10px; }
.fp-urn {
  display: inline-block; margin-inline-start: 2px; padding: 0 5px;
  border: 1px solid rgba(0, 229, 255, 0.55); border-radius: 2px; background: rgba(0, 229, 255, 0.08);
  color: var(--pv3-cyan); font: inherit; font-family: var(--font-mono); font-size: calc(9.5px * var(--pv3-fs, 1));
  cursor: pointer; vertical-align: 1px;
}
.fp-urn:hover { background: rgba(0, 229, 255, 0.22); }
.fp-gate { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin: 0 0 8px; }
.fp-gate__r {
  display: grid; gap: 1px; padding: 6px 8px;
  border: 1px solid rgba(0, 229, 255, 0.4); border-radius: 3px; background: rgba(0, 229, 255, 0.05);
}
.fp-gate__r[data-k="block"] { border-color: rgba(255, 77, 77, 0.6); background: rgba(255, 77, 77, 0.07); }
.fp-gate__r b { font-family: var(--font-mono); font-size: calc(10px * var(--pv3-fs, 1)); color: var(--pv3-dim); }
.fp-gate__r i { font-style: normal; font-size: calc(11px * var(--pv3-fs, 1)); color: var(--pv3-text); }
.fp-gate__r em { font-style: normal; font-size: calc(12px * var(--pv3-fs, 1)); font-weight: 800; color: var(--pv3-cyan); }
.fp-gate__r[data-k="block"] em { color: #ff8a8a; }

/* 3D 트윈 이동 (S2) */
.fp-twinbtn {
  display: flex; align-items: center; gap: 10px;
  margin: 10px 0 2px; padding: 10px 12px;
  border: 1px solid #ff9418; border-radius: 5px;
  background: color-mix(in srgb, #ff9418 13%, transparent);
  color: #ffb45a; text-decoration: none;
  box-shadow: 0 0 16px color-mix(in srgb, #ff9418 22%, transparent);
}
.fp-twinbtn:hover { background: color-mix(in srgb, #ff9418 28%, transparent); color: #fff; }
.fp-twinbtn svg { width: 22px; height: 22px; stroke: currentColor; stroke-width: 1.7; fill: none; flex: none; }
.fp-twinbtn span { display: grid; gap: 1px; }
.fp-twinbtn b { font-size: calc(13px * var(--pv3-fs, 1)); font-weight: 800; }
.fp-twinbtn small { font-size: calc(10px * var(--pv3-fs, 1)); color: var(--pv3-faint); }

/* 썸네일 — 생성 개념 이미지 */
.fp-thumb { position: relative; border: 1px solid var(--pv3-border); border-radius: 2px; overflow: hidden; background: #000; }
.fp-thumb img { display: block; width: 100%; height: 138px; object-fit: cover; filter: saturate(0.55) brightness(0.8) contrast(1.05); }
.fp-thumb::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: repeating-linear-gradient(180deg, rgba(0, 0, 0, 0.12) 0 1px, transparent 1px 3px);
}
.fp-thumb__chip {
  position: absolute; left: 6px; bottom: 6px; z-index: 1;
  padding: 2px 7px; border: 1px dashed var(--pv3-amber); border-radius: 2px;
  background: rgba(3, 13, 26, 0.88); color: var(--pv3-amber);
  font-size: calc(9.5px * var(--pv3-fs, 1)); font-weight: 700;
}
.fp-thumb__rec {
  position: absolute; right: 6px; top: 6px; z-index: 1;
  display: inline-flex; align-items: center; gap: 4px;
  padding: 1px 6px; border-radius: 2px; background: rgba(3, 13, 26, 0.85);
  font-family: var(--font-mono); font-size: 9px; color: var(--pv3-dim); letter-spacing: 0.08em;
}
.fp-thumb__rec i { width: 6px; height: 6px; border-radius: 50%; background: var(--pv3-amber); }

/* 근거 카드 — 등급 칩 */
.fp-node__grades { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; margin-top: 2px; }
.fp-grade {
  padding: 0 5px; border: 1px solid currentColor; border-radius: 2px;
  font-size: calc(9.5px * var(--pv3-fs, 1)); font-weight: 700; color: #c084fc;
}
.fp-grade[data-g="verified"] { color: var(--fp-charcoal-2); }
.fp-grade[data-g="inferred"] { color: var(--pv3-amber); }
.fp-grade[data-g="gap"] { color: #f87171; border-style: dashed; }
.fp-grade__real { font-size: calc(9.5px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-human { display: inline-flex; align-items: center; gap: 3px; font-size: calc(9.5px * var(--pv3-fs, 1)); font-weight: 700; color: var(--pv3-cyan); }
.pv3-node__dot[data-tone="gap"] { --d: #f87171; background: transparent; border: 1.5px dashed #f87171; box-shadow: none; }
.pv3-node__dot[data-tone="ok"] { --d: var(--pv3-cyan); }
.fp-node--gap .pv3-node__head { border-style: dashed; border-color: rgba(248, 113, 113, 0.45); background: rgba(40, 8, 12, 0.35); }
.fp-node--gap .pv3-node__title { color: var(--pv3-dim); }
.fp-ai-note { display: flex; align-items: flex-start; gap: 6px; margin: 10px 0 0; font-size: calc(10.5px * var(--pv3-fs, 1)); line-height: 1.5; color: var(--pv3-faint); }

/* 장부 추적 — 원천 반영 확인은 차콜 ● (초록 금지 · M1) */
.fp-trace { display: inline-flex; align-items: center; gap: 5px; font-weight: 700; font-size: calc(10px * var(--pv3-fs, 1)); color: var(--pv3-text); white-space: nowrap; }
.fp-trace i { width: 8px; height: 8px; border-radius: 50%; background: var(--fp-charcoal); box-shadow: 0 0 0 1px var(--fp-charcoal-2); }
.fp-trace[data-t="wait"] i { background: transparent; border: 1px dashed var(--pv3-amber); box-shadow: none; }
.fp-trace[data-t="rec"] { color: var(--pv3-cyan); }
.fp-trace[data-t="rec"] i { background: transparent; border: 1px solid var(--pv3-cyan); box-shadow: none; }
.pv3-ledger td small { display: block; color: var(--pv3-faint); font-size: calc(9.5px * var(--pv3-fs, 1)); margin-top: 2px; }

/* ══ 하단 ═══════════════════════════════════════════════════════ */
.fp-rp__warn { margin-inline-start: auto; font-size: calc(10px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-persona {
  margin-inline-start: auto; padding: 0 5px; border: 1px dashed rgba(147, 174, 194, 0.5); border-radius: 2px;
  font-size: calc(9px * var(--pv3-fs, 1)); color: var(--pv3-faint);
}
.pv3-act__req { display: inline-flex; align-items: center; gap: 3px; }
.pv3-act__req svg { width: 11px; height: 11px; }
.pv3-act[data-kind="src"] .pv3-act__kind { color: #ffb45a; background: color-mix(in srgb, #ff9418 14%, transparent); }
.fp-sign { margin: 7px 0 0; font-size: calc(10px * var(--pv3-fs, 1)); line-height: 1.5; color: var(--pv3-amber); }
/* 승인 뒤 — 초록을 쓰지 않는다. 승인은 «기록»이지 원천 반영이 아니다 */
.pv3-exhale.fp-exhale--done:disabled,
.pv3-exhale:disabled { border-color: var(--fp-charcoal-2); background: rgba(58, 70, 86, 0.55); color: var(--pv3-text); }
.pv3-badge[data-level="done"] { background: var(--fp-charcoal); color: #e0f2fe; box-shadow: inset 0 0 0 1px var(--fp-charcoal-2); }
.pv3-badge[data-level="info"] { background: var(--pv3-cyan); }

/* 코파일럿 — 응답 출처 한 줄 */
.fp-chat__src {
  flex: none; margin: 0; padding: 6px 13px;
  border-bottom: 1px dashed rgba(255, 215, 0, 0.45);
  background: rgba(255, 215, 0, 0.06);
  color: var(--pv3-amber); font-size: calc(10.5px * var(--pv3-fs, 1)); font-weight: 600;
}
.pv3-msg { font-size: calc(12.5px * var(--pv3-fs, 1)); }

/* 모달 본문 */
#pv3-modal-body p { margin: 0 0 10px; font-size: calc(12.5px * var(--pv3-fs, 1)); line-height: 1.7; color: var(--pv3-text); }

/* ══════════════════════════════════════════════════════════════════
   다공장 확장 (seed v0.2 · M11) — 공장 필터 · KPI 띠 · 12칸 · 단지 핀 ·
   단계 레일 · 영상 패널 V-CLIP · 계기 사진 패널 V-PHOTO · 원천 반영 4종
   ══════════════════════════════════════════════════════════════════ */

/* ── DISCOVER 머리 — 필터 · KPI 띠 · 12칸 (스크롤 밖에 고정) ─────── */
.fp-filter { flex: none; display: grid; grid-template-columns: 1.9fr repeat(5, 1fr) 1.35fr; gap: 3px; padding: 8px 10px 6px; border-bottom: 1px solid rgba(0, 153, 255, 0.18); }
.fp-filter__b {
  height: 26px; padding: 0 4px; border: 1px solid rgba(0, 153, 255, 0.35); border-radius: 3px;
  background: rgba(0, 0, 0, 0.3); color: var(--pv3-dim);
  font: inherit; font-size: calc(11px * var(--pv3-fs, 1)); font-weight: 700; cursor: pointer; white-space: nowrap;
}
.fp-filter__b:hover { border-color: var(--pv3-border-2); color: var(--pv3-text); }
.fp-filter__b.is-on { border-color: var(--pv3-cyan); background: rgba(0, 229, 255, 0.16); color: var(--pv3-cyan); box-shadow: 0 0 10px rgba(0, 229, 255, 0.2); }

.fp-kpi { flex: none; padding: 6px 10px 8px; border-bottom: 1px solid rgba(0, 153, 255, 0.18); background: rgba(3, 13, 26, 0.35); }
.fp-kpi__h { display: flex; align-items: center; gap: 6px; margin: 0 0 5px; font-size: calc(10px * var(--pv3-fs, 1)); font-weight: 700; color: var(--pv3-faint); letter-spacing: 0.02em; }
.fp-kpi__mock { margin-inline-start: auto; padding: 0 5px; border: 1px dashed rgba(255, 215, 0, 0.7); border-radius: 2px; color: var(--pv3-amber); font-size: calc(9px * var(--pv3-fs, 1)); }
.fp-kpi__g { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 3px; }
.fp-kpi__g span {
  display: grid; justify-items: center; gap: 1px; padding: 4px 2px 5px;
  border: 1px solid rgba(0, 153, 255, 0.3); border-radius: 3px; background: rgba(0, 0, 0, 0.28);
}
.fp-kpi__g b { font-family: var(--font-mono); font-size: calc(17px * var(--pv3-fs, 1)); font-weight: 800; line-height: 1.05; color: var(--pv3-text); }
.fp-kpi__g i { font-style: normal; font-size: calc(9px * var(--pv3-fs, 1)); color: var(--pv3-faint); text-align: center; line-height: 1.2; white-space: nowrap; }
.fp-kpi__g [data-k="zero"] b { color: var(--pv3-cyan); }
.fp-kpi__g [data-k="seen"] { border-color: var(--fp-charcoal-2); background: rgba(58, 70, 86, 0.5); }
.fp-kpi__g [data-k="wait"] { border-style: dashed; border-color: rgba(255, 215, 0, 0.6); }
.fp-kpi__g [data-k="wait"] b { color: var(--pv3-amber); }
.fp-kpi__g [data-k="na"] { border-style: dashed; border-color: rgba(147, 174, 194, 0.6); background: repeating-linear-gradient(135deg, transparent 0 5px, rgba(255, 255, 255, 0.04) 5px 10px); }
.fp-kpi__g [data-k="na"] b { color: var(--pv3-dim); }

.fp-cells { flex: none; padding: 7px 10px 9px; border-top: 1px solid rgba(0, 153, 255, 0.28); background: rgba(3, 13, 26, 0.72); }
.fp-cells__h { display: flex; align-items: baseline; gap: 6px; margin: 0 0 4px; font-size: calc(10px * var(--pv3-fs, 1)); font-weight: 700; color: var(--pv3-cyan); }
.fp-cells__h span { margin-inline-start: auto; font-weight: 400; color: var(--pv3-faint); font-size: calc(9px * var(--pv3-fs, 1)); }
.fp-cells__g { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 2px; }
.fp-cell {
  display: grid; place-items: center; height: 19px; border-radius: 2px;
  border: 1px solid rgba(0, 153, 255, 0.45); background: rgba(0, 153, 255, 0.2);
  font-family: var(--font-mono); font-size: calc(9.5px * var(--pv3-fs, 1)); font-weight: 700; color: var(--pv3-dim);
}
.fp-cell.is-void { border-style: dashed; border-color: rgba(248, 113, 113, 0.65); background: transparent; color: #fca5a5; }
.fp-cell.is-on { border-color: var(--pv3-cyan); border-style: solid; box-shadow: 0 0 0 1px var(--pv3-cyan), 0 0 8px rgba(0, 229, 255, 0.45); color: #fff; }
.fp-cell.is-void.is-on { border-style: dashed; box-shadow: 0 0 0 1px #f87171, 0 0 8px rgba(248, 113, 113, 0.45); }
.fp-cells__use { margin: 4px 0 0; font-size: calc(9.5px * var(--pv3-fs, 1)); color: var(--pv3-dim); line-height: 1.4; }
.fp-cells__s { margin: 4px 0 0; padding: 4px 6px; border-left: 2px solid #f87171; background: rgba(40, 8, 12, 0.35); font-size: calc(10px * var(--pv3-fs, 1)); font-weight: 600; line-height: 1.45; color: var(--pv3-text); }

/* 카드 — 공장 태그 · 스크롤 목록 */
#pv3-cases { padding: 8px 10px; }
.fp-case__plant { margin-inline-start: 6px; padding: 0 5px; border: 1px solid rgba(182, 203, 217, 0.4); border-radius: 2px; font-style: normal; font-size: calc(9.5px * var(--pv3-fs, 1)); color: var(--pv3-dim); }
.pv3-badge[data-level="mock"] { background: transparent; color: var(--fp-mock); box-shadow: inset 0 0 0 1px var(--fp-mock); }
.pv3-badge[data-level="info"] { background: var(--pv3-cyan); }

/* 결정 바 상태 — 확인 불가(연결 전)는 확인과 다른 회색 */
.pv3-decide-bar__st b[data-level="na"] { --c: var(--pv3-dim); }
.pv3-decide-bar__st b[data-level="info"] { --c: var(--pv3-cyan); }

/* 헤드라인 태그 — 로봇 조종 안 함 */
.pv3-tags span.fp-tag-ban { border: 1px dashed var(--fp-mock); color: var(--fp-mock); font-weight: 700; }

/* ── 헤더 게이지 — 단지 전체는 접힌 꼴, 새 원천은 「읽기」 ────────── */
.pv3-feed.fp-feed--c { gap: 5px; }
.pv3-feeds { gap: 12px; }
.fp-feed--read .pv3-feed__bar i { opacity: 0.35; }
.fp-feed--read b { font-family: var(--font-sans); font-weight: 600; color: var(--pv3-dim); font-size: calc(10px * var(--pv3-fs, 1)); }

/* ── 지도 — 단지 구역 · 핀 ─────────────────────────────────────── */
.fp-zone--park { stroke: rgba(182, 203, 217, 0.16); }
.fp-zone--park.is-on { stroke: rgba(0, 229, 255, 0.62); }
.fp-pin {
  position: absolute; z-index: 3;
  display: flex; align-items: center; gap: 6px;
  margin: -12px 0 0 -12px; transform-origin: 12px 12px;
  pointer-events: none; white-space: nowrap;
  transition: transform 1.5s cubic-bezier(0.22, 0.8, 0.2, 1);
}
.fp-pin > i {
  flex: none; display: grid; place-items: center; width: 24px; height: 24px; border-radius: 50%;
  border: 1.5px solid rgba(182, 203, 217, 0.55); background: rgba(3, 13, 26, 0.86);
  font-style: normal; font-size: 13px; font-weight: 800; color: var(--pv3-dim);
}
.fp-pin--fac > i { border-radius: 4px; font-size: 10px; }
.fp-pin > span { display: grid; gap: 0; padding: 2px 8px 3px; border-radius: 3px; background: rgba(3, 13, 26, 0.72); border: 1px solid rgba(182, 203, 217, 0.18); }
.fp-pin b { font-size: calc(10.5px * var(--pv3-fs, 1)); font-weight: 700; color: var(--pv3-dim); }
.fp-pin small { font-size: calc(9px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-pin.is-on > i { border-color: var(--pv3-cyan); color: var(--pv3-cyan); box-shadow: 0 0 12px rgba(0, 229, 255, 0.5); }
.fp-pin.is-on > span { border-color: rgba(0, 229, 255, 0.55); background: rgba(3, 20, 34, 0.9); }
.fp-pin.is-on b { color: var(--pv3-cyan); }
.fp-pin.is-hot > i { background: var(--pv3-cyan); color: #041018; }
.fp-pin.is-bare > span { display: none; }
.fp-pin:not(.is-on) { opacity: 0.8; }

.fp-marker--up .pv3-marker__label { top: auto; bottom: 64px; }
.fp-marker--sub.fp-marker--up .pv3-marker__label { top: auto; bottom: 12px; }

/* ── DECIDE — 단계 레일 ───────────────────────────────────────── */
.fp-rail { display: flex; flex-wrap: wrap; gap: 3px; margin: 0 0 8px; }
.fp-rail__s {
  flex: 1 0 34px; display: grid; justify-items: center; gap: 0; padding: 3px 2px 4px; min-width: 34px;
  border: 1px solid rgba(0, 153, 255, 0.35); border-radius: 3px; background: rgba(0, 0, 0, 0.3);
  color: var(--pv3-dim); font: inherit; cursor: pointer;
}
.fp-rail__s b { font-family: var(--font-mono); font-size: calc(10.5px * var(--pv3-fs, 1)); color: var(--pv3-text); }
.fp-rail__s i { font-style: normal; font-family: var(--font-mono); font-size: calc(8.5px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-rail__s.is-next { border-style: dashed; opacity: 0.62; }
.fp-rail__s.is-now { border-color: var(--pv3-amber); }
.fp-rail__s.is-now b { color: var(--pv3-amber); }
.fp-rail__s.is-sel { background: rgba(0, 229, 255, 0.16); border-color: var(--pv3-cyan); box-shadow: 0 0 8px rgba(0, 229, 255, 0.3); opacity: 1; }
.fp-rail__g { display: flex; gap: 2px; align-items: center; height: 9px; }
.fp-rg { font-style: normal; font-size: 8px; line-height: 1; }
.fp-rg--clip { color: var(--pv3-cyan); }
.fp-rg--img { color: var(--pv3-faint); }
.fp-rg--ap { color: var(--pv3-amber); letter-spacing: -2px; }
.fp-rg--r { width: 7px; height: 7px; border-radius: 50%; }
.fp-rg--r[data-k="seen"] { background: var(--fp-charcoal); box-shadow: 0 0 0 1px var(--fp-charcoal-2); }
.fp-rg--r[data-k="wait"] { border: 1px dashed var(--pv3-amber); }
.fp-rg--r[data-k="part"] { background: linear-gradient(90deg, var(--fp-charcoal-2) 50%, transparent 50%); border: 1px dashed var(--pv3-amber); }
.fp-rg--r[data-k="na"] { border: 1px dashed var(--pv3-faint); background: repeating-linear-gradient(135deg, transparent 0 2px, rgba(255, 255, 255, 0.35) 2px 3px); }

.fp-stepcard { padding: 8px 9px; border: 1px solid rgba(0, 229, 255, 0.35); border-radius: 3px; background: rgba(0, 229, 255, 0.04); }
.fp-stepcard.is-next { border-style: dashed; background: transparent; }
.fp-stepcard__h { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; margin: 0 0 4px; font-size: calc(10.5px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-stepcard__h b { font-family: var(--font-mono); font-size: calc(11.5px * var(--pv3-fs, 1)); color: var(--pv3-cyan); }
.fp-stepcard__h em { margin-inline-start: auto; padding: 0 5px; border: 1px dashed var(--pv3-faint); border-radius: 2px; font-style: normal; font-size: calc(9.5px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-stepcard__h em.is-now { border: 1px solid var(--pv3-amber); color: var(--pv3-amber); }
.fp-stepcard__t { margin: 0 0 6px; font-size: calc(11.5px * var(--pv3-fs, 1)); line-height: 1.55; color: var(--pv3-text); }
.fp-stepcard__c { display: flex; flex-wrap: wrap; gap: 4px; margin: 0; }
.fp-stepcard__src { margin: 5px 0 0; font-size: calc(10px * var(--pv3-fs, 1)); line-height: 1.45; color: var(--pv3-faint); }
.fp-sc { display: inline-flex; align-items: center; gap: 3px; padding: 0 5px; border: 1px solid rgba(182, 203, 217, 0.4); border-radius: 2px; font-size: calc(9.5px * var(--pv3-fs, 1)); color: var(--pv3-dim); }
.fp-sc--mock { border-color: var(--fp-mock); color: var(--fp-mock); }
.fp-sc--real { border-style: dashed; color: var(--pv3-faint); }
.fp-sc--ap { border-color: var(--pv3-amber); color: var(--pv3-amber); font-weight: 700; }

/* 원천 반영 4종 — 확인(차콜 ●) · 대기(점선 ○) · 일부 확인(반쪽) · 확인 불가(빗금). 초록 없음 */
.fp-refl { display: inline-flex; align-items: center; gap: 4px; padding: 0 6px; border-radius: 2px; font-size: calc(9.5px * var(--pv3-fs, 1)); font-weight: 700; white-space: nowrap; }
.fp-refl i { width: 8px; height: 8px; border-radius: 50%; flex: none; }
.fp-refl[data-k="seen"] { border: 1px solid var(--fp-charcoal-2); background: rgba(58, 70, 86, 0.6); color: #e0f2fe; }
.fp-refl[data-k="seen"] i { background: var(--fp-charcoal); box-shadow: 0 0 0 1px var(--fp-charcoal-2); }
.fp-refl[data-k="wait"] { border: 1px dashed var(--pv3-amber); color: var(--pv3-amber); }
.fp-refl[data-k="wait"] i { border: 1px dashed var(--pv3-amber); }
.fp-refl[data-k="part"] { border: 1px dashed var(--pv3-amber); color: var(--pv3-text); background: linear-gradient(90deg, rgba(58, 70, 86, 0.6) 0 50%, transparent 50%); }
.fp-refl[data-k="part"] i { background: linear-gradient(90deg, var(--fp-charcoal-2) 50%, transparent 50%); border: 1px dashed var(--pv3-amber); }
.fp-refl[data-k="na"] { border: 1px dashed var(--pv3-faint); color: var(--pv3-dim); background: repeating-linear-gradient(135deg, transparent 0 5px, rgba(255, 255, 255, 0.05) 5px 10px); }
.fp-refl[data-k="na"] i { border: 1px dashed var(--pv3-faint); }

/* 이력·장부 — 요약 줄 · 이 사건 행 강조 */
.fp-ledsum { display: flex; flex-wrap: wrap; gap: 6px 12px; margin: 0 0 8px; font-size: calc(10.5px * var(--pv3-fs, 1)); color: var(--pv3-dim); }
.fp-ledsum span { display: inline-flex; align-items: center; gap: 4px; }
.fp-ledsum b { font-family: var(--font-mono); color: var(--pv3-text); }
.fp-ledsum i { width: 8px; height: 8px; border-radius: 50%; }
.fp-ledsum [data-k="seen"] i { background: var(--fp-charcoal); box-shadow: 0 0 0 1px var(--fp-charcoal-2); }
.fp-ledsum [data-k="wait"] i { border: 1px dashed var(--pv3-amber); }
.fp-ledsum [data-k="na"] i { border: 1px dashed var(--pv3-faint); }
.pv3-ledger tr.is-me td { background: rgba(0, 229, 255, 0.08); }
.pv3-ledger tr.is-me td:first-child { box-shadow: inset 2px 0 0 var(--pv3-cyan); }

/* ── DECIDE — 영상 패널 V-CLIP ──────────────────────────────────── */
.fp-b--clip { color: var(--pv3-cyan) !important; }
.fp-b--img { color: var(--pv3-dim) !important; }
.fp-cliptabs { display: flex; flex-wrap: wrap; gap: 3px; margin: 0 0 6px; }
.fp-cliptab { padding: 2px 7px; border: 1px solid rgba(0, 153, 255, 0.4); border-radius: 3px; background: rgba(0, 0, 0, 0.3); color: var(--pv3-dim); font: inherit; font-size: calc(10px * var(--pv3-fs, 1)); cursor: pointer; }
.fp-cliptab.is-on { border-color: var(--pv3-cyan); color: var(--pv3-cyan); background: rgba(0, 229, 255, 0.14); }
.fp-vbox { position: relative; border: 1px solid var(--pv3-border); border-radius: 2px; overflow: hidden; background: #000; aspect-ratio: 16 / 9; }
.fp-vid { display: block; width: 100%; height: 100%; object-fit: cover; filter: saturate(0.72) brightness(0.92) contrast(1.04); background: #000; }
.fp-vbox::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: repeating-linear-gradient(180deg, rgba(0, 0, 0, 0.1) 0 1px, transparent 1px 3px); }
.fp-vbox__rec { position: absolute; right: 6px; top: 6px; z-index: 1; display: inline-flex; align-items: center; gap: 4px; padding: 1px 6px; border-radius: 2px; background: rgba(3, 13, 26, 0.85); font-family: var(--font-mono); font-size: 9px; color: var(--pv3-dim); letter-spacing: 0.08em; }
.fp-vbox__rec i { width: 6px; height: 6px; border-radius: 50%; background: var(--pv3-amber); animation: fp-blink 1.6s steps(2) infinite; }
@keyframes fp-blink { 50% { opacity: 0.25; } }
.fp-vbox__chip { position: absolute; left: 6px; bottom: 6px; z-index: 1; padding: 2px 7px; border: 1px dashed var(--pv3-amber); border-radius: 2px; background: rgba(3, 13, 26, 0.88); color: var(--pv3-amber); font-size: calc(9.5px * var(--pv3-fs, 1)); font-weight: 700; }
.fp-vcap { margin: 6px 0 0; padding: 4px 7px; border: 1px dashed rgba(255, 215, 0, 0.6); border-radius: 2px; font-size: calc(10px * var(--pv3-fs, 1)); line-height: 1.45; color: var(--pv3-amber); }
.fp-vblank {
  display: grid; place-content: center; gap: 4px; aspect-ratio: 16 / 9; padding: 10px; text-align: center;
  border: 1.5px dashed rgba(248, 113, 113, 0.6); border-radius: 3px;
  background: repeating-linear-gradient(135deg, transparent 0 10px, rgba(255, 255, 255, 0.025) 10px 20px), rgba(40, 8, 12, 0.3);
}
.fp-vblank b { font-size: calc(12px * var(--pv3-fs, 1)); color: #fca5a5; }
.fp-vblank span { font-size: calc(10.5px * var(--pv3-fs, 1)); line-height: 1.5; color: var(--pv3-dim); }
.fp-ref { display: grid; grid-template-columns: 44% minmax(0, 1fr); gap: 8px; margin-top: 8px; padding-top: 8px; border-top: 1px dashed rgba(182, 203, 217, 0.25); }
.fp-clipbox > .fp-ref:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
.fp-ref__v { position: relative; border: 1px dashed rgba(182, 203, 217, 0.5); border-radius: 2px; overflow: hidden; background: #000; aspect-ratio: 16 / 9; align-self: start; }
.fp-ref__chip { position: absolute; left: 0; right: 0; bottom: 0; padding: 1px 4px; background: rgba(3, 13, 26, 0.88); color: var(--pv3-dim); font-size: calc(8.5px * var(--pv3-fs, 1)); text-align: center; }
.fp-ref__t { display: grid; gap: 2px; align-content: start; }
.fp-ref__t b { font-size: calc(10.5px * var(--pv3-fs, 1)); color: var(--pv3-dim); }
.fp-ref__t span { font-size: calc(10px * var(--pv3-fs, 1)); color: var(--pv3-text); }
.fp-ref__t small { font-size: calc(9.5px * var(--pv3-fs, 1)); line-height: 1.4; color: var(--pv3-amber); }
.fp-ref__t small.fp-ref__n { color: var(--pv3-faint); }

/* ── DECIDE — 계기 사진 패널 V-PHOTO ────────────────────────────── */
.fp-photo__ban { margin: 0 0 8px; padding: 4px 7px; border: 1px dashed var(--fp-mock); border-radius: 2px; font-size: calc(10.5px * var(--pv3-fs, 1)); font-weight: 700; color: var(--fp-mock); }
.fp-photo__row { display: grid; grid-template-columns: 112px minmax(0, 1fr); gap: 9px; margin: 0 0 6px; }
.fp-photo__img { position: relative; width: 112px; height: 112px; border: 1px solid var(--pv3-border); border-radius: 2px; overflow: hidden; background: #000; }
.fp-photo__img img { display: block; width: 100%; height: 100%; object-fit: cover; filter: saturate(0.7) brightness(0.9); }
.fp-photo__img--none { display: grid; place-content: center; gap: 2px; text-align: center; border: 1.5px dashed rgba(248, 113, 113, 0.55); background: repeating-linear-gradient(135deg, transparent 0 8px, rgba(255, 255, 255, 0.03) 8px 16px); }
.fp-photo__img--none b { font-size: calc(10.5px * var(--pv3-fs, 1)); color: #fca5a5; }
.fp-photo__img--none span { font-size: calc(9.5px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-photo__chip { position: absolute; left: 0; right: 0; bottom: 0; padding: 1px 4px; border-top: 1px dashed var(--pv3-amber); background: rgba(3, 13, 26, 0.9); color: var(--pv3-amber); font-size: calc(8.5px * var(--pv3-fs, 1)); font-weight: 700; text-align: center; }
.fp-photo__f { display: grid; gap: 4px; align-content: start; }
.fp-photo__k { margin: 0; font-size: calc(10.5px * var(--pv3-fs, 1)); font-weight: 700; color: var(--pv3-cyan); }
.fp-field { display: grid; grid-template-columns: 54px minmax(0, 1fr); column-gap: 6px; align-items: baseline; padding: 3px 6px; border: 1px solid rgba(182, 203, 217, 0.3); border-radius: 2px; }
.fp-field span { grid-row: span 2; font-size: calc(9.5px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-field b { font-size: calc(12px * var(--pv3-fs, 1)); color: var(--pv3-text); }
.fp-field small { font-size: calc(9px * var(--pv3-fs, 1)); color: var(--pv3-faint); }
.fp-field[data-k="void"] { border: 1.5px dashed rgba(248, 113, 113, 0.6); background: repeating-linear-gradient(135deg, transparent 0 6px, rgba(255, 255, 255, 0.03) 6px 12px); }
.fp-field[data-k="void"] b { font-size: calc(11px * var(--pv3-fs, 1)); font-weight: 700; color: #fca5a5; }
.fp-field[data-k="human"] { border-color: var(--pv3-cyan); background: rgba(0, 229, 255, 0.06); }
.fp-field[data-k="human"] b { color: var(--pv3-cyan); font-family: var(--font-mono); }
.fp-field[data-k="wait"] { border-style: dashed; }
.fp-field[data-k="wait"] b { color: var(--pv3-faint); font-weight: 600; }
.fp-photo__cap { margin: 0 0 8px; font-size: calc(9.5px * var(--pv3-fs, 1)); line-height: 1.45; color: var(--pv3-amber); }
.fp-photo__wide { position: relative; border: 1px solid var(--pv3-border); border-radius: 2px; overflow: hidden; height: 104px; margin: 2px 0 4px; }
.fp-photo__wide img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 50% 30%; filter: saturate(0.7) brightness(0.9); }

/* ── 차트 — 단지 사건 ──────────────────────────────────────────── */
.fp-g__ap { fill: var(--pv3-amber); stroke: #030d1a; stroke-width: 1.2; }
.fp-g__ap2 { fill: none; stroke: var(--pv3-amber); stroke-width: 1.1; }
.fp-g__r { stroke-width: 1.3; fill: none; }
.fp-g__r[data-k="seen"] { fill: var(--fp-charcoal); stroke: var(--fp-charcoal-2); }
.fp-g__r[data-k="wait"] { stroke: var(--pv3-amber); stroke-dasharray: 2 1.6; }
.fp-g__r[data-k="part"] { stroke: var(--pv3-amber); stroke-dasharray: 2 1.6; }
.fp-g__half { fill: var(--fp-charcoal-2); }
.fp-g__r[data-k="na"] { stroke: var(--pv3-faint); stroke-dasharray: 2 1.6; }
.fp-g__na { stroke: var(--pv3-faint); stroke-width: 1.2; }
.fp-swim__k--void { fill: var(--pv3-faint); }
.fp-void__lane { fill: rgba(255, 255, 255, 0.02); stroke: rgba(248, 113, 113, 0.55); stroke-dasharray: 3 3; }
.fp-void__t { fill: #fca5a5; font-size: 9px; font-weight: 700; }
.fp-bag { stroke-width: 1.2; }
.fp-bag[data-k="ok"] { fill: rgba(0, 229, 255, 0.12); stroke: rgba(0, 229, 255, 0.6); }
.fp-bag[data-k="bad"] { fill: rgba(255, 77, 77, 0.55); stroke: var(--pv3-red); }
.fp-bag[data-k="rej"] { fill: rgba(0, 229, 255, 0.06); stroke: var(--pv3-dim); stroke-dasharray: 3 2; }
.fp-bag__n { fill: var(--pv3-dim); font-size: 9.5px; font-weight: 700; font-family: var(--font-mono); }
.fp-bag__n[data-k="bad"] { fill: #fff; }
.fp-bag__t { font-size: 8.5px; font-weight: 700; fill: var(--pv3-cyan); }
.fp-bag__t[data-k="bad"] { fill: #ff8a8a; }
.fp-av__k { fill: var(--pv3-text); font-size: 10px; font-weight: 800; font-family: var(--font-mono); }
.fp-av__p { fill: var(--pv3-faint); font-size: 9px; }
.fp-av__bar { fill: rgba(0, 229, 255, 0.32); stroke: var(--pv3-cyan); stroke-width: 1; }
.fp-av__later { fill: none; stroke: rgba(0, 229, 255, 0.6); stroke-dasharray: 3 2; }
.fp-av__v { fill: #e0f2fe; font-size: 9px; font-weight: 700; }
.fp-av__lt { fill: var(--pv3-cyan); font-size: 8.5px; }
.fp-av__req { stroke: var(--pv3-amber); stroke-width: 2; }
.fp-av__rt { fill: var(--pv3-amber); font-size: 8.5px; font-weight: 700; }
.fp-av__short { fill: #ff8a8a; font-size: 9px; font-weight: 800; }
.fp-av__q { fill: var(--pv3-faint); font-size: 8.5px; }
.fp-seal__band { fill: rgba(255, 215, 0, 0.16); stroke: rgba(255, 215, 0, 0.55); stroke-dasharray: 3 2; }
.fp-seal__bt { fill: var(--pv3-amber); font-size: 9.5px; font-weight: 800; }
.fp-seal__zt { fill: var(--pv3-faint); font-size: 9px; font-weight: 700; }
.fp-seal__ct { fill: #ffb45a; font-size: 9px; font-weight: 700; }
.fp-unit { stroke-width: 1; }
.fp-unit[data-k="ok"] { fill: rgba(0, 229, 255, 0.14); stroke: rgba(0, 229, 255, 0.28); }
.fp-unit[data-k="samp"] { fill: rgba(0, 229, 255, 0.2); stroke: var(--pv3-cyan); stroke-width: 1.4; }
.fp-unit[data-k="sbad"] { fill: rgba(255, 77, 77, 0.55); stroke: var(--pv3-cyan); stroke-width: 1.6; }
.fp-unit[data-k="bad"] { fill: rgba(255, 77, 77, 0.55); stroke: var(--pv3-red); }
.fp-unit[data-k="dis"] { fill: rgba(0, 229, 255, 0.14); stroke: var(--pv3-amber); }
.fp-unit[data-k="rej"] { fill: transparent; stroke: var(--pv3-dim); stroke-dasharray: 2.5 2; }
.fp-unit__h { fill: var(--pv3-cyan); }
.fp-pt__bld { fill: rgba(0, 229, 255, 0.04); stroke: rgba(182, 203, 217, 0.45); stroke-dasharray: 4 3; }
.fp-pt__bt { fill: var(--pv3-faint); font-size: 9px; }
.fp-pt__path { fill: none; stroke: var(--pv3-cyan); stroke-width: 1.6; stroke-dasharray: 5 3; }
.fp-pt__wp { fill: var(--pv3-cyan); stroke: #030d1a; stroke-width: 1.5; }
.fp-pt__wp.is-hot { fill: var(--pv3-red); }
.fp-pt__t { fill: var(--pv3-dim); font-size: 9px; font-weight: 700; }
.fp-pt__t.is-hot { fill: #ff8a8a; font-size: 9.5px; }
.fp-rc__zone[data-k="robot"] { fill: rgba(255, 77, 77, 0.06); stroke: rgba(255, 77, 77, 0.5); stroke-dasharray: 4 3; }
.fp-rc__zone[data-k="feed"] { fill: rgba(0, 229, 255, 0.1); stroke: var(--pv3-cyan); }
.fp-rc__vol { fill: rgba(255, 77, 77, 0.14); stroke: var(--pv3-red); stroke-width: 1.5; stroke-dasharray: 5 3; }
.fp-rc__cmp { fill: none; stroke: rgba(182, 203, 217, 0.8); stroke-width: 1.2; stroke-dasharray: 2 3; }
.fp-rc__base { fill: var(--pv3-amber); stroke: #030d1a; stroke-width: 1.5; }
.fp-rc__person { fill: var(--pv3-red); stroke: #030d1a; stroke-width: 1.5; }
.fp-rc__dim { stroke: var(--pv3-cyan); stroke-width: 1.2; }
.fp-rc__dt { fill: var(--pv3-cyan); font-size: 10px; font-weight: 800; }
.fp-rc__pt { fill: #ff8a8a; font-size: 9.5px; font-weight: 700; }
.fp-rc__bt { fill: var(--pv3-amber); font-size: 9.5px; font-weight: 800; font-family: var(--font-mono); }
.fp-rc__vt { fill: #ff8a8a; font-size: 9.5px; font-weight: 700; }
.fp-rc__ct { fill: var(--pv3-dim); font-size: 9px; font-weight: 700; }
.fp-rc__zt { font-size: 8.5px; }
.fp-rc__zt[data-k="robot"] { fill: rgba(255, 138, 138, 0.85); }
.fp-rc__zt[data-k="feed"] { fill: var(--pv3-cyan); }

/* S7 — 약속 문구 게이트 */
.fp-block { margin: 0 0 8px; padding: 6px 8px; border: 1px solid rgba(255, 77, 77, 0.6); border-radius: 3px; background: rgba(255, 77, 77, 0.07); }
.fp-block__h { margin: 0 0 2px; font-size: calc(9.5px * var(--pv3-fs, 1)); font-weight: 700; color: var(--pv3-faint); }
.fp-block__d { margin: 0 0 3px; font-size: calc(11px * var(--pv3-fs, 1)); color: #fca5a5; }
.fp-block__d s { text-decoration-thickness: 1.5px; }
.fp-block__r { display: flex; align-items: center; gap: 5px; margin: 0; font-size: calc(10.5px * var(--pv3-fs, 1)); font-weight: 800; color: #ff8a8a; }
.fp-pinline { margin: 0 0 4px; padding: 5px 8px; border: 1px solid var(--pv3-amber); border-radius: 3px; background: rgba(255, 215, 0, 0.08); font-size: calc(11.5px * var(--pv3-fs, 1)); font-weight: 800; color: var(--pv3-amber); text-align: center; }
.fp-src2 { margin: 0 0 8px; font-size: calc(9.5px * var(--pv3-fs, 1)); color: var(--pv3-faint); text-align: center; }

/* 코파일럿 — 고정 문구 · 차단 문장 */
.fp-chat__pin { flex: none; margin: 8px 12px 0; padding: 5px 9px; border: 1px solid var(--pv3-amber); border-radius: 3px; background: rgba(255, 215, 0, 0.08); color: var(--pv3-amber); font-size: calc(11px * var(--pv3-fs, 1)); font-weight: 800; text-align: center; }
.fp-msg--block { border: 1px solid rgba(255, 77, 77, 0.55) !important; background: rgba(255, 77, 77, 0.07) !important; }
.fp-msg--block s { color: #fca5a5; }
.fp-msg__h { display: block; margin: 0 0 3px; font-size: calc(9.5px * var(--pv3-fs, 1)); font-weight: 700; color: var(--pv3-faint); }

/* 헤드라인 뒤 어둠막 — 먼 공장(이미지 윗단) 핀·이름표가 질문 글자와 겹쳐 읽히지 않게 */
.fp-scrim {
  position: absolute; left: 0; right: 0; top: 0; height: 270px; z-index: 6; pointer-events: none; opacity: 0; transition: opacity 0.6s;
  background: linear-gradient(180deg, rgba(3, 13, 26, 0.82) 0, rgba(3, 13, 26, 0.62) 58%, rgba(3, 13, 26, 0) 100%);
}
.pv3[data-park="1"] .fp-scrim { opacity: 1; }
