{"release_id":"01a1c502-4ad1-0000-ec62-adc54d3c69aa","chunk_id":"01a1c502-4c6e-7041-8104-d9f7bca25306","file":"105.yGIiwBLz.mjs","mappings":"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","names":["platform","$.state","inApp","promptResult","pushReady","perm","testMsg","iosNeedsInstall","$.derived","$.get","$installed","onMount","isIOS","$.set","isAndroid","isInAppBrowser","isStandalone","installed","pushSupported","pushPermission","canInstall","$deferredPrompt","install","promptInstall","onEnable","result","enablePush","onTest","ok","sendTestPush","GUIDES","ordered","a","b","section","root","div","div_1","root_1","div_2","root_3","$$render","consequent_1","div_3","root_4","button","$.child","p","$.sibling","consequent_2","alternate","$.delegated","consequent_3","div_4","node_2","guide","$$anchor","active","div_5","root_7","div_6","h2","span","root_8","$.append","consequent_4","ol","$.each","step","i","li","root_9","span_1","span_2","p_1","root_10","$.template_effect","$.set_text","text_4","consequent_5","$.reset","text_2","consequent","alternate_1","div_7","root_11","div_8","root_12","button_1","p_2","root_13","button_2","$.first_child","fragment_1","node_8","p_3","root_15","consequent_8","consequent_6","consequent_7","alternate_2","p_4","root_16","consequent_9","consequent_10"],"sources":["../../../../../../src/routes/install/+page.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport { onMount } from 'svelte';\n\timport {\n\t\tdeferredPrompt,\n\t\tinstalled,\n\t\tisIOS,\n\t\tisAndroid,\n\t\tisStandalone,\n\t\tisInAppBrowser,\n\t\tpromptInstall\n\t} from '$lib/stores/pwa';\n\timport {\n\t\tpushSupported,\n\t\tpushPermission,\n\t\tenablePush,\n\t\tsendTestPush,\n\t\ttype PushPermission\n\t} from '$lib/push-client';\n\n\ttype Platform = 'ios' | 'android' | 'desktop';\n\n\t// SSR can't sniff the platform; default to iOS (≈half our traffic) then\n\t// refine once mounted.\n\tlet platform = $state<Platform>('ios');\n\tlet inApp = $state(false);\n\tlet promptResult = $state<'accepted' | 'dismissed' | 'unavailable' | null>(null);\n\n\t// Push state.\n\tlet pushReady = $state(false);\n\tlet perm = $state<PushPermission>('default');\n\tlet testMsg = $state('');\n\tconst iosNeedsInstall = $derived(platform === 'ios' && !$installed);\n\n\tonMount(() => {\n\t\tif (isIOS()) platform = 'ios';\n\t\telse if (isAndroid()) platform = 'android';\n\t\telse platform = 'desktop';\n\t\tinApp = isInAppBrowser();\n\t\tif (isStandalone()) installed.set(true);\n\t\tpushReady = pushSupported();\n\t\tperm = pushPermission();\n\t});\n\n\t// Chromium offered the native prompt — show a one-tap install button.\n\tconst canInstall = $derived($deferredPrompt !== null);\n\n\tasync function install() {\n\t\tpromptResult = await promptInstall();\n\t}\n\n\tasync function onEnable() {\n\t\ttestMsg = '';\n\t\tconst result = await enablePush();\n\t\tif (result === 'unsupported') {\n\t\t\ttestMsg = 'push isn’t available here yet — server not configured, or unsupported browser.';\n\t\t\treturn;\n\t\t}\n\t\tperm = result;\n\t}\n\n\tasync function onTest() {\n\t\ttestMsg = 'sending…';\n\t\tconst ok = await sendTestPush();\n\t\ttestMsg = ok\n\t\t\t? 'sent — check your notification tray.'\n\t\t\t: 'failed — make sure push is set up on the server.';\n\t}\n\n\tconst GUIDES: { id: Platform; label: string; steps: string[]; note?: string }[] = [\n\t\t{\n\t\t\tid: 'ios',\n\t\t\tlabel: 'iPhone & iPad',\n\t\t\tsteps: [\n\t\t\t\t'Tap the Share button in Safari’s toolbar — the square with an arrow pointing up.',\n\t\t\t\t'Scroll down the share sheet and tap “Add to Home Screen”.',\n\t\t\t\t'Tap “Add” in the top corner. ratemyd. now lives on your home screen.'\n\t\t\t],\n\t\t\tnote: 'It has to be Safari. Chrome and in-app browsers on iOS can’t add to the home screen.'\n\t\t},\n\t\t{\n\t\t\tid: 'android',\n\t\t\tlabel: 'Android',\n\t\t\tsteps: [\n\t\t\t\t'Tap “Install app” above — or open Chrome’s ⋮ menu.',\n\t\t\t\t'Choose “Install app” (older Chrome: “Add to Home screen”).',\n\t\t\t\t'Confirm. It opens full-screen, just like a store app.'\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tid: 'desktop',\n\t\t\tlabel: 'Desktop',\n\t\t\tsteps: [\n\t\t\t\t'Click the install icon in the address bar (a monitor with a ⊕), or “Install app” above.',\n\t\t\t\t'Confirm in the dialog.',\n\t\t\t\t'It pops out into its own window, out of the browser tabs.'\n\t\t\t]\n\t\t}\n\t];\n\n\t// Float the viewer's own platform to the top and flag it.\n\tconst ordered = $derived(\n\t\t[...GUIDES].sort((a, b) => (a.id === platform ? -1 : b.id === platform ? 1 : 0))\n\t);\n</script>\n\n<section class=\"relative overflow-hidden px-5 pt-20 pb-20 md:pt-28 md:pb-28\">\n\t<div\n\t\tclass=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"\n\t></div>\n\n\t<div class=\"relative mx-auto w-full max-w-3xl\">\n\t\t<p\n\t\t\tclass=\"mb-4 flex flex-wrap items-center gap-x-3 text-xs font-medium tracking-[0.2em] text-muted/60 uppercase md:mb-5\"\n\t\t>\n\t\t\t<span>ios &middot; android &middot; desktop</span>\n\t\t</p>\n\t\t<h1 class=\"font-display text-[clamp(3rem,9vw,6rem)] leading-[0.85] font-bold tracking-tighter\">\n\t\t\t<span class=\"text-text\">put us on your</span><br />\n\t\t\t<span class=\"text-coral\">home screen.</span>\n\t\t</h1>\n\t\t<p\n\t\t\tclass=\"mt-5 max-w-lg text-[11px] tracking-[0.15em] text-muted/40 uppercase md:mt-7 md:text-xs\"\n\t\t\tstyle=\"text-align:justify;text-justify:inter-word;\"\n\t\t>\n\t\t\tfull-screen. loads faster. one tap away. no app store, no download bar. your photo still gets\n\t\t\tnuked the second the AI is done.\n\t\t</p>\n\t\t<p class=\"mt-2 text-[11px] text-muted/50 italic md:mt-3 md:text-xs\">\n\t\t\t&ldquo;took you long enough&rdquo; &mdash; your home screen\n\t\t</p>\n\n\t\t{#if $installed}\n\t\t\t<!-- Already running as an installed PWA. -->\n\t\t\t<div class=\"mt-10 flex items-start gap-3 rounded-2xl border border-border bg-surface p-6\">\n\t\t\t\t<svg\n\t\t\t\t\tclass=\"mt-0.5 h-6 w-6 shrink-0 text-green\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M20 6 9 17l-5-5\" />\n\t\t\t\t</svg>\n\t\t\t\t<div>\n\t\t\t\t\t<p class=\"font-display text-lg font-bold\">you're already in the app.</p>\n\t\t\t\t\t<p class=\"mt-1 text-sm text-muted\">\n\t\t\t\t\t\tNice. <a href=\"/\" class=\"text-coral no-underline hover:underline\">go get rated →</a>\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t{:else}\n\t\t\t{#if inApp}\n\t\t\t\t<!-- In-app webview: install won't work until they open a real browser. -->\n\t\t\t\t<div class=\"mt-8 rounded-xl border border-border bg-surface-2 p-4 text-sm text-muted\">\n\t\t\t\t\tHeads up: you're in an in-app browser. Tap the ⋯ menu and choose <strong\n\t\t\t\t\t\tclass=\"text-text\">“Open in browser”</strong\n\t\t\t\t\t> first, then come back here.\n\t\t\t\t</div>\n\t\t\t{/if}\n\n\t\t\t{#if canInstall}\n\t\t\t\t<div class=\"mt-10 flex flex-col items-start gap-3\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonclick={install}\n\t\t\t\t\t\tclass=\"inline-flex items-center gap-2 rounded-xl bg-coral px-7 py-3.5 text-base font-semibold text-white transition-all hover:bg-coral-dark\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclass=\"h-5 w-5\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path d=\"M12 3v12\" />\n\t\t\t\t\t\t\t<path d=\"m7 12 5 5 5-5\" />\n\t\t\t\t\t\t\t<path d=\"M5 21h14\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tinstall app\n\t\t\t\t\t</button>\n\t\t\t\t\t<p class=\"text-xs tracking-[0.1em] text-muted/50 uppercase\">\n\t\t\t\t\t\t{#if promptResult === 'dismissed'}\n\t\t\t\t\t\t\tchanged your mind? the steps below still work.\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\tone tap. your browser handles the rest.\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t{/if}\n\n\t\t\t<!-- Per-platform steps. The viewer's own device is floated up + flagged. -->\n\t\t\t<div class=\"mt-12 flex flex-col gap-4\">\n\t\t\t\t{#each ordered as guide (guide.id)}\n\t\t\t\t\t{@const active = guide.id === platform}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"rounded-2xl border p-5 md:p-6 {active\n\t\t\t\t\t\t\t? 'border-coral/40 bg-coral-light'\n\t\t\t\t\t\t\t: 'border-border bg-surface'}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t<h2 class=\"font-display text-xl font-bold tracking-tight\">{guide.label}</h2>\n\t\t\t\t\t\t\t{#if active}\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"rounded-full bg-coral px-2.5 py-0.5 text-[10px] font-bold tracking-wider text-white uppercase\"\n\t\t\t\t\t\t\t\t\t>your device</span\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ol class=\"mt-5 flex flex-col gap-3.5\">\n\t\t\t\t\t\t\t{#each guide.steps as step, i (i)}\n\t\t\t\t\t\t\t\t<li class=\"flex gap-3 text-sm leading-relaxed text-muted\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold {active\n\t\t\t\t\t\t\t\t\t\t\t? 'bg-coral text-white'\n\t\t\t\t\t\t\t\t\t\t\t: 'bg-surface-2 text-text'}\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{i + 1}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<span class=\"pt-0.5\">{step}</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t{#if guide.note}\n\t\t\t\t\t\t\t<p class=\"mt-4 border-t border-border pt-3 text-xs text-muted/70\">{guide.note}</p>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t</div>\n\n\t\t\t<p\n\t\t\t\tclass=\"mt-12 max-w-lg text-[11px] tracking-[0.15em] text-muted/40 uppercase\"\n\t\t\t\tstyle=\"text-align:justify;text-justify:inter-word;\"\n\t\t\t>\n\t\t\t\twhy bother — loads faster on repeat visits, runs full-screen, one tap from the home screen.\n\t\t\t\tsame site, same instant photo deletion. nothing changes except it's quicker to get judged.\n\t\t\t</p>\n\t\t{/if}\n\n\t\t{#if pushReady}\n\t\t\t<!-- Notifications opt-in. iOS only delivers push to the INSTALLED app, so\n\t\t\t\t this lives here next to the install steps; the test button pings only you. -->\n\t\t\t<div class=\"mt-12 rounded-2xl border border-border bg-surface p-5 md:p-6\">\n\t\t\t\t<h2 class=\"font-display text-xl font-bold tracking-tight\">notifications</h2>\n\t\t\t\t<p class=\"mt-2 max-w-md text-sm leading-relaxed text-muted\">\n\t\t\t\t\tGet pinged for duels, mentions and ratings — even when the app is closed.\n\t\t\t\t</p>\n\t\t\t\t{#if perm === 'granted'}\n\t\t\t\t\t<div class=\"mt-4 flex flex-wrap items-center gap-3\">\n\t\t\t\t\t\t<span class=\"inline-flex items-center gap-2 text-sm font-semibold text-green\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tclass=\"h-4 w-4\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path d=\"M20 6 9 17l-5-5\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\tnotifications on\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonclick={onTest}\n\t\t\t\t\t\t\tclass=\"rounded-lg border border-border px-4 py-2 text-xs font-semibold text-muted transition-colors hover:border-muted hover:text-text\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tsend test\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t{:else if perm === 'denied'}\n\t\t\t\t\t<p class=\"mt-4 text-sm text-muted/70\">\n\t\t\t\t\t\tNotifications are blocked. Flip them back on in your browser / site settings, then\n\t\t\t\t\t\treload.\n\t\t\t\t\t</p>\n\t\t\t\t{:else}\n\t\t\t\t\t<button\n\t\t\t\t\t\tonclick={onEnable}\n\t\t\t\t\t\tclass=\"mt-4 rounded-xl bg-coral px-6 py-3 text-sm font-semibold text-white transition-all hover:bg-coral-dark\"\n\t\t\t\t\t>\n\t\t\t\t\t\tenable notifications\n\t\t\t\t\t</button>\n\t\t\t\t\t{#if iosNeedsInstall}\n\t\t\t\t\t\t<p class=\"mt-3 text-xs text-muted/70\">\n\t\t\t\t\t\t\tOn iPhone: add to the home screen first (steps above), then open the installed app\n\t\t\t\t\t\t\tand enable.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t{/if}\n\t\t\t\t{/if}\n\t\t\t\t{#if testMsg}<p class=\"mt-3 text-xs text-muted\">{testMsg}</p>{/if}\n\t\t\t</div>\n\t\t{/if}\n\t</div>\n</section>\n"],"version":3}