{moment ? `Instant replay — ${povId}'s turn` : steps[0]?.seq === 0 ? "The whole tale, from the deal" : "While you were away"}
move {idx + 1} of {steps.length}
(fp = !fp)}> {fp ? "⬒ the board" : "👁 your eyes"}
{#if fp}
{recorder ? "⏹ stop & save" : "⏺ save video"}
{/if} {#if onshare}
{shareState === "idle" ? "🔗 share link" : shareState === "minting" ? "…" : shareState === "copied" ? "✓ link copied" : "share failed"}
{/if}
{atEnd ? (endLabel ?? "back to the game") : "skip to now"}
{#if fp}
{:else}
{/if}
{#if actorArt}
{/if}
{step.actor}
{#each lines as line, i (i)}
{line}
{/each} {#if lines.length === 0 && !step.chat?.length}
…considers the maze.
{/if} {#each step.chat ?? [] as c, i (i)}
💬 {c.player}: {c.text}
{/each}
{ playing = false; idx = Math.max(0, idx - 1); }} aria-label="previous move">◀
(playing = !playing)} aria-label={playing ? "pause" : "play"}> {playing ? "❚❚" : "▶"}
{ playing = false; idx = Math.min(steps.length - 1, idx + 1); }} aria-label="next move">▶
{#each [1, 2, 4] as x (x)}
(speed = x)}>{x}×
{/each}