{"release_id":"01a1c502-4ad1-0000-ec62-adc54d3c69aa","chunk_id":"01a1c502-4cce-74b3-943a-329e7291e92f","file":"180.qiNNJY0N.mjs","mappings":"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","names":["rollOnMount","animate","C","R","N","$$props","seats","p","i","ang","$.get","pickedIdx","angle","$.state","landed","ticking","raf","rolledFor","easeOut","t","settle","pick","roll","dur","$.set","reduced","start","target","t0","lastSeg","frame","now","seg","onMount","$.user_effect","key","div","root","div_1","span","root_1","$$render","consequent","s","$$anchor","span_1","root_2","node_2","$.child","$0","$.derived","getAvatarUrl","DuelAvatar","$.reset","classes_1","$.set_class","$.set_style","$.append","div_2","classes","me","count","notes","$.prop","REACTIONS","MAX_LEN","msgs","$.proxy","draft","sending","err","open","emojiOpen","unread","glyph","listEl","lines","all","m","n","a","b","fmtTime","iso","locale","DEFAULT_LOCALE","LOCALE_INFO","scrollDown","tick","openPanel","alive","res","j","unsub","realtime","event","rot","onDoc","e","send","text","body","fd","handleKey","aside","button","p_1","$.template_effect","$.set_text","text_3","$.each","l","div_3","root_5","span_2","span_3","span_4","p_2","p_3","root_6","text_7","consequent_1","alternate","alternate_1","$$value","$2","slide","cubicOut","consequent_2","p_4","root_7","consequent_3","div_4","$.sibling","node_4","div_5","button_1","node_5","span_5","root_8","text_9","fade","node_6","div_6","root_9","button_2","root_10","text_10","$.set_attribute","consequent_4","form","root_11","textarea","button_3","$1","$.event","$.delegated","p_5","root_12","text_11","button_4","node_7","span_6","root_13","text_12","consequent_6","classes_2","compact","firedFor","iv","leftMs","pct","match","onTodEvent","lastSettled","who","x","TOD_XP","refresh","matchId","isPlayer","activeMode","spinSeen","poll","on","refreshing","refreshAgain","next","busy","actionError","ERR","msg","errText","code","fallback","known","TOD_MIN_PLAYERS","post","path","leave","goto","dueFired","autoLeft","autoDue","autoText","autoPct","at","inviteName","invited","invite","copied","copyLink","url","share","landedFor","truthText","uploading","uploadPct","fileInput","reportOpen","reportRoundId","seated","ranked","current","shotReadyFor","shotAlreadyLoaded","roundId","el","upName","phaseTotal","TOD_SPIN_SEC","TOD_PICK_SEC","TOD_DARE_SEC","TOD_TRUTH_SEC","todVoteSec","SPICE","CHOICE","choiceLabel","c","spiceLabel","dec","bottleLanded","showPick","segments","out","byNo","h","pickFile","input","picked","file","shrinkPhoto","videoDuration","TOD_DARE_VIDEO_MAX_SEC","urlRes","u","resolve","reject","v","podium","winner","duration","badgeName","badge","TOD_BADGES","badgeHow","nick","id","rematch","$.head","main","$.first_child","fragment","h1","$.index","part","b_1","root_4","a_1","a_2","text_6","d","page","div_7","div_8","div_9","b_2","TOD_MAX_PLAYERS","_","div_10","b_3","div_11","fragment_3","small","consequent_5","input_1","div_12","root_14","div_13","node_10","text_19","consequent_7","div_14","fragment_5","button_5","button_6","div_15","root_17","small_1","div_16","root_18","consequent_9","div_17","fragment_6","button_7","div_18","root_20","small_2","classes_3","consequent_11","div_19","root_21","a_3","consequent_8","consequent_10","consequent_12","div_20","root_22","consequent_13","text_2","section","root_23","header","div_21","div_22","div_23","div_24","root_24","classes_4","div_25","div_26","TodTimer","node_15","button_8","root_25","a_4","root_26","text_34","consequent_15","alternate_2","div_27","div_28","div_29","div_30","root_27","span_7","node_17","span_8","span_9","root_28","text_39","span_10","root_29","text_40","consequent_16","consequent_17","b_4","node_18","classes_5","text_37","classes_6","text_41","hName","hXp","div_31","root_30","span_11","consequent_18","main_1","div_32","fragment_7","span_12","span_13","TodBottle","node_21","div_33","div_34","div_35","div_36","div_37","root_32","button_9","span_14","small_3","button_10","span_15","small_4","consequent_19","div_38","node_22","node_23","classes_7","div_39","fragment_8","span_16","span_17","div_40","div_41","span_18","div_42","root_34","text_55","consequent_21","div_43","node_24","fragment_10","div_44","TOD_TRUTH_MAX_CHARS","div_45","fragment_11","input_2","button_11","b_5","consequent_22","alternate_3","div_46","root_38","consequent_23","alternate_4","div_47","root_39","button_12","root_40","consequent_24","button_13","node_28","consequent_25","div_48","node_27","node_29","classes_8","div_49","fragment_12","span_19","span_20","div_50","div_51","div_52","root_43","video","root_44","$.attach","d_1","img","root_45","div_53","root_46","text_66","consequent_28","classes_9","div_54","root_47","consequent_29","alternate_6","div_55","root_48","div_56","text_69","consequent_30","alternate_7","div_57","node_30","node_34","div_58","div_59","div_60","button_14","root_49","text_72","consequent_31","div_61","div_62","div_63","button_15","button_16","div_64","node_36","classes_10","classes_11","consequent_32","div_65","root_50","div_66","div_67","div_68","div_69","b_6","text_78","consequent_33","div_70","root_51","consequent_34","div_71","root_52","div_72","div_73","div_74","div_75","section_1","root_53","div_76","div_77","div_78","h1_1","span_21","text_84","div_79","div_80","root_54","div_81","root_56","node_41","b_7","i_1","em","consequent_37","consequent_38","div_82","div_83","div_84","div_85","div_86","root_57","span_22","span_23","b_8","text_90","classes_12","div_87","root_58","consequent_39","div_88","root_59","consequent_40","div_89","div_90","div_91","root_60","text_96","div_92","root_61","div_93","root_62","div_94","div_95","consequent_41","alternate_8","div_96","div_97","div_98","div_99","button_17","button_18","root_63","text_102","consequent_42","a_5","div_100","root_64","consequent_43","div_101","root_65","div_102","div_103","div_104","div_105","div_106","a_6","consequent_35","consequent_44","alternate_9","TodChat","consequent_45","ReportContentModal","consequent_46"],"sources":["../../../../../../src/lib/components/tod/TodBottle.svelte","../../../../../../src/lib/components/tod/TodChat.svelte","../../../../../../src/lib/components/tod/TodTimer.svelte","../../../../../../src/routes/tod/[code]/+page.svelte"],"sourcesContent":["<script lang=\"ts\">\n\t/** The spin. Eight seats on a disc, a glass bottle in the middle; when a\n\t *  new round arrives it rolls whole turns and lands on the picked seat,\n\t *  ticking each avatar it passes. Every client computes the same landing\n\t *  from the same payload, so the room watches one roll. */\n\timport { onMount } from 'svelte';\n\timport DuelAvatar from '$lib/components/duel/DuelAvatar.svelte';\n\timport { getAvatarUrl } from '$lib/avatar';\n\timport type { TodPlayerView } from '$lib/types/tod';\n\n\tlet {\n\t\tplayers,\n\t\tpickedUserId,\n\t\troundKey,\n\t\troll: rollOnMount = false,\n\t\tanimate = true,\n\t\tonlanded\n\t}: {\n\t\tplayers: TodPlayerView[];\n\t\tpickedUserId: string | null;\n\t\t/** changes per round → triggers a fresh roll */\n\t\troundKey: string | null;\n\t\t/** true when the page met this round while the spin was on: the\n\t\t *  bottle rolls on mount. false = opened mid-round, just land on the seat. */\n\t\troll?: boolean;\n\t\tanimate?: boolean;\n\t\tonlanded?: () => void;\n\t} = $props();\n\n\tconst SIZE = 300;\n\tconst C = SIZE / 2;\n\tconst R = 124;\n\tconst N = $derived(Math.max(players.length, 1));\n\tconst seats = $derived(\n\t\tplayers.map((p, i) => {\n\t\t\tconst ang = (i / N) * Math.PI * 2 - Math.PI / 2;\n\t\t\treturn { p, left: C + R * Math.cos(ang), top: C + R * Math.sin(ang) };\n\t\t})\n\t);\n\tconst pickedIdx = $derived(players.findIndex((p) => p.userId === pickedUserId));\n\n\tlet angle = $state(0);\n\tlet landed = $state(false);\n\tlet ticking = $state(-1);\n\tlet raf = 0;\n\tlet rolledFor: string | null = null;\n\tconst easeOut = (t: number) => 1 - Math.pow(1 - t, 5);\n\n\tfunction settle(pick: number) {\n\t\tangle = pick >= 0 ? (pick * 360) / N : angle;\n\t\tlanded = pick >= 0;\n\t}\n\n\tfunction roll(pick: number, dur = 4200) {\n\t\tcancelAnimationFrame(raf);\n\t\tlanded = false;\n\t\tif (pick < 0) return;\n\t\tconst reduced = typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\t\tif (!animate || reduced) {\n\t\t\tsettle(pick);\n\t\t\tonlanded?.();\n\t\t\treturn;\n\t\t}\n\t\tconst start = angle % 360;\n\t\tconst turns = 5; // whole turns, or the cap misses the seat\n\t\tconst target = start + turns * 360 + (((pick * 360) / N - start + 720) % 360);\n\t\tconst t0 = performance.now();\n\t\tlet lastSeg = -1;\n\t\tconst frame = (now: number) => {\n\t\t\tconst t = Math.min(1, (now - t0) / dur);\n\t\t\tangle = start + (target - start) * easeOut(t);\n\t\t\tconst seg = Math.round(angle / (360 / N)) % N;\n\t\t\tif (seg !== lastSeg) {\n\t\t\t\tticking = (seg + N) % N;\n\t\t\t\tlastSeg = seg;\n\t\t\t}\n\t\t\tif (t < 1) raf = requestAnimationFrame(frame);\n\t\t\telse {\n\t\t\t\tticking = -1;\n\t\t\t\tlanded = true;\n\t\t\t\tonlanded?.();\n\t\t\t}\n\t\t};\n\t\traf = requestAnimationFrame(frame);\n\t}\n\n\tonMount(() => {\n\t\t// the component is only on screen during spin + pick, so every round\n\t\t// mounts it fresh: the page says whether this round was met mid-spin\n\t\t// (roll it) or later (page opened mid-round: just land on the seat).\n\t\tif (roundKey) {\n\t\t\trolledFor = roundKey;\n\t\t\tif (rollOnMount) roll(pickedIdx);\n\t\t\telse {\n\t\t\t\tsettle(pickedIdx);\n\t\t\t\tonlanded?.();\n\t\t\t}\n\t\t}\n\t\treturn () => cancelAnimationFrame(raf);\n\t});\n\n\t$effect(() => {\n\t\tconst key = roundKey;\n\t\tconst pick = pickedIdx;\n\t\tif (!key || key === rolledFor) return;\n\t\trolledFor = key;\n\t\troll(pick);\n\t});\n</script>\n\n<div class=\"stage\" class:landed>\n\t<div class=\"disc\"></div>\n\t<div class=\"orbit\">\n\t\t{#if landed && pickedIdx >= 0}\n\t\t\t<span class=\"halo on\" style=\"left:{seats[pickedIdx].left}px;top:{seats[pickedIdx].top}px\"></span>\n\t\t{/if}\n\t\t{#each seats as s, i (s.p.userId)}\n\t\t\t<span\n\t\t\t\tclass=\"seat\"\n\t\t\t\tclass:tick={ticking === i}\n\t\t\t\tclass:hit={landed && i === pickedIdx}\n\t\t\t\tclass:dim={(landed && i !== pickedIdx) || s.p.left}\n\t\t\t\tstyle=\"left:{s.left}px;top:{s.top}px\"\n\t\t\t>\n\t\t\t\t<DuelAvatar nickname={s.p.nickname} avatarUrl={getAvatarUrl(s.p.avatarPath)} size={46} link={false} />\n\t\t\t</span>\n\t\t{/each}\n\t</div>\n\t<div class=\"bottle-wrap\" style=\"transform:rotate({angle}deg)\">\n\t\t<svg class=\"bottle-svg\" viewBox=\"0 0 64 200\" aria-hidden=\"true\">\n\t\t\t<defs>\n\t\t\t\t<linearGradient id=\"tod-glass\" x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\"><stop offset=\"0\" stop-color=\"#232323\" /><stop offset=\".28\" stop-color=\"#4b4b4b\" /><stop offset=\".55\" stop-color=\"#2e2e2e\" /><stop offset=\"1\" stop-color=\"#171717\" /></linearGradient>\n\t\t\t\t<linearGradient id=\"tod-cap\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"#fb923c\" /><stop offset=\"1\" stop-color=\"#ea580c\" /></linearGradient>\n\t\t\t</defs>\n\t\t\t<path d=\"M20 26 h24 v22 c0 8 10 12 10 24 v112 a10 10 0 0 1 -10 10 h-24 a10 10 0 0 1 -10 -10 v-112 c0 -12 10 -16 10 -24 z\" fill=\"url(#tod-glass)\" stroke=\"rgba(255,255,255,.08)\" stroke-width=\"1\" />\n\t\t\t<rect x=\"17\" y=\"6\" width=\"30\" height=\"22\" rx=\"5\" fill=\"url(#tod-cap)\" />\n\t\t\t<rect x=\"17\" y=\"24\" width=\"30\" height=\"4\" fill=\"#c2410c\" />\n\t\t\t<path d=\"M15 80 v96\" stroke=\"rgba(255,255,255,.45)\" stroke-width=\"3\" stroke-linecap=\"round\" />\n\t\t\t<path d=\"M15 60 v12\" stroke=\"rgba(255,255,255,.25)\" stroke-width=\"3\" stroke-linecap=\"round\" />\n\t\t</svg>\n\t</div>\n</div>\n\n<style>\n\t.stage { position: relative; width: 300px; height: 300px; margin: 0 auto; max-width: 100%; }\n\t.disc { position: absolute; inset: 0; border-radius: 50%; background: radial-gradient(circle at 50% 40%, #1c1c1c 0%, #121212 60%, #0c0c0c 100%); box-shadow: inset 0 0 0 1px #262626, inset 0 24px 50px rgba(0, 0, 0, 0.5), 0 30px 60px -30px rgba(0, 0, 0, 0.9); }\n\t.orbit { position: absolute; inset: 0; }\n\t.seat { position: absolute; width: 46px; height: 46px; margin: -23px 0 0 -23px; border-radius: 50%; box-shadow: 0 0 0 3px #0a0a0a; transition: transform 0.28s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.35s, filter 0.35s; will-change: transform; }\n\t.seat.tick { transform: scale(1.1); transition-duration: 0.08s; }\n\t.seat.hit { transform: scale(1.3); z-index: 2; }\n\t.seat.dim { opacity: 0.35; filter: saturate(0.4); }\n\t.halo { position: absolute; width: 130px; height: 130px; margin: -65px 0 0 -65px; border-radius: 50%; background: radial-gradient(circle, rgba(249, 115, 22, 0.32), rgba(249, 115, 22, 0.07) 45%, transparent 68%); opacity: 0; transition: opacity 0.5s; pointer-events: none; }\n\t.halo.on { opacity: 1; }\n\t.bottle-wrap { position: absolute; left: 50%; top: 50%; width: 0; height: 0; z-index: 1; }\n\t.bottle-svg { position: absolute; width: 58px; height: 182px; left: -29px; top: -100px; filter: drop-shadow(0 14px 18px rgba(0, 0, 0, 0.75)); }\n\t@media (prefers-reduced-motion: reduce) { .seat { transition: none; } }\n</style>\n","<script lang=\"ts\">\n\t/** The match chat as a floating dock — the duel dock pattern, orange.\n\t *  A pill bar (reactions · input · send · chat toggle) fixed above the\n\t *  bottom nav, the message panel slides up over it. One component for\n\t *  every viewport; reads the table's group room and appends live. */\n\timport { onMount, tick } from 'svelte';\n\timport { slide, fade } from 'svelte/transition';\n\timport { cubicOut } from 'svelte/easing';\n\timport { realtime } from '$lib/realtime/client';\n\timport { t, locale, LOCALE_INFO, DEFAULT_LOCALE } from '$lib/i18n';\n\n\ttype Msg = {\n\t\tid: string;\n\t\tsenderId: string;\n\t\tsenderNickname: string | null;\n\t\tsenderAvatarPath: string | null;\n\t\tkind: string;\n\t\tbody: string | null;\n\t\tcreatedAt: string;\n\t};\n\n\tlet {\n\t\troomId,\n\t\tmyId,\n\t\tme = null,\n\t\tcount = 0,\n\t\tnotes = []\n\t}: {\n\t\troomId: string;\n\t\tmyId: string | null;\n\t\t/** the viewer, for the optimistic echo of their own sends */\n\t\tme?: { nickname: string | null; avatarPath: string | null } | null;\n\t\t/** players in */\n\t\tcount?: number;\n\t\t/** system lines the page injects (round results) — rendered inline */\n\t\tnotes?: { id: string; text: string; at: number }[];\n\t} = $props();\n\n\tconst REACTIONS = ['🔥', '💀', '👀', '😂', '🍆'];\n\tconst MAX_LEN = 400;\n\n\tlet msgs = $state<Msg[]>([]);\n\tlet draft = $state('');\n\tlet sending = $state(false);\n\tlet err = $state('');\n\tlet open = $state(false);\n\tlet emojiOpen = $state(false);\n\tlet unread = $state(0);\n\tlet glyph = $state(0);\n\tlet listEl = $state<HTMLDivElement | null>(null);\n\n\tconst lines = $derived.by(() => {\n\t\tconst all: { id: string; at: number; m?: Msg; note?: string }[] = msgs\n\t\t\t.filter((m) => m.kind !== 'system' && m.body)\n\t\t\t.map((m) => ({ id: m.id, at: new Date(m.createdAt).getTime(), m }));\n\t\tfor (const n of notes) all.push({ id: n.id, at: n.at, note: n.text });\n\t\treturn all.sort((a, b) => a.at - b.at);\n\t});\n\t// english keeps the browser's own clock format; the other languages use theirs\n\tconst fmtTime = (iso: string) =>\n\t\tnew Date(iso).toLocaleTimeString(locale() === DEFAULT_LOCALE ? [] : LOCALE_INFO[locale()].hreflang, { hour: '2-digit', minute: '2-digit' });\n\n\tasync function scrollDown() {\n\t\tawait tick();\n\t\tif (listEl) listEl.scrollTop = listEl.scrollHeight;\n\t}\n\tfunction openPanel() {\n\t\topen = true;\n\t\tunread = 0;\n\t\tvoid scrollDown();\n\t}\n\n\tonMount(() => {\n\t\tlet alive = true;\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tconst res = await fetch(`/api/group/${roomId}/messages?limit=40`);\n\t\t\t\tif (!res.ok) return;\n\t\t\t\tconst j = (await res.json()) as { messages: Msg[] };\n\t\t\t\tif (!alive) return;\n\t\t\t\tmsgs = j.messages;\n\t\t\t} catch {\n\t\t\t\t/* the chat is optional */\n\t\t\t}\n\t\t})();\n\t\tconst unsub = realtime.subscribe(`room:${roomId}`, (event) => {\n\t\t\tif (event.type !== 'group_message_new') return;\n\t\t\tconst p = event.payload as Msg;\n\t\t\tif (msgs.some((m) => m.id === p.id)) return;\n\t\t\tmsgs = [...msgs, p];\n\t\t\tif (p.senderId !== myId && !open) unread += 1;\n\t\t\tif (open) void scrollDown();\n\t\t});\n\t\tconst rot = setInterval(() => (glyph = (glyph + 1) % REACTIONS.length), 3200);\n\t\tconst onDoc = (e: MouseEvent) => {\n\t\t\tif (emojiOpen && !(e.target as HTMLElement).closest('.emoji-wrap')) emojiOpen = false;\n\t\t};\n\t\tdocument.addEventListener('click', onDoc);\n\t\treturn () => {\n\t\t\talive = false;\n\t\t\tunsub();\n\t\t\tclearInterval(rot);\n\t\t\tdocument.removeEventListener('click', onDoc);\n\t\t};\n\t});\n\n\tasync function send(text: string) {\n\t\tconst body = text.trim().slice(0, MAX_LEN);\n\t\tif (!body || sending) return;\n\t\tsending = true;\n\t\terr = '';\n\t\ttry {\n\t\t\tconst fd = new FormData();\n\t\t\tfd.set('body', body);\n\t\t\tconst res = await fetch(`/api/group/${roomId}/send`, { method: 'POST', body: fd });\n\t\t\tconst j = (await res.json().catch(() => ({}))) as { id?: string; createdAt?: string; error?: string };\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new Error(j.error === 'rate_limited' ? t('slow down') : j.error === 'duplicate' ? t('you just said that') : t('could not send'));\n\t\t\t}\n\t\t\tdraft = '';\n\t\t\t// echo it now; the realtime copy dedups on id\n\t\t\tif (j.id && myId && !msgs.some((m) => m.id === j.id)) {\n\t\t\t\tmsgs = [\n\t\t\t\t\t...msgs,\n\t\t\t\t\t{\n\t\t\t\t\t\tid: j.id,\n\t\t\t\t\t\tsenderId: myId,\n\t\t\t\t\t\tsenderNickname: me?.nickname ?? null,\n\t\t\t\t\t\tsenderAvatarPath: me?.avatarPath ?? null,\n\t\t\t\t\t\tkind: 'text',\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\tcreatedAt: j.createdAt ?? new Date().toISOString()\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t\topenPanel();\n\t\t\t}\n\t\t} catch (e) {\n\t\t\terr = e instanceof Error ? e.message : t('could not send');\n\t\t\tsetTimeout(() => (err = ''), 2500);\n\t\t} finally {\n\t\t\tsending = false;\n\t\t}\n\t}\n\tfunction handleKey(e: KeyboardEvent) {\n\t\tif (e.key === 'Enter' && !e.shiftKey) {\n\t\t\te.preventDefault();\n\t\t\tvoid send(draft);\n\t\t}\n\t}\n</script>\n\n<aside class=\"dock\" class:dock--open={open}>\n\t{#if open}\n\t\t<div class=\"panel\" transition:slide={{ duration: 260, easing: cubicOut, axis: 'y' }}>\n\t\t\t<div class=\"panel-head\">\n\t\t\t\t<span class=\"head-dot\"></span>\n\t\t\t\t<span class=\"head-label\">{t('table chat')}</span>\n\t\t\t\t<span class=\"head-count\">{t('{n} in', { n: count })}</span>\n\t\t\t\t<button class=\"head-close\" type=\"button\" onclick={() => (open = false)} aria-label={t('close chat')}>\n\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M18 6L6 18M6 6l12 12\" /></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<div class=\"list\" bind:this={listEl}>\n\t\t\t\t{#if lines.length === 0}\n\t\t\t\t\t<p class=\"empty\">{t('crickets. someone has to start.')}</p>\n\t\t\t\t{:else}\n\t\t\t\t\t{#each lines as l (l.id)}\n\t\t\t\t\t\t{#if l.m}\n\t\t\t\t\t\t\t<div class=\"msg\">\n\t\t\t\t\t\t\t\t<span class=\"msg-head\"><span class=\"msg-who\">{l.m.senderNickname ?? t('anon')}</span><span class=\"msg-time\">{fmtTime(l.m.createdAt)}</span></span>\n\t\t\t\t\t\t\t\t<p class=\"msg-body\">{l.m.body}</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<p class=\"sys\">{l.note}</p>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</div>\n\t{/if}\n\n\t{#if err}<p class=\"err\">{err}</p>{/if}\n\n\t<div class=\"bar\">\n\t\t<div class=\"emoji-wrap\">\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"emoji-trigger\"\n\t\t\t\tclass:emoji-trigger--open={emojiOpen}\n\t\t\t\tonclick={() => (emojiOpen = !emojiOpen)}\n\t\t\t\taria-haspopup=\"true\"\n\t\t\t\taria-expanded={emojiOpen}\n\t\t\t\taria-label={t('reactions')}\n\t\t\t\tdisabled={!myId}\n\t\t\t>\n\t\t\t\t{#key glyph}<span class=\"rotating-glyph\" in:fade={{ duration: 220 }}>{REACTIONS[glyph]}</span>{/key}\n\t\t\t</button>\n\t\t\t{#if emojiOpen}\n\t\t\t\t<div class=\"emoji-popover\" role=\"menu\" transition:slide={{ duration: 140, easing: cubicOut, axis: 'y' }}>\n\t\t\t\t\t{#each REACTIONS as e (e)}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclass=\"e-btn\"\n\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\temojiOpen = false;\n\t\t\t\t\t\t\t\tvoid send(e);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-label={t('react with {emoji}', { emoji: e })}>{e}</button\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t</div>\n\n\t\t{#if myId}\n\t\t\t<form\n\t\t\t\tclass=\"bar-form\"\n\t\t\t\tonsubmit={(e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tvoid send(draft);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<textarea rows=\"1\" placeholder={t('say something…')} bind:value={draft} maxlength={MAX_LEN} onkeydown={handleKey} onfocus={openPanel} enterkeyhint=\"send\"></textarea>\n\t\t\t\t<button type=\"submit\" class=\"bar-send\" disabled={sending || !draft.trim()} aria-label={t('send')}>\n\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M22 2L11 13\" /><path d=\"M22 2l-7 20-4-9-9-4z\" /></svg>\n\t\t\t\t</button>\n\t\t\t</form>\n\t\t{:else}\n\t\t\t<p class=\"bar-locked\">{t('sign in to talk')}</p>\n\t\t{/if}\n\n\t\t<button type=\"button\" class=\"chat-toggle\" class:active={open} onclick={() => (open ? (open = false) : openPanel())} aria-label={t('toggle chat panel')}>\n\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" /></svg>\n\t\t\t{#if unread > 0 && !open}<span class=\"badge\">{unread > 99 ? '99+' : unread}</span>{/if}\n\t\t</button>\n\t</div>\n</aside>\n\n<style>\n\t.dock {\n\t\tposition: fixed; left: 50%; transform: translateX(-50%);\n\t\tz-index: 55;\n\t\tdisplay: flex; flex-direction: column; gap: 8px;\n\t\twidth: min(440px, calc(100vw - 32px));\n\t\tbottom: calc(env(safe-area-inset-bottom, 0px) + 84px);\n\t}\n\t/* live table = focus mode: the bottom nav is gone, the dock floors */\n\t:global(body.duel-focus-mode) .dock { bottom: calc(env(safe-area-inset-bottom, 0px) + 12px); }\n\t@media (min-width: 768px) { .dock { bottom: 18px; } }\n\n\t.panel {\n\t\tbackground: rgba(15, 15, 15, 0.85);\n\t\tbackdrop-filter: blur(28px) saturate(1.5);\n\t\t-webkit-backdrop-filter: blur(28px) saturate(1.5);\n\t\tborder: 1px solid var(--color-border);\n\t\tborder-radius: 16px;\n\t\toverflow: hidden;\n\t\tbox-shadow: 0 30px 60px -10px rgba(0, 0, 0, 0.6);\n\t\tdisplay: flex; flex-direction: column;\n\t\tmax-height: min(320px, 42vh);\n\t}\n\t.panel-head { display: inline-flex; align-items: center; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--color-border); }\n\t.head-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--color-orange); animation: pulse 2.5s ease-in-out infinite; }\n\t@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }\n\t.head-label { font-family: var(--font-display); font-size: 11px; font-weight: 700; letter-spacing: 0.2em; text-transform: uppercase; color: var(--color-text); }\n\t.head-count { margin-left: auto; padding: 2px 8px; border-radius: 999px; background: rgba(249, 115, 22, 0.15); color: var(--color-orange); font-size: 10px; font-weight: 700; }\n\t.head-close { width: 24px; height: 24px; border: 0; background: transparent; color: var(--color-muted); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; border-radius: 6px; }\n\t.head-close:hover { background: rgba(255, 255, 255, 0.05); color: var(--color-text); }\n\t.head-close svg { width: 14px; height: 14px; }\n\t.list { padding: 10px 14px; overflow-y: auto; display: flex; flex-direction: column; gap: 10px; scrollbar-width: thin; scrollbar-color: var(--color-border) transparent; }\n\t.list::-webkit-scrollbar { width: 4px; }\n\t.list::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: 2px; }\n\t.empty { text-align: center; padding: 20px 0; font-size: 11px; color: var(--color-muted); opacity: 0.5; font-style: italic; margin: 0; }\n\t.msg { display: flex; flex-direction: column; gap: 2px; }\n\t.msg-head { display: flex; align-items: baseline; gap: 8px; }\n\t.msg-who { font-family: var(--font-display); font-size: 11px; font-weight: 700; color: var(--color-orange); }\n\t.msg-time { font-size: 10px; color: var(--color-muted); opacity: 0.5; }\n\t.msg-body { font-size: 13px; line-height: 1.5; color: var(--color-text); overflow-wrap: anywhere; margin: 0; }\n\t.sys { text-align: center; font-size: 11px; color: var(--color-muted); margin: 0; }\n\t.err { margin: 0 12px; font-size: 11px; color: var(--color-coral, #ff4d6d); text-align: center; }\n\n\t.bar {\n\t\tposition: relative;\n\t\tdisplay: flex; align-items: center; gap: 6px;\n\t\tpadding: 6px 8px 6px 10px;\n\t\tbackground: rgba(18, 18, 18, 0.85);\n\t\tbackdrop-filter: blur(24px) saturate(1.5);\n\t\t-webkit-backdrop-filter: blur(24px) saturate(1.5);\n\t\tborder: 1px solid var(--color-border);\n\t\tborder-radius: 999px;\n\t\tbox-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.7);\n\t}\n\t.emoji-wrap { flex-shrink: 0; position: relative; }\n\t.emoji-trigger { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; padding: 0; border: 0; background: transparent; font-size: 19px; line-height: 1; cursor: pointer; border-radius: 50%; transition: background 0.2s, transform 0.15s; }\n\t.emoji-trigger:disabled { opacity: 0.4; cursor: default; }\n\t.rotating-glyph { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 19px; line-height: 1; pointer-events: none; }\n\t.emoji-trigger:hover { background: rgba(255, 255, 255, 0.08); }\n\t.emoji-trigger:active { transform: scale(0.92); transition-duration: 60ms; }\n\t.emoji-trigger--open { background: rgba(255, 255, 255, 0.1); }\n\t.emoji-popover { position: absolute; bottom: calc(100% + 10px); left: 0; display: inline-flex; gap: 2px; padding: 6px 8px; background: rgba(18, 18, 18, 0.92); backdrop-filter: blur(24px) saturate(1.5); -webkit-backdrop-filter: blur(24px) saturate(1.5); border: 1px solid var(--color-border); border-radius: 999px; box-shadow: 0 16px 30px -8px rgba(0, 0, 0, 0.7); z-index: 1; white-space: nowrap; }\n\t.e-btn { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; padding: 0; border: 0; background: transparent; font-size: 18px; line-height: 1; cursor: pointer; border-radius: 50%; transition: transform 0.15s, background 0.2s; flex-shrink: 0; }\n\t.e-btn:hover { background: rgba(255, 255, 255, 0.1); transform: scale(1.2); }\n\t.e-btn:active { transform: scale(0.82); transition-duration: 60ms; }\n\t.bar-form { display: flex; align-items: flex-end; gap: 6px; flex: 1; min-width: 0; }\n\t.bar-form textarea { flex: 1; min-width: 0; min-height: 34px; max-height: 88px; padding: 8px 14px; border: 0; background: transparent; color: var(--color-text); font-family: var(--font-body); font-size: 13px; line-height: 1.4; outline: 0; resize: none; overflow-y: auto; box-shadow: none; }\n\t.bar-form textarea:focus, .bar-form textarea:focus-visible { outline: 0; box-shadow: none; --tw-ring-shadow: 0 0 #0000; --tw-ring-color: transparent; }\n\t.bar-form textarea::placeholder { color: rgba(115, 115, 115, 0.6); }\n\t.bar-send { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; border: 0; border-radius: 50%; background: var(--color-orange); color: #0a0a0a; cursor: pointer; transition: transform 0.15s, background 0.2s; flex-shrink: 0; }\n\t.bar-send:hover:not(:disabled) { background: var(--color-orange-dark, #ea580c); }\n\t.bar-send:active:not(:disabled) { transform: scale(0.92); }\n\t.bar-send:disabled { opacity: 0.35; cursor: not-allowed; }\n\t.bar-send svg { width: 14px; height: 14px; }\n\t.bar-locked { flex: 1; min-width: 0; margin: 0; padding: 0 12px; font-size: 12px; color: var(--color-muted); }\n\t.chat-toggle { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; padding: 0; border: 0; border-radius: 999px; background: transparent; color: var(--color-muted); cursor: pointer; transition: background 0.2s, color 0.2s; flex-shrink: 0; }\n\t.chat-toggle:hover { background: rgba(255, 255, 255, 0.06); color: var(--color-text); }\n\t.chat-toggle.active { color: var(--color-text); background: rgba(255, 255, 255, 0.08); }\n\t.chat-toggle svg { width: 16px; height: 16px; }\n\t.badge { position: absolute; top: -2px; right: -2px; min-width: 16px; height: 16px; padding: 0 4px; border-radius: 999px; background: var(--color-orange); color: #0a0a0a; font-family: var(--font-display); font-size: 9px; font-weight: 800; display: inline-flex; align-items: center; justify-content: center; }\n\t@media (max-width: 480px) {\n\t\t.bar { gap: 4px; padding: 5px 6px 5px 8px; }\n\t\t.emoji-trigger, .e-btn, .bar-send, .chat-toggle { width: 32px; height: 32px; }\n\t\t.emoji-trigger, .rotating-glyph { font-size: 17px; }\n\t}\n\t@media (prefers-reduced-motion: reduce) { .head-dot { animation: none; } }\n</style>\n","<script lang=\"ts\">\n\t/** m:ss countdown + bar to a server deadline. Fires `onexpire` once when\n\t *  it hits zero so the page can ask the server to move on (the sweep is\n\t *  the backstop, this is what makes it feel instant). */\n\timport { onMount } from 'svelte';\n\n\tlet {\n\t\tto,\n\t\ttotalSec,\n\t\tonexpire,\n\t\tcompact = false\n\t}: { to: string | null; totalSec: number; onexpire?: () => void; compact?: boolean } = $props();\n\n\tlet now = $state(Date.now());\n\tlet firedFor = $state<string | null>(null);\n\tonMount(() => {\n\t\tconst iv = setInterval(() => (now = Date.now()), 250);\n\t\treturn () => clearInterval(iv);\n\t});\n\tconst leftMs = $derived(to ? Math.max(0, new Date(to).getTime() - now) : 0);\n\tconst text = $derived.by(() => {\n\t\tconst s = Math.ceil(leftMs / 1000);\n\t\treturn `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}`;\n\t});\n\tconst pct = $derived(totalSec > 0 ? Math.min(100, (leftMs / (totalSec * 1000)) * 100) : 0);\n\t$effect(() => {\n\t\tif (to && leftMs === 0 && firedFor !== to) {\n\t\t\tfiredFor = to;\n\t\t\tonexpire?.();\n\t\t}\n\t});\n</script>\n\n<div class=\"timer\" class:compact><span class=\"count\">{text}</span><span class=\"bar\"><i style=\"width:{pct}%\"></i></span></div>\n\n<style>\n\t.timer { display: flex; align-items: center; gap: 10px; }\n\t.count { font-family: var(--font-display); font-weight: 700; font-size: 22px; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }\n\t.bar { flex: 1; height: 6px; border-radius: 3px; background: #262626; overflow: hidden; }\n\t.bar i { display: block; height: 100%; background: var(--color-orange); transition: width 0.25s linear; }\n\t.compact { gap: 6px; }\n\t.compact .count { font-size: 15px; }\n\t.compact .bar { width: 44px; flex: none; height: 4px; }\n</style>\n","<script lang=\"ts\">\n\timport { onMount } from 'svelte';\n\timport { goto } from '$app/navigation';\n\timport { page } from '$app/state';\n\timport { activeMode } from '$lib/stores/activeMode';\n\timport { realtime } from '$lib/realtime/client';\n\timport DuelAvatar from '$lib/components/duel/DuelAvatar.svelte';\n\timport { getAvatarUrl } from '$lib/avatar';\n\timport TodBottle from '$lib/components/tod/TodBottle.svelte';\n\timport TodChat from '$lib/components/tod/TodChat.svelte';\n\timport TodTimer from '$lib/components/tod/TodTimer.svelte';\n\timport { shrinkPhoto } from '$lib/utils/shrink-photo';\n\timport ReportContentModal from '$lib/components/ReportContentModal.svelte';\n\timport {\n\t\tTOD_MAX_PLAYERS,\n\t\tTOD_MIN_PLAYERS,\n\t\tTOD_SPIN_SEC,\n\t\tTOD_PICK_SEC,\n\t\tTOD_TRUTH_SEC,\n\t\tTOD_DARE_SEC,\n\t\ttodVoteSec,\n\t\tTOD_XP,\n\t\tTOD_TRUTH_MAX_CHARS,\n\t\tTOD_DARE_VIDEO_MAX_SEC,\n\t\tTOD_BADGES,\n\t\ttype TodMatchView\n\t} from '$lib/types/tod';\n\timport { t, locale, LOCALE_INFO } from '$lib/i18n';\n\timport { msg } from '$lib/i18n/mark';\n\n\tlet { data } = $props();\n\n\t// server-seeded, then kept fresh by the match channel + a slow poll\n\tlet match = $state<TodMatchView>(data.match);\n\t$effect(() => {\n\t\tmatch = data.match;\n\t});\n\n\tfunction onTodEvent(event: { type: string; payload: unknown }) {\n\t\tif (event.type === 'tod_settled') {\n\t\t\tconst p = event.payload as { playerId: string; xp: number; nailed: boolean; streak: number; roundId: string };\n\t\t\tlastSettled = { ...p, at: Date.now() };\n\t\t\tconst who = match.players.find((x) => x.userId === p.playerId)?.nickname ?? t('someone');\n\t\t\tconst text = p.nailed\n\t\t\t\t? t('@{name} · nailed it · +{xp} xp', { name: who, xp: p.xp })\n\t\t\t\t: t('@{name} · delivered · +{xp} xp', { name: who, xp: p.xp });\n\t\t\tnotes = [...notes, { id: `n-${p.roundId}`, text, at: Date.now() }].slice(-12);\n\t\t}\n\t\tif (event.type === 'tod_chicken') {\n\t\t\tconst p = event.payload as { playerId: string; roundId: string };\n\t\t\tconst who = match.players.find((x) => x.userId === p.playerId)?.nickname ?? t('someone');\n\t\t\tnotes = [...notes, { id: `n-${p.roundId}`, text: t('@{name} chickened out · {xp} xp', { name: who, xp: TOD_XP.chicken }), at: Date.now() }].slice(-12);\n\t\t\tlastSettled = null;\n\t\t}\n\t\t// the next spin fires right after the settle, so the xp card stays up\n\t\t// through the spin + pick and clears once the next player is on a task\n\t\tif (event.type === 'tod_task') lastSettled = null;\n\t\tvoid refresh();\n\t}\n\n\t// The tod: topic is private: on a private table the policy refuses a viewer\n\t// who isn't seated yet, and the client remembers the refusal. Re-subscribing\n\t// once they take a seat is a fresh join that clears it, so a new player gets\n\t// the live spin / settle / task events instead of only the 12s poll.\n\tconst matchId = $derived(match.id);\n\tconst isPlayer = $derived(match.viewer.isPlayer);\n\t$effect(() => {\n\t\tvoid isPlayer;\n\t\treturn realtime.subscribe(`tod:${matchId}`, onTodEvent);\n\t});\n\n\tonMount(() => {\n\t\tactiveMode.set('tod');\n\t\tif (match.phase === 'spin' && match.current) spinSeen[match.current.id] = true;\n\t\tif (match.status === 'live' && !match.current) void tick();\n\t\tconst poll = setInterval(() => {\n\t\t\tif (match.status === 'live' || match.status === 'lobby') void refresh();\n\t\t}, 12_000);\n\t\treturn () => {\n\t\t\tactiveMode.set(null);\n\t\t\tclearInterval(poll);\n\t\t};\n\t});\n\n\t// settle + next spin land as two events within milliseconds; a refresh\n\t// asked for while one is in flight runs again afterwards instead of being\n\t// dropped, or the client would miss the spin and only catch up on the poll\n\t// live table = focus mode (the duel pattern): the bottom nav goes, the\n\t// chat dock is the only bottom chrome, the round fits one phone screen\n\t$effect(() => {\n\t\tconst on = match.status === 'live';\n\t\tdocument.body.classList.toggle('duel-focus-mode', on);\n\t\treturn () => document.body.classList.remove('duel-focus-mode');\n\t});\n\n\tlet refreshing = false;\n\tlet refreshAgain = false;\n\tasync function refresh() {\n\t\tif (refreshing) {\n\t\t\trefreshAgain = true;\n\t\t\treturn;\n\t\t}\n\t\trefreshing = true;\n\t\ttry {\n\t\t\tconst res = await fetch(`/api/tod/${match.code}`, { cache: 'no-store' });\n\t\t\tif (res.ok) {\n\t\t\t\tconst next = (await res.json()) as TodMatchView;\n\t\t\t\tif (next.phase === 'spin' && next.current) spinSeen[next.current.id] = true;\n\t\t\t\tmatch = next;\n\t\t\t}\n\t\t} catch {\n\t\t\t/* the poll retries */\n\t\t} finally {\n\t\t\trefreshing = false;\n\t\t\tif (refreshAgain) {\n\t\t\t\trefreshAgain = false;\n\t\t\t\tvoid refresh();\n\t\t\t}\n\t\t}\n\t}\n\n\t// ── actions ──\n\tlet busy = $state(false);\n\tlet actionError = $state('');\n\tconst ERR: Record<string, string> = {\n\t\tevent_closed: msg('tables are paused right now.'),\n\t\tin_match: msg(\"you're seated somewhere else already.\"),\n\t\tfull: msg('the table is full.'),\n\t\ttoo_few: msg('you need {n} players to start.'),\n\t\twrong_status: msg('that moment has passed.'),\n\t\twrong_phase: msg('that moment has passed.'),\n\t\tnot_up: msg(\"it's not your turn.\"),\n\t\tnot_host: msg('only the host can do that.'),\n\t\tnot_found: msg('no such player.'),\n\t\tno_prompt: msg('the deck ran dry. tell us.'),\n\t\tmoderation_blocked: msg(\"that upload didn't pass moderation. try another shot.\"),\n\t\ttoo_large: msg('that file is too big.'),\n\t\tbad_type: msg('jpg, png, webp, mp4, webm or mov.')\n\t};\n\t/** a known server code in the page language, else the code itself, else the fallback */\n\tconst errText = (code: unknown, fallback: string): string => {\n\t\tconst known = ERR[code as string];\n\t\treturn known ? t(known, { n: TOD_MIN_PLAYERS }) : ((code as string | undefined) ?? fallback);\n\t};\n\tasync function post(path: string, body?: unknown): Promise<boolean> {\n\t\tbusy = true;\n\t\tactionError = '';\n\t\ttry {\n\t\t\tconst res = await fetch(`/api/tod/${match.code}/${path}`, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\tbody: body ? JSON.stringify(body) : undefined\n\t\t\t});\n\t\t\tconst j = await res.json().catch(() => ({}));\n\t\t\tif (!res.ok) throw new Error(errText(j.error, t('something went wrong')));\n\t\t\tawait refresh();\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\tactionError = err instanceof Error ? err.message : t('something went wrong');\n\t\t\treturn false;\n\t\t} finally {\n\t\t\tbusy = false;\n\t\t}\n\t}\n\tlet ticking = false;\n\tasync function tick() {\n\t\tif (ticking) return;\n\t\tticking = true;\n\t\ttry {\n\t\t\tawait fetch(`/api/tod/${match.code}/tick`, { method: 'POST' });\n\t\t\tawait refresh();\n\t\t} finally {\n\t\t\tticking = false;\n\t\t}\n\t}\n\tasync function leave() {\n\t\tif (await post('leave')) await goto('/tod');\n\t}\n\n\t// lobby auto-start: one 1s clock; when it hits zero, poke the server so\n\t// the sweep's start shows without waiting on the 12s poll\n\tlet now = $state(Date.now());\n\tlet dueFired = $state<string | null>(null);\n\t$effect(() => {\n\t\tif (match.status !== 'lobby' || !match.autoStartAt) return;\n\t\tconst iv = setInterval(() => (now = Date.now()), 1000);\n\t\treturn () => clearInterval(iv);\n\t});\n\tconst autoLeft = $derived(match.autoStartAt ? new Date(match.autoStartAt).getTime() - now : 0);\n\tconst autoDue = $derived(!!match.autoStartAt && autoLeft <= 0);\n\tconst autoText = $derived.by(() => {\n\t\tconst s = Math.max(0, Math.ceil(autoLeft / 1000));\n\t\treturn `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}`;\n\t});\n\tconst autoPct = $derived(Math.max(0, Math.min(100, 100 - (autoLeft / 600_000) * 100)));\n\t$effect(() => {\n\t\tconst at = match.autoStartAt;\n\t\tif (at && autoDue && dueFired !== at) {\n\t\t\tdueFired = at;\n\t\t\tvoid tick();\n\t\t}\n\t});\n\n\t// lobby\n\tlet inviteName = $state('');\n\tlet invited = $state('');\n\tasync function invite() {\n\t\tconst n = inviteName.trim();\n\t\tif (!n) return;\n\t\tif (await post('invite', { nickname: n })) {\n\t\t\tinvited = t('@{name} got the ping.', { name: n });\n\t\t\tinviteName = '';\n\t\t}\n\t}\n\tlet copied = $state(false);\n\tfunction copyLink() {\n\t\tconst url = `${location.origin}/tod/${match.code}`;\n\t\tvoid navigator.clipboard?.writeText(url).then(() => {\n\t\t\tcopied = true;\n\t\t\tsetTimeout(() => (copied = false), 1800);\n\t\t});\n\t}\n\tfunction share() {\n\t\tconst url = `${location.origin}/tod/${match.code}`;\n\t\tif (navigator.share) void navigator.share({ title: match.name, url }).catch(() => {});\n\t\telse copyLink();\n\t}\n\n\t// live\n\tlet landedFor = $state<string | null>(null);\n\t/** rounds this client first saw during the spin → the bottle rolls; a\n\t *  round met later (page opened mid-round) just lands. clock-free on purpose. */\n\tlet spinSeen = $state<Record<string, true>>({});\n\tlet truthText = $state('');\n\tlet uploading = $state(false);\n\tlet uploadPct = $state('');\n\tlet fileInput = $state<HTMLInputElement | null>(null);\n\tlet lastSettled = $state<{ playerId: string; xp: number; nailed: boolean; streak: number; at: number } | null>(null);\n\tlet notes = $state<{ id: string; text: string; at: number }[]>([]);\n\tlet reportOpen = $state(false);\n\tlet reportRoundId = $state('');\n\n\tconst seated = $derived(match.players.filter((p) => !p.left));\n\tconst ranked = $derived([...seated].sort((a, b) => b.xp - a.xp || b.dares - a.dares));\n\tconst me = $derived(match.players.find((p) => p.userId === match.viewer.userId) ?? null);\n\tconst current = $derived(match.current);\n\t// which round's media has actually painted, so the reveal shows a loader\n\t// instead of a black box while a phone video streams in\n\tlet shotReadyFor = $state<string | null>(null);\n\t// a cached photo can finish before hydration attaches onload: ask the element\n\tconst shotAlreadyLoaded = (roundId: string) => (el: HTMLImageElement | HTMLVideoElement) => {\n\t\tconst done = el instanceof HTMLImageElement ? el.complete && el.naturalWidth > 0 : el.readyState >= 2;\n\t\tif (done) shotReadyFor = roundId;\n\t};\n\tconst upName = $derived(current ? `@${current.player.nickname ?? t('someone')}` : '');\n\tconst phaseTotal = $derived(\n\t\tmatch.phase === 'spin' ? TOD_SPIN_SEC : match.phase === 'pick' ? TOD_PICK_SEC : match.phase === 'task' ? (current?.choice === 'dare' ? TOD_DARE_SEC : TOD_TRUTH_SEC) : todVoteSec(current?.mediaMime)\n\t);\n\tconst SPICE: Record<string, string> = { spicy: msg('spicy'), x: msg('x-rated') };\n\tconst CHOICE: Record<string, string> = { truth: msg('truth'), dare: msg('dare') };\n\t/** truth / dare in the page language; nothing when the round has no choice yet */\n\tconst choiceLabel = (c: string | null | undefined) => (c ? t(CHOICE[c] ?? c) : '');\n\tconst spiceLabel = $derived(t(match.spice === 'x' ? SPICE.x : SPICE.spicy));\n\t/** one decimal in the page's language (1.2 → 1,2 in de) */\n\tconst dec = (x: number) =>\n\t\tx.toLocaleString(LOCALE_INFO[locale()].hreflang, { minimumFractionDigits: 1, maximumFractionDigits: 1 });\n\t// the pick buttons wait for the bottle: keyed on the round so a refresh mid-spin can't reset it\n\tconst bottleLanded = $derived(match.phase !== 'spin' || (!!current && landedFor === current.id));\n\tconst showPick = $derived(match.status === 'live' && (match.phase === 'pick' || (match.phase === 'spin' && bottleLanded)));\n\tconst segments = $derived.by(() => {\n\t\tconst out: ('done' | 'chicken' | 'now' | '')[] = [];\n\t\tconst byNo = new Map(match.history.map((h) => [h.roundNo, h.status]));\n\t\tfor (let i = 1; i <= match.roundsTotal; i++) {\n\t\t\tif (i === match.roundNo && match.status === 'live') out.push('now');\n\t\t\telse if (i < match.roundNo || match.status === 'over') out.push(byNo.get(i) === 'chicken' ? 'chicken' : 'done');\n\t\t\telse out.push('');\n\t\t}\n\t\treturn out;\n\t});\n\n\tasync function pickFile(e: Event) {\n\t\tconst input = e.currentTarget as HTMLInputElement;\n\t\tconst picked = input.files?.[0];\n\t\tinput.value = '';\n\t\tif (!picked || uploading) return;\n\t\t// photos go up at 1600px so the table isn't waiting on a 6 MB original\n\t\tconst file = picked.type.startsWith('image/') ? await shrinkPhoto(picked) : picked;\n\t\tactionError = '';\n\t\tif (file.type.startsWith('video/')) {\n\t\t\tconst dur = await videoDuration(file).catch(() => 0);\n\t\t\tif (dur > TOD_DARE_VIDEO_MAX_SEC + 1) {\n\t\t\t\tactionError = t('keep the video under {n} seconds.', { n: TOD_DARE_VIDEO_MAX_SEC });\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tuploading = true;\n\t\tuploadPct = t('uploading…');\n\t\ttry {\n\t\t\tconst urlRes = await fetch(`/api/tod/${match.code}/upload-url`, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ mimeType: file.type, size: file.size })\n\t\t\t});\n\t\t\tconst u = await urlRes.json().catch(() => ({}));\n\t\t\tif (!urlRes.ok) throw new Error(errText(u.error, t('upload init failed')));\n\t\t\tconst put = await fetch(u.signedUrl, { method: 'PUT', headers: { 'content-type': file.type }, body: await file.arrayBuffer() });\n\t\t\tif (!put.ok) throw new Error(t('upload failed'));\n\t\t\tuploadPct = t('checking…');\n\t\t\tconst res = await fetch(`/api/tod/${match.code}/dare`, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ path: u.path, mimeType: file.type })\n\t\t\t});\n\t\t\tconst j = await res.json().catch(() => ({}));\n\t\t\tif (!res.ok) throw new Error(errText(j.error, t('could not send')));\n\t\t\tawait refresh();\n\t\t} catch (err) {\n\t\t\tactionError = err instanceof Error ? err.message : t('could not send');\n\t\t} finally {\n\t\t\tuploading = false;\n\t\t\tuploadPct = '';\n\t\t}\n\t}\n\tfunction videoDuration(file: File): Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst v = document.createElement('video');\n\t\t\tv.preload = 'metadata';\n\t\t\tv.onloadedmetadata = () => {\n\t\t\t\tURL.revokeObjectURL(v.src);\n\t\t\t\tresolve(v.duration);\n\t\t\t};\n\t\t\tv.onerror = () => reject(new Error('bad video'));\n\t\t\tv.src = URL.createObjectURL(file);\n\t\t});\n\t}\n\n\t// over\n\tconst podium = $derived(ranked.slice(0, 3));\n\tconst winner = $derived(ranked[0] ?? null);\n\tconst duration = $derived.by(() => {\n\t\tif (!match.startedAt || !match.endedAt) return '';\n\t\tconst m = Math.round((new Date(match.endedAt).getTime() - new Date(match.startedAt).getTime()) / 60000);\n\t\treturn m >= 60 ? t('{h}h {m}m', { h: Math.floor(m / 60), m: m % 60 }) : t('{m}m', { m });\n\t});\n\t// the badge copy lives in $lib/types/tod as English; shown through t()\n\tconst badgeName = (key: string) => {\n\t\tconst badge = TOD_BADGES.find((b) => b.key === key);\n\t\treturn badge ? t(badge.name) : key;\n\t};\n\tconst badgeHow = (key: string) => {\n\t\tconst badge = TOD_BADGES.find((b) => b.key === key);\n\t\treturn badge ? t(badge.how) : '';\n\t};\n\tconst nick = (id: string) => `@${match.players.find((p) => p.userId === id)?.nickname ?? t('someone')}`;\n\tasync function rematch() {\n\t\tconst res = await fetch('/api/tod/create', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\tbody: JSON.stringify({ name: match.name, roundsTotal: match.roundsTotal, spice: match.spice, isPublic: true })\n\t\t});\n\t\tconst j = await res.json().catch(() => ({}));\n\t\tif (!res.ok) {\n\t\t\tactionError = errText(j.error, t('could not open a new table'));\n\t\t\treturn;\n\t\t}\n\t\tawait goto(`/tod/${j.code}`);\n\t}\n</script>\n\n<svelte:head><title>{match.name} · {t('truth or dare')} · ratemyd</title></svelte:head>\n\n<main class=\"tod-page\" class:has-dock={(match.status === 'live' || match.status === 'lobby') && match.viewer.isPlayer && !!match.roomId}>\n\t{#if match.status === 'lobby'}\n\t\t<!-- ── lobby ── -->\n\t\t<div class=\"narrow\">\n\t\t\t<div class=\"top\">\n\t\t\t\t<div>\n\t\t\t\t\t<div class=\"eyebrow\">{t('truth or dare')} · {spiceLabel} · {t('{n} rounds', { n: match.roundsTotal })}</div>\n\t\t\t\t\t<h1 class=\"t big\">{match.name}</h1>\n\t\t\t\t\t<div class=\"s\">{#each t('table code {code} · hosted by @{name}', { name: match.host.nickname ?? t('someone') }).split('{code}') as part, i (i)}{#if i}<b class=\"code\">{match.code}</b>{/if}{part}{/each}</div>\n\t\t\t\t</div>\n\t\t\t\t<a href=\"/tod\" class=\"btn btn-ghost small\">{t('all tables')}</a>\n\t\t\t</div>\n\n\t\t\t<div class=\"panel\">\n\t\t\t\t{#if page.url.searchParams.get('seated') && !match.viewer.isHost}\n\t\t\t\t\t<div class=\"seated-note\">{#each t(\"you're at @{name}'s table — it was already filling up. {link}\", { name: match.host.nickname ?? t('the host') }).split('{link}') as part, i (i)}{#if i}<a href=\"/tod\">{t('rather open your own?')}</a>{/if}{part}{/each}</div>\n\t\t\t\t{/if}\n\t\t\t\t<div class=\"lbl\">{t('your table · {n} of {max}', { n: seated.length, max: TOD_MAX_PLAYERS })}</div>\n\t\t\t\t<div class=\"slots\">\n\t\t\t\t\t{#each seated as p (p.userId)}\n\t\t\t\t\t\t<div class=\"slot\">\n\t\t\t\t\t\t\t<DuelAvatar nickname={p.nickname} avatarUrl={getAvatarUrl(p.avatarPath)} size={44} link={false} />\n\t\t\t\t\t\t\t<b>{p.nickname ?? t('anon')}</b>\n\t\t\t\t\t\t\t{#if p.isHost}<span class=\"chip chip-a tiny\">{t('host')}</span>\n\t\t\t\t\t\t\t{:else if match.viewer.isHost}<button type=\"button\" class=\"chip tiny kick\" onclick={() => void post('kick', { userId: p.userId })} disabled={busy}>{t('kick')}</button>{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/each}\n\t\t\t\t\t{#each Array(Math.max(0, TOD_MAX_PLAYERS - seated.length)) as _, i (i)}\n\t\t\t\t\t\t<div class=\"slot empty\"><span class=\"av-empty\">+</span><b class=\"muted\">{t('open')}</b></div>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\n\t\t\t\t{#if match.viewer.isHost}\n\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-ghost\" onclick={share}>{copied ? t('copied') : t('invite link')}</button>\n\t\t\t\t\t\t<button type=\"button\" class=\"btn\" class:btn-cd={!!match.autoStartAt} style={match.autoStartAt ? `--p:${autoPct}%` : ''} onclick={() => void post('start')} disabled={busy || seated.length < TOD_MIN_PLAYERS}>\n\t\t\t\t\t\t\t<span>{t('start with {n}', { n: seated.length })}</span>\n\t\t\t\t\t\t\t{#if match.autoStartAt}<small>{autoDue ? t('starting…') : t('auto-starts in {time}', { time: autoText })}</small>{/if}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<form class=\"invite\" onsubmit={(e) => { e.preventDefault(); void invite(); }}>\n\t\t\t\t\t\t<input class=\"input\" bind:value={inviteName} placeholder={t('invite by nickname')} maxlength=\"40\" />\n\t\t\t\t\t\t<button type=\"submit\" class=\"chip\" disabled={busy}>{t('ping')}</button>\n\t\t\t\t\t</form>\n\t\t\t\t\t{#if invited}<div class=\"s\">{invited}</div>{/if}\n\t\t\t\t\t<div class=\"s\">{t('min {n} to start · everyone gets a push when it begins', { n: TOD_MIN_PLAYERS })}{#if !match.isPublic} · {t('unlisted: only the link gets people here')}{/if}</div>\n\t\t\t\t\t<button type=\"button\" class=\"close-table\" onclick={leave} disabled={busy}>{t('close this table')}</button>\n\t\t\t\t{:else if match.viewer.isPlayer}\n\t\t\t\t\t<div class=\"row\"><button type=\"button\" class=\"btn btn-ghost\" onclick={share}>{copied ? t('copied') : t('invite link')}</button><button type=\"button\" class=\"btn btn-ghost\" onclick={leave} disabled={busy}>{t('leave')}</button></div>\n\t\t\t\t\t{#if match.autoStartAt}\n\t\t\t\t\t\t<div class=\"cd-ghost\"><span class=\"n\" class:due={autoDue}>{autoDue ? t('starting…') : autoText}</span><small>{autoDue ? t('the bottle comes out any second') : t('until it starts · unless @{name} goes sooner', { name: match.host.nickname ?? t('the host') })}</small></div>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<div class=\"s\">{t(\"waiting for @{name} to start. you'll get a push.\", { name: match.host.nickname ?? t('the host') })}</div>\n\t\t\t\t\t{/if}\n\t\t\t\t{:else if data.isLoggedIn}\n\t\t\t\t\t<div class=\"row\"><button type=\"button\" class=\"btn\" onclick={() => void post('join')} disabled={busy || seated.length >= TOD_MAX_PLAYERS}>{seated.length >= TOD_MAX_PLAYERS ? t('full') : t('take a seat')}</button></div>\n\t\t\t\t\t{#if match.autoStartAt}\n\t\t\t\t\t\t<div class=\"cd-ghost\"><span class=\"n\" class:due={autoDue}>{autoDue ? t('starting…') : autoText}</span><small>{autoDue ? t('the bottle comes out any second') : t('until the table starts without you')}</small></div>\n\t\t\t\t\t{/if}\n\t\t\t\t{:else}\n\t\t\t\t\t<div class=\"row\"><a href=\"/auth/sign-in?next=/tod/{match.code}\" class=\"btn\">{t('sign in to sit down')}</a></div>\n\t\t\t\t{/if}\n\t\t\t\t{#if actionError}<div class=\"err\">{actionError}</div>{/if}\n\t\t\t</div>\n\n\t\t</div>\n\t{:else if match.status === 'live' && current}\n\t\t<!-- ── live ── -->\n\t\t<section class=\"desk\">\n\t\t\t<header class=\"desk-head\">\n\t\t\t\t<div class=\"dh-l\"><div class=\"eyebrow\">{match.name} · {spiceLabel} · {t('{n} of {max}', { n: seated.length, max: TOD_MAX_PLAYERS })}</div><div class=\"t\">{t('round {n} of {total}', { n: match.roundNo, total: match.roundsTotal })}</div></div>\n\t\t\t\t<div class=\"dh-prog\" style=\"--n:{match.roundsTotal}\" aria-label={t('rounds')}>\n\t\t\t\t\t{#each segments as s, i (i)}<span class=\"seg\" class:done={s === 'done' || s === 'chicken'} class:chicken={s === 'chicken'} class:now={s === 'now'}></span>{/each}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"dh-r\">\n\t\t\t\t\t<div class=\"dh-timer\"><TodTimer to={match.phaseEndsAt} totalSec={phaseTotal} onexpire={tick} compact /></div>\n\t\t\t\t\t{#if match.viewer.isPlayer}<button type=\"button\" class=\"btn btn-ghost small\" onclick={leave} disabled={busy}>{t('leave')}</button>{:else}<a href=\"/tod\" class=\"btn btn-ghost small\">{t('tables')}</a>{/if}\n\t\t\t\t</div>\n\t\t\t</header>\n\t\t\t<div class=\"desk3\">\n\t\t\t\t<aside class=\"col players\">\n\t\t\t\t\t<div class=\"col-head\"><span class=\"lbl\">{t('players')}</span><span class=\"lbl\">{t('match xp')}</span></div>\n\t\t\t\t\t<div class=\"plist\">\n\t\t\t\t\t\t{#each ranked as p, i (p.userId)}\n\t\t\t\t\t\t\t<div class=\"pr\" class:up={p.userId === current.player.userId}>\n\t\t\t\t\t\t\t\t<span class=\"pn\">{i + 1}</span>\n\t\t\t\t\t\t\t\t<DuelAvatar nickname={p.nickname} avatarUrl={getAvatarUrl(p.avatarPath)} size={28} link={false} />\n\t\t\t\t\t\t\t\t<span class=\"pname\">{p.nickname ?? t('anon')}</span>\n\t\t\t\t\t\t\t\t{#if p.userId === current.player.userId}<span class=\"chip chip-a tiny\">{t('up')}</span>{:else if p.isHost}<span class=\"chip tiny\">{t('host')}</span>{/if}\n\t\t\t\t\t\t\t\t<b class:neg={p.xp < 0}>{p.xp}</b>\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\t\t\t\t\t{#if match.history[0]}\n\t\t\t\t\t\t{@const h = match.history[0]}\n\t\t\t\t\t\t{@const hName = h.player.nickname ?? t('anon')}\n\t\t\t\t\t\t{@const hXp = `${h.xp > 0 ? '+' : ''}${h.xp}`}\n\t\t\t\t\t\t<div class=\"col-foot\"><span class=\"s\">{h.status === 'chicken' ? t('last round · @{name} chickened out · {xp}', { name: hName, xp: hXp }) : t('last round · @{name} delivered · {up}–{down} · {xp}', { name: hName, up: h.votesUp, down: h.votesDown, xp: hXp })}</span></div>\n\t\t\t\t\t{/if}\n\t\t\t\t</aside>\n\n\t\t\t\t<main class=\"col stagecol\">\n\t\t\t\t\t{#if match.phase === 'spin' || match.phase === 'pick'}\n\t\t\t\t\t\t<div class=\"col-head\"><span class=\"lbl\">{t('the spin')}</span><span class=\"lbl\">{t('everyone sees the same roll')}</span></div>\n\t\t\t\t\t\t<TodBottle players={match.players} pickedUserId={current.player.userId} roundKey={current.id} roll={!!spinSeen[current.id]} onlanded={() => (landedFor = current?.id ?? null)} />\n\t\t\t\t\t\t<div class=\"picked\">\n\t\t\t\t\t\t\t<div class=\"lbl\">{t('the bottle stops on')}</div>\n\t\t\t\t\t\t\t<div class=\"t big\" class:pop={bottleLanded}>{bottleLanded ? upName : '…'}</div>\n\t\t\t\t\t\t\t<div class=\"s\">{bottleLanded ? (match.viewer.isUp ? t('{n} seconds to pick. no pick = chicken.', { n: TOD_PICK_SEC }) : t('{name} is picking.', { name: upName })) : t('spinning. everyone sees the same roll.')}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{#if showPick && match.viewer.isUp}\n\t\t\t\t\t\t\t<div class=\"two\">\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn\" onclick={() => void post('choose', { choice: 'truth' })} disabled={busy}><span>{t(CHOICE.truth)}</span><small>{t('+{xp} xp · answer in text', { xp: TOD_XP.truth })}</small></button>\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-dare\" onclick={() => void post('choose', { choice: 'dare' })} disabled={busy}><span>{t(CHOICE.dare)}</span><small>{t('+{xp} xp · photo or video', { xp: TOD_XP.dare })}</small></button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<div class=\"wide desk-only\"><TodTimer to={match.phaseEndsAt} totalSec={phaseTotal} /></div>\n\t\t\t\t\t{:else if match.phase === 'task'}\n\t\t\t\t\t\t<div class=\"col-head\"><span class=\"lbl\">{upName} · {choiceLabel(current.choice)}</span><span class=\"lbl\">{t('{n} min', { n: current.choice === 'dare' ? Math.round(TOD_DARE_SEC / 60) : Math.round(TOD_TRUTH_SEC / 60) })}</span></div>\n\t\t\t\t\t\t<div class=\"wide\">\n\t\t\t\t\t\t\t<div class=\"card\">\n\t\t\t\t\t\t\t\t<span class=\"chip\" class:chip-a={current.choice === 'dare'}>{choiceLabel(current.choice)} · {t(current.prompt?.tier === 'x' ? SPICE.x : SPICE.spicy)}</span>\n\t\t\t\t\t\t\t\t<!-- the card itself reads in the viewer's language: its English text is the catalog key -->\n\t\t\t\t\t\t\t\t{#if current.prompt?.title}<div class=\"lbl\" style=\"margin-top:10px\">{t(current.prompt.title)}</div>{/if}\n\t\t\t\t\t\t\t\t<div class=\"q\">{current.prompt?.text ? t(current.prompt.text) : ''}</div>\n\t\t\t\t\t\t\t\t{#if match.viewer.isUp}\n\t\t\t\t\t\t\t\t\t{#if current.choice === 'truth'}\n\t\t\t\t\t\t\t\t\t\t<textarea class=\"field\" bind:value={truthText} maxlength={TOD_TRUTH_MAX_CHARS} placeholder={t('type it. max {n} characters, the table only.', { n: TOD_TRUTH_MAX_CHARS })} rows=\"4\"></textarea>\n\t\t\t\t\t\t\t\t\t\t<div class=\"s\">{truthText.length} / {TOD_TRUTH_MAX_CHARS}</div>\n\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t<div class=\"s\">{t(\"one photo or a video up to {n} seconds. only this table sees it, and it's gone 48 hours after the match ends.\", { n: TOD_DARE_VIDEO_MAX_SEC })}</div>\n\t\t\t\t\t\t\t\t\t\t<input bind:this={fileInput} type=\"file\" accept=\"image/jpeg,image/png,image/webp,video/mp4,video/webm,video/quicktime\" class=\"hidden\" onchange={pickFile} />\n\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"upload\" onclick={() => fileInput?.click()} disabled={uploading}><b>{uploadPct || t('drop it here')}</b>{t('camera or gallery · jpg, png, webp, mp4')}</button>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t<div class=\"s\" style=\"margin-top:12px\">{current.choice === 'dare' ? t(\"{name} is on it. the shot isn't visible until it lands.\", { name: upName }) : t('{name} is on it. the answer shows when it lands.', { name: upName })}</div>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{#if match.viewer.isUp}\n\t\t\t\t\t\t\t<div class=\"row wide\">\n\t\t\t\t\t\t\t\t{#if current.choice === 'truth'}\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn\" onclick={() => void post('truth', { text: truthText })} disabled={busy || truthText.trim().length < 2}>{t('send it')}</button>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-ghost\" onclick={() => void post('chicken')} disabled={busy || uploading}>{t('chicken out · {xp} xp', { xp: TOD_XP.chicken })}</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<div class=\"wide desk-only\"><TodTimer to={match.phaseEndsAt} totalSec={phaseTotal} /></div>\n\t\t\t\t\t{:else if match.phase === 'vote'}\n\t\t\t\t\t\t<div class=\"col-head\"><span class=\"lbl\">{t('the reveal')}</span><span class=\"lbl\">{t('the table votes')}</span></div>\n\t\t\t\t\t\t<div class=\"wide\">\n\t\t\t\t\t\t\t<div class=\"reveal\">\n\t\t\t\t\t\t\t\t{#if current.choice === 'dare'}\n\t\t\t\t\t\t\t\t\t{#if current.mediaUrl}\n\t\t\t\t\t\t\t\t\t\t<div class=\"shot-wrap\" class:loading={shotReadyFor !== current.id}>\n\t\t\t\t\t\t\t\t\t\t\t{#if current.mediaMime?.startsWith('video/')}\n\t\t\t\t\t\t\t\t\t\t\t\t<!-- svelte-ignore a11y_media_has_caption -->\n\t\t\t\t\t\t\t\t\t\t\t\t<video class=\"shot\" src={current.mediaUrl} controls playsinline autoplay muted loop preload=\"auto\" {@attach shotAlreadyLoaded(current.id)} onloadeddata={() => (shotReadyFor = current.id)}></video>\n\t\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t\t<img class=\"shot\" src={current.mediaUrl} alt={t(\"{name}'s dare\", { name: upName })} {@attach shotAlreadyLoaded(current.id)} onload={() => (shotReadyFor = current.id)} />\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\t{#if shotReadyFor !== current.id}\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"shot-loading\" aria-live=\"polite\"><span class=\"spin\" aria-hidden=\"true\"></span>{t('loading the shot…')}</div>\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t<div class=\"shot ph\">{match.viewer.isPlayer ? t('the shot is loading…') : t('players only')}</div>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t<div class=\"answer\"><div class=\"lbl\">{current.prompt?.text ? t(current.prompt.text) : ''}</div><p>{current.answerText}</p></div>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t<div class=\"foot\">\n\t\t\t\t\t\t\t\t\t<DuelAvatar nickname={current.player.nickname} avatarUrl={getAvatarUrl(current.player.avatarPath)} size={28} link={false} />\n\t\t\t\t\t\t\t\t\t<div class=\"who\"><div class=\"nm\">{t('{name} did it', { name: upName })}</div><div class=\"meta\">{current.prompt?.title != null ? t(current.prompt.title) : choiceLabel(current.choice)}</div></div>\n\t\t\t\t\t\t\t\t\t{#if !match.viewer.isUp && match.viewer.isPlayer}<button type=\"button\" class=\"chip\" onclick={() => { reportRoundId = current.id; reportOpen = true; }}>{t('report')}</button>{/if}\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\t<div class=\"wide\">\n\t\t\t\t\t\t\t<div class=\"lbl\" style=\"margin-bottom:8px\">{t('the table votes')}</div>\n\t\t\t\t\t\t\t<div class=\"votes\">\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn\" class:dimmed={current.myVote === false} onclick={() => void post('vote', { up: true })} disabled={busy || match.viewer.isUp || !match.viewer.isPlayer}>{t('nailed it · {n}', { n: current.votesUp })}</button>\n\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-ghost\" class:dimmed={current.myVote === true} onclick={() => void post('vote', { up: false })} disabled={busy || match.viewer.isUp || !match.viewer.isPlayer}>{t('weak · {n}', { n: current.votesDown })}</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"wide desk-only\"><TodTimer to={match.phaseEndsAt} totalSec={todVoteSec(current?.mediaMime)} /></div>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if lastSettled && (match.phase === 'spin' || match.phase === 'pick')}\n\t\t\t\t\t\t<div class=\"wide\"><div class=\"xp\"><div><div class=\"lbl\">{t('{name} earned', { name: nick(lastSettled.playerId) })}</div><div class=\"s\">{lastSettled.nailed ? t('nailed it bonus') : t('delivered')}{lastSettled.streak > 1 ? ` · ${t('streak ×{x}', { x: dec(Math.min(TOD_XP.streakMax, 1 + TOD_XP.streakStep * (lastSettled.streak - 1))) })}` : ''}</div></div><b>+{lastSettled.xp} xp</b></div></div>\n\t\t\t\t\t{/if}\n\t\t\t\t\t{#if actionError}<div class=\"err wide\">{actionError}</div>{/if}\n\t\t\t\t</main>\n\n\t\t\t</div>\n\t\t</section>\n\t{:else if match.status === 'live'}\n\t\t<!-- live but no current round (pointer being repaired): hold, don't say closed -->\n\t\t<div class=\"narrow\">\n\t\t\t<div class=\"panel\"><div class=\"eyebrow\">{t('truth or dare')}</div><div class=\"t big\">{t('the bottle is being reset.')}</div><div class=\"s\">{t('hang on a second, the next spin is coming.')}</div></div>\n\t\t</div>\n\t{:else if match.status === 'over'}\n\t\t<!-- ── over ── -->\n\t\t<section class=\"desk over\">\n\t\t\t<div class=\"over-top\">\n\t\t\t\t<div>\n\t\t\t\t\t<div class=\"eyebrow\">{t('match over · {n} rounds', { n: match.roundNo })}{duration ? ` · ${duration}` : ''}</div>\n\t\t\t\t\t<h1 class=\"over-h\">{winner ? `@${winner.nickname ?? t('anon')}` : t('nobody')}<br /><span>{t('took the match.')}</span></h1>\n\t\t\t\t\t<div class=\"s\">{winner ? t('{dares} dares, {truths} truths, {chickens} chickened. the bottle knew.', { dares: winner.dares, truths: winner.truths, chickens: winner.chickens }) : t('the table emptied out.')}</div>\n\t\t\t\t</div>\n\t\t\t\t{#if podium.length}\n\t\t\t\t\t<div class=\"podium\">\n\t\t\t\t\t\t{#each [podium[1], podium[0], podium[2]] as p, i (i)}\n\t\t\t\t\t\t\t{#if p}\n\t\t\t\t\t\t\t\t<div class=\"pd\" class:p1={i === 1} class:p2={i === 0} class:p3={i === 2}>\n\t\t\t\t\t\t\t\t\t<DuelAvatar nickname={p.nickname} avatarUrl={getAvatarUrl(p.avatarPath)} size={40} link={false} />\n\t\t\t\t\t\t\t\t\t<b>{p.nickname ?? t('anon')}</b><i>{p.xp > 0 ? '+' : ''}{p.xp}</i><em>{i === 1 ? 1 : i === 0 ? 2 : 3}</em>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t\t<div class=\"over-body\">\n\t\t\t\t<div class=\"panel\">\n\t\t\t\t\t<div class=\"lbl\">{t('everyone')}</div>\n\t\t\t\t\t<div class=\"roster\">\n\t\t\t\t\t\t{#each ranked as p, i (p.userId)}\n\t\t\t\t\t\t\t<div class=\"r\"><span class=\"lbl\" style=\"width:14px\">{i + 1}</span><span class=\"rn\">{p.nickname ?? t('anon')}{p.userId === match.viewer.userId ? ` · ${t('you')}` : ''}</span><b class:neg={p.xp < 0}>{p.xp > 0 ? '+' : ''}{p.xp}</b></div>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t\t{#if seated.length >= TOD_MAX_PLAYERS}<div class=\"s\">{t('full match bonus +{xp} to all eight.', { xp: TOD_XP.fullMatch })}</div>{/if}\n\t\t\t\t\t{#if me}<div class=\"s\">{t('you: {truths} truths · {dares} dares · {chickens} chickened', { truths: me.truths, dares: me.dares, chickens: me.chickens })}</div>{/if}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"panel\">\n\t\t\t\t\t<div class=\"lbl\">{t('unlocked in this match')}</div>\n\t\t\t\t\t{#if match.badges.length === 0}\n\t\t\t\t\t\t<div class=\"s\" style=\"margin-top:6px\">{t('no new badges this time.')}</div>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<div class=\"ach\">\n\t\t\t\t\t\t\t{#each match.badges as b (b.userId + b.key)}\n\t\t\t\t\t\t\t\t<div class=\"toast\"><span class=\"ico\">ACH</span><div><div class=\"nm\">{badgeName(b.key)}</div><p class=\"s\">{nick(b.userId)} · {badgeHow(b.key)}</p></div></div>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"panel\">\n\t\t\t\t\t<div class=\"lbl\">{t('week board')}</div>\n\t\t\t\t\t<div class=\"s\" style=\"margin-top:6px\">{t(\"match xp is on this week's board. top 10 at the monday reset keep the badge.\")}</div>\n\t\t\t\t\t<div class=\"row\" style=\"margin-top:12px\"><button type=\"button\" class=\"btn\" onclick={share}>{copied ? t('copied') : t('share the match')}</button>{#if data.isLoggedIn}<button type=\"button\" class=\"btn btn-ghost\" onclick={rematch}>{t('rematch')}</button>{/if}</div>\n\t\t\t\t\t<a href=\"/tod\" class=\"s link\">{t('the week board →')}</a>\n\t\t\t\t\t{#if actionError}<div class=\"err\">{actionError}</div>{/if}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</section>\n\t{:else}\n\t\t<div class=\"narrow\">\n\t\t\t<div class=\"panel\"><div class=\"eyebrow\">{t('truth or dare')}</div><div class=\"t big\">{t('this table is closed.')}</div><div class=\"s\">{t('the host left or it went quiet for a day.')}</div><div class=\"row\" style=\"margin-top:14px\"><a href=\"/tod\" class=\"btn\">{t('open tables')}</a></div></div>\n\t\t</div>\n\t{/if}\n\n\t{#if (match.status === 'live' || match.status === 'lobby') && match.roomId && match.viewer.isPlayer}\n\t\t<!-- floating chat dock, the duel dock pattern: every viewport, lobby and live -->\n\t\t<TodChat roomId={match.roomId} myId={match.viewer.userId} me={me} count={seated.length} {notes} />\n\t{/if}\n</main>\n\n{#if reportOpen}\n\t<ReportContentModal bind:open={reportOpen} entityType=\"tod_round\" entityId={reportRoundId} onclose={() => (reportOpen = false)} />\n{/if}\n\n<style>\n\t.tod-page { max-width: 1180px; margin: 0 auto; padding: 84px 16px 120px; color: #f0f0f0; }\n\t@media (min-width: 768px) { .tod-page { padding: 100px 20px 120px; } }\n\t.narrow { max-width: 560px; margin: 0 auto; display: flex; flex-direction: column; gap: 14px; }\n\t.top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }\n\t.eyebrow { font-family: var(--font-display); font-size: 11px; font-weight: 700; letter-spacing: 0.18em; text-transform: uppercase; color: var(--color-orange); }\n\t.lbl { font-family: var(--font-display); font-size: 10px; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: #8a8a8a; }\n\t.t { font-family: var(--font-display); font-weight: 700; font-size: 20px; letter-spacing: -0.02em; line-height: 1.05; margin-top: 4px; }\n\t.t.big { font-size: 28px; }\n\t.s { font-size: 12px; color: #8a8a8a; margin-top: 4px; line-height: 1.45; }\n\t.s b { color: #f0f0f0; }\n\t.s.link { display: block; margin-top: 10px; color: #f0f0f0; text-decoration: none; }\n\t.code { font-family: var(--font-display); letter-spacing: 0.12em; }\n\t.muted { color: #8a8a8a !important; }\n\t.err { font-size: 12px; color: #ff4d6d; margin-top: 8px; }\n\t.hidden { display: none; }\n\t.btn { display: inline-flex; align-items: center; justify-content: center; padding: 12px 18px; border-radius: 12px; border: none; font-family: var(--font-display); font-weight: 700; font-size: 14px; color: #0a0a0a; background: var(--color-orange); cursor: pointer; text-decoration: none; }\n\t.btn:disabled { opacity: 0.55; cursor: default; }\n\t.btn.dimmed { opacity: 0.45; }\n\t.btn-ghost { background: #1a1a1a; color: #f0f0f0; border: 1px solid #262626; }\n\t.btn.small { padding: 9px 14px; font-size: 13px; white-space: nowrap; flex-shrink: 0; }\n\t.row { display: flex; gap: 8px; margin-top: 14px; }\n\t.row .btn { flex: 1; }\n\t.chip { display: inline-flex; align-items: center; font-family: var(--font-display); font-size: 10px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; padding: 4px 8px; border-radius: 6px; background: #141414; border: 1px solid #262626; color: #f0f0f0; text-decoration: none; cursor: pointer; }\n\t.chip-a { background: var(--color-orange); border-color: var(--color-orange); color: #0a0a0a; }\n\t.chip.tiny { font-size: 8px; padding: 2px 5px; }\n\t.chip.kick:hover { border-color: #ff4d6d; color: #ff4d6d; }\n\t.panel { background: #141414; border: 1px solid #262626; border-radius: 16px; padding: 14px; }\n\t.input { flex: 1; min-width: 0; padding: 10px 12px; border-radius: 11px; background: #1a1a1a; border: 1px solid #262626; color: #f0f0f0; font-size: 13px; font-family: inherit; }\n\t.input:focus { outline: none; border-color: #3a3a3a; }\n\t.invite { display: flex; gap: 6px; margin-top: 10px; }\n\t.seated-note { margin-bottom: 12px; padding: 10px 12px; border-radius: 12px; background: rgba(249, 115, 22, 0.1); border: 1px solid rgba(249, 115, 22, 0.3); font-size: 12px; color: #f0f0f0; }\n\t.seated-note a { color: var(--color-orange); }\n\t/* auto-start, variant B: the host's start button carries the clock (a\n\t   darker fill grows left→right as the wait runs out); players + visitors\n\t   get the number under their row */\n\t.btn-cd { position: relative; overflow: hidden; flex-direction: column; gap: 2px; padding: 10px 14px; }\n\t.btn-cd::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: var(--p, 0%); background: rgba(0, 0, 0, 0.16); transition: width 1s linear; }\n\t.btn-cd span, .btn-cd small { position: relative; }\n\t.btn-cd small { font-family: inherit; font-weight: 500; font-size: 11px; opacity: 0.8; }\n\t.cd-ghost { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 12px 14px 4px; }\n\t.cd-ghost .n { font-family: var(--font-display); font-weight: 700; font-size: 22px; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; color: var(--color-orange); line-height: 1; }\n\t.cd-ghost .n.due { color: #22c55e; font-size: 16px; }\n\t.cd-ghost small { font-size: 11px; color: #8a8a8a; }\n\t.close-table { display: block; margin: 12px auto 0; background: none; border: 0; color: #8a8a8a; font-size: 12px; text-decoration: underline; cursor: pointer; }\n\t.close-table:hover { color: #ff4d6d; }\n\n\t/* lobby */\n\t.slots { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-top: 12px; }\n\t.slot { display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: 11px; color: #8a8a8a; min-width: 0; }\n\t.slot b { color: #f0f0f0; font-weight: 600; font-size: 11px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\t.av-empty { width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center; border: 1px dashed #3a3a3a; color: #3a3a3a; font-family: var(--font-display); font-weight: 700; font-size: 15px; }\n\n\t/* desk */\n\t.desk { background: #141414; border: 1px solid #262626; border-radius: 22px; overflow: hidden; }\n\t.desk-head { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 22px; padding: 14px 18px; border-bottom: 1px solid #262626; }\n\t@media (max-width: 820px) { .desk-head { grid-template-columns: minmax(0, 1fr) auto; gap: 10px 12px; } .dh-prog { grid-column: 1 / -1; order: 3; } .dh-r { order: 2; align-self: start; } }\n\t.dh-prog { display: grid; grid-template-columns: repeat(var(--n), 1fr); gap: 4px; }\n\t.seg { height: 8px; border-radius: 3px; background: #1a1a1a; border: 1px solid #262626; }\n\t.seg.done { background: var(--color-orange); border-color: var(--color-orange); }\n\t.seg.done.chicken { background: transparent; border-color: var(--color-orange); }\n\t.seg.now { border-color: #f0f0f0; }\n\t.dh-r { display: flex; align-items: center; gap: 12px; }\n\t.desk3 { display: grid; grid-template-columns: 260px minmax(0, 1fr); gap: 14px; padding: 14px; }\n\t@media (max-width: 820px) { .desk3 { grid-template-columns: 1fr; } .players { order: 2; min-height: 0; } }\n\t.col { background: #1a1a1a; border: 1px solid #262626; border-radius: 16px; display: flex; flex-direction: column; min-width: 0; min-height: 560px; }\n\t@media (max-width: 820px) { .col { min-height: 0; } .stagecol { min-height: 480px; } }\n\t.col-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 12px 14px; border-bottom: 1px solid #262626; align-self: stretch; }\n\t.col-foot { padding: 10px 14px; border-top: 1px solid #262626; margin-top: auto; }\n\t.plist { display: flex; flex-direction: column; }\n\t.pr { display: flex; align-items: center; gap: 10px; padding: 9px 14px; border-top: 1px solid #262626; }\n\t.pr:first-child { border-top: 0; }\n\t.pr.up { background: rgba(249, 115, 22, 0.08); }\n\t.pn { font-family: var(--font-display); font-size: 11px; font-weight: 700; color: #8a8a8a; width: 12px; font-variant-numeric: tabular-nums; }\n\t.pname { flex: 1; min-width: 0; font-family: var(--font-display); font-weight: 600; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\t.pr b { font-family: var(--font-display); font-size: 13px; color: #22c55e; font-variant-numeric: tabular-nums; }\n\t.pr b.neg, .roster b.neg { color: #ff4d6d; }\n\t.stagecol { align-items: center; gap: 14px; padding-bottom: 18px; }\n\t.stagecol :global(.stage) { margin-top: 10px; }\n\t.wide { width: min(100%, 440px); padding: 0 16px; box-sizing: border-box; }\n\t.picked { text-align: center; padding: 0 16px; }\n\t.picked .t { font-size: 26px; }\n\t.picked .t.pop { animation: pop 0.5s cubic-bezier(0.2, 0.8, 0.2, 1); }\n\t@keyframes pop { 0% { transform: scale(0.85); opacity: 0; } 100% { transform: scale(1); opacity: 1; } }\n\t.two { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; width: min(100%, 440px); padding: 0 16px; box-sizing: border-box; }\n\t.two .btn { padding: 18px 12px; font-size: 16px; flex-direction: column; gap: 4px; }\n\t.two .btn small { font-family: var(--font-body, inherit); font-weight: 500; font-size: 11px; opacity: 0.75; }\n\t.two .btn-dare { background: #f0f0f0; }\n\t.card { border-radius: 18px; padding: 20px 18px; background: #101010; border: 1px solid #262626; }\n\t.card .q { font-family: var(--font-display); font-weight: 700; font-size: 20px; letter-spacing: -0.02em; line-height: 1.15; margin-top: 10px; }\n\t.field { display: block; width: 100%; box-sizing: border-box; margin-top: 12px; background: #1a1a1a; border: 1px solid #262626; border-radius: 12px; padding: 12px; color: #f0f0f0; font-size: 13px; min-height: 84px; font-family: inherit; resize: vertical; }\n\t.field:focus { outline: none; border-color: #3a3a3a; }\n\t.upload { display: block; width: 100%; margin-top: 12px; border: 1px dashed #3a3a3a; border-radius: 14px; padding: 22px 12px; text-align: center; color: #8a8a8a; font-size: 12px; background: transparent; cursor: pointer; font-family: inherit; }\n\t.upload b { display: block; color: #f0f0f0; font-family: var(--font-display); font-size: 14px; margin-bottom: 2px; }\n\t.upload:disabled { opacity: 0.6; cursor: default; }\n\t.reveal { border-radius: 16px; overflow: hidden; border: 1px solid #262626; background: #101010; }\n\t.reveal .shot { display: block; width: 100%; max-height: 420px; object-fit: contain; background: #0c0c0c; }\n\t.reveal .shot.ph { height: 160px; display: grid; place-items: center; color: #8a8a8a; font-size: 12px; }\n\t.reveal .answer { padding: 18px; }\n\t.reveal .answer p { font-family: var(--font-display); font-weight: 700; font-size: 18px; letter-spacing: -0.02em; line-height: 1.2; margin: 10px 0 0; overflow-wrap: anywhere; }\n\t.reveal .foot { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-top: 1px solid #262626; }\n\t.who { flex: 1; min-width: 0; }\n\t.nm { font-family: var(--font-display); font-weight: 700; font-size: 13px; }\n\t.meta { font-size: 11px; color: #8a8a8a; }\n\t.votes { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }\n\t.xp { display: flex; align-items: center; justify-content: space-between; padding: 12px 14px; border-radius: 14px; background: #141414; border: 1px solid #262626; }\n\t.xp b { font-family: var(--font-display); color: #22c55e; font-size: 18px; }\n\t.toast { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: 12px; background: #141414; border: 1px solid #262626; }\n\t.toast .ico { width: 30px; height: 30px; border-radius: 9px; background: #ffe500; display: grid; place-items: center; font-family: var(--font-display); font-weight: 800; font-size: 11px; color: #000; flex-shrink: 0; }\n\t.toast .s { margin: 0; }\n\n\t/* over */\n\t.over-top { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 18px; align-items: end; padding: 22px 22px 18px; border-bottom: 1px solid #262626; }\n\t@media (max-width: 700px) { .over-top { grid-template-columns: 1fr; } }\n\t.over-h { font-family: var(--font-display); font-weight: 700; font-size: clamp(2rem, 4.5vw, 3rem); letter-spacing: -0.04em; line-height: 0.95; margin: 6px 0 8px; overflow-wrap: anywhere; }\n\t.over-h span { color: var(--color-orange); }\n\t.podium { display: flex; align-items: flex-end; gap: 10px; }\n\t@media (max-width: 700px) { .podium { justify-content: center; } }\n\t.pd { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 12px 12px 10px; border-radius: 14px 14px 6px 6px; background: #1a1a1a; border: 1px solid #262626; width: 96px; box-sizing: border-box; }\n\t.pd b { font-family: var(--font-display); font-size: 12px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\t.pd i { font-style: normal; font-family: var(--font-display); font-weight: 700; color: #22c55e; font-size: 12px; }\n\t.pd em { font-style: normal; font-family: var(--font-display); font-weight: 800; font-size: 11px; color: #8a8a8a; }\n\t.pd.p1 { padding-top: 18px; padding-bottom: 22px; border-color: var(--color-orange); }\n\t.pd.p1 em { color: var(--color-orange); }\n\t.pd.p3 { padding-bottom: 6px; }\n\t.over-body { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; padding: 18px 22px 22px; }\n\t@media (max-width: 900px) { .over-body { grid-template-columns: 1fr; padding: 14px; } }\n\t.over .panel { background: #1a1a1a; }\n\t.over .toast { background: #141414; }\n\t.ach { display: flex; flex-direction: column; gap: 8px; margin-top: 8px; }\n\t.roster { display: flex; flex-direction: column; margin-top: 8px; }\n\t.roster .r { display: flex; align-items: center; gap: 8px; padding: 6px 0; border-top: 1px solid #262626; font-size: 13px; }\n\t.roster .r:first-child { border-top: 0; }\n\t.roster .rn { flex: 1; min-width: 0; font-family: var(--font-display); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n\t.roster .r b { font-family: var(--font-display); color: #22c55e; font-variant-numeric: tabular-nums; }\n\n\t.dh-timer { display: none; }\n\t/* ── mobile: no boxes around the round, the timer rides the header, the\n\t   bottom nav is gone (focus mode) so the dock is the only bottom chrome.\n\t   the players list goes (the bottle shows who's seated), the bottle scales. */\n\t@media (max-width: 820px) {\n\t\t.tod-page { padding: 84px 12px 24px; }\n\t\t.tod-page.has-dock { padding-bottom: 96px; }\n\t\t.top { align-items: center; }\n\t\t.top .t.big { font-size: 24px; }\n\t\t.btn.small { padding: 7px 10px; font-size: 11px; border-radius: 9px; }\n\t\t.desk { background: transparent; border: 0; border-radius: 0; }\n\t\t.desk-head { grid-template-columns: minmax(0, 1fr) auto; gap: 6px 10px; padding: 0 0 8px; border-bottom: 0; }\n\t\t.desk-head .t { font-size: 15px; margin-top: 0; }\n\t\t.desk-head .eyebrow { font-size: 9px; }\n\t\t.dh-prog { gap: 3px; }\n\t\t.seg { height: 5px; }\n\t\t.dh-r { gap: 8px; }\n\t\t.dh-timer { display: flex; }\n\t\t.desk-only { display: none; }\n\t\t.desk3 { padding: 0; gap: 0; grid-template-columns: 1fr; }\n\t\t.players { display: none; }\n\t\t.col { background: transparent; border: 0; border-radius: 0; min-height: 0; }\n\t\t.stagecol { gap: 10px; padding-bottom: 0; }\n\t\t.stagecol .col-head { display: none; }\n\t\t.stagecol :global(.stage) { transform: scale(0.82); margin: -20px auto -26px; }\n\t\t.picked .t { font-size: 22px; }\n\t\t.two, .wide, .picked { padding: 0; width: 100%; }\n\t\t.two .btn { padding: 13px 10px; font-size: 15px; }\n\t\t.card { padding: 14px; background: #141414; }\n\t\t.card .q { font-size: 17px; }\n\t\t.upload { padding: 14px 10px; }\n\t\t.field { min-height: 64px; }\n\t\t.reveal .shot { max-height: 34vh; }\n\t\t.reveal .shot.ph { height: 100px; }\n\t\t.xp { padding: 9px 12px; }\n\t\t.row { margin-top: 8px; }\n\t}\n\t.shot-wrap { position: relative; }\n\t.shot-wrap.loading { min-height: 220px; }\n\t.shot-loading { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; font-size: 12px; color: #a3a3a3; background: #0e0e0e; border-radius: inherit; pointer-events: none; }\n\t.shot-loading .spin { width: 22px; height: 22px; border-radius: 50%; border: 2px solid #333; border-top-color: #f97316; animation: shot-spin 0.8s linear infinite; }\n\t@keyframes shot-spin { to { transform: rotate(360deg); } }\n</style>\n"],"version":3}