// app.jsx — PWA fullscreen mobile router const { useState, useEffect } = React; // Detect in-app browsers (WhatsApp, FB, Instagram, Messenger, LinkedIn, TikTok) function detectInAppBrowser() { try { const ua = (navigator.userAgent || '').toLowerCase(); if (ua.indexOf('whatsapp') !== -1 || ua.indexOf('wabusiness') !== -1 || ua.indexOf('wa-business') !== -1) return 'WhatsApp'; if (ua.indexOf('instagram') !== -1) return 'Instagram'; if (ua.indexOf('fbav') !== -1 || ua.indexOf('fban') !== -1 || ua.indexOf('fb_iab') !== -1 || ua.indexOf('fbios') !== -1) return 'Facebook'; if (ua.indexOf('messenger') !== -1) return 'Messenger'; if (ua.indexOf('linkedinapp') !== -1 || ua.indexOf('linkedin') !== -1) return 'LinkedIn'; if (ua.indexOf('musical_ly') !== -1 || ua.indexOf('bytedance') !== -1 || ua.indexOf('tiktok') !== -1) return 'TikTok'; // Fallback: many in-app browsers ship without Safari/Chrome in UA on iOS // Detect "in-app webview" via the absence of "Safari" on iOS but presence of "Mobile" const isIOS = /iphone|ipad|ipod/.test(ua); if (isIOS && ua.indexOf('safari') === -1 && ua.indexOf('crios') === -1 && ua.indexOf('fxios') === -1) { return 'Application'; } return null; } catch (e) { return null; } } function InAppBrowserBanner({ lang }) { const [dismissed, setDismissed] = useState(() => { try { return localStorage.getItem('trusta_inapp_dismiss') === '1'; } catch (e) { return false; } }); const [copied, setCopied] = useState(false); const browser = detectInAppBrowser(); if (!browser || dismissed) return null; const url = 'https://trusta.click/app'; const isKa = lang === 'ka'; const title = isKa ? `${browser}-ში ხარ — გახსენი ბრაუზერში` : `Tu es dans ${browser} — ouvre dans ton navigateur`; const subtitle = isKa ? 'უკეთესი გამოცდილებისთვის (Chrome / Safari)' : 'Pour une meilleure expérience (Chrome / Safari)'; const copyLabel = copied ? (isKa ? '✓ დაკოპირდა' : '✓ Copié') : (isKa ? 'ბმულის კოპირება' : 'Copier le lien'); const dismissLabel = isKa ? 'მესმის' : 'OK, j\'ai compris'; const onCopy = async () => { try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(url); } else { const ta = document.createElement('textarea'); ta.value = url; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta); } setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (e) {} }; const onDismiss = () => { try { localStorage.setItem('trusta_inapp_dismiss', '1'); } catch (e) {} setDismissed(true); }; return (