/* QR 코드 이미지 스캐너 전용 CSS (2026-10-20). '판독 라이트박스': 위 띠(사진 | 고르기·붙여넣기·지우기) → 책상(사진 무대 + 판독 카드) → 상태 한 줄.
   책상은 사진 비율로 두 가지: 가로로 긴 사진(data-shape="wide")은 무대가 위(높이 = 폭 ÷ 비율, 최대 360px)·카드가 아래(카드 안 두 칸),
   세로·정사각 사진(tall)은 나란히 두고 무대 폭 = 카드 높이(--rh, JS가 잼) × 비율(최대 50%)로 맞춰 사진이 무대 높이를 채운다. 툴 폭 620px 이하는 카드 → 사진 한 열. */
.qs-work{container:qs / inline-size;position:relative}
.qs-work.is-over{outline:2px dashed var(--ink);outline-offset:-6px}
.qs-work [hidden]{display:none!important}

/* 위 띠 */
.qs-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;padding:12px 16px;border-bottom:1px solid var(--soft)}
.qs-src{display:flex;align-items:center;gap:10px;min-width:0;flex:1 1 220px}
.qs-srcico{flex:0 0 auto;width:28px;height:28px;color:var(--muted)}
.qs-srcname{display:flex;flex-direction:column;gap:2px;min-width:0;margin:0}
.qs-srcname b{font-family:var(--sans);font-size:14px;font-weight:700;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.qs-srcname span{font-family:var(--sans);font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.qs-acts{display:flex;flex-wrap:wrap;gap:6px}
.qs-file{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;pointer-events:none}
.qs-file:focus-visible + .qs-pick{outline:2px solid var(--accent);outline-offset:2px}
.qs-pick{cursor:pointer}

/* 책상 */
.qs-desk{--ar:1.526;--rh:520px;display:grid;grid-template-columns:minmax(0,1fr)}
.qs-desk[data-shape="tall"]{grid-template-columns:minmax(220px,min(50%,calc((var(--rh) - 24px) * var(--ar) + 25px))) minmax(0,1fr)} /* +25 = 여백 24 + 오른쪽 테두리 1 */
.qs-stage{position:relative;min-width:0;height:clamp(220px,calc((100cqw - 24px) / var(--ar) + 24px),360px);border-bottom:1px solid var(--soft);
  background:radial-gradient(circle,var(--dot) 1px,transparent 1.3px) 0 0 / 14px 14px,color-mix(in srgb,var(--wash) 80%,var(--paper))}
.qs-desk[data-shape="tall"] .qs-stage{height:auto;min-height:360px;border-bottom:0;border-right:1px solid var(--soft)}
.qs-desk[data-state="empty"] .qs-stage,.qs-desk[data-state="error"] .qs-stage{height:300px}
.qs-fit{position:absolute;inset:12px;container-type:size;display:grid;place-items:center}
.qs-pic{position:relative;width:min(100cqw,calc(100cqh * var(--ar)));aspect-ratio:var(--ar);background:#fff;box-shadow:0 6px 20px rgba(26,18,8,.16)}
.qs-pic img{position:absolute;inset:0;display:block;width:100%;height:100%}
.qs-marks{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.qs-mark{fill:rgba(255,255,255,.01);stroke:#fff;stroke-width:2.5;vector-effect:non-scaling-stroke;stroke-linejoin:round;filter:drop-shadow(0 0 1.5px rgba(0,0,0,.7));cursor:pointer;transform-box:fill-box;transform-origin:center;animation:qsLock .45s cubic-bezier(.2,.8,.2,1) both}
.qs-mark.is-sel{fill:rgba(234,122,64,.16);stroke:#ea7a40;stroke-width:3.5}
.qs-tags{position:absolute;inset:0;pointer-events:none}
.qs-tag{position:absolute;display:grid;place-items:center;min-width:24px;height:24px;padding:0 6px;border:2px solid #fff;border-radius:12px;background:#1a1208;color:#fff;
  font-family:var(--sans);font-size:12px;font-weight:800;line-height:1;transform:translate(-50%,-50%);box-shadow:0 1px 4px rgba(0,0,0,.4);pointer-events:auto;cursor:pointer;animation:qsPop .3s cubic-bezier(.2,.8,.2,1) both}
.qs-tag.is-sel{background:#c44a00}
@keyframes qsLock{from{opacity:0;transform:scale(1.22)}to{opacity:1;transform:none}}
@keyframes qsPop{from{opacity:0;transform:translate(-50%,-50%) scale(.5)}to{opacity:1;transform:translate(-50%,-50%)}}
/* 판독 중: 위에서 아래로 훑는 빛(판독 중에만) */
.qs-sweep{position:absolute;inset:0;overflow:hidden;pointer-events:none;opacity:0}
.qs-sweep::before{content:"";position:absolute;left:0;right:0;top:0;height:100%;transform:translateY(-100%);
  background:linear-gradient(to bottom,transparent 70%,rgba(234,122,64,.22) 97%,#ea7a40 99.4%,transparent 100%)}
.qs-stage.is-scanning .qs-sweep{opacity:1}
.qs-stage.is-scanning .qs-sweep::before{animation:qsSweep 1.35s cubic-bezier(.45,0,.55,1) infinite}
@keyframes qsSweep{to{transform:translateY(0)}}
.qs-badge{position:absolute;left:0;top:0;padding:3px 8px;border-radius:var(--radius);background:rgba(26,18,8,.78);color:#fff;font-family:var(--sans);font-size:11.5px;font-weight:700}

/* 지운 뒤: 끌어 놓기 상자 */
.qs-drop{position:absolute;inset:16px;display:flex;flex-direction:column;gap:10px}
.qs-dropbox{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:18px;border:1px dashed var(--line);border-radius:var(--radius);
  background:color-mix(in srgb,var(--paper) 72%,transparent);text-align:center;cursor:pointer}
.qs-dropbox b{max-width:30em;font-family:var(--sans);font-size:14.5px;font-weight:700;line-height:1.45;color:var(--ink)}
.qs-dropbox > span:not(.qs-finder){max-width:34em;font-family:var(--sans);font-size:12.5px;line-height:1.55;color:var(--muted)}
.qs-dropbox:hover,.qs-work.is-over .qs-dropbox{background:var(--wash);border-color:var(--ink)}
.qs-finder{position:relative;width:58px;height:58px;margin-bottom:6px}
.qs-finder i{position:absolute;width:18px;height:18px;border:3px solid var(--ink)}
.qs-finder i:nth-child(1){left:0;top:0;border-right:0;border-bottom:0}
.qs-finder i:nth-child(2){right:0;top:0;border-left:0;border-bottom:0}
.qs-finder i:nth-child(3){right:0;bottom:0;border-left:0;border-top:0}
.qs-finder i:nth-child(4){left:0;bottom:0;border-right:0;border-top:0}
.qs-dropbox:hover .qs-finder i,.qs-work.is-over .qs-finder i{transition:transform .25s cubic-bezier(.2,.8,.2,1);border-color:var(--accent)}
.qs-dropbox:hover .qs-finder i:nth-child(1),.qs-work.is-over .qs-finder i:nth-child(1){transform:translate(6px,6px)}
.qs-dropbox:hover .qs-finder i:nth-child(2),.qs-work.is-over .qs-finder i:nth-child(2){transform:translate(-6px,6px)}
.qs-dropbox:hover .qs-finder i:nth-child(3),.qs-work.is-over .qs-finder i:nth-child(3){transform:translate(-6px,-6px)}
.qs-dropbox:hover .qs-finder i:nth-child(4),.qs-work.is-over .qs-finder i:nth-child(4){transform:translate(6px,-6px)}
.qs-chiplist{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 8px;margin:0;padding:0;list-style:none;font-family:var(--sans);font-size:12px;color:var(--muted)}
.qs-chiplist li{padding:2px 8px;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper)}

/* 판독 카드 자리 */
.qs-read{min-width:0;display:flex;flex-direction:column;gap:12px;padding:14px 16px 16px}
.qs-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.qs-head:has(> [hidden]:first-child + [hidden]){display:none}
.qs-count{margin:0;font-family:var(--sans);font-size:11.5px;font-weight:600;letter-spacing:.02em;color:var(--muted)}
.qs-chips{display:flex;flex-wrap:wrap;gap:4px}
.qs-chip{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px 0 4px;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper);
  font-family:var(--sans);font-size:12.5px;font-weight:600;color:var(--muted);transition:background var(--ease),color var(--ease),border-color var(--ease)}
.qs-chip:hover{background:var(--btn);color:var(--ink)}
.qs-chip b{display:grid;place-items:center;min-width:20px;height:20px;padding:0 5px;border-radius:10px;background:var(--btn);color:var(--ink);font-size:11.5px;font-weight:800}
.qs-chip[aria-pressed="true"]{background:var(--fill);border-color:var(--fill);color:var(--on-fill)}
.qs-chip[aria-pressed="true"] b{background:#c44a00;color:#fff}

.qs-card{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;align-content:start}
.qs-main,.qs-side{display:flex;flex-direction:column;gap:12px;min-width:0}
.qs-card.is-in{animation:qsIn .32s cubic-bezier(.2,.8,.2,1)}
@keyframes qsIn{from{opacity:.25;transform:translateY(5px)}to{opacity:1;transform:none}}
.qs-cardhead{display:flex;align-items:center;gap:12px;min-width:0}
.qs-thumb{flex:0 0 auto;width:60px;height:60px;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.qs-cardhead p{display:flex;flex-direction:column;gap:2px;min-width:0;margin:0}
.qs-cardhead b{font-family:var(--sans);font-size:20px;font-weight:800;line-height:1.25;color:var(--ink)}
.qs-cardhead span{font-family:var(--sans);font-size:13px;line-height:1.45;color:var(--muted);overflow-wrap:anywhere}
.qs-body{display:flex;flex-direction:column;gap:10px;min-width:0}
.qs-addr{margin:0;padding:9px 11px;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper);font-family:var(--mono);font-size:12.5px;line-height:1.65;color:var(--muted);overflow-wrap:anywhere;word-break:break-all}
.qs-addr__site{padding:0 2px;color:var(--ink);font-weight:700;background:color-mix(in srgb,var(--accent) 15%,transparent);box-shadow:inset 0 -2px 0 var(--accent)}
.qs-addr__h{color:var(--ink)}
.qs-addr__u{color:var(--accent);text-decoration:line-through;text-decoration-thickness:2px}
.qs-addr__q{opacity:.75}
.qs-flags{display:flex;flex-direction:column;gap:5px;margin:0;padding:0;list-style:none}
.qs-flag{display:flex;align-items:flex-start;gap:8px;font-family:var(--sans);font-size:12.5px;line-height:1.5;color:var(--ink)}
.qs-flag i{flex:0 0 auto;display:grid;place-items:center;width:18px;height:18px;margin-top:1px;border-radius:9px;font-family:var(--sans);font-size:11px;font-style:normal;font-weight:800}
.qs-flag--ok i{background:var(--fill);color:var(--on-fill)}
.qs-flag--warn i{background:var(--accent);color:#fff}
.qs-flag--info i{border:1px solid var(--line);color:var(--muted)}
.qs-flag--warn span{font-weight:600}
.qs-rows{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:0 14px;margin:0}
.qs-rows dt,.qs-rows dd{padding:7px 0;border-top:1px solid var(--soft);font-family:var(--sans);font-size:13px;line-height:1.5}
.qs-rows dt{color:var(--muted);overflow-wrap:anywhere;max-width:11em}
.qs-rows dd{margin:0;color:var(--ink);overflow-wrap:anywhere;white-space:pre-wrap}
.qs-rows dd.qs-strong{font-weight:700}
.qs-rows dd.qs-bad{color:var(--accent);font-weight:700}
.qs-rows small.qs-note{display:block;margin-top:1px;white-space:normal}
.qs-note{margin:0;font-family:var(--sans);font-size:12px;line-height:1.55;color:var(--muted)}
.qs-warn{margin:0;padding:9px 12px;border-left:3px solid var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--paper));font-family:var(--sans);font-size:12.5px;font-weight:600;line-height:1.55;color:var(--ink)}
.qs-secret{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px 8px;max-width:100%}
.qs-secret code{font-family:var(--mono);font-size:12.5px;overflow-wrap:anywhere;word-break:break-all}
.qs-eye{height:24px;padding:0 8px;border:1px solid var(--line);border-radius:var(--radius);background:var(--btn);font-family:var(--sans);font-size:11.5px;font-weight:650;color:var(--ink)}
.qs-eye:hover{background:var(--btn-hover)}
.qs-cardacts{display:flex;flex-wrap:wrap;gap:6px}
.qs-rawbox{display:flex;flex-direction:column;gap:5px;min-width:0}
.qs-raw{margin:0;max-height:124px;overflow:auto;padding:8px 10px;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper);
  font-family:var(--mono);font-size:12px;line-height:1.55;color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-all}
.qs-info{container:qsi / inline-size;display:flex;flex-direction:column;gap:8px;min-width:0}
.qs-facts{--n:4;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin:0;padding:0;list-style:none}
.qs-facts li:last-child:nth-child(odd){grid-column:1 / -1}
@container qsi (min-width:470px){.qs-facts{grid-template-columns:repeat(var(--n),minmax(0,1fr))}.qs-facts li:last-child:nth-child(odd){grid-column:auto}}
.qs-facts li{display:flex;flex-direction:column;gap:1px;min-width:0;padding:6px 9px;border-radius:var(--radius);background:color-mix(in srgb,var(--wash) 80%,var(--paper))}
.qs-facts span{font-family:var(--sans);font-size:11px;color:var(--muted)}
.qs-facts b{font-family:var(--sans);font-size:12.5px;font-weight:700;color:var(--ink);overflow-wrap:anywhere}
.qs-encbox{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}

/* 판독 중 자리 */
.qs-wait{display:flex;flex-direction:column;gap:10px;padding:4px 0}
.qs-wait i{display:block;height:14px;border-radius:var(--radius);background:color-mix(in srgb,var(--wash) 85%,var(--paper))}
.qs-wait i:nth-child(1){width:46%;height:22px}
.qs-wait i:nth-child(2){width:88%}
.qs-wait i:nth-child(3){width:64%}
.qs-wait p{margin:4px 0 0;font-family:var(--sans);font-size:12.5px;color:var(--muted)}

/* 못 찾음·오류 */
.qs-none{display:flex;flex-direction:column;gap:12px}
.qs-none__t{display:flex;flex-direction:column;gap:4px;margin:0}
.qs-none__t b{font-family:var(--sans);font-size:18px;font-weight:800;line-height:1.35;color:var(--ink)}
.qs-none__t span{font-family:var(--sans);font-size:13px;line-height:1.55;color:var(--muted)}
.qs-none[data-kind="none"] .qs-none--error,.qs-none[data-kind="error"] .qs-none--none{display:none}
.qs-checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,210px),1fr));gap:8px;margin:0;padding:0;list-style:none}
.qs-check{display:flex;gap:10px;padding:10px;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper)}
.qs-check i{position:relative;flex:0 0 auto;width:38px;height:38px;border:1px solid var(--line);background:#fff;overflow:hidden}
.qs-check i::before{content:"";position:absolute;inset:7px;background:repeating-conic-gradient(#1a1208 0 25%,#fff 0 50%) 0 0 / 8px 8px}
.qs-check--margin i::before{inset:-2px}
.qs-check--margin i::after{content:"";position:absolute;inset:0;border:2px solid #c44a00}
.qs-check--blur i::before{filter:blur(1.4px)}
.qs-check--small i::before{inset:14px;background-size:3px 3px}
.qs-check--cover i::after{content:"";position:absolute;left:12px;top:10px;width:20px;height:16px;border-radius:50%;background:#c44a00}
.qs-check span{display:flex;flex-direction:column;gap:2px;font-family:var(--sans);font-size:12px;line-height:1.5;color:var(--muted)}
.qs-check b{font-size:13px;font-weight:700;color:var(--ink)}

/* 지운 뒤: 읽는 QR 종류 */
.qs-empty{display:flex;flex-direction:column;gap:10px}
.qs-types{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,170px),1fr));gap:6px;margin:0;padding:0;list-style:none}
.qs-types li{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border:1px solid var(--soft);border-radius:var(--radius);background:var(--paper)}
.qs-types b{font-family:var(--sans);font-size:13px;font-weight:700;color:var(--ink)}
.qs-types span{font-family:var(--sans);font-size:12px;line-height:1.45;color:var(--muted)}
.qs-empty .v2-btn{align-self:flex-start}

.qs-status{margin:0;padding:9px 16px;border-top:1px solid var(--soft);line-height:1.5}
.qs-status:empty{padding:0;border-top:0}
.qs-noscript{margin:0;padding:12px 16px;font-family:var(--sans);font-size:13px;color:var(--muted)}

/* 가로 사진 + 넓은 툴: 카드 안을 두 칸(왼쪽 풀이·동작 | 오른쪽 원문·QR 정보) */
@container qs (min-width:621px){
  .qs-desk[data-shape="wide"] .qs-card{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);column-gap:24px}
  .qs-desk[data-shape="wide"] .qs-side{padding-left:24px;margin-left:-12px;border-left:1px solid var(--soft)}
  .qs-desk[data-shape="wide"] .qs-info{grid-column:1 / -1}
  .qs-desk[data-shape="wide"] .qs-details dt:first-of-type,.qs-desk[data-shape="wide"] .qs-details dd:first-of-type{border-top:0;padding-top:0}
}
/* 좁은 툴: 한 열, 판독 카드가 사진 위 */
/* 좁은 툴: 한 열, 사진은 위에 낮게(번호와 판독 카드 머리가 첫 화면에 함께 보이게) */
@container qs (max-width:620px){
  .qs-desk,.qs-desk[data-shape="tall"]{grid-template-columns:minmax(0,1fr)}
  .qs-stage,.qs-desk[data-shape="tall"] .qs-stage{height:clamp(180px,calc((100cqw - 24px) / var(--ar) + 24px),250px);min-height:0;border-right:0;border-bottom:1px solid var(--soft)}
  .qs-desk[data-state="empty"] .qs-stage,.qs-desk[data-state="error"] .qs-stage{height:240px}
}
@container qs (max-width:440px){
  .qs-acts{width:100%}
  .qs-acts .v2-btn{flex:1 1 auto;justify-content:center}
  .qs-cardacts .v2-btn{flex:1 1 auto;justify-content:center}
  .qs-rows dt{max-width:8.5em}
}
@media (prefers-reduced-motion:reduce){
  .qs-mark,.qs-tag,.qs-card.is-in,.qs-stage.is-scanning .qs-sweep::before{animation:none}
  .qs-stage.is-scanning .qs-sweep{opacity:0}
  .qs-dropbox .qs-finder i{transition:none}
}
