/* 위화감 연출 — 임시 요소·클래스만 사용. 도면·가구·캐릭터 이미지 자체는 건드리지 않음. prefers-reduced-motion 이면 애니메이션 없이 정지 표시만. */
.vv-ucx text{pointer-events:none;user-select:none}.vv-ucx.sel rect:first-child{stroke:#d7d7d2}
.vv-ucnoise{position:absolute;inset:0;z-index:5;pointer-events:none;opacity:.0;mix-blend-mode:overlay;
  background:repeating-linear-gradient(0deg,rgba(255,255,255,.14) 0 1px,rgba(0,0,0,.18) 1px 3px),
  linear-gradient(90deg,rgba(255,40,40,.09),rgba(40,255,255,.09));animation:ucnoise .9s steps(7,end) 1}
@keyframes ucnoise{0%{opacity:0;transform:translateX(0)}12%{opacity:.75;transform:translateX(-6px)}30%{opacity:.35;transform:translateX(5px)}48%{opacity:.8;transform:translateX(-3px)}70%{opacity:.4;transform:translateX(2px)}100%{opacity:0;transform:translateX(0)}}
.vv-stage.unc-sky{background:linear-gradient(#b4d0ec,#c6dbef)}
.vv-ucghost{image-rendering:auto}
/* 목록·상세: 존재 오류 */
.vv-chip.unc-miss img,.vv-chip.unc-miss .vv-ini{filter:grayscale(1) contrast(1.4) brightness(.8);opacity:.55}
.vv-chip.unc-miss b,.vv-chip.unc-miss small{font-family:ui-monospace,Menlo,Consolas,monospace;letter-spacing:.02em}
.vv-chip.unc-miss small{color:#b0443c}
.vv-pic.vv-uc-bad{position:relative;filter:grayscale(1) contrast(1.35) brightness(.7)}
.vv-pic.vv-uc-bad::after,.vv-pic.vv-uc-dmg::after{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.08) 0 1px,transparent 1px 3px)}
.vv-pic.vv-uc-dmg{position:relative;box-shadow:inset 0 0 0 1px rgba(176,68,60,.25)}
.vv-pic.vv-uc-bad img{clip-path:polygon(0 0,100% 0,100% 38%,86% 38%,86% 44%,100% 44%,100% 100%,0 100%,0 71%,12% 71%,12% 64%,0 64%)}
.vv-ucmono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;color:#b0443c;border:1px dashed #b0443c55;border-radius:8px;padding:8px 10px;margin:6px 0}
#vvDetail .vv-pic.vv-uc-bad~.vv-phrase,#vvDetail .vx-head .vv-uc-bad~*{font-family:ui-monospace,Menlo,Consolas,monospace}
@media (prefers-reduced-motion:reduce){.vv-ucnoise{display:none}}

/* 존재 오류 상세: 깨진 글꼴·색 분리·떨림. 누를 수 있는 것은 삭제 버튼뿐 */
.vv-uc-corrupt,#vvDetail.vv-uc-corrupt *{font-family:ui-monospace,Menlo,Consolas,'Courier New',monospace!important}
.vv-uc-corrupt h3,.vv-uc-corrupt h4,.vv-uc-corrupt dt,.vv-uc-corrupt dd,.vv-uc-corrupt p,.vv-uc-corrupt .vv-tag{text-shadow:-1.6px 0 rgba(255,0,60,.8),1.6px 0 rgba(0,255,120,.7),0 0 0 rgba(0,120,255,.5);letter-spacing:.03em;filter:url(#ucTear);animation:ucjit 2.6s steps(2,end) var(--ucd,0s) infinite,ucrgb 1.7s steps(1,end) var(--ucd,0s) infinite}
.vv-uc-corrupt h4,.vv-uc-corrupt dt{color:#b0443c}
.vv-uc-corrupt .vv-ucprof{white-space:pre-wrap;word-break:break-all;font-size:12.5px}
.vv-uc-corrupt button:disabled,.vv-uc-corrupt input:disabled,.vv-uc-corrupt select:disabled{opacity:.35;cursor:not-allowed;filter:grayscale(1)}
.vv-uc-corrupt #vdDel{opacity:1;filter:none;cursor:pointer;box-shadow:0 0 0 2px #b0443c55}
@keyframes ucjit{0%,86%,100%{transform:none}88%{transform:translate(1.5px,-.5px) skewX(-4deg)}92%{transform:translate(-2px,.5px)}95%{transform:translate(1px,0) skewX(3deg)}}
@media (prefers-reduced-motion:reduce){.vv-uc-corrupt *{animation:none!important}}

/* 빨강·초록(·파랑) 색 분리가 순간적으로 크게 벌어졌다 돌아옴 */
@keyframes ucrgb{0%,60%,100%{text-shadow:-1.6px 0 rgba(255,0,60,.8),1.6px 0 rgba(0,255,120,.7)}62%{text-shadow:-5px 1px rgba(255,0,60,.9),5px -1px rgba(0,255,120,.85),0 2px rgba(0,120,255,.6)}66%{text-shadow:4px 0 rgba(255,0,60,.9),-4px 0 rgba(0,255,120,.85)}72%{text-shadow:-2.4px 0 rgba(255,0,60,.8),2.4px 0 rgba(0,255,120,.7)}}
.vv-pic.vv-uc-bad:has(.vv-ucg){filter:none}
.vv-ucg{image-rendering:auto}
@media (prefers-reduced-motion:reduce){.vv-uc-corrupt h3,.vv-uc-corrupt h4,.vv-uc-corrupt dt,.vv-uc-corrupt dd,.vv-uc-corrupt p,.vv-uc-corrupt .vv-tag{filter:none}}

/* 단면도 위 NOT FOUND 상자: 색 분리·찢김 막대·픽셀 깜빡임 */
.vv-ucx .ucx-ch{mix-blend-mode:screen;opacity:.8}
.vv-ucx .ucx-r{animation:ucxr 1.9s steps(1,end) infinite}.vv-ucx .ucx-c{animation:ucxc 1.9s steps(1,end) infinite}
@keyframes ucxr{0%,58%,100%{transform:translateX(calc(var(--o)*-1))}60%{transform:translateX(calc(var(--o)*-3.5))}64%{transform:translateX(calc(var(--o)*2))}70%{transform:translateX(calc(var(--o)*-1))}}
@keyframes ucxc{0%,58%,100%{transform:translateX(var(--o))}60%{transform:translateX(calc(var(--o)*3.5))}64%{transform:translateX(calc(var(--o)*-2))}70%{transform:translateX(var(--o))}}
.vv-ucx .ucx-bar{opacity:0;mix-blend-mode:screen;animation:ucxbar 2.6s steps(1,end) infinite}
@keyframes ucxbar{0%,70%,100%{opacity:0}72%{opacity:.75}76%{opacity:0}80%{opacity:.5}83%{opacity:0}}
.vv-ucx .ucx-px{opacity:0;animation:ucxpx 1.4s steps(1,end) infinite}
@keyframes ucxpx{0%,55%,100%{opacity:0}58%{opacity:.9}66%{opacity:.2}74%{opacity:.8}82%{opacity:0}}
@media (prefers-reduced-motion:reduce){.vv-ucx .ucx-r,.vv-ucx .ucx-c,.vv-ucx .ucx-bar,.vv-ucx .ucx-px{animation:none}.vv-ucx .ucx-bar,.vv-ucx .ucx-px{opacity:.4}}
