{"release_id":"01a1c502-4ad1-0000-ec62-adc54d3c69aa","chunk_id":"01a1c502-4d03-70e3-bd9c-a6008a09c11b","file":"73.ComKGk2M.mjs","mappings":"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","names":["BEAT_TAKEN_PCT","kind","$.derived","k","page","VISIBLE_BEAT_KINDS","DEFAULT_BEAT_KIND","KIND_NAMES","msg","onMount","activeMode","IMAGE_MIME","VIDEO_MIME","IMAGE_MAX","VIDEO_MAX","supabase","createSupabaseBrowserClient","file","$.state","savePhoto","csamAck","submitting","error","dragOver","refused","throwAsKind","$.get","membersOnly","format","FORMAT_OPTIONS","$.user_effect","fileLabel","size","validateFile","f","isImage","isVideo","max","acceptFile","raw","$.set","detachIfImage","isHeic","heicToJpeg","err","fail","pickFailure","analytics.trackUploadFail","v","pickFile","input","useSavedPhoto","blob","$$props","submit","handleDrop","e","picked","clean","stripExifClient","urlRes","urlResult","storageError","isStaleFileError","fd","res","body","wrong","wrongCategoryOf","goto","stale","throwAs","fits","analytics.trackCtaClick","section","root","$.head","$$anchor","$0","div","a","$.child","text","span","$.sibling","$.reset","h1","span_1","text_2","p","div_1","form","beatUpload","label","root_2","input_1","node","div_2","root_3","div_3","p_1","p_2","span_2","$.set_text","text_5","text_6","p_3","$.first_child","fragment","p_4","div_4","span_3","text_10","$$render","consequent","alternate","$.template_effect","$.set_class","$.event","$.delegated","$.append","div_5","span_4","div_6","opt","button","root_5","span_5","span_6","text_13","$.set_attribute","text_12","button_1","span_7","span_8","span_9","span_10","span_11","node_1","$1","$2","ReusePhoto","openAuthSheet","$$value","p_5","ul","line","li","root_6","span_12","p_6","root_7","consequent_1","button_2","node_2","text_19","p_7","beatLobbyHref","throwAsLabel","aside","p_8","h2","ul_1","li_1","span_13","$.index","part","i","span_14","root_9","text_23","consequent_2","li_2","span_15","span_16","root_11","text_25","consequent_3","li_3","span_17","span_18","root_13","text_27","consequent_4"],"sources":["../../../../../../src/lib/beat-result-notify.ts","../../../../../../src/routes/b/start/+page.svelte"],"sourcesContent":["/** Beat creators (RAT-527). Client-safe: the notification copy lives here so\n *  bell, push and toast agree.\n *\n *  Nothing told a creator their beat was taken or that it had closed — the only\n *  beat notification was for new comments — and 80% of new creators never\n *  opened their result. Anonymous creators couldn't be reached at all. /b/start\n *  talks about \"no take-backs\" and the arena, and 40% back out there.\n *\n *  Now: a bell + push when the beat is taken and when it closes (and the\n *  unread-ping email digest carries them), an anonymous creator can ask to be\n *  pinged, and /b/start says what actually protects them. */\n\n/** Measured on 2026-09-29 over 1v1 beats created 60 to 7 days earlier: 96.2%\n *  were taken, half of them within 3.6 minutes (three in four within 9). */\nexport const BEAT_TAKEN_PCT = 96;\n\nexport type BeatResult = 'won' | 'lost' | 'tie';\n\nexport function beatClosedCopy(\n\tresult: BeatResult,\n\tvotesFor: number,\n\tvotesAgainst: number\n): { title: string; body: string } {\n\tconst score = `${votesFor}–${votesAgainst}`;\n\tif (result === 'won') return { title: 'you won your beat', body: `${score}. go see the final.` };\n\tif (result === 'tie') return { title: 'your beat ended in a tie', body: `${score}. dead even.` };\n\treturn { title: 'your beat is over', body: `the crowd went the other way, ${score}.` };\n}\n\nexport const BEAT_ACCEPTED_COPY = {\n\ttitle: 'someone took your beat',\n\tbody: 'the vote is live for 24 hours. go see who showed up.'\n};\n","<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\timport { msg } from '$lib/i18n/mark';\n\timport { onMount } from 'svelte';\n\timport { goto } from '$app/navigation';\n\timport { createSupabaseBrowserClient } from '$lib/supabase';\n\timport { stripExifClient } from '$lib/utils/strip-exif-client';\n\timport { heicToJpeg, isHeic } from '$lib/utils/heic-to-jpeg';\n\timport { detachIfImage, isStaleFileError, pickFailure } from '$lib/utils/stale-file';\n\timport * as analytics from '$lib/analytics';\n\timport { activeMode } from '$lib/stores/activeMode';\n\timport { openAuthSheet } from '$lib/stores/authSheet';\n\timport ReusePhoto from '$lib/components/ReusePhoto.svelte';\n\timport { throwAsLabel, wrongCategoryOf } from '$lib/components/beat/wrong-category';\n\timport { BEAT_TAKEN_PCT } from '$lib/beat-result-notify';\n\timport { page } from '$app/state';\n\timport {\n\t\ttype BeatFormat,\n\t\ttype BeatKind,\n\t\tDEFAULT_BEAT_KIND,\n\t\tbeatLobbyHref,\n\t\tVISIBLE_BEAT_KINDS\n\t} from '$lib/types/beat';\n\n\tlet { data } = $props();\n\n\t// The category comes from the lobby the user started from (`?kind=`).\n\t// Only the switcher's categories are accepted; anything else → d.\n\tconst kind = $derived.by((): BeatKind => {\n\t\tconst k = page.url.searchParams.get('kind') as BeatKind | null;\n\t\treturn k && VISIBLE_BEAT_KINDS.includes(k) ? k : DEFAULT_BEAT_KIND;\n\t});\n\tconst KIND_NAMES: Partial<Record<BeatKind, string>> = { cockcompare: msg('dick'), ass: msg('ass'), boobs: msg('boobs') };\n\n\t// RAT-328: yellow chrome + page accent for the beat upload flow.\n\tonMount(() => {\n\t\tactiveMode.set('beat');\n\t\treturn () => activeMode.set(null);\n\t});\n\n\t// Client pre-check mirrors the bucket cap so the user gets an instant \"too\n\t// large\" instead of a failed upload. RAT-437: the file now goes DIRECT to\n\t// storage via a signed URL (createSupabaseBrowserClient below) — bypassing\n\t// Vercel's ~4.5 MB function-body cap — so 500 MB videos work on prod too.\n\tconst IMAGE_MIME = ['image/jpeg', 'image/png', 'image/webp'];\n\tconst VIDEO_MIME = ['video/mp4', 'video/webm', 'video/quicktime'];\n\tconst IMAGE_MAX = 5 * 1024 * 1024;\n\tconst VIDEO_MAX = 500 * 1024 * 1024;\n\tconst supabase = createSupabaseBrowserClient();\n\n\tlet file = $state<File | null>(null);\n\tlet savePhoto = $state(true);\n\t// RAT-272 follow-up: per-upload csamAck checkbox dropped — T&C covers\n\t// the same legal ground; the audit row is still written server-side.\n\tconst csamAck = true;\n\tlet submitting = $state(false);\n\tlet error = $state('');\n\tlet dragOver = $state(false);\n\n\t// Epic R: the category a picture refused by boobs or ass fits instead, for\n\t// as long as that picture is the one picked.\n\tlet refused = $state<{ file: File; fits: BeatKind } | null>(null);\n\tconst throwAsKind = $derived(refused && refused.file === file ? refused.fits : null);\n\n\t// \"members only\" voting gate — when on, only signed-in users can vote on this\n\t// beat. Off by default (anyone can vote, the classic behaviour).\n\tlet membersOnly = $state(false);\n\n\t// RAT-419: match format. 1v1 = classic (a stranger takes the fight). 2v2 / 4v4\n\t// open a team roster — this uploader is team A slot 0, and joiners fill the\n\t// rest via the share link; the crowd votes for a team.\n\tlet format = $state<BeatFormat>('1v1');\n\tconst FORMAT_OPTIONS: { value: BeatFormat; label: string; sub: string }[] = [\n\t\t{ value: '1v1', label: '1v1', sub: msg('classic') },\n\t\t{ value: '2v2', label: '2v2', sub: msg('team of 2') },\n\t\t{ value: '4v4', label: '4v4', sub: msg('team of 4') }\n\t];\n\n\t// RAT-440: team battles (2v2 / 4v4) are free for everyone — no Pro gate, every\n\t// tile selects directly. The server (/api/beat) is open to match.\n\n\t// RAT-278: lock page to viewport height. iPhone Chrome's bottom toolbar\n\t// shrinks the visual viewport and the old layout left a scrollable void\n\t// below the form. body.fit-screen drops main's pb (the section owns nav\n\t// clearance via pb-[calc(100+env)]) and min-h-svh on the section pins\n\t// to the smallest viewport so the page exactly fills it.\n\t$effect(() => {\n\t\tdocument.body.classList.add('fit-screen');\n\t\treturn () => document.body.classList.remove('fit-screen');\n\t});\n\n\tconst fileLabel = $derived.by(() => {\n\t\tif (!file) return null;\n\t\tconst size =\n\t\t\tfile.size > 1024 * 1024\n\t\t\t\t? `${(file.size / 1024 / 1024).toFixed(1)} MB`\n\t\t\t\t: `${Math.ceil(file.size / 1024)} KB`;\n\t\tconst kind = file.type.startsWith('video/') ? t('video') : t('image');\n\t\treturn { name: file.name, size, kind };\n\t});\n\n\tfunction validateFile(f: File): string | null {\n\t\tconst isImage = IMAGE_MIME.includes(f.type);\n\t\tconst isVideo = VIDEO_MIME.includes(f.type);\n\t\tif (!isImage && !isVideo) return t('unsupported file type — use jpg/png/webp or mp4/webm/mov');\n\t\tconst max = isVideo ? VIDEO_MAX : IMAGE_MAX;\n\t\tif (f.size > max) return t('file too large (max {size})', { size: isVideo ? '500MB' : '5MB' });\n\t\treturn null;\n\t}\n\n\tasync function acceptFile(raw: File | null | undefined) {\n\t\tif (!raw) {\n\t\t\tfile = null;\n\t\t\terror = '';\n\t\t\treturn;\n\t\t}\n\t\t// Read the bytes at pick time so the OS handle can't die during the login\n\t\t// flow — but only for photos. A 500 MB clip read into memory here is a\n\t\t// dead tab on iOS Safari, before validateFile() below ever gets to reject\n\t\t// it (see $lib/utils/stale-file). The HEIC sniff reads the file too, and a\n\t\t// file that can't be read at all throws there — said, not dropped.\n\t\tlet f: File;\n\t\ttry {\n\t\t\tf = await detachIfImage(raw);\n\t\t\tif (await isHeic(f)) {\n\t\t\t\terror = t('converting heic photo…');\n\t\t\t\tf = await heicToJpeg(f);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst fail = pickFailure(err);\n\t\t\tanalytics.trackUploadFail({ error: fail.error, context: 'beat_pick', stale: fail.stale });\n\t\t\terror = fail.message;\n\t\t\tfile = null;\n\t\t\treturn;\n\t\t}\n\t\tconst v = validateFile(f);\n\t\tif (v) {\n\t\t\terror = v;\n\t\t\tfile = null;\n\t\t\treturn;\n\t\t}\n\t\tfile = f;\n\t\terror = '';\n\t}\n\n\tfunction pickFile(input: HTMLInputElement) {\n\t\tacceptFile(input.files?.[0] ?? null);\n\t}\n\n\t// Photo reuse: pull the saved photo down as a File, then go straight to upload —\n\t// the category is already picked above, so a \"selected file\" step is redundant.\n\tasync function useSavedPhoto() {\n\t\tif (!data.lastPhotoUrl) return;\n\t\ttry {\n\t\t\tconst res = await fetch(data.lastPhotoUrl);\n\t\t\tconst blob = await res.blob();\n\t\t\tfile = new File([blob], 'reused.jpg', { type: blob.type || 'image/jpeg' });\n\t\t\terror = '';\n\t\t} catch {\n\t\t\terror = t('could not load your saved photo — upload a new one.');\n\t\t\treturn;\n\t\t}\n\t\tawait submit();\n\t}\n\n\tfunction handleDrop(e: DragEvent) {\n\t\te.preventDefault();\n\t\tdragOver = false;\n\t\tacceptFile(e.dataTransfer?.files?.[0]);\n\t}\n\n\tasync function submit() {\n\t\tif (!file || submitting) return;\n\t\tconst picked = file;\n\t\tconst v = validateFile(file);\n\t\tif (v) {\n\t\t\terror = v;\n\t\t\treturn;\n\t\t}\n\t\tsubmitting = true;\n\t\terror = '';\n\t\ttry {\n\t\t\tconst clean = await stripExifClient(file);\n\n\t\t\t// RAT-437: two-step upload — ask for a one-time signed URL, then PUT the\n\t\t\t// file straight to Supabase Storage. Dodges Vercel's ~4.5 MB function-body\n\t\t\t// cap so large videos actually upload on prod. Server scrubs + moderates\n\t\t\t// the path after.\n\t\t\tconst urlRes = await fetch('/api/beat/upload-url', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ mimeType: clean.type, size: clean.size })\n\t\t\t});\n\t\t\tconst urlResult = await urlRes.json().catch(() => ({}));\n\t\t\tif (!urlRes.ok || !urlResult.path || !urlResult.token) {\n\t\t\t\terror = urlResult.error || t('upload failed ({status})', { status: urlRes.status });\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { error: storageError } = await supabase.storage\n\t\t\t\t.from('beat-photos')\n\t\t\t\t.uploadToSignedUrl(urlResult.path, urlResult.token, clean, {\n\t\t\t\t\tcontentType: clean.type,\n\t\t\t\t\tupsert: false\n\t\t\t\t});\n\t\t\tif (storageError) {\n\t\t\t\tconsole.error('[beat/start] storage upload failed', storageError);\n\t\t\t\tanalytics.trackUploadFail({\n\t\t\t\t\terror: storageError.message,\n\t\t\t\t\tcontext: 'beat',\n\t\t\t\t\tstale: isStaleFileError(storageError)\n\t\t\t\t});\n\t\t\t\terror = t('upload failed — try a smaller file or a stronger network');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst fd = new FormData();\n\t\t\tfd.append('path', urlResult.path);\n\t\t\tfd.append('csamAck', String(csamAck));\n\t\t\tfd.append('format', format);\n\t\t\tfd.append('kind', kind);\n\t\t\tfd.append('membersOnly', membersOnly ? 'true' : 'false');\n\t\t\tfd.append('savePhoto', savePhoto ? 'true' : 'false');\n\n\t\t\tconst res = await fetch('/api/beat', { method: 'POST', body: fd });\n\t\t\tif (!res.ok) {\n\t\t\t\tconst body = await res.json().catch(() => ({}));\n\t\t\t\tconst wrong = wrongCategoryOf(body);\n\t\t\t\tif (wrong) {\n\t\t\t\t\terror = wrong.text;\n\t\t\t\t\trefused = wrong.suggest ? { file: picked, fits: wrong.suggest } : null;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\terror = body.error || t('create failed ({status})', { status: res.status });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst body = await res.json();\n\t\t\tawait goto(`/b/${body.code}`);\n\t\t} catch (e) {\n\t\t\tconsole.error('[beat/start] submit failed', e);\n\t\t\tconst stale = isStaleFileError(e);\n\t\t\tanalytics.trackUploadFail({\n\t\t\t\terror: e instanceof Error ? `${e.name}: ${e.message}` : String(e),\n\t\t\t\tcontext: 'beat',\n\t\t\t\tstale\n\t\t\t});\n\t\t\terror = stale ? t('that photo went stale — pick it again') : t('network error');\n\t\t} finally {\n\t\t\tsubmitting = false;\n\t\t}\n\t}\n\n\t// One tap throws the refused picture into the category it fits. Same route,\n\t// so the page and the picked file stay mounted; only ?kind= changes.\n\tasync function throwAs(fits: BeatKind) {\n\t\tanalytics.trackCtaClick(`beat_throw_as_${fits}`, `beat_start_${kind}`);\n\t\trefused = null;\n\t\terror = '';\n\t\tawait goto(`/b/start?kind=${fits}`, { replaceState: true, noScroll: true, keepFocus: true });\n\t\tawait submit();\n\t}\n</script>\n\n<svelte:head>\n\t<title>{t('start a challenge · beat me')}</title>\n</svelte:head>\n\n<!-- Batch 24: top padding pulled in, back button + step-01 eyebrow\n\t removed, heading clamp pulled down, body copy tightened so the\n\t choose-file box + throw-it CTA both sit in the first viewport.\n\t RAT-278: bumped pt-14 → pt-20 (Navbar h-16 = 64px was clipping the\n\t heading). min-h-svh + section-owned pb-[calc(100+env)] +\n\t body.fit-screen (zeroes main pb) keeps the page exactly viewport-\n\t height on iPhone Chrome where the bottom toolbar shrinks visible\n\t viewport. -->\n<section class=\"relative flex min-h-svh flex-col overflow-hidden pt-20 pb-[calc(100px+env(safe-area-inset-bottom))] md:pt-28 md:pb-28\">\n\t<div class=\"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]\"></div>\n\t<div class=\"pointer-events-none absolute -top-40 -right-40 hidden h-[500px] w-[500px] rounded-full bg-yellow/[.04] blur-[150px] md:block\"></div>\n\n\t<div class=\"relative mx-auto w-full max-w-5xl px-5 md:px-0\">\n\t\t<a\n\t\t\thref={beatLobbyHref(kind)}\n\t\t\tclass=\"mb-4 inline-flex items-center gap-2 rounded-full bg-surface px-3.5 py-1.5 text-[13px] text-muted no-underline hover:text-text md:mb-6\"\n\t\t>\n\t\t\t{t('category')} <span class=\"font-display font-bold text-text\">{t(KIND_NAMES[kind] ?? '')}</span>\n\t\t</a>\n\t\t<h1 class=\"font-display text-[clamp(2.2rem,7.5vw,7rem)] font-bold leading-[0.9] tracking-tighter\">\n\t\t\t{t('throw something')}<br /><span class=\"text-yellow\">{t('into the ring.')}</span>\n\t\t</h1>\n\t\t<p class=\"mt-3 max-w-md text-sm leading-relaxed text-muted md:mt-8 md:text-lg\">\n\t\t\t{t('no account. no email. no card. you upload, somebody fights you, the crowd watches.')}\n\t\t</p>\n\n\t\t<div class=\"mt-5 grid gap-8 md:mt-10 md:grid-cols-12 md:gap-12\">\n\t\t\t<form\n\t\t\t\tonsubmit={(e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif (throwAsKind) throwAs(throwAsKind);\n\t\t\t\t\telse submit();\n\t\t\t\t}}\n\t\t\t\tclass=\"md:col-span-7\"\n\t\t\t>\n\t\t\t\t<!-- RAT-419: match format — classic 1v1 or a team battle. -->\n\t\t\t\t<div class=\"mb-4\">\n\t\t\t\t\t<span class=\"mb-2 block font-mono text-[10px] tracking-[0.28em] text-coral uppercase\">{t('format')}</span>\n\t\t\t\t\t<div class=\"grid grid-cols-3 gap-2\">\n\t\t\t\t\t\t{#each FORMAT_OPTIONS as opt (opt.value)}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-pressed={format === opt.value}\n\t\t\t\t\t\t\t\tonclick={() => (format = opt.value)}\n\t\t\t\t\t\t\t\tclass=\"rounded-xl border px-3 py-3 text-center transition-colors {format ===\n\t\t\t\t\t\t\t\topt.value\n\t\t\t\t\t\t\t\t\t? 'border-yellow bg-yellow text-bg'\n\t\t\t\t\t\t\t\t\t: 'border-border bg-surface text-muted hover:border-muted'}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"block font-display text-sm font-bold\">{opt.label}</span>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"mt-0.5 block text-[10px] {format === opt.value\n\t\t\t\t\t\t\t\t\t\t? 'text-bg/70'\n\t\t\t\t\t\t\t\t\t\t: 'text-muted/60'}\">{t(opt.sub)}</span\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- members-only voting gate: creator decides if anon users can vote -->\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"switch\"\n\t\t\t\t\taria-checked={membersOnly}\n\t\t\t\t\tonclick={() => (membersOnly = !membersOnly)}\n\t\t\t\t\tclass=\"mb-4 flex w-full items-center gap-3 rounded-xl border border-border bg-surface px-4 py-3 text-left transition-colors hover:border-muted\"\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"flex h-6 w-10 shrink-0 items-center rounded-full p-0.5 transition-colors {membersOnly\n\t\t\t\t\t\t\t? 'bg-yellow'\n\t\t\t\t\t\t\t: 'bg-border'}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"h-5 w-5 rounded-full bg-white transition-transform {membersOnly\n\t\t\t\t\t\t\t\t? 'translate-x-4'\n\t\t\t\t\t\t\t\t: ''}\"\n\t\t\t\t\t\t></span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"min-w-0\">\n\t\t\t\t\t\t<span class=\"block font-display text-sm font-bold text-text\">{t('members only voting')}</span>\n\t\t\t\t\t\t<span class=\"block text-xs text-muted\"\n\t\t\t\t\t\t\t>{membersOnly\n\t\t\t\t\t\t\t\t? t('only signed-in users can vote')\n\t\t\t\t\t\t\t\t: t('anyone can vote, signed in or not')}</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\n\t\t\t\t{#snippet beatUpload()}\n\t\t\t\t<label\n\t\t\t\t\tclass=\"block cursor-pointer rounded-2xl border transition-all duration-300\n\t\t\t\t\t\t{fileLabel ? 'px-4 py-4 md:px-5 md:py-5' : 'px-6 py-8 md:py-14'}\n\t\t\t\t\t\t{dragOver\n\t\t\t\t\t\t? 'border-yellow/30 bg-yellow/[.03] shadow-[inset_0_1px_20px_rgba(255,229,0,.05)]'\n\t\t\t\t\t\t: file\n\t\t\t\t\t\t\t? 'border-yellow/40 bg-surface'\n\t\t\t\t\t\t\t: 'border-border bg-surface shadow-[inset_0_1px_10px_rgba(0,0,0,.2)] hover:border-muted'}\"\n\t\t\t\t\tondrop={handleDrop}\n\t\t\t\t\tondragover={(e) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tdragOver = true;\n\t\t\t\t\t}}\n\t\t\t\t\tondragleave={() => (dragOver = false)}\n\t\t\t\t>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\taccept=\"image/*,video/*\"\n\t\t\t\t\t\tclass=\"hidden\"\n\t\t\t\t\t\tonchange={(e) => pickFile(e.currentTarget)}\n\t\t\t\t\t/>\n\t\t\t\t\t{#if fileLabel}\n\t\t\t\t\t\t<div class=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t<div class=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-yellow/40 bg-yellow/10 text-yellow\">\n\t\t\t\t\t\t\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\"></polyline>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<p class=\"truncate font-display text-sm font-bold\">{fileLabel.name}</p>\n\t\t\t\t\t\t\t\t<p class=\"text-xs text-muted\">{fileLabel.kind} · {fileLabel.size}</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<span class=\"shrink-0 text-xs font-medium tracking-wide text-yellow underline-offset-4 hover:underline\">\n\t\t\t\t\t\t\t\t{t('change')}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<div class=\"mx-auto flex h-11 w-11 items-center justify-center rounded-xl border border-border bg-bg text-muted\">\n\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t\t\t\t<path d=\"M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p class=\"mt-3 text-center font-display text-base font-bold\">{t('drag & drop here')}</p>\n\t\t\t\t\t\t<p class=\"mt-1 text-center text-xs text-muted\">{t('or browse your gallery of regrets')}</p>\n\t\t\t\t\t\t<div class=\"mt-4 text-center\">\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"inline-block rounded-lg bg-yellow px-7 py-3 font-display text-sm font-semibold tracking-tight text-bg transition-all hover:-translate-y-0.5\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{t('choose file')}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/if}\n\t\t\t\t</label>\n\t\t\t\t{/snippet}\n\n\t\t\t\t<ReusePhoto\n\t\t\t\t\tloggedIn={!!data.session}\n\t\t\t\t\tlastPhotoUrl={data.lastPhotoUrl ?? null}\n\t\t\t\t\tothers=\"Arena\"\n\t\t\t\t\tuseBtnClass=\"bg-yellow text-bg\"\n\t\t\t\t\ttoggleOnClass=\"bg-yellow\"\n\t\t\t\t\tsaveMode={file && file.type.startsWith('video/')\n\t\t\t\t\t\t? 'none'\n\t\t\t\t\t\t: data.session\n\t\t\t\t\t\t\t? 'toggle'\n\t\t\t\t\t\t\t: 'signup'}\n\t\t\t\t\thasSelection={!!file}\n\t\t\t\t\tbind:save={savePhoto}\n\t\t\t\t\tonSignUp={() => openAuthSheet(undefined, 'beat_start_reuse')}\n\t\t\t\t\tonBack={() => (file = null)}\n\t\t\t\t\tonUseSaved={useSavedPhoto}\n\t\t\t\t\tupload={beatUpload}\n\t\t\t\t/>\n\n\t\t\t\t<p class=\"mt-3 flex items-center gap-1.5 text-xs text-muted\">\n\t\t\t\t\t<svg class=\"h-3 w-3 shrink-0 text-muted\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t\t<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" />\n\t\t\t\t\t\t<path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n\t\t\t\t\t</svg>\n\t\t\t\t\t{t('jpg / png / webp · 5MB · or mp4 / webm up to 500MB')}\n\t\t\t\t</p>\n\n\t\t\t\t<!-- RAT-527: what actually protects them, said where they hesitate. -->\n\t\t\t\t<ul class=\"mt-4 space-y-2 text-[13px] leading-snug text-muted-2\">\n\t\t\t\t\t{#each [t('location and camera data are stripped from the file'), t('no face needed. nobody sees who threw it'), t('{pct}% get an opponent, most within minutes', { pct: BEAT_TAKEN_PCT })] as line (line)}\n\t\t\t\t\t\t<li class=\"flex items-start gap-2\">\n\t\t\t\t\t\t\t<svg class=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-green\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\" /></svg>\n\t\t\t\t\t\t\t<span>{line}</span>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t{/each}\n\t\t\t\t</ul>\n\n\t\t\t\t{#if error}\n\t\t\t\t\t<p class=\"mt-4 rounded-lg border border-coral/30 bg-coral/[.08] px-3 py-2.5 text-xs text-coral\">\n\t\t\t\t\t\t{error}\n\t\t\t\t\t</p>\n\t\t\t\t{/if}\n\n\t\t\t\t<button\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tdisabled={!file || submitting}\n\t\t\t\t\tclass=\"submit-btn mt-5 inline-flex w-full items-center justify-center rounded-lg bg-yellow px-6 py-4 font-display text-sm font-bold tracking-tight text-bg disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t>\n\t\t\t\t\t{submitting\n\t\t\t\t\t\t? t('uploading…')\n\t\t\t\t\t\t: throwAsKind\n\t\t\t\t\t\t\t? throwAsLabel(throwAsKind)\n\t\t\t\t\t\t\t: t('throw it in →')}\n\t\t\t\t</button>\n\n\t\t\t\t<p class=\"mt-3 text-center text-[11px] text-muted/70\">\n\t\t\t\t\t{t(\"we'll quietly remember this device so you can find your fight later. nothing else.\")}\n\t\t\t\t</p>\n\t\t\t</form>\n\n\t\t\t<aside class=\"md:col-span-5\">\n\t\t\t\t<p class=\"text-xs font-medium tracking-widest text-coral uppercase\">{t('the contract')}</p>\n\t\t\t\t<h2 class=\"mt-3 font-display text-2xl font-bold tracking-tight md:text-3xl\">{t(\"read it. or don't.\")}</h2>\n\n\t\t\t\t<ul class=\"mt-6 space-y-5 text-[13px] leading-relaxed text-muted\">\n\t\t\t\t\t<li class=\"flex gap-3\">\n\t\t\t\t\t\t<span class=\"mt-0.5 font-mono text-[10px] tracking-wider text-coral\">01</span>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{#each t('your upload goes {public} the second a stranger accepts. no edits. no take-backs. no rematch.').split('{public}') as part, i (i)}{#if i}<span class=\"text-text\">{t('public')}</span>{/if}{part}{/each}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"flex gap-3\">\n\t\t\t\t\t\t<span class=\"mt-0.5 font-mono text-[10px] tracking-wider text-yellow\">02</span>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{#each t(\"twenty-four hour public vote, then it's {over}. votes also flow in from the arena swipe deck. share harder, win harder.\").split('{over}') as part, i (i)}{#if i}<span class=\"text-text\">{t('over')}</span>{/if}{part}{/each}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li class=\"flex gap-3\">\n\t\t\t\t\t\t<span class=\"mt-0.5 font-mono text-[10px] tracking-wider text-blue\">03</span>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{#each t('nobody bites in seven days? it {gone} and we both pretend it never happened.').split('{gone}') as part, i (i)}{#if i}<span class=\"text-text\">{t('quietly disappears')}</span>{/if}{part}{/each}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</aside>\n\t\t</div>\n\t</div>\n</section>\n\n<style>\n\t/* Native checkbox is sr-only; the .checkbox-box span is its visual proxy.\n\t   The :has() selector keeps the checkmark hidden until the input toggles. */\n\t.checkbox-mark {\n\t\topacity: 0;\n\t\ttransition: opacity 0.2s var(--ease-out-quart);\n\t}\n\t.consent-row:has(input:checked) .checkbox-mark {\n\t\topacity: 1;\n\t}\n\n\t.submit-btn {\n\t\ttransition:\n\t\t\ttransform 0.45s var(--ease-out-expo),\n\t\t\tbox-shadow 0.45s var(--ease-out-expo);\n\t}\n\t.submit-btn:not(:disabled):hover {\n\t\ttransform: translateY(-2px);\n\t\tbox-shadow: 0 12px 32px -10px rgb(255 229 0 / 0.4);\n\t}\n</style>\n"],"version":3}