{"release_id":"01a1c502-4ad1-0000-ec62-adc54d3c69aa","chunk_id":"01a1c502-4cb7-75f0-b40c-a546cc4ae3f6","file":"16.CWtmO7Bd.mjs","mappings":"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","names":["FIRST_PHOTO_SWIPES","onMount","onKey","e","$$props","div","root","div_1","$.child","p","h2","p_1","a","$.sibling","text_3","$.reset","button","text_4","$.set_attribute","$3","t","resolve","$.delegated","$$args","$.transition","fly","fade","$.append","$$anchor","working","$.state","$.proxy","workingPhoto","$.user_effect","$.set","AXIS_VALUES","apply","$.get","root_1","div_2","div_3","ArenaIdentityPicker","node_1","next","div_4","button_1","text_2","$0","cubicOut","ARENA_CATEGORIES","hasSession","likesCount","uid","onArenaLikesChanged","r","j","isBlurred","anonTap","items","currentIndex","nextCursor","remainingSwipes","$.derived","tokens","AD_EVERY","feedAlbums","adCursor","adDismissedIndex","currentAd","adDragX","adDragging","adStartX","skipAd","recordAlbumImpression","viewAd","recordAlbumClick","goto","adCaptured","onAdPointerDown","onAdPointerMove","onAdPointerUp","voteResumed","resumeNote","untrack","consumeResume","RESUME_ARENA_VOTE","resumeVote","submissionId","voteType","analytics.trackAuthGateResumed","i","res","result","matchInfo","anonVoteGate","currentItem","saveResume","openArenaSignIn","surface","hitSignInGate","activeCategories","filterPickerOpen","setCategoryFilter","url","page","activeSeek","seekFromParam","setSeekFilter","nextPhoto","seekParam","seekToParam","loading","animating","animDirection","showUpgradeModal","openMatchChat","nick","sendMatchOpener","text","analytics.trackChatOpenerTapped","saveOpenerHandoff","rewinding","lastSwipe","reportSubmissionId","canRewind","upgradeHeadline","rewindSwipe","analytics.trackUpgradeModalOpen","target","$.update","dragX","dragY","openDirectChat","item","superEmoteOpen","nudgeDismissed","queuedEmotes","SvelteSet","emoteDragType","emoteOverCard","emotePickerOpen","superEmoteSending","superEmoteFreeLeft","superEmotePacks","TOKEN_PACKAGES","sendSuperEmote","emoteType","superFlyOut","emoteSeen","markEmoteSeen","pendingCost","superEmotes","msg","isEmpty","canDirectChat","preloadUrls","it","totalVotes","approvalPct","displayName","mySubs","hasSubs","showSubmissionNudge","bestSub","b","myTotalVotes","s","sub","myTotalEmotes","myApproval","rankTiers","myRank","rankProgress","votesToNext","dragging","startX","startY","SWIPE_THRESHOLD","cardMediaEl","viewedThisSession","dwellTimer","dwellStartedAt","clearDwell","fireView","mediaType","dwellMs","analytics.trackArenaView","blob","threshold","io","entry","video","tryPlay","dragRotation","dragOpacity","swipeDirection","onPointerDown","openSwipeLimit","rafPending","pendingClientX","pendingClientY","onPointerMove","onPointerUp","vote","onEmoteDragStart","onCardDragOver","onCardDragLeave","onCardDrop","type","toggleEmoteQueue","onEmoteDragEnd","newTotal","wall","emotesToSend","loadMore","q","cats","seek","have","$.head","$.each","node","link","root_2","$.template_effect","WallSubmitSheet","$$render","consequent","UpgradeModal","node_2","ReportContentModal","consequent_1","SuperEmoteModal","node_4","packId","root_5","ArenaTopBar","node_6","consequent_2","ArenaFilterSheet","node_7","root_6","div_5","div_6","text_1","p_2","a_1","consequent_3","div_7","root_7","div_8","p_3","p_4","span","text_5","div_9","a_2","text_8","text_9","consequent_4","div_10","node_9","div_11","div_12","node_10","div_13","root_8","div_14","div_15","node_11","img","root_9","div_16","root_10","consequent_5","alternate","span_1","text_10","span_2","text_11","div_17","div_18","getAvatarUrl","DuelAvatar","node_12","span_3","div_19","div_20","div_21","button_2","text_15","button_3","text_16","p_5","text_17","$.set_text","text_13","$.event","consequent_6","div_22","root_11","div_23","div_24","div_25","div_26","div_27","span_4","div_28","span_5","root_12","svg","path","div_29","div_30","root_13","svg_1","path_1","span_6","div_31","node_14","p_6","$.first_child","fragment_4","$.index","part","span_7","root_16","c","ARENA_CATEGORY_LABELS","consequent_7","p_7","div_32","button_4","text_23","a_3","text_24","p_8","fragment_6","p_9","a_4","text_27","consequent_8","alternate_1","text_18","div_33","fragment_7","node_16","div_34","root_19","div_35","div_36","span_8","text_28","div_37","span_9","text_29","div_38","node_17","video_1","root_21","img_1","root_22","consequent_10","alternate_2","div_39","root_23","consequent_11","alternate_3","div_40","root_24","text_30","consequent_12","div_41","root_25","text_31","consequent_13","div_42","root_26","text_32","$.set_class","consequent_14","div_43","root_27","button_5","root_29","svg_2","path_2","d","consequent_16","div_44","node_22","div_45","root_30","text_33","consequent_17","div_46","node_24","text_34","UserBadge","node_25","div_47","span_10","fragment_10","text_35","consequent_18","span_11","fragment_11","text_36","consequent_19","span_12","node_27","div_48","button_6","text_38","span_13","span_14","span_15","span_16","$$value","div_49","div_50","root_33","text_43","consequent_20","div_51","node_28","node_29","div_52","span_17","fragment_12","text_45","consequent_21","span_18","fragment_13","text_46","consequent_22","span_19","node_31","div_53","button_7","text_48","span_20","span_21","span_22","span_23","$.set_style","$2","$5","$8","div_54","node_32","button_8","root_36","consequent_23","button_9","node_33","div_55","root_37","div_56","root_38","div_57","isQueued","button_10","root_39","svg_3","path_3","p_10","text_53","consequent_24","button_11","node_34","consequent_25","button_12","node_35","button_13","root_40","consequent_26","div_58","node_36","button_14","root_41","consequent_27","button_15","button_16","node_37","button_17","root_42","consequent_28","node_38","div_59","root_43","div_60","isDragging","button_18","root_44","svg_4","path_4","span_24","text_54","ev","consequent_29","div_61","root_45","p_12","root_47","p_13","root_48","text_56","consequent_31","alternate_4","consequent_32","p_14","node_39","node_41","span_25","root_49","text_58","button_19","root_51","span_26","button_20","root_53","text_62","consequent_36","consequent_33","consequent_34","consequent_35","alternate_5","$1","consequent_9","consequent_37","alternate_6","div_62","root_55","consequent_38","div_63","div_64","div_65","span_27","button_21","root_56","text_64","consequent_39","div_66","cat","active","button_22","root_57","text_65","a_5","root_58","span_28","span_29","span_30","root_59","text_67","span_31","root_60","text_68","consequent_40","alternate_7","text_66","consequent_41","div_67","node_45","div_68","span_32","div_69","span_33","root_61","text_70","span_34","fragment_17","button_23","text_72","span_35","fragment_18","button_24","root_64","text_74","consequent_44","consequent_43","alternate_8","div_70","div_71","span_36","a_6","root_65","text_76","consequent_45","div_72","div_73","fragment_19","p_15","p_16","div_74","div_75","span_37","span_38","div_76","div_77","div_78","div_79","span_39","p_17","div_80","span_40","p_18","div_81","root_67","p_19","a_7","text_86","p_20","root_68","a_8","consequent_46","consequent_47","alternate_9","div_82","root_69","div_83","span_41","a_9","node_52","span_42","fragment_20","span_43","span_44","fragment_21","text_92","consequent_48","alternate_10","a_10","node_53","span_45","fragment_22","span_46","span_47","fragment_23","text_95","consequent_49","alternate_11","a_11","node_54","span_48","fragment_24","span_49","text_97","span_50","fragment_25","text_98","consequent_50","alternate_12","a_12","node_55","span_51","fragment_26","span_52","span_53","fragment_27","text_101","consequent_51","alternate_13","consequent_52","div_84","root_78","div_85","span_54","div_86","div_87","img_2","div_88","p_21","p_22","text_104","alternate_14","consequent_53","div_89","fragment_30","div_90","p_23","root_82","p_24","root_83","text_107","consequent_54","alternate_15","consequent_55","consequent_56","div_91","node_56","a_13","text_108","node_60","a_14","root_84","text_109","consequent_57","div_92","root_85","div_93","div_94","p_25","b_1","root_87","text_113","consequent_58","div_95","span_55","text_115","span_56","text_116","div_96","root_88","text_117","consequent_59","p_26","fragment_32","div_97","OPENERS","o","button_25","root_90","text_119","text_118","consequent_60","div_98","node_64","button_26","text_120","button_27","text_121","scale","consequent_61"],"sources":["../../../../../../src/lib/arena-wall-submit.ts","../../../../../../src/lib/components/arena/WallSubmitSheet.svelte","../../../../../../src/lib/components/arena/ArenaFilterSheet.svelte","../../../../../../src/routes/a/+page.svelte"],"sourcesContent":["/** The swipe limit, for someone with no photo in the arena (RAT-532).\n *  Client-safe.\n *\n *  0.8% buy at the 10-swipe limit, and 54% of swipers never submit — and\n *  without a photo of their own, nobody can like them back, so no match is\n *  possible. So the limit asks for the photo instead of Pro:\n *  \"you liked N — add a photo so they can like you back, +10 swipes\". The\n *  first photo tops the day back up to 10. */\n\n/** What the first photo is worth, in swipes. */\nexport const FIRST_PHOTO_SWIPES = 10;\n","<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\t/**\n\t * RAT-532: the daily swipe limit, for someone with no photo in the arena.\n\t * Nobody can like them back without one, so the honest next step is the\n\t * photo — which also earns the day's swipes back. Pro stays one line below.\n\t */\n\timport { onMount } from 'svelte';\n\timport { resolve } from '$app/paths';\n\timport { fly, fade } from 'svelte/transition';\n\timport { FIRST_PHOTO_SWIPES } from '$lib/arena-wall-submit';\n\n\tlet { likes, onclose, onpro }: { likes: number; onclose: () => void; onpro: () => void } =\n\t\t$props();\n\n\tonMount(() => {\n\t\tconst onKey = (e: KeyboardEvent) => e.key === 'Escape' && onclose();\n\t\twindow.addEventListener('keydown', onKey);\n\t\treturn () => window.removeEventListener('keydown', onKey);\n\t});\n</script>\n\n<div\n\tclass=\"fixed inset-0 z-[100] flex items-end justify-center bg-black/70 sm:items-center\"\n\ttransition:fade={{ duration: 150 }}\n\trole=\"presentation\"\n\tonclick={(e) => e.target === e.currentTarget && onclose()}\n>\n\t<div\n\t\trole=\"dialog\"\n\t\taria-modal=\"true\"\n\t\taria-labelledby=\"wall-submit-title\"\n\t\tclass=\"w-full max-w-md rounded-t-3xl bg-surface px-6 pt-6 pb-[calc(env(safe-area-inset-bottom)+24px)] sm:rounded-3xl sm:pb-6\"\n\t\ttransition:fly={{ y: 40, duration: 220 }}\n\t>\n\t\t<p class=\"text-[11px] font-bold tracking-[0.2em] text-muted uppercase\">\n\t\t\t{t(\"that's today's swipes\")}\n\t\t</p>\n\t\t<h2 id=\"wall-submit-title\" class=\"mt-2 font-display text-2xl leading-tight font-bold text-text\">\n\t\t\t{likes > 0\n\t\t\t\t? likes === 1\n\t\t\t\t\t? t('you liked 1 person today.')\n\t\t\t\t\t: t('you liked {n} people today.', { n: likes })\n\t\t\t\t: t('no one can find you yet.')}\n\t\t</h2>\n\t\t<p class=\"mt-2 text-sm leading-snug text-muted-2\">\n\t\t\t{t(\n\t\t\t\t\"they can't like you back until you have a photo in the arena. add yours and get {n} more swipes — free.\",\n\t\t\t\t{ n: FIRST_PHOTO_SWIPES }\n\t\t\t)}\n\t\t</p>\n\t\t<a\n\t\t\thref=\"{resolve('/a/submit')}?from=wall\"\n\t\t\tclass=\"mt-6 block w-full rounded-xl bg-orange py-3.5 text-center font-display text-sm font-bold text-white no-underline\"\n\t\t>\n\t\t\t{t('add your photo · +{n} swipes', { n: FIRST_PHOTO_SWIPES })}\n\t\t</a>\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"mt-3 w-full py-2 text-sm text-muted transition-colors hover:text-text\"\n\t\t\tonclick={onpro}\n\t\t>\n\t\t\t{t('or swipe unlimited with pro')}\n\t\t</button>\n\t</div>\n</div>\n","<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\t// RAT-426 (C1): the \"show me\" bottom sheet — wraps ArenaIdentityPicker (seek\n\t// variant) in the same modal chrome as ArenaCategoryPicker. Picks are batched\n\t// in a working copy and committed once on \"apply\" (one goto / server roundtrip\n\t// instead of one per tap). Photo tags map to the existing arena categories.\n\timport { fade, fly } from 'svelte/transition';\n\timport { cubicOut } from 'svelte/easing';\n\timport ArenaIdentityPicker from './ArenaIdentityPicker.svelte';\n\timport { AXIS_VALUES, type ArenaSeek } from '$lib/types/arena-identity';\n\n\tinterface Props {\n\t\topen: boolean;\n\t\tseek: ArenaSeek;\n\t\tphoto: string[];\n\t\tonclose: () => void;\n\t\tonapply: (seek: ArenaSeek, photo: string[]) => void;\n\t}\n\n\tlet { open, seek, photo, onclose, onapply }: Props = $props();\n\n\tlet working = $state<Record<string, string[]>>({});\n\tlet workingPhoto = $state<string[]>([]);\n\t$effect(() => {\n\t\tif (open) {\n\t\t\tworking = Object.fromEntries(\n\t\t\t\tObject.keys(AXIS_VALUES).map((a) => [a, [...(seek[a as keyof ArenaSeek] ?? [])]])\n\t\t\t);\n\t\t\tworkingPhoto = [...photo];\n\t\t}\n\t});\n\n\tfunction apply() {\n\t\tonapply(working as ArenaSeek, workingPhoto);\n\t\tonclose();\n\t}\n</script>\n\n{#if open}\n\t<div class=\"fixed inset-0 z-[100] flex items-end justify-center sm:items-center\" role=\"dialog\" aria-modal=\"true\">\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclass=\"absolute inset-0 cursor-default bg-black/70 backdrop-blur-sm\"\n\t\t\tonclick={onclose}\n\t\t\taria-label={t('close')}\n\t\t\ttransition:fade={{ duration: 180 }}\n\t\t></button>\n\n\t\t<div\n\t\t\tclass=\"relative flex max-h-[85vh] w-full max-w-md flex-col rounded-t-2xl border-x border-t border-border bg-bg sm:rounded-2xl sm:border\"\n\t\t\ttransition:fly={{ y: 80, duration: 240, easing: cubicOut }}\n\t\t>\n\t\t\t<div class=\"shrink-0 px-5 pt-5\">\n\t\t\t\t<div class=\"mx-auto mb-4 h-1 w-10 rounded-full bg-border sm:hidden\"></div>\n\t\t\t\t<h2 class=\"font-display text-lg font-bold\">{t('show me')}</h2>\n\t\t\t\t<p class=\"mt-0.5 text-[11px] tracking-wide text-muted/50 uppercase\">{t('loose · empty = everyone')}</p>\n\t\t\t</div>\n\n\t\t\t<div class=\"min-h-0 flex-1 overflow-y-auto px-5 py-4\">\n\t\t\t\t<ArenaIdentityPicker\n\t\t\t\t\tvariant=\"seek\"\n\t\t\t\t\tvalue={working}\n\t\t\t\t\tphoto={workingPhoto}\n\t\t\t\t\tonchange={(next, p) => {\n\t\t\t\t\t\tworking = next;\n\t\t\t\t\t\tworkingPhoto = p;\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div class=\"shrink-0 px-5 pt-2 pb-7\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"w-full cursor-pointer rounded-xl bg-orange py-3 font-display text-[14px] font-semibold text-white transition-colors hover:bg-orange-dark\"\n\t\t\t\t\tonclick={apply}\n\t\t\t\t>\n\t\t\t\t\t{t('apply')}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\timport { msg } from '$lib/i18n/mark';\n\timport { onMount, untrack } from 'svelte';\n\timport { fade, scale } from 'svelte/transition';\n\timport { SvelteSet } from 'svelte/reactivity';\n\timport { goto } from '$app/navigation';\n\timport WallSubmitSheet from '$lib/components/arena/WallSubmitSheet.svelte';\n\timport { page } from '$app/state';\n\timport UpgradeModal from '$lib/components/UpgradeModal.svelte';\n\timport ReportContentModal from '$lib/components/ReportContentModal.svelte';\n\timport SuperEmoteModal from '$lib/components/arena/SuperEmoteModal.svelte';\n\timport ArenaCategoryPicker from '$lib/components/arena/ArenaCategoryPicker.svelte';\n\timport ArenaFilterSheet from '$lib/components/arena/ArenaFilterSheet.svelte';\n\timport { seekFromParam, seekToParam, type ArenaSeek } from '$lib/types/arena-identity';\n\timport DuelAvatar from '$lib/components/duel/DuelAvatar.svelte';\n\timport UserBadge from '$lib/components/UserBadge.svelte';\n\timport ArenaTopBar from '$lib/components/arena/ArenaTopBar.svelte';\n\timport { onArenaLikesChanged } from '$lib/realtime/likes';\n\timport { getAvatarUrl } from '$lib/avatar';\n\timport { TOKEN_PACKAGES } from '$lib/token-packages';\n\timport type { AlbumCard } from '$lib/types/album';\n\timport { recordAlbumImpression, recordAlbumClick } from '$lib/album-impressions';\n\timport * as analytics from '$lib/analytics';\n\timport { OPENERS, saveOpenerHandoff } from '$lib/chat-openers';\n\timport { hitSignInGate, RESUME_ARENA_VOTE } from '$lib/contextual-sign-in';\n\timport { consumeResume, saveResume } from '$lib/oauth-resume';\n\timport {\n\t\tARENA_CATEGORIES,\n\t\tARENA_CATEGORY_LABELS,\n\t\ttype ArenaCategory,\n\t\ttype ArenaFeedItem,\n\t\ttype ArenaSubmissionDashboard\n\t} from '$lib/types/arena';\n\n\tconst ALL_CATEGORIES_COUNT = ARENA_CATEGORIES.length;\n\n\tlet { data } = $props();\n\n\t// RAT-272 follow-up: 18+ consent gate ripped out (banner + i'm-18+\n\t// button + localStorage flag + analytics event). T&C accepted at\n\t// signup covers the same legal ground; the per-visit \"are you 18\"\n\t// banner just blocked the experience for users who already agreed.\n\t// Auth gate stays — anonymous viewers still see the sign-in banner\n\t// over a blurred deck.\n\tconst hasSession = $derived(!!data.session);\n\n\t// RAT-420: live likes badge. Reseed from data on load re-runs (RAT-117),\n\t// refetch the tiny count endpoint whenever the server hints a change.\n\tlet likesCount = $state(data.likesCount ?? 0);\n\t$effect(() => {\n\t\tlikesCount = data.likesCount ?? 0;\n\t});\n\t$effect(() => {\n\t\tconst uid = data.session?.user?.id;\n\t\tif (!uid) return;\n\t\treturn onArenaLikesChanged(uid, async () => {\n\t\t\ttry {\n\t\t\t\tconst r = await fetch('/api/arena/likes-count');\n\t\t\t\tif (r.ok) {\n\t\t\t\t\tconst j = await r.json();\n\t\t\t\t\tif (typeof j.count === 'number') likesCount = j.count;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// hint lost — the next event or page load re-syncs\n\t\t\t}\n\t\t});\n\t});\n\n\tconst isBlurred = $derived(!hasSession);\n\t// RAT-525: a signed-out visitor's ✓ / ✗ (and a swipe) are live and open the\n\t// sign-in sheet, and the swipes line says how to get the free ones.\n\tconst anonTap = $derived(!hasSession);\n\n\tlet items = $state<ArenaFeedItem[]>(data.items ?? []);\n\tlet currentIndex = $state(0);\n\tlet nextCursor = $state<string | null>(data.nextCursor);\n\t// Writable deriveds: a swipe or an emote adjusts them locally, and a load re-run\n\t// (a filter change, or signing in from the sheet, RAT-525) resets them to the\n\t// server's numbers. As plain $state the signed-out 0 swipes outlived the\n\t// sign-in, and the first swipe opened the paywall.\n\tlet remainingSwipes = $derived<number>(data.remainingSwipes ?? 0);\n\tlet tokens = $derived<number>(data.tokens ?? 0);\n\n\t// ── Album promo ads ──────────────────────────────────────────────────────\n\t// A swipeable album card shown OVER the deck every few swipes. Deliberately\n\t// isolated from the vote loop: it never touches items/currentItem/vote(). The\n\t// real card waits underneath; skipping (swipe / button) reveals it, tapping\n\t// \"view\" leaves for the album page.\n\tconst AD_EVERY = 5;\n\tconst feedAlbums = $derived((data.feedAlbums ?? []) as AlbumCard[]);\n\tlet adCursor = $state(0);\n\tlet adDismissedIndex = $state(-1);\n\t$effect(() => {\n\t\tvoid data.items; // new deck (filter change) → reset the ad schedule\n\t\tadCursor = 0;\n\t\tadDismissedIndex = -1;\n\t});\n\tconst currentAd = $derived(\n\t\thasSession &&\n\t\t\tcurrentIndex > 0 &&\n\t\t\tcurrentIndex % AD_EVERY === 0 &&\n\t\t\tadCursor < feedAlbums.length &&\n\t\t\tadDismissedIndex !== currentIndex\n\t\t\t? feedAlbums[adCursor]\n\t\t\t: null\n\t);\n\tlet adDragX = $state(0);\n\tlet adDragging = $state(false);\n\tlet adStartX = 0;\n\tfunction skipAd() {\n\t\tadDismissedIndex = currentIndex;\n\t\tadCursor += 1;\n\t\tadDragX = 0;\n\t}\n\t// RAT-449: the promo ad is shown programmatically over the deck, so count an\n\t// impression when a new album surfaces (dedup is once-per-session).\n\t$effect(() => {\n\t\tif (currentAd) recordAlbumImpression(currentAd.id, 'arena');\n\t});\n\tfunction viewAd() {\n\t\tif (!currentAd) return;\n\t\trecordAlbumClick(currentAd.id, 'arena');\n\t\tgoto(`/album/${currentAd.id}?src=arena`);\n\t}\n\t// Capture the pointer only once a real drag starts (>10px). Capturing on\n\t// pointerdown retargeted the eventual `click` to this wrapper, so the\n\t// view/skip buttons inside never received it — tap-to-view did nothing.\n\tlet adCaptured = false;\n\tfunction onAdPointerDown(e: PointerEvent) {\n\t\tadDragging = true;\n\t\tadCaptured = false;\n\t\tadStartX = e.clientX;\n\t}\n\tfunction onAdPointerMove(e: PointerEvent) {\n\t\tif (!adDragging) return;\n\t\tadDragX = e.clientX - adStartX;\n\t\tif (!adCaptured && Math.abs(adDragX) > 10) {\n\t\t\tadCaptured = true;\n\t\t\t(e.currentTarget as HTMLElement | null)?.setPointerCapture(e.pointerId);\n\t\t}\n\t}\n\tfunction onAdPointerUp() {\n\t\tif (!adDragging) return;\n\t\tadDragging = false;\n\t\tif (Math.abs(adDragX) >= 90) skipAd();\n\t\telse adDragX = 0;\n\t}\n\n\t// RAT-117 pattern: $state seeded from `data` stays frozen when SvelteKit\n\t// invalidates the load (e.g. when the category filter changes via goto).\n\t// Resync on every data change so a new filter actually swaps the deck.\n\t$effect(() => {\n\t\titems = data.items ?? [];\n\t\tnextCursor = data.nextCursor ?? null;\n\t\tcurrentIndex = 0;\n\t});\n\n\t// RAT-525: back from signing in at a ✓ / ✗ — cast the vote they made. Once\n\t// per page; the card leaves the fresh deck so it isn't shown to them again.\n\tlet voteResumed = false;\n\tlet resumeNote = $state<string | null>(null);\n\t$effect(() => {\n\t\tif (!hasSession || voteResumed) return;\n\t\tvoteResumed = true;\n\t\tuntrack(() => {\n\t\t\tconst r = consumeResume<{ submissionId?: unknown; vote?: unknown }>(RESUME_ARENA_VOTE);\n\t\t\tif (typeof r?.submissionId !== 'string' || (r.vote !== 'up' && r.vote !== 'down')) return;\n\t\t\tvoid resumeVote(r.submissionId, r.vote);\n\t\t});\n\t});\n\n\tasync function resumeVote(submissionId: string, voteType: 'up' | 'down') {\n\t\tanalytics.trackAuthGateResumed({ surface: 'arena_vote' });\n\t\tconst at = items.findIndex((i) => i.id === submissionId);\n\t\tif (at >= currentIndex) items = items.filter((i) => i.id !== submissionId);\n\t\ttry {\n\t\t\tconst res = await fetch('/api/arena/vote', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ submissionId, vote: voteType })\n\t\t\t});\n\t\t\tconst result = await res.json();\n\t\t\tif (typeof result.remainingSwipes === 'number') remainingSwipes = result.remainingSwipes;\n\t\t\tif (result.match) matchInfo = result.match;\n\t\t\tif (res.ok) {\n\t\t\t\tresumeNote = voteType === 'up' ? t('your like counted') : t('your swipe counted');\n\t\t\t\tsetTimeout(() => (resumeNote = null), 3500);\n\t\t\t}\n\t\t} catch {\n\t\t\t// the vote didn't land; the deck is theirs to swipe as usual\n\t\t}\n\t}\n\n\t/** A signed-out ✓ / ✗ in the `tap` arm: keep the vote, open sign-in. With\n\t *  contextual-sign-in in control that's the sign-in page, and the vote still\n\t *  goes through when they come back. */\n\tfunction anonVoteGate(voteType: 'up' | 'down') {\n\t\tif (!currentItem) return;\n\t\tsaveResume(RESUME_ARENA_VOTE, { submissionId: currentItem.id, vote: voteType });\n\t\topenArenaSignIn('arena_vote');\n\t}\n\n\tfunction openArenaSignIn(surface: 'arena_vote' | 'arena_swipes') {\n\t\thitSignInGate({\n\t\t\tsurface,\n\t\t\tnext: '/a',\n\t\t\tcontext: {\n\t\t\t\ttitle: t('sign in to swipe'),\n\t\t\t\tdetail: t('{n} free swipes a day. one tap with google, or email — no password.', { n: data.freeDailySwipes })\n\t\t\t}\n\t\t});\n\t}\n\n\t// RAT-253: active category filter, mirrored from server load. The picker\n\t// emits the full next array; we push it into ?cats= and the load re-runs\n\t// (which re-seeds `items` via the $effect above).\n\tconst activeCategories = $derived<ArenaCategory[]>(\n\t\t(data.activeCategories ?? []) as ArenaCategory[]\n\t);\n\tlet filterPickerOpen = $state(false);\n\n\tfunction setCategoryFilter(next: ArenaCategory[]) {\n\t\tconst url = new URL(page.url);\n\t\tif (next.length === 0) {\n\t\t\turl.searchParams.delete('cats');\n\t\t} else {\n\t\t\turl.searchParams.set('cats', next.join(','));\n\t\t}\n\t\tvoid goto(`${url.pathname}${url.search}`, { keepFocus: true, noScroll: true });\n\t}\n\n\t// RAT-426 (C1): the \"show me\" identity filter. Seeded from the server-sanitized\n\t// ?seek= param; committing writes both ?seek= (identity axes) and ?cats= (photo\n\t// tags) in one goto → one server roundtrip, one soft-ranked deck reload.\n\tconst activeSeek = $derived<ArenaSeek>(seekFromParam(data.activeSeek ?? ''));\n\tfunction setSeekFilter(next: ArenaSeek, nextPhoto: string[]) {\n\t\tconst url = new URL(page.url);\n\t\tconst seekParam = seekToParam(next);\n\t\tif (seekParam) url.searchParams.set('seek', seekParam);\n\t\telse url.searchParams.delete('seek');\n\t\tif (nextPhoto.length) url.searchParams.set('cats', nextPhoto.join(','));\n\t\telse url.searchParams.delete('cats');\n\t\tvoid goto(`${url.pathname}${url.search}`, { keepFocus: true, noScroll: true });\n\t}\n\tlet loading = $state(false);\n\tlet animating = $state(false);\n\tlet animDirection = $state<'left' | 'right' | null>(null);\n\tlet showUpgradeModal = $state(false);\n\tlet emoteError = $state<string | null>(null);\n\n\t// RAT-329: \"it's a match\" overlay. Set from the vote response when an UP\n\t// vote completes a mutual like. The matched person's name is revealed here\n\t// even if their submission was anonymous (the reveal happens only on match).\n\ttype MatchInfo = {\n\t\tuserId: string;\n\t\tnickname: string | null;\n\t\tavatarPath: string | null;\n\t\twasAnonymous: boolean;\n\t};\n\tlet matchInfo = $state<MatchInfo | null>(null);\n\n\tfunction openMatchChat() {\n\t\tconst nick = matchInfo?.nickname;\n\t\tmatchInfo = null;\n\t\t// Falls back to the inbox when the match has no nickname set.\n\t\tvoid goto(nick ? `/c/${encodeURIComponent(nick)}?from=arena_match` : '/c');\n\t}\n\n\t// RAT-522: a one-tap opener on the overlay — kept for the DM, which sends it\n\t// the moment it opens, so the first message goes before anything else.\n\tfunction sendMatchOpener(text: string) {\n\t\tif (!matchInfo?.nickname) return;\n\t\tanalytics.trackChatOpenerTapped({\n\t\t\tcontext: 'arena_match',\n\t\t\tsurface: 'match_overlay',\n\t\t\toneTap: true\n\t\t});\n\t\tsaveOpenerHandoff(matchInfo.userId, text);\n\t\topenMatchChat();\n\t}\n\n\t// RAT-418: Pro rewind + direct-chat. `lastSwipe` tracks the single most recent\n\t// undoable swipe (set by vote(), cleared by a super emote which can't be undone).\n\tlet rewinding = $state(false);\n\tlet lastSwipe = $state<{ id: string } | null>(null);\n\t// Report modal — captures the submission id at tap time so a swipe that\n\t// advances currentItem mid-flow can't retarget the report.\n\tlet reportSubmissionId = $state<string | null>(null);\n\tconst canRewind = $derived(lastSwipe !== null);\n\t// Custom headline for the upgrade modal (the direct-chat gate). Always cleared\n\t// on close so it never leaks to a later, unrelated upgrade trigger.\n\tlet upgradeHeadline = $state<string | null>(null);\n\n\tasync function rewindSwipe() {\n\t\tif (!data.isSubscribed) {\n\t\t\tupgradeHeadline = null;\n\t\t\tshowUpgradeModal = true;\n\t\t\tanalytics.trackUpgradeModalOpen('arena_rewind');\n\t\t\treturn;\n\t\t}\n\t\tif (rewinding || animating || !lastSwipe) return;\n\t\tconst target = lastSwipe.id;\n\t\trewinding = true;\n\t\ttry {\n\t\t\tconst res = await fetch('/api/arena/rewind', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ submissionId: target })\n\t\t\t});\n\t\t\tconst r = await res.json().catch(() => ({}));\n\t\t\tif (r?.ok) {\n\t\t\t\tlastSwipe = null; // one step back only, Tinder-style\n\t\t\t\tif (currentIndex > 0) currentIndex--;\n\t\t\t\tdragX = 0;\n\t\t\t\tdragY = 0;\n\t\t\t}\n\t\t} finally {\n\t\t\trewinding = false;\n\t\t}\n\t}\n\n\tfunction openDirectChat() {\n\t\tconst item = currentItem;\n\t\tif (!item) return;\n\t\tif (!data.isSubscribed) {\n\t\t\tsuperEmoteOpen = false;\n\t\t\tupgradeHeadline = t('unlimited direct chat');\n\t\t\tshowUpgradeModal = true;\n\t\t\tanalytics.trackUpgradeModalOpen('arena_direct_chat');\n\t\t\treturn;\n\t\t}\n\t\t// Pro: open the 1:1 DM directly, just like the match overlay does.\n\t\tif (item.isAnonymous || !item.nickname) return;\n\t\tvoid goto(`/c/${encodeURIComponent(item.nickname)}?from=arena`);\n\t}\n\n\t// RAT-329: a signed-in voter with no submission can't be matched back —\n\t// they like cards but no one can like them. Nudge them to add one photo.\n\t// Dismiss is per-load only (not persisted): a fresh visit re-surfaces it,\n\t// which is the point — every swiper should become matchable.\n\tlet nudgeDismissed = $state(false);\n\n\t// Emote queue state\n\tlet queuedEmotes = new SvelteSet<string>();\n\tlet emoteDragType = $state<string | null>(null);\n\tlet emoteOverCard = $state(false);\n\tlet emotePickerOpen = $state(false);\n\t// RAT-412 — super emote modal replaces the queue tray on the star button.\n\tlet superEmoteOpen = $state(false);\n\tlet superEmoteSending = $state(false);\n\tlet superEmoteFreeLeft = $state<number>(data.superEmoteFreeLeft ?? 0);\n\t// Resync from server on load re-runs (RAT-117 pattern); a send updates it\n\t// locally from the response and data is unchanged, so this won't clobber it.\n\t$effect(() => {\n\t\tsuperEmoteFreeLeft = data.superEmoteFreeLeft ?? 0;\n\t});\n\tconst superEmotePacks = TOKEN_PACKAGES.map((p) => ({\n\t\tid: p.id,\n\t\ttokens: p.tokens,\n\t\tpriceLabel: `$${(p.priceCents / 100).toFixed(2)}`,\n\t\tpopular: p.popular,\n\t\twhale: p.whale\n\t}));\n\tasync function sendSuperEmote(emoteType: string) {\n\t\tconst item = currentItem;\n\t\tif (!item || superEmoteSending) return;\n\t\tsuperEmoteSending = true;\n\t\ttry {\n\t\t\tconst res = await fetch('/api/arena/super-vote', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ submissionId: item.id, emoteType })\n\t\t\t});\n\t\t\tconst r = await res.json().catch(() => ({}));\n\t\t\tif (r?.error === 'insufficient_tokens') {\n\t\t\t\tsuperEmoteOpen = false;\n\t\t\t\tshowUpgradeModal = true;\n\t\t\t\tanalytics.trackUpgradeModalOpen('arena_super_emote');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (r?.ok) {\n\t\t\t\tif (r.source === 'tokens') tokens = Math.max(0, tokens - 2);\n\t\t\t\tif (typeof r.freeLeft === 'number') superEmoteFreeLeft = r.freeLeft;\n\t\t\t\t// The server records the up-vote (bypassing the daily swipe cap) and\n\t\t\t\t// returns the match if it completed one — show the overlay.\n\t\t\t\tif (r.match) matchInfo = r.match;\n\t\t\t\tsuperEmoteOpen = false;\n\t\t\t\tsuperFlyOut();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsuperEmoteOpen = false;\n\t\t} finally {\n\t\t\tsuperEmoteSending = false;\n\t\t}\n\t}\n\t// \"new\" discovery nudge on the emote button — twinkle + badge until the user\n\t// opens the picker once (persisted), so the spend feature advertises itself.\n\tlet emoteSeen = $state(true);\n\tfunction markEmoteSeen() {\n\t\tif (emoteSeen) return;\n\t\temoteSeen = true;\n\t\ttry {\n\t\t\tlocalStorage.setItem('arena_emote_seen', '1');\n\t\t} catch {\n\t\t\t// ignore (private mode / blocked storage)\n\t\t}\n\t}\n\tonMount(() => {\n\t\temoteSeen = localStorage.getItem('arena_emote_seen') === '1';\n\t});\n\n\tconst pendingCost = $derived(queuedEmotes.size * 2);\n\n\tconst superEmotes = [\n\t\t{\n\t\t\tt: 'fire',\n\t\t\tlabel: msg('fire'),\n\t\t\td: 'M12 23c-3.866 0-7-3.134-7-7 0-2.812 1.882-5.346 3.5-7.2.396-.454 1.1-.137 1.042.47-.112 1.155.169 2.3.77 3.28.073.12.2.083.24-.043.357-1.14.89-2.397 1.61-3.507C13.662 6.632 15.5 4.5 15.5 1c0-.345.378-.547.651-.347C18.848 2.636 21 6.07 21 9.5c0 1.907-.625 3.64-1.686 5.024.052-.142.086-.292.086-.449 0-1.37-1.008-3.075-2.4-3.075-.852 0-1.6.742-1.6 1.6 0 .47.12.865.332 1.202A6.965 6.965 0 0112 23z'\n\t\t},\n\t\t{\n\t\t\tt: 'water',\n\t\t\tlabel: msg('wet'),\n\t\t\td: 'M12 21.5c-4.418 0-8-3.358-8-7.5 0-3.944 5.475-10.575 7.058-12.414a1.25 1.25 0 011.884 0C14.525 3.425 20 10.056 20 14c0 4.142-3.582 7.5-8 7.5z'\n\t\t},\n\t\t{\n\t\t\tt: 'crown',\n\t\t\tlabel: msg('king'),\n\t\t\td: 'M2.8 14.6L1 6l5.5 4L12 3l5.5 7L23 6l-1.8 8.6H2.8zM4 19h16v2H4v-2z'\n\t\t},\n\t\t{\n\t\t\tt: 'skull',\n\t\t\tlabel: msg('dead'),\n\t\t\td: 'M12 2C6.477 2 2 6.477 2 12c0 3.667 1.967 6.87 4.9 8.616V22a1 1 0 001 1h8.2a1 1 0 001-1v-1.384C20.033 18.87 22 15.667 22 12c0-5.523-4.477-10-10-10zM8.5 13a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm7 0a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM10 18v-2h1.5v2H10zm2.5 0v-2H14v2h-1.5z'\n\t\t}\n\t];\n\n\tconst currentItem = $derived(items[currentIndex] ?? null);\n\tconst isEmpty = $derived(items.length === 0 || currentIndex >= items.length);\n\t// RAT-418: direct-chat only routes to a card that has a nickname (not anonymous).\n\tconst canDirectChat = $derived(\n\t\t!!currentItem && !currentItem.isAnonymous && !!currentItem.nickname\n\t);\n\n\t// Warm the browser cache for the next 2 photo cards so swipe transitions paint instantly.\n\t// Skips videos (browsers don't preload <link as=\"video\"> reliably; the in-DOM <video> handles its own buffering).\n\tconst preloadUrls = $derived([\n\t\t// Dedupe by URL: the each below is keyed by the URL string itself, so two\n\t\t// upcoming cards sharing an imageUrl would produce a duplicate key and\n\t\t// crash the render (each_key_duplicate) — a Set collapses the collision.\n\t\t...new Set(\n\t\t\titems\n\t\t\t\t.slice(currentIndex + 1, currentIndex + 3)\n\t\t\t\t.filter((it) => it.imageUrl && it.mediaType !== 'video')\n\t\t\t\t.map((it) => it.imageUrl as string)\n\t\t)\n\t]);\n\tconst totalVotes = $derived(\n\t\tcurrentItem ? currentItem.totalUpvotes + currentItem.totalDownvotes : 0\n\t);\n\tconst approvalPct = $derived(\n\t\ttotalVotes > 0 && currentItem ? Math.round((currentItem.totalUpvotes / totalVotes) * 100) : 0\n\t);\n\tconst displayName = $derived(\n\t\tcurrentItem\n\t\t\t? currentItem.isAnonymous || !currentItem.nickname\n\t\t\t\t? t('anonymous')\n\t\t\t\t: currentItem.nickname\n\t\t\t: ''\n\t);\n\n\t// My stats — computed from mySubmissions\n\tconst mySubs = $derived((data.mySubmissions ?? []) as ArenaSubmissionDashboard[]);\n\tconst hasSubs = $derived(mySubs.length > 0);\n\tconst showSubmissionNudge = $derived(hasSession && !hasSubs && !nudgeDismissed);\n\tconst bestSub = $derived(\n\t\thasSubs ? mySubs.reduce((a, b) => ((a.approvalRate ?? -1) >= (b.approvalRate ?? -1) ? a : b)) : null\n\t);\n\tconst myTotalVotes = $derived(\n\t\tmySubs.reduce((s, sub) => s + sub.totalUpvotes + sub.totalDownvotes, 0)\n\t);\n\tconst myTotalEmotes = $derived(\n\t\tmySubs.reduce(\n\t\t\t(s, sub) => s + sub.emotes.fire + sub.emotes.water + sub.emotes.crown + sub.emotes.skull,\n\t\t\t0\n\t\t)\n\t);\n\tconst myApproval = $derived(\n\t\tmyTotalVotes > 0\n\t\t\t? Math.round((mySubs.reduce((s, sub) => s + sub.totalUpvotes, 0) / myTotalVotes) * 100)\n\t\t\t: 0\n\t);\n\n\t// Rank tiers\n\tconst rankTiers = [\n\t\t{ name: msg('fresh meat'), img: '/img/ranks/fresh-meat.png', min: 0, next: 20 },\n\t\t{ name: msg('grower'), img: '/img/ranks/grower.png', min: 20, next: 50 },\n\t\t{ name: msg('shower'), img: '/img/ranks/shower.png', min: 50, next: 100 },\n\t\t{ name: msg('crowd pleaser'), img: '/img/ranks/crowd-pleaser.png', min: 100, next: 200 },\n\t\t{ name: msg('main character'), img: '/img/ranks/main-character.png', min: 200, next: 500 },\n\t\t{ name: msg('final boss'), img: '/img/ranks/final-boss.png', min: 500, next: null }\n\t];\n\tconst myRank = $derived(rankTiers.findLast((t) => myTotalVotes >= t.min) ?? rankTiers[0]);\n\tconst rankProgress = $derived(\n\t\tmyRank.next\n\t\t\t? Math.min(100, ((myTotalVotes - myRank.min) / (myRank.next - myRank.min)) * 100)\n\t\t\t: 100\n\t);\n\tconst votesToNext = $derived(myRank.next ? myRank.next - myTotalVotes : 0);\n\n\t// Drag/swipe state\n\tlet dragX = $state(0);\n\tlet dragY = $state(0);\n\tlet dragging = $state(false);\n\tlet startX = 0;\n\tlet startY = 0;\n\tconst SWIPE_THRESHOLD = 100;\n\n\t// View tracking — IntersectionObserver-driven dwell timer per session-deduped submissionId.\n\t// Threshold: video ≥2s sustained, image ≥1s. Fires once per submission per session.\n\t// Reports to PostHog (arena_view) + bumps total_views via sendBeacon (anon-friendly).\n\tlet cardMediaEl: HTMLDivElement | undefined = $state();\n\tconst viewedThisSession = new SvelteSet<string>();\n\tlet dwellTimer: ReturnType<typeof setTimeout> | null = null;\n\tlet dwellStartedAt = 0;\n\n\tfunction clearDwell() {\n\t\tif (dwellTimer) {\n\t\t\tclearTimeout(dwellTimer);\n\t\t\tdwellTimer = null;\n\t\t}\n\t\tdwellStartedAt = 0;\n\t}\n\n\tfunction fireView(submissionId: string, mediaType: 'image' | 'video', dwellMs: number) {\n\t\tif (viewedThisSession.has(submissionId)) return;\n\t\tviewedThisSession.add(submissionId);\n\t\tanalytics.trackArenaView(submissionId, mediaType, dwellMs);\n\t\ttry {\n\t\t\tconst blob = new Blob([JSON.stringify({ submissionId })], { type: 'application/json' });\n\t\t\tnavigator.sendBeacon('/api/arena/view', blob);\n\t\t} catch {\n\t\t\t// sendBeacon unavailable — fall back to fire-and-forget fetch\n\t\t\tfetch('/api/arena/view', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ submissionId }),\n\t\t\t\tkeepalive: true\n\t\t\t}).catch(() => {});\n\t\t}\n\t}\n\n\t$effect(() => {\n\t\tif (!cardMediaEl || !currentItem || isBlurred) return;\n\t\tconst sub = currentItem;\n\t\tclearDwell();\n\t\tconst threshold = sub.mediaType === 'video' ? 2000 : 1000;\n\n\t\tconst io = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tif (entry.isIntersecting && entry.intersectionRatio >= 0.5) {\n\t\t\t\t\tif (!dwellTimer && !viewedThisSession.has(sub.id)) {\n\t\t\t\t\t\tdwellStartedAt = Date.now();\n\t\t\t\t\t\tdwellTimer = setTimeout(() => {\n\t\t\t\t\t\t\tfireView(sub.id, sub.mediaType, Date.now() - dwellStartedAt);\n\t\t\t\t\t\t\tdwellTimer = null;\n\t\t\t\t\t\t}, threshold);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tclearDwell();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ threshold: [0, 0.5, 1] }\n\t\t);\n\n\t\tio.observe(cardMediaEl);\n\t\treturn () => {\n\t\t\tclearDwell();\n\t\t\tio.disconnect();\n\t\t};\n\t});\n\n\t// Defensive autoplay nudge — iOS Safari + Chrome sometimes block the\n\t// `autoplay` attribute after an OAuth round-trip (RAT-193), navigation, or\n\t// bfcache restore, even with muted+playsinline. Plus the loop attribute\n\t// can hiccup on memory pressure (RAT-194). Retry play() at every stage:\n\t// immediately, on metadata/canplay, and on every `pause` event.\n\t$effect(() => {\n\t\tif (!cardMediaEl || !currentItem || isBlurred) return;\n\t\tif (currentItem.mediaType !== 'video') return;\n\t\tconst video = cardMediaEl.querySelector('video');\n\t\tif (!video) return;\n\t\tconst tryPlay = () => {\n\t\t\tif (!video.paused) return;\n\t\t\tvoid video.play().catch(() => {});\n\t\t};\n\t\ttryPlay();\n\t\tvideo.addEventListener('loadedmetadata', tryPlay);\n\t\tvideo.addEventListener('canplay', tryPlay);\n\t\tvideo.addEventListener('pause', tryPlay);\n\t\treturn () => {\n\t\t\tvideo.removeEventListener('loadedmetadata', tryPlay);\n\t\t\tvideo.removeEventListener('canplay', tryPlay);\n\t\t\tvideo.removeEventListener('pause', tryPlay);\n\t\t};\n\t});\n\n\tconst dragRotation = $derived(dragX * 0.08);\n\tconst dragOpacity = $derived(Math.max(0.3, 1 - Math.abs(dragX) / 400));\n\tconst swipeDirection = $derived(dragX > 40 ? 'right' : dragX < -40 ? 'left' : null);\n\n\tfunction onPointerDown(e: PointerEvent) {\n\t\tif (animating || !currentItem) return;\n\t\t// Out of swipes — open the paywall modal instead of starting a drag.\n\t\t// Without this guard the user can drag the card out, vote() snaps it\n\t\t// back, but the perceived \"I can swipe\" feeling lingers; worse, before\n\t\t// RAT-77 the daily_limit code path would resurrect a swipe and the next\n\t\t// drag would advance a card without counting. Fix at the entry point\n\t\t// so neither the visual nor the data path lets a swipe through.\n\t\tif (hasSession && remainingSwipes <= 0) {\n\t\t\tvoid openSwipeLimit();\n\t\t\treturn;\n\t\t}\n\t\tdragging = true;\n\t\tstartX = e.clientX;\n\t\tstartY = e.clientY;\n\t\t// RAT-174: setPointerCapture on currentTarget (the .arena-card-drag div the\n\t\t// listener is bound to) — was walking the DOM with .closest() per pointerdown.\n\t\t(e.currentTarget as HTMLElement | null)?.setPointerCapture(e.pointerId);\n\t}\n\n\t// RAT-174: pointermove fires 100+ times/sec on touchscreens. Each write to\n\t// dragX/dragY triggers 3 derived recomputes and a style attribute update on\n\t// the entire card subtree. Coalesce into one update per animation frame —\n\t// drops INP cost from ~N writes per drag to ~30/sec max, with no visual\n\t// difference (the browser only paints once per frame anyway).\n\tlet rafPending = false;\n\tlet pendingClientX = 0;\n\tlet pendingClientY = 0;\n\n\tfunction onPointerMove(e: PointerEvent) {\n\t\tif (!dragging) return;\n\t\tpendingClientX = e.clientX;\n\t\tpendingClientY = e.clientY;\n\t\tif (rafPending) return;\n\t\trafPending = true;\n\t\trequestAnimationFrame(() => {\n\t\t\trafPending = false;\n\t\t\tif (!dragging) return;\n\t\t\tdragX = pendingClientX - startX;\n\t\t\tdragY = (pendingClientY - startY) * 0.3;\n\t\t});\n\t}\n\n\tfunction onPointerUp() {\n\t\tif (!dragging) return;\n\t\tdragging = false;\n\t\t// Make sure any in-flight rAF doesn't write a stale position after release.\n\t\trafPending = false;\n\t\tif (Math.abs(dragX) >= SWIPE_THRESHOLD) {\n\t\t\tvote(dragX > 0 ? 'up' : 'down');\n\t\t} else {\n\t\t\tdragX = 0;\n\t\t\tdragY = 0;\n\t\t}\n\t}\n\n\t// Emote drag handlers\n\tfunction onEmoteDragStart(e: DragEvent, emoteType: string) {\n\t\temoteDragType = emoteType;\n\t\te.dataTransfer!.effectAllowed = 'copy';\n\t\te.dataTransfer!.setData('text/plain', emoteType);\n\t}\n\n\tfunction onCardDragOver(e: DragEvent) {\n\t\te.preventDefault();\n\t\te.dataTransfer!.dropEffect = 'copy';\n\t\temoteOverCard = true;\n\t}\n\n\tfunction onCardDragLeave() {\n\t\temoteOverCard = false;\n\t}\n\n\tfunction onCardDrop(e: DragEvent) {\n\t\te.preventDefault();\n\t\temoteOverCard = false;\n\t\tconst type = emoteDragType || e.dataTransfer!.getData('text/plain');\n\t\tif (type) toggleEmoteQueue(type);\n\t\temoteDragType = null;\n\t}\n\n\tfunction onEmoteDragEnd() {\n\t\temoteDragType = null;\n\t\temoteOverCard = false;\n\t}\n\n\tfunction toggleEmoteQueue(emoteType: string) {\n\t\tif (queuedEmotes.has(emoteType)) {\n\t\t\tqueuedEmotes.delete(emoteType);\n\t\t} else if (queuedEmotes.size < 4) {\n\t\t\t// Pre-check: can the user afford the new total?\n\t\t\tconst newTotal = (queuedEmotes.size + 1) * 2;\n\t\t\tif (tokens < newTotal) {\n\t\t\t\tshowUpgradeModal = true;\n\t\t\t\tanalytics.trackUpgradeModalOpen('arena_emote');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tqueuedEmotes.add(emoteType);\n\t\t}\n\t}\n\n\t// RAT-532: at the limit, someone who never had a photo in the arena is asked\n\t// for one instead of Pro.\n\tlet wall = $state<{ likes: number } | null>(null);\n\tasync function openSwipeLimit() {\n\t\tif (hasSession && !data.isSubscribed && !hasSubs) {\n\t\t\ttry {\n\t\t\t\tconst res = await fetch('/api/arena/wall');\n\t\t\t\tconst j = res.ok ? ((await res.json()) as { submit?: boolean; likesToday?: number }) : null;\n\t\t\t\tif (j?.submit) {\n\t\t\t\t\twall = { likes: j.likesToday ?? 0 };\n\t\t\t\t\tanalytics.trackUpgradeModalOpen('arena_wall_submit');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// fall through to the usual limit\n\t\t\t}\n\t\t}\n\t\tshowUpgradeModal = true;\n\t\tanalytics.trackUpgradeModalOpen('arena_swipe_limit');\n\t}\n\n\tfunction vote(voteType: 'up' | 'down') {\n\t\tif (!currentItem || animating) return;\n\t\tif (!hasSession) {\n\t\t\tdragX = 0;\n\t\t\tdragY = 0;\n\t\t\tanonVoteGate(voteType);\n\t\t\treturn;\n\t\t}\n\n\t\t// Pre-check: if no swipes left, snap card back and show swipe purchase modal\n\t\tif (remainingSwipes <= 0) {\n\t\t\tdragX = 0;\n\t\t\tdragY = 0;\n\t\t\tvoid openSwipeLimit();\n\t\t\treturn;\n\t\t}\n\n\t\tanimating = true;\n\t\tanimDirection = voteType === 'up' ? 'right' : 'left';\n\n\t\t// Fly out immediately\n\t\tdragX = voteType === 'up' ? 500 : -500;\n\t\tdragY = -50;\n\n\t\t// Optimistically deduct swipe\n\t\tremainingSwipes--;\n\n\t\t// Capture queued emotes and submission ID before card advances\n\t\tconst emotesToSend = [...queuedEmotes];\n\t\tconst submissionId = currentItem.id;\n\t\t// RAT-418: this swipe is now the single rewindable action.\n\t\tlastSwipe = { id: submissionId };\n\n\t\t// Fire-and-forget: vote API\n\t\tfetch('/api/arena/vote', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ submissionId, vote: voteType })\n\t\t})\n\t\t\t.then((r) => r.json())\n\t\t\t.then((result) => {\n\t\t\t\tif (result.error === 'daily_limit') {\n\t\t\t\t\t// Server-truth: this swipe wasn't counted because we'd already hit\n\t\t\t\t\t// the daily cap (UI-vs-server desync, e.g. multi-tab race). Sync\n\t\t\t\t\t// to 0 so the next pre-check + onPointerDown guard both block.\n\t\t\t\t\t// Pre-RAT-77 this incremented back to 1 and the user could\n\t\t\t\t\t// X-out the modal and burn another card-advance per loop.\n\t\t\t\t\tremainingSwipes = 0;\n\t\t\t\t\tvoid openSwipeLimit();\n\t\t\t\t} else if (result.remainingSwipes !== undefined) {\n\t\t\t\t\tremainingSwipes = result.remainingSwipes;\n\t\t\t\t}\n\t\t\t\t// RAT-329: a mutual like just landed → show the match overlay.\n\t\t\t\tif (result.match) {\n\t\t\t\t\tmatchInfo = result.match;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\t// Network dropped mid-swipe: the vote never reached the server,\n\t\t\t\t// so hand the optimistic deduction back instead of throwing an\n\t\t\t\t// uncaught \"Failed to fetch\".\n\t\t\t\tremainingSwipes++;\n\t\t\t});\n\n\t\t// Fire-and-forget: emotes (single batch request)\n\t\tif (emotesToSend.length > 0) {\n\t\t\ttokens -= emotesToSend.length * 2;\n\t\t\tfetch('/api/arena/emote', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ submissionId, emoteTypes: emotesToSend })\n\t\t\t})\n\t\t\t\t.then((r) => r.json())\n\t\t\t\t.then((r) => {\n\t\t\t\t\tif (r.error === 'insufficient_tokens') {\n\t\t\t\t\t\tshowUpgradeModal = true;\n\t\t\t\t\t\tanalytics.trackUpgradeModalOpen('arena_emote');\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\t// Same as the vote fetch: refund the optimistic token spend\n\t\t\t\t\t// on a network drop instead of surfacing an uncaught error.\n\t\t\t\t\ttokens += emotesToSend.length * 2;\n\t\t\t\t});\n\t\t}\n\n\t\t// After fly-out completes, reset & advance — {#key} creates fresh card element\n\t\tsetTimeout(() => {\n\t\t\tdragX = 0;\n\t\t\tdragY = 0;\n\t\t\tanimDirection = null;\n\t\t\tqueuedEmotes.clear();\n\t\t\temotePickerOpen = false;\n\t\t\tcurrentIndex++;\n\t\t\t// Unlock after entrance animation plays (driven by {#key} + CSS animation)\n\t\t\tsetTimeout(() => {\n\t\t\t\tanimating = false;\n\t\t\t}, 350);\n\t\t\tif (items.length - currentIndex <= 3 && nextCursor) loadMore();\n\t\t}, 350);\n\t}\n\n\t// RAT-412: advance the deck after a super emote — the fly-out + card swap from\n\t// vote(), but WITHOUT the swipe gate / decrement / vote POST. The super-vote\n\t// endpoint already recorded the paid up-vote server-side, so routing through\n\t// vote() would wrongly pop the swipe paywall for out-of-swipes non-Pro users\n\t// right after they paid.\n\tfunction superFlyOut() {\n\t\t// A super emote can't be rewound (the paid emote/notification already fired).\n\t\tlastSwipe = null;\n\t\tanimating = true;\n\t\tanimDirection = 'right';\n\t\tdragX = 500;\n\t\tdragY = -50;\n\t\tsetTimeout(() => {\n\t\t\tdragX = 0;\n\t\t\tdragY = 0;\n\t\t\tanimDirection = null;\n\t\t\tqueuedEmotes.clear();\n\t\t\temotePickerOpen = false;\n\t\t\tcurrentIndex++;\n\t\t\tsetTimeout(() => {\n\t\t\t\tanimating = false;\n\t\t\t}, 350);\n\t\t\tif (items.length - currentIndex <= 3 && nextCursor) loadMore();\n\t\t}, 350);\n\t}\n\n\tasync function loadMore() {\n\t\tif (loading || !nextCursor) return;\n\t\tloading = true;\n\t\t// RAT-426: carry the active filter (cats + seek) into pagination so the soft\n\t\t// ranking stays consistent past page 1.\n\t\tconst q = new URLSearchParams({ cursor: nextCursor, limit: '10' });\n\t\tconst cats = page.url.searchParams.get('cats');\n\t\tconst seek = page.url.searchParams.get('seek');\n\t\tif (cats) q.set('cats', cats);\n\t\tif (seek) q.set('seek', seek);\n\t\tconst res = await fetch(`/api/arena/feed?${q}`);\n\t\tconst r = await res.json();\n\t\tif (r.items?.length) {\n\t\t\t// RAT-521: the admirer lane isn't keyset-paged — it leaves out cards the\n\t\t\t// viewer has voted on, and the next page is fetched with three still to\n\t\t\t// swipe, so an admirer card from this page can come back on the next.\n\t\t\t// Keep one of each.\n\t\t\tconst have = new Set(items.map((it) => it.id));\n\t\t\titems = [...items, ...r.items.filter((it: { id: string }) => !have.has(it.id))];\n\t\t\tnextCursor = r.nextCursor;\n\t\t} else nextCursor = null;\n\t\tloading = false;\n\t}\n\n\t// RAT-199: buySwipes() removed — no more token-based swipe purchases.\n\t// Out-of-swipes path now goes through goPro() above.\n</script>\n\n<svelte:head>\n\t{#each preloadUrls as url (url)}\n\t\t<link rel=\"preload\" as=\"image\" href={url} />\n\t{/each}\n</svelte:head>\n\n<!-- RAT-199: single source of truth for the Pro upsell modal across the app.\n\t The arena swipe-out and the generic upsell both flow through the same\n\t component now — context is just the `feature` prop. -->\n{#if wall}\n\t<!-- RAT-532: the limit, for someone with no photo in the arena. -->\n\t<WallSubmitSheet\n\t\tlikes={wall.likes}\n\t\tonclose={() => (wall = null)}\n\t\tonpro={() => {\n\t\t\twall = null;\n\t\t\tshowUpgradeModal = true;\n\t\t\tanalytics.trackUpgradeModalOpen('arena_swipe_limit');\n\t\t}}\n\t/>\n{/if}\n<UpgradeModal\n\topen={showUpgradeModal}\n\tonclose={() => {\n\t\tshowUpgradeModal = false;\n\t\tupgradeHeadline = null;\n\t}}\n\tfeature=\"arena\"\n\theadline={upgradeHeadline}\n/>\n\n{#if reportSubmissionId}\n\t<ReportContentModal\n\t\topen={reportSubmissionId !== null}\n\t\tentityType=\"arena_submission\"\n\t\tentityId={reportSubmissionId}\n\t\tonclose={() => (reportSubmissionId = null)}\n\t/>\n{/if}\n\n<SuperEmoteModal\n\topen={superEmoteOpen}\n\tisPro={data.isSubscribed}\n\tfreeLeft={superEmoteFreeLeft}\n\ttokenBalance={tokens}\n\tpacks={superEmotePacks}\n\tsending={superEmoteSending}\n\tonclose={() => (superEmoteOpen = false)}\n\tonsend={sendSuperEmote}\n\tonbuy={async (packId) => {\n\t\tif (superEmoteSending) return;\n\t\tsuperEmoteSending = true;\n\t\ttry {\n\t\t\tconst res = await fetch('/api/checkout/tokens', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ packageId: packId, successPath: '/a', source: 'super_emote' })\n\t\t\t});\n\t\t\tconst j = await res.json().catch(() => ({}));\n\t\t\tif (res.ok && j?.url) {\n\t\t\t\twindow.location.href = j.url;\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\t/* fall through to the tokens page */\n\t\t}\n\t\tsuperEmoteSending = false;\n\t\tsuperEmoteOpen = false;\n\t\tgoto('/tokens');\n\t}}\n\tongopro={() => {\n\t\tsuperEmoteOpen = false;\n\t\tshowUpgradeModal = true;\n\t\tanalytics.trackUpgradeModalOpen('arena_super_emote');\n\t}}\n/>\n\n<!-- RAT-272 follow-up: arena floating chrome (mobile). The old Navbar\n\t mobile menu used to host \"+submit\" + the arena dashboard link; now\n\t that the mobile hamburger is gone we surface them here directly.\n\t Row: [filter] ........... [+ submit] [menu]\n\t Batch 18: left padding pushed past the ratemyd. wordmark in the\n\t Navbar (logo right-edge ~120px from screen-left at text-xl px-5) so\n\t the filter pill doesn't sit on top of the brand mark. -->\n{#if hasSession}\n\t<div class=\"pointer-events-none fixed inset-x-0 top-0 z-[51] md:hidden\">\n\t\t<div class=\"mx-auto flex h-16 max-w-5xl items-center px-4 md:px-0\">\n\t\t\t<div class=\"w-full\">\n\t\t\t\t<ArenaTopBar\n\t\t\t\t\tactive=\"swipe\"\n\t\t\t\t\tlikesCount={likesCount}\n\t\t\t\t\tonfilter={() => (filterPickerOpen = true)}\n\t\t\t\t\tfilterActive={activeCategories.length > 0}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n{/if}\n\n<ArenaFilterSheet\n\topen={filterPickerOpen}\n\tseek={activeSeek}\n\tphoto={activeCategories}\n\tonapply={setSeekFilter}\n\tonclose={() => (filterPickerOpen = false)}\n/>\n\n<!-- Mobile: pin spacer + gate banner + card area into a single full-height\n     flex column. RAT-272 follow-up: 100dvh used to extend the card area\n     UNDER the new bottom nav, so we subtract the nav's height. The old flat\n     82px guess was ~13px taller than the real nav on phones with NO home\n     indicator (border 1 + pt 6 + slot 56 + pb 6 = 69px) — that surplus left\n     a black strip of page bg between the deck and the nav. Now we subtract\n     the exact nav height + the actual safe-area inset, so the deck butts\n     against the nav on every device. Desktop: contents — children flow as\n     siblings, no height constraint. -->\n<div class=\"flex h-[calc(100dvh-69px-env(safe-area-inset-bottom))] flex-col md:contents\">\n\t<!-- Spacer for fixed navbar — desktop always. On mobile, only when the\n\t auth gate banner is shown (anon viewers); authed users get the\n\t floating chrome overlay for fullscreen feel. -->\n\t<div class=\"hidden h-16 shrink-0 md:block\"></div>\n\n\t<!-- Anonymous gate banner. Bigger than the original one-line strip so it\n\t     reads as a real CTA, but stays as a banner above the swipe deck — the\n\t     blurred cards behind work as a teaser of what they're signing in for.\n\t     The navbar already hides + submit and the hamburger for anon /a. -->\n\t{#if !hasSession}\n\t\t<div class=\"shrink-0 border-b border-border bg-surface/80 px-5 py-5 backdrop-blur-sm\">\n\t\t\t<div\n\t\t\t\tclass=\"mx-auto flex max-w-[1000px] flex-col items-center gap-3 text-center sm:flex-row sm:items-center sm:gap-5 sm:text-left\"\n\t\t\t>\n\t\t\t\t<div class=\"flex-1\">\n\t\t\t\t\t<p\n\t\t\t\t\t\tclass=\"font-display text-[15px] leading-tight font-bold tracking-tight text-text sm:text-base\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{t('sign in to enter the arena')}\n\t\t\t\t\t</p>\n\t\t\t\t\t<p class=\"mt-1 text-[12px] leading-snug text-muted\">\n\t\t\t\t\t\t{t('swipe, vote, post your shot. one tap with google or use email — no password.')}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<a\n\t\t\t\t\thref=\"/auth/sign-in?next=/a\"\n\t\t\t\t\tclass=\"inline-flex w-full shrink-0 items-center justify-center rounded-lg bg-orange px-6 py-3 font-display text-sm font-bold text-white no-underline transition-all hover:bg-orange-dark sm:w-auto\"\n\t\t\t\t>\n\t\t\t\t\t{t('sign in')}\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- RAT-272 follow-up: the \"18+ content / i'm 18+\" banner used to\n\t\t\t sit here between the nav spacer and the swipe deck. Removed\n\t\t\t with the consentGiven gate — T&C handles the legal piece. -->\n\t{/if}\n\n\t<!-- RAT-329: \"you're invisible\" nudge. A signed-in voter with no card can\n\t\t like people but can't be liked back — no match is possible. Centered\n\t\t floating card: the old top band rendered under the mobile floating\n\t\t chrome (logo/filter/submit) since authed mobile gets no nav spacer.\n\t\t Non-blocking — the wrapper ignores pointer events so the deck behind\n\t\t stays swipeable; only the card itself is interactive. -->\n\t{#if showSubmissionNudge}\n\t\t<div class=\"pointer-events-none fixed inset-0 z-[60] flex items-center justify-center px-6\">\n\t\t\t<div\n\t\t\t\tclass=\"pointer-events-auto w-full max-w-[360px] rounded-2xl border border-border bg-surface p-6 text-center shadow-2xl\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-xl border border-orange/25 bg-orange/[.06] text-orange\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclass=\"h-6 w-6\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"1.6\"\n\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t><path\n\t\t\t\t\t\t\td=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"\n\t\t\t\t\t\t/><circle cx=\"12\" cy=\"13\" r=\"4\" /></svg\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"font-display text-[17px] leading-tight font-bold tracking-tight text-text\">\n\t\t\t\t\t{t('matches only work both ways')}\n\t\t\t\t</p>\n\t\t\t\t<p class=\"mt-2 text-[13px] leading-snug text-muted\">\n\t\t\t\t\t{t('add one photo and the people you like can like you back. flip on')} <span class=\"text-text\"\n\t\t\t\t\t\t>{t('go anonymous')}</span\n\t\t\t\t\t> {t('to keep your name hidden until you match.')}\n\t\t\t\t</p>\n\t\t\t\t<div class=\"mt-5 flex flex-col gap-2\">\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"/a/submit\"\n\t\t\t\t\t\tclass=\"inline-flex w-full items-center justify-center gap-1.5 rounded-lg bg-orange px-5 py-3 font-display text-[14px] font-bold text-white no-underline transition-all hover:bg-orange-dark\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclass=\"h-4 w-4\"\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.4\"\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\"><path d=\"M12 5v14M5 12h14\" /></svg\n\t\t\t\t\t\t>\n\t\t\t\t\t\t{t('add your photo')}\n\t\t\t\t\t</a>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonclick={() => (nudgeDismissed = true)}\n\t\t\t\t\t\tclass=\"inline-flex w-full items-center justify-center rounded-lg px-5 py-2.5 font-display text-[13px] font-medium text-muted transition-colors hover:text-text\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{t('not now')}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t{/if}\n\n\t<div class=\"min-h-0 flex-1 md:mx-auto md:max-w-[1000px] md:flex-initial\">\n\t\t<div class=\"h-full md:grid md:h-auto md:min-h-[calc(100vh-64px)] md:grid-cols-[1fr_320px]\">\n\t\t\t<!-- ═══ CARD STACK AREA ═══ Mobile: h-full fills the wrapper's flex-1 slot (which\n\t\t\t is 100dvh minus spacer + gate banner so the action overlays don't slide off).\n\t\t\t Desktop: original centered column. -->\n\t\t\t<div\n\t\t\t\tclass=\"relative flex h-full flex-col overflow-hidden md:h-auto md:min-h-[500px] md:items-center md:justify-start md:gap-6 md:overflow-y-auto md:border-r md:border-border md:px-8 md:pt-6 md:pb-12\"\n\t\t\t>\n\t\t\t\t<!-- Grid background — left side only -->\n\t\t\t\t<div\n\t\t\t\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\t\t\t></div>\n\n\t\t\t\t<!-- ALBUM PROMO AD · swipeable card over the deck, every few swipes. -->\n\t\t\t\t{#if currentAd}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"absolute inset-0 z-[45] flex items-center justify-center bg-bg/85 px-5 backdrop-blur-sm\"\n\t\t\t\t\t\ttransition:fade={{ duration: 150 }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"relative w-full max-w-[330px] touch-none select-none\"\n\t\t\t\t\t\t\tstyle=\"transform: translateX({adDragX}px) rotate({adDragX *\n\t\t\t\t\t\t\t\t0.04}deg); transition: {adDragging\n\t\t\t\t\t\t\t\t? 'none'\n\t\t\t\t\t\t\t\t: 'transform 0.25s cubic-bezier(0.16,1,0.3,1)'};\"\n\t\t\t\t\t\t\tonpointerdown={onAdPointerDown}\n\t\t\t\t\t\t\tonpointermove={onAdPointerMove}\n\t\t\t\t\t\t\tonpointerup={onAdPointerUp}\n\t\t\t\t\t\t\tonpointercancel={onAdPointerUp}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"overflow-hidden rounded-2xl border border-purple/40 bg-surface shadow-2xl\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonclick={viewAd}\n\t\t\t\t\t\t\t\t\tclass=\"relative block aspect-[4/5] w-full overflow-hidden bg-surface-2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{#if currentAd.coverUrl}\n\t\t\t\t\t\t\t\t\t\t<img src={currentAd.coverUrl} alt=\"\" class=\"h-full w-full object-cover\" />\n\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t<div class=\"absolute inset-0 bg-gradient-to-br from-purple/30 to-bg/0\"></div>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-black/30\"\n\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"absolute top-3 left-3 rounded bg-black/70 px-2 py-1 font-display text-[10px] font-bold tracking-[0.08em] text-purple uppercase backdrop-blur-sm\"\n\t\t\t\t\t\t\t\t\t\t>{t('paid album')}</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"absolute top-3 right-3 rounded bg-black/70 px-2 py-1 font-display text-[12px] font-bold text-yellow backdrop-blur-sm\"\n\t\t\t\t\t\t\t\t\t\t>⬡ {currentAd.priceTokens}</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div class=\"absolute inset-x-0 bottom-0 p-4 text-left\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t<DuelAvatar\n\t\t\t\t\t\t\t\t\t\t\t\tnickname={currentAd.creator.nickname}\n\t\t\t\t\t\t\t\t\t\t\t\tavatarUrl={getAvatarUrl(currentAd.creator.avatarPath)}\n\t\t\t\t\t\t\t\t\t\t\t\tsize={22}\n\t\t\t\t\t\t\t\t\t\t\t\tlink={false}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-[12px] font-semibold text-white/90\"\n\t\t\t\t\t\t\t\t\t\t\t\t>@{currentAd.creator.nickname ?? t('creator')}</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"mt-1.5 font-display text-xl font-bold tracking-tight text-white\">\n\t\t\t\t\t\t\t\t\t\t\t{currentAd.title}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"text-[12px] text-white/70\">\n\t\t\t\t\t\t\t\t\t\t\t{t('{photos} photos · {previews} free preview', { photos: currentAd.photoCount, previews: currentAd.previewCount })}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<div class=\"flex items-center gap-2 p-3\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonclick={skipAd}\n\t\t\t\t\t\t\t\t\t\tclass=\"rounded-xl border border-border bg-surface px-4 py-2.5 font-display text-[13px] font-bold text-muted transition-colors hover:text-text\"\n\t\t\t\t\t\t\t\t\t\t>{t('skip')}</button\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tonclick={viewAd}\n\t\t\t\t\t\t\t\t\t\tclass=\"flex-1 rounded-xl bg-yellow px-4 py-2.5 font-display text-[14px] font-bold text-black transition-colors hover:bg-yellow/85\"\n\t\t\t\t\t\t\t\t\t\t>unlock · {currentAd.priceTokens} tokens</button\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclass=\"mt-2.5 text-center font-display text-[10px] font-bold tracking-[0.18em] text-muted uppercase\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{t('swipe to skip · tap to view')}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\n\t\t\t\t{#if isEmpty && !loading}\n\t\t\t\t\t<!-- Ghost card empty state — center vertically inside the mobile 100dvh column. -->\n\t\t\t\t\t<div class=\"relative m-auto w-full max-w-[340px] md:m-0\">\n\t\t\t\t\t\t<!-- Ghost UI -->\n\t\t\t\t\t\t<div class=\"pointer-events-none opacity-30 select-none\">\n\t\t\t\t\t\t\t<!-- Card stack -->\n\t\t\t\t\t\t\t<div class=\"relative w-full pr-2 pb-2\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"absolute top-[8px] right-[-8px] bottom-[-8px] left-[8px] rounded-2xl border border-border bg-surface opacity-50\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"absolute top-[4px] right-[-4px] bottom-[-4px] left-[4px] rounded-2xl border border-border bg-surface-2 opacity-70\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"relative z-[2] overflow-hidden rounded-2xl border border-border bg-surface\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"relative aspect-[3/4] w-full overflow-hidden bg-gradient-to-br from-surface-2 to-bg\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex h-full w-full items-center justify-center\">\n\t\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"h-16 w-16 text-white/[.04]\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><circle\n\t\t\t\t\t\t\t\t\t\t\t\t\tcx=\"9\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcy=\"9\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tr=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\t/><path d=\"m21 15-3.086-3.086a2 2 0 00-2.828 0L6 21\" /></svg\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent\"\n\t\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"p-5\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"font-display text-2xl font-bold tracking-[.04em]\">— — —</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"mt-1 mb-3 flex items-center gap-2 text-[11px]\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted/40\">{t('0 votes')}</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex gap-1.5 text-[11px] text-muted/40\">\n\t\t\t\t\t\t\t\t\t\t\t{#each superEmotes as e (e.t)}\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><path d={e.d} /></svg\n\t\t\t\t\t\t\t\t\t\t\t\t\t>0</span\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Ghost buttons -->\n\t\t\t\t\t\t\t<div class=\"mt-6 flex items-center justify-center gap-5 opacity-50\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex h-14 w-14 items-center justify-center rounded-full border border-border bg-surface\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\tclass=\"h-5 w-5 text-coral\"\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\td=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex h-14 w-14 items-center justify-center rounded-full border border-border bg-surface\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\tclass=\"h-5 w-5 text-green\"\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\td=\"M4.5 12.75l6 6 9-13.5\"\n\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<!-- Ghost emotes -->\n\t\t\t\t\t\t\t<div class=\"mt-6 flex flex-wrap items-center justify-center gap-2 opacity-50\">\n\t\t\t\t\t\t\t\t{#each superEmotes as e (e.t)}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"flex items-center gap-2 rounded-xl border border-border bg-surface-2 px-4 py-2.5\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<svg class=\"h-5 w-5 text-muted/40\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t><path d={e.d} /></svg\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span class=\"text-[11px] font-semibold text-muted/40\">{t(e.label)}</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- CTA overlay — copy + CTA shift when an active filter caused the empty state -->\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"absolute inset-0 z-10 flex flex-col items-center justify-center px-4 text-center\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#if activeCategories.length > 0}\n\t\t\t\t\t\t\t\t<p class=\"font-display text-lg font-bold text-text\">\n\t\t\t\t\t\t\t\t\t{#each t('no shots in {categories} yet').split('{categories}') as part, i (i)}{#if i}<span class=\"text-orange\"\n\t\t\t\t\t\t\t\t\t\t>{activeCategories.map((c) => ARENA_CATEGORY_LABELS[c]).join(' + ')}</span\n\t\t\t\t\t\t\t\t\t>{/if}{part}{/each}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<p class=\"mt-1 text-[13px] text-muted/50\">{t('be the first — or clear the filter.')}</p>\n\t\t\t\t\t\t\t\t<div class=\"mt-4 flex gap-2\">\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"cursor-pointer rounded-lg border border-border bg-surface px-4 py-3 font-display text-sm font-bold text-text transition-colors hover:border-muted\"\n\t\t\t\t\t\t\t\t\t\tonclick={() => setCategoryFilter([])}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{t('show all')}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\thref=\"/a/submit\"\n\t\t\t\t\t\t\t\t\t\tclass=\"inline-block cursor-pointer rounded-lg bg-orange px-4 py-3 font-display text-sm font-bold text-white no-underline transition-all hover:bg-orange-dark\"\n\t\t\t\t\t\t\t\t\t\t>{t('enter')}</a\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<p class=\"font-display text-lg font-bold text-text\">{t('no more cards')}</p>\n\t\t\t\t\t\t\t\t<p class=\"mt-1 text-[13px] text-muted/50\">\n\t\t\t\t\t\t\t\t\t{t('be the first to enter and let the crowd decide.')}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\thref=\"/a/submit\"\n\t\t\t\t\t\t\t\t\tclass=\"mt-4 inline-block cursor-pointer rounded-lg bg-orange px-6 py-3 font-display text-sm font-bold text-white no-underline transition-all hover:bg-orange-dark\"\n\t\t\t\t\t\t\t\t\t>{t('enter the arena')}</a\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</div>\n\t\t\t\t{:else if currentItem}\n\t\t\t\t\t<!-- Card stack with depth — mobile: flex-1 fills the 100dvh column. Desktop: max-w 340 with stack peeks. -->\n\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"arena-card-drag relative flex-1 touch-none select-none md:w-full md:max-w-[340px] md:flex-none md:pr-2 md:pb-2\"\n\t\t\t\t\t\tonpointerdown={onPointerDown}\n\t\t\t\t\t\tonpointermove={onPointerMove}\n\t\t\t\t\t\tonpointerup={onPointerUp}\n\t\t\t\t\t\tonpointercancel={onPointerUp}\n\t\t\t\t\t\tondragover={onCardDragOver}\n\t\t\t\t\t\tondragleave={onCardDragLeave}\n\t\t\t\t\t\tondrop={onCardDrop}\n\t\t\t\t\t>\n\t\t\t\t\t\t<!-- Stack decoration (desktop only — mobile is fullscreen, peeks would clip) -->\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"absolute top-[8px] right-[-8px] bottom-[-8px] left-[8px] hidden rounded-2xl border border-border bg-surface opacity-50 md:block\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"absolute top-[4px] right-[-4px] bottom-[-4px] left-[4px] hidden rounded-2xl border border-border bg-surface-2 opacity-70 md:block\"\n\t\t\t\t\t\t></div>\n\n\t\t\t\t\t\t<!-- Main card — {#key currentIndex} creates a fresh DOM element per\n\t\t\t\t\t\t     card, no swim-back. The consent-gate sub-key (RAT-196) is gone\n\t\t\t\t\t\t     with the consentGiven flag (RAT-272 follow-up); plain index is\n\t\t\t\t\t\t     enough since there's no consent-tap re-render to chase. -->\n\t\t\t\t\t\t{#key currentIndex}\n\t\t\t\t\t\t\t<div class=\"card-enter-wrapper relative h-full md:z-[2] md:h-auto\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"h-full overflow-hidden rounded-none border-0 bg-surface md:h-auto md:rounded-2xl md:border {dragging\n\t\t\t\t\t\t\t\t\t\t? 'cursor-grabbing'\n\t\t\t\t\t\t\t\t\t\t: 'cursor-grab'} {emoteDragType\n\t\t\t\t\t\t\t\t\t\t? 'animate-[wiggle_0.3s_ease-in-out_infinite] border-white/10 shadow-[0_0_30px_rgba(255,255,255,.06)]'\n\t\t\t\t\t\t\t\t\t\t: 'border-border'}\"\n\t\t\t\t\t\t\t\t\tstyle=\"transform: translate({dragX}px, {dragY}px) rotate({dragRotation}deg) scale({emoteOverCard\n\t\t\t\t\t\t\t\t\t\t? 1.03\n\t\t\t\t\t\t\t\t\t\t: 1}); opacity: {dragOpacity}; transition: {dragging\n\t\t\t\t\t\t\t\t\t\t? 'none'\n\t\t\t\t\t\t\t\t\t\t: animating\n\t\t\t\t\t\t\t\t\t\t\t? 'transform 0.35s cubic-bezier(.4,.2,.2,1), opacity 0.35s ease, box-shadow 0.2s ease, border-color 0.2s ease'\n\t\t\t\t\t\t\t\t\t\t\t: 'box-shadow 0.2s ease, border-color 0.2s ease'};\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<!-- NOPE overlay -->\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"pointer-events-none absolute inset-0 z-10 flex items-center justify-center rounded-2xl border-4 border-coral bg-coral/10\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"opacity: {swipeDirection === 'left'\n\t\t\t\t\t\t\t\t\t\t\t? Math.min(1, Math.abs(dragX) / 150)\n\t\t\t\t\t\t\t\t\t\t\t: 0}; transition: {dragging ? 'none' : 'opacity 0.2s'};\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"rounded-lg border-2 border-coral px-5 py-2 font-display text-3xl font-bold tracking-widest text-coral\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"transform: rotate(12deg)\">{t('NOPE')}</span\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<!-- APPROVE overlay -->\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"pointer-events-none absolute inset-0 z-10 flex items-center justify-center rounded-2xl border-4 border-green bg-green/10\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"opacity: {swipeDirection === 'right'\n\t\t\t\t\t\t\t\t\t\t\t? Math.min(1, dragX / 150)\n\t\t\t\t\t\t\t\t\t\t\t: 0}; transition: {dragging ? 'none' : 'opacity 0.2s'};\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"rounded-lg border-2 border-green px-5 py-2 font-display text-3xl font-bold tracking-widest text-green\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"transform: rotate(-12deg)\">{t('APPROVE')}</span\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"relative h-full w-full overflow-hidden bg-gradient-to-br from-surface-2 to-bg md:aspect-[3/4] md:h-auto\"\n\t\t\t\t\t\t\t\t\t\tbind:this={cardMediaEl}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{#if currentItem.imageUrl}\n\t\t\t\t\t\t\t\t\t\t\t{#if currentItem.mediaType === 'video'}\n\t\t\t\t\t\t\t\t\t\t\t\t<!-- preload=\"metadata\" not \"auto\" — iOS Safari can hold autoplay\n\t\t\t\t\t\t\t\t\t\t\t\t     while it waits for a full buffer with preload=auto on slow\n\t\t\t\t\t\t\t\t\t\t\t\t     mobile connections. metadata is enough to start.\n\t\t\t\t\t\t\t\t\t\t\t\t     `disableremoteplayback` removed: Chrome on some versions\n\t\t\t\t\t\t\t\t\t\t\t\t     misparses it and disables the element entirely. -->\n\t\t\t\t\t\t\t\t\t\t\t\t<video\n\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={currentItem.imageUrl}\n\t\t\t\t\t\t\t\t\t\t\t\t\tautoplay\n\t\t\t\t\t\t\t\t\t\t\t\t\tmuted\n\t\t\t\t\t\t\t\t\t\t\t\t\tloop\n\t\t\t\t\t\t\t\t\t\t\t\t\tplaysinline\n\t\t\t\t\t\t\t\t\t\t\t\t\tpreload=\"metadata\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"arena-card-video h-full w-full object-cover {isBlurred\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'gate-blur scale-110 blur-[20px]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ''} transition-all duration-500\"\n\t\t\t\t\t\t\t\t\t\t\t\t></video>\n\t\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={currentItem.imageUrl}\n\t\t\t\t\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading=\"eager\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdecoding=\"async\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfetchpriority=\"high\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"h-full w-full object-cover {isBlurred\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'gate-blur scale-110 blur-[20px]'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: ''} transition-all duration-500\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex h-full w-full items-center justify-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"h-16 w-16 text-white/[.04]\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><circle\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcx=\"9\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcy=\"9\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tr=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/><path d=\"m21 15-3.086-3.086a2 2 0 00-2.828 0L6 21\" /></svg\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute inset-0 bg-gradient-to-t from-black/80 via-transparent to-transparent\"\n\t\t\t\t\t\t\t\t\t\t></div>\n\n\t\t\t\t\t\t\t\t\t\t<!-- Top-corner badges: desktop only. Mobile shows the same info in the bottom name overlay\n\t\t\t\t\t\t\t     to avoid colliding with the floating navbar (+ submit / hamburger) on the right. -->\n\t\t\t\t\t\t\t\t\t\t{#if currentItem.aiScore}\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute top-3 left-3 hidden rounded border border-orange/25 bg-bg/80 px-2.5 py-1 text-[11px] font-medium text-orange backdrop-blur-sm md:block\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{t('AI score: {score}', { score: currentItem.aiScore })}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t{#if totalVotes > 0}\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute top-3 right-3 hidden items-center gap-1 rounded border border-green/25 bg-bg/80 px-2.5 py-1 text-[11px] font-medium text-green backdrop-blur-sm md:flex\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{approvalPct}%\n\t\t\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"h-3 w-3\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M4.5 12.75l6 6 9-13.5\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t\t\t\t\t<!-- Token cost badge — desktop only (mobile shows the count via the picker FAB badge). -->\n\t\t\t\t\t\t\t\t\t\t{#if pendingCost > 0}\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute top-3 {totalVotes > 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'right-20'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 'right-3'} hidden rounded-full border border-orange/30 bg-orange/90 px-2.5 py-0.5 text-[10px] font-bold text-white backdrop-blur-sm md:block\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{t('{n} tokens', { n: pendingCost })}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t\t\t\t\t<!-- Pinned emotes on card. Mobile: float above the name overlay (which is at bottom-28). -->\n\t\t\t\t\t\t\t\t\t\t{#if queuedEmotes.size > 0}\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"absolute bottom-48 left-3 z-20 flex gap-1.5 md:bottom-3\">\n\t\t\t\t\t\t\t\t\t\t\t\t{#each superEmotes as e (e.t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#if queuedEmotes.has(e.t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"flex h-8 w-8 cursor-pointer items-center justify-center rounded-full border border-white/10 bg-black/60 text-yellow-400 backdrop-blur-sm transition-all hover:scale-110 hover:bg-black/80\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonclick={() => toggleEmoteQueue(e.t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={t('Remove {emote} emote', { emote: t(e.label) })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<svg class=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t><path d={e.d} /></svg\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t\t\t\t\t<!-- Mobile-only card data overlay (name, score, votes, emote counts) on photo. bottom-32 clears the floating action row (bottom-12 + 56px center button + badge overhang) on every dvh state. -->\n\t\t\t\t\t\t\t\t\t\t<div class=\"absolute right-4 bottom-32 left-4 z-10 md:hidden\">\n\t\t\t\t\t\t\t\t\t\t\t{#if currentItem.superEmotedYou}\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"mb-2 inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 font-display text-[11px] font-bold tracking-wide text-white uppercase\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"background:#ff6a1a\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M12 1.5l2.6 6.9L22 9.5l-5.4 5.2L18 22l-6-3.7L6 22l1.4-7.3L2 9.5l7.4-1.1z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t('super-emoted you')}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"flex items-center gap-2 font-display text-2xl font-bold tracking-[.04em] text-white drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{displayName}\n\t\t\t\t\t\t\t\t\t\t\t\t<UserBadge rater={currentItem.isRater} subscriber={currentItem.isSubscriber} verified={currentItem.isVerified} size={15} />\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"mt-0.5 flex items-center gap-2 text-[11px]\">\n\t\t\t\t\t\t\t\t\t\t\t\t{#if currentItem.aiScore}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-orange\">{currentItem.aiScore} / 10</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"h-[3px] w-[3px] rounded-full bg-white/30\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\t\t{#if totalVotes > 0}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-green\">{t('{pct}% approval', { pct: approvalPct })}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"h-[3px] w-[3px] rounded-full bg-white/30\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-white/50\">{t('{n} votes', { n: totalVotes })}</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"mt-1.5 flex items-center gap-2 text-[11px] text-white/55\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"order-last ml-auto flex items-center gap-1 text-white/50 transition-colors active:text-white\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (currentItem) reportSubmissionId = currentItem.id;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={t('report this submission')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<svg class=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 21V4\" /><path d=\"M5 4h12l-2.5 3.5L17 11H5\" /></svg>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t('report')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M12 23c-3.866 0-7-3.134-7-7 0-2.812 1.882-5.346 3.5-7.2.396-.454 1.1-.137 1.042.47-.112 1.155.169 2.3.77 3.28.073.12.2.083.24-.043.357-1.14.89-2.397 1.61-3.507C13.662 6.632 15.5 4.5 15.5 1c0-.345.378-.547.651-.347C18.848 2.636 21 6.07 21 9.5c0 1.907-.625 3.64-1.686 5.024.052-.142.086-.292.086-.449 0-1.37-1.008-3.075-2.4-3.075-.852 0-1.6.742-1.6 1.6 0 .47.12.865.332 1.202A6.965 6.965 0 0112 23z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t\t>{currentItem.emotes.fire}</span\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M12 21.5c-4.418 0-8-3.358-8-7.5 0-3.944 5.475-10.575 7.058-12.414a1.25 1.25 0 011.884 0C14.525 3.425 20 10.056 20 14c0 4.142-3.582 7.5-8 7.5z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t\t>{currentItem.emotes.water}</span\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M2.8 14.6L1 6l5.5 4L12 3l5.5 7L23 6l-1.8 8.6H2.8zM4 19h16v2H4v-2z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t\t>{currentItem.emotes.crown}</span\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M12 2C6.477 2 2 6.477 2 12c0 3.667 1.967 6.87 4.9 8.616V22a1 1 0 001 1h8.2a1 1 0 001-1v-1.384C20.033 18.87 22 15.667 22 12c0-5.523-4.477-10-10-10zM8.5 13a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm7 0a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM10 18v-2h1.5v2H10zm2.5 0v-2H14v2h-1.5z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t\t>{currentItem.emotes.skull}</span\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t<!-- Card data — desktop only (mobile uses overlay above). -->\n\t\t\t\t\t\t\t\t\t<div class=\"card-data hidden px-4 py-3 md:block md:p-5\">\n\t\t\t\t\t\t\t{#if currentItem.superEmotedYou}<div class=\"mb-2 inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 font-display text-[11px] font-bold tracking-wide text-white uppercase\" style=\"background:#ff6a1a\"><svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 1.5l2.6 6.9L22 9.5l-5.4 5.2L18 22l-6-3.7L6 22l1.4-7.3L2 9.5l7.4-1.1z\" /></svg> {t('super-emoted you')}</div>{/if}\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex items-center gap-2 font-display text-lg font-bold tracking-[.04em] md:text-2xl\">\n\t\t\t\t\t\t\t\t\t\t\t{displayName}\n\t\t\t\t\t\t\t\t\t\t\t<UserBadge rater={currentItem.isRater} subscriber={currentItem.isSubscriber} verified={currentItem.isVerified} size={15} />\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"mt-0.5 mb-2 flex items-center gap-2 text-[11px] md:mt-1 md:mb-3\">\n\t\t\t\t\t\t\t\t\t\t\t{#if currentItem.aiScore}\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-orange\">{currentItem.aiScore} / 10</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"h-[3px] w-[3px] rounded-full bg-muted/20\"></span>\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\t{#if totalVotes > 0}\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-green\">{t('{pct}% approval', { pct: approvalPct })}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"h-[3px] w-[3px] rounded-full bg-muted/20\"></span>\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted/40\">{t('{n} votes', { n: totalVotes })}</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex items-center gap-1.5 text-[11px] text-muted/40\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"order-last ml-auto flex items-center gap-1 transition-colors hover:text-muted\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (currentItem) reportSubmissionId = currentItem.id;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={t('report this submission')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<svg class=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 21V4\" /><path d=\"M5 4h12l-2.5 3.5L17 11H5\" /></svg>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t('report')}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-1\"\n\t\t\t\t\t\t\t\t\t\t\t\t><svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M12 23c-3.866 0-7-3.134-7-7 0-2.812 1.882-5.346 3.5-7.2.396-.454 1.1-.137 1.042.47-.112 1.155.169 2.3.77 3.28.073.12.2.083.24-.043.357-1.14.89-2.397 1.61-3.507C13.662 6.632 15.5 4.5 15.5 1c0-.345.378-.547.651-.347C18.848 2.636 21 6.07 21 9.5c0 1.907-.625 3.64-1.686 5.024.052-.142.086-.292.086-.449 0-1.37-1.008-3.075-2.4-3.075-.852 0-1.6.742-1.6 1.6 0 .47.12.865.332 1.202A6.965 6.965 0 0112 23z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t>{currentItem.emotes.fire}</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-1\"\n\t\t\t\t\t\t\t\t\t\t\t\t><svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M12 21.5c-4.418 0-8-3.358-8-7.5 0-3.944 5.475-10.575 7.058-12.414a1.25 1.25 0 011.884 0C14.525 3.425 20 10.056 20 14c0 4.142-3.582 7.5-8 7.5z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t>{currentItem.emotes.water}</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-1\"\n\t\t\t\t\t\t\t\t\t\t\t\t><svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M2.8 14.6L1 6l5.5 4L12 3l5.5 7L23 6l-1.8 8.6H2.8zM4 19h16v2H4v-2z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t>{currentItem.emotes.crown}</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"flex items-center gap-1\"\n\t\t\t\t\t\t\t\t\t\t\t\t><svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M12 2C6.477 2 2 6.477 2 12c0 3.667 1.967 6.87 4.9 8.616V22a1 1 0 001 1h8.2a1 1 0 001-1v-1.384C20.033 18.87 22 15.667 22 12c0-5.523-4.477-10-10-10zM8.5 13a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm7 0a1.5 1.5 0 110-3 1.5 1.5 0 010 3zM10 18v-2h1.5v2H10zm2.5 0v-2H14v2h-1.5z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t\t\t\t\t>{currentItem.emotes.skull}</span\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/key}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- ═══ MOBILE: tinder-style action row [X] [✨ picker] [✓] — absolute overlay so the photo stays full 100dvh ═══ -->\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"absolute right-0 bottom-12 left-0 z-30 flex items-end justify-center gap-3 md:hidden\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#if data.session}\n\t\t\t\t\t\t\t<!-- RAT-418: Pro rewind -->\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"flex h-11 w-11 cursor-pointer items-center justify-center rounded-full border border-border bg-surface transition-all active:scale-95 disabled:opacity-40\"\n\t\t\t\t\t\t\t\tonclick={rewindSwipe}\n\t\t\t\t\t\t\t\tdisabled={isBlurred || (data.isSubscribed && (!canRewind || rewinding))}\n\t\t\t\t\t\t\t\taria-label={t('Rewind last swipe — Pro')}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-[18px] w-[18px] text-yellow\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"2.2\"\n\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\td=\"M9 15L3 9m0 0l6-6M3 9h12a6 6 0 010 12h-3\"\n\t\t\t\t\t\t\t\t\t/></svg\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{/if}\n\t\t\t\t\t\t<!-- ph-no-rageclick on the four vote buttons: voting fast is the point of\n\t\t\t\t\t\t\t the deck — 93% of their \"rage clicks\" had two or more votes land within\n\t\t\t\t\t\t\t 3 s either side. -->\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"ph-no-rageclick flex h-12 w-12 cursor-pointer items-center justify-center rounded-full border border-border bg-surface transition-all active:scale-95\"\n\t\t\t\t\t\t\tonclick={() => vote('down')}\n\t\t\t\t\t\t\taria-label={t('Nope')}\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-coral\"\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=\"2.5\"\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=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t{#if data.session}\n\t\t\t\t\t\t\t<div class=\"relative\">\n\t\t\t\t\t\t\t\t<!-- Floating tray (popover above the picker) -->\n\t\t\t\t\t\t\t\t{#if emotePickerOpen}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"absolute bottom-full left-1/2 mb-3 -translate-x-1/2 rounded-2xl border border-white/15 bg-black/80 px-2 py-2 shadow-[0_12px_32px_rgba(0,0,0,0.6)] backdrop-blur-xl\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t\t{#each superEmotes as e (e.t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{@const isQueued = queuedEmotes.has(e.t)}\n\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"emote-pop flex h-9 w-9 items-center justify-center rounded-full transition-all {isQueued\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'border border-orange/40 bg-orange/15 text-orange'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'text-muted/60 hover:bg-white/5'}\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonclick={() => toggleEmoteQueue(e.t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\taria-label={t(e.label)}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<svg class=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><path d={e.d} /></svg\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<p class=\"mt-1 px-1 text-center text-[8px] tracking-[.05em] text-white/40\">\n\t\t\t\t\t\t\t\t\t\t\t{t('tap to queue · 2 tokens each')}\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t<!-- arrow tail -->\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute top-full left-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rotate-45 border-r border-b border-white/15 bg-black/80\"\n\t\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t\t\t<!-- Picker button -->\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"relative flex h-14 w-14 cursor-pointer items-center justify-center rounded-full text-white shadow-lg shadow-black/40 transition-all active:scale-95 {superEmoteOpen\n\t\t\t\t\t\t\t\t\t\t? 'bg-orange/80'\n\t\t\t\t\t\t\t\t\t\t: 'bg-orange'}{!emoteSeen && !superEmoteOpen ? ' star-nudge' : ''}\"\n\t\t\t\t\t\t\t\t\tonclick={() => { superEmoteOpen = true; markEmoteSeen(); }}\n\t\t\t\t\t\t\t\t\taria-label={t('Super emote — 3x more eyes on you')}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<svg class=\"h-6 w-6\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t><path d=\"M12 1l2.5 6.5L21 10l-6.5 2.5L12 19l-2.5-6.5L3 10l6.5-2.5z\" /></svg\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"absolute -top-1.5 -right-1.5 flex h-5 min-w-[22px] items-center justify-center rounded-full bg-white px-1 font-display text-[11px] font-bold text-orange shadow-md\"\n\t\t\t\t\t\t\t\t\t\t>3×</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"ph-no-rageclick flex h-12 w-12 cursor-pointer items-center justify-center rounded-full border border-border bg-surface transition-all active:scale-95\"\n\t\t\t\t\t\t\tonclick={() => vote('up')}\n\t\t\t\t\t\t\taria-label={t('Approve')}\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-green\"\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=\"2.5\"\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=\"M4.5 12.75l6 6 9-13.5\"\n\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{#if data.session}\n\t\t\t\t\t\t\t<!-- RAT-418: Pro direct chat -->\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"flex h-11 w-11 cursor-pointer items-center justify-center rounded-full border border-border bg-surface transition-all active:scale-95 disabled:opacity-40\"\n\t\t\t\t\t\t\t\tonclick={openDirectChat}\n\t\t\t\t\t\t\t\tdisabled={isBlurred || (data.isSubscribed && !canDirectChat)}\n\t\t\t\t\t\t\t\taria-label={t('Direct chat — Pro')}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-[18px] w-[18px] text-blue\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\td=\"M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z\"\n\t\t\t\t\t\t\t\t\t/></svg\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{/if}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- ═══ DESKTOP: vote buttons + drag-and-drop emote grid ═══ -->\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"hidden items-center justify-center gap-4 md:flex\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#if data.session}\n\t\t\t\t\t\t\t<!-- RAT-418: Pro rewind -->\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"flex h-12 w-12 cursor-pointer items-center justify-center rounded-full border border-border bg-surface transition-all hover:scale-105 hover:border-yellow/30 active:scale-95 disabled:opacity-40\"\n\t\t\t\t\t\t\t\tonclick={rewindSwipe}\n\t\t\t\t\t\t\t\tdisabled={isBlurred || (data.isSubscribed && (!canRewind || rewinding))}\n\t\t\t\t\t\t\t\taria-label={t('Rewind last swipe — Pro')}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg class=\"h-[18px] w-[18px] text-yellow\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2.2\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 15L3 9m0 0l6-6M3 9h12a6 6 0 010 12h-3\" /></svg>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"ph-no-rageclick flex h-14 w-14 cursor-pointer items-center justify-center rounded-full border border-border bg-surface transition-all hover:scale-105 hover:border-coral/30 active:scale-95\"\n\t\t\t\t\t\t\tonclick={() => vote('down')}\n\t\t\t\t\t\t\taria-label={t('Nope')}\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-coral\"\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=\"2.5\"\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=\"M6 18L18 6M6 6l12 12\"\n\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"ph-no-rageclick flex h-14 w-14 cursor-pointer items-center justify-center rounded-full border border-border bg-surface transition-all hover:scale-105 hover:border-green/30 active:scale-95\"\n\t\t\t\t\t\t\tonclick={() => vote('up')}\n\t\t\t\t\t\t\taria-label={t('Approve')}\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-green\"\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=\"2.5\"\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=\"M4.5 12.75l6 6 9-13.5\"\n\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{#if data.session}\n\t\t\t\t\t\t\t<!-- RAT-418: Pro direct chat -->\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"flex h-12 w-12 cursor-pointer items-center justify-center rounded-full border border-border bg-surface transition-all hover:scale-105 hover:border-blue/30 active:scale-95 disabled:opacity-40\"\n\t\t\t\t\t\t\t\tonclick={openDirectChat}\n\t\t\t\t\t\t\t\tdisabled={isBlurred || (data.isSubscribed && !canDirectChat)}\n\t\t\t\t\t\t\t\taria-label={t('Direct chat — Pro')}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg class=\"h-[18px] w-[18px] text-blue\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z\" /></svg>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{#if data.session}\n\t\t\t\t\t\t<div class=\"relative hidden w-full max-w-[340px] md:block\">\n\t\t\t\t\t\t\t<div class=\"relative z-[1] flex flex-wrap items-center justify-center gap-2\">\n\t\t\t\t\t\t\t\t{#each superEmotes as e (e.t)}\n\t\t\t\t\t\t\t\t\t{@const isQueued = queuedEmotes.has(e.t)}\n\t\t\t\t\t\t\t\t\t{@const isDragging = emoteDragType === e.t}\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tdraggable=\"true\"\n\t\t\t\t\t\t\t\t\t\tondragstart={(ev: DragEvent) => onEmoteDragStart(ev, e.t)}\n\t\t\t\t\t\t\t\t\t\tondragend={onEmoteDragEnd}\n\t\t\t\t\t\t\t\t\t\tclass=\"group flex cursor-grab flex-row items-center gap-2 rounded-xl border px-4 py-2.5 transition-all duration-200 active:cursor-grabbing\n\t\t\t\t\t\t\t\t\t\t{isQueued\n\t\t\t\t\t\t\t\t\t\t\t? 'scale-95 border-orange/40 bg-orange/10'\n\t\t\t\t\t\t\t\t\t\t\t: 'border-border bg-surface-2 hover:border-orange/20 hover:bg-orange/[.04] active:scale-90'}\n\t\t\t\t\t\t\t\t\t\t{isDragging ? '!border-border !bg-surface-2 opacity-40 grayscale' : ''}\"\n\t\t\t\t\t\t\t\t\t\tonclick={() => toggleEmoteQueue(e.t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\tclass=\"h-5 w-5 transition-colors duration-200 {isQueued\n\t\t\t\t\t\t\t\t\t\t\t\t? 'text-orange'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'text-muted/40 group-hover:text-orange'}\"\n\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"><path d={e.d} /></svg\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"text-[11px] font-semibold transition-colors duration-200 {isQueued\n\t\t\t\t\t\t\t\t\t\t\t\t? 'text-orange'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'text-muted/40 group-hover:text-text'}\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{isQueued ? t('queued') : t(e.label)}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/if}\n\n\t\t\t\t\t<!-- Emote msg — desktop only (mobile shows queued count via the picker FAB badge). -->\n\t\t\t\t\t{#if data.session}\n\t\t\t\t\t\t<div class=\"hidden md:contents\">\n\t\t\t\t\t\t\t{#if emoteError}\n\t\t\t\t\t\t\t\t<p class=\"text-center text-[10px] text-coral\">{emoteError}</p>\n\t\t\t\t\t\t\t{:else if pendingCost > 0}\n\t\t\t\t\t\t\t\t<p class=\"text-center text-[9px] text-orange/60\">\n\t\t\t\t\t\t\t\t\t{queuedEmotes.size > 1\n\t\t\t\t\t\t\t\t\t\t? t('{n} emotes queued · {cost} tokens on vote', { n: queuedEmotes.size, cost: pendingCost })\n\t\t\t\t\t\t\t\t\t\t: t('{n} emote queued · {cost} tokens on vote', { n: queuedEmotes.size, cost: pendingCost })}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<p class=\"text-center text-[9px] text-muted/20\">{t('tap to queue · 2 tokens each')}</p>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/if}\n\n\t\t\t\t\t<!-- Swipe count: absolute mobile overlay (bottom-3 below action row); normal-flow desktop. -->\n\t\t\t\t\t<p\n\t\t\t\t\t\tclass=\"absolute right-0 bottom-3 left-0 z-30 flex items-center justify-center gap-1.5 text-[10px] tracking-[.05em] text-white/40 md:relative md:right-auto md:bottom-auto md:left-auto md:z-auto md:text-muted/25\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#if resumeNote}\n\t\t\t\t\t\t\t<span class=\"text-white/80 md:text-muted-2\"\n\t\t\t\t\t\t\t\t>{t('{note} · {n} left today', { note: resumeNote, n: remainingSwipes })}</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t{:else if data.isSubscribed}\n\t\t\t\t\t\t\t{t('swipe free · unlimited')}\n\t\t\t\t\t\t{:else if anonTap}\n\t\t\t\t\t\t\t<!-- RAT-525: the truth for someone who hasn't signed in, and a way in. -->\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"cursor-pointer px-2 py-1 text-white/70 md:text-muted-2\"\n\t\t\t\t\t\t\t\tonclick={() => openArenaSignIn('arena_swipes')}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"font-semibold text-orange\">{t('sign in')}</span> — {t('{n} free swipes a day', { n: data.freeDailySwipes })}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{t('swipe free · {n} cards left today', { n: remainingSwipes })}\n\t\t\t\t\t\t\t{#if data.session}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"cursor-pointer rounded border border-orange/20 bg-orange/5 px-1.5 py-0.5 text-[9px] font-semibold text-orange transition-all hover:bg-orange/10\"\n\t\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\t\tshowUpgradeModal = true;\n\t\t\t\t\t\t\t\t\t\tanalytics.trackUpgradeModalOpen('arena_swipe_limit');\n\t\t\t\t\t\t\t\t\t}}>{t('more')}</button\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{/if}\n\t\t\t\t\t</p>\n\t\t\t\t{:else}\n\t\t\t\t\t<!-- Skeleton -->\n\t\t\t\t\t<div class=\"relative w-full max-w-[340px] pr-2 pb-2\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"absolute top-[8px] right-[-8px] bottom-[-8px] left-[8px] rounded-2xl border border-border bg-surface opacity-50\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"absolute top-[4px] right-[-4px] bottom-[-4px] left-[4px] rounded-2xl border border-border bg-surface-2 opacity-70\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t\t<div class=\"relative z-[2] overflow-hidden rounded-2xl border border-border bg-surface\">\n\t\t\t\t\t\t\t<div class=\"aspect-[3/4] w-full animate-pulse bg-surface-2\"></div>\n\t\t\t\t\t\t\t<div class=\"p-5\">\n\t\t\t\t\t\t\t\t<div class=\"h-6 w-28 animate-pulse rounded bg-surface-2\"></div>\n\t\t\t\t\t\t\t\t<div class=\"mt-2 h-3 w-44 animate-pulse rounded bg-surface-2\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex items-center justify-center gap-5\">\n\t\t\t\t\t\t<div class=\"h-14 w-14 animate-pulse rounded-full border border-border bg-surface\"></div>\n\t\t\t\t\t\t<div class=\"h-14 w-14 animate-pulse rounded-full border border-border bg-surface\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\n\t\t\t\t{#if loading}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"h-5 w-5 animate-spin rounded-full border-2 border-orange/20 border-t-orange\"\n\t\t\t\t\t></div>\n\t\t\t\t{/if}\n\t\t\t</div>\n\n\t\t\t<!-- ═══ SIDEBAR ═══ desktop only; mobile uses fullscreen card + FAB submit + drawer -->\n\t\t\t<div class=\"hidden flex-col gap-4 p-5 md:flex\">\n\t\t\t\t<!-- FILTER (desktop). Inline chips; each tap = setCategoryFilter()\n\t\t\t\t     = single goto = single server roundtrip. Mobile gets the\n\t\t\t\t     batched bottom-sheet picker triggered from the navbar pill. -->\n\t\t\t\t<div class=\"overflow-hidden rounded-xl border border-border bg-surface\">\n\t\t\t\t\t<div class=\"flex items-center justify-between border-b border-border px-5 py-3\">\n\t\t\t\t\t\t<span class=\"text-[10px] font-medium tracking-[.15em] text-muted uppercase\">\n\t\t\t\t\t\t\t{t('filter')}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{#if activeCategories.length > 0}\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\tclass=\"cursor-pointer text-[10px] font-medium text-orange transition-colors hover:text-orange-dark\"\n\t\t\t\t\t\t\t\tonclick={() => setCategoryFilter([])}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{t('clear')}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex flex-wrap gap-1.5 p-3\">\n\t\t\t\t\t\t{#each ARENA_CATEGORIES as cat (cat)}\n\t\t\t\t\t\t\t{@const active = activeCategories.includes(cat)}\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\tclass=\"cursor-pointer rounded-full border px-2.5 py-1 font-display text-[10px] font-semibold transition-colors {active\n\t\t\t\t\t\t\t\t\t? 'border-orange/40 bg-orange/10 text-orange'\n\t\t\t\t\t\t\t\t\t: 'border-border text-muted/60 hover:text-text'}\"\n\t\t\t\t\t\t\t\tonclick={() =>\n\t\t\t\t\t\t\t\t\tsetCategoryFilter(\n\t\t\t\t\t\t\t\t\t\tactive ? activeCategories.filter((c) => c !== cat) : [...activeCategories, cat]\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-pressed={active}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ARENA_CATEGORY_LABELS[cat]}\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<!-- LIKES (RAT-420): desktop entry to the who-liked-you grid -->\n\t\t\t\t{#if data.session}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"/a/likes\"\n\t\t\t\t\t\tclass=\"flex items-center justify-between rounded-xl border border-border bg-surface px-5 py-3 no-underline transition-colors hover:bg-white/[.03]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<svg class=\"h-4 w-4 text-orange\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\td=\"M12 21s-7-4.35-9.5-8.5C1 9.5 2.5 6 6 6c2 0 3.2 1.2 4 2.3C10.8 7.2 12 6 14 6c3.5 0 5 3.5 3.5 6.5C19 16.65 12 21 12 21z\"\n\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[12px] font-semibold text-text\">{t('likes')}</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{#if likesCount > 0}\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"rounded-full bg-orange px-2 py-0.5 font-display text-[11px] font-bold text-white\"\n\t\t\t\t\t\t\t\t>{likesCount}</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<span class=\"text-[11px] text-muted/50\">{t('see who liked you')}</span>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</a>\n\t\t\t\t{/if}\n\n\t\t\t\t<!-- ARENA LIVE -->\n\t\t\t\t<div class=\"overflow-hidden rounded-xl border border-border bg-surface\">\n\t\t\t\t\t<div class=\"flex items-center gap-2.5 border-b border-border px-5 py-3\">\n\t\t\t\t\t\t<div class=\"relative h-1.5 w-1.5 shrink-0\">\n\t\t\t\t\t\t\t<span class=\"absolute inset-0 rounded-full bg-orange\"></span>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"absolute inset-0 animate-pulse rounded-full bg-orange/30 shadow-[0_0_0_3px_rgba(249,115,22,.15)]\"\n\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span class=\"text-[10px] font-medium tracking-[.15em] text-orange uppercase\"\n\t\t\t\t\t\t\t>{t('arena live')}</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex items-center justify-between px-5 py-3\">\n\t\t\t\t\t\t{#if data.isSubscribed}\n\t\t\t\t\t\t\t<span class=\"text-[11px] text-muted/50\">{t('unlimited swipes')}</span>\n\t\t\t\t\t\t{:else if anonTap}\n\t\t\t\t\t\t\t<span class=\"text-[11px] text-muted/50\">{t('{n} free swipes a day', { n: data.freeDailySwipes })}</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclass=\"cursor-pointer rounded border border-orange/20 bg-orange/5 px-2 py-0.5 text-[10px] font-semibold text-orange transition-all hover:bg-orange/10\"\n\t\t\t\t\t\t\t\tonclick={() => openArenaSignIn('arena_swipes')}>{t('sign in')}</button\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<span class=\"text-[11px] text-muted/50\">{t('{n} swipes left today', { n: remainingSwipes })}</span>\n\t\t\t\t\t\t\t{#if data.session}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"cursor-pointer rounded border border-orange/20 bg-orange/5 px-2 py-0.5 text-[10px] font-semibold text-orange transition-all hover:bg-orange/10\"\n\t\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\t\tshowUpgradeModal = true;\n\t\t\t\t\t\t\t\t\t\tanalytics.trackUpgradeModalOpen('arena_swipe_limit');\n\t\t\t\t\t\t\t\t\t}}>{t('more')}</button\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{/if}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- YOUR SUBMISSION stats -->\n\t\t\t\t<div class=\"overflow-hidden rounded-xl border border-border bg-surface\">\n\t\t\t\t\t<div class=\"flex items-center justify-between border-b border-border px-5 py-3\">\n\t\t\t\t\t\t<span class=\"text-[10px] font-medium tracking-[.15em] text-muted/30 uppercase\"\n\t\t\t\t\t\t\t>{t('your submission')}</span\n\t\t\t\t\t\t>\n\t\t\t\t\t\t{#if hasSubs}\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref=\"/a/dashboard\"\n\t\t\t\t\t\t\t\tclass=\"text-[10px] font-medium text-orange no-underline hover:text-orange-dark\"\n\t\t\t\t\t\t\t\t>{t('view all')}</a\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"p-5\">\n\t\t\t\t\t\t{#if hasSubs && bestSub}\n\t\t\t\t\t\t\t<div class=\"mb-4 text-center\">\n\t\t\t\t\t\t\t\t<p class=\"font-display text-5xl leading-none font-bold tracking-tight text-orange\">\n\t\t\t\t\t\t\t\t\t{myApproval}<span class=\"text-2xl text-muted/30\">%</span>\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<p class=\"mt-1 text-[10px] text-muted/30\">{t('approval rate')}</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"mb-4\">\n\t\t\t\t\t\t\t\t<div class=\"mb-1.5 flex justify-between text-[10px] text-muted/30\">\n\t\t\t\t\t\t\t\t\t<span>{t('nope {pct}%', { pct: 100 - myApproval })}</span><span>{t('approve {pct}%', { pct: myApproval })}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"h-1.5 overflow-hidden rounded-sm bg-border\">\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"h-full rounded-sm bg-gradient-to-r from-coral via-orange to-green transition-all duration-1000\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"width:{myApproval}%\"\n\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"grid grid-cols-2 gap-2\">\n\t\t\t\t\t\t\t\t<div class=\"rounded-lg bg-surface-2 p-3 text-center\">\n\t\t\t\t\t\t\t\t\t<span class=\"font-display text-xl font-bold text-orange\">{myTotalVotes}</span>\n\t\t\t\t\t\t\t\t\t<p class=\"text-[9px] text-muted/30\">{t('total votes')}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"rounded-lg bg-surface-2 p-3 text-center\">\n\t\t\t\t\t\t\t\t\t<span class=\"font-display text-xl font-bold text-purple\">{myTotalEmotes}</span>\n\t\t\t\t\t\t\t\t\t<p class=\"text-[9px] text-muted/30\">{t('super reacts')}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{:else if data.session}\n\t\t\t\t\t\t\t<div class=\"text-center\">\n\t\t\t\t\t\t\t\t<p class=\"text-[12px] text-muted/40\">{t('no submissions yet.')}</p>\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\thref=\"/a/submit\"\n\t\t\t\t\t\t\t\t\tclass=\"mt-2 inline-block text-[11px] font-medium text-orange no-underline hover:text-orange-dark\"\n\t\t\t\t\t\t\t\t\t>{t('enter the arena')}</a\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<p class=\"text-center text-[12px] text-muted\">\n\t\t\t\t\t\t\t\t<a href=\"/a/submit\" class=\"text-orange no-underline hover:underline\">{t('sign in')}</a> {t('to see your stats')}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- INSIGHTS STATUS -->\n\t\t\t\t{#if data.session && hasSubs && bestSub}\n\t\t\t\t\t<div class=\"overflow-hidden rounded-xl border border-border bg-surface\">\n\t\t\t\t\t\t<div class=\"flex items-center gap-1.5 border-b border-border px-5 py-3\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tclass=\"h-3 w-3 text-orange\"\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=\"2\"\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=\"M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z\"\n\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[10px] font-medium tracking-[.15em] text-muted/30 uppercase\"\n\t\t\t\t\t\t\t\t>{t('insights')}</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- Who reacted -->\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"/a/dashboard/{bestSub.id}\"\n\t\t\t\t\t\t\tclass=\"flex items-center gap-3 border-b border-border px-5 py-3 no-underline transition-colors hover:bg-surface-2\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#if bestSub.reactionsRevealed}\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-3.5 w-3.5 shrink-0 text-green\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\td=\"M4.5 12.75l6 6 9-13.5\"\n\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"flex-1 text-[12px] text-text\">{t('who reacted')}</span>\n\t\t\t\t\t\t\t\t<span class=\"text-[10px] text-green\">{t('revealed')}</span>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-3.5 w-3.5 shrink-0 text-muted/25\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"1.5\"\n\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\td=\"M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z\"\n\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"flex-1 text-[12px] text-muted/50\">{t('who reacted')}</span>\n\t\t\t\t\t\t\t\t<span class=\"rounded bg-orange/10 px-1.5 py-0.5 text-[9px] font-bold text-orange\"\n\t\t\t\t\t\t\t\t\t>3</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</a>\n\n\t\t\t\t\t\t<!-- Vote breakdown -->\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"/a/dashboard/{bestSub.id}\"\n\t\t\t\t\t\t\tclass=\"flex items-center gap-3 border-b border-border px-5 py-3 no-underline transition-colors hover:bg-surface-2\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#if bestSub.breakdownRevealed}\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-3.5 w-3.5 shrink-0 text-green\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\td=\"M4.5 12.75l6 6 9-13.5\"\n\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"flex-1 text-[12px] text-text\">{t('vote breakdown')}</span>\n\t\t\t\t\t\t\t\t<span class=\"text-[10px] text-green\">{t('unlocked')}</span>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-3.5 w-3.5 shrink-0 text-muted/25\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"1.5\"\n\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\td=\"M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z\"\n\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"flex-1 text-[12px] text-muted/50\">{t('vote breakdown')}</span>\n\t\t\t\t\t\t\t\t<span class=\"rounded bg-orange/10 px-1.5 py-0.5 text-[9px] font-bold text-orange\"\n\t\t\t\t\t\t\t\t\t>2</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</a>\n\n\t\t\t\t\t\t<!-- AI rating -->\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"/a/dashboard/{bestSub.id}\"\n\t\t\t\t\t\t\tclass=\"flex items-center gap-3 border-b border-border px-5 py-3 no-underline transition-colors hover:bg-surface-2\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#if bestSub.arenaRating}\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-3.5 w-3.5 shrink-0 text-green\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\td=\"M4.5 12.75l6 6 9-13.5\"\n\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"flex-1 text-[12px] text-text\">{t('AI rating')}</span>\n\t\t\t\t\t\t\t\t<span class=\"font-display text-[12px] font-bold text-orange\"\n\t\t\t\t\t\t\t\t\t>{bestSub.arenaRating}</span\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-3.5 w-3.5 shrink-0 text-muted/25\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstroke-width=\"1.5\"\n\t\t\t\t\t\t\t\t\t><path\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\td=\"M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z\"\n\t\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"flex-1 text-[12px] text-muted/50\">{t('AI rating')}</span>\n\t\t\t\t\t\t\t\t<span class=\"rounded bg-orange/10 px-1.5 py-0.5 text-[9px] font-bold text-orange\"\n\t\t\t\t\t\t\t\t\t>4</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</a>\n\n\t\t\t\t\t\t<!-- Boost -->\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"/a/dashboard/{bestSub.id}\"\n\t\t\t\t\t\t\tclass=\"flex items-center gap-3 px-5 py-3 no-underline transition-colors hover:bg-surface-2\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#if bestSub.isBoosted}\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-3.5 w-3.5 shrink-0 text-orange\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"><path d=\"M13 10V3L4 14h7v7l9-11h-7z\" /></svg\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"flex-1 text-[12px] text-text\">{t('24h boost')}</span>\n\t\t\t\t\t\t\t\t<span class=\"text-[10px] font-bold text-orange\">{t('LIVE')}</span>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclass=\"h-3.5 w-3.5 shrink-0 text-muted/25\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"><path d=\"M13 10V3L4 14h7v7l9-11h-7z\" /></svg\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"flex-1 text-[12px] text-muted/50\">{t('24h boost')}</span>\n\t\t\t\t\t\t\t\t<span class=\"rounded bg-orange/10 px-1.5 py-0.5 text-[9px] font-bold text-orange\"\n\t\t\t\t\t\t\t\t\t>5</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</a>\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\n\t\t\t\t<!-- RANK -->\n\t\t\t\t{#if data.session}\n\t\t\t\t\t<div class=\"overflow-hidden rounded-xl border border-border bg-surface\">\n\t\t\t\t\t\t<div class=\"flex items-center gap-1.5 border-b border-border px-5 py-3\">\n\t\t\t\t\t\t\t<svg class=\"h-3 w-3 text-orange\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t\t\t><path d=\"M2.8 14.6L1 6l5.5 4L12 3l5.5 7L23 6l-1.8 8.6H2.8zM4 19h16v2H4v-2z\" /></svg\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[10px] font-medium tracking-[.15em] text-muted/30 uppercase\"\n\t\t\t\t\t\t\t\t>{t('arena rank')}</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"p-5\">\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-2.5\">\n\t\t\t\t\t\t\t\t<img src={myRank.img} alt={t(myRank.name)} class=\"h-12 w-12\" />\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<p class=\"font-display text-base font-bold text-orange\">{t(myRank.name)}</p>\n\t\t\t\t\t\t\t\t\t<p class=\"text-[10px] text-muted/30\">\n\t\t\t\t\t\t\t\t\t\t{#if !hasSubs}\n\t\t\t\t\t\t\t\t\t\t\t{t('submit & get votes to rank up')}\n\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t{t('{pct}% approval · {n} votes', { pct: myApproval, n: myTotalVotes })}\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{#if hasSubs}\n\t\t\t\t\t\t\t\t<div class=\"mt-3 h-1 overflow-hidden rounded-sm bg-border\">\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"h-full rounded-sm bg-gradient-to-r from-orange to-yellow transition-all duration-1000\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"width:{rankProgress}%\"\n\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{#if myRank.next}\n\t\t\t\t\t\t\t\t\t<p class=\"mt-2 text-[10px] text-muted/30\">\n\t\t\t\t\t\t\t\t\t\t{t('{n} more votes to reach {rank}', { n: votesToNext, rank: t(rankTiers[rankTiers.indexOf(myRank) + 1].name) })}\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t<p class=\"mt-2 text-[10px] text-orange/60\">{t(\"max rank — you're a legend\")}</p>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\n\t\t\t\t<!-- Actions -->\n\t\t\t\t<div class=\"flex flex-col gap-2 pt-2\">\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"/a/submit\"\n\t\t\t\t\t\tclass=\"flex cursor-pointer items-center justify-center gap-2 rounded-xl bg-orange px-4 py-3 font-display text-sm font-bold text-white no-underline transition-all hover:bg-orange-dark\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclass=\"h-4 w-4\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\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\t><path\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\td=\"M12 4.5v15m7.5-7.5h-15\"\n\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t>\n\t\t\t\t\t\t{t('enter the arena')}\n\t\t\t\t\t</a>\n\t\t\t\t\t{#if hasSubs}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"/a/dashboard\"\n\t\t\t\t\t\t\tclass=\"flex cursor-pointer items-center justify-center gap-2 rounded-xl border border-border px-4 py-3 text-sm font-medium text-muted no-underline transition-all hover:border-orange/20 hover:text-text\"\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-4 w-4\"\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\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 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z\"\n\t\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{t('full dashboard')}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<!-- /flex h-[100dvh] mobile wrapper -->\n</div>\n\n<!-- RAT-329: \"it's a match\" overlay. Fires the instant a like turns mutual.\n\t One clear CTA (start the chat) + a soft \"keep swiping\" exit. Anonymous\n\t submitters are revealed only here, to the person they matched. Coral is the\n\t deliberate romance accent for this moment (arena is otherwise orange). -->\n{#if matchInfo}\n\t<div\n\t\tclass=\"fixed inset-0 z-[100] flex flex-col items-center justify-center px-8 text-center\"\n\t\tstyle=\"background: radial-gradient(circle at 50% 28%, rgba(255, 77, 109, 0.14), transparent 60%), var(--color-bg);\"\n\t\ttransition:fade={{ duration: 200 }}\n\t>\n\t\t<div in:scale={{ duration: 350, start: 0.9, delay: 60 }} class=\"flex flex-col items-center\">\n\t\t\t<div class=\"mb-2.5 font-display text-xs font-bold tracking-[0.18em] text-coral uppercase\">\n\t\t\t\t{t('arena')}\n\t\t\t</div>\n\t\t\t<h2 class=\"mb-2 font-display text-[42px] leading-[0.95] font-bold tracking-tight text-text\">\n\t\t\t\t{t(\"it's a\")}<br />{t('match.')}\n\t\t\t</h2>\n\t\t\t<p class=\"mb-8 text-sm text-muted\">\n\t\t\t\t{#each t('you and {name} liked each other').split('{name}') as part, i (i)}{#if i}<b class=\"text-text\">{matchInfo.nickname ?? t('someone')}</b>{/if}{part}{/each}\n\t\t\t</p>\n\n\t\t\t<div class=\"relative mb-7 flex items-center justify-center\">\n\t\t\t\t<span\n\t\t\t\t\tclass=\"flex h-20 w-20 items-center justify-center rounded-full border-[3px] border-bg bg-surface-2 font-display text-base font-bold text-text\"\n\t\t\t\t\t>{t('YOU')}</span\n\t\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"-ml-6 flex h-20 w-20 items-center justify-center rounded-full border-[3px] border-bg bg-coral/20 font-display text-2xl font-bold text-coral uppercase\"\n\t\t\t\t\t>{(matchInfo.nickname ?? '?').trim().charAt(0) || '?'}</span\n\t\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"absolute top-1/2 left-1/2 z-[3] flex h-12 w-12 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full border-4 border-bg bg-coral text-white\"\n\t\t\t\t>\n\t\t\t\t\t<svg class=\"h-[22px] w-[22px]\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\n\t\t\t\t\t\t><path\n\t\t\t\t\t\t\td=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"\n\t\t\t\t\t\t/></svg\n\t\t\t\t\t>\n\t\t\t\t</span>\n\t\t\t</div>\n\n\t\t\t{#if matchInfo.wasAnonymous}\n\t\t\t\t<div\n\t\t\t\t\tclass=\"mb-7 inline-flex items-center gap-2 rounded-full border border-border bg-surface px-3.5 py-1.5 text-xs text-muted\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclass=\"h-3.5 w-3.5 text-orange\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t><circle cx=\"12\" cy=\"12\" r=\"3\" /><path\n\t\t\t\t\t\t\td=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7z\"\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/></svg\n\t\t\t\t\t>\n\t\t\t\t\t{t('they went anonymous — revealed just for you')}\n\t\t\t\t</div>\n\t\t\t{/if}\n\n\t\t\t{#if matchInfo.nickname}\n\t\t\t\t<p class=\"mb-2.5 font-display text-[10px] font-bold tracking-[0.18em] text-muted uppercase\">\n\t\t\t\t\t{t('say hi in one tap')}\n\t\t\t\t</p>\n\t\t\t\t<div class=\"mb-5 flex max-w-xs flex-wrap justify-center gap-2\">\n\t\t\t\t\t{#each OPENERS.arena_match.slice(0, 3) as o (o)}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonclick={() => sendMatchOpener(o)}\n\t\t\t\t\t\t\tclass=\"cursor-pointer rounded-full bg-surface-2 px-3.5 py-2 text-[13px] text-text transition-colors hover:bg-surface active:scale-[0.98]\"\n\t\t\t\t\t\t\t>{o}</button\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t{/if}\n\n\t\t\t<div class=\"flex w-full max-w-xs flex-col gap-2.5\">\n\t\t\t\t<button\n\t\t\t\t\tonclick={openMatchChat}\n\t\t\t\t\tclass=\"flex cursor-pointer items-center justify-center gap-2 rounded-xl bg-coral px-4 py-3.5 font-display text-sm font-bold text-white transition-all hover:bg-coral-dark active:scale-[0.98]\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclass=\"h-[18px] w-[18px]\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t><path\n\t\t\t\t\t\t\td=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"\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/></svg\n\t\t\t\t\t>\n\t\t\t\t\t{t('send a message')}\n\t\t\t\t</button>\n\t\t\t\t<button\n\t\t\t\t\tonclick={() => (matchInfo = null)}\n\t\t\t\t\tclass=\"cursor-pointer rounded-xl px-4 py-3 text-sm font-medium text-muted transition-colors hover:text-text\"\n\t\t\t\t>\n\t\t\t\t\t{t('keep swiping')}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n{/if}\n\n<style>\n\t@keyframes -global-wiggle {\n\t\t0%,\n\t\t100% {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\t25% {\n\t\t\ttransform: rotate(-2deg);\n\t\t}\n\t\t75% {\n\t\t\ttransform: rotate(2deg);\n\t\t}\n\t}\n\n\t/* Wrapper handles entrance animation — separate from drag transform */\n\t.card-enter-wrapper {\n\t\tanimation: card-enter 0.35s cubic-bezier(0.22, 0.68, 0.31, 1);\n\t}\n\t@keyframes card-enter {\n\t\t0% {\n\t\t\ttransform: scale(0.94) translateY(4px);\n\t\t\topacity: 0.3;\n\t\t}\n\t\t100% {\n\t\t\ttransform: scale(1) translateY(0);\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t/* Data section fades in with a slight delay */\n\t.card-data {\n\t\tanimation: data-fade 0.4s ease-out 0.1s both;\n\t}\n\t@keyframes data-fade {\n\t\t0% {\n\t\t\topacity: 0;\n\t\t\ttransform: translateY(6px);\n\t\t}\n\t\t100% {\n\t\t\topacity: 1;\n\t\t\ttransform: translateY(0);\n\t\t}\n\t}\n\n\t.swipe-slider {\n\t\t-webkit-appearance: none;\n\t\tappearance: none;\n\t\theight: 6px;\n\t\tborder-radius: 3px;\n\t\tbackground: var(--color-border);\n\t\toutline: none;\n\t}\n\t.swipe-slider::-webkit-slider-thumb {\n\t\t-webkit-appearance: none;\n\t\tappearance: none;\n\t\twidth: 22px;\n\t\theight: 22px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--color-orange);\n\t\tcursor: pointer;\n\t\tborder: 2px solid var(--color-bg);\n\t\tbox-shadow: 0 0 8px rgba(249, 115, 22, 0.3);\n\t}\n\t.swipe-slider::-moz-range-thumb {\n\t\twidth: 22px;\n\t\theight: 22px;\n\t\tborder-radius: 50%;\n\t\tbackground: var(--color-orange);\n\t\tcursor: pointer;\n\t\tborder: 2px solid var(--color-bg);\n\t\tbox-shadow: 0 0 8px rgba(249, 115, 22, 0.3);\n\t}\n\n\t/* Emote spend nudge — staggered pop-in of the picker chips + an attention\n\t   twinkle on the FAB and its \"new\" badge until the user discovers it. */\n\t.emote-pop {\n\t\tanimation: emote-pop-in 0.28s cubic-bezier(0.34, 1.56, 0.64, 1) both;\n\t}\n\t.emote-pop:nth-child(2) {\n\t\tanimation-delay: 0.05s;\n\t}\n\t.emote-pop:nth-child(3) {\n\t\tanimation-delay: 0.1s;\n\t}\n\t.emote-pop:nth-child(4) {\n\t\tanimation-delay: 0.15s;\n\t}\n\t@keyframes emote-pop-in {\n\t\tfrom {\n\t\t\ttransform: scale(0.3);\n\t\t\topacity: 0;\n\t\t}\n\t\tto {\n\t\t\ttransform: scale(1);\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t.star-nudge {\n\t\tanimation: star-nudge-pulse 1.8s ease-in-out infinite;\n\t}\n\t@keyframes star-nudge-pulse {\n\t\t0%,\n\t\t100% {\n\t\t\ttransform: scale(1) rotate(0deg);\n\t\t}\n\t\t50% {\n\t\t\ttransform: scale(1.08) rotate(6deg);\n\t\t}\n\t}\n\n\t.new-pulse {\n\t\tanimation: new-badge-bounce 1.2s ease-in-out infinite;\n\t}\n\t@keyframes new-badge-bounce {\n\t\t0%,\n\t\t100% {\n\t\t\ttransform: translateY(0);\n\t\t}\n\t\t50% {\n\t\t\ttransform: translateY(-2px);\n\t\t}\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.emote-pop,\n\t\t.star-nudge,\n\t\t.new-pulse {\n\t\t\tanimation: none;\n\t\t}\n\t}\n</style>\n"],"version":3}