/* QR Scanner — tool-specific styles (loaded after /assets/base.css) */
.qs-camwrap { position: relative; max-width: 420px; margin: 18px auto 0; border-radius: var(--radius);
  overflow: hidden; background: #000; border: 1px solid var(--line); aspect-ratio: 1; }
#qsVideo { width: 100%; height: 100%; object-fit: cover; display: block; }
.qs-reticle { position: absolute; inset: 18%; border: 3px solid rgba(108,139,255,.9); border-radius: 14px;
  box-shadow: 0 0 0 9999px rgba(8,10,20,.35); pointer-events: none; }
.qs-camctrl { display: flex; justify-content: center; gap: 10px; margin-top: 14px; }

.qs-result { margin-top: 20px; border: 1px solid rgba(68,211,155,.4); background: rgba(68,211,155,.07);
  border-radius: var(--radius-sm); padding: 16px; }
.qs-result-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; color: var(--muted); font-size: .82rem; margin-bottom: 10px; }
.qs-text { background: var(--bg-soft); border: 1px solid var(--line); border-radius: var(--radius-sm); padding: 12px 14px;
  font-family: ui-monospace, Menlo, Consolas, monospace; font-size: .92rem; word-break: break-all; color: var(--text); max-height: 180px; overflow: auto; }
.qs-result-actions { display: flex; gap: 10px; margin-top: 12px; flex-wrap: wrap; }
