{"release_id":"01a1c502-4ad1-0000-ec62-adc54d3c69aa","chunk_id":"01a1c502-4cab-7c72-9769-19703bd7d91e","file":"151.D7iONzTl.mjs","mappings":"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","names":["maxScore","mode","size","radius","circumference","strokeWidth","viewSize","progress","$.state","displayScore","color","glowColor","onMount","start","duration","tick","now","p","eased","$$props","$.set","div","root","div_1","$.child","svg","$.sibling","circle","$.set_attribute","circle_1","$.set_style","circle_2","div_2","span","$.get","loading","goUnlimited","analytics.trackPurchaseClick","PRO_MONTHLY_LABEL","res","result","dismiss","analytics.trackUpgradeModalClose","button","button_1","div_3","text","$.reset","h3","span_1","text_1","div_4","div_5","div_6","div_7","div_8","span_2","span_3","text_5","p_1","div_9","span_4","span_5","text_7","span_6","ul","li","li_1","li_2","li_3","div_10","button_2","text_14","div_11","span_7","span_8","span_9","button_3","text_18","$0","$1","t","PRO_BREAK_EVEN_UNLOCKS","PRO_MONTHLY_TOKENS","$.delegated","$.transition","fly","fade","$.append","$$anchor","showShareButtons","$.prop","isRoast","ac","$.derived","acRaw","imgFailed","copied","shareText","matchUrl","initials","w","roundRect","ctx","x","y","h","r","generateCard","W","H","canvas","font","bg","glow","logoW","dotW","badgeX","avatarSize","avatarX","avatarY","img","resolve","reject","nameY","tagline","matchFile","matchBlobUrl","$.user_effect","cancelled","localUrl","blob","downloadMatchCard","filename","trackScorecardDownload","a","copyShareText","shareToX","url","shareToFacebook","shareToReddit","title","body","h2","$.first_child","fragment","$$render","consequent","alternate","consequent_1","alternate_1","node_2","img_1","root_5","$.replay_events","consequent_2","root_6","$.set_class","consequent_3","p_2","$.each","dim","root_7","div_12","div_13","div_14","$.set_text","text_6","text_8","p_3","root_8","fragment_3","fragment_4","consequent_4","alternate_2","div_15","node_6","fragment_5","node_7","consequent_6","alternate_3","button_4","consequent_7","lock","$.noop","root_1","$.template_effect","$.clsx","gateCard","placement","root_2","root_3","text_2","buttonClass","sectionCta","act","acBg","acStroke","DIMENSIONS","msg","FREE_DIM_COUNT","section","h1","node_1","text_4","text_12","root_10","text_13","fragment_7","node_4","root_12","text_15","a_1","root_13","text_16","consequent_5","svg_1","node_5","section_1","text_21","span_10","div_16","i","div_17","root_14","div_18","div_19","span_11","div_20","div_21","span_12","text_24","span_13","section_2","div_22","h2_1","text_25","span_14","div_23","div_24","$.index","div_25","root_16","div_26","root_17","alternate_4","section_3","div_27","h2_2","text_27","span_15","div_28","div_29","div_30","root_18","div_31","div_32","div_33","nextStepFor","tier","ratersGlyph","svg_2","root_4","arrow","svg_3","chevron","svg_4","duelGlyph","PLACEMENT","offer","sectionBelow","shownSent","markShown","surface","trackOfferShown","watch","node","phone","io","entry","pick","product","position","trackOfferClicked","duelTitle","fragment_1","text_9","text_10","root_11","span_16","span_17","span_18","node_9","span_19","node_10","span_20","span_21","span_22","node_11","node_8","a_2","node_12","PostToFeedCta","$.attach","node_13","node_14","span_23","node_15","span_24","span_25","span_26","a_3","root_15","span_27","node_17","span_28","span_29","span_30","cubicOut","offers","beat","kind","RATE_SUBJECT_PATH","o","text_3","trackCtaClick","pornstars","DIMENSION_MAP","DIMENSION_LABELS","getUserDimensions","dimensions","key","KEYS","euclideanDistance","user","star","sumSq","count","userVal","getDimensionComparisons","findStarMatch","userDims","maxDistance","bestStar","bestDistance","dist","similarity","sorted","b","gen","subject","isOwner","reportOpen","hasSavedPhoto","activeMode","onDestroy","acGlow","status","$.proxy","results","errorMessage","g","barsAnimated","nuked","cardName","analysisDone","stalledByNetwork","timedOut","foilPollDone","currentFact","subscribed","breakdownUnlocked","unlocking","isLocked","singleUnlockDismissed","proLoading","scrollUpsellPrimed","scrollUpsellListener","primeScrollUpsell","upgradeFeature","showUpgradeModal","analytics.trackUpgradeModalOpen","pollFoilCard","deadline","invalidateAll","clickGoPro","GATE_PLACEMENTS","gateVariant","signUpFromGate","analytics.trackCtaClick","openAuthSheet","goProFromGate","gateViewTracked","analytics.trackFunnelStep","showPostUnlockUpsell","orbColor","facts","score","rank","potential","pointsLeft","verdict","sanitizeVerdict","tips","starMatch","scoreTier","upsellCardOrder","duelLimitOpen","startingDuel","startDuelOneClick","deserialize","d","genId","code","goto","analytics.trackDuelLimitBlocked","DUEL_FREE_CREATES","freeDimensions","lockedDimensions","lowestDim","min","lowestGap","unlockBreakdown","analytics.trackBreakdownUnlock","pollInterval","factInterval","GENERIC_ANALYSIS_ERROR","SAFE_ERROR_RE","userFacingError","trimmed","loaderStartedAt","settled","settle","outcome","elapsed","analytics.trackAnalysisSettled","POLL_DEADLINE_MS","hiddenMs","hiddenSince","onVisibilityChange","elapsedVisibleMs","hiddenNow","stopPolling","startPolling","json","analytics.trackAnalysisFail","notAuthenticated","analysisKicked","startAnalysis","analytics.trackAnalysisStart","message","err","sendErrorText","u","notifySignedIn","linkCopied","cardBlob","drawScorecard","chipGrad","scoreW","rankW","dotY","downloadCard","analytics.trackScorecardDownload","file","triggerBlobDownload","link","shareInFlight","shareResult","analytics.trackShare","claimOpen","claimPlatform","claimUrl","claimSubmitting","claimError","claimSuccess","shareReward","claimStatus","submitClaim","data","roastHeadlines","hypeHeadlines","heroLine","$.head","meta","fragment_2","AnalyzingProgress","RATED_COUNT_SHORT","root_9","h2_3","p_4","p_5","text_17","text_19","a_4","text_22","d_1","h2_4","text_23","p_6","a_5","text_26","d_2","section_4","h2_5","p_7","a_6","text_30","section_5","h2_6","fragment_6","text_31","p_8","p_9","a_7","text_35","h2_7","text_36","p_10","a_8","text_39","d_3","section_6","h2_8","text_40","p_11","text_43","section_7","h2_9","text_44","p_12","a_9","text_47","section_8","h2_10","text_48","p_13","a_10","text_51","SignupGateResult","section_9","fragment_9","fragment_10","fragment_11","consequent_13","p_14","text_57","text_58","consequent_14","root_24","root_25","text_59","root_26","text_60","consequent_15","alternate_5","consequent_16","ScoreGauge","NextStep","SubjectNextStep","consequent_18","section_10","root_29","h2_11","text_67","text_69","text_71","text_73","text_75","text_77","consequent_19","consequent_20","consequent_21","consequent_23","alternate_6","p_15","consequent_24","alternate_7","span_31","p_16","FoilCardHero","text_82","text_83","consequent_25","section_11","root_38","h2_12","span_32","text_86","p_17","consequent_26","section_12","root_39","h2_13","span_33","text_89","span_34","text_91","span_35","span_36","text_94","span_37","text_96","consequent_27","consequent_29","alternate_8","p_18","consequent_30","consequent_31","alternate_9","label","input","$.remove_input_defaults","text_102","node_20","text_103","text_104","consequent_32","alternate_10","div_34","div_35","div_36","div_37","span_38","span_39","span_40","div_38","div_39","span_41","div_40","span_42","span_43","div_41","div_42","p_19","p_20","div_43","p_21","div_44","div_45","root_49","div_46","span_44","text_112","$$value","consequent_33","section_13","root_50","div_47","div_48","StarMatch","node_22","section_14","root_51","div_49","div_50","h2_14","span_45","text_113","p_22","consequent_35","alternate_11","div_51","div_52","div_53","div_54","span_46","p_23","span_47","span_48","div_55","p_24","span_49","div_56","span_50","div_57","div_58","root_54","span_51","div_59","div_60","div_61","span_52","span_53","div_62","div_63","div_64","span_54","span_55","text_123","text_125","p_25","root_55","span_56","text_126","span_57","span_58","text_128","span_59","text_131","span_60","span_61","text_133","consequent_36","alternate_12","consequent_37","div_65","button_5","root_58","text_136","button_6","root_59","text_137","consequent_38","alternate_13","$2","text_118","consequent_34","consequent_39","section_15","node_21","div_66","h2_15","span_62","text_138","span_63","text_140","consequent_40","alternate_14","p_26","consequent_41","alternate_15","div_67","div_68","root_64","div_69","div_70","div_71","span_64","div_72","div_73","span_65","div_74","div_75","div_76","p_27","text_145","text_146","div_77","root_65","div_78","div_79","h3_1","consequent_42","alternate_16","p_28","div_80","button_7","root_68","text_150","button_8","root_69","text_151","consequent_43","alternate_17","consequent_44","section_16","root_70","div_81","div_82","div_83","h2_16","span_66","text_152","span_67","fragment_44","span_68","text_156","consequent_45","consequent_46","alternate_18","p_29","consequent_47","consequent_48","alternate_19","div_84","div_85","span_69","span_70","div_86","span_71","span_72","div_87","node_35","cardId","a_11","root_78","div_88","p_30","p_31","a_12","root_79","div_89","p_32","p_33","consequent_49","alternate_20","div_90","root_80","p_34","span_73","text_170","a_13","consequent_50","div_91","a_14","root_82","span_74","h3_2","p_35","div_92","div_93","span_75","span_76","div_94","span_77","div_95","span_78","span_79","span_80","div_96","span_81","a_15","root_83","span_82","h3_3","p_36","div_97","div_98","span_83","div_99","span_84","div_100","span_85","span_86","div_101","span_87","consequent_51","alternate_21","div_102","root_84","div_103","div_104","p_37","span_88","text_191","p_38","button_9","root_85","text_194","a_16","root_86","consequent_52","alternate_22","consequent_53","consequent_54","section_17","node_32","div_105","h2_17","span_89","text_196","span_90","text_198","consequent_55","alternate_23","p_39","consequent_56","alternate_24","div_106","fragment_55","$.html","div_107","div_108","span_91","span_92","div_109","span_93","span_94","div_110","root_92","div_111","div_112","h3_4","p_40","consequent_58","alternate_25","div_113","button_10","root_95","text_209","button_11","root_96","text_210","consequent_59","alternate_26","text_206","alternate_27","consequent_57","section_18","div_114","h2_18","span_95","text_211","span_96","text_213","consequent_60","alternate_28","p_41","consequent_61","alternate_29","div_115","root_101","tip","div_116","root_102","span_97","div_117","h4","p_42","span_98","text_217","text_218","text_219","text_220","firstTip","div_118","root_104","span_99","div_119","h4_1","p_43","span_100","text_221","text_222","text_223","text_224","consequent_63","div_120","node_49","div_121","_","div_122","root_105","div_123","div_124","div_125","div_126","div_127","div_128","h3_5","p_44","div_129","button_12","root_106","text_227","button_13","root_107","text_228","consequent_64","alternate_30","alternate_31","consequent_62","div_130","root_108","button_14","text_229","consequent_65","ReportContentModal","node_52","section_19","root_109","div_131","h2_19","p_45","div_132","fragment_63","a_17","h3_6","p_46","span_101","a_18","h3_7","p_47","span_102","p_48","a_19","text_238","a_20","p_49","root_111","node_55","RATE_SUBJECTS","s","a_21","root_112","text_241","consequent_66","alternate_32","div_133","node_54","button_15","text_243","span_103","analytics.trackNukeResults","consequent_67","consequent_8","consequent_9","consequent_10","consequent_12","alternate_33","$3","$4","analytics.trackDuelLimitExit","UpgradeModal","node_56","PostUnlockUpsell","consequent_68","div_134","root_114","button_16","div_135","button_17","div_136","div_137","root_115","h3_8","p_50","button_18","text_247","div_138","root_116","h3_9","p_51","button_19","text_251","div_139","root_117","div_140","span_104","h3_10","p_52","span_105","text_255","ol","span_106","span_107","span_108","div_141","button_20","button_21","input_1","node_60","p_53","root_118","consequent_71","div_142","button_22","text_264","button_23","text_265","$11","consequent_69","consequent_70","alternate_34","consequent_72"],"sources":["../../../../../../src/lib/components/ScoreGauge.svelte","../../../../../../src/lib/components/PostUnlockUpsell.svelte","../../../../../../src/lib/components/StarMatch.svelte","../../../../../../src/lib/components/rate/SignupGateResult.svelte","../../../../../../src/lib/result-next.ts","../../../../../../src/lib/components/rate/NextStep.svelte","../../../../../../src/lib/components/rate/SubjectNextStep.svelte","../../../../../../src/lib/data/pornstars.ts","../../../../../../src/lib/utils/starMatch.ts","../../../../../../src/routes/rate/result/[id]/+page.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport { onMount } from 'svelte';\n\n\tinterface Props {\n\t\tscore: number;\n\t\tmaxScore?: number;\n\t\tmode?: 'roast' | 'hype';\n\t\tsize?: number;\n\t}\n\n\tlet { score, maxScore = 10, mode = 'roast', size = 260 }: Props = $props();\n\n\tconst radius = 100;\n\tconst circumference = 2 * Math.PI * radius;\n\tconst strokeWidth = 6;\n\tconst viewSize = (radius + strokeWidth) * 2 + 20;\n\n\tlet progress = $state(0);\n\tlet displayScore = $state(0);\n\n\tconst color = $derived(mode === 'roast' ? '#FF4D6D' : '#FFE500');\n\tconst glowColor = $derived(mode === 'roast' ? 'rgba(255,77,109,' : 'rgba(255,229,0,');\n\n\tonMount(() => {\n\t\tconst start = performance.now();\n\t\tconst duration = 1800;\n\n\t\tfunction tick(now: number) {\n\t\t\tconst p = Math.min((now - start) / duration, 1);\n\t\t\tconst eased = 1 - Math.pow(1 - p, 3);\n\t\t\tprogress = eased * (score / maxScore);\n\t\t\tdisplayScore = Math.round(eased * score * 10) / 10;\n\t\t\tif (p < 1) requestAnimationFrame(tick);\n\t\t\telse {\n\t\t\t\tprogress = score / maxScore;\n\t\t\t\tdisplayScore = score;\n\t\t\t}\n\t\t}\n\t\trequestAnimationFrame(tick);\n\t});\n</script>\n\n<div class=\"relative\" style=\"width: {size}px; height: {size}px\">\n\t<!-- glow -->\n\t<div\n\t\tclass=\"absolute inset-0 rounded-full blur-[40px] transition-opacity duration-1000\"\n\t\tstyle=\"background: radial-gradient(circle, {glowColor}{0.08 + progress * 0.12}) 0%, transparent 70%); opacity: {0.5 + progress * 0.5}\"\n\t></div>\n\n\t<svg viewBox=\"0 0 {viewSize} {viewSize}\" class=\"relative h-full w-full\" style=\"transform: rotate(-90deg)\">\n\t\t<!-- background track -->\n\t\t<circle\n\t\t\tcx={viewSize / 2}\n\t\t\tcy={viewSize / 2}\n\t\t\tr={radius}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"rgba(255,255,255,.04)\"\n\t\t\tstroke-width={strokeWidth}\n\t\t/>\n\t\t<!-- slow rotating outer ring -->\n\t\t<circle\n\t\t\tcx={viewSize / 2}\n\t\t\tcy={viewSize / 2}\n\t\t\tr={radius + 14}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"rgba(255,255,255,.03)\"\n\t\t\tstroke-width=\"1\"\n\t\t\tstroke-dasharray=\"6 10\"\n\t\t\tclass=\"animate-[spin_30s_linear_infinite]\"\n\t\t\tstyle=\"transform-origin: {viewSize / 2}px {viewSize / 2}px\"\n\t\t/>\n\t\t<!-- progress arc -->\n\t\t<circle\n\t\t\tcx={viewSize / 2}\n\t\t\tcy={viewSize / 2}\n\t\t\tr={radius}\n\t\t\tfill=\"none\"\n\t\t\tstroke={color}\n\t\t\tstroke-width={strokeWidth}\n\t\t\tstroke-linecap=\"round\"\n\t\t\tstroke-dasharray={circumference}\n\t\t\tstroke-dashoffset={circumference * (1 - progress)}\n\t\t\tstyle=\"transition: stroke-dashoffset 0.05s linear; filter: drop-shadow(0 0 8px {glowColor}0.4))\"\n\t\t/>\n\t</svg>\n\n\t<!-- center content -->\n\t<div class=\"absolute inset-0 flex flex-col items-center justify-center\" style=\"transform: rotate(0deg)\">\n\t\t<span class=\"font-display text-5xl font-bold md:text-6xl\" style=\"color: {color}\">\n\t\t\t{displayScore}\n\t\t</span>\n\t\t<span class=\"mt-1 text-sm text-muted\">/10</span>\n\t</div>\n</div>\n","<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\timport { fade, fly } from 'svelte/transition';\n\timport * as analytics from '$lib/analytics';\n\timport { PRO_MONTHLY_TOKENS } from '$lib/pro-plan';\n\timport { PRO_MONTHLY_LABEL, PRO_BREAK_EVEN_UNLOCKS } from '$lib/pricing';\n\n\tinterface Props {\n\t\tgenerationId: string;\n\t\tmode: 'roast' | 'hype';\n\t\tonClose: () => void;\n\t}\n\n\tlet { generationId, mode, onClose }: Props = $props();\n\n\tconst isRoast = mode === 'roast';\n\n\tlet loading = $state(false);\n\n\tasync function goUnlimited() {\n\t\tif (loading) return;\n\t\tloading = true;\n\t\tanalytics.trackPurchaseClick(0, PRO_MONTHLY_LABEL, 'subscription_post_unlock');\n\t\ttry {\n\t\t\tconst res = await fetch('/api/checkout/subscription', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tsuccessPath: `/rate/result/${generationId}?subscribed=true`,\n\t\t\t\t\tcancelPath: `/rate/result/${generationId}`,\n\t\t\t\t\tsource: 'post_unlock'\n\t\t\t\t})\n\t\t\t});\n\t\t\tconst result = await res.json();\n\t\t\tif (res.ok && result.url) {\n\t\t\t\twindow.location.href = result.url;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (result.alreadySubscribed) {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t} catch {\n\t\t\t// fall through\n\t\t} finally {\n\t\t\tloading = false;\n\t\t}\n\t}\n\n\tfunction dismiss() {\n\t\tanalytics.trackUpgradeModalClose();\n\t\tonClose();\n\t}\n</script>\n\n<!-- svelte-ignore a11y_no_static_element_interactions -->\n<div\n\tclass=\"fixed inset-0 z-[100] flex items-end justify-center sm:items-center\"\n\trole=\"dialog\"\n\taria-modal=\"true\"\n\ttransition:fade={{ duration: 180 }}\n>\n\t<!-- backdrop -->\n\t<button\n\t\tclass=\"absolute inset-0 bg-black/70 backdrop-blur-sm\"\n\t\tonclick={dismiss}\n\t\taria-label={t('Close')}\n\t></button>\n\n\t<!-- modal — slides up on mobile, centered on desktop -->\n\t<div\n\t\tclass=\"relative w-full max-w-[420px] rounded-t-3xl border border-border bg-bg sm:mx-4 sm:rounded-3xl\"\n\t\ttransition:fly={{ y: 30, duration: 280 }}\n\t>\n\t\t<!-- grab indicator (mobile) -->\n\t\t<div class=\"flex justify-center pt-3 sm:hidden\">\n\t\t\t<div class=\"h-1 w-10 rounded-full bg-muted/20\"></div>\n\t\t</div>\n\n\t\t<!-- close button -->\n\t\t<button\n\t\t\tclass=\"absolute top-4 right-4 z-10 flex h-8 w-8 items-center justify-center rounded-full bg-surface text-muted/40 transition-colors hover:text-muted\"\n\t\t\tonclick={dismiss}\n\t\t\taria-label={t('Close')}\n\t\t>\n\t\t\t<svg\n\t\t\t\tclass=\"h-4 w-4\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2.5\"\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t>\n\t\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n\t\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n\t\t\t</svg>\n\t\t</button>\n\n\t\t<!-- header -->\n\t\t<div class=\"px-5 pt-6 sm:px-7 sm:pt-8\">\n\t\t\t<div class=\"text-center\">\n\t\t\t\t<span\n\t\t\t\t\tclass=\"inline-flex items-center gap-1.5 rounded-md bg-green/15 px-2.5 py-1 font-display text-[10px] font-bold tracking-tight text-green\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclass=\"h-2.5 w-2.5\"\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=\"3\"\n\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\" />\n\t\t\t\t\t</svg>\n\t\t\t\t\t{t('BREAKDOWN UNLOCKED')}\n\t\t\t\t</span>\n\t\t\t\t<h3 class=\"mt-4 font-display text-2xl font-bold tracking-tight sm:text-[1.6rem]\">\n\t\t\t\t\t{t('loved that?')} <span class=\"text-coral\">{t('go unlimited.')}</span>\n\t\t\t\t</h3>\n\t\t\t\t<p class=\"mt-1.5 text-[13px] leading-relaxed text-muted\">\n\t\t\t\t\t{t('unlimited unlocks, ratings, duels, enhances — no more $1.99 each.')}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- content -->\n\t\t<div class=\"px-5 pt-5 pb-2 sm:px-7\">\n\t\t\t<!-- subscription card (copied pattern from UpgradeModal) -->\n\t\t\t<div\n\t\t\t\tclass=\"relative overflow-hidden rounded-xl border border-coral/40 bg-coral/[.05] px-4 py-4 shadow-[0_4px_24px_rgba(0,0,0,0.4)]\"\n\t\t\t>\n\t\t\t\t<!-- glow -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"pointer-events-none absolute -top-10 -right-10 h-24 w-24 rounded-full bg-coral/15 blur-[40px]\"\n\t\t\t\t></div>\n\n\t\t\t\t<div class=\"relative z-10 flex items-center gap-3\">\n\t\t\t\t\t<div class=\"min-w-0 flex-1\">\n\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<span class=\"font-display text-sm font-bold tracking-tight\">{t('go unlimited')}</span>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"rounded-md bg-coral/15 px-1.5 py-0.5 text-[9px] font-bold text-coral\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{t('BEST VALUE')}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p class=\"mt-0.5 text-[11px] leading-relaxed text-muted/60\">\n\t\t\t\t\t\t\t{t('unlimited everything · cancel anytime')}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"shrink-0 text-right\">\n\t\t\t\t\t\t<span class=\"block font-display text-lg font-bold tracking-tight text-coral\">\n\t\t\t\t\t\t\t{PRO_MONTHLY_LABEL}<span class=\"text-[10px] text-muted/40\">{t('/mo')}</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span class=\"block text-[10px] text-muted/40\">\n\t\t\t\t\t\t\t{t('break-even at {n} unlocks', { n: PRO_BREAK_EVEN_UNLOCKS })}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- perks -->\n\t\t\t<ul class=\"mt-4 space-y-1.5 text-[12px] text-muted/70\">\n\t\t\t\t<li class=\"flex items-center gap-2.5\">\n\t\t\t\t\t<span class=\"h-1 w-1 shrink-0 rounded-full bg-coral\"></span>\n\t\t\t\t\t{t('{n} tokens every month', { n: PRO_MONTHLY_TOKENS })}\n\t\t\t\t</li>\n\t\t\t\t<li class=\"flex items-center gap-2.5\">\n\t\t\t\t\t<span class=\"h-1 w-1 shrink-0 rounded-full bg-coral\"></span>\n\t\t\t\t\t{t('unlimited full breakdowns (no $1.99 each)')}\n\t\t\t\t</li>\n\t\t\t\t<li class=\"flex items-center gap-2.5\">\n\t\t\t\t\t<span class=\"h-1 w-1 shrink-0 rounded-full bg-coral\"></span>\n\t\t\t\t\t{t('unlimited new ratings + AI enhances')}\n\t\t\t\t</li>\n\t\t\t\t<li class=\"flex items-center gap-2.5\">\n\t\t\t\t\t<span class=\"h-1 w-1 shrink-0 rounded-full bg-coral\"></span>\n\t\t\t\t\t{t('duels and arena boosts included')}\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</div>\n\n\t\t<!-- footer -->\n\t\t<div class=\"border-t border-border px-5 pt-4 pb-8 sm:px-7 sm:pb-9\">\n\t\t\t<button\n\t\t\t\tonclick={goUnlimited}\n\t\t\t\tdisabled={loading}\n\t\t\t\tclass=\"block w-full cursor-pointer rounded-xl bg-coral py-3.5 font-display text-[15px] font-semibold text-white transition-all hover:bg-coral-dark active:scale-[0.98] disabled:opacity-50\"\n\t\t\t>\n\t\t\t\t{loading ? t('redirecting to stripe…') : t('go unlimited — {price}/mo', { price: PRO_MONTHLY_LABEL })}\n\t\t\t</button>\n\n\t\t\t<!-- trust strip -->\n\t\t\t<div class=\"mt-3 flex items-center justify-center gap-3 text-[10px] text-muted/30\">\n\t\t\t\t<span class=\"flex items-center gap-1\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclass=\"h-2.5 w-2.5\"\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.5\"\n\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" />\n\t\t\t\t\t\t<path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n\t\t\t\t\t</svg>\n\t\t\t\t\t{t('secure')}\n\t\t\t\t</span>\n\t\t\t\t<span class=\"h-2.5 w-px bg-border\"></span>\n\t\t\t\t<span>{t('cancel anytime')}</span>\n\t\t\t\t<span class=\"h-2.5 w-px bg-border\"></span>\n\t\t\t\t<span>{t('keep what you bought')}</span>\n\t\t\t</div>\n\n\t\t\t<!-- dismiss -->\n\t\t\t<button\n\t\t\t\tclass=\"mt-3 block w-full text-center text-xs font-medium text-muted/30 transition-colors hover:text-muted\"\n\t\t\t\tonclick={dismiss}\n\t\t\t>\n\t\t\t\t{t(\"i'll think about it\")}\n\t\t\t</button>\n\t\t</div>\n\t</div>\n</div>\n","<script lang=\"ts\">\n\timport type { PornstarProfile } from '$lib/data/pornstars';\n\timport type { DimensionComparison } from '$lib/utils/starMatch';\n\timport { trackScorecardDownload } from '$lib/analytics';\n\n\tinterface Props {\n\t\tstar: PornstarProfile;\n\t\tsimilarity: number;\n\t\tmode: 'roast' | 'hype';\n\t\tscore: number;\n\t\tclosestDimensions: DimensionComparison[];\n\t\tfurthestDimension: DimensionComparison;\n\t\t/** Show the copy / X / Facebook / Reddit buttons next to \"download card\".\n\t\t *  Off on the rate-result page (download-only, foil-card style); on by\n\t\t *  default for the shared match / landing pages where sharing is the point. */\n\t\tshowShareButtons?: boolean;\n\t}\n\n\tlet {\n\t\tstar,\n\t\tsimilarity,\n\t\tmode,\n\t\tscore,\n\t\tclosestDimensions,\n\t\tfurthestDimension,\n\t\tshowShareButtons = true\n\t}: Props = $props();\n\n\tconst isRoast = $derived(mode === 'roast');\n\tconst ac = $derived(isRoast ? 'text-coral' : 'text-yellow');\n\tconst acRaw = $derived(isRoast ? '#FF4D6D' : '#FFE500');\n\n\tlet imgFailed = $state(false);\n\tlet copied = $state(false);\n\n\tconst shareText = $derived(\n\t\tisRoast\n\t\t\t? `AI says I'm ${similarity}% match with ${star.name}. I'm cooked. 💀`\n\t\t\t: `I matched ${similarity}% with ${star.name} 👑`\n\t);\n\n\tconst matchUrl = $derived(\n\t\t`https://ratemyd.app/match/${star.slug}?s=${similarity}&score=${score}&m=${mode}`\n\t);\n\n\tconst initials = $derived(\n\t\tstar.name\n\t\t\t.split(' ')\n\t\t\t.map((w) => w[0])\n\t\t\t.join('')\n\t\t\t.slice(0, 2)\n\t\t\t.toUpperCase()\n\t);\n\n\t// --- canvas share card ---\n\tfunction roundRect(ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, r: number) {\n\t\tctx.beginPath();\n\t\tctx.moveTo(x + r, y);\n\t\tctx.lineTo(x + w - r, y);\n\t\tctx.quadraticCurveTo(x + w, y, x + w, y + r);\n\t\tctx.lineTo(x + w, y + h - r);\n\t\tctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n\t\tctx.lineTo(x + r, y + h);\n\t\tctx.quadraticCurveTo(x, y + h, x, y + h - r);\n\t\tctx.lineTo(x, y + r);\n\t\tctx.quadraticCurveTo(x, y, x + r, y);\n\t\tctx.closePath();\n\t}\n\n\tasync function generateCard(): Promise<HTMLCanvasElement> {\n\t\t// ensure web fonts are loaded before drawing\n\t\tawait document.fonts.ready;\n\n\t\tconst W = 600, H = 600;\n\t\tconst canvas = document.createElement('canvas');\n\t\tcanvas.width = W;\n\t\tcanvas.height = H;\n\t\tconst ctx = canvas.getContext('2d')!;\n\t\tconst font = '\"Space Grotesk\", system-ui, sans-serif';\n\n\t\t// background\n\t\tconst bg = ctx.createLinearGradient(0, 0, W, H);\n\t\tbg.addColorStop(0, '#1a1a1a');\n\t\tbg.addColorStop(0.4, '#111111');\n\t\tbg.addColorStop(1, '#0d0d0d');\n\t\tctx.fillStyle = bg;\n\t\troundRect(ctx, 0, 0, W, H, 24);\n\t\tctx.fill();\n\n\t\t// border\n\t\tctx.strokeStyle = 'rgba(255,255,255,0.08)';\n\t\tctx.lineWidth = 1;\n\t\troundRect(ctx, 0.5, 0.5, W - 1, H - 1, 24);\n\t\tctx.stroke();\n\n\t\t// accent glow\n\t\tconst glow = ctx.createRadialGradient(W - 60, 60, 0, W - 60, 60, 250);\n\t\tglow.addColorStop(0, acRaw + '12');\n\t\tglow.addColorStop(1, 'transparent');\n\t\tctx.fillStyle = glow;\n\t\tctx.fillRect(0, 0, W, H);\n\n\t\t// logo top-left\n\t\tctx.font = `bold 20px ${font}`;\n\t\tctx.fillStyle = 'rgba(255,255,255,0.8)';\n\t\tconst logoW = ctx.measureText('ratemyd').width;\n\t\tctx.fillText('ratemyd', 36, 48);\n\t\tctx.fillStyle = acRaw;\n\t\tconst dotW = ctx.measureText('.').width;\n\t\tctx.fillText('.', 36 + logoW, 48);\n\n\t\t// mode badge (measure while still in 20px font, then switch)\n\t\tconst badgeX = 36 + logoW + dotW + 10;\n\t\tctx.font = `600 10px ${font}`;\n\t\tctx.fillStyle = acRaw + '80';\n\t\tctx.fillText(mode.toUpperCase() + ' MODE', badgeX, 45);\n\n\t\t// \"your pornstar match\" label\n\t\tctx.font = `600 11px ${font}`;\n\t\tctx.fillStyle = 'rgba(255,255,255,0.25)';\n\t\tctx.textAlign = 'center';\n\t\tctx.letterSpacing = '2px';\n\t\tctx.fillText('YOUR PORNSTAR MATCH', W / 2, 96);\n\t\tctx.letterSpacing = '0px';\n\n\t\t// avatar (circular)\n\t\tconst avatarSize = 140;\n\t\tconst avatarX = W / 2 - avatarSize / 2;\n\t\tconst avatarY = 116;\n\n\t\ttry {\n\t\t\tconst img = new Image();\n\t\t\timg.crossOrigin = 'anonymous';\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\timg.onload = () => resolve();\n\t\t\t\timg.onerror = () => reject();\n\t\t\t\timg.src = star.image;\n\t\t\t});\n\n\t\t\tctx.save();\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(avatarX + avatarSize / 2, avatarY + avatarSize / 2, avatarSize / 2, 0, Math.PI * 2);\n\t\t\tctx.closePath();\n\t\t\tctx.clip();\n\t\t\tctx.drawImage(img, avatarX, avatarY, avatarSize, avatarSize);\n\t\t\tctx.restore();\n\t\t} catch {\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(avatarX + avatarSize / 2, avatarY + avatarSize / 2, avatarSize / 2, 0, Math.PI * 2);\n\t\t\tctx.closePath();\n\t\t\tctx.fillStyle = '#16162a';\n\t\t\tctx.fill();\n\t\t\tctx.font = `bold 48px ${font}`;\n\t\t\tctx.fillStyle = acRaw;\n\t\t\tctx.fillText(initials, avatarX + avatarSize / 2, avatarY + avatarSize / 2 + 16);\n\t\t}\n\n\t\t// ring around avatar\n\t\tctx.strokeStyle = 'rgba(255,255,255,0.12)';\n\t\tctx.lineWidth = 2;\n\t\tctx.beginPath();\n\t\tctx.arc(avatarX + avatarSize / 2, avatarY + avatarSize / 2, avatarSize / 2 + 2, 0, Math.PI * 2);\n\t\tctx.stroke();\n\n\t\t// star name\n\t\tconst nameY = avatarY + avatarSize + 44;\n\t\tctx.textAlign = 'center';\n\t\tctx.font = `bold 34px ${font}`;\n\t\tctx.fillStyle = 'rgba(255,255,255,0.95)';\n\t\tctx.fillText(star.name, W / 2, nameY);\n\n\t\t// similarity %\n\t\tctx.font = `bold 64px ${font}`;\n\t\tctx.fillStyle = acRaw;\n\t\tctx.fillText(`${similarity}%`, W / 2, nameY + 72);\n\n\t\t// \"MATCH\" label\n\t\tctx.font = `600 14px ${font}`;\n\t\tctx.fillStyle = 'rgba(255,255,255,0.3)';\n\t\tctx.letterSpacing = '3px';\n\t\tctx.fillText('MATCH', W / 2, nameY + 96);\n\t\tctx.letterSpacing = '0px';\n\n\t\t// tagline\n\t\tctx.font = `400 13px ${font}`;\n\t\tctx.fillStyle = 'rgba(255,255,255,0.35)';\n\t\tconst tagline = isRoast\n\t\t\t? `scored ${score}/10 · it's giving what it's giving.`\n\t\t\t: `scored ${score}/10 · certified king energy.`;\n\t\tctx.fillText(tagline, W / 2, nameY + 136);\n\n\t\t// divider line\n\t\tctx.strokeStyle = 'rgba(255,255,255,0.06)';\n\t\tctx.lineWidth = 1;\n\t\tctx.beginPath();\n\t\tctx.moveTo(36, H - 56);\n\t\tctx.lineTo(W - 36, H - 56);\n\t\tctx.stroke();\n\n\t\t// bottom bar\n\t\tctx.textAlign = 'left';\n\t\tctx.font = `500 12px ${font}`;\n\t\tctx.fillStyle = 'rgba(255,255,255,0.25)';\n\t\tctx.fillText('ratemyd.app', 36, H - 28);\n\t\tctx.textAlign = 'right';\n\t\tctx.fillStyle = 'rgba(255,255,255,0.15)';\n\t\tctx.fillText('AI-powered · 6 dimensions', W - 36, H - 28);\n\t\tctx.textAlign = 'left';\n\n\t\treturn canvas;\n\t}\n\n\t// Pre-generate the share card so the click handler stays synchronous —\n\t// iOS Safari drops user activation across the await in generateCard(),\n\t// which would kill navigator.share(). Same pattern as FoilCardHero.\n\tlet matchFile = $state<File | null>(null);\n\tlet matchBlobUrl = $state<string | null>(null);\n\n\t$effect(() => {\n\t\t// re-generate if the star / mode / score change\n\t\tvoid star.slug;\n\t\tvoid mode;\n\t\tvoid score;\n\t\tlet cancelled = false;\n\t\tlet localUrl: string | null = null;\n\t\t(async () => {\n\t\t\tconst canvas = await generateCard();\n\t\t\tconst blob = await new Promise<Blob | null>((r) => canvas.toBlob(r, 'image/png'));\n\t\t\tif (!blob || cancelled) return;\n\t\t\tlocalUrl = URL.createObjectURL(blob);\n\t\t\tmatchFile = new File([blob], `ratemyd-match-${star.slug}.png`, { type: 'image/png' });\n\t\t\tmatchBlobUrl = localUrl;\n\t\t})();\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\tif (localUrl) URL.revokeObjectURL(localUrl);\n\t\t};\n\t});\n\n\tfunction downloadMatchCard() {\n\t\tconst filename = `ratemyd-match-${star.slug}.png`;\n\t\t// Mobile: native share sheet (iOS-safe — pre-generated file, no await before share).\n\t\tif (matchFile && navigator.canShare?.({ files: [matchFile] })) {\n\t\t\tnavigator\n\t\t\t\t.share({ files: [matchFile] })\n\t\t\t\t.then(() => trackScorecardDownload(score, mode))\n\t\t\t\t.catch(() => {\n\t\t\t\t\t/* user cancelled — nothing to do */\n\t\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\t// Desktop fallback: <a download> direct save.\n\t\tif (matchBlobUrl) {\n\t\t\tconst a = document.createElement('a');\n\t\t\ta.href = matchBlobUrl;\n\t\t\ta.download = filename;\n\t\t\ta.click();\n\t\t\ttrackScorecardDownload(score, mode);\n\t\t}\n\t}\n\n\tasync function copyShareText() {\n\t\tawait navigator.clipboard.writeText(`${shareText}\\n${matchUrl}`);\n\t\tcopied = true;\n\t\tsetTimeout(() => (copied = false), 2000);\n\t}\n\n\tfunction shareToX() {\n\t\tconst url = `https://x.com/intent/tweet?text=${encodeURIComponent(shareText)}&url=${encodeURIComponent(matchUrl)}`;\n\t\twindow.open(url, '_blank', 'width=550,height=420');\n\t}\n\n\tfunction shareToFacebook() {\n\t\tconst url = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(matchUrl)}&quote=${encodeURIComponent(shareText)}`;\n\t\twindow.open(url, '_blank', 'width=550,height=420');\n\t}\n\n\tfunction shareToReddit() {\n\t\tconst title = isRoast\n\t\t\t? `AI says I'm a ${similarity}% match with ${star.name}. I'm cooked 💀`\n\t\t\t: `I matched ${similarity}% with ${star.name} 👑 what's yours?`;\n\t\tconst body = `scored ${score}/10 on ratemyd. — the AI matched me to ${star.name} based on 6 dimensions.\\n\\ntry it: ${matchUrl}`;\n\t\tconst url = `https://www.reddit.com/r/AIDickRating/submit?type=TEXT&title=${encodeURIComponent(title)}&text=${encodeURIComponent(body)}`;\n\t\twindow.open(url, '_blank');\n\t}\n</script>\n\n<h2 class=\"font-display text-[clamp(2rem,5vw,3.5rem)] font-bold leading-[0.95] tracking-tighter\">\n\t{#if isRoast}\n\t\tyour pornstar<br />\n\t\t<span class=\"text-muted\">doppelgänger.</span>\n\t{:else}\n\t\tyour pornstar<br />\n\t\t<span class=\"text-muted\">energy match.</span>\n\t{/if}\n</h2>\n<p class=\"mt-3 max-w-md text-sm leading-relaxed text-muted md:mt-4 md:text-base\">\n\t{#if isRoast}\n\t\tbased on your 6-dimension profile, the AI matched you to the star you most resemble. cope.\n\t{:else}\n\t\tbased on your 6-dimension profile, here's the star whose energy you channel.\n\t{/if}\n</p>\n\n<!-- match card -->\n<div class=\"mt-8 flex flex-col gap-6 sm:flex-row sm:items-start sm:gap-8\">\n\t<!-- avatar + name -->\n\t<div class=\"flex items-center gap-5 sm:flex-col sm:items-center sm:gap-3 sm:text-center\">\n\t\t<div\n\t\t\tclass=\"relative h-24 w-24 shrink-0 overflow-hidden rounded-full sm:h-28 sm:w-28\"\n\t\t\tstyle=\"box-shadow: 0 0 0 1px rgba(255,255,255,0.1)\"\n\t\t>\n\t\t\t{#if !imgFailed}\n\t\t\t\t<img\n\t\t\t\t\tsrc={star.image}\n\t\t\t\t\talt={star.name}\n\t\t\t\t\tclass=\"h-full w-full object-cover\"\n\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\tonerror={() => (imgFailed = true)}\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t\t{#if imgFailed}\n\t\t\t\t<div class=\"flex h-full w-full items-center justify-center bg-surface font-display text-3xl font-bold {ac}\">\n\t\t\t\t\t{initials}\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t</div>\n\n\t\t<div class=\"sm:mt-1\">\n\t\t\t<h3 class=\"font-display text-xl font-bold tracking-tight sm:text-2xl\">{star.name}</h3>\n\t\t\t<p class=\"mt-0.5 font-display text-lg font-bold {ac}\">{similarity}%<span class=\"ml-1 text-xs font-normal text-muted\">match</span></p>\n\t\t</div>\n\t</div>\n\n\t<!-- details -->\n\t<div class=\"min-w-0 flex-1\">\n\t\t<!-- tagline -->\n\t\t<p class=\"text-sm leading-relaxed text-text/70 md:text-base\" style=\"text-align: justify; text-justify: inter-word;\">\n\t\t\t{isRoast ? star.tagline.roast : star.tagline.hype}\n\t\t</p>\n\n\t\t<!-- dimension comparisons -->\n\t\t<div class=\"mt-5 border-t border-border/50 pt-5\">\n\t\t\t<span class=\"text-[10px] font-semibold uppercase tracking-[0.15em] text-muted\">\n\t\t\t\twhy you matched\n\t\t\t</span>\n\n\t\t\t<div class=\"mt-3 space-y-2.5\">\n\t\t\t\t{#each closestDimensions as dim (dim.key)}\n\t\t\t\t\t<div class=\"flex items-center gap-3\">\n\t\t\t\t\t\t<span class=\"w-24 shrink-0 text-xs text-muted\">{dim.name}</span>\n\t\t\t\t\t\t<div class=\"flex flex-1 items-center gap-2\">\n\t\t\t\t\t\t\t<div class=\"relative h-1 flex-1 overflow-hidden rounded-full bg-border\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"absolute inset-y-0 left-0 rounded-full\"\n\t\t\t\t\t\t\t\t\tstyle=\"width: {dim.userScore * 10}%; background: {acRaw}\"\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<span class=\"w-8 text-right font-display text-xs font-semibold {ac}\">{dim.userScore}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span class=\"text-[10px] text-muted\">vs</span>\n\t\t\t\t\t\t<div class=\"flex flex-1 items-center gap-2\">\n\t\t\t\t\t\t\t<div class=\"relative h-1 flex-1 overflow-hidden rounded-full bg-border\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"absolute inset-y-0 left-0 rounded-full bg-text/30\"\n\t\t\t\t\t\t\t\t\tstyle=\"width: {dim.starScore * 10}%\"\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<span class=\"w-8 text-right font-display text-xs font-semibold text-muted\">{dim.starScore}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t</div>\n\n\t\t\t{#if furthestDimension}\n\t\t\t\t<p class=\"mt-4 text-xs text-muted\">\n\t\t\t\t\t{#if isRoast}\n\t\t\t\t\t\tbiggest gap: <span class=\"font-semibold text-text/60\">{furthestDimension.name}</span> — you scored {furthestDimension.userScore}, {star.name} has {furthestDimension.starScore}. work on it.\n\t\t\t\t\t{:else}\n\t\t\t\t\t\troom to grow: <span class=\"font-semibold text-text/60\">{furthestDimension.name}</span> — you're at {furthestDimension.userScore} vs {star.name}'s {furthestDimension.starScore}. close the gap, king.\n\t\t\t\t\t{/if}\n\t\t\t\t</p>\n\t\t\t{/if}\n\t\t</div>\n\n\t\t<!-- share buttons -->\n\t\t<div class=\"mt-6 flex flex-wrap gap-2\">\n\t\t\t<button\n\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl {isRoast ? 'bg-coral' : 'bg-yellow'} px-4 py-2.5 text-[13px] font-semibold {isRoast ? 'text-white' : 'text-bg'} transition-all hover:opacity-80\"\n\t\t\t\tonclick={downloadMatchCard}\n\t\t\t>\n\t\t\t\t<svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7,10 12,15 17,10\"/><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"/></svg>\n\t\t\t\tdownload card\n\t\t\t</button>\n\n\t\t\t{#if showShareButtons}\n\t\t\t<button\n\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl border border-border px-4 py-2.5 text-[13px] font-semibold text-text transition-all hover:border-muted\"\n\t\t\t\tonclick={copyShareText}\n\t\t\t>\n\t\t\t\t{#if copied}\n\t\t\t\t\t<svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"/></svg>\n\t\t\t\t\tcopied!\n\t\t\t\t{:else}\n\t\t\t\t\t<svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>\n\t\t\t\t\tcopy\n\t\t\t\t{/if}\n\t\t\t</button>\n\n\t\t\t<button\n\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl border border-border px-3.5 py-2.5 text-[13px] font-semibold text-text transition-all hover:border-muted\"\n\t\t\t\tonclick={shareToX}\n\t\t\t>\n\t\t\t\t<svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z\"/></svg>\n\t\t\t</button>\n\n\t\t\t<button\n\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl border border-border px-3.5 py-2.5 text-[13px] font-semibold text-text transition-all hover:border-muted\"\n\t\t\t\tonclick={shareToFacebook}\n\t\t\t>\n\t\t\t\t<svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z\"/></svg>\n\t\t\t</button>\n\n\t\t\t<button\n\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl border border-border px-3.5 py-2.5 text-[13px] font-semibold text-text transition-all hover:border-orange/30\"\n\t\t\t\tonclick={shareToReddit}\n\t\t\t>\n\t\t\t\t<svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0zm5.01 13.38c.15.36.22.75.22 1.15 0 2.44-2.78 4.42-6.21 4.42s-6.21-1.98-6.21-4.42c0-.4.07-.79.22-1.15a1.47 1.47 0 0 1-.44-1.06c0-.83.67-1.5 1.5-1.5.4 0 .77.16 1.03.42a8.28 8.28 0 0 1 3.9-1.11l.74-3.46a.3.3 0 0 1 .36-.24l2.45.52a1.07 1.07 0 0 1 2.06.31c0 .59-.48 1.07-1.07 1.07-.56 0-1.02-.43-1.07-.97l-2.17-.46-.65 3.07a8.2 8.2 0 0 1 3.82 1.1c.27-.26.64-.42 1.03-.42.83 0 1.5.67 1.5 1.5 0 .42-.17.8-.44 1.06zM9.3 13.28c0 .58.47 1.06 1.06 1.06.58 0 1.06-.48 1.06-1.06 0-.59-.48-1.06-1.06-1.06-.59 0-1.06.47-1.06 1.06zm5.43 2.51c-.67.67-1.96.72-2.72.72s-2.05-.05-2.72-.72a.27.27 0 0 1 0-.38.27.27 0 0 1 .38 0c.42.42 1.33.57 2.34.57 1.01 0 1.92-.15 2.34-.57a.27.27 0 0 1 .38 0 .27.27 0 0 1 0 .38zm-.2-1.45c-.59 0-1.06-.48-1.06-1.06 0-.59.47-1.06 1.06-1.06.58 0 1.06.47 1.06 1.06 0 .58-.48 1.06-1.06 1.06z\"/></svg>\n\t\t\t</button>\n\t\t\t{/if}\n\t\t</div>\n\t</div>\n</div>\n","<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\t/**\n\t * A finished rating nobody has claimed yet (anon-rate.ts): the photo was rated\n\t * signed out, and the account is asked for here — once the visitor can see a\n\t * rating exists — rather than before the upload.\n\t *\n\t * Drawn from nothing. The server withholds the whole result, free fields\n\t * included, until the rating is claimed, so every number on this page is a\n\t * placeholder and there is nothing to read out of the payload. The layout\n\t * follows the real result page section for section, so what's behind the\n\t * sign-up is plain: the score, rank and first two dimensions come free with an\n\t * account; the other four, the verdict and the tips are the Pro breakdown.\n\t */\n\timport { PRO_MONTHLY_LABEL } from '$lib/pricing';\n\timport { msg } from '$lib/i18n/mark';\n\n\ttype Mode = 'roast' | 'hype';\n\t/** signup — the signed-out visitor who made it.\n\t *  used_free — signed in, but this account has had its one free rating.\n\t *  private — anybody else: an ownerless rating isn't theirs to see. */\n\ttype Variant = 'signup' | 'used_free' | 'private';\n\n\tinterface Props {\n\t\tmode: Mode;\n\t\tvariant: Variant;\n\t\t/** Which CTA was pressed: hero, dimensions, verdict or tips. */\n\t\tonSignUp: (placement: string) => void;\n\t\tonGoPro: (placement: string) => void;\n\t}\n\n\tlet { mode, variant, onSignUp, onGoPro }: Props = $props();\n\n\tconst isRoast = $derived(mode === 'roast');\n\tconst ac = $derived(isRoast ? 'text-coral' : 'text-yellow');\n\tconst acBg = $derived(isRoast ? 'bg-coral' : 'bg-yellow');\n\tconst acStroke = $derived(isRoast ? '#FF4D6D' : '#FFE500');\n\tconst buttonClass = $derived(\n\t\tisRoast ? 'bg-coral text-white hover:bg-coral-dark' : 'bg-yellow text-bg hover:bg-yellow/80'\n\t);\n\n\t// The six the prompt always scores (ai/prompts.ts), in its order. The first\n\t// two are the free ones on the real page (FREE_DIM_COUNT).\n\tconst DIMENSIONS = [\n\t\t{ name: msg('Proportions'), color: '#FF4D6D', width: 72 },\n\t\t{ name: msg('Aesthetics'), color: '#3B82F6', width: 58 },\n\t\t{ name: msg('Grooming'), color: '#22C55E', width: 81 },\n\t\t{ name: msg('Photo quality'), color: '#F59E0B', width: 46 },\n\t\t{ name: msg('Lighting'), color: '#7C3AED', width: 64 },\n\t\t{ name: msg('Overall vibe'), color: '#EC4899', width: 69 }\n\t];\n\tconst FREE_DIM_COUNT = 2;\n\n\tfunction act(placement: string) {\n\t\tif (variant === 'used_free') onGoPro(placement);\n\t\telse onSignUp(placement);\n\t}\n\n\tconst sectionCta = $derived(\n\t\tvariant === 'used_free'\n\t\t\t? t('unlock with pro — {price}/mo →', { price: PRO_MONTHLY_LABEL })\n\t\t\t: t('sign up free →')\n\t);\n</script>\n\n{#snippet lock(size: string)}\n\t<svg\n\t\tclass={size}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2.5\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t>\n\t\t<rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" /><path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n\t</svg>\n{/snippet}\n\n{#snippet gateCard(title: string, body: string, placement: string)}\n\t<div class=\"absolute inset-0 z-10 flex items-center justify-center px-4\">\n\t\t<div\n\t\t\tclass=\"w-full max-w-[420px] rounded-2xl border border-border bg-surface px-6 py-7 text-left shadow-2xl shadow-black/60 sm:px-7 sm:py-8\"\n\t\t>\n\t\t\t<h3 class=\"font-display text-xl leading-tight font-bold tracking-tight\">{title}</h3>\n\t\t\t<p class=\"mt-2 text-[13px] leading-relaxed text-muted\">{body}</p>\n\t\t\t{#if variant !== 'private'}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonclick={() => act(placement)}\n\t\t\t\t\tclass=\"mt-5 w-full cursor-pointer rounded-xl py-3 font-display text-[14px] font-semibold transition-all active:scale-[0.98] {buttonClass}\"\n\t\t\t\t>\n\t\t\t\t\t{sectionCta}\n\t\t\t\t</button>\n\t\t\t{/if}\n\t\t</div>\n\t</div>\n{/snippet}\n\n<!-- ============ HERO — the score, withheld ============ -->\n<section class=\"relative overflow-hidden border-b border-border px-5 pt-28 pb-16 md:pt-36 md:pb-24\">\n\t<div\n\t\tclass=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"\n\t></div>\n\n\t<div class=\"relative z-10 mx-auto max-w-5xl\">\n\t\t<div class=\"mb-8 flex items-center gap-2\">\n\t\t\t<div class=\"h-2.5 w-2.5 rounded-full {acBg}\"></div>\n\t\t\t<span class=\"text-xs font-semibold tracking-[0.12em] uppercase {ac}\"\n\t\t\t\t>{isRoast ? t('roast mode') : t('hype mode')}</span\n\t\t\t>\n\t\t</div>\n\n\t\t<div\n\t\t\tclass=\"flex flex-col items-center gap-10 md:flex-row md:items-center md:justify-between md:gap-16\"\n\t\t>\n\t\t\t<div class=\"flex-1 text-center md:text-left\">\n\t\t\t\t<h1\n\t\t\t\t\tclass=\"font-display text-[clamp(2.8rem,8vw,6rem)] leading-[0.85] font-bold tracking-tighter\"\n\t\t\t\t>\n\t\t\t\t\t{#if variant === 'private'}\n\t\t\t\t\t\t{t(\"this rating's\")}<br /><span class=\"text-muted\">{t('private.')}</span>\n\t\t\t\t\t{:else if isRoast}\n\t\t\t\t\t\t{t('the verdict')}<br /><span class={ac}>{t('is in.')}</span>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{t('your rating')}<br /><span class={ac}>{t('is ready.')}</span>\n\t\t\t\t\t{/if}\n\t\t\t\t</h1>\n\n\t\t\t\t<p\n\t\t\t\t\tclass=\"mx-auto mt-5 max-w-md text-sm leading-relaxed text-muted md:mx-0 md:mt-6 md:text-base\"\n\t\t\t\t>\n\t\t\t\t\t{#if variant === 'signup'}\n\t\t\t\t\t\t{t(\n\t\t\t\t\t\t\t'the AI has scored your photo. sign up free to see it — your score, rank and first two dimensions are on the house.'\n\t\t\t\t\t\t)}\n\t\t\t\t\t{:else if variant === 'used_free'}\n\t\t\t\t\t\t{t(\n\t\t\t\t\t\t\t\"you've already had your free rating on this account. pro unlocks this one, and every rating after it.\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{t('only the person who uploaded it can see this one.')}\n\t\t\t\t\t{/if}\n\t\t\t\t</p>\n\n\t\t\t\t<div class=\"mt-6 flex flex-col items-center gap-2.5 md:items-start\">\n\t\t\t\t\t{#if variant === 'private'}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"/rate\"\n\t\t\t\t\t\t\tclass=\"inline-flex w-full items-center justify-center rounded-xl px-6 py-3.5 font-display text-[15px] font-semibold no-underline transition-all active:scale-[0.98] sm:w-auto {buttonClass}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{t('get your own rating →')}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{:else}\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={() => act('hero')}\n\t\t\t\t\t\t\tclass=\"inline-flex w-full cursor-pointer items-center justify-center rounded-xl px-6 py-3.5 font-display text-[15px] font-semibold transition-all active:scale-[0.98] sm:w-auto {buttonClass}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{variant === 'signup'\n\t\t\t\t\t\t\t\t? t('sign up free to see your score →')\n\t\t\t\t\t\t\t\t: t('go pro to see it — {price}/mo →', { price: PRO_MONTHLY_LABEL })}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{#if variant === 'signup'}\n\t\t\t\t\t\t\t<p class=\"text-[12px] text-muted\">\n\t\t\t\t\t\t\t\t{t('google or email · no password · 10 seconds')}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref=\"/rate\"\n\t\t\t\t\t\t\t\tclass=\"text-[12px] text-muted no-underline transition-colors hover:text-text\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{t('back to your ratings')}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- a gauge with nothing in it: the ring and the number are placeholders -->\n\t\t\t<div class=\"relative h-[220px] w-[220px] shrink-0 select-none\" aria-hidden=\"true\">\n\t\t\t\t<svg viewBox=\"0 0 220 220\" class=\"veil-ring h-full w-full\">\n\t\t\t\t\t<circle\n\t\t\t\t\t\tcx=\"110\"\n\t\t\t\t\t\tcy=\"110\"\n\t\t\t\t\t\tr=\"90\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"rgba(255,255,255,0.08)\"\n\t\t\t\t\t\tstroke-width=\"12\"\n\t\t\t\t\t/>\n\t\t\t\t\t<circle\n\t\t\t\t\t\tcx=\"110\"\n\t\t\t\t\t\tcy=\"110\"\n\t\t\t\t\t\tr=\"90\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke={acStroke}\n\t\t\t\t\t\tstroke-opacity=\"0.55\"\n\t\t\t\t\t\tstroke-width=\"12\"\n\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\tstroke-dasharray=\"400 566\"\n\t\t\t\t\t\ttransform=\"rotate(-90 110 110)\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t\t<div class=\"absolute inset-0 flex items-center justify-center\">\n\t\t\t\t\t<span class=\"veil-strong font-display text-7xl font-bold tracking-tighter text-text/70\"\n\t\t\t\t\t\t>?.?</span\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"absolute inset-0 flex items-center justify-center\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"flex h-12 w-12 items-center justify-center rounded-full bg-bg/80 text-text shadow-lg shadow-black/40\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{@render lock('h-5 w-5')}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div\n\t\t\tclass=\"mt-10 grid grid-cols-3 border-t border-border pt-6 md:mt-12 md:pt-8\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<div class=\"text-center md:text-left\">\n\t\t\t\t<span class=\"veil block font-display text-xl font-bold text-green select-none md:text-2xl\"\n\t\t\t\t\t>{t('top ??%')}</span\n\t\t\t\t>\n\t\t\t\t<span class=\"text-[11px] text-muted\">{t('globally')}</span>\n\t\t\t</div>\n\t\t\t<div class=\"text-center\">\n\t\t\t\t<span class=\"veil block font-display text-xl font-bold select-none md:text-2xl {ac}\"\n\t\t\t\t\t>?.?</span\n\t\t\t\t>\n\t\t\t\t<span class=\"text-[11px] text-muted\">{t('potential score')}</span>\n\t\t\t</div>\n\t\t\t<div class=\"text-center md:text-right\">\n\t\t\t\t<span class=\"veil block font-display text-xl font-bold text-green select-none md:text-2xl\"\n\t\t\t\t\t>+?.?</span\n\t\t\t\t>\n\t\t\t\t<span class=\"text-[11px] text-muted\">{t('pts on the table')}</span>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</section>\n\n<!-- ============ DIMENSIONS — names are fixed, scores withheld ============ -->\n<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<h2\n\t\t\tclass=\"font-display text-[clamp(2rem,5vw,3.5rem)] leading-[0.95] font-bold tracking-tighter\"\n\t\t>\n\t\t\t{t('the breakdown.')}<br />\n\t\t\t<span class=\"text-muted\"\n\t\t\t\t>{isRoast ? t('6 dimensions. no mercy.') : t('6 dimensions. all vibes.')}</span\n\t\t\t>\n\t\t</h2>\n\n\t\t<div class=\"relative mt-10\">\n\t\t\t<div class=\"flex flex-col\" aria-hidden=\"true\">\n\t\t\t\t{#each DIMENSIONS as dim, i (dim.name)}\n\t\t\t\t\t<div class=\"flex items-center gap-4 border-b border-border py-5 last:border-b-0\">\n\t\t\t\t\t\t<div class=\"flex items-center gap-3 md:w-[140px]\">\n\t\t\t\t\t\t\t<div class=\"h-2.5 w-2.5 shrink-0 rounded-full\" style=\"background: {dim.color}\"></div>\n\t\t\t\t\t\t\t<span class=\"font-display text-sm font-semibold\">{t(dim.name)}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"veil-soft relative hidden h-1 flex-1 overflow-hidden rounded-full bg-border md:block\"\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=\"absolute inset-y-0 left-0 rounded-full\"\n\t\t\t\t\t\t\t\tstyle=\"width: {dim.width}%; background: {dim.color}\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"ml-auto rounded-md px-2 py-0.5 text-[10px] font-semibold tracking-widest uppercase md:ml-4 {i <\n\t\t\t\t\t\t\tFREE_DIM_COUNT\n\t\t\t\t\t\t\t\t? 'bg-green/[.1] text-green'\n\t\t\t\t\t\t\t\t: 'bg-text/[.06] text-muted'}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{i < FREE_DIM_COUNT ? t('free') : t('pro')}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"veil w-[42px] text-right font-display text-lg font-bold select-none\"\n\t\t\t\t\t\t\tstyle=\"color: {dim.color}\">?.?</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t</div>\n\n\t\t\t<div class=\"pointer-events-none absolute inset-0 bg-bg/40\"></div>\n\n\t\t\t{@render gateCard(\n\t\t\t\tvariant === 'used_free'\n\t\t\t\t\t? t('this breakdown is pro.')\n\t\t\t\t\t: t('your first 2 dimensions are free.'),\n\t\t\t\tvariant === 'signup'\n\t\t\t\t\t? t('sign up to see them. the other four are part of pro.')\n\t\t\t\t\t: variant === 'used_free'\n\t\t\t\t\t\t? t(\n\t\t\t\t\t\t\t\t'all six scores, the verdict and the tips — for this rating and every one after it.'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: t('only its owner can open this breakdown.'),\n\t\t\t\t'dimensions'\n\t\t\t)}\n\t\t</div>\n\t</div>\n</section>\n\n<!-- ============ VERDICT ============ -->\n<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<h2\n\t\t\tclass=\"font-display text-[clamp(2rem,5vw,3.5rem)] leading-[0.95] font-bold tracking-tighter\"\n\t\t>\n\t\t\t{t('what the AI')}<br />\n\t\t\t<span class=\"text-muted\">{isRoast ? t('actually thinks.') : t('really sees in you.')}</span>\n\t\t</h2>\n\n\t\t<div class=\"relative mt-8 min-h-[320px] overflow-hidden rounded-2xl\">\n\t\t\t<div class=\"space-y-3.5 p-2\" aria-hidden=\"true\">\n\t\t\t\t{#each [96, 89, 93, 78, 85, 91, 0, 88, 95, 72, 90] as w, i (i)}\n\t\t\t\t\t{#if w}\n\t\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: {w}%\"></div>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<div class=\"h-4\"></div>\n\t\t\t\t\t{/if}\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t\t<div class=\"pointer-events-none absolute inset-0 bg-bg/30\"></div>\n\t\t\t{@render gateCard(\n\t\t\t\tt('the AI wrote you a verdict.'),\n\t\t\t\tvariant === 'signup'\n\t\t\t\t\t? t('sign up to continue. the full verdict is part of pro.')\n\t\t\t\t\t: variant === 'used_free'\n\t\t\t\t\t\t? t('every flaw, every compliment, in the AI’s own words.')\n\t\t\t\t\t\t: t('only its owner can read this one.'),\n\t\t\t\t'verdict'\n\t\t\t)}\n\t\t</div>\n\t</div>\n</section>\n\n<!-- ============ TIPS ============ -->\n<section class=\"border-b border-border px-5 py-12 pb-28 md:py-16 md:pb-28\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<h2\n\t\t\tclass=\"font-display text-[clamp(2rem,5vw,3.5rem)] leading-[0.95] font-bold tracking-tighter\"\n\t\t>\n\t\t\t{t('how to score higher')}<br />\n\t\t\t<span class=\"text-muted\"\n\t\t\t\t>{isRoast ? t('if you actually listen.') : t(\"you're almost there.\")}</span\n\t\t\t>\n\t\t</h2>\n\n\t\t<div class=\"relative mt-8 min-h-[340px] overflow-hidden rounded-2xl\">\n\t\t\t<div aria-hidden=\"true\">\n\t\t\t\t{#each [70, 84, 62, 77] as w, i (i)}\n\t\t\t\t\t<div class=\"grid grid-cols-[48px_1fr] gap-4 border-b border-border py-5 md:gap-5\">\n\t\t\t\t\t\t<div class=\"h-4 w-6 rounded bg-text/8\"></div>\n\t\t\t\t\t\t<div class=\"space-y-2\">\n\t\t\t\t\t\t\t<div class=\"h-4 rounded-full bg-text/8\" style=\"width: {w}%\"></div>\n\t\t\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/6\" style=\"width: {w + 12}%\"></div>\n\t\t\t\t\t\t\t<div class=\"h-4 w-20 rounded bg-text/8\"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t\t<div class=\"pointer-events-none absolute inset-0 bg-bg/30\"></div>\n\t\t\t{@render gateCard(\n\t\t\t\tt('tips to close the gap.'),\n\t\t\t\tvariant === 'signup'\n\t\t\t\t\t? t('sign up to continue. the personal tips are part of pro.')\n\t\t\t\t\t: variant === 'used_free'\n\t\t\t\t\t\t? t('what to change so your next photo scores higher.')\n\t\t\t\t\t\t: t('only its owner can read these.'),\n\t\t\t\t'tips'\n\t\t\t)}\n\t\t</div>\n\t</div>\n</section>\n\n<style>\n\t/* The blur here is the page's content, not decoration: it stands in for a\n\t   score that exists but isn't shown yet. The site strips every `blur-*`\n\t   utility on touch devices for GPU headroom (layout.css, RAT-38), which\n\t   would leave these placeholders crisp on the phones most visitors use, so\n\t   they carry their own classes instead. A handful of small elements — not\n\t   the large decorative halos that rule was written for. */\n\t.veil {\n\t\tfilter: blur(6px);\n\t}\n\t.veil-soft {\n\t\tfilter: blur(3px);\n\t}\n\t.veil-ring {\n\t\tfilter: blur(5px);\n\t}\n\t.veil-strong {\n\t\tfilter: blur(10px);\n\t}\n</style>\n","/** The result page's next step (RAT-508). Client-safe.\n *\n *  On homepage C, 44% of the new visitors who saw their result went on to a\n *  product. On a phone the result hero fills the first screen, and the old\n *  fixed next step (the one-tap duel, then arena) sat below it. The next step\n *  leads with what fits the score, and on phones pins that first offer above\n *  the bottom nav until the section itself scrolls into view. It won its test\n *  against that fixed block (468972: a paid product reached 53.9% → 61.2%,\n *  rater requests 19.4% → 25.3%) and replaced it (RAT-555). */\n\n/** The page's own split: < 5 low, < 7 mid, 7 and up high. */\nexport type ScoreTier = 'low' | 'mid' | 'high';\n\n/** Product names as landing_route_picked has them, so the reads line up. */\nexport type NextProduct = 'duel' | 'beat-me' | 'raters';\n\n/** What a result offers first and second. A high score has something to show\n *  off: a duel, which is also the site's biggest viral loop, then beat me. A mid\n *  or low score wants a second opinion more than a fight: a real rater, then the\n *  duel. */\nexport function nextStepFor(tier: ScoreTier): { primary: NextProduct; secondary: NextProduct } {\n\treturn tier === 'high'\n\t\t? { primary: 'duel', secondary: 'beat-me' }\n\t\t: { primary: 'raters', secondary: 'duel' };\n}\n","<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\t/**\n\t * RAT-508: the result page's next step for the owner. It won the\n\t * result-next-step test against the fixed \"duel ▸ arena ▸ feed\" block\n\t * (468972) and replaced it (RAT-555).\n\t *\n\t * What it offers depends on the score (nextStepFor):\n\t * - a high score leads with the one-tap duel (the same photo, straight into\n\t *   the lobby), then beat me;\n\t * - a mid or low score leads with a real rater's second opinion, then the\n\t *   duel.\n\t * Arena and feed stay as quiet links underneath.\n\t *\n\t * On a phone the result hero fills the first screen, so the section starts\n\t * below the fold. Until it scrolls into view, its first offer rides in a bar\n\t * pinned above the bottom nav. Once the section is on screen the bar goes, so\n\t * the same offer never shows twice at once. Solid fills and a neutral shadow,\n\t * no glow.\n\t */\n\timport { fly } from 'svelte/transition';\n\timport { cubicOut } from 'svelte/easing';\n\timport PostToFeedCta from '$lib/components/post/PostToFeedCta.svelte';\n\timport { nextStepFor, type NextProduct, type ScoreTier } from '$lib/result-next';\n\timport { trackOfferClicked, trackOfferShown } from '$lib/analytics';\n\n\tinterface Props {\n\t\ttier: ScoreTier;\n\t\tratersOnline: number;\n\t\t/** The page's one-tap duel (startDuelOneClick) and its pending state. */\n\t\tstartingDuel: boolean;\n\t\tonduel: () => void;\n\t\tgenerationId: string;\n\t}\n\tlet { tier, ratersOnline, startingDuel, onduel, generationId }: Props = $props();\n\n\tconst PLACEMENT = 'result_next';\n\tconst offer = $derived(nextStepFor(tier));\n\n\t/** The section is still below the fold: the bar stands in for it. */\n\tlet sectionBelow = $state(false);\n\tlet shownSent = false;\n\n\tfunction markShown(surface: 'bar' | 'section') {\n\t\tif (shownSent) return;\n\t\tshownSent = true;\n\t\ttrackOfferShown(PLACEMENT, [offer.primary, offer.secondary], { tier, surface });\n\t}\n\n\t/** Attached to the section: tracks whether it is still below the fold, and\n\t *  reports the offer the first time either it or the bar is on screen. */\n\tfunction watch(node: HTMLElement) {\n\t\tconst phone = window.matchMedia('(max-width: 767px)');\n\t\tconst io = new IntersectionObserver(([entry]) => {\n\t\t\tsectionBelow = !entry.isIntersecting && entry.boundingClientRect.top > 0;\n\t\t\tif (entry.isIntersecting) markShown('section');\n\t\t\telse if (sectionBelow && phone.matches) markShown('bar');\n\t\t});\n\t\tio.observe(node);\n\t\treturn () => io.disconnect();\n\t}\n\n\tfunction pick(product: NextProduct, position: number, surface: 'bar' | 'section') {\n\t\ttrackOfferClicked(PLACEMENT, product, position, { tier, surface });\n\t\tif (product === 'duel') onduel();\n\t}\n\n\tconst duelTitle = $derived(\n\t\tstartingDuel\n\t\t\t? t('spinning up your duel…')\n\t\t\t: tier === 'high'\n\t\t\t\t? t('destroy someone in a duel')\n\t\t\t\t: t('challenge someone to a duel')\n\t);\n</script>\n\n{#snippet duelGlyph(size: string)}\n\t{#if startingDuel}\n\t\t<svg class=\"{size} animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"\n\t\t\t><circle\n\t\t\t\tclass=\"opacity-25\"\n\t\t\t\tcx=\"12\"\n\t\t\t\tcy=\"12\"\n\t\t\t\tr=\"10\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstroke-width=\"3\"\n\t\t\t/><path\n\t\t\t\tclass=\"opacity-90\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\td=\"M4 12a8 8 0 018-8V0a12 12 0 00-12 12h4z\"\n\t\t\t/></svg\n\t\t>\n\t{:else}\n\t\t<svg\n\t\t\tclass={size}\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstroke-width=\"1.8\"\n\t\t\taria-hidden=\"true\"\n\t\t\t><path\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\td=\"m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z\"\n\t\t\t/></svg\n\t\t>\n\t{/if}\n{/snippet}\n\n{#snippet ratersGlyph(size: string)}\n\t<svg\n\t\tclass={size}\n\t\tfill=\"none\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"1.9\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\taria-hidden=\"true\"\n\t\t><path\n\t\t\td=\"M12.5 8a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0zM2.5 20a6.5 6.5 0 0 1 13 0M16 4.5a3.5 3.5 0 0 1 0 7M21.5 20a6.5 6.5 0 0 0-4-6\"\n\t\t/></svg\n\t>\n{/snippet}\n\n{#snippet arrow(size: string)}\n\t<svg\n\t\tclass=\"{size} shrink-0\"\n\t\tfill=\"none\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t\taria-hidden=\"true\"\n\t\t><path\n\t\t\tstroke-linecap=\"round\"\n\t\t\tstroke-linejoin=\"round\"\n\t\t\td=\"M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3\"\n\t\t/></svg\n\t>\n{/snippet}\n\n{#snippet chevron()}\n\t<svg\n\t\tclass=\"h-4 w-4 shrink-0 text-muted/60\"\n\t\tfill=\"none\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2.2\"\n\t\taria-hidden=\"true\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\" /></svg\n\t>\n{/snippet}\n\n<section\n\t{@attach watch}\n\tclass=\"border-b border-border px-5 py-8 md:py-10\"\n\taria-labelledby=\"next-step\"\n>\n\t<div class=\"mx-auto max-w-3xl\">\n\t\t<p\n\t\t\tid=\"next-step\"\n\t\t\tclass=\"mb-3 font-display text-[10px] font-bold tracking-[0.2em] text-muted-2 uppercase\"\n\t\t>\n\t\t\t{t('your next move')}\n\t\t</p>\n\n\t\t<!-- PRIMARY -->\n\t\t{#if offer.primary === 'duel'}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonclick={() => pick('duel', 1, 'section')}\n\t\t\t\tdisabled={startingDuel}\n\t\t\t\tclass=\"group flex w-full cursor-pointer flex-col gap-3.5 rounded-[18px] bg-blue-dark p-[18px] text-left text-white transition-colors hover:bg-blue disabled:opacity-80\"\n\t\t\t>\n\t\t\t\t<span class=\"flex items-center gap-3.5\">\n\t\t\t\t\t<span class=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-white/15\">\n\t\t\t\t\t\t{@render duelGlyph('h-[22px] w-[22px]')}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"min-w-0\">\n\t\t\t\t\t\t<span class=\"block font-display text-[19px] leading-tight font-bold tracking-tight\"\n\t\t\t\t\t\t\t>{duelTitle}</span\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"mt-1 block text-[12.5px] leading-snug text-white/80\"\n\t\t\t\t\t\t\t>{t('send a link · opponent joins free · AI judges both')}</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t\t<span class=\"flex items-center justify-between gap-3 border-t border-white/20 pt-3.5\">\n\t\t\t\t\t<span class=\"text-[11.5px] leading-snug text-white/80\"\n\t\t\t\t\t\t>{t('uses this photo')}<br />{t('no re-upload')}</span\n\t\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"inline-flex h-10 shrink-0 items-center gap-1.5 rounded-[11px] bg-white px-4 font-display text-[14px] font-bold text-blue-dark\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{t('start the duel')}\n\t\t\t\t\t\t{@render arrow('h-[15px] w-[15px]')}\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</button>\n\t\t{:else}\n\t\t\t<a\n\t\t\t\thref=\"/r\"\n\t\t\t\tonclick={() => pick('raters', 1, 'section')}\n\t\t\t\tclass=\"group flex w-full flex-col gap-3.5 rounded-[18px] bg-green p-[18px] text-[#052e14] no-underline transition-colors hover:bg-green-dark hover:text-[#052e14]\"\n\t\t\t>\n\t\t\t\t<span class=\"flex items-center gap-3.5\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-[#052e14]/15\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{@render ratersGlyph('h-[22px] w-[22px]')}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"min-w-0\">\n\t\t\t\t\t\t<span class=\"block font-display text-[19px] leading-tight font-bold tracking-tight\"\n\t\t\t\t\t\t\t>{t('get a human second opinion')}</span\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"mt-1 block text-[12.5px] leading-snug text-[#052e14]/80\"\n\t\t\t\t\t\t\t>{t('a real rater scores your photo, 1:1 in chat')}</span\n\t\t\t\t\t\t>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t\t<span class=\"flex items-center justify-between gap-3 border-t border-[#052e14]/20 pt-3.5\">\n\t\t\t\t\t<span class=\"flex items-center gap-1.5 text-[12px] font-semibold\">\n\t\t\t\t\t\t{#if ratersOnline > 0}\n\t\t\t\t\t\t\t<span class=\"h-[7px] w-[7px] rounded-full bg-[#052e14]\"></span>\n\t\t\t\t\t\t\t{ratersOnline === 1\n\t\t\t\t\t\t\t\t? t('1 rater online now')\n\t\t\t\t\t\t\t\t: t('{n} raters online now', { n: ratersOnline })}\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{t('humans, not the AI')}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"inline-flex h-10 shrink-0 items-center gap-1.5 rounded-[11px] bg-[#052e14] px-4 font-display text-[14px] font-bold text-green\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{t('pick a rater')}\n\t\t\t\t\t\t{@render arrow('h-[15px] w-[15px]')}\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</a>\n\t\t{/if}\n\n\t\t<!-- SECONDARY -->\n\t\t{#if offer.secondary === 'beat-me'}\n\t\t\t<a\n\t\t\t\thref=\"/b/start\"\n\t\t\t\tonclick={() => pick('beat-me', 2, 'section')}\n\t\t\t\tclass=\"mt-3 flex items-center gap-3 rounded-2xl border border-border bg-surface px-4 py-3.5 no-underline transition-colors hover:border-yellow/40\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"flex h-[38px] w-[38px] shrink-0 items-center justify-center rounded-[11px] bg-yellow text-[#1a1600]\"\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclass=\"h-[19px] w-[19px]\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"1.9\"\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=\"M15.59 14.37a6 6 0 0 1-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 0 0 6.16-12.12A14.98 14.98 0 0 0 9.63 8.41m5.96 5.96a14.93 14.93 0 0 1-5.84 2.58\"\n\t\t\t\t\t\t/></svg\n\t\t\t\t\t>\n\t\t\t\t</span>\n\t\t\t\t<span class=\"min-w-0 flex-1\">\n\t\t\t\t\t<span class=\"block font-display text-[15px] font-bold tracking-tight text-yellow\"\n\t\t\t\t\t\t>{t('put it on beat me')}</span\n\t\t\t\t\t>\n\t\t\t\t\t<span class=\"mt-0.5 block text-[12px] leading-snug text-muted-2\"\n\t\t\t\t\t\t>{t('strangers vote on it for 24h')}</span\n\t\t\t\t\t>\n\t\t\t\t</span>\n\t\t\t\t{@render chevron()}\n\t\t\t</a>\n\t\t{:else}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonclick={() => pick('duel', 2, 'section')}\n\t\t\t\tdisabled={startingDuel}\n\t\t\t\tclass=\"mt-3 flex w-full cursor-pointer items-center gap-3 rounded-2xl border border-border bg-surface px-4 py-3.5 text-left transition-colors hover:border-blue/40 disabled:opacity-70\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"flex h-[38px] w-[38px] shrink-0 items-center justify-center rounded-[11px] bg-blue text-white\"\n\t\t\t\t>\n\t\t\t\t\t{@render duelGlyph('h-[19px] w-[19px]')}\n\t\t\t\t</span>\n\t\t\t\t<span class=\"min-w-0 flex-1\">\n\t\t\t\t\t<span class=\"block font-display text-[15px] font-bold tracking-tight text-[#5b9bff]\"\n\t\t\t\t\t\t>{duelTitle}</span\n\t\t\t\t\t>\n\t\t\t\t\t<span class=\"mt-0.5 block text-[12px] leading-snug text-muted-2\"\n\t\t\t\t\t\t>{t('one tap · this photo · they join free')}</span\n\t\t\t\t\t>\n\t\t\t\t</span>\n\t\t\t\t{@render chevron()}\n\t\t\t</button>\n\t\t{/if}\n\n\t\t<!-- TERTIARY — arena and the feed, as text -->\n\t\t<div\n\t\t\tclass=\"mt-4 flex flex-wrap items-center justify-center gap-x-5 gap-y-2 text-[12.5px] text-muted-2\"\n\t\t>\n\t\t\t<a\n\t\t\t\thref=\"/a/submit\"\n\t\t\t\tclass=\"text-muted-2 underline decoration-border underline-offset-4 hover:text-text\"\n\t\t\t\t>{t('post this to the arena')}</a\n\t\t\t>\n\t\t\t<PostToFeedCta\n\t\t\t\tkind=\"rate_result\"\n\t\t\t\tsourceContentId={generationId}\n\t\t\t\tvariant=\"text\"\n\t\t\t\tlabel={t('post this rate to your feed')}\n\t\t\t/>\n\t\t</div>\n\t</div>\n</section>\n\n{#if sectionBelow}\n\t<!-- Phones only. Above the bottom nav (68px + safe area) and under every\n\t\t modal (z-[100] and up). -->\n\t<div\n\t\tclass=\"fixed inset-x-3 z-[45] md:hidden\"\n\t\tstyle=\"bottom: calc(80px + env(safe-area-inset-bottom, 0px));\"\n\t\ttransition:fly={{ y: 24, duration: 220, easing: cubicOut }}\n\t>\n\t\t{#if offer.primary === 'duel'}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonclick={() => pick('duel', 1, 'bar')}\n\t\t\t\tdisabled={startingDuel}\n\t\t\t\tclass=\"flex h-[62px] w-full cursor-pointer items-center gap-3 rounded-2xl bg-blue-dark pr-3.5 pl-3 text-left text-white shadow-[0_12px_32px_rgba(0,0,0,0.55)] disabled:opacity-90\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"flex h-[38px] w-[38px] shrink-0 items-center justify-center rounded-[11px] bg-white/15\"\n\t\t\t\t>\n\t\t\t\t\t{@render duelGlyph('h-5 w-5')}\n\t\t\t\t</span>\n\t\t\t\t<span class=\"min-w-0 flex-1\">\n\t\t\t\t\t<span class=\"block truncate font-display text-[15px] font-bold tracking-tight\"\n\t\t\t\t\t\t>{duelTitle}</span\n\t\t\t\t\t>\n\t\t\t\t\t<span class=\"block truncate text-[11.5px] text-white/80\"\n\t\t\t\t\t\t>{t('one tap · this photo · they join free')}</span\n\t\t\t\t\t>\n\t\t\t\t</span>\n\t\t\t\t{@render arrow('h-[18px] w-[18px]')}\n\t\t\t</button>\n\t\t{:else}\n\t\t\t<a\n\t\t\t\thref=\"/r\"\n\t\t\t\tonclick={() => pick('raters', 1, 'bar')}\n\t\t\t\tclass=\"flex h-[62px] w-full items-center gap-3 rounded-2xl bg-green pr-3.5 pl-3 text-[#052e14] no-underline shadow-[0_12px_32px_rgba(0,0,0,0.55)] hover:text-[#052e14]\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"flex h-[38px] w-[38px] shrink-0 items-center justify-center rounded-[11px] bg-[#052e14]/15\"\n\t\t\t\t>\n\t\t\t\t\t{@render ratersGlyph('h-5 w-5')}\n\t\t\t\t</span>\n\t\t\t\t<span class=\"min-w-0 flex-1\">\n\t\t\t\t\t<span class=\"block truncate font-display text-[15px] font-bold tracking-tight\"\n\t\t\t\t\t\t>{t('get a human second opinion')}</span\n\t\t\t\t\t>\n\t\t\t\t\t<span class=\"block truncate text-[11.5px] text-[#052e14]/80\">\n\t\t\t\t\t\t{ratersOnline > 0\n\t\t\t\t\t\t\t? ratersOnline === 1\n\t\t\t\t\t\t\t\t? t('1 rater online now · 1:1 in chat')\n\t\t\t\t\t\t\t\t: t('{n} raters online now · 1:1 in chat', { n: ratersOnline })\n\t\t\t\t\t\t\t: t('a real rater, 1:1 in chat')}\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t\t{@render arrow('h-[18px] w-[18px]')}\n\t\t\t</a>\n\t\t{/if}\n\t</div>\n{/if}\n","<script lang=\"ts\">\n\t/**\n\t * Epic R: the result page's next step for a rating of boobs, an ass or a\n\t * nude. The dick's NextStep offers a duel and a real rater, both made for\n\t * dicks; these subjects have beat me's own categories instead, so the\n\t * score that was private can go to a public vote. Nudes, which beat me has\n\t * no category for, get both, and the album shop.\n\t */\n\timport { t } from '$lib/i18n';\n\timport { trackCtaClick } from '$lib/analytics';\n\timport { RATE_SUBJECT_PATH, type PageRateSubject } from '$lib/rate-subjects';\n\n\tlet { subject }: { subject: PageRateSubject } = $props();\n\n\ttype Offer = { key: string; href: string; title: string; text: string; cta: string };\n\n\tconst offers = $derived.by((): Offer[] => {\n\t\tconst beat = (kind: 'boobs' | 'ass'): Offer =>\n\t\t\tkind === 'boobs'\n\t\t\t\t? {\n\t\t\t\t\t\tkey: 'beat_boobs',\n\t\t\t\t\t\thref: '/b/start?kind=boobs',\n\t\t\t\t\t\ttitle: t('put them in a boob beat.'),\n\t\t\t\t\t\ttext: t(\n\t\t\t\t\t\t\t'your pic against a challenger’s. anyone can vote for 24 hours, and the most votes wins. anonymous.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcta: t('start a boob beat')\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tkey: 'beat_ass',\n\t\t\t\t\t\thref: '/b/start?kind=ass',\n\t\t\t\t\t\ttitle: t('put it in an ass beat.'),\n\t\t\t\t\t\ttext: t(\n\t\t\t\t\t\t\t'your pic against a challenger’s. anyone can vote for 24 hours, and the most votes wins. anonymous.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcta: t('start an ass beat')\n\t\t\t\t\t};\n\t\tif (subject === 'nudes') {\n\t\t\treturn [\n\t\t\t\tbeat('boobs'),\n\t\t\t\tbeat('ass'),\n\t\t\t\t{\n\t\t\t\t\tkey: 'sell_nudes',\n\t\t\t\t\thref: '/sell-nudes',\n\t\t\t\t\ttitle: t('sell the ones that score.'),\n\t\t\t\t\ttext: t(\n\t\t\t\t\t\t'a photo or video album at your price, with free previews. paid on every unlock.'\n\t\t\t\t\t),\n\t\t\t\t\tcta: t('how selling works')\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t\treturn [\n\t\t\tbeat(subject),\n\t\t\t{\n\t\t\t\tkey: `vote_${subject}`,\n\t\t\t\thref: `${RATE_SUBJECT_PATH[subject]}#beat`,\n\t\t\t\ttitle: subject === 'boobs' ? t('vote on live boob beats.') : t('vote on live ass beats.'),\n\t\t\t\ttext: t('see who’s up right now and pick a side. one vote per device.'),\n\t\t\t\tcta: t('vote now')\n\t\t\t}\n\t\t];\n\t});\n</script>\n\n<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<h2 class=\"font-display text-[clamp(1.8rem,4vw,3rem)] leading-[1] font-bold tracking-tighter\">\n\t\t\t{t('one AI, one opinion.')} <span class=\"text-muted\">{t('now ask the crowd.')}</span>\n\t\t</h2>\n\t\t<div class=\"mt-8 grid gap-4 {offers.length === 3 ? 'md:grid-cols-3' : 'sm:grid-cols-2'}\">\n\t\t\t{#each offers as o, i (o.key)}\n\t\t\t\t<a\n\t\t\t\t\thref={o.href}\n\t\t\t\t\tonclick={() => trackCtaClick(o.key, `rate_result_${subject}`, i + 1)}\n\t\t\t\t\tclass=\"group flex flex-col rounded-xl border border-border bg-surface/50 p-6 no-underline transition-colors hover:border-muted/40\"\n\t\t\t\t>\n\t\t\t\t\t<h3 class=\"font-display text-lg leading-tight font-bold tracking-tight text-text\">\n\t\t\t\t\t\t{o.title}\n\t\t\t\t\t</h3>\n\t\t\t\t\t<p class=\"mt-2 text-xs leading-relaxed text-muted\">{o.text}</p>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"mt-auto inline-flex items-center gap-1.5 pt-4 text-sm font-semibold {i === 0\n\t\t\t\t\t\t\t? 'text-yellow'\n\t\t\t\t\t\t\t: 'text-text'}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{o.cta}\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tclass=\"h-3.5 w-3.5 transition-transform group-hover:translate-x-0.5\"\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.5\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\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=\"M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3\"\n\t\t\t\t\t\t\t/></svg\n\t\t\t\t\t\t>\n\t\t\t\t\t</span>\n\t\t\t\t</a>\n\t\t\t{/each}\n\t\t</div>\n\t</div>\n</section>\n","export interface PornstarProfile {\n\tname: string;\n\tslug: string;\n\timage: string;\n\ttagline: {\n\t\troast: string;\n\t\thype: string;\n\t};\n\tdimensions: {\n\t\tproportions: number;\n\t\taesthetics: number;\n\t\tgrooming: number;\n\t\tphotoQuality: number;\n\t\tlighting: number;\n\t\toverallVibe: number;\n\t};\n}\n\n/**\n * Each star occupies a distinct \"archetype\" region in 6D score space:\n *\n * Johnny Sins    — The GOAT: high vibe + grooming, good proportions\n * James Deen     — The everyman: average anatomy, decent vibe, mediocre photos\n * Manuel Ferrara — Raw power: big + confident, doesn't care about photo quality\n * Rocco Siffredi — Size king: extreme proportions, terrible presentation\n * Peter North    — Old school: good proportions, balanced, moderate photo quality\n * Keiran Lee     — The polished pro: best-in-class presentation across the board\n * Mick Blue      — The balanced athlete: slightly above average everywhere\n * Jordi El Niño  — The pretty boy: smaller proportions, high aesthetics + grooming\n * Tommy Pistol   — The wildcard: low scores, raw authenticity, high vibe\n */\nexport const pornstars: PornstarProfile[] = [\n\t{\n\t\tname: 'Johnny Sins',\n\t\tslug: 'johnny-sins',\n\t\timage: '/img/stars/johnny-sins.jpg',\n\t\ttagline: {\n\t\t\troast: \"bald, basic, but somehow still legendary. you're giving discount sins energy.\",\n\t\t\thype: 'the GOAT energy. versatile, confident, iconic. you share that same aura.'\n\t\t},\n\t\tdimensions: {\n\t\t\tproportions: 7.5,\n\t\t\taesthetics: 8.0,\n\t\t\tgrooming: 9.0,\n\t\t\tphotoQuality: 6.0,\n\t\t\tlighting: 5.5,\n\t\t\toverallVibe: 9.0\n\t\t}\n\t},\n\t{\n\t\tname: 'James Deen',\n\t\tslug: 'james-deen',\n\t\timage: '/img/stars/james-deen.jpg',\n\t\ttagline: {\n\t\t\troast: \"the 'boy next door' archetype. you're giving approachable mediocrity.\",\n\t\t\thype: \"that effortless charm. you've got the same natural, unforced appeal.\"\n\t\t},\n\t\tdimensions: {\n\t\t\tproportions: 5.5,\n\t\t\taesthetics: 6.5,\n\t\t\tgrooming: 6.0,\n\t\t\tphotoQuality: 4.5,\n\t\t\tlighting: 4.0,\n\t\t\toverallVibe: 7.0\n\t\t}\n\t},\n\t{\n\t\tname: 'Manuel Ferrara',\n\t\tslug: 'manuel-ferrara',\n\t\timage: '/img/stars/manuel-ferrara.jpg',\n\t\ttagline: {\n\t\t\troast: \"french arrogance meets raw power. you're giving eurotrash energy and somehow it works.\",\n\t\t\thype: 'european sophistication meets raw confidence. a rare and powerful combination.'\n\t\t},\n\t\tdimensions: {\n\t\t\tproportions: 8.0,\n\t\t\taesthetics: 6.0,\n\t\t\tgrooming: 5.0,\n\t\t\tphotoQuality: 4.0,\n\t\t\tlighting: 3.5,\n\t\t\toverallVibe: 8.0\n\t\t}\n\t},\n\t{\n\t\tname: 'Rocco Siffredi',\n\t\tslug: 'rocco-siffredi',\n\t\timage: '/img/stars/rocco-siffredi.jpg',\n\t\ttagline: {\n\t\t\troast: \"the italian stallion prototype. all proportions, no subtlety. just like you.\",\n\t\t\thype: 'legendary proportions and unshakable confidence. a true hall-of-famer match.'\n\t\t},\n\t\tdimensions: {\n\t\t\tproportions: 9.5,\n\t\t\taesthetics: 5.5,\n\t\t\tgrooming: 4.0,\n\t\t\tphotoQuality: 3.5,\n\t\t\tlighting: 3.0,\n\t\t\toverallVibe: 7.0\n\t\t}\n\t},\n\t{\n\t\tname: 'Peter North',\n\t\tslug: 'peter-north',\n\t\timage: '/img/stars/peter-north.jpg',\n\t\ttagline: {\n\t\t\troast: \"old school. reliable. nothing fancy but gets the job done. like a honda civic.\",\n\t\t\thype: 'a classic for a reason. timeless appeal that never goes out of style.'\n\t\t},\n\t\tdimensions: {\n\t\t\tproportions: 8.0,\n\t\t\taesthetics: 7.0,\n\t\t\tgrooming: 5.5,\n\t\t\tphotoQuality: 5.0,\n\t\t\tlighting: 4.5,\n\t\t\toverallVibe: 6.0\n\t\t}\n\t},\n\t{\n\t\tname: 'Keiran Lee',\n\t\tslug: 'keiran-lee',\n\t\timage: '/img/stars/keiran-lee.jpg',\n\t\ttagline: {\n\t\t\troast: \"the corporate pornstar. looks like he files taxes between scenes. suit and all.\",\n\t\t\thype: 'polished, professional, peak presentation. the total package, just like you.'\n\t\t},\n\t\tdimensions: {\n\t\t\tproportions: 7.0,\n\t\t\taesthetics: 8.5,\n\t\t\tgrooming: 9.0,\n\t\t\tphotoQuality: 8.0,\n\t\t\tlighting: 7.5,\n\t\t\toverallVibe: 8.5\n\t\t}\n\t},\n\t{\n\t\tname: 'Mick Blue',\n\t\tslug: 'mick-blue',\n\t\timage: '/img/stars/mick-blue.jpg',\n\t\ttagline: {\n\t\t\troast: \"solid all-rounder. not the best at anything but not bad at anything either. peak average.\",\n\t\t\thype: 'consistently excellent across the board. a well-rounded king.'\n\t\t},\n\t\tdimensions: {\n\t\t\tproportions: 6.5,\n\t\t\taesthetics: 6.5,\n\t\t\tgrooming: 6.0,\n\t\t\tphotoQuality: 5.0,\n\t\t\tlighting: 4.5,\n\t\t\toverallVibe: 6.5\n\t\t}\n\t},\n\t{\n\t\tname: 'Jordi El Niño',\n\t\tslug: 'jordi-el-nino',\n\t\timage: '/img/stars/jordi-el-nino.jpg',\n\t\ttagline: {\n\t\t\troast: \"the underdog archetype. people underestimate you, which is... fair honestly.\",\n\t\t\thype: \"never judge a book by its cover. you've got that same surprising energy.\"\n\t\t},\n\t\tdimensions: {\n\t\t\tproportions: 4.5,\n\t\t\taesthetics: 7.5,\n\t\t\tgrooming: 7.5,\n\t\t\tphotoQuality: 6.5,\n\t\t\tlighting: 6.0,\n\t\t\toverallVibe: 5.5\n\t\t}\n\t},\n\t{\n\t\tname: 'Tommy Pistol',\n\t\tslug: 'tommy-pistol',\n\t\timage: '/img/stars/tommy-pistol.jpg',\n\t\ttagline: {\n\t\t\troast: \"the wildcard. chaotic energy, questionable grooming, but oddly compelling.\",\n\t\t\thype: \"raw authenticity over polish. you don't need to try — that IS the vibe.\"\n\t\t},\n\t\tdimensions: {\n\t\t\tproportions: 5.0,\n\t\t\taesthetics: 4.5,\n\t\t\tgrooming: 3.0,\n\t\t\tphotoQuality: 3.0,\n\t\t\tlighting: 2.5,\n\t\t\toverallVibe: 7.0\n\t\t}\n\t}\n];\n","import { pornstars, type PornstarProfile } from '$lib/data/pornstars';\nimport type { AnalysisResults } from '$lib/types/generation';\n\nexport interface DimensionComparison {\n\tname: string;\n\tkey: keyof PornstarProfile['dimensions'];\n\tuserScore: number;\n\tstarScore: number;\n\tdiff: number; // absolute difference\n}\n\nexport interface StarMatchResult {\n\tstar: PornstarProfile;\n\tsimilarity: number; // 0-100\n\tclosestDimensions: DimensionComparison[]; // top 3 closest dimensions\n\tfurthestDimension: DimensionComparison; // biggest gap\n}\n\n/** Map dimension display names from AI output to pornstar dimension keys */\nconst DIMENSION_MAP: Record<string, keyof PornstarProfile['dimensions']> = {\n\tproportions: 'proportions',\n\taesthetics: 'aesthetics',\n\tgrooming: 'grooming',\n\t'photo quality': 'photoQuality',\n\tlighting: 'lighting',\n\t'overall vibe': 'overallVibe'\n};\n\nconst DIMENSION_LABELS: Record<keyof PornstarProfile['dimensions'], string> = {\n\tproportions: 'Proportions',\n\taesthetics: 'Aesthetics',\n\tgrooming: 'Grooming',\n\tphotoQuality: 'Photo quality',\n\tlighting: 'Lighting',\n\toverallVibe: 'Overall vibe'\n};\n\nfunction getUserDimensions(\n\tdimensions: AnalysisResults['dimensions']\n): Partial<PornstarProfile['dimensions']> {\n\tconst result: Partial<PornstarProfile['dimensions']> = {};\n\tfor (const dim of dimensions) {\n\t\tconst key = DIMENSION_MAP[dim.name.toLowerCase()];\n\t\tif (key) {\n\t\t\tresult[key] = dim.score;\n\t\t}\n\t}\n\treturn result;\n}\n\nconst KEYS: (keyof PornstarProfile['dimensions'])[] = [\n\t'proportions',\n\t'aesthetics',\n\t'grooming',\n\t'photoQuality',\n\t'lighting',\n\t'overallVibe'\n];\n\nfunction euclideanDistance(\n\tuser: Partial<PornstarProfile['dimensions']>,\n\tstar: PornstarProfile['dimensions']\n): number {\n\tlet sumSq = 0;\n\tlet count = 0;\n\tfor (const key of KEYS) {\n\t\tconst userVal = user[key];\n\t\tif (userVal !== undefined) {\n\t\t\tsumSq += (userVal - star[key]) ** 2;\n\t\t\tcount++;\n\t\t}\n\t}\n\tif (count === 0) return Infinity;\n\treturn Math.sqrt(sumSq);\n}\n\nfunction getDimensionComparisons(\n\tuser: Partial<PornstarProfile['dimensions']>,\n\tstar: PornstarProfile['dimensions']\n): DimensionComparison[] {\n\treturn KEYS.filter((key) => user[key] !== undefined).map((key) => ({\n\t\tname: DIMENSION_LABELS[key],\n\t\tkey,\n\t\tuserScore: user[key]!,\n\t\tstarScore: star[key],\n\t\tdiff: Math.abs(user[key]! - star[key])\n\t}));\n}\n\n/**\n * Find the closest pornstar match based on euclidean distance across 6 dimensions.\n * Max possible distance = sqrt(6 * 10^2) ≈ 24.49\n */\nexport function findStarMatch(dimensions: AnalysisResults['dimensions']): StarMatchResult {\n\tconst userDims = getUserDimensions(dimensions);\n\tconst maxDistance = Math.sqrt(6 * 100); // ~24.49\n\n\tlet bestStar = pornstars[0];\n\tlet bestDistance = Infinity;\n\n\tfor (const star of pornstars) {\n\t\tconst dist = euclideanDistance(userDims, star.dimensions);\n\t\tif (dist < bestDistance) {\n\t\t\tbestDistance = dist;\n\t\t\tbestStar = star;\n\t\t}\n\t}\n\n\tconst similarity = Math.round(Math.max(0, Math.min(100, (1 - bestDistance / maxDistance) * 100)));\n\n\tconst comparisons = getDimensionComparisons(userDims, bestStar.dimensions);\n\tconst sorted = [...comparisons].sort((a, b) => a.diff - b.diff);\n\n\treturn {\n\t\tstar: bestStar,\n\t\tsimilarity,\n\t\tclosestDimensions: sorted.slice(0, 3),\n\t\tfurthestDimension: sorted[sorted.length - 1]\n\t};\n}\n","<script lang=\"ts\">\n\timport { t } from '$lib/i18n';\n\timport { goto, invalidateAll } from '$app/navigation';\n\timport { deserialize } from '$app/forms';\n\timport { RATED_COUNT_SHORT } from '$lib/proof';\n\timport type { ActionResult } from '@sveltejs/kit';\n\timport { onMount, onDestroy } from 'svelte';\n\timport { sanitizeVerdict } from '$lib/utils/sanitize-verdict';\n\timport { sendErrorText } from '$lib/chat/send-error';\n\timport { PRO_MONTHLY_LABEL } from '$lib/pricing';\n\timport { DUEL_FREE_CREATES } from '$lib/duel-feature';\n\timport { msg } from '$lib/i18n/mark';\n\timport ScoreGauge from '$lib/components/ScoreGauge.svelte';\n\timport UpgradeModal from '$lib/components/UpgradeModal.svelte';\n\timport PostUnlockUpsell from '$lib/components/PostUnlockUpsell.svelte';\n\timport StarMatch from '$lib/components/StarMatch.svelte';\n\timport FoilCardHero from '$lib/components/FoilCardHero.svelte';\n\timport ReportContentModal from '$lib/components/ReportContentModal.svelte';\n\timport AnalyzingProgress from '$lib/components/AnalyzingProgress.svelte';\n\timport SignupGateResult from '$lib/components/rate/SignupGateResult.svelte';\n\timport NextStep from '$lib/components/rate/NextStep.svelte';\n\timport SubjectNextStep from '$lib/components/rate/SubjectNextStep.svelte';\n\timport { RATE_SUBJECTS, RATE_SUBJECT_PATH, type RateSubject } from '$lib/rate-subjects';\n\timport { findStarMatch } from '$lib/utils/starMatch';\n\timport { activeMode } from '$lib/stores/activeMode';\n\timport { openAuthSheet } from '$lib/stores/authSheet';\n\timport { notifySignedIn } from '$lib/stores/global-realtime';\n\timport * as analytics from '$lib/analytics';\n\timport type { AnalysisResults } from '$lib/types/generation';\n\n\ttype Mode = 'roast' | 'hype';\n\n\tlet { data } = $props();\n\n\tconst gen = data.generation;\n\tconst mode: Mode = (gen.mode as Mode) || 'roast';\n\t// Epic R: what was rated. Everything dick-only on this page (the duel, the\n\t// pornstar match, the size tools) shows for a dick rating alone.\n\tconst subject: RateSubject = data.subject ?? 'dick';\n\tconst isRoast = mode === 'roast';\n\tconst isOwner = $derived(data.isOwner);\n\tlet reportOpen = $state(false);\n\tconst hasSavedPhoto = $derived(!!data.generation.savedPhotoPath);\n\n\t// keep navbar/footer themed during result view\n\tactiveMode.set(mode);\n\tonDestroy(() => activeMode.set(null));\n\n\t// mode-derived colors\n\tconst ac = isRoast ? 'text-coral' : 'text-yellow';\n\tconst acRaw = isRoast ? '#FF4D6D' : '#FFE500';\n\tconst acBg = isRoast ? 'bg-coral' : 'bg-yellow';\n\tconst acBorder = isRoast ? 'border-coral/30' : 'border-yellow/30';\n\tconst acGlow = isRoast ? 'bg-coral/5' : 'bg-yellow/[.04]';\n\n\t// state\n\tlet status = $state(gen.status);\n\tlet results = $state<AnalysisResults | null>(gen.results as AnalysisResults | null);\n\tlet errorMessage = $state(gen.errorMessage);\n\n\t// `results` is seeded from the server once, but the server's copy changes\n\t// under the page on an invalidateAll — above all when a signed-out rating is\n\t// claimed by the sign-up its gate asked for, and the free fields arrive for\n\t// the first time. Follow it whenever it carries a finished rating (RAT-117).\n\t$effect(() => {\n\t\tconst g = data.generation;\n\t\tif (g.status === 'completed' && g.results) {\n\t\t\tresults = g.results as AnalysisResults;\n\t\t\tstatus = 'completed';\n\t\t}\n\t});\n\tlet barsAnimated = $state(false);\n\tlet nuked = $state(false);\n\tlet cardName = $state('');\n\tlet analysisDone = $state(false);\n\t// The kick-POST died on a network blip rather than the analysis itself failing.\n\t// The generation is very likely still running server-side, so the recovery is\n\t// \"reload and check\", NOT \"start over\" — see the failed-state branch below.\n\tlet stalledByNetwork = $state(false);\n\t// RAT-462: the poll hit its wall-clock deadline with the row still stuck\n\t// `processing` — the serverless analyze function was almost certainly killed /\n\t// OOM'd after flipping to `processing` (its catch block, which writes `failed`,\n\t// never ran), so the ring would otherwise sit at 92% forever.\n\tlet timedOut = $state(false);\n\tlet foilPollDone = $state(false); // foil-card readiness poll finished (ready or gave up)\n\tlet currentFact = $state(0);\n\n\t// subscription status\n\tconst subscribed = $derived(data.isSubscribed);\n\n\t// breakdown unlock state (lowestDim/lowestGap moved after dimensions declaration below)\n\tlet breakdownUnlocked = $state(data.generation.breakdownUnlocked ?? false);\n\tlet unlocking = $state(false);\n\tconst isLocked = $derived(!breakdownUnlocked && !subscribed);\n\n\t// $1.99 single-unlock paywall (loader card)\n\tlet singleUnlockDismissed = $state(false);\n\t// RAT-199: go-Pro side-CTA next to the $1.99 button. Routes to the same\n\t// /api/checkout/subscription endpoint with plan=monthly so we don't fork\n\t// the auth-state cookie/UTM logic.\n\tlet proLoading = $state(false);\n\n\t// RAT-199: scroll-triggered Pro upsell. Wait until the result has actually\n\t// loaded AND the user scrolls down past a small threshold — that means\n\t// they're engaged with the result, not still waiting for it. Calling this\n\t// is idempotent: the listener is removed after first fire and won't be\n\t// re-attached on a second invocation. Skipped entirely for subscribers,\n\t// non-owners, and already-unlocked breakdowns.\n\tlet scrollUpsellPrimed = false;\n\tlet scrollUpsellListener: ((this: Window, ev: Event) => void) | null = null;\n\tfunction primeScrollUpsell() {\n\t\tif (scrollUpsellPrimed) return;\n\t\tif (subscribed || breakdownUnlocked || !isOwner) return;\n\t\tscrollUpsellPrimed = true;\n\t\tscrollUpsellListener = () => {\n\t\t\tif (window.scrollY < 200) return;\n\t\t\tif (scrollUpsellListener) window.removeEventListener('scroll', scrollUpsellListener);\n\t\t\tscrollUpsellListener = null;\n\t\t\tif (subscribed || breakdownUnlocked) return;\n\t\t\tupgradeFeature = 'breakdown';\n\t\t\tshowUpgradeModal = true;\n\t\t\tanalytics.trackUpgradeModalOpen('post_result_scroll');\n\t\t};\n\t\twindow.addEventListener('scroll', scrollUpsellListener, { passive: true });\n\t}\n\n\t// RAT-455: the foil card PNG renders ~1-2s AFTER the generation completes\n\t// (decoupled from the analyze response), so it isn't ready when the result\n\t// first shows. For saved-photo gens, poll a few times to pick it up and swap\n\t// the \"minting…\" loader for the real card. Bounded — not a live poll.\n\tasync function pollFoilCard() {\n\t\tif (!hasSavedPhoto || data.foilCard?.pngReady) {\n\t\t\tfoilPollDone = true;\n\t\t\treturn;\n\t\t}\n\t\t// The foil PNG renders a few seconds after completion (chromium) — poll the\n\t\t// lightweight status endpoint (a single indexed select) until it's ready,\n\t\t// up to ~40s to cover a slow/cold render, then invalidateAll ONCE to pull\n\t\t// the real card in. Far cheaper than invalidateAll-polling.\n\t\tconst deadline = Date.now() + 40_000;\n\t\twhile (Date.now() < deadline) {\n\t\t\tawait new Promise((r) => setTimeout(r, 2000));\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(`/api/generation/${data.generation.id}/foil-status`);\n\t\t\t\tif (res.ok && (await res.json()).ready) {\n\t\t\t\t\tawait invalidateAll();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// transient — keep polling\n\t\t\t}\n\t\t}\n\t\tfoilPollDone = true;\n\t}\n\t// The paywall CTAs open the Premium modal (value first) rather than bouncing\n\t// straight to Stripe — the user wants to see what Premium unlocks before the\n\t// checkout redirect, which the modal itself owns via its own goPro(). The\n\t// feature drives the modal's accent + headline (hype vs roast breakdown).\n\t// proLoading stays for the button markup's disabled/label bindings; the modal\n\t// now carries the loading state, so it never flips here.\n\tfunction clickGoPro() {\n\t\tupgradeFeature = mode === 'hype' ? 'breakdown-hype' : 'breakdown';\n\t\tshowUpgradeModal = true;\n\t\tanalytics.trackUpgradeModalOpen('paywall_cta');\n\t}\n\tconst showSingleUnlockCard = $derived(\n\t\tisOwner && !subscribed && !breakdownUnlocked && !singleUnlockDismissed\n\t);\n\n\t// Signed-out rating gate (SignupGateResult). The sheet signs them in right\n\t// here: its OTP path invalidates this page and the load claims the rating\n\t// for them, and its Google path comes back to this URL, where the load does\n\t// the same.\n\tconst GATE_PLACEMENTS = ['hero', 'dimensions', 'verdict', 'tips'];\n\tconst gateVariant = $derived(\n\t\tdata.anonOwner ? 'signup' : data.claimBlocked ? 'used_free' : 'private'\n\t);\n\tfunction signUpFromGate(placement: string) {\n\t\tanalytics.trackCtaClick('sign_up', 'rate_result_gate', GATE_PLACEMENTS.indexOf(placement) + 1);\n\t\topenAuthSheet(`/rate/result/${gen.id}`, 'rate_result_gate');\n\t}\n\tfunction goProFromGate(placement: string) {\n\t\tanalytics.trackCtaClick('go_pro', 'rate_result_gate', GATE_PLACEMENTS.indexOf(placement) + 1);\n\t\tclickGoPro();\n\t}\n\t// The step between \"rated\" and \"signed up\" in the Get Rated funnel.\n\tlet gateViewTracked = false;\n\t$effect(() => {\n\t\tif (gateViewTracked || status !== 'completed' || !data.signupGate) return;\n\t\tgateViewTracked = true;\n\t\tanalytics.trackFunnelStep('result_gate', 'rate', { variant: gateVariant });\n\t});\n\n\n\n\tfunction dismissSingleUnlock() {\n\t\tsingleUnlockDismissed = true;\n\t\tanalytics.trackSingleUnlockDismiss(gen.id);\n\t}\n\n\t// Post-unlock subscription upsell\n\tlet showPostUnlockUpsell = $state(false);\n\n\tconst acColor = isRoast ? '#FF4D6D' : '#FFE500';\n\tconst acColorAlpha = isRoast ? 'rgba(255,77,109,' : 'rgba(255,229,0,';\n\tconst orbColor = isRoast ? 'bg-coral/[.06]' : 'bg-yellow/[.05]';\n\tconst ringRadius = 90;\n\tconst ringCircumference = 2 * Math.PI * ringRadius;\n\n\tconst facts = isRoast\n\t\t? [\n\t\t\t\tmsg('preparing emotional damage...'),\n\t\t\t\tmsg('calibrating honesty to maximum...'),\n\t\t\t\tmsg('scanning {n} submissions...'),\n\t\t\t\tmsg('warming up insults...'),\n\t\t\t\tmsg('analyzing with zero mercy...'),\n\t\t\t\tmsg('computing roast intensity...')\n\t\t\t]\n\t\t: [\n\t\t\t\tmsg('activating hype protocol...'),\n\t\t\t\tmsg('loading compliment database...'),\n\t\t\t\tmsg('finding your strengths...'),\n\t\t\t\tmsg('the AI is feeling generous...'),\n\t\t\t\tmsg('computing confidence level...'),\n\t\t\t\tmsg('generating pure hype...')\n\t\t\t];\n\n\t// Derived values from results\n\tconst score = $derived(results?.score ?? 0);\n\tconst rank = $derived(results?.rank ?? '');\n\tconst potential = $derived(results?.potential ?? 0);\n\tconst pointsLeft = $derived(results ? +(results.potential - results.score).toFixed(1) : 0);\n\tconst dimensions = $derived(results?.dimensions ?? []);\n\t// RAT-240: sanitize before {@html} render — the prompt path is safe\n\t// for solo /rate, but defense-in-depth: a future feature might pipe\n\t// user text into the AI input. Allowlist tags only.\n\tconst verdict = $derived(sanitizeVerdict(results?.verdict ?? ''));\n\tconst tips = $derived(results?.tips ?? []);\n\tconst starMatch = $derived(\n\t\tsubject === 'dick' && dimensions.length > 0 ? findStarMatch(dimensions) : null\n\t);\n\n\t// score tier for personalized messaging\n\tconst scoreTier = $derived(score < 5 ? 'low' : score < 7 ? 'mid' : 'high');\n\n\t// upsell card order: high scorers see arena first, others see duel first\n\tconst upsellCardOrder = $derived(\n\t\tscoreTier === 'high'\n\t\t\t? (['arena', 'duel'] as const)\n\t\t\t: (['duel', 'arena'] as const)\n\t);\n\n\t// floating bar state (declared early so unlockBreakdown can reference them)\n\tlet showUpgradeModal = $state(false);\n\tlet upgradeFeature = $state<'duel' | 'breakdown' | 'breakdown-hype' | null>(null);\n\t// RAT-569: the modal was opened by the spent free-duel allowance, not a paywall.\n\tlet duelLimitOpen = $state(false);\n\n\t// One-tap duel: reuse the just-rated photo, create the duel server-side, and\n\t// drop the user straight in the lobby (the share screen) — no /d upload step.\n\t// Mirrors the /d client flow: action → fire analysis → goto(lobby). The\n\t// spent free-duel allowance opens the wall right here; any other failure (no\n\t// reusable photo, storage) falls back to /d, which handles upload itself.\n\tlet startingDuel = $state(false);\n\tasync function startDuelOneClick() {\n\t\tif (startingDuel) return;\n\t\tstartingDuel = true;\n\t\tanalytics.trackCtaClick('duel', 'rate_result', 1);\n\t\ttry {\n\t\t\tconst res = await fetch('?/startDuel', { method: 'POST', body: new FormData() });\n\t\t\tconst result = deserialize(await res.text()) as ActionResult;\n\t\t\tif (result.type === 'success' && result.data) {\n\t\t\t\tconst d = result.data as Record<string, unknown>;\n\t\t\t\tconst genId = String(d.generationId ?? '');\n\t\t\t\tconst code = String(d.code ?? '');\n\t\t\t\tif (genId && code) {\n\t\t\t\t\t// fire-and-forget AI analysis, then land in the lobby\n\t\t\t\t\tfetch(`/api/duel/start-analysis/${genId}`, { method: 'POST' });\n\t\t\t\t\tgoto(`/d/${code}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tresult.type === 'failure' &&\n\t\t\t\t(result.data as Record<string, unknown> | undefined)?.error === 'duel_limit'\n\t\t\t) {\n\t\t\t\tupgradeFeature = 'duel';\n\t\t\t\tduelLimitOpen = true;\n\t\t\t\tshowUpgradeModal = true;\n\t\t\t\tanalytics.trackDuelLimitBlocked({\n\t\t\t\t\tused: DUEL_FREE_CREATES,\n\t\t\t\t\tlimit: DUEL_FREE_CREATES,\n\t\t\t\t\tsurface: 'rate_result'\n\t\t\t\t});\n\t\t\t\tanalytics.trackUpgradeModalOpen('duel_limit');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// no_photo / storage / unexpected → manual duel create page\n\t\t\tgoto('/d');\n\t\t} catch {\n\t\t\tgoto('/d');\n\t\t} finally {\n\t\t\tstartingDuel = false;\n\t\t}\n\t}\n\n\t// Free tier: first 2 dimensions only. Locked = remaining 4 + verdict + tips + star match\n\tconst FREE_DIM_COUNT = 2;\n\tconst freeDimensions = $derived(dimensions.slice(0, FREE_DIM_COUNT));\n\tconst lockedDimensions = $derived(dimensions.slice(FREE_DIM_COUNT));\n\n\t// breakdown unlock derived (depends on dimensions)\n\tconst lowestDim = $derived(\n\t\tdimensions.length > 0\n\t\t\t? dimensions.reduce((min, d) => (d.score < min.score ? d : min), dimensions[0])\n\t\t\t: null\n\t);\n\tconst lowestGap = $derived(\n\t\tlowestDim && results ? +(results.potential - lowestDim.score).toFixed(1) : 0\n\t);\n\n\tasync function unlockBreakdown() {\n\t\tif (!subscribed) return;\n\t\tunlocking = true;\n\t\ttry {\n\t\t\tconst res = await fetch(`/api/generation/${gen.id}/unlock`, { method: 'POST' });\n\t\t\tif (res.ok) {\n\t\t\t\tbreakdownUnlocked = true;\n\t\t\t\tanalytics.trackBreakdownUnlock(score, mode);\n\t\t\t\tawait invalidateAll();\n\t\t\t}\n\t\t} finally {\n\t\t\tunlocking = false;\n\t\t}\n\t}\n\n\tlet pollInterval: ReturnType<typeof setInterval> | undefined;\n\tlet factInterval: ReturnType<typeof setInterval> | undefined;\n\n\tconst GENERIC_ANALYSIS_ERROR = msg(\n\t\t'something went wrong during analysis. the AI might have rejected the image.'\n\t);\n\n\t// Everything the branches above don't recognise lands in the generic failed\n\t// pane, and `errorMessage` there is whatever the provider said — the raw 403\n\t// billing string with an internal team UUID was only the case we noticed. A\n\t// 429 body, a 5xx payload and the internal `MODERATION_UNAVAILABLE:` /\n\t// `Failed to download image:` markers all reach it the same way. Only strings\n\t// we actually authored for the user get through; the rest is logged\n\t// server-side and shown as the generic line.\n\tconst SAFE_ERROR_RE = /^[a-z0-9 ,.'’—–-]+$/i;\n\tfunction userFacingError(msg: string | null | undefined): string {\n\t\tif (!msg) return GENERIC_ANALYSIS_ERROR;\n\t\tconst trimmed = msg.trim();\n\t\t// Internal markers, vendor punctuation (braces, quotes, colons, urls) and\n\t\t// anything long enough to be a payload rather than a sentence.\n\t\tif (trimmed.length > 140) return GENERIC_ANALYSIS_ERROR;\n\t\tif (trimmed.includes(':')) return GENERIC_ANALYSIS_ERROR;\n\t\tif (!SAFE_ERROR_RE.test(trimmed)) return GENERIC_ANALYSIS_ERROR;\n\t\treturn trimmed;\n\t}\n\n\t// RAT-462: wall-clock loader tracking. `loaderStartedAt` is when the ring\n\t// started; `settled` guards the terminal event so it fires exactly once.\n\tlet loaderStartedAt = 0;\n\tlet settled = false;\n\tfunction settle(outcome: 'completed' | 'failed' | 'timeout') {\n\t\tif (settled) return;\n\t\tsettled = true;\n\t\tconst elapsed = loaderStartedAt ? Math.round(performance.now() - loaderStartedAt) : 0;\n\t\tanalytics.trackAnalysisSettled(outcome, 'rate', elapsed);\n\t}\n\n\t// RAT-462: the analyze function is capped at maxDuration 60s, and its catch\n\t// block is what writes the `failed` status. If it's killed / OOMs after\n\t// flipping the row to `processing`, that catch never runs and the row is\n\t// stuck `processing` forever. Bail the poll out past this deadline (60s cap +\n\t// margin for a cold start) so the ring can't strand at 92% indefinitely.\n\tconst POLL_DEADLINE_MS = 90_000;\n\n\t// The deadline counts *foreground* time only. Switching apps while a 20s\n\t// analysis runs is the single most common thing people do on a phone, and\n\t// mobile browsers throttle or suspend timers in a backgrounded tab — a plain\n\t// wall clock would greet them on return with \"this took too long\" over a\n\t// rating that finished fine. Time spent hidden is subtracted instead.\n\tlet hiddenMs = 0;\n\tlet hiddenSince = 0;\n\tfunction onVisibilityChange() {\n\t\tif (document.hidden) {\n\t\t\thiddenSince = performance.now();\n\t\t} else if (hiddenSince) {\n\t\t\thiddenMs += performance.now() - hiddenSince;\n\t\t\thiddenSince = 0;\n\t\t}\n\t}\n\tfunction elapsedVisibleMs(): number {\n\t\tif (!loaderStartedAt) return 0;\n\t\tconst hiddenNow = hiddenSince ? performance.now() - hiddenSince : 0;\n\t\treturn performance.now() - loaderStartedAt - hiddenMs - hiddenNow;\n\t}\n\n\tfunction stopPolling() {\n\t\tif (factInterval) clearInterval(factInterval);\n\t\tif (pollInterval) clearInterval(pollInterval);\n\t\tdocument.removeEventListener('visibilitychange', onVisibilityChange);\n\t}\n\n\tfunction startPolling() {\n\t\tif (!loaderStartedAt) loaderStartedAt = performance.now();\n\t\tdocument.addEventListener('visibilitychange', onVisibilityChange);\n\n\t\tfactInterval = setInterval(() => {\n\t\t\tcurrentFact = (currentFact + 1) % facts.length;\n\t\t}, 1200);\n\n\t\tpollInterval = setInterval(async () => {\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(`/api/generation/${gen.id}`);\n\t\t\t\tif (!res.ok) return;\n\t\t\t\tconst json = await res.json();\n\n\t\t\t\t// The deadline is checked *after* this read, never before it, so we\n\t\t\t\t// can only declare a timeout on a status we just fetched. Checking\n\t\t\t\t// first meant a run that finished while the tab was backgrounded\n\t\t\t\t// could be written off unread.\n\t\t\t\tif (\n\t\t\t\t\tjson.status !== 'completed' &&\n\t\t\t\t\tjson.status !== 'failed' &&\n\t\t\t\t\telapsedVisibleMs() > POLL_DEADLINE_MS &&\n\t\t\t\t\t!analysisDone\n\t\t\t\t) {\n\t\t\t\t\tstopPolling();\n\t\t\t\t\ttimedOut = true;\n\t\t\t\t\tstatus = 'failed';\n\t\t\t\t\tanalytics.trackAnalysisFail('client_timeout', 'rate');\n\t\t\t\t\tsettle('timeout');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (json.status === 'completed') {\n\t\t\t\t\tresults = json.results as AnalysisResults;\n\t\t\t\t\tbreakdownUnlocked = json.breakdownUnlocked ?? false;\n\t\t\t\t\t// Ring races to 100% during the invalidateAll roundtrip below, then\n\t\t\t\t\t// reveal immediately — no artificial hold. A hold keeps the\n\t\t\t\t\t// full-screen loader mounted after \"done\", so the result isn't in\n\t\t\t\t\t// the DOM yet and scrolling to it feels stuck (RAT-454).\n\t\t\t\t\tanalysisDone = true;\n\t\t\t\t\tstopPolling();\n\t\t\t\t\tsettle('completed');\n\t\t\t\t\tawait invalidateAll();\n\t\t\t\t\tstatus = 'completed';\n\t\t\t\t\tsetTimeout(() => { barsAnimated = true; }, 600);\n\t\t\t\t\t// RAT-199: arm the scroll-triggered upsell instead of a fixed\n\t\t\t\t\t// timer — the modal pops only after the user actually engages\n\t\t\t\t\t// with the (blurred) result.\n\t\t\t\t\tprimeScrollUpsell();\n\t\t\t\t\tpollFoilCard();\n\t\t\t\t} else if (json.status === 'failed') {\n\t\t\t\t\tstatus = 'failed';\n\t\t\t\t\terrorMessage = json.errorMessage;\n\t\t\t\t\tanalytics.trackAnalysisFail(json.errorMessage || 'unknown', 'rate');\n\t\t\t\t\tsettle('failed');\n\t\t\t\t\tstopPolling();\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// retry on next interval\n\t\t\t}\n\t\t}, 3000);\n\t}\n\n\tlet notAuthenticated = $state(false);\n\n\t// RAT-462: guard against a double kick. startAnalysis was observed firing\n\t// twice per page load (two `analysis_start` ~25ms apart), which spins up two\n\t// poll loops and fires two POSTs that then collide with the server's\n\t// `status !== 'pending'` guard. This makes the kick idempotent per mount.\n\tlet analysisKicked = false;\n\n\tasync function startAnalysis() {\n\t\tif (analysisKicked) return;\n\t\tanalysisKicked = true;\n\t\tanalytics.trackAnalysisStart(mode, 'rate');\n\t\t// Immediately switch to loading screen\n\t\tstatus = 'processing';\n\t\tstartPolling();\n\n\t\t// Fire the POST — polling will catch the result. Network errors\n\t\t// (Safari auth races, dropped connection during sign-in flow) used\n\t\t// to escape as unhandled rejections, leaving the loader spinning\n\t\t// forever. Catch and surface as a failed status instead (RAT-122).\n\t\ttry {\n\t\t\tconst res = await fetch(`/api/generation/${gen.id}`, { method: 'POST' });\n\n\t\t\tif (!res.ok) {\n\t\t\t\tconst json = await res.json().catch(() => ({}));\n\n\t\t\t\t// The 3s poll loop runs in parallel and may have already reached a\n\t\t\t\t// terminal state by the time this awaited POST resolves. A late\n\t\t\t\t// non-ok response — a Vercel cold-start 504, or the server's\n\t\t\t\t// `status !== 'pending'` → 400 \"already started\" path hit by a\n\t\t\t\t// duplicate request — must NOT clobber an already-shown rating with\n\t\t\t\t// the failure screen. `analysisDone` is set synchronously the moment\n\t\t\t\t// the poll sees `completed`, before its `await invalidateAll()`\n\t\t\t\t// flips `status`, so it closes that window too.\n\t\t\t\tif (analysisDone || status === 'completed' || status === 'failed') return;\n\n\t\t\t\tif (res.status === 401) {\n\t\t\t\t\t// Session expired or not set — need to re-authenticate\n\t\t\t\t\tstopPolling();\n\t\t\t\t\tnotAuthenticated = true;\n\t\t\t\t\tstatus = 'pending';\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// 400 \"already started\" means the analysis is already running (or\n\t\t\t\t// done) server-side — a duplicate POST, not a real failure. Leave\n\t\t\t\t// the poll loop running; it surfaces completed/failed on its own.\n\t\t\t\tif (res.status === 400 && json.error === 'already started') return;\n\n\t\t\t\t// RAT-199: 402 path removed — analysis is free, paywall lives on\n\t\t\t\t// the result page (blurred breakdown). Should never hit this any\n\t\t\t\t// more, but if a stale build returns 402 we treat it like any\n\t\t\t\t// other failure below.\n\t\t\t\tstopPolling();\n\t\t\t\tconst message = json.error || msg('Failed to start analysis');\n\t\t\t\terrorMessage = message;\n\t\t\t\tstatus = 'failed';\n\t\t\t\t// This POST-error path used to be silent — only the poll's failed\n\t\t\t\t// branch emitted analysis_fail, so these failures were invisible in\n\t\t\t\t// analytics. Track it so the failure is measurable.\n\t\t\t\tanalytics.trackAnalysisFail(message, 'rate');\n\t\t\t\tsettle('failed');\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t// Network error (Safari auth races, dropped connection during sign-in).\n\t\t\t// If the poll already reached a terminal state, don't overwrite it.\n\t\t\tif (analysisDone || status === 'completed' || status === 'failed') return;\n\t\t\tstopPolling();\n\t\t\tconst message = err instanceof Error ? err.message : 'network error';\n\t\t\t// Show friendly retry copy to the user (raw \"Load failed\" / \"Failed to\n\t\t\t// fetch\" reads as gibberish mid-analysis), but keep the raw message for\n\t\t\t// analytics so we can still tell the failure modes apart.\n\t\t\terrorMessage = sendErrorText(err, message);\n\t\t\t// Only the POST died — the analysis may well be running (or already done)\n\t\t\t// server-side. Route this to the reload-and-check screen instead of the\n\t\t\t// generic \"try again\", whose /rate CTA bounces a non-subscribed user\n\t\t\t// straight into ?upsell=already_used (the gen counts as processing).\n\t\t\tstalledByNetwork = true;\n\t\t\tstatus = 'failed';\n\t\t\tanalytics.trackAnalysisFail(message, 'rate');\n\t\t\tsettle('failed');\n\t\t}\n\t}\n\n\tonMount(() => {\n\t\t// Handle Stripe single-unlock return: ?unlocked=true → optimistically mark unlocked + clean URL\n\t\tconst u = new URL(window.location.href);\n\t\tif (u.searchParams.get('unlocked') === 'true') {\n\t\t\tbreakdownUnlocked = true;\n\t\t\tsingleUnlockDismissed = true;\n\t\t\tu.searchParams.delete('unlocked');\n\t\t\twindow.history.replaceState({}, '', u.toString());\n\t\t\tinvalidateAll();\n\t\t\t// Show subscription upsell after user has had time to enjoy unlocked content\n\t\t\tif (!subscribed) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tshowPostUnlockUpsell = true;\n\t\t\t\t\tanalytics.trackUpgradeModalOpen('post_unlock_subscription');\n\t\t\t\t}, 5000);\n\t\t\t}\n\t\t} else if (u.searchParams.get('unlock_canceled') === 'true') {\n\t\t\tu.searchParams.delete('unlock_canceled');\n\t\t\twindow.history.replaceState({}, '', u.toString());\n\t\t} else if (u.searchParams.get('subscribed') === 'true') {\n\t\t\tu.searchParams.delete('subscribed');\n\t\t\twindow.history.replaceState({}, '', u.toString());\n\t\t\tinvalidateAll();\n\t\t}\n\t\t// RAT-491: google sign-up from the result gate comes back tagged\n\t\t// ?oauth_resume=1. The load already claimed the rating, so there is\n\t\t// nothing to resume: consume the flag and confirm the sign-in.\n\t\tif (u.searchParams.get('oauth_resume') === '1') {\n\t\t\tu.searchParams.delete('oauth_resume');\n\t\t\twindow.history.replaceState({}, '', u.toString());\n\t\t\tif (data.user) notifySignedIn();\n\t\t}\n\n\t\t// If already completed or failed, show immediately\n\t\tif (status === 'completed') {\n\t\t\tsetTimeout(() => { barsAnimated = true; }, 300);\n\t\t\t// RAT-199: refresh / direct-link land — arm the scroll-triggered\n\t\t\t// upsell. Same scroll-after-engagement pattern as the polling\n\t\t\t// success branch.\n\t\t\tprimeScrollUpsell();\n\t\t\tpollFoilCard();\n\t\t\treturn;\n\t\t}\n\t\tif (status === 'failed') return;\n\n\t\t// If already processing (e.g. page refresh), start polling\n\t\tif (status === 'processing') {\n\t\t\tstartPolling();\n\t\t\treturn;\n\t\t}\n\n\t\t// Pending → auto-start analysis. The previous \"ready for the moment\n\t\t// of truth?\" interstitial was dropped (RAT-112) — the user uploaded\n\t\t// a photo, they want the result, no extra click in between. We\n\t\t// don't gate on isOwner because freshly-signed-in users land here\n\t\t// with the gen still attached only by email (server links userId\n\t\t// inside the POST handler); if we waited for isOwner, that race\n\t\t// would leave Safari users stuck on the loader (RAT-122). The POST\n\t\t// handler does its own auth check — a session, or the anon-rate cookie\n\t\t// of the signed-out browser that started it — and returns 401 if\n\t\t// needed; notAuthenticated handles that edge.\n\t\tif (status === 'pending' && !notAuthenticated) {\n\t\t\tstartAnalysis();\n\t\t}\n\t});\n\n\tonDestroy(() => {\n\t\tif (pollInterval) clearInterval(pollInterval);\n\t\tif (factInterval) clearInterval(factInterval);\n\t\t// RAT-199: tear down the scroll listener if the user navigates away\n\t\t// before scrolling far enough to trigger the upsell.\n\t\tif (scrollUpsellListener) {\n\t\t\twindow.removeEventListener('scroll', scrollUpsellListener);\n\t\t\tscrollUpsellListener = null;\n\t\t}\n\t});\n\n\tlet linkCopied = $state(false);\n\n\t// Pre-rendered scorecard blob. Same pattern as FoilCardHero — render\n\t// off-screen whenever the inputs change, store the Blob, click handler\n\t// stays trivial. This is what keeps iOS Safari user-activation alive\n\t// through to navigator.share(): zero sync work between click and share.\n\t// Earlier attempts that did the canvas drawing inside the click handler\n\t// kept losing activation on iPhone, even with sync atob conversion (RAT-133).\n\tlet cardBlob = $state<Blob | null>(null);\n\n\tfunction drawScorecard(canvas: HTMLCanvasElement) {\n\t\tconst W = 800, H = 504; // credit card ratio\n\t\tcanvas.width = W;\n\t\tcanvas.height = H;\n\t\tconst ctx = canvas.getContext('2d');\n\t\tif (!ctx) return;\n\n\t\t// background gradient\n\t\tconst bg = ctx.createLinearGradient(0, 0, W, H);\n\t\tbg.addColorStop(0, '#1a1a1a');\n\t\tbg.addColorStop(0.4, '#111111');\n\t\tbg.addColorStop(1, '#0d0d0d');\n\t\tctx.fillStyle = bg;\n\t\troundRect(ctx, 0, 0, W, H, 24);\n\t\tctx.fill();\n\n\t\t// subtle border\n\t\tctx.strokeStyle = 'rgba(255,255,255,0.08)';\n\t\tctx.lineWidth = 1;\n\t\troundRect(ctx, 0.5, 0.5, W - 1, H - 1, 24);\n\t\tctx.stroke();\n\n\t\t// accent glow\n\t\tconst glow = ctx.createRadialGradient(W - 80, 60, 0, W - 80, 60, 200);\n\t\tglow.addColorStop(0, acRaw + '0A');\n\t\tglow.addColorStop(1, 'transparent');\n\t\tctx.fillStyle = glow;\n\t\tctx.fillRect(0, 0, W, H);\n\n\t\t// logo\n\t\tctx.font = 'bold 22px \"Space Grotesk\", system-ui, sans-serif';\n\t\tctx.fillStyle = 'rgba(255,255,255,0.8)';\n\t\tctx.fillText('ratemyd', 40, 56);\n\t\tctx.fillStyle = acRaw;\n\t\tctx.fillText('.', 40 + ctx.measureText('ratemyd').width, 56);\n\t\tctx.font = '600 10px \"Space Grotesk\", system-ui, sans-serif';\n\t\tctx.fillStyle = 'rgba(255,255,255,0.2)';\n\t\tctx.fillText(mode.toUpperCase(), 40 + ctx.measureText('ratemyd.').width + 12, 52);\n\n\t\t// chip\n\t\tconst chipGrad = ctx.createLinearGradient(W - 80, 32, W - 40, 62);\n\t\tchipGrad.addColorStop(0, '#c9a84c');\n\t\tchipGrad.addColorStop(0.5, '#f0d875');\n\t\tchipGrad.addColorStop(1, '#a68a3e');\n\t\tctx.globalAlpha = 0.7;\n\t\tctx.fillStyle = chipGrad;\n\t\troundRect(ctx, W - 80, 32, 40, 30, 5);\n\t\tctx.fill();\n\t\tctx.globalAlpha = 1;\n\n\t\t// score\n\t\tctx.font = 'bold 96px \"Space Grotesk\", system-ui, sans-serif';\n\t\tctx.fillStyle = 'rgba(255,255,255,0.9)';\n\t\tctx.letterSpacing = '4px';\n\t\tctx.fillText(String(score), 40, 260);\n\t\tconst scoreW = ctx.measureText(String(score)).width;\n\t\tctx.font = '500 28px \"Space Grotesk\", system-ui, sans-serif';\n\t\tctx.fillStyle = 'rgba(255,255,255,0.25)';\n\t\tctx.fillText('/10', 40 + scoreW + 4, 258);\n\n\t\t// rank + verified\n\t\tctx.font = '600 12px \"Space Grotesk\", system-ui, sans-serif';\n\t\tctx.fillStyle = 'rgba(34,197,94,0.7)';\n\t\tctx.fillText(t('{rank} globally', { rank }).toUpperCase(), 40, 290);\n\t\tconst rankW = ctx.measureText(t('{rank} globally', { rank }).toUpperCase()).width;\n\t\tctx.fillStyle = 'rgba(255,255,255,0.1)';\n\t\tctx.fillText(' · ', 40 + rankW, 290);\n\t\tctx.fillStyle = 'rgba(255,255,255,0.2)';\n\t\tctx.fillText(t('AI verified').toUpperCase(), 40 + rankW + 16, 290);\n\n\t\t// dimension dots row\n\t\tconst dotY = 340;\n\t\tdimensions.forEach((d, i) => {\n\t\t\tconst x = 40 + i * 120;\n\t\t\tctx.fillStyle = d.color;\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(x, dotY, 4, 0, Math.PI * 2);\n\t\t\tctx.fill();\n\t\t\tctx.font = 'bold 13px \"Space Grotesk\", system-ui, sans-serif';\n\t\t\tctx.fillStyle = d.color;\n\t\t\tctx.fillText(String(d.score), x + 10, dotY + 5);\n\t\t\tctx.font = '500 9px \"Space Grotesk\", system-ui, sans-serif';\n\t\t\tctx.fillStyle = 'rgba(255,255,255,0.3)';\n\t\t\tctx.fillText(t(d.name).toLowerCase(), x + 10, dotY + 20);\n\t\t});\n\n\t\t// cardholder\n\t\tctx.font = '500 8px \"Space Grotesk\", system-ui, sans-serif';\n\t\tctx.fillStyle = 'rgba(255,255,255,0.2)';\n\t\tctx.fillText(t('cardholder').toUpperCase(), 40, H - 44);\n\t\tctx.font = '600 15px \"Space Grotesk\", system-ui, sans-serif';\n\t\tctx.fillStyle = 'rgba(255,255,255,0.7)';\n\t\tctx.fillText((cardName || t('anonymous legend')).toUpperCase(), 40, H - 24);\n\n\t\t// valid\n\t\tctx.font = '500 8px \"Space Grotesk\", system-ui, sans-serif';\n\t\tctx.fillStyle = 'rgba(255,255,255,0.2)';\n\t\tctx.textAlign = 'right';\n\t\tctx.fillText(t('valid').toUpperCase(), W - 40, H - 44);\n\t\tctx.font = '600 15px \"Space Grotesk\", system-ui, sans-serif';\n\t\tctx.fillStyle = 'rgba(255,255,255,0.4)';\n\t\tctx.fillText('\\u221E', W - 40, H - 24);\n\t\tctx.textAlign = 'left';\n\t}\n\n\t// Re-render the scorecard blob whenever inputs that affect its content\n\t// change. The reads below are tracked by Svelte's $effect — when score,\n\t// mode, rank, cardName, or dimensions update, redraw and re-toBlob.\n\t$effect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\tif (status !== 'completed' || dimensions.length === 0) return;\n\t\t// Read deps so the effect re-runs on change:\n\t\tvoid score;\n\t\tvoid mode;\n\t\tvoid rank;\n\t\tvoid cardName;\n\t\tvoid dimensions;\n\n\t\tconst canvas = document.createElement('canvas');\n\t\tdrawScorecard(canvas);\n\t\tcanvas.toBlob((blob) => {\n\t\t\tif (blob) cardBlob = blob;\n\t\t}, 'image/png');\n\t});\n\n\tfunction downloadCard() {\n\t\tconst filename = `ratemyd-${score}-${mode}.png`;\n\t\tanalytics.trackScorecardDownload(score, mode);\n\n\t\tif (!cardBlob) return; // not rendered yet — user re-clicks once it is\n\n\t\tconst isTouch = window.matchMedia('(pointer: coarse)').matches;\n\t\tif (isTouch) {\n\t\t\tconst file = new File([cardBlob], filename, { type: 'image/png' });\n\t\t\tif (navigator.canShare?.({ files: [file] })) {\n\t\t\t\t// No await before share() — keeps iOS Safari user activation\n\t\t\t\t// alive. Errors handled in .catch (still inside the share's\n\t\t\t\t// own gesture context).\n\t\t\t\tnavigator\n\t\t\t\t\t.share({ files: [file] })\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tif ((err as Error)?.name === 'AbortError') return;\n\t\t\t\t\t\tif (cardBlob) triggerBlobDownload(cardBlob, filename);\n\t\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\ttriggerBlobDownload(cardBlob, filename);\n\t}\n\n\tfunction triggerBlobDownload(blob: Blob, filename: string) {\n\t\tconst url = URL.createObjectURL(blob);\n\t\tconst link = document.createElement('a');\n\t\tlink.href = url;\n\t\tlink.download = filename;\n\t\tdocument.body.appendChild(link);\n\t\tlink.click();\n\t\tlink.remove();\n\t\tsetTimeout(() => URL.revokeObjectURL(url), 0);\n\t}\n\n\tfunction roundRect(ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, r: number) {\n\t\tctx.beginPath();\n\t\tctx.moveTo(x + r, y);\n\t\tctx.lineTo(x + w - r, y);\n\t\tctx.quadraticCurveTo(x + w, y, x + w, y + r);\n\t\tctx.lineTo(x + w, y + h - r);\n\t\tctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n\t\tctx.lineTo(x + r, y + h);\n\t\tctx.quadraticCurveTo(x, y + h, x, y + h - r);\n\t\tctx.lineTo(x, y + r);\n\t\tctx.quadraticCurveTo(x, y, x + r, y);\n\t\tctx.closePath();\n\t}\n\n\t// Single unified share — uses native share sheet on mobile (and supported desktop\n\t// browsers like Safari/Chrome), falls back to clipboard copy. The native sheet\n\t// gives users every install app option (instagram, whatsapp, reddit, x, signal,\n\t// telegram, etc.) in one tap — far better than maintaining N platform buttons.\n\tlet shareInFlight = $state(false);\n\tasync function shareResult() {\n\t\tif (shareInFlight) return;\n\t\tshareInFlight = true;\n\t\tconst text =\n\t\t\tsubject !== 'dick'\n\t\t\t\t? isRoast\n\t\t\t\t\t? t('AI gave me a {score}/10. {rank} globally. analyzed across 6 dimensions by @ratemyd_app. send help.', { score, rank })\n\t\t\t\t\t: t('AI rated me {score}/10. {rank} globally. analyzed across 6 dimensions by @ratemyd_app. feeling powerful.', { score, rank })\n\t\t\t\t: isRoast\n\t\t\t\t\t? t('AI gave my dick a {score}/10. {rank} globally. analyzed across 6 dimensions by @ratemyd_app. send help.', { score, rank })\n\t\t\t\t\t: t('AI rated my dick {score}/10. {rank} globally. analyzed across 6 dimensions by @ratemyd_app. feeling powerful.', { score, rank });\n\t\t// Use the dedicated share page (public, OG-friendly) instead of the private result URL\n\t\tconst url = `${window.location.origin}/rate/result/${data.generation.id}/share`;\n\t\ttry {\n\t\t\tif (typeof navigator !== 'undefined' && typeof navigator.share === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tawait navigator.share({ title: 'ratemyd.', text, url });\n\t\t\t\t\tanalytics.trackShare('native', 'result');\n\t\t\t\t\treturn;\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// user cancelled OR navigator.share threw — fall through to copy\n\t\t\t\t\tif (err instanceof DOMException && err.name === 'AbortError') return;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Fallback: copy URL to clipboard\n\t\t\tawait navigator.clipboard.writeText(url);\n\t\t\tlinkCopied = true;\n\t\t\tanalytics.trackShare('clipboard', 'result');\n\t\t\tsetTimeout(() => { linkCopied = false; }, 2000);\n\t\t} finally {\n\t\t\tshareInFlight = false;\n\t\t}\n\t}\n\n\tlet savingShareImage = $state(false);\n\tasync function downloadShareImage() {\n\t\tif (savingShareImage) return;\n\t\tsavingShareImage = true;\n\t\ttry {\n\t\t\tconst res = await fetch(`/api/generation/${data.generation.id}/foil.png`);\n\t\t\tif (!res.ok) throw new Error('render failed');\n\t\t\tconst blob = await res.blob();\n\t\t\tconst url = URL.createObjectURL(blob);\n\t\t\tconst a = document.createElement('a');\n\t\t\ta.href = url;\n\t\t\ta.download = `ratemyd-${score}.png`;\n\t\t\tdocument.body.appendChild(a);\n\t\t\ta.click();\n\t\t\ta.remove();\n\t\t\tURL.revokeObjectURL(url);\n\t\t\tanalytics.trackShare('save_image', 'result');\n\t\t} catch (e) {\n\t\t\tconsole.error('share image download failed:', e);\n\t\t} finally {\n\t\t\tsavingShareImage = false;\n\t\t}\n\t}\n\n\t// share-to-earn (+100 tokens, manual review, once per user lifetime)\n\tlet claimOpen = $state(false);\n\tlet claimPlatform = $state<'reddit' | 'twitter'>('reddit');\n\tlet claimUrl = $state('');\n\tlet claimSubmitting = $state(false);\n\tlet claimError = $state('');\n\tlet claimSuccess = $state(false);\n\tconst shareReward = $derived(data.shareReward ?? 100);\n\tlet claimStatus = $state<'none' | 'pending' | 'approved' | 'rejected'>(data.shareClaimStatus ?? 'none');\n\tconst canSubmitClaim = $derived(claimStatus === 'none' || claimStatus === 'rejected');\n\n\tasync function submitClaim() {\n\t\tclaimError = '';\n\t\tconst trimmed = claimUrl.trim();\n\t\tif (!trimmed) {\n\t\t\tclaimError = t('paste your post URL');\n\t\t\treturn;\n\t\t}\n\t\tclaimSubmitting = true;\n\t\ttry {\n\t\t\tconst res = await fetch('/api/token-claim', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ platform: claimPlatform, postUrl: trimmed })\n\t\t\t});\n\t\t\tconst data = await res.json();\n\t\t\tif (!res.ok) {\n\t\t\t\tclaimError = data.error || t('submission failed');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclaimSuccess = true;\n\t\t\tclaimStatus = 'pending';\n\t\t\tclaimUrl = '';\n\t\t} catch {\n\t\t\tclaimError = t('network error, try again');\n\t\t} finally {\n\t\t\tclaimSubmitting = false;\n\t\t}\n\t}\n\n\tconst roastHeadlines = [\n\t\tmsg('you scored'), msg('the damage report.'), msg('brace yourself.'), msg('well then.'),\n\t\tmsg('oh no.'), msg('the truth hurts.'), msg('scientifically speaking,')\n\t];\n\tconst hypeHeadlines = [\n\t\tmsg('king shit.'), msg('built different.'), msg('certified elite.'), msg('main character.'),\n\t\tmsg('absolutely unreal.'), msg('god tier.'), msg('legend status.')\n\t].filter((h) => subject === 'dick' || h !== 'king shit.');\n\tconst heroLine = isRoast\n\t\t? roastHeadlines[Math.floor(Math.random() * roastHeadlines.length)]\n\t\t: hypeHeadlines[Math.floor(Math.random() * hypeHeadlines.length)];\n</script>\n\n<svelte:head>\n\t<title>{t('your results — ratemyd.')}</title>\n\t<meta name=\"description\" content={t('AI-rated across 6 dimensions. See your score, breakdown, and tips.')} />\n\t<meta name=\"robots\" content=\"noindex\" />\n</svelte:head>\n\n<!-- ============ SESSION EXPIRED FALLBACK ============ -->\n{#if status === 'pending' && notAuthenticated}\n<section class=\"relative flex min-h-[85vh] flex-col items-center justify-center overflow-hidden px-5 text-center\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\t<div class=\"pointer-events-none absolute top-1/2 left-1/2 hidden h-[600px] w-[600px] -translate-x-1/2 -translate-y-1/2 rounded-full blur-[180px] md:block {orbColor}\"></div>\n\n\t<div class=\"relative flex flex-col items-center\">\n\t\t{#if data.user}\n\t\t\t<h2 class=\"font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t\t\t{t('session')} <span class=\"text-coral\">{t('expired.')}</span>\n\t\t\t</h2>\n\t\t\t<p class=\"mx-auto mt-4 max-w-sm text-sm leading-relaxed text-muted\">\n\t\t\t\t{t(\"your sign-in session couldn't be verified. this sometimes happens on mobile. sign in again and we'll get you right back here.\")}\n\t\t\t</p>\n\t\t{:else}\n\t\t\t<!-- Signed out, and this browser didn't start the rating (anon-rate.ts):\n\t\t\t\t opened somewhere else, or its cookies were cleared. Nothing here can\n\t\t\t\t run it, so start again. -->\n\t\t\t<h2 class=\"font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t\t\t{t('we lost')} <span class=\"text-coral\">{t('this one.')}</span>\n\t\t\t</h2>\n\t\t\t<p class=\"mx-auto mt-4 max-w-sm text-sm leading-relaxed text-muted\">\n\t\t\t\t{t('this rating was started in another browser, or its cookies were cleared. upload your photo again — it only takes a second.')}\n\t\t\t</p>\n\t\t{/if}\n\t\t<a\n\t\t\thref=\"/rate\"\n\t\t\tclass=\"mt-8 inline-flex rounded-xl bg-coral px-10 py-4 font-display text-base font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t\t>\n\t\t\t{data.user ? t('sign in again') : t('start over')}\n\t\t</a>\n\t</div>\n</section>\n\n{:else if status === 'pending' || status === 'processing'}\n<!-- ============ LOADING STATE ============ -->\n<section class=\"relative flex min-h-screen flex-col items-center justify-start overflow-hidden px-5 pt-28 pb-[480px] text-center sm:min-h-[90vh] sm:justify-center sm:pt-10 sm:pb-10\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\t<div class=\"pointer-events-none absolute top-1/2 left-1/2 hidden h-[600px] w-[600px] -translate-x-1/2 -translate-y-1/2 rounded-full blur-[180px] md:block {orbColor}\"></div>\n\n\t<div class=\"relative flex flex-col items-center\">\n\t\t<AnalyzingProgress done={analysisDone} colorClass={isRoast ? 'text-coral' : 'text-yellow'} size={72} />\n\t\t<h2 class=\"mt-6 font-display text-[clamp(1.6rem,5vw,2.5rem)] font-bold leading-[1] tracking-tighter sm:mt-10\">\n\t\t\t{#if isRoast}\n\t\t\t\t{t('preparing your')}<br /><span class=\"text-coral\">{t('emotional damage.')}</span>\n\t\t\t{:else}\n\t\t\t\t{t('building your')}<br /><span class=\"text-yellow\">{t('highlight reel.')}</span>\n\t\t\t{/if}\n\t\t</h2>\n\n\t\t<div class=\"mt-4 h-5\">\n\t\t\t{#key currentFact}\n\t\t\t\t<p class=\"text-sm text-muted fade-text\">\n\t\t\t\t\t{currentFact < facts.length\n\t\t\t\t\t\t? t(facts[currentFact], { n: RATED_COUNT_SHORT })\n\t\t\t\t\t\t: t('almost there...')}\n\t\t\t\t</p>\n\t\t\t{/key}\n\t\t</div>\n\n\t\t<p class=\"mt-6 text-xs text-muted/30\">{t(\"this usually takes about 10 seconds. don't close this tab.\")}</p>\n\t</div>\n</section>\n\n{:else if status === 'failed' && errorMessage?.startsWith('MODERATION_BLOCKED:')}\n<!-- ============ CONTENT POLICY BLOCK (RAT-236) ============ -->\n<section class=\"relative flex min-h-[70vh] flex-col items-center justify-center overflow-hidden px-5 text-center\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\n\t<svg class=\"h-16 w-16 text-coral/40\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\"/>\n\t</svg>\n\n\t<h2 class=\"mt-6 font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t{t(\"can't\")} <span class=\"text-coral\">{t('process this.')}</span>\n\t</h2>\n\t<p class=\"mt-4 max-w-md text-base leading-relaxed text-muted\">\n\t\t{t(\"Sorry — this image doesn't comply with our content policy. Repeated violations may result in account suspension.\")}\n\t</p>\n\t<p class=\"mt-3 max-w-md text-xs text-muted/60\">\n\t\t{t('Read our')} <a href=\"/terms\" class=\"underline hover:text-text\">{t('Terms')}</a> {t('and')} <a href=\"/privacy\" class=\"underline hover:text-text\">{t('Privacy Policy')}</a> {t(\"for what's allowed.\")}\n\t</p>\n\n\t<a\n\t\thref=\"/rate\"\n\t\tclass=\"mt-8 inline-flex cursor-pointer items-center gap-2 rounded-xl bg-coral px-7 py-3.5 font-display text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t>\n\t\t{t('try a different photo')}\n\t</a>\n</section>\n\n{:else if status === 'failed' && errorMessage?.startsWith('PROVIDER_DOWN:')}\n<!-- ============ AI PROVIDER OUTAGE (RAT-462) ============ -->\n<!-- The AI provider rejected the call at the account level (out of credit /\n     over spending limit, or a bad key). That's on us, not the user's photo —\n     show honest \"our AI is down\" copy. We deliberately do NOT render\n     errorMessage here: the vendor's raw 403 body embeds an internal team UUID,\n     and it's already been remapped to a stable internal code server-side. -->\n<section class=\"relative flex min-h-[70vh] flex-col items-center justify-center overflow-hidden px-5 text-center\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\n\t<svg class=\"h-16 w-16 text-muted/30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t<path d=\"M12 2v4\"/><path d=\"m16.2 7.8 2.9-2.9\"/><path d=\"M18 12h4\"/><path d=\"m16.2 16.2 2.9 2.9\"/><path d=\"M12 18v4\"/><path d=\"m4.9 19.1 2.9-2.9\"/><path d=\"M2 12h4\"/><path d=\"m4.9 4.9 2.9 2.9\"/>\n\t</svg>\n\n\t<h2 class=\"mt-6 font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t{t('our AI is')} <span class=\"text-coral\">{t('down.')}</span>\n\t</h2>\n\t<p class=\"mt-3 max-w-sm text-sm leading-relaxed text-muted\">\n\t\t{t(\"this one's on us — the AI is temporarily unavailable, not your photo. we're on it. give it a few minutes and try again.\")}\n\t</p>\n\n\t<a\n\t\thref=\"/rate\"\n\t\tclass=\"mt-8 inline-flex cursor-pointer items-center gap-2 rounded-xl bg-coral px-7 py-3.5 font-display text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t>\n\t\t{t('try again')}\n\t</a>\n</section>\n\n{:else if status === 'failed' && timedOut}\n<!-- ============ CLIENT-SIDE TIMEOUT (RAT-462) ============ -->\n<!-- The poll hit its wall-clock deadline with the row still `processing`. The\n     analyze function was almost certainly killed / OOM'd before it could write\n     a terminal status, so reloading would just re-poll the same stuck row —\n     send the user back to a fresh start instead. -->\n<section class=\"relative flex min-h-[70vh] flex-col items-center justify-center overflow-hidden px-5 text-center\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\n\t<svg class=\"h-16 w-16 text-muted/30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t<circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"12 6 12 12 16 14\"/>\n\t</svg>\n\n\t<h2 class=\"mt-6 font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t{t('this took')} <span class=\"text-coral\">{t('too long.')}</span>\n\t</h2>\n\t<p class=\"mt-3 max-w-sm text-sm leading-relaxed text-muted\">\n\t\t{t(\"the analysis didn't come back in time — our end may be overloaded. nothing wrong with your photo. start a fresh one and we'll try again.\")}\n\t</p>\n\n\t<a\n\t\thref=\"/rate\"\n\t\tclass=\"mt-8 inline-flex cursor-pointer items-center gap-2 rounded-xl bg-coral px-7 py-3.5 font-display text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t>\n\t\t{t('try again')}\n\t</a>\n</section>\n\n{:else if status === 'failed' && errorMessage?.startsWith('NO_DICK:')}\n<!-- ============ NO DICK FOUND ============ -->\n<section class=\"relative flex min-h-[70vh] flex-col items-center justify-center overflow-hidden px-5 text-center\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\n\t<span class=\"text-6xl\">🔍</span>\n\n\t{#if subject === 'dick'}\n\t<h2 class=\"mt-6 font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t{t(\"where's the\")} <span class=\"text-coral\">{t('d*ck?')}</span>\n\t</h2>\n\t<p class=\"mt-4 max-w-sm text-base leading-relaxed text-muted\">\n\t\t{t(errorMessage.replace('NO_DICK:', ''))}\n\t</p>\n\t<p class=\"mt-2 text-xs text-muted/40\">\n\t\t{t(\"we need an actual d*ck pic to rate. we don't make the rules. (we do, actually.)\")}\n\t</p>\n\n\t<a\n\t\thref=\"/rate\"\n\t\tclass=\"mt-8 inline-flex cursor-pointer items-center gap-2 rounded-xl bg-coral px-7 py-3.5 font-display text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t>\n\t\t{t('try again (with a d*ck this time)')}\n\t</a>\n\t{:else}\n\t<!-- Epic R: the AI's own rejection says what it saw instead -->\n\t<h2 class=\"mt-6 font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t{t('nothing')} <span class=\"text-coral\">{t('to rate here.')}</span>\n\t</h2>\n\t<p class=\"mt-4 max-w-sm text-base leading-relaxed text-muted\">\n\t\t{t(errorMessage.replace('NO_DICK:', ''))}\n\t</p>\n\n\t<a\n\t\thref={RATE_SUBJECT_PATH[subject]}\n\t\tclass=\"mt-8 inline-flex cursor-pointer items-center gap-2 rounded-xl bg-coral px-7 py-3.5 font-display text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t>\n\t\t{t('try another photo')}\n\t</a>\n\t{/if}\n</section>\n\n{:else if status === 'failed' && stalledByNetwork}\n<!-- ============ NETWORK-STALL STATE ============ -->\n<!-- The request to start the analysis never landed. We don't know that the\n     analysis failed — only that we lost the connection while kicking it off,\n     and the poll was torn down with it. Reloading re-reads the real status\n     from the server: completed → the result, processing → the poll resumes,\n     pending → the analysis is kicked again. Sending them to /rate instead\n     would bounce a non-subscribed user into the already-used upsell. -->\n<section class=\"relative flex min-h-[70vh] flex-col items-center justify-center overflow-hidden px-5 text-center\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\n\t<svg class=\"h-16 w-16 text-muted/30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t<path d=\"M12 20h.01\"/><path d=\"M8.5 16.4a5 5 0 0 1 7 0\"/><path d=\"M5 12.9a10 10 0 0 1 14 0\"/><line x1=\"2\" y1=\"2\" x2=\"22\" y2=\"22\"/>\n\t</svg>\n\n\t<h2 class=\"mt-6 font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t{t('connection')} <span class=\"text-coral\">{t('dropped.')}</span>\n\t</h2>\n\t<p class=\"mt-3 max-w-sm text-sm leading-relaxed text-muted\">\n\t\t{t('we lost you mid-analysis. your rating is probably still cooking — reload to pick it back up.')}\n\t</p>\n\n\t<button\n\t\ttype=\"button\"\n\t\tonclick={() => window.location.reload()}\n\t\tclass=\"mt-8 inline-flex cursor-pointer items-center gap-2 rounded-xl bg-coral px-7 py-3.5 font-display text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t>\n\t\t{t('reload and check')}\n\t</button>\n</section>\n\n{:else if status === 'failed'}\n<!-- ============ ERROR STATE ============ -->\n<section class=\"relative flex min-h-[70vh] flex-col items-center justify-center overflow-hidden px-5 text-center\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\n\t<svg class=\"h-16 w-16 text-coral/30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t<circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"/><line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"/>\n\t</svg>\n\n\t<h2 class=\"mt-6 font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t{t('analysis')} <span class=\"text-coral\">{t('failed.')}</span>\n\t</h2>\n\t<p class=\"mt-3 max-w-sm text-sm leading-relaxed text-muted\">\n\t\t{t(userFacingError(errorMessage))}\n\t</p>\n\n\t<a\n\t\thref=\"/rate\"\n\t\tclass=\"mt-8 inline-flex cursor-pointer items-center gap-2 rounded-xl bg-coral px-7 py-3.5 font-display text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t>\n\t\t{t('try again')}\n\t</a>\n</section>\n\n{:else if nuked}\n<!-- ============ NUKED STATE ============ -->\n<section class=\"relative flex min-h-[70vh] flex-col items-center justify-center overflow-hidden px-5 text-center\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\n\t<svg class=\"h-16 w-16 text-coral/30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t<path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/><path d=\"m19 6-.867 12.142A2 2 0 0 1 16.138 20H7.862a2 2 0 0 1-1.995-1.858L5 6\"/><line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"/><line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"/>\n\t</svg>\n\n\t<h2 class=\"mt-6 font-display text-[clamp(1.8rem,5vw,3rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t{t('results')} <span class=\"text-coral\">{t('nuked.')}</span>\n\t</h2>\n\t<p class=\"mt-3 max-w-sm text-sm leading-relaxed text-muted\">\n\t\t{t('gone. vanished. like it never happened. your dignity has been partially restored.')}\n\t</p>\n\n\t<a\n\t\thref=\"/rate\"\n\t\tclass=\"mt-8 inline-flex cursor-pointer items-center gap-2 rounded-xl bg-coral px-7 py-3.5 font-display text-sm font-semibold text-white no-underline transition-all hover:bg-coral-dark\"\n\t>\n\t\t{t('try again (braver this time)')}\n\t</a>\n</section>\n\n{:else if data.signupGate}\n<!-- ============ SIGNED-OUT RATING — blurred until claimed (anon-rate.ts) ============ -->\n<SignupGateResult {mode} variant={gateVariant} onSignUp={signUpFromGate} onGoPro={goProFromGate} />\n\n{:else}\n<!-- ============ RESULTS ============ -->\n\n<!-- ============ HERO ============ -->\n<section class=\"relative overflow-hidden border-b border-border px-5 pt-28 pb-16 md:pt-36 md:pb-24\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\t<div class=\"pointer-events-none absolute -top-40 -right-40 hidden h-[500px] w-[500px] rounded-full blur-[150px] md:block {acGlow}\"></div>\n\n\t<div class=\"relative z-10 mx-auto max-w-5xl\">\n\t\t<div class=\"mb-8 flex items-center gap-2\">\n\t\t\t<div class=\"h-2.5 w-2.5 rounded-full {acBg}\"></div>\n\t\t\t<span class=\"text-xs font-semibold uppercase tracking-[0.12em] {ac}\">{isRoast ? t('roast mode') : t('hype mode')}</span>\n\t\t</div>\n\n\t\t<div class=\"flex flex-col items-center gap-10 md:flex-row md:items-center md:justify-between md:gap-16\">\n\t\t\t<div class=\"flex-1 text-center md:text-left\">\n\t\t\t\t<h1 class=\"font-display text-[clamp(2.8rem,8vw,6rem)] font-bold leading-[0.85] tracking-tighter\">\n\t\t\t\t\t{#if isRoast}\n\t\t\t\t\t\t<span class=\"text-text\">{t(heroLine)}</span><br />\n\t\t\t\t\t\t<span class={ac}>{score}<span class=\"text-[0.4em] text-muted\">/10</span></span>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<span class={ac}>{score}<span class=\"text-[0.4em] text-muted\">/10</span></span><br />\n\t\t\t\t\t\t<span class=\"text-text\">{t(heroLine)}</span>\n\t\t\t\t\t{/if}\n\t\t\t\t</h1>\n\n\t\t\t\t<p class=\"mt-5 text-sm leading-relaxed text-muted md:mt-6 md:text-base\">\n\t\t\t\t\t{#if isRoast}\n\t\t\t\t\t\t{t(\"analyzed in seconds. we've seen worse. barely.\")}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{t('analyzed in seconds. and honestly? impressed.')}\n\t\t\t\t\t{/if}\n\t\t\t\t</p>\n\n\t\t\t\t{#if isLocked && isOwner}\n\t\t\t\t\t<div class=\"mt-6 flex flex-col items-start gap-2\">\n\t\t\t\t\t\t{#if subscribed}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonclick={unlockBreakdown}\n\t\t\t\t\t\t\t\tdisabled={unlocking}\n\t\t\t\t\t\t\t\tclass=\"inline-flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-6 py-3 font-display text-[14px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 sm:w-auto {isRoast\n\t\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{unlocking ? t('unlocking…') : t('unlock — included with unlimited →')}\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<!-- Single-unlock retired: Premium is THE unlock path (one CTA,\n\t\t\t\t\t\t\t\tno $1.99 decision fork). -->\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonclick={clickGoPro}\n\t\t\t\t\t\t\t\tdisabled={proLoading}\n\t\t\t\t\t\t\t\tclass=\"inline-flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-6 py-3 font-display text-[14px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 sm:w-auto {isRoast\n\t\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{proLoading\n\t\t\t\t\t\t\t\t\t? t('redirecting…')\n\t\t\t\t\t\t\t\t\t: t('see the full carnage — {price}/mo →', { price: PRO_MONTHLY_LABEL })}\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{/if}\n\t\t\t</div>\n\n\t\t\t<div class=\"shrink-0\">\n\t\t\t\t<ScoreGauge {score} {mode} size={220} />\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"mt-10 grid grid-cols-3 border-t border-border pt-6 md:mt-12 md:pt-8\">\n\t\t\t<div class=\"text-center md:text-left\">\n\t\t\t\t<span class=\"block font-display text-xl font-bold text-green md:text-2xl\">{rank}</span>\n\t\t\t\t<span class=\"text-[11px] text-muted\">{t('globally')}</span>\n\t\t\t</div>\n\t\t\t<div class=\"text-center\">\n\t\t\t\t<span class=\"block font-display text-xl font-bold {ac} md:text-2xl\">{potential}</span>\n\t\t\t\t<span class=\"text-[11px] text-muted\">{t('potential score')}</span>\n\t\t\t</div>\n\t\t\t<div class=\"text-center md:text-right\">\n\t\t\t\t<span class=\"block font-display text-xl font-bold text-green md:text-2xl\">+{pointsLeft}</span>\n\t\t\t\t<span class=\"text-[11px] text-muted\">{t('pts on the table')}</span>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</section>\n\n<!-- ============ NEXT STEP ============ -->\n<!-- RAT-508: what fits the score — a duel for a high one, a real rater's second\n\t opinion for a mid or low one — pinned above the bottom nav on a phone. It\n\t won its test against the fixed duel ▸ arena ▸ feed block (468972: a paid\n\t product reached 53.9% → 61.2%) and replaced it (RAT-555). -->\n{#if isOwner && subject === 'dick'}\n\t<NextStep\n\t\ttier={scoreTier}\n\t\tratersOnline={data.ratersOnline}\n\t\t{startingDuel}\n\t\tonduel={startDuelOneClick}\n\t\tgenerationId={gen.id}\n\t/>\n{:else if isOwner && subject !== 'dick'}\n\t<SubjectNextStep {subject} />\n{/if}\n\n<!-- ============ FOIL CARD (RAT-16) ============ -->\n{#if data.foilCard?.pngReady}\n\t<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t\t<div class=\"mx-auto max-w-5xl\">\n\t\t\t<div class=\"flex flex-col gap-10 md:flex-row md:items-center md:gap-14\">\n\t\t\t\t<div class=\"flex-1\">\n\t\t\t\t\t<h2 class=\"font-display text-[clamp(2rem,5vw,3.5rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t\t\t\t\t{#if scoreTier === 'low' && isRoast}\n\t\t\t\t\t\t\t{t('the L,')}<br />\n\t\t\t\t\t\t\t<span class=\"text-muted\">{t('canonized in foil.')}</span>\n\t\t\t\t\t\t{:else if scoreTier === 'low'}\n\t\t\t\t\t\t\t{t('the upside,')}<br />\n\t\t\t\t\t\t\t<span class=\"text-muted\">{t('pressed onto cardstock.')}</span>\n\t\t\t\t\t\t{:else if scoreTier === 'high' && isRoast}\n\t\t\t\t\t\t\t{t('regrettably yours,')}<br />\n\t\t\t\t\t\t\t<span class=\"text-muted\">{t('officially in foil.')}</span>\n\t\t\t\t\t\t{:else if scoreTier === 'high'}\n\t\t\t\t\t\t\t{t('the apex,')}<br />\n\t\t\t\t\t\t\t<span class=\"text-muted\">{t('now a trading card.')}</span>\n\t\t\t\t\t\t{:else if isRoast}\n\t\t\t\t\t\t\t{t('exhibit A,')}<br />\n\t\t\t\t\t\t\t<span class=\"text-muted\">{t('now collectible.')}</span>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{t('your receipt,')}<br />\n\t\t\t\t\t\t\t<span class=\"text-muted\">{t('made tradable.')}</span>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</h2>\n\t\t\t\t\t<p class=\"mt-3 text-sm leading-relaxed text-muted md:text-base\">\n\t\t\t\t\t\t{t('AI-derived holographic trading card. score, archetype, combat stats baked in.')}\n\t\t\t\t\t\t{#if isRoast}\n\t\t\t\t\t\t\t{t('tap to flip, download to share — one card per generation, deterministic, no take-backs.')}\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{t('tap to flip, download to flex — one card per generation, deterministic, earned not minted.')}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t<!-- meta strip — archetype + rarity + serial -->\n\t\t\t\t\t<div class=\"mt-6 flex flex-wrap items-center gap-x-3 gap-y-1 font-display text-[10px] font-medium uppercase tracking-[0.18em] text-muted/60\">\n\t\t\t\t\t\t<span class=\"text-text/80\">{data.foilCard.displayName}</span>\n\t\t\t\t\t\t<span class=\"text-muted/40\">·</span>\n\t\t\t\t\t\t<span class={isRoast ? 'text-coral/85' : 'text-yellow/85'}>{data.foilCard.rarity}</span>\n\t\t\t\t\t\t<span class=\"text-muted/40\">·</span>\n\t\t\t\t\t\t<span>#{String(data.foilCard.cardNumber).padStart(3, '0')} / 420</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<p class=\"mt-4 text-[11px] leading-relaxed text-muted/50\">\n\t\t\t\t\t\t{t('stats power card-vs-card duels (soon™). same gen always produces the same card — no rerolls.')}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- right: card — second on mobile, right on desktop -->\n\t\t\t\t<div class=\"flex flex-1 items-center justify-center\">\n\t\t\t\t\t<FoilCardHero\n\t\t\t\t\t\tgenerationId={gen.id}\n\t\t\t\t\t\t{mode}\n\t\t\t\t\t\tdisplayName={data.foilCard.displayName}\n\t\t\t\t\t\trarity={data.foilCard.rarity}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</section>\n{/if}\n\n<!-- ============ FOIL CARD — minting (RAT-455: decoupled render) ============ -->\n{#if !data.foilCard?.pngReady && hasSavedPhoto && !foilPollDone}\n<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<div class=\"flex flex-col items-center gap-5 py-8 text-center\">\n\t\t\t<div class=\"h-11 w-11 animate-spin rounded-full border-4 border-white/10 {isRoast ? 'border-t-coral' : 'border-t-yellow'}\"></div>\n\t\t\t<div>\n\t\t\t\t<h2 class=\"font-display text-[clamp(1.4rem,4vw,2rem)] font-bold tracking-tighter\">\n\t\t\t\t\t{t('minting your')} <span class={ac}>{t('foil card')}</span>…\n\t\t\t\t</h2>\n\t\t\t\t<p class=\"mt-2 text-sm text-muted\">{t('your holographic trading card is rendering. hang tight.')}</p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</section>\n{/if}\n\n<!-- ============ SHARE CARD (fallback — no-photo gens, or foil render gave up) ============ -->\n{#if !data.foilCard?.pngReady && (!hasSavedPhoto || foilPollDone)}\n<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<div class=\"flex flex-col gap-10 md:flex-row md:items-center md:gap-14\">\n\t\t\t<div class=\"flex-1\">\n\t\t\t\t<h2 class=\"font-display text-[clamp(2rem,5vw,3.5rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t\t\t\t{#if scoreTier === 'low'}\n\t\t\t\t\t\t{t('the carnage,')}<br />\n\t\t\t\t\t\t<span class=\"text-muted\">{t('framed for posterity.')}</span>\n\t\t\t\t\t{:else if scoreTier === 'high'}\n\t\t\t\t\t\t{t('your')} <span class={ac}>{score}/10</span>.<br />\n\t\t\t\t\t\t<span class=\"text-muted\">{t(\"show, don't tell.\")}</span>\n\t\t\t\t\t{:else if isRoast}\n\t\t\t\t\t\t{t('your proof.')}<br />\n\t\t\t\t\t\t<span class=\"text-muted\">{t(\"show her. she'll believe you.\")}</span>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{t('your receipt.')}<br />\n\t\t\t\t\t\t<span class=\"text-muted\">{t(\"send it. they'll know.\")}</span>\n\t\t\t\t\t{/if}\n\t\t\t\t</h2>\n\t\t\t\t<p class=\"mt-3 text-sm leading-relaxed text-muted md:text-base\">\n\t\t\t\t\t{#if scoreTier === 'low'}\n\t\t\t\t\t\t{t('AI-certified score card. no photo, just the cold hard numbers. screenshot it, post it ironically, get the last laugh.')}\n\t\t\t\t\t{:else if isRoast}\n\t\t\t\t\t\t{t('AI-certified score card. no photo, just the cold hard numbers.')}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{t('AI-verified flex card. screenshot it, airdrop it, frame it.')}\n\t\t\t\t\t{/if}\n\t\t\t\t</p>\n\n\t\t\t\t<div class=\"mt-6 flex flex-col gap-1.5\">\n\t\t\t\t\t<label for=\"card-name\" class=\"text-[10px] font-medium uppercase tracking-[0.15em] text-muted/50\">{t('cardholder name')}</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid=\"card-name\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tbind:value={cardName}\n\t\t\t\t\t\tplaceholder={t('anonymous legend')}\n\t\t\t\t\t\tmaxlength=\"24\"\n\t\t\t\t\t\tclass=\"w-full max-w-[280px] rounded-lg border border-border bg-transparent px-3 py-2 font-display text-sm font-medium uppercase tracking-wider text-text placeholder:normal-case placeholder:tracking-normal placeholder:text-muted/30 focus:border-muted focus:outline-none\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"mt-6 flex flex-wrap gap-2\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl {acBg} px-5 py-2.5 font-display text-[13px] font-semibold {isRoast ? 'text-white' : 'text-bg'} transition-all hover:opacity-80\"\n\t\t\t\t\t\tonclick={downloadCard}\n\t\t\t\t\t>\n\t\t\t\t\t\t<svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7,10 12,15 17,10\"/><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"/></svg>\n\t\t\t\t\t\t{t('download card')}\n\t\t\t\t\t</button>\n\t\t\t\t\t<!-- share image button temporarily hidden during prod slowness investigation -->\n\t\t\t\t\t<!-- <button\n\t\t\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl border border-border px-5 py-2.5 font-display text-[13px] font-semibold text-text transition-all hover:border-muted disabled:cursor-wait disabled:opacity-60\"\n\t\t\t\t\t\tonclick={downloadShareImage}\n\t\t\t\t\t\tdisabled={savingShareImage}\n\t\t\t\t\t>\n\t\t\t\t\t\t{#if savingShareImage}\n\t\t\t\t\t\t\t<svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"animate-spin\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\"/></svg>\n\t\t\t\t\t\t\trendering…\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/></svg>\n\t\t\t\t\t\t\tshare image\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</button> -->\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl border border-text/15 bg-text/[.04] px-5 py-2.5 font-display text-[13px] font-semibold text-text transition-all hover:border-text/30 hover:bg-text/[.08] disabled:opacity-60\"\n\t\t\t\t\t\tonclick={shareResult}\n\t\t\t\t\t\tdisabled={shareInFlight}\n\t\t\t\t\t>\n\t\t\t\t\t\t{#if linkCopied}\n\t\t\t\t\t\t\t<svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"/></svg>\n\t\t\t\t\t\t\t{t('copied — paste anywhere')}\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t\t\t\t<circle cx=\"18\" cy=\"5\" r=\"3\"/>\n\t\t\t\t\t\t\t\t<circle cx=\"6\" cy=\"12\" r=\"3\"/>\n\t\t\t\t\t\t\t\t<circle cx=\"18\" cy=\"19\" r=\"3\"/>\n\t\t\t\t\t\t\t\t<line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"/>\n\t\t\t\t\t\t\t\t<line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t{t('share')}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\n\t\t\t</div>\n\n\t\t\t<div class=\"w-full shrink-0 md:w-[420px]\">\n\t\t\t\t<div class=\"metal-card relative overflow-hidden rounded-2xl\">\n\t\t\t\t\t<div class=\"absolute -inset-px rounded-2xl\" style=\"background: linear-gradient(145deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0.03) 30%, rgba(255,255,255,0) 50%, rgba(255,255,255,0.05) 80%, rgba(255,255,255,0.12) 100%)\"></div>\n\n\t\t\t\t\t<div class=\"relative overflow-hidden rounded-2xl\" style=\"background: linear-gradient(145deg, #1a1a1a 0%, #111 40%, #0d0d0d 100%); aspect-ratio: 1.586 / 1;\">\n\t\t\t\t\t\t<div class=\"pointer-events-none absolute inset-0 opacity-[0.03]\" style=\"background: linear-gradient(105deg, transparent 30%, rgba(255,255,255,0.4) 45%, transparent 55%)\"></div>\n\t\t\t\t\t\t<div class=\"pointer-events-none absolute -top-16 -right-16 hidden h-[200px] w-[200px] rounded-full blur-[80px] md:block\" style=\"background: {acRaw}06\"></div>\n\n\t\t\t\t\t\t<div class=\"relative flex h-full flex-col justify-between p-5 md:p-6\">\n\t\t\t\t\t\t\t<div class=\"flex items-start justify-between\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<span class=\"font-display text-base font-bold tracking-tight text-white/80\">ratemyd<span style=\"color: {acRaw}\">.</span></span>\n\t\t\t\t\t\t\t\t\t<span class=\"ml-2 text-[8px] font-semibold uppercase tracking-widest text-white/20\">{mode}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"h-7 w-9 rounded-md\" style=\"background: linear-gradient(135deg, #c9a84c 0%, #f0d875 25%, #c9a84c 50%, #a68a3e 75%, #c9a84c 100%); opacity: 0.7\"></div>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<div class=\"flex items-baseline gap-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"font-display text-[3rem] font-bold leading-none tracking-[0.08em] text-white/90 md:text-[3.5rem]\">{score}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"font-display text-base font-medium tracking-wider text-white/25\">/10</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"mt-1 flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"text-[9px] font-semibold uppercase tracking-widest text-green/70\">{t('{rank} globally', { rank })}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"text-white/10\">&middot;</span>\n\t\t\t\t\t\t\t\t\t<span class=\"text-[9px] font-semibold uppercase tracking-widest text-white/20\">{t('AI verified')}</span>\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<div class=\"flex items-end justify-between\">\n\t\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t\t<p class=\"text-[7px] font-medium uppercase tracking-[0.2em] text-white/20\">{t('cardholder')}</p>\n\t\t\t\t\t\t\t\t\t<p class=\"font-display text-xs font-semibold uppercase tracking-wider text-white/70 md:text-sm\">{cardName || t('anonymous legend').toUpperCase()}</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"text-right\">\n\t\t\t\t\t\t\t\t\t<p class=\"text-[7px] font-medium uppercase tracking-[0.2em] text-white/20\">{t('valid')}</p>\n\t\t\t\t\t\t\t\t\t<p class=\"font-display text-xs font-semibold tracking-wider text-white/40\">&infin;</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</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"mt-3 grid grid-cols-3 gap-1.5 md:grid-cols-6\">\n\t\t\t\t\t{#each dimensions as dim (dim.name)}\n\t\t\t\t\t\t<div class=\"flex items-center justify-center gap-1 rounded-md border border-border/50 py-1\">\n\t\t\t\t\t\t\t<div class=\"h-1 w-1 shrink-0 rounded-full\" style=\"background: {dim.color}\"></div>\n\t\t\t\t\t\t\t<span class=\"font-display text-[9px] font-bold\" style=\"color: {dim.color}\">{dim.score}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</section>\n{/if}\n\n<!-- ============ STAR MATCH ============ -->\n{#if !isLocked && starMatch}\n<section class=\"relative overflow-hidden border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\t<div class=\"pointer-events-none absolute -top-20 -right-20 hidden h-[400px] w-[400px] rounded-full blur-[120px] md:block {acGlow}\"></div>\n\t<div class=\"relative z-10 mx-auto max-w-5xl\">\n\t\t<StarMatch\n\t\t\tstar={starMatch.star}\n\t\t\tsimilarity={starMatch.similarity}\n\t\t\t{mode}\n\t\t\t{score}\n\t\t\tclosestDimensions={starMatch.closestDimensions}\n\t\t\tfurthestDimension={starMatch.furthestDimension}\n\t\t\tshowShareButtons={false}\n\t\t/>\n\t</div>\n</section>\n{:else if isLocked && starMatch}\n<!-- STAR MATCH LOCKED — 1:1 copy of StarMatch component, data redacted -->\n<section class=\"relative overflow-hidden border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\t<div class=\"pointer-events-none absolute -top-20 -right-20 hidden h-[400px] w-[400px] rounded-full blur-[120px] md:block {acGlow}\"></div>\n\t<div class=\"relative z-10 mx-auto max-w-5xl\">\n\t\t<h2 class=\"font-display text-[clamp(2rem,5vw,3.5rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t\t{t('your pornstar')}<br />\n\t\t\t<span class=\"text-muted\">{isRoast ? t('doppelgänger.') : t('energy match.')}</span>\n\t\t</h2>\n\t\t<p class=\"mt-3 max-w-md text-sm leading-relaxed text-muted md:mt-4 md:text-base\">\n\t\t\t{#if isRoast}\n\t\t\t\t{t('based on your 6-dimension profile, the AI matched you to the star you most resemble. cope.')}\n\t\t\t{:else}\n\t\t\t\t{t(\"based on your 6-dimension profile, here's the star whose energy you channel.\")}\n\t\t\t{/if}\n\t\t</p>\n\n\t\t<!-- match card -->\n\t\t<div class=\"mt-8 flex flex-col gap-6 sm:flex-row sm:items-start sm:gap-8\">\n\t\t\t<!-- avatar + name -->\n\t\t\t<div class=\"flex items-center gap-5 sm:flex-col sm:items-center sm:gap-3 sm:text-center\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"relative h-24 w-24 shrink-0 overflow-hidden rounded-full sm:h-28 sm:w-28\"\n\t\t\t\t\tstyle=\"box-shadow: 0 0 0 1px rgba(255,255,255,0.1)\"\n\t\t\t\t>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={starMatch.star.image}\n\t\t\t\t\t\talt={t('locked')}\n\t\t\t\t\t\tclass=\"gate-blur h-full w-full object-cover blur-lg brightness-[0.3] saturate-0\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div class=\"absolute inset-0 flex items-center justify-center\">\n\t\t\t\t\t\t<svg class=\"h-6 w-6 text-white/20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"sm:mt-1\">\n\t\t\t\t\t<h3 class=\"font-display text-xl font-bold tracking-tight sm:text-2xl\">\n\t\t\t\t\t\t<span class=\"redacted\">{starMatch.star.name}</span>\n\t\t\t\t\t</h3>\n\t\t\t\t\t<p class=\"mt-0.5 font-display text-lg font-bold {ac}\">\n\t\t\t\t\t\t<span class=\"redacted\">{starMatch.similarity}%</span><span class=\"ml-1 text-xs font-normal text-muted\">{t('match')}</span>\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- details -->\n\t\t\t<div class=\"min-w-0 flex-1\">\n\t\t\t\t<!-- tagline -->\n\t\t\t\t<p class=\"text-sm leading-relaxed text-text/70 md:text-base\" style=\"text-align: justify; text-justify: inter-word;\">\n\t\t\t\t\t<span class=\"redacted\">{isRoast ? starMatch.star.tagline.roast : starMatch.star.tagline.hype}</span>\n\t\t\t\t</p>\n\n\t\t\t\t<!-- dimension comparisons -->\n\t\t\t\t<div class=\"mt-5 border-t border-border/50 pt-5\">\n\t\t\t\t\t<span class=\"text-[10px] font-semibold uppercase tracking-[0.15em] text-muted\">\n\t\t\t\t\t\t{t('why you matched')}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<div class=\"mt-3 space-y-2.5\">\n\t\t\t\t\t\t{#each starMatch.closestDimensions as dim (dim.key)}\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t<span class=\"w-24 shrink-0 text-xs text-muted\">{t(dim.name)}</span>\n\t\t\t\t\t\t\t\t<div class=\"flex flex-1 items-center gap-2\">\n\t\t\t\t\t\t\t\t\t<div class=\"relative h-1 flex-1 overflow-hidden rounded-full bg-border\">\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-y-0 left-0 rounded-full\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"width: {dim.userScore * 10}%; background: {acRaw}\"\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<span class=\"w-8 text-right font-display text-xs font-semibold {ac}\">{dim.userScore}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<span class=\"text-[10px] text-muted\">{t('vs')}</span>\n\t\t\t\t\t\t\t\t<div class=\"flex flex-1 items-center gap-2\">\n\t\t\t\t\t\t\t\t\t<div class=\"relative h-1 flex-1 overflow-hidden rounded-full bg-border\">\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-y-0 left-0 rounded-full bg-text/30\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"width: {dim.starScore * 10}%\"\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<span class=\"w-8 text-right font-display text-xs font-semibold text-muted\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"redacted\">{dim.starScore}</span>\n\t\t\t\t\t\t\t\t\t</span>\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{/each}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{#if starMatch.furthestDimension}\n\t\t\t\t\t\t<p class=\"mt-4 text-xs text-muted\">\n\t\t\t\t\t\t\t{#if isRoast}\n\t\t\t\t\t\t\t\t{t('biggest gap:')} <span class=\"font-semibold text-text/60\"><span class=\"redacted\">{t(starMatch.furthestDimension.name)}</span></span> {t('— you scored {n}, they have', { n: starMatch.furthestDimension.userScore })} <span class=\"redacted\">{starMatch.furthestDimension.starScore}</span>{t('. work on it.')}\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t{t('room to grow:')} <span class=\"font-semibold text-text/60\"><span class=\"redacted\">{t(starMatch.furthestDimension.name)}</span></span> {t(\"— you're at {n} vs\", { n: starMatch.furthestDimension.userScore })} <span class=\"redacted\">{starMatch.furthestDimension.starScore}</span>{t('. close the gap, king.')}\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- unlock CTA (replaces share buttons) -->\n\t\t\t\t<div class=\"mt-6 flex flex-col items-start gap-2\">\n\t\t\t\t\t{#if subscribed}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl px-5 py-2.5 font-display text-[13px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 {isRoast\n\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\tonclick={unlockBreakdown}\n\t\t\t\t\t\t\tdisabled={unlocking}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>\n\t\t\t\t\t\t\t{unlocking ? t('unlocking…') : t('unlock to reveal')}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"inline-flex cursor-pointer items-center gap-2 rounded-xl px-5 py-2.5 font-display text-[13px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 {isRoast\n\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\tonclick={clickGoPro}\n\t\t\t\t\t\t\tdisabled={proLoading}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg class=\"h-3.5 w-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>\n\t\t\t\t\t\t\t{proLoading ? t('redirecting…') : t('unlock — {price}/mo →', { price: PRO_MONTHLY_LABEL })}\n\t\t\t\t\t\t</button>\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</section>\n{/if}\n\n<!-- ============ DIMENSIONS BREAKDOWN (FREE: first 2) ============ -->\n<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<h2 class=\"font-display text-[clamp(2rem,5vw,3.5rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t\t{#if isRoast}\n\t\t\t\t{t('the breakdown.')}<br />\n\t\t\t\t<span class=\"text-muted\">{t('6 dimensions. no mercy.')}</span>\n\t\t\t{:else}\n\t\t\t\t{t('the breakdown.')}<br />\n\t\t\t\t<span class=\"text-muted\">{t('6 dimensions. all vibes.')}</span>\n\t\t\t{/if}\n\t\t</h2>\n\t\t<p class=\"mt-3 mb-10 max-w-md text-sm leading-relaxed text-muted md:mt-4 md:text-base\">\n\t\t\t{#if isRoast}\n\t\t\t\t{t('not some generic response. a full scientific analysis that nobody peer-reviewed but honestly should be published.')}\n\t\t\t{:else}\n\t\t\t\t{t('a comprehensive analysis of your strengths. spoiler: there are many. the AI was genuinely impressed.')}\n\t\t\t{/if}\n\t\t</p>\n\n\t\t<!-- DIMENSIONS — all rendered, locked ones slide behind paywall card -->\n\t\t<div class=\"flex flex-col\">\n\t\t\t{#each (isLocked ? freeDimensions : dimensions) as dim (dim.name)}\n\t\t\t\t<div class=\"group border-b border-border py-5 last:border-b-0\">\n\t\t\t\t\t<div class=\"flex items-center gap-4\">\n\t\t\t\t\t\t<div class=\"flex items-center gap-3 md:w-[140px]\">\n\t\t\t\t\t\t\t<div class=\"h-2.5 w-2.5 shrink-0 rounded-full\" style=\"background: {dim.color}\"></div>\n\t\t\t\t\t\t\t<span class=\"font-display text-sm font-semibold\">{t(dim.name)}</span>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"relative hidden h-1 flex-1 overflow-hidden rounded-full bg-border md:block\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute inset-y-0 left-0 rounded-full transition-all duration-[1.5s] ease-[cubic-bezier(0.16,1,0.3,1)]\"\n\t\t\t\t\t\t\t\tstyle=\"width: {barsAnimated ? dim.score * 10 : 0}%; background: {dim.color}\"\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<span class=\"ml-auto font-display text-lg font-bold md:ml-4 md:w-[50px] md:text-right\" style=\"color: {dim.color}\">{dim.score}</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"mt-2 md:hidden\">\n\t\t\t\t\t\t<div class=\"relative h-1 overflow-hidden rounded-full bg-border\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute inset-y-0 left-0 rounded-full transition-all duration-[1.5s] ease-[cubic-bezier(0.16,1,0.3,1)]\"\n\t\t\t\t\t\t\t\tstyle=\"width: {barsAnimated ? dim.score * 10 : 0}%; background: {dim.color}\"\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\n\t\t\t\t\t<p class=\"mt-2 text-xs leading-relaxed text-muted md:pl-[164px]\">{dim.feedback}</p>\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t</div>\n\n\t\t{#if isLocked && lockedDimensions.length > 0}\n\t\t\t<!-- skeleton bars + floating modal — same pattern as the tips + verdict locked states -->\n\t\t\t<div class=\"relative mt-2 min-h-[380px] overflow-hidden rounded-2xl\">\n\t\t\t\t<div class=\"space-y-3.5 p-2\" aria-hidden=\"true\">\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 92%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 85%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 88%\"></div>\n\t\t\t\t\t<div class=\"h-4\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 94%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 76%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 89%\"></div>\n\t\t\t\t\t<div class=\"h-4\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 90%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 82%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 87%\"></div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"pointer-events-none absolute inset-0 bg-bg/30\"></div>\n\n\t\t\t\t<div class=\"absolute inset-0 z-10 flex items-center justify-center px-4\">\n\t\t\t\t\t<div class=\"w-full max-w-[420px] rounded-2xl border border-border bg-surface px-6 py-7 text-left shadow-2xl shadow-black/60 sm:px-7 sm:py-8\">\n\t\t\t\t\t\t<h3 class=\"font-display text-xl font-bold leading-tight tracking-tight\">\n\t\t\t\t\t\t\t{#if lowestDim}\n\t\t\t\t\t\t\t\t{t(\"you're {n} pts below your potential.\", { n: lowestGap })}\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t{t('{n} dimensions hidden.', { n: lockedDimensions.length })}\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t<p class=\"mt-2 text-[13px] leading-relaxed text-muted\">\n\t\t\t\t\t\t\t{t(\"{n} hidden scores, the AI's verdict, and tips to close the +{pts} pt gap. all blurred. on purpose.\", { n: lockedDimensions.length, pts: pointsLeft })}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<div class=\"mt-5 flex flex-col gap-2\">\n\t\t\t\t\t\t\t{#if subscribed}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonclick={unlockBreakdown}\n\t\t\t\t\t\t\t\t\tdisabled={unlocking}\n\t\t\t\t\t\t\t\t\tclass=\"w-full cursor-pointer rounded-xl py-3 font-display text-[14px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 {isRoast\n\t\t\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{unlocking ? t('unlocking…') : t('unlock — included →')}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonclick={clickGoPro}\n\t\t\t\t\t\t\t\t\tdisabled={proLoading}\n\t\t\t\t\t\t\t\t\tclass=\"w-full cursor-pointer rounded-xl py-3 font-display text-[14px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 {isRoast\n\t\t\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{proLoading\n\t\t\t\t\t\t\t\t\t\t? t('redirecting…')\n\t\t\t\t\t\t\t\t\t\t: t('unlock everything — {price}/mo →', { price: PRO_MONTHLY_LABEL })}\n\t\t\t\t\t\t\t\t</button>\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</div>\n\t\t\t</div>\n\t\t{/if}\n\n\t</div>\n</section>\n\n<!-- ============ UPSELL CARDS (only when unlocked — locked users focus on unlock) ============ -->\n<!-- The duel and the arena are a dick's; the other subjects' next step is above. -->\n{#if isOwner && !isLocked && subject === 'dick'}\n<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<div class=\"flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between\">\n\t\t\t<div>\n\t\t\t\t<h2 class=\"font-display text-[clamp(1.8rem,4vw,3rem)] font-bold leading-[1] tracking-tighter\">\n\t\t\t\t\t{#if scoreTier === 'low'}\n\t\t\t\t\t\t{t('this needs work.')} <span class={ac}>{t(\"let's fix it.\")}</span>\n\t\t\t\t\t{:else if scoreTier === 'high'}\n\t\t\t\t\t\t<span class={ac}>{score}/10.</span> {t('now prove it.')}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{t(\"you're leaving\")} <span class={ac}>{t('+{n} pts', { n: pointsLeft })}</span><br>{t('on the table.')}\n\t\t\t\t\t{/if}\n\t\t\t\t</h2>\n\t\t\t\t<p class=\"mt-2 max-w-sm text-sm text-muted\">\n\t\t\t\t\t{#if scoreTier === 'low'}\n\t\t\t\t\t\t{t(\"the AI knows exactly what's dragging you down. here's how to fix it.\")}\n\t\t\t\t\t{:else if scoreTier === 'high'}\n\t\t\t\t\t\t{t('you scored elite. now flex it, prove it, or push even higher.')}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{t(\"the AI knows exactly what's holding you back. here's what you can do about it.\")}\n\t\t\t\t\t{/if}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div class=\"hidden shrink-0 items-center gap-3 rounded-xl border border-border bg-surface px-4 py-3 sm:flex\">\n\t\t\t\t<div class=\"text-center\">\n\t\t\t\t\t<span class=\"block font-display text-2xl font-bold {ac}\">{score}</span>\n\t\t\t\t\t<span class=\"text-[10px] uppercase tracking-widest text-muted/40\">{t('now')}</span>\n\t\t\t\t</div>\n\t\t\t\t<span class=\"text-lg text-muted/20\">→</span>\n\t\t\t\t<div class=\"text-center\">\n\t\t\t\t\t<span class=\"block font-display text-2xl font-bold text-green\">{potential}</span>\n\t\t\t\t\t<span class=\"text-[10px] uppercase tracking-widest text-muted/40\">{t('potential')}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- MOBILE: compact list -->\n\t\t<div class=\"mt-8 flex flex-col gap-3 sm:hidden\">\n\t\t\t{#each upsellCardOrder as cardId (cardId)}\n\t\t\t\t{#if cardId === 'duel'}\n\t\t\t\t\t<a href=\"/d\" class=\"group flex items-center gap-4 rounded-xl border border-border bg-surface/50 p-4 no-underline transition-all hover:border-blue/30\">\n\t\t\t\t\t\t<div class=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-blue/10\">\n\t\t\t\t\t\t\t<svg class=\"h-5 w-5 text-blue\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"1.5\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z\"/></svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t<p class=\"font-display text-sm font-bold text-text\">{scoreTier === 'high' ? t('destroy someone') : t('challenge someone')}</p>\n\t\t\t\t\t\t\t<p class=\"mt-0.5 text-[11px] text-muted\">{subscribed ? t('1v1 duel · opponent joins free · included') : t('1v1 duel · opponent joins free · first {n} free', { n: DUEL_FREE_CREATES })}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<svg class=\"h-4 w-4 shrink-0 text-muted/20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\"/></svg>\n\t\t\t\t\t</a>\n\t\t\t\t{:else}\n\t\t\t\t\t<a href=\"/a/submit\" class=\"group flex items-center gap-4 rounded-xl border border-border bg-surface/50 p-4 no-underline transition-all hover:border-orange/30\">\n\t\t\t\t\t\t<div class=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-orange/10\">\n\t\t\t\t\t\t\t<svg class=\"h-5 w-5 text-orange\" fill=\"currentColor\" viewBox=\"0 0 24 24\"><path d=\"M12.963 2.286a.75.75 0 0 0-1.071-.136 9.742 9.742 0 0 0-3.539 6.177A7.547 7.547 0 0 1 6.648 6.61a.75.75 0 0 0-1.152.082A9 9 0 1 0 15.68 4.534a7.46 7.46 0 0 1-2.717-2.248ZM15.75 14.25a3.75 3.75 0 1 1-7.313-1.172c.628.465 1.35.81 2.133 1.005a5.99 5.99 0 0 1 1.925-3.547 3.75 3.75 0 0 1 3.255 3.71Z\"/></svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t<p class=\"font-display text-sm font-bold text-text\">{scoreTier === 'high' ? t('flex in the arena') : t('enter the arena')}</p>\n\t\t\t\t\t\t\t<p class=\"mt-0.5 text-[11px] text-muted\">{t('public feed · strangers vote · free')}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<svg class=\"h-4 w-4 shrink-0 text-muted/20\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5l7 7-7 7\"/></svg>\n\t\t\t\t\t</a>\n\t\t\t\t{/if}\n\t\t\t{/each}\n\n\t\t\t<!-- mobile token strip -->\n\t\t\t{#if !subscribed}\n\t\t\t\t<div class=\"flex items-center justify-between rounded-xl border border-border px-4 py-3\">\n\t\t\t\t\t<p class=\"text-[12px] text-muted\">{t('need tokens?')} <span class=\"font-semibold text-text\">{t('packs from $4.99')}</span></p>\n\t\t\t\t\t<a href=\"/pricing\" class=\"shrink-0 rounded-lg {acBg} px-4 py-2 text-[12px] font-semibold {isRoast ? 'text-white' : 'text-bg'} no-underline\">{t('get tokens')}</a>\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t</div>\n\n\t\t<!-- DESKTOP: full cards grid -->\n\t\t<div class=\"mt-8 hidden gap-4 sm:grid sm:grid-cols-2\">\n\t\t\t{#each upsellCardOrder as cardId (cardId)}\n\t\t\t\t{#if cardId === 'duel'}\n\t\t\t\t\t<a href=\"/d\" class=\"group flex flex-col rounded-xl border border-border bg-surface/50 p-6 no-underline transition-all hover:border-border/80\">\n\t\t\t\t\t\t<span class=\"self-start rounded-md bg-blue/10 px-2 py-0.5 text-[10px] font-bold uppercase tracking-wider text-blue\">{scoreTier === 'high' ? t('flex it') : t('prove it')}</span>\n\t\t\t\t\t\t<h3 class=\"mt-3 font-display text-lg font-bold leading-tight tracking-tight text-text\">{scoreTier === 'high' ? t('destroy someone.') : t('challenge someone.')}</h3>\n\t\t\t\t\t\t<p class=\"mt-2 flex-1 text-xs leading-relaxed text-muted\">\n\t\t\t\t\t\t\t{t(\"send a link. they upload theirs. AI judges both across 6 dimensions. winner gets bragging rights. loser gets feedback they didn't ask for.\")}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<div class=\"mt-4 flex items-center gap-2 rounded-lg border border-border bg-bg px-3 py-2.5\">\n\t\t\t\t\t\t\t<div class=\"flex-1 text-center\"><span class=\"block text-[9px] text-muted/30\">{t('you')}</span><span class=\"block font-display text-lg font-bold text-muted/30\">{score}</span></div>\n\t\t\t\t\t\t\t<span class=\"text-sm text-muted/15\">VS</span>\n\t\t\t\t\t\t\t<div class=\"flex-1 text-center\"><span class=\"block text-[9px] text-muted/30\">{t('them')}</span><span class=\"block font-display text-lg font-bold text-muted/15 italic\">???</span></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mt-4 flex flex-wrap gap-x-4 gap-y-1 text-[10px] text-muted/30\">\n\t\t\t\t\t\t\t<span>{subscribed ? t('included') : t('first {n} free', { n: DUEL_FREE_CREATES })}</span><span>&middot;</span><span>{t('opponent joins free')}</span><span>&middot;</span><span>{t('48h window')}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mt-auto pt-4\">\n\t\t\t\t\t\t\t<span class=\"inline-flex items-center gap-1.5 rounded-lg bg-blue px-4 py-2.5 text-[12px] font-semibold text-white transition-all group-hover:bg-blue/80\">\n\t\t\t\t\t\t\t\t{t('start a duel')}\n\t\t\t\t\t\t\t\t<svg class=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2.5\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3\"/></svg>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t{:else}\n\t\t\t\t\t<a href=\"/a/submit\" class=\"group flex flex-col rounded-xl border border-border bg-surface/50 p-6 no-underline transition-all hover:border-border/80\">\n\t\t\t\t\t\t<span class=\"self-start rounded-md bg-orange/10 px-2 py-0.5 text-[10px] font-bold uppercase tracking-wider text-orange\">{scoreTier === 'high' ? t('show off') : t('free')}</span>\n\t\t\t\t\t\t<h3 class=\"mt-3 font-display text-lg font-bold leading-tight tracking-tight text-text\">{scoreTier === 'high' ? t('flex in the arena.') : t('enter the arena.')}</h3>\n\t\t\t\t\t\t<p class=\"mt-2 flex-1 text-xs leading-relaxed text-muted\">\n\t\t\t\t\t\t\t{t('public feed. strangers vote approve or nope. you get an approval rate, arena rank, and a weekly leaderboard position. anonymous by default.')}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<div class=\"mt-4 flex gap-2\">\n\t\t\t\t\t\t\t<div class=\"flex flex-1 flex-col items-center rounded-lg border border-border bg-bg py-2.5\"><span class=\"font-display text-base font-bold text-muted/25\">73%</span><span class=\"text-[9px] text-muted/20\">{t('approved')}</span></div>\n\t\t\t\t\t\t\t<div class=\"flex flex-1 flex-col items-center rounded-lg border border-border bg-bg py-2.5\"><span class=\"font-display text-base font-bold text-muted/15\">27%</span><span class=\"text-[9px] text-muted/20\">{t('nope')}</span></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mt-4 flex flex-wrap gap-x-4 gap-y-1 text-[10px] text-muted/30\">\n\t\t\t\t\t\t\t<span>{t('free to enter')}</span><span>&middot;</span><span>{subscribed ? t('all features included') : t('super emotes cost tokens')}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"mt-auto pt-4\">\n\t\t\t\t\t\t\t<span class=\"inline-flex items-center gap-1.5 rounded-lg bg-orange px-4 py-2.5 text-[12px] font-semibold text-white transition-all group-hover:bg-orange-dark\">\n\t\t\t\t\t\t\t\t{t('enter the arena')}\n\t\t\t\t\t\t\t\t<svg class=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2.5\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3\"/></svg>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t{/if}\n\t\t\t{/each}\n\t\t</div>\n\n\t\t<!-- RAT-199: Pro upsell strip (desktop only, hidden for subscribers).\n\t\t\t Replaces the dead \"$14.99 100-token pack\" upsell that pointed to the\n\t\t\t removed /pricing?/purchase action. -->\n\t\t{#if !subscribed}\n\t\t<div class=\"relative mt-4 hidden items-center gap-4 overflow-hidden rounded-xl border border-border px-5 py-5 sm:flex\">\n\t\t\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:40px_40px]\"></div>\n\t\t\t<div class=\"pointer-events-none absolute -top-20 -right-20 h-[200px] w-[200px] rounded-full blur-[100px] {acGlow}\"></div>\n\t\t\t<div class=\"relative z-10 min-w-0 flex-1\">\n\t\t\t\t<p class=\"font-display text-[15px] font-bold text-text\">{t('go Pro.')} <span class={ac}>{t('{price}/mo.', { price: PRO_MONTHLY_LABEL })}</span></p>\n\t\t\t\t<p class=\"mt-1 text-[12px] leading-relaxed text-muted\">{t('unlimited AI ratings, full breakdowns on every result, unlimited arena. cancel anytime.')}</p>\n\t\t\t</div>\n\t\t\t{#if data.session}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonclick={clickGoPro}\n\t\t\t\t\tdisabled={proLoading}\n\t\t\t\t\tclass=\"cursor-pointer rounded-xl {acBg} px-6 py-3 font-display text-[13px] font-semibold {isRoast ? 'text-white' : 'text-bg'} transition-all hover:opacity-80 disabled:opacity-50 relative z-10 shrink-0\"\n\t\t\t\t>\n\t\t\t\t\t{proLoading ? t('redirecting…') : t('go Pro')}\n\t\t\t\t</button>\n\t\t\t{:else}\n\t\t\t\t<a href=\"/pricing\" class=\"relative z-10 shrink-0 rounded-xl {acBg} px-6 py-3 font-display text-[13px] font-semibold {isRoast ? 'text-white' : 'text-bg'} no-underline transition-all hover:opacity-80\">\n\t\t\t\t\t{t('see Pro')}\n\t\t\t\t</a>\n\t\t\t{/if}\n\t\t</div>\n\t\t{/if}\n\t</div>\n</section>\n{/if}\n\n<!-- ============ AI VERDICT (locked teaser when locked) ============ -->\n<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<h2 class=\"font-display text-[clamp(2rem,5vw,3.5rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t\t{#if isRoast}\n\t\t\t\t{t('what the AI')}<br />\n\t\t\t\t<span class=\"text-muted\">{t('actually thinks.')}</span>\n\t\t\t{:else}\n\t\t\t\t{t('what the AI')}<br />\n\t\t\t\t<span class=\"text-muted\">{t('really sees in you.')}</span>\n\t\t\t{/if}\n\t\t</h2>\n\t\t<p class=\"mt-3 max-w-md text-sm leading-relaxed text-muted md:mt-4 md:text-base\">\n\t\t\t{#if isRoast}\n\t\t\t\t{t('the unfiltered, brutally honest AI take. read at your own emotional risk.')}\n\t\t\t{:else}\n\t\t\t\t{t(\"the AI's honest take. spoiler: it's mostly good news.\")}\n\t\t\t{/if}\n\t\t</p>\n\n\t\t{#if !isLocked}\n\t\t\t<div class=\"verdict-text mt-8 text-[15px] leading-[1.9] text-text/70 md:text-base\" style=\"text-align: justify; text-justify: inter-word;\">\n\t\t\t\t{@html verdict}\n\t\t\t</div>\n\n\t\t\t<div class=\"mt-8 flex flex-wrap items-center gap-6 border-t border-border pt-6 md:gap-10\">\n\t\t\t\t<div>\n\t\t\t\t\t<span class=\"font-display text-2xl font-bold {ac}\">{potential}</span>\n\t\t\t\t\t<span class=\"ml-1 text-xs text-muted\">{t('potential')}</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span class=\"font-display text-2xl font-bold text-green\">+{pointsLeft}</span>\n\t\t\t\t\t<span class=\"ml-1 text-xs text-muted\">{t('pts left')}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t{:else}\n\t\t\t<!-- Locked verdict — skeleton backdrop + centered floating modal (Boards-style) -->\n\t\t\t<div class=\"relative mt-8 min-h-[360px] overflow-hidden rounded-2xl\">\n\t\t\t\t<!-- skeleton placeholder lines (no real content exposed) -->\n\t\t\t\t<div class=\"space-y-3.5 p-2\" aria-hidden=\"true\">\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 96%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 89%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 93%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 78%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 85%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 91%\"></div>\n\t\t\t\t\t<div class=\"h-4\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 88%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 95%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 72%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 90%\"></div>\n\t\t\t\t\t<div class=\"h-4\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 86%\"></div>\n\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/8\" style=\"width: 79%\"></div>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- subtle dim overlay -->\n\t\t\t\t<div class=\"pointer-events-none absolute inset-0 bg-bg/30\"></div>\n\n\t\t\t\t<!-- centered floating modal -->\n\t\t\t\t<div class=\"absolute inset-0 z-10 flex items-center justify-center px-4\">\n\t\t\t\t\t<div class=\"w-full max-w-[420px] rounded-2xl border border-border bg-surface px-6 py-7 text-left shadow-2xl shadow-black/60 sm:px-7 sm:py-8\">\n\t\t\t\t\t\t<h3 class=\"font-display text-xl font-bold leading-tight tracking-tight\">\n\t\t\t\t\t\t\t{t('unlock the full verdict.')}\n\t\t\t\t\t\t</h3>\n\n\t\t\t\t\t\t<p class=\"mt-2 text-[13px] leading-relaxed text-muted\">\n\t\t\t\t\t\t\t{#if isRoast}\n\t\t\t\t\t\t\t\t{t(\"the AI's unfiltered take — every flaw, every cope, every brutal observation. premium unlocks every rating — this one and all the rest.\")}\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t{t(\"the AI's full hype reel — every detail it loved and why. premium unlocks every rating — this one and all the rest.\")}\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t<div class=\"mt-5 flex flex-col gap-2\">\n\t\t\t\t\t\t\t{#if subscribed}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonclick={unlockBreakdown}\n\t\t\t\t\t\t\t\t\tdisabled={unlocking}\n\t\t\t\t\t\t\t\t\tclass=\"w-full cursor-pointer rounded-xl py-3 font-display text-[14px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 {isRoast\n\t\t\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{unlocking ? t('unlocking…') : t('unlock — included →')}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonclick={clickGoPro}\n\t\t\t\t\t\t\t\t\tdisabled={proLoading}\n\t\t\t\t\t\t\t\t\tclass=\"w-full cursor-pointer rounded-xl py-3 font-display text-[14px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 {isRoast\n\t\t\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{proLoading\n\t\t\t\t\t\t\t\t\t\t? t('redirecting…')\n\t\t\t\t\t\t\t\t\t\t: t('unlock everything — {price}/mo →', { price: PRO_MONTHLY_LABEL })}\n\t\t\t\t\t\t\t\t</button>\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</div>\n\t\t\t</div>\n\t\t{/if}\n\t</div>\n</section>\n\n<!-- ============ TIPS (locked teaser shows 1 + blurred remaining) ============ -->\n<section class=\"border-b border-border px-5 py-12 md:py-16\">\n\t<div class=\"mx-auto max-w-5xl\">\n\t\t<h2 class=\"font-display text-[clamp(2rem,5vw,3.5rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t\t{#if isRoast}\n\t\t\t\t{t('how to score {n}+', { n: potential })}<br />\n\t\t\t\t<span class=\"text-muted\">{t('if you actually listen.')}</span>\n\t\t\t{:else}\n\t\t\t\t{t('unlock {n}+', { n: potential })}<br />\n\t\t\t\t<span class=\"text-muted\">{t(\"you're almost there.\")}</span>\n\t\t\t{/if}\n\t\t</h2>\n\t\t<p class=\"mt-3 mb-10 text-sm text-muted md:text-base\">\n\t\t\t{#if isRoast}\n\t\t\t\t{t(\"your photo is the bottleneck. fix these things and you'll jump {n} points. or don't. see if we care.\", { n: pointsLeft })}\n\t\t\t{:else}\n\t\t\t\t{t(\"small tweaks to go from great to legendary. you're {n} points away from the next tier.\", { n: pointsLeft })}\n\t\t\t{/if}\n\t\t</p>\n\n\t\t{#if !isLocked}\n\t\t\t<!-- All tips visible (unlocked state) -->\n\t\t\t<div class=\"flex flex-col\">\n\t\t\t\t{#each tips as tip (tip.num)}\n\t\t\t\t\t<div class=\"grid grid-cols-[48px_1fr] gap-4 border-b border-border py-5 last:border-b-0 md:gap-5\">\n\t\t\t\t\t\t<span class=\"pt-0.5 font-display text-[11px] font-bold {isRoast ? 'text-coral/40' : 'text-yellow/40'}\">{tip.num}</span>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<h4 class=\"font-display text-sm font-semibold\">{tip.title}</h4>\n\t\t\t\t\t\t\t<p class=\"mt-1 text-[13px] leading-relaxed text-muted\">{tip.desc}</p>\n\t\t\t\t\t\t\t<span class=\"mt-2 inline-flex items-center gap-1 rounded bg-green/[.08] px-2 py-0.5 text-[11px] font-semibold text-green\">\n\t\t\t\t\t\t\t\t<svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23,6 13.5,15.5 8.5,10.5 1,18\"/><polyline points=\"17,6 23,6 23,12\"/></svg>\n\t\t\t\t\t\t\t\t{tip.impact}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t{:else}\n\t\t\t<!-- 1 tip visible (Lenny \"sample premium\") -->\n\t\t\t{#if tips.length > 0}\n\t\t\t\t{@const firstTip = tips[0]}\n\t\t\t\t<div class=\"grid grid-cols-[48px_1fr] gap-4 border-b border-border py-5 md:gap-5\">\n\t\t\t\t\t<span class=\"pt-0.5 font-display text-[11px] font-bold {isRoast ? 'text-coral/40' : 'text-yellow/40'}\">{firstTip.num}</span>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<h4 class=\"font-display text-sm font-semibold\">{firstTip.title}</h4>\n\t\t\t\t\t\t<p class=\"mt-1 text-[13px] leading-relaxed text-muted\">{firstTip.desc}</p>\n\t\t\t\t\t\t<span class=\"mt-2 inline-flex items-center gap-1 rounded bg-green/[.08] px-2 py-0.5 text-[11px] font-semibold text-green\">\n\t\t\t\t\t\t\t<svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23,6 13.5,15.5 8.5,10.5 1,18\"/><polyline points=\"17,6 23,6 23,12\"/></svg>\n\t\t\t\t\t\t\t{firstTip.impact}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t{/if}\n\n\t\t\t<!-- Skeleton backdrop + Boards-style centered modal -->\n\t\t\t<div class=\"relative mt-0 min-h-[400px] overflow-hidden rounded-b-2xl\">\n\t\t\t\t<!-- skeleton placeholder rows (no real content exposed) -->\n\t\t\t\t<div aria-hidden=\"true\">\n\t\t\t\t\t{#each tips.slice(1) as _, i (i)}\n\t\t\t\t\t\t<div class=\"grid grid-cols-[48px_1fr] gap-4 border-b border-border py-5 md:gap-5\">\n\t\t\t\t\t\t\t<div class=\"h-4 w-6 rounded bg-text/8\"></div>\n\t\t\t\t\t\t\t<div class=\"space-y-2\">\n\t\t\t\t\t\t\t\t<div class=\"h-4 rounded-full bg-text/8\" style=\"width: {65 + ((i * 11) % 25)}%\"></div>\n\t\t\t\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/6\" style=\"width: {80 + ((i * 7) % 18)}%\"></div>\n\t\t\t\t\t\t\t\t<div class=\"h-3 rounded-full bg-text/6\" style=\"width: {72 + ((i * 13) % 24)}%\"></div>\n\t\t\t\t\t\t\t\t<div class=\"h-4 w-20 rounded bg-text/8\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- subtle dim overlay -->\n\t\t\t\t<div class=\"pointer-events-none absolute inset-0 bg-bg/30\"></div>\n\n\t\t\t\t<!-- centered floating modal -->\n\t\t\t\t<div class=\"absolute inset-0 z-10 flex items-center justify-center px-4 py-8\">\n\t\t\t\t\t<div class=\"w-full max-w-[420px] rounded-2xl border border-border bg-surface px-6 py-7 text-left shadow-2xl shadow-black/60 sm:px-7 sm:py-8\">\n\t\t\t\t\t\t<h3 class=\"font-display text-xl font-bold leading-tight tracking-tight\">\n\t\t\t\t\t\t\t{tips.length > 1\n\t\t\t\t\t\t\t\t? t('{n} more tips to hit {score}.', { n: tips.length - 1, score: potential })\n\t\t\t\t\t\t\t\t: t('all the tips to hit {score}.', { score: potential })}\n\t\t\t\t\t\t</h3>\n\n\t\t\t\t\t\t<p class=\"mt-2 text-[13px] leading-relaxed text-muted\">\n\t\t\t\t\t\t\t{t('you saw the first one. the {n} other personalized tips are how you actually close the +{pts} pt gap.', { n: Math.max(1, tips.length - 1), pts: pointsLeft })}\n\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t<div class=\"mt-5 flex flex-col gap-2\">\n\t\t\t\t\t\t\t{#if subscribed}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonclick={unlockBreakdown}\n\t\t\t\t\t\t\t\t\tdisabled={unlocking}\n\t\t\t\t\t\t\t\t\tclass=\"w-full cursor-pointer rounded-xl py-3 font-display text-[14px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 {isRoast\n\t\t\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{unlocking ? t('unlocking…') : t('unlock — included →')}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tonclick={clickGoPro}\n\t\t\t\t\t\t\t\t\tdisabled={proLoading}\n\t\t\t\t\t\t\t\t\tclass=\"w-full cursor-pointer rounded-xl py-3 font-display text-[14px] font-semibold transition-all active:scale-[0.98] disabled:opacity-50 {isRoast\n\t\t\t\t\t\t\t\t\t\t? 'bg-coral text-white hover:bg-coral-dark'\n\t\t\t\t\t\t\t\t\t\t: 'bg-yellow text-bg hover:bg-yellow/80'}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{proLoading\n\t\t\t\t\t\t\t\t\t\t? t('redirecting…')\n\t\t\t\t\t\t\t\t\t\t: t('unlock everything — {price}/mo →', { price: PRO_MONTHLY_LABEL })}\n\t\t\t\t\t\t\t\t</button>\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</div>\n\t\t\t</div>\n\t\t{/if}\n\t</div>\n</section>\n\n<!-- ============ REPORT LINK (RAT-236) ============ -->\n{#if status === 'completed' && !isOwner}\n<div class=\"mx-auto mt-8 mb-20 max-w-3xl px-5 text-center\">\n\t<button\n\t\ttype=\"button\"\n\t\tonclick={() => (reportOpen = true)}\n\t\tclass=\"text-[11px] text-muted/40 underline-offset-2 transition-colors hover:text-muted hover:underline\"\n\t>\n\t\t{t('report this content')}\n\t</button>\n</div>\n{/if}\n\n<ReportContentModal\n\tbind:open={reportOpen}\n\tentityType=\"generation\"\n\tentityId={data.generation.id}\n\tonclose={() => (reportOpen = false)}\n/>\n\n<!-- ============ WHAT'S NEXT ============ -->\n{#if isOwner}\n<section class=\"relative border-b border-border px-5 py-12 pb-28 md:py-16 md:pb-28\">\n\t<div class=\"pointer-events-none absolute inset-0 bg-[linear-gradient(rgba(255,255,255,.006)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,.006)_1px,transparent_1px)] bg-[size:60px_60px]\"></div>\n\t<div class=\"relative z-10 mx-auto max-w-5xl\">\n\t\t<h2 class=\"font-display text-[clamp(2rem,5vw,3.5rem)] font-bold leading-[0.95] tracking-tighter\">\n\t\t\t{t('what now')}<span class=\"text-muted\">?</span>\n\t\t</h2>\n\t\t<p class=\"mt-3 max-w-lg text-sm text-muted\">{t(\"you've been judged. here's what you can do about it.\")}</p>\n\n\t\t{#if subject === 'dick'}\n\t\t<div class=\"mt-8 grid gap-4 sm:grid-cols-2\">\n\t\t\t<!-- duel card (primary path) -->\n\t\t\t<a href=\"/d\" class=\"group flex flex-col rounded-xl border border-border bg-surface/50 p-6 no-underline transition-all hover:border-blue/30\">\n\t\t\t\t<div class=\"flex h-10 w-10 items-center justify-center rounded-lg bg-blue/10\">\n\t\t\t\t\t<svg class=\"h-5 w-5 text-blue\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"1.6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z\"/></svg>\n\t\t\t\t</div>\n\t\t\t\t<h3 class=\"mt-3 font-display text-lg font-bold leading-tight tracking-tight text-text\">{isRoast ? t('think this is unbeatable?') : t('flex on the competition.')}</h3>\n\t\t\t\t<p class=\"mt-2 text-xs leading-relaxed text-muted\">{t('send a link, opponent joins free, AI judges both — scores sealed until the reveal.')}</p>\n\t\t\t\t<span class=\"mt-auto inline-flex items-center gap-1.5 pt-4 text-sm font-semibold text-blue\">\n\t\t\t\t\t{t('challenge someone')}\n\t\t\t\t\t<svg class=\"h-3.5 w-3.5 transition-transform group-hover:translate-x-0.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2.5\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3\"/></svg>\n\t\t\t\t</span>\n\t\t\t</a>\n\n\t\t\t<!-- arena card (connect path) -->\n\t\t\t<a href=\"/a/submit\" class=\"group flex flex-col rounded-xl border border-border bg-surface/50 p-6 no-underline transition-all hover:border-orange/30\">\n\t\t\t\t<div class=\"flex h-10 w-10 items-center justify-center rounded-lg bg-orange/10\">\n\t\t\t\t\t<svg class=\"h-5 w-5 text-orange\" fill=\"currentColor\" viewBox=\"0 0 24 24\"><path d=\"M12.963 2.286a.75.75 0 0 0-1.071-.136 9.742 9.742 0 0 0-3.539 6.177A7.547 7.547 0 0 1 6.648 6.61a.75.75 0 0 0-1.152.082A9 9 0 1 0 15.68 4.534a7.46 7.46 0 0 1-2.717-2.248ZM15.75 14.25a3.75 3.75 0 1 1-7.313-1.172c.628.465 1.35.81 2.133 1.005a5.99 5.99 0 0 1 1.925-3.547 3.75 3.75 0 0 1 3.255 3.71Z\"/></svg>\n\t\t\t\t</div>\n\t\t\t\t<h3 class=\"mt-3 font-display text-lg font-bold leading-tight tracking-tight text-text\">{isRoast ? t('want strangers to vote?') : t('put it to the crowd.')}</h3>\n\t\t\t\t<p class=\"mt-2 text-xs leading-relaxed text-muted\">{t('post to the public arena, get an approval rate and a weekly leaderboard spot — anonymous, free.')}</p>\n\t\t\t\t<span class=\"mt-auto inline-flex items-center gap-1.5 pt-4 text-sm font-semibold text-orange\">\n\t\t\t\t\t{t('enter the arena')}\n\t\t\t\t\t<svg class=\"h-3.5 w-3.5 transition-transform group-hover:translate-x-0.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2.5\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3\"/></svg>\n\t\t\t\t</span>\n\t\t\t</a>\n\t\t</div>\n\n\t\t<!-- RAT-577: the score is about the photo; size has its own tools -->\n\t\t<p class=\"mt-6 text-sm text-muted\">\n\t\t\t{t('where do you stand on size?')}\n\t\t\t<a href=\"/tools/penis-size-calculator\" class=\"font-semibold text-text underline decoration-border underline-offset-4 hover:decoration-text\">{t('penis size calculator')}</a>\n\t\t\t·\n\t\t\t<a href=\"/tools/penis-size-visualizer\" class=\"font-semibold text-text underline decoration-border underline-offset-4 hover:decoration-text\">{t('see it to scale')}</a>\n\t\t</p>\n\t\t{:else}\n\t\t<!-- Epic R: the other raters -->\n\t\t<p class=\"mt-8 flex flex-wrap gap-x-4 gap-y-2 text-sm text-muted\">\n\t\t\t{t('rate something else:')}\n\t\t\t{#each RATE_SUBJECTS.filter((s) => s !== subject) as s (s)}\n\t\t\t\t<a href={RATE_SUBJECT_PATH[s]} class=\"font-semibold text-text underline decoration-border underline-offset-4 hover:decoration-text\">{t(s)}</a>\n\t\t\t{/each}\n\t\t</p>\n\t\t{/if}\n\n\t\t<!-- nuke -->\n\t\t<div class=\"mt-6 flex items-center gap-4\">\n\t\t\t<button\n\t\t\t\tclass=\"group inline-flex cursor-pointer items-center gap-2 rounded-lg border border-red-900/20 bg-red-950/10 px-4 py-2 text-xs font-semibold text-red-400/60 transition-all hover:border-red-700/30 hover:text-red-400\"\n\t\t\t\tonclick={() => { nuked = true; activeMode.set(null); analytics.trackNukeResults(); }}\n\t\t\t>\n\t\t\t\t<svg class=\"h-3.5 w-3.5 transition-transform group-hover:rotate-12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t<path d=\"M3 6h18\"/><path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"/><path d=\"m19 6-.867 12.142A2 2 0 0 1 16.138 20H7.862a2 2 0 0 1-1.995-1.858L5 6\"/>\n\t\t\t\t</svg>\n\t\t\t\t{t('nuke results')}\n\t\t\t</button>\n\t\t\t<span class=\"text-[10px] text-muted/25\">{t(\"gone forever. we can't undo this.\")}</span>\n\t\t</div>\n\t</div>\n</section>\n{/if}\n\n{/if}\n\n<UpgradeModal\n\topen={showUpgradeModal}\n\tonclose={() => { showUpgradeModal = false; duelLimitOpen = false; invalidateAll(); }}\n\tfeature={upgradeFeature}\n\tsuccessPath={`/rate/result/${gen.id}?subscribed=true`}\n\theadline={duelLimitOpen ? t(\"You've used your {n} free duels.\", { n: DUEL_FREE_CREATES }) : null}\n\tsource={duelLimitOpen ? 'duel_limit' : null}\n\tsecondaryLabel={duelLimitOpen ? t('join an open duel — free') : null}\n\tonsecondary={duelLimitOpen\n\t\t? () => {\n\t\t\t\tshowUpgradeModal = false;\n\t\t\t\tduelLimitOpen = false;\n\t\t\t\tanalytics.trackDuelLimitExit('rate_result', 'open_duels');\n\t\t\t\tgoto('/d#open-duels');\n\t\t\t}\n\t\t: null}\n/>\n\n{#if showPostUnlockUpsell}\n\t<PostUnlockUpsell\n\t\tgenerationId={gen.id}\n\t\tmode={mode}\n\t\tonClose={() => { showPostUnlockUpsell = false; }}\n\t/>\n{/if}\n\n<!-- ============ SHARE CLAIM MODAL (+10 tokens) ============ -->\n{#if claimOpen}\n\t<!-- svelte-ignore a11y_no_static_element_interactions -->\n\t<div class=\"fixed inset-0 z-[100] flex items-end justify-center sm:items-center\" role=\"dialog\" aria-modal=\"true\" aria-label={t('Claim share tokens')}>\n\t\t<button\n\t\t\tclass=\"absolute inset-0 bg-black/70 backdrop-blur-sm\"\n\t\t\tonclick={() => { claimOpen = false; claimError = ''; }}\n\t\t\taria-label={t('Close')}\n\t\t></button>\n\n\t\t<div class=\"relative w-full max-w-[460px] rounded-t-3xl border border-border bg-bg sm:mx-4 sm:rounded-3xl\">\n\t\t\t<!-- mobile grab indicator -->\n\t\t\t<div class=\"flex justify-center pt-3 sm:hidden\">\n\t\t\t\t<div class=\"h-1 w-10 rounded-full bg-muted/20\"></div>\n\t\t\t</div>\n\n\t\t\t<!-- close -->\n\t\t\t<button\n\t\t\t\tclass=\"absolute top-4 right-4 z-10 flex h-8 w-8 cursor-pointer items-center justify-center rounded-full bg-surface text-muted/40 transition-colors hover:text-muted\"\n\t\t\t\tonclick={() => { claimOpen = false; claimError = ''; }}\n\t\t\t\taria-label={t('Close')}\n\t\t\t>\n\t\t\t\t<svg class=\"h-4 w-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/></svg>\n\t\t\t</button>\n\n\t\t\t<div class=\"px-6 pt-7 pb-6 sm:px-8 sm:pt-8 sm:pb-8\">\n\t\t\t\t{#if claimStatus === 'approved'}\n\t\t\t\t\t<!-- ── already claimed ── -->\n\t\t\t\t\t<div class=\"text-center\">\n\t\t\t\t\t\t<div class=\"mx-auto flex h-14 w-14 items-center justify-center rounded-2xl bg-green/15\">\n\t\t\t\t\t\t\t<svg class=\"h-6 w-6 text-green\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"/></svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<h3 class=\"mt-4 font-display text-[1.4rem] font-bold tracking-tight\">{t('already claimed')}</h3>\n\t\t\t\t\t\t<p class=\"mt-2 text-[13px] leading-relaxed text-muted\">\n\t\t\t\t\t\t\t{t(\"you've already received your one-time +{n} token bonus. thanks for sharing.\", { n: shareReward })}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonclick={() => (claimOpen = false)}\n\t\t\t\t\t\t\tclass=\"mt-6 w-full cursor-pointer rounded-xl bg-text px-4 py-2.5 font-display text-[13px] font-semibold text-bg transition-all hover:bg-text/90\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{t('done')}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t{:else if claimSuccess || claimStatus === 'pending'}\n\t\t\t\t\t<!-- ── submitted, under review ── -->\n\t\t\t\t\t<div class=\"text-center\">\n\t\t\t\t\t\t<div class=\"mx-auto flex h-14 w-14 items-center justify-center rounded-2xl bg-yellow/15\">\n\t\t\t\t\t\t\t<svg class=\"h-6 w-6 text-yellow\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"12 6 12 12 16 14\"/></svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<h3 class=\"mt-4 font-display text-[1.4rem] font-bold tracking-tight\">{t('under review')}</h3>\n\t\t\t\t\t\t<p class=\"mt-2 text-[13px] leading-relaxed text-muted\">\n\t\t\t\t\t\t\t{t(\"we'll review within 24h. if approved, +{n} tokens auto-credit to your account.\", { n: shareReward })}<br />{t(\"you'll get an email if rejected (e.g. tag missing).\")}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tonclick={() => { claimOpen = false; claimSuccess = false; }}\n\t\t\t\t\t\t\tclass=\"mt-6 w-full cursor-pointer rounded-xl bg-text px-4 py-2.5 font-display text-[13px] font-semibold text-bg transition-all hover:bg-text/90\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{t('done')}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t{:else}\n\t\t\t\t\t<!-- ── form state ── -->\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"flex items-center gap-2.5\">\n\t\t\t\t\t\t\t<span class=\"flex h-8 px-2.5 items-center justify-center rounded-full bg-coral/15 font-display text-[11px] font-bold text-coral\">+{shareReward}</span>\n\t\t\t\t\t\t\t<h3 class=\"font-display text-[1.4rem] font-bold tracking-tight\">{t('one-time +{n} tokens', { n: shareReward })}</h3>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<p class=\"mt-2 text-[13px] leading-relaxed text-muted\">\n\t\t\t\t\t\t\t{t('share your card on reddit or x with')} <span class=\"font-semibold text-text/85\">@ratemyd_app</span> {t('tagged. once per account, ever — we credit within 24h.')}\n\t\t\t\t\t\t\t<span class=\"mt-1.5 block text-[12px] text-coral/85\">{t('does not count if posted in')} <span class=\"font-semibold\">r/AIDickRating</span> {t('or from the')} <span class=\"font-semibold\">@ratemyd_app</span> {t('account — must be your own audience on a different sub/account.')}</span>\n\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t<!-- steps reminder -->\n\t\t\t\t\t\t<ol class=\"mt-5 space-y-2 text-[12px] text-muted\">\n\t\t\t\t\t\t\t<li class=\"flex gap-2.5\">\n\t\t\t\t\t\t\t\t<span class=\"flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-text/8 font-display text-[10px] font-bold text-text/70\">1</span>\n\t\t\t\t\t\t\t\t<span>{t('post your screenshot / share link — reddit or x (NOT r/AIDickRating, NOT from @ratemyd_app)')}</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"flex gap-2.5\">\n\t\t\t\t\t\t\t\t<span class=\"flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-text/8 font-display text-[10px] font-bold text-text/70\">2</span>\n\t\t\t\t\t\t\t\t<span>{t('tag')} <span class=\"font-semibold text-text/85\">@ratemyd_app</span> {t('in the post')}</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li class=\"flex gap-2.5\">\n\t\t\t\t\t\t\t\t<span class=\"flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-text/8 font-display text-[10px] font-bold text-text/70\">3</span>\n\t\t\t\t\t\t\t\t<span>{t('paste the URL of your post below')}</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ol>\n\n\t\t\t\t\t\t<!-- platform tabs -->\n\t\t\t\t\t\t<div class=\"mt-6 flex gap-1 rounded-lg bg-surface p-1\">\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\tonclick={() => (claimPlatform = 'reddit')}\n\t\t\t\t\t\t\t\tclass=\"flex-1 cursor-pointer rounded-md px-3 py-2 font-display text-[12px] font-semibold transition-all {claimPlatform === 'reddit' ? 'bg-bg text-text' : 'bg-transparent text-muted hover:text-text/70'}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\treddit\n\t\t\t\t\t\t\t</button>\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\tonclick={() => (claimPlatform = 'twitter')}\n\t\t\t\t\t\t\t\tclass=\"flex-1 cursor-pointer rounded-md px-3 py-2 font-display text-[12px] font-semibold transition-all {claimPlatform === 'twitter' ? 'bg-bg text-text' : 'bg-transparent text-muted hover:text-text/70'}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tx / twitter\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- url input -->\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"url\"\n\t\t\t\t\t\t\tbind:value={claimUrl}\n\t\t\t\t\t\t\tplaceholder={claimPlatform === 'reddit' ? 'https://reddit.com/r/.../comments/...' : 'https://x.com/yourhandle/status/...'}\n\t\t\t\t\t\t\tdisabled={claimSubmitting}\n\t\t\t\t\t\t\tclass=\"mt-3 w-full rounded-lg border border-border bg-surface/50 px-3 py-2.5 text-[13px] text-text placeholder:text-muted/40 focus:border-muted focus:bg-surface focus:outline-none disabled:opacity-50\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{#if claimError}\n\t\t\t\t\t\t\t<p class=\"mt-2 text-[12px] text-coral\">{claimError}</p>\n\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t<!-- actions -->\n\t\t\t\t\t\t<div class=\"mt-5 flex gap-2\">\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonclick={() => { claimOpen = false; claimError = ''; }}\n\t\t\t\t\t\t\t\tclass=\"flex-1 cursor-pointer rounded-xl border border-border px-4 py-2.5 font-display text-[13px] font-semibold text-muted transition-all hover:border-muted hover:text-text\"\n\t\t\t\t\t\t\t\tdisabled={claimSubmitting}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{t('cancel')}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tonclick={submitClaim}\n\t\t\t\t\t\t\t\tdisabled={claimSubmitting || !claimUrl.trim()}\n\t\t\t\t\t\t\t\tclass=\"flex-1 cursor-pointer rounded-xl bg-coral px-4 py-2.5 font-display text-[13px] font-semibold text-white transition-all hover:bg-coral-dark disabled:opacity-50\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{claimSubmitting ? t('submitting…') : t('submit for review')}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n{/if}\n\n<style>\n\t.verdict-text :global(strong) {\n\t\tcolor: var(--color-coral);\n\t\tfont-weight: 600;\n\t\tposition: relative;\n\t\tdisplay: inline;\n\t\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 12' preserveAspectRatio='none'%3E%3Cpath d='M1 8.5C30 4 60 6 100 5.5c40-.5 70 2.5 99 3' stroke='%23FF4D6D' stroke-width='3' fill='none' stroke-linecap='round' opacity='0.35'/%3E%3C/svg%3E\");\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 100% 0.35em;\n\t\tbackground-position: 0 88%;\n\t\tpadding-bottom: 2px;\n\t}\n\t.verdict-text :global(.hype-strong) {\n\t\tcolor: var(--color-yellow);\n\t\tfont-weight: 600;\n\t\tposition: relative;\n\t\tdisplay: inline;\n\t\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 12' preserveAspectRatio='none'%3E%3Cpath d='M1 8.5C30 4 60 6 100 5.5c40-.5 70 2.5 99 3' stroke='%23FFE500' stroke-width='3' fill='none' stroke-linecap='round' opacity='0.35'/%3E%3C/svg%3E\");\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 100% 0.35em;\n\t\tbackground-position: 0 88%;\n\t\tpadding-bottom: 2px;\n\t}\n\n\t.metal-card {\n\t\ttransition: transform 0.4s cubic-bezier(0.23, 1, 0.32, 1);\n\t\ttransform-style: preserve-3d;\n\t\tperspective: 800px;\n\t}\n\t.metal-card:hover {\n\t\ttransform: rotateY(-2deg) rotateX(1deg) scale(1.01);\n\t}\n\n\t.analyzing-spin {\n\t\tanimation: analyzeSpin 25s linear infinite;\n\t}\n\t@keyframes analyzeSpin {\n\t\tto { transform: rotate(360deg); }\n\t}\n\n\t.fade-text {\n\t\tanimation: fadeText 0.4s ease both;\n\t}\n\t@keyframes fadeText {\n\t\tfrom { opacity: 0; transform: translateY(4px); }\n\t\tto { opacity: 1; transform: translateY(0); }\n\t}\n\n\t/* redacted text — visible shape, unreadable content */\n\t.redacted {\n\t\tposition: relative;\n\t\tdisplay: inline;\n\t\tcolor: transparent;\n\t\tuser-select: none;\n\t\tbackground: linear-gradient(90deg,\n\t\t\trgba(255,255,255,0.06) 0%,\n\t\t\trgba(255,255,255,0.1) 20%,\n\t\t\trgba(255,255,255,0.04) 40%,\n\t\t\trgba(255,255,255,0.09) 60%,\n\t\t\trgba(255,255,255,0.05) 80%,\n\t\t\trgba(255,255,255,0.08) 100%\n\t\t);\n\t\tbackground-size: 200% 100%;\n\t\tborder-radius: 3px;\n\t\tpadding: 0 2px;\n\t\tanimation: redactedShimmer 4s ease-in-out infinite;\n\t}\n\t@keyframes redactedShimmer {\n\t\t0%, 100% { background-position: 0% 50%; }\n\t\t50% { background-position: 100% 50%; }\n\t}\n</style>\n"],"version":3}