Cada botón navega en el mismo toque (sin setTimeout antes de navegar). Destino de escape:
Ojo: mientras Instagram muestra su hoja «Abrir/Cancelar», la página no recibe visibilitychange/pagehide/blur. «sin cambio en 2 s» NO significa fallo: lo que vale es si aparece la hoja y si Safari/Chrome abre con el banner verde.
server S-302X 302 a x-safari broken
HTTP/1.1 302 Found Location: x-safari-https://<host>/<ruta>?escaped=S-302X
server S-302I 302 a instagram://extbrowser uncertain
HTTP/1.1 302 Found Location: instagram://extbrowser/?url=https%3A%2F%2F<host>%2F<ruta>%3Fescaped%3DS-302I
server S-MR meta refresh servido en el HTML (sin JS; M1 lo emula con document.write) uncertain
<meta http-equiv="refresh" content="0;url=instagram://extbrowser/?url=https%3A%2F%2F<host>%2F<ruta>%3Fescaped%3DS-MR">
server S-PDF PDF como adjunto broken
Content-Type: application/pdf Content-Disposition: attachment; filename="test.pdf"
server S-ICS calendario broken
Content-Type: text/calendar; charset=utf-8 Content-Disposition: attachment; filename="test.ics"
server S-PKP pase de Wallet (requiere .pkpass firmado) broken
Content-Type: application/vnd.apple.pkpass Content-Disposition: attachment; filename="test.pkpass"
No implementables sin app publicada: App Clip / Smart App Banner (<meta name="apple-itunes-app" content="app-id=…, app-clip-bundle-id=…">) broken. El README trae un Pages Function y un _headers para probar S-302X, S-302I, S-PDF y S-ICS en Cloudflare Pages.