/* [GPT 2026-10-28] One large master scan control stays in the same place; secondary scan implementations share its surface. */
/* The sticky header owns the scan control, leaving checkout and bottom navigation unobstructed. */
.master-scan-button{position:relative;display:flex;align-items:center;justify-content:center;gap:12px;min-height:52px;width:min(100%,360px);margin:0 auto 12px;border:0;border-radius:16px;background:var(--accent);color:white;font:700 18px/1.2 system-ui;padding:13px 26px;box-shadow:0 3px 12px #0001;cursor:pointer}.master-scan-button svg{width:26px;height:26px}.master-scan-button:focus-visible{outline:3px solid var(--text);outline-offset:4px}.master-scan-button:active{transform:scale(.98)}body:has(.overlay:not(.closing),.sheet-full) .master-scan-button{visibility:hidden}
.scanner-dialog{max-width:500px}.scanner-dialog .body{padding:16px}.scanner-panel{display:flex;flex-direction:column;gap:14px}.scanner-modes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;background:var(--surface-2);padding:4px;border-radius:14px}.scanner-modes button{display:flex;align-items:center;justify-content:center;gap:7px;min-height:44px;border:0;border-radius:10px;background:none;color:var(--muted);font:600 15px system-ui}.scanner-modes button[aria-selected=true]{background:var(--surface);color:var(--text);box-shadow:0 1px 5px #0001}.scanner-camera{position:relative;aspect-ratio:4/3;background:#161619;border-radius:20px;overflow:hidden}.scanner-camera video{width:100%;height:100%;object-fit:cover}.scanner-aim{position:absolute;inset:16% 13%;border:2px solid #ffffffb0;border-radius:20px;pointer-events:none}.scanner-status{font-size:14px;line-height:1.4;color:var(--muted);min-height:20px;margin:0}.scanner-input{width:100%;font:17px ui-monospace,monospace;padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--text);box-sizing:border-box}.scanner-manual label{display:flex;flex-direction:column;gap:10px;font-size:14px;color:var(--muted)}.scanner-manual .btn{margin-top:12px}.scanner-camera[hidden],.scanner-manual[hidden],.scanner-photo[hidden]{display:none}.master-results:empty{display:none}.master-results{margin-top:14px}.manual-code-card{display:flex;flex-direction:column;align-items:center;gap:9px;padding:12px;text-align:center;max-width:100%;box-sizing:border-box}.manual-code-card small{color:var(--muted);font-size:12px}.manual-code{font:600 15px/1.7 ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;user-select:all;max-width:100%;letter-spacing:.2px}.code-copy{min-height:40px}.operations-quick{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:20px}.operations-quick button{display:flex;align-items:center;gap:10px;min-height:64px;padding:13px;border:0;border-radius:16px;background:var(--surface);color:var(--text);font:600 15px/1.3 system-ui;text-align:left}.operations-quick svg{flex-shrink:0;color:var(--accent-text)}
@media(max-width:700px){.operations-quick{grid-template-columns:1fr}.operations-quick button{min-height:54px}}
@media print{.master-scan-button,.code-copy{display:none!important}}@media(prefers-reduced-motion:reduce){.master-scan-button:active{transform:none}}

/* [GPT 2026-10-28] Daily record operations are visible; history and occasional edits remain secondary. */
.qr-direct-operations{display:flex;gap:8px;flex-wrap:wrap}.qr-direct-operations>.btn{flex:1;min-height:48px;white-space:normal}

/* [GPT 2026-10-28] Keep reporting in a reserved header slot so it cannot cover payroll, POS or snooze controls. */
.master-scan-row{display:flex;align-items:center;justify-content:center;gap:10px;width:min(100%,520px);max-width:520px;margin:0 auto 12px}.master-scan-row>.master-scan-button{flex:1;width:auto;margin:0}.master-scan-row>.app-report{position:static;flex:none;min-height:44px;max-width:100px;margin:0;box-sizing:border-box;justify-content:center;text-align:center;line-height:1.3;padding:8px;background:transparent;border-color:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.master-scan-row>.app-report svg{flex:none}@media(max-width:400px){.master-scan-row{gap:6px}.master-scan-row>.app-report{max-width:90px;font-size:11px}.master-scan-row>.master-scan-button{padding:13px 12px}}@media print{.master-scan-row{display:none!important}}

/* [GPT 2026-10-29] Reporting belongs in the top utility row; the master scanner keeps its own full-width space. */
.master-scan-row{max-width:360px}.top-row>.app-report{position:static;flex:none;display:inline-flex;align-items:center;justify-content:center;width:40px;height:44px;min-height:44px;padding:8px;margin:0;border:0;background:transparent;color:var(--muted);backdrop-filter:none;-webkit-backdrop-filter:none}.top-row>.app-report>span{display:none}.top-row>.app-report:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.scan-refused{display:flex;gap:10px;align-items:center;color:var(--red);font-weight:600} /* [GPT 2026-10-29] scanner refusal */
.scan-badge{display:inline-block;padding:1px 8px;border-radius:999px;background:color-mix(in srgb,var(--c) 16%,transparent);color:var(--c);font-weight:600} /* [GPT 2026-10-29] scan journal outcome */
