{"release_id":"01a1c502-4ad1-0000-ec62-adc54d3c69aa","chunk_id":"01a1c502-4d09-7fb0-b6fc-ea972f86b7cb","file":"82.CxMJ9Hls.mjs","mappings":";;;;u5BAAA,UAQO,MAAAA,GAAWC,GAA2B,MAExCC,EAAeC,EAAoB,IAAI,EACvCC,EAAaD,EAAsB,IAAI,EACvCE,EAAYF,EAAO,EAAK,EACxBG,EAAYH,EAAsB,IAAI,EACtCI,EAAYJ,EAA0B,OAAO,EAC7CK,EAAWL,EAAO,EAAK,EACvBM,EAAUN,EAAO,EAAE,EACnBO,EAAUP,EAAO,EAAK,EACtBQ,EAAaR,EAAO,EAAK,EACzBS,EAAQT,EAAsB,IAAI,EAClCU,EAAYV,EAAO,EAAI,EAErB,MAAAW,cAAuBR,CAAS,GAAAS,EAAIL,CAAO,GAAA,CAAAK,EAAKV,CAAS,MAAKM,CAAU,CAAA,WAErEK,EAAYC,EAAwB,CACvCA,IACLC,EAAAN,EAAQ,IAAI,EACZM,EAAAhB,EAAee,EAAI,EAAA,IACnBV,EAAYU,EAAK,KAAK,WAAW,OAAO,EAAI,QAAU,QAAO,EAAA,EACzDF,EAAAX,CAAU,GAAE,IAAI,kBAAgBA,CAAU,CAAA,EAC9Cc,EAAAd,EAAa,IAAI,gBAAgBa,CAAI,EAAA,EAAA,EACrCE,GAAW,EACZ,UAESC,GAAYC,EAAU,CAC9BL,EAAaK,EAAE,OAA4B,QAAQ,CAAC,CAAA,CACrD,UACSC,GAAWD,EAAc,CACjCA,EAAE,eAAc,EAChBH,EAAAV,EAAW,EAAK,EAChBQ,EAAYK,EAAE,cAAc,QAAQ,CAAC,CAAA,CACtC,UACSE,GAAeF,EAAc,CACrCA,EAAE,eAAc,EAChBH,EAAAV,EAAW,EAAI,CAChB,CACS,SAAAgB,IAAkB,CAC1BN,EAAAV,EAAW,EAAK,CACjB,CAEe,eAAAW,IAAc,MACvBjB,CAAY,EACjBgB,CAAAA,EAAAb,EAAY,EAAI,EAChBa,EAAAZ,EAAY,IAAI,EACZ,GAAA,OACGmB,EAAM,MAAS,MAAM,wBAAuB,CACjD,OAAQ,OACR,QAAO,CAAI,eAAgB,kBAAkB,EAC7C,KAAM,KAAK,UAAS,CAAG,SAAQV,EAAEb,CAAY,EAAC,KAAM,KAAIa,EAAEb,CAAY,EAAC,SAElEwB,EAAS,MAASD,EAAO,KAAI,MAC9BA,EAAO,IAAE,CAAKC,EAAU,MAAI,CAAKA,EAAU,MAAO,CACtDR,EAAAN,EAAQc,EAAU,OAAS,yCAAwC,EAAA,QAEpE,CACQ,KAAA,CAAA,MAAOC,CAAY,EAAA,MAAW3B,GAAS,QAC7C,KAAK,cAAc,EACnB,kBAAkB0B,EAAU,KAAMA,EAAU,MAAKX,EAAEb,CAAY,EAAA,CAC/D,YAAWa,EAAEb,CAAY,EAAC,KAC1B,OAAQ,EAAA,CAAA,EAEN,GAAAyB,EAAc,CACjBT,EAAAN,EAAQ,4BAA4B,QAErC,GACAN,EAAYoB,EAAU,KAAI,EAAA,CAC3B,QAAC,CACAR,EAAAb,EAAY,EAAK,CAClB,EACD,CAIe,eAAAuB,IAAgB,WACpB,aACN,GAAA,OAEGC,EAAI,MADD,MAAS,MAAKC,EAAA,KAAM,YAAY,GAClB,KAAI,EAC3Bd,EAAW,IAAK,KAAI,CAAEa,CAAI,EAAG,aAAY,CAAI,KAAMA,EAAK,MAAQ,YAAY,CAAA,CAAA,CAC7E,MAAQ,CACPX,EAAAN,EAAQ,qDAAqD,CAC9D,CACD,CAKA,IAAAmB,EAAAC,GAAA,EAFAC,GAAW,SAAAC,GAAA,YAAE,MAAK,mCAajB,IAAAC,GAAGC,EAAAC,EAXJN,CAAA,EAAA,CAAA,EAYEO,IADDH,EAAG,SACFG,CAAC,CAAA,yBAEaC,EAAA,IAAAC,EAAAC,EAAA,UAAAX,EAAA,KAAA,QAAQ,YAAU,EAAA,EAAA,CAAA,0BADR,SAAOY,EAAAC,EAAA,MAD/BL,CAAC,WAADA,EAAC,CAAA,uFAsCAM,EAACR,EAAAS,EAAAC,CAAA,EAAA,CAAA,MAADF,CAAC,IAADA,CAAC,OAC4BL,EAAA,IAAAC,EAAAO,EAAA,0BAAAjB,EAAA,KAAA,QAAQ,YAAU,EAAA,wCAAA,CAAA,4BAkB/CkB,EAAAZ,EAAAS,EAAAI,CAAA,EAAA,CAAA,EAiBCC,EAAKb,EAjBNW,CAAA,IAiBCE,CAAK,EACL,IAAAC,IADAD,EAAK,CAAA,IACLC,CAAK,EACL,IAAAC,IADAD,EAAK,CAAA,IACLC,CAAK,WAALA,EAAK,CAAA,oBAIKC,EAAanB,GAAA,CACtB,IAAAoB,EAAAC,GAAA,EASCC,EAAAnB,EATDiB,CAAA,OAAAG,EAAAH,CAAA,EAAAf,EAAA,IAAAmB,GAAAJ,EAAA,EAAA;AAAA,SAEEvC,EAAAP,CAAA,EACC,gFACA,sFAAsF,EAAA,CAAA,EAJzFmD,EAAA,OAAAL,EAKQhC,EAAU,EALlBqC,EAAA,WAAAL,EAMY/B,EAAc,EAN1BoC,EAAA,YAAAL,EAOa9B,EAAe,EAE3BoC,GAAA,SAAAJ,EAIUpC,EAAW,EAbtByC,EAAA3B,EAAAoB,CAAA,sBA6CmB,IAAAQ,EAAAC,GAAA,IAAAjC,EAAA,KAAA,cAAgB,IAAI,eAKvB5B,CAAY,CAAA,EAP5B8D,GAAAC,EAAA,8BACe,wKAQD,OAAA,IAAA,CACb/C,EAAAhB,EAAe,IAAI,EACnBgB,EAAAd,EAAa,IAAI,EACjBc,EAAAZ,EAAY,IAAI,CACjB,aACYsB,uBACJyB,OAPR,MAAS,UAAExC,CAAS,OAApB,KAASqD,EAAA,GAAErD,EAASqD,EAAA,EAAA,iCA2BTC,EAACC,GAAA,MAADD,EAAC,EAAA,IAADA,CAAC,cAAiCvD,CAAK,CAAA,CAAA,MAAvCuD,CAAC,aAARvD,CAAK,GAAA8B,EAAA2B,CAAA,8BAGTC,EAAGzB,EAAA0B,CAAA,EACFC,IADDF,CAAG,MACFE,CAAG,aAED,IAAAC,EAAAC,GAAA,EAAAD,EAAA,MAAA,GAAAlC,EAAA,IAAAoC,GAAAF,EAAA,MAAA1D,EACKX,CAAU,CAAA,CAAA,EADfyD,EAAA3B,EAAAuC,CAAA,aASAG,EAAGC,GAAA,EAAHtC,EAAA,IAAAoC,GAAAC,UAASxE,CAAU,CAAA,CAAA,MAAnBwE,CAAG,WAVA7D,EAAAR,CAAS,IAAK,QAAOmC,EAAAoC,CAAA,EAAApC,EAAAqC,EAAA,EAAA,MAD1BP,CAAG,UAAHA,EAAG,CAAA,aAeF,IAAAQ,EAAAC,GAAA,EAAApB,EAAA3B,EAAA8C,CAAA,UAMA,IAAAE,EAAAC,GAAA,EAAAtB,EAAA3B,EAAAgD,CAAA,WAPGnE,EAAAV,CAAS,SAMJC,CAAS,GAAAoC,EAAA0C,GAAA,CAAA,IAMlB,IAAAC,GAAAjD,EAAAkD,EAAA,CAAA,EAICC,GAAAnD,EAAAC,EAJDgD,EAAA,CAAA,EAAA5B,EAAA4B,EAAA,IA3BDf,CAAG,EAyCH,IAAAkB,IAzCAlB,EAAG,CAAA,EA6CFmB,EAAArD,EAAAC,EAJDmD,CAAK,EAAA,CAAA,EAIJE,EAAAD,CAAA,EAQA,IAAAE,GAAIvD,EARJqD,EAAA,CAAA,OAQAE,EAAI,IAAJA,EAAI,IAZLH,CAAK,EAkBL,IAAAI,IAlBAJ,EAAK,CAAA,EAoBJK,OAFDD,CAAG,EAAA,CAAA,OAEFC,GAAC,EAAA,IAADA,EAAC,IAFFD,CAAG,EAQH,IAAAE,EAAA1D,EARAwD,EAAG,CAAA,EAWFG,EAAA1D,EAHDyD,CAAA,EAGCJ,EAAAK,CAAA,EAAAA,EAAA,MAAAA,EAAA,QAAA,YAHDtC,EAAAqC,CAAA,EAAA,IAAAE,GAAA5D,EAAA0D,EAAA,CAAA,kBAiBWG,EAACC,GAAA,OAADD,EAAC,EAAA,IAADA,CAAC,eAAiCrF,CAAK,CAAA,CAAA,MAAvCqF,CAAC,cAARrF,CAAK,GAAA8B,EAAAyD,EAAA,IAET,IAAAC,EAAAhE,EAAA4D,GAAA,CAAA,EAAAK,GAAAhE,EAAA+D,EAAA,EAAA,EAAA3C,EAAA2C,CAAA,yDAhC2C,GAAErF,EAAGN,CAAO,EAAC,MAAM,QAAA,EAQvD+B,EAAA8D,GAAAxE,EAAA,KAAA,cAAgB,WAAW,EAwBlCsE,EAAA,SAAA,CAAArF,EAEWD,EAAS,SAGnBH,CAAU,EAAG,cAAcN,CAAS,EAAG,aAAe,mBAAmB,IA5DxEuD,GAAA,SAAA2B,GAIUnE,EAAW,KAUtBqE,EAAA,IAAA1E,EAGYN,CAAO,OAAPA,EAAOyD,CAAA,CAAA,KAsBnB6B,EAAA,IAAAhF,EAIcL,CAAO,OAAPA,EAAOwD,CAAA,CAAA,qBA9JlB9D,CAAU,EAAAsC,EAAA6D,GAAA,EAAA,EAAA7D,EAAA8D,EAAA,IArBhB/C,EAAAT,CAAA,KAAAA,EAAA,CAAAyD,EAAAC,IAAAC,KAAAF,EAAAC,CAAA,EAAA,IAAA,KAKCxF,EAAAP,EAAa,EAAI,EACjBO,EAAAN,EAAQ,IAAI,EACI,MAAA,CAAA,OAAAgG,KAAa,CAC5B1F,EAAAP,EAAa,EAAK,EACdiG,EAAO,OAAS,WAAaA,EAAO,MAAM,QACvC,MAAAC,GAAI,cAAeD,EAAO,KAAK,OAAO,EAAA,EAClCA,EAAO,OAAS,WAC1B1F,EAAAN,EAASgG,EAAO,MAAM,OAAoB,wBAAuB,EAAA,CAEnE,EACA,WAEA1D,EAAKnC,EAAuCT,CAAS,GAAI,EAAE,EAC3DwG,EAAA3D,IAA4C5C,CAAS,CAAA,EACrDuG,EAAA1D,EAAKrC,EAAuCF,CAAS,EAAG,OAAS,OAAO,4BAvEhE,QAAOiB,EAAA,KAYF,WAAUA,EAAA,KAeX,eAAcY,EAAAqE,GAAA,CAAA,EAAArE,EAAAsE,GAAA,EAAA,EAfHtE,EAAAuE,GAAA,CAAA,EAZRvE,EAAAwE,EAAA,MANlB/E,EAAG,EAXJsB,EAAA1B,CAAA,EAAA8B,EAAA3B,GAAAH,CAAA,MAJO","names":["supabase","createSupabaseBrowserClient","selectedFile","$.state","previewUrl","uploading","imagePath","mediaType","dragOver","tagline","consent","submitting","error","savePhoto","canSubmit","$.get","processFile","file","$.set","uploadImage","handleInput","e","handleDrop","handleDragOver","handleDragLeave","urlRes","urlResult","storageError","useSavedPhoto","blob","$$props","section","root","$.head","$$anchor","div","$.sibling","$.child","p","$.template_effect","$.set_text","text","$$render","consequent","p_1","$.first_child","fragment_3","text_1","form_1","fragment_4","input","input_1","input_2","contestUpload","label","root_8","input_3","$.reset","$.set_class","$.event","$.delegated","$.append","$0","$.derived","ReusePhoto","node_3","$$value","p_2","root_9","consequent_4","div_1","fragment_6","div_2","video","root_11","$.set_attribute","img","root_12","consequent_6","alternate","div_3","root_13","span","root_14","consequent_8","label_1","node_6","input_4","label_2","input_5","$.remove_input_defaults","span_1","div_4","p_3","label_3","input_6","node_7","p_4","root_15","consequent_9","button","text_6","text_4","alternate_1","consequent_5","$$node","$$action_arg","enhance","result","goto","$.set_value","consequent_3","alternate_2","consequent_2","consequent_1"],"sources":["../../../../../../src/routes/contest/enter/+page.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport { enhance } from '$app/forms';\n\timport { goto } from '$app/navigation';\n\timport { createSupabaseBrowserClient } from '$lib/supabase';\n\timport ReusePhoto from '$lib/components/ReusePhoto.svelte';\n\n\tlet { data, form } = $props();\n\n\tconst supabase = createSupabaseBrowserClient();\n\n\tlet selectedFile = $state<File | null>(null);\n\tlet previewUrl = $state<string | null>(null);\n\tlet uploading = $state(false);\n\tlet imagePath = $state<string | null>(null);\n\tlet mediaType = $state<'image' | 'video'>('image');\n\tlet dragOver = $state(false);\n\tlet tagline = $state('');\n\tlet consent = $state(false);\n\tlet submitting = $state(false);\n\tlet error = $state<string | null>(null);\n\tlet savePhoto = $state(true);\n\n\tconst canSubmit = $derived(!!imagePath && consent && !uploading && !submitting);\n\n\tfunction processFile(file: File | undefined) {\n\t\tif (!file) return;\n\t\terror = null;\n\t\tselectedFile = file;\n\t\tmediaType = file.type.startsWith('video') ? 'video' : 'image';\n\t\tif (previewUrl) URL.revokeObjectURL(previewUrl);\n\t\tpreviewUrl = URL.createObjectURL(file);\n\t\tuploadImage();\n\t}\n\n\tfunction handleInput(e: Event) {\n\t\tprocessFile((e.target as HTMLInputElement).files?.[0]);\n\t}\n\tfunction handleDrop(e: DragEvent) {\n\t\te.preventDefault();\n\t\tdragOver = false;\n\t\tprocessFile(e.dataTransfer?.files?.[0]);\n\t}\n\tfunction handleDragOver(e: DragEvent) {\n\t\te.preventDefault();\n\t\tdragOver = true;\n\t}\n\tfunction handleDragLeave() {\n\t\tdragOver = false;\n\t}\n\n\tasync function uploadImage() {\n\t\tif (!selectedFile) return;\n\t\tuploading = true;\n\t\timagePath = null;\n\t\ttry {\n\t\t\tconst urlRes = await fetch('/api/arena/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: selectedFile.type, size: selectedFile.size })\n\t\t\t});\n\t\t\tconst urlResult = await urlRes.json();\n\t\t\tif (!urlRes.ok || !urlResult.path || !urlResult.token) {\n\t\t\t\terror = urlResult.error ?? 'upload failed — try a different photo.';\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { error: storageError } = await supabase.storage\n\t\t\t\t.from('arena-photos')\n\t\t\t\t.uploadToSignedUrl(urlResult.path, urlResult.token, selectedFile, {\n\t\t\t\t\tcontentType: selectedFile.type,\n\t\t\t\t\tupsert: false\n\t\t\t\t});\n\t\t\tif (storageError) {\n\t\t\t\terror = 'upload failed — try again.';\n\t\t\t\treturn;\n\t\t\t}\n\t\t\timagePath = urlResult.path as string;\n\t\t} finally {\n\t\t\tuploading = false;\n\t\t}\n\t}\n\n\t// Photo reuse: pull the saved photo down as a File and run it through the\n\t// normal upload (it lands in arena-photos like a fresh pick).\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\tprocessFile(new File([blob], 'reused.jpg', { type: blob.type || 'image/jpeg' }));\n\t\t} catch {\n\t\t\terror = 'could not load your saved photo — upload a new one.';\n\t\t}\n\t}\n</script>\n\n<svelte:head><title>enter the contest · ratemyd.</title></svelte:head>\n\n<section\n\tclass=\"relative flex min-h-svh flex-col overflow-hidden px-5 pt-20 pb-[calc(100px+env(safe-area-inset-bottom))] md:pt-28 md:pb-28\"\n>\n\t<!-- subtle grid + coral glow (matches /rate) -->\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\t<div\n\t\tclass=\"pointer-events-none absolute -top-40 -right-40 hidden h-[500px] w-[500px] rounded-full bg-coral/5 blur-[150px] md:block\"\n\t></div>\n\n\t<div class=\"relative mx-auto w-full max-w-5xl\">\n\t\t<p class=\"text-[11px] font-semibold tracking-[0.3em] text-coral uppercase\">\n\t\t\tweekly contest{#if data.contest}\n\t\t\t\t— week {data.contest.weekNumber}{/if}\n\t\t</p>\n\n\t\t{#if !data.contest}\n\t\t\t<h1\n\t\t\t\tclass=\"mt-3 font-display text-[clamp(2.4rem,8vw,7rem)] leading-[0.9] font-bold tracking-tighter\"\n\t\t\t>\n\t\t\t\tno contest<br /><span class=\"text-coral\">running.</span>\n\t\t\t</h1>\n\t\t\t<p class=\"mt-3 max-w-md text-sm leading-relaxed text-muted md:text-lg\">\n\t\t\t\tthe next round hasn't started yet. check back soon.\n\t\t\t</p>\n\t\t\t<a href=\"/contest\" class=\"mt-6 inline-block text-sm font-semibold text-coral underline\"\n\t\t\t\t>back to the contest</a\n\t\t\t>\n\t\t{:else if !data.isLoggedIn}\n\t\t\t<h1\n\t\t\t\tclass=\"mt-3 font-display text-[clamp(2.4rem,8vw,7rem)] leading-[0.9] font-bold tracking-tighter\"\n\t\t\t>\n\t\t\t\tenter the<br /><span class=\"text-coral\">pageant.</span>\n\t\t\t</h1>\n\t\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\tentering is free — but you need an account, so each person enters once and the votes mean\n\t\t\t\tsomething.\n\t\t\t</p>\n\t\t\t<a\n\t\t\t\thref=\"/auth/sign-in\"\n\t\t\t\tclass=\"mt-6 inline-block rounded-lg bg-coral px-7 py-3 text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t\t\t\t>log in or sign up</a\n\t\t\t>\n\t\t{:else if data.alreadyEntered}\n\t\t\t<h1\n\t\t\t\tclass=\"mt-3 font-display text-[clamp(2.4rem,8vw,7rem)] leading-[0.9] font-bold tracking-tighter\"\n\t\t\t>\n\t\t\t\tyou're<br /><span class=\"text-coral\">in.</span>\n\t\t\t</h1>\n\t\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\tyou're already in week {data.contest.weekNumber} — one entry per week. go rally votes.\n\t\t\t</p>\n\t\t\t<a\n\t\t\t\thref=\"/contest\"\n\t\t\t\tclass=\"mt-6 inline-block rounded-lg bg-coral px-7 py-3 text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t\t\t\t>back to the board</a\n\t\t\t>\n\t\t{:else}\n\t\t\t<h1\n\t\t\t\tclass=\"mt-3 font-display text-[clamp(2.4rem,8vw,7rem)] leading-[0.9] font-bold tracking-tighter\"\n\t\t\t>\n\t\t\t\tenter the<br /><span class=\"text-coral\">pageant.</span>\n\t\t\t</h1>\n\t\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\tdrop your best work, add a one-liner, and you're in this week's running. one entry per week.\n\t\t\t\t18+ only.\n\t\t\t</p>\n\n\t\t\t<form\n\t\t\t\tmethod=\"POST\"\n\t\t\t\taction=\"?/submit\"\n\t\t\t\tclass=\"mt-6 flex max-w-xl flex-col gap-5 md:mt-10\"\n\t\t\t\tuse:enhance={() => {\n\t\t\t\t\tsubmitting = true;\n\t\t\t\t\terror = null;\n\t\t\t\t\treturn async ({ result }) => {\n\t\t\t\t\t\tsubmitting = false;\n\t\t\t\t\t\tif (result.type === 'success' && result.data?.success) {\n\t\t\t\t\t\t\tawait goto(`/contest/e/${result.data.entryId}`);\n\t\t\t\t\t\t} else if (result.type === 'failure') {\n\t\t\t\t\t\t\terror = (result.data?.error as string) ?? 'something went wrong.';\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<input type=\"hidden\" name=\"imagePath\" value={imagePath ?? ''} />\n\t\t\t\t<input type=\"hidden\" name=\"mediaType\" value={mediaType} />\n\t\t\t\t<input type=\"hidden\" name=\"savePhoto\" value={savePhoto ? 'true' : 'false'} />\n\n\t\t\t\t{#if !previewUrl}\n\t\t\t\t\t<!-- upload card (1:1 with /rate) -->\n\t\t\t\t\t{#snippet contestUpload()}\n\t\t\t\t\t<label\n\t\t\t\t\t\tclass=\"block cursor-pointer rounded-2xl border px-6 py-8 transition-all duration-300 md:py-14\n\t\t\t\t\t\t\t{dragOver\n\t\t\t\t\t\t\t? 'border-coral/30 bg-coral/[.03] shadow-[inset_0_1px_20px_rgba(255,77,109,.05)]'\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\t\tondrop={handleDrop}\n\t\t\t\t\t\tondragover={handleDragOver}\n\t\t\t\t\t\tondragleave={handleDragLeave}\n\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\taccept=\"image/jpeg,image/png,image/webp\"\n\t\t\t\t\t\t\tclass=\"hidden\"\n\t\t\t\t\t\t\tonchange={handleInput}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"mx-auto flex h-11 w-11 items-center justify-center rounded-xl border border-border bg-bg\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tclass=\"h-5 w-5 text-muted\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tstroke-width=\"1.5\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\td=\"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\t/>\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\">drag & drop here</p>\n\t\t\t\t\t\t<p class=\"mt-1 text-center text-xs text-muted\">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-coral px-7 py-3 text-sm font-semibold text-white transition-all hover:bg-coral-dark\"\n\t\t\t\t\t\t\t\t>choose file</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</label>\n\t\t\t\t\t{/snippet}\n\n\t\t\t\t\t<ReusePhoto\n\t\t\t\t\t\tloggedIn={data.isLoggedIn}\n\t\t\t\t\t\tlastPhotoUrl={data.lastPhotoUrl ?? null}\n\t\t\t\t\t\tothers=\"Arena\"\n\t\t\t\t\t\tuseBtnClass=\"bg-coral text-white\"\n\t\t\t\t\t\ttoggleOnClass=\"bg-coral\"\n\t\t\t\t\t\tsaveMode=\"toggle\"\n\t\t\t\t\t\thasSelection={!!selectedFile}\n\t\t\t\t\t\tbind:save={savePhoto}\n\t\t\t\t\t\tonBack={() => {\n\t\t\t\t\t\t\tselectedFile = null;\n\t\t\t\t\t\t\tpreviewUrl = null;\n\t\t\t\t\t\t\timagePath = null;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonUseSaved={useSavedPhoto}\n\t\t\t\t\t\tupload={contestUpload}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<p class=\"flex items-center gap-1.5 text-xs text-muted\">\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclass=\"h-3 w-3 shrink-0 text-muted\"\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.5\"\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>\n\t\t\t\t\t\t\t<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" /><path\n\t\t\t\t\t\t\t\td=\"M7 11V7a5 5 0 0 1 10 0v4\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t18+ · encrypted\n\t\t\t\t\t</p>\n\n\t\t\t\t\t{#if error}<p class=\"text-[13px] text-coral\">{error}</p>{/if}\n\t\t\t\t{:else}\n\t\t\t\t\t<!-- preview -->\n\t\t\t\t\t<div class=\"relative overflow-hidden rounded-2xl border border-border bg-black\">\n\t\t\t\t\t\t<div class=\"aspect-[4/5] w-full\">\n\t\t\t\t\t\t\t{#if mediaType === 'video'}\n\t\t\t\t\t\t\t\t<video\n\t\t\t\t\t\t\t\t\tsrc={previewUrl}\n\t\t\t\t\t\t\t\t\tmuted\n\t\t\t\t\t\t\t\t\tautoplay\n\t\t\t\t\t\t\t\t\tloop\n\t\t\t\t\t\t\t\t\tplaysinline\n\t\t\t\t\t\t\t\t\tclass=\"h-full w-full object-contain\"\n\t\t\t\t\t\t\t\t></video>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<img src={previewUrl} alt=\"your entry\" class=\"h-full w-full object-contain\" />\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{#if uploading}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute inset-0 grid place-items-center bg-bg/70 text-[12px] font-semibold tracking-wider text-muted uppercase\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tuploading…\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{:else if imagePath}\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"absolute top-3 left-3 rounded bg-green/90 px-2 py-0.5 text-[10px] font-bold tracking-wider text-bg uppercase\"\n\t\t\t\t\t\t\t\t>ready</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tclass=\"absolute right-3 bottom-3 cursor-pointer rounded-lg border border-border bg-bg/80 px-3 py-1.5 font-display text-[11px] font-bold tracking-[0.16em] text-text uppercase backdrop-blur-sm transition-colors hover:border-muted\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tchange\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\t\taccept=\"image/jpeg,image/png,image/webp\"\n\t\t\t\t\t\t\t\tclass=\"hidden\"\n\t\t\t\t\t\t\t\tonchange={handleInput}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- one-liner -->\n\t\t\t\t\t<label class=\"block\">\n\t\t\t\t\t\t<span class=\"text-[11px] font-semibold tracking-[0.16em] text-muted uppercase\"\n\t\t\t\t\t\t\t>your one-liner <span class=\"text-muted/40\">(optional)</span></span\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tname=\"tagline\"\n\t\t\t\t\t\t\tbind:value={tagline}\n\t\t\t\t\t\t\tmaxlength=\"80\"\n\t\t\t\t\t\t\tplaceholder=\"e.g. claims it's all natural\"\n\t\t\t\t\t\t\tclass=\"mt-1.5 w-full rounded-xl border border-border bg-surface px-3 py-2.5 text-sm text-text placeholder:text-muted/40 focus:border-muted focus:outline-none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span class=\"mt-1 block text-[10px] text-muted/40\"\n\t\t\t\t\t\t\t>shows on the broadcast under your name. {80 - tagline.length} left.</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</label>\n\n\t\t\t\t\t<!-- you'll appear as (no anonymous option — contest entries are attributed) -->\n\t\t\t\t\t<div class=\"rounded-xl border border-border bg-surface p-4\">\n\t\t\t\t\t\t<p class=\"text-[11px] text-muted/50\">you'll appear as</p>\n\t\t\t\t\t\t<p class=\"mt-1 font-display text-base font-bold text-coral\">\n\t\t\t\t\t\t\t{data.userNickname ?? 'anonymous'}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- consent -->\n\t\t\t\t\t<label\n\t\t\t\t\t\tclass=\"flex cursor-pointer items-start gap-3 rounded-xl border border-border bg-surface p-4\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tname=\"consent\"\n\t\t\t\t\t\t\tvalue=\"true\"\n\t\t\t\t\t\t\tbind:checked={consent}\n\t\t\t\t\t\t\tclass=\"mt-0.5 h-4 w-4 shrink-0 rounded border-border bg-surface\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span class=\"text-[12px] leading-relaxed text-muted\"\n\t\t\t\t\t\t\t>I confirm I'm <span class=\"font-semibold text-text\">18+</span> and consent to this photo\n\t\t\t\t\t\t\tappearing in the public contest, where logged-in users will see, vote on, and comment on\n\t\t\t\t\t\t\tit.</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</label>\n\n\t\t\t\t\t{#if error}<p class=\"text-[13px] text-coral\">{error}</p>{/if}\n\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tdisabled={!canSubmit}\n\t\t\t\t\t\tclass=\"rounded-lg bg-coral px-7 py-3.5 font-display text-sm font-bold text-white transition-all hover:bg-coral-dark disabled:cursor-not-allowed disabled:opacity-40\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{submitting ? 'entering…' : uploading ? 'uploading…' : 'enter the contest'}\n\t\t\t\t\t</button>\n\t\t\t\t{/if}\n\t\t\t</form>\n\t\t{/if}\n\t</div>\n</section>\n"],"version":3}