Play · Upbeat Bytes {#if isDevGated(game)}{/if}
{#if view === 'hub'} News {:else} {/if}
{#if view === 'hub'}

Play

A small calm thing after the brief. One of each a day — no rush, no score to beat but your own.

{#if date && ritual.total}

Today's calm set

{ritual.count === ritual.total ? `All ${ritual.total} enjoyed today` : `${ritual.count} of ${ritual.total} enjoyed today`} · fresh set tomorrow · make it yours

{/if}
{#if !bloomBlocked} {/if} {#if !matchBlocked} {/if} {#if !blockedForViewer('zen', auth.user, $page.url)}
🐟

Zen Den{#if isDevGated('zen')}dev{/if}

A calm corner — drop in with UB

Visit · no scores, just quiet

{/if}
{:else if view === 'select'}

{game === 'word' ? 'Daily Word' : game === 'wordsearch' ? 'Word Search' : game === 'match' ? 'Memory Match' : 'Bloom'}

{#if game === 'wordsearch' && wsTheme}
Today’s theme {wsTheme}
{/if}

{game === 'word' ? 'Pick your length.' : game === 'wordsearch' ? 'Pick your size.' : game === 'match' ? 'Pick a format, then today’s board or free play.' : 'Play today’s shared puzzle, or graze freely.'}

{#if game === 'match'}

Today’s board — shared daily

{#each MATCH_TIERS as [t, name, desc] (t)} {/each}

Free play — fresh boards anytime

{#each MATCH_TIERS as [t, name, desc] (t)} {/each} {:else if game === 'bloom'} {:else if game === 'word'} {:else} {#each WS_OPTS as [sz, name, desc] (sz)} {/each} {/if}
{:else if view === 'play'} {#if game === 'word'} {:else if game === 'wordsearch'} {:else if game === 'bloom'} {#key sp.get('v')} {/key} {:else if game === 'match'} {#key sp.get('v')} {/key} {/if} {/if}