{#if data.activeGame}{/if}
← Game tracker

Pokémon journal · {data.activeGame?.name ?? 'Choose a game'}

30 ? 'lg:col-span-3' : 'lg:order-none lg:col-span-1'}`} bind:clientWidth={stripWidth} role="group" aria-label="Choose Pokémon game" >
{#each visibleGames as game (game.id)} {/each}
{#if !data.user}

Sign in to save catches, teams and adventures.

{/if} {#if form?.message && !rulesOpen}{/if} {#if data.activeGame}{#key data.activeGame.id}{/key}{:else}

No games selected. Use “set rules” to choose your next adventure.

{/if}

Species, regional Pokédexes, moves and encounters from PokéAPI. Encounter coverage varies by game; missing records do not prove that a Pokémon is unavailable. Stats and move battle values describe the catalog’s default forms and current snapshot. Maps identify their source and coverage.

Set rulesChoose the games in your collection. Your saved catches stay with each game. {#if form?.message}{/if}
{ saving = true; return async ({ result, update }) => { await update(); saving = false; if (result.type === 'success') rulesOpen = false; }; }} >
{#each generations as [generation, games] (generation)}
{#each games as g (g.id)}{/each}
{/each}