/* QR 코드 읽기 */
.qr-drop { border: 2px dashed var(--border-color, #d8dce3); border-radius: var(--radius-md, 8px); padding: var(--spacing-xl, 2rem) var(--spacing-lg, 1.5rem); text-align: center; cursor: pointer; background: var(--bg-subtle, #f8f9fb); transition: border-color .15s ease, background-color .15s ease; }
.qr-drop:hover, .qr-drop:focus-visible, .qr-drop.is-over { border-color: var(--accent-primary, #3b6fe0); background: var(--accent-soft, #eef3fd); outline: none; }
.qr-drop > i { font-size: 2rem; color: var(--accent-primary, #3b6fe0); margin-bottom: var(--spacing-sm, .5rem); }
.qr-drop-title { margin: 0 0 .25rem; font-weight: 600; }
.qr-drop-hint { margin: 0; font-size: var(--text-ui-sm, .8125rem); color: var(--text-muted, #626977); }
.qr-drop-hint kbd { background: var(--surface-3, #e6e9ef); border-radius: 3px; padding: .0625rem .25rem; font-size: .75rem; }
.qr-cam-actions { margin-top: var(--spacing-md, 1rem); flex-wrap: wrap; }
.qr-cam { margin-top: var(--spacing-md, 1rem); text-align: center; background: #111; border-radius: var(--radius-sm, 6px); overflow: hidden; }
#qrVideo { max-width: 100%; max-height: 22rem; }
.qr-text { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: var(--text-sm, .875rem); word-break: break-all; }
.qr-preview { display: block; max-width: 12rem; margin: var(--spacing-md, 1rem) auto 0; border: 1px solid var(--border-color, #e5e8ed); border-radius: var(--radius-sm, 6px); }
.qr-type { font-size: var(--text-ui-sm, .8125rem); color: var(--accent-text, #2c56b8); background: var(--accent-soft, #eef3fd); padding: .1875rem .5rem; border-radius: 999px; }
.qr-alert { margin-top: var(--spacing-md, 1rem); }
.qr-note { margin-top: var(--spacing-lg, 1.5rem); }
