d7da7afe5e
Build and push image / build (push) Successful in 1m20s
Two root causes for "camera access denied" without a permission prompt: 1. iOS Safari blocks getUserMedia on non-localhost HTTP origins entirely — no prompt, silent denial. Now detects window.isSecureContext and shows "HTTPS required" instead of the cryptic error. 2. html5-qrcode does async DOM work (creating video elements, styling) between the user tap and the actual getUserMedia call, which breaks iOS Safari's transient user activation window. Now calls navigator.mediaDevices.getUserMedia() directly in the tap handler to trigger the permission prompt while the gesture is still active, then stops that stream and lets html5-qrcode reuse the granted permission. Also improved error messages for denied permissions with guidance on how to fix it in browser settings. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>