.scan-box{width:min(520px,100%);max-height:calc(100vh - 40px);overflow:auto}
.scan-stage{position:relative;width:100%;aspect-ratio:3/4;max-height:56vh;background:#0d1b21;border-radius:11px;overflow:hidden;margin-bottom:9px}
.scan-stage video{width:100%;height:100%;object-fit:cover;display:block}
.scan-frame{position:absolute;left:10%;right:10%;top:50%;transform:translateY(-50%);aspect-ratio:2.8/1;border:2px solid rgba(255,255,255,.95);border-radius:11px;box-shadow:0 0 0 9999px rgba(6,18,22,.48);pointer-events:none}
.scan-frame span{position:absolute;left:50%;bottom:calc(100% + 12px);transform:translateX(-50%);padding:5px 11px;border-radius:999px;background:rgba(8,31,33,.75);color:#fff;font-size:12px;white-space:nowrap;letter-spacing:.02em}
.scan-frame::after{content:'';position:absolute;left:6px;right:6px;top:50%;height:2px;background:#4fd1c5;box-shadow:0 0 8px #4fd1c5;animation:scan-line 1.6s ease-in-out infinite}
@keyframes scan-line{0%,100%{transform:translateY(-14px)}50%{transform:translateY(14px)}}
.scan-status{position:absolute;left:0;right:0;bottom:0;padding:7px 10px;background:rgba(6,18,22,.66);color:#eaf6f4;font-size:12px;text-align:center}
.scan-text-trigger{display:block;width:100%;min-height:48px;margin:0 0 9px;font-size:15px}
.scan-text-trigger:disabled{opacity:.6;cursor:wait}
.scan-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-bottom:8px}
.scan-toolbar .batch-btn{padding:6px 10px;font-size:12px;min-height:0}
.scan-toolbar label.scan-file{display:inline-flex;align-items:center;cursor:pointer}
.scan-continuous{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--muted)}
.scan-continuous input{accent-color:var(--teal)}
.scan-text-review{border:1px solid #b8d7d2;background:#f3faf8;border-radius:9px;padding:9px;margin-bottom:8px}
.scan-text-review[hidden]{display:none}
.scan-text-review label{display:block;font-size:12px;color:#315e59;margin-bottom:5px}
.scan-text-entry{display:flex;gap:6px}
.scan-text-entry input{min-width:0;flex:1;border:1px solid #b8d7d2;border-radius:6px;padding:7px 9px;font-size:14px}
.scan-text-candidates{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px}
.scan-text-candidates:empty{display:none}
.scan-text-candidates .batch-btn{min-height:0;padding:4px 8px;font-size:12px}
.scan-codes{display:flex;flex-wrap:wrap;gap:6px;min-height:26px;margin-bottom:4px}
.scan-code{display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border:1px solid #8cc6bd;border-radius:999px;background:#f2fbfa;font-size:12px;max-width:100%}
.scan-code span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.scan-code button{border:none;background:none;color:#b74b3b;cursor:pointer;font-size:13px;line-height:1;padding:0 2px}
.scan-empty{font-size:12px;color:var(--muted)}
.scan-tip{font-size:11px;color:var(--muted);margin:2px 0 8px}
.scan-tip.warn{color:#b74b3b}
@media (max-width:760px){
  .scan-box{width:100%;max-width:none;max-height:calc(100dvh - 8px);border-radius:17px 17px 0 0;padding:17px 15px calc(15px + env(safe-area-inset-bottom))}
  .scan-stage{max-height:48vh}
  .scan-text-trigger{min-height:52px}
}
