Toasts

Fire test toastTriggers each kind with realistic content
{#each (['success', 'error', 'info', 'download'] as const) as kind (kind)} {@const label = kind === 'success' ? 'S' : kind === 'error' ? 'E' : kind === 'info' ? 'I' : 'D'} {@const title = kind === 'success' ? 'Library updated' : kind === 'error' ? 'Could not reach server' : kind === 'info' ? 'Already up to date' : 'Download complete'} {@const body = kind === 'success' ? '3 new chapters across 2 series' : kind === 'error' ? 'Connection refused on port 4567' : kind === 'info' ? 'No new chapters found' : 'Berserk · Ch. 372 ready to read'} {/each}

Previews

Idle splashDismiss with any click or key

Biometrics

Windows Hello Available: {helloAvailable === null ? '…' : helloAvailable ? 'yes' : 'no'}
{#if expOpen}
3D tilt cards — hover to preview
{#each [{ title: 'Berserk', sub: 'Ch. 372', hue: '265' }, { title: 'Vinland Saga', sub: 'Ch. 208', hue: '200' }, { title: 'Dungeon Meshi', sub: 'Ch. 97', hue: '140' }] as card (card.title)}
{card.title} {card.sub}
{/each}
{/if}

Runtime

Filter {appState.libraryFilter} Folders {appState.categories.filter(c => c.id !== 0).map(c => c.name).join(', ') || 'none'} History {appState.history?.length ?? 0} entries Cache {perfSnapshot?.cacheEntries ?? '—'} entries Toasts {appState.toasts.length} queued Version {appVersion} · {import.meta.env.MODE}
{#if perfSnapshot && perfSnapshot.cacheEntries > 0} {perfSnapshot.cacheKeys.join(', ')} Oldest: {fmtAge(perfSnapshot.oldestEntryMs)} · Newest: {fmtAge(perfSnapshot.newestEntryMs)} {/if}

Auth (UI Login)

Mode {authStatus?.mode ?? '—'} Session {authStatus?.hasSession ? 'present' : 'none'} Refresh token {authStatus?.hasRefreshToken ? 'present' : 'none'} Access expires in {fmtCountdown(authStatus?.accessExpiresInMs ?? null)} Refresh expires in {fmtCountdown(authStatus?.refreshExpiresInMs ?? null)} Refresh window {authStatus?.shouldRefreshSoon ? 'open' : 'not yet'} Refresh in-flight {authStatus?.refreshInFlight ? 'yes' : 'no'}
Access expiry at: {fmtTime(authStatus?.accessExpiresAt ?? null)} Refresh expiry at: {fmtTime(authStatus?.refreshExpiresAt ?? null)} Skew window: {Math.round((authStatus?.skewMs ?? 0) / 1000)}s before expiry