{#if !report} {:else}
{report.event === 'game_end' ? 'Final scoreboard' : 'Latest scoreboard'}

{mapLabel ?? mapTitle(report.map)}

{#if report.event !== 'game_start'}Round {report.round}{/if} {#if report.event === 'game_end'}Game ended {:else if report.event === 'game_start'}Game started{/if}
{players.length} {players.length === 1 ? 'player' : 'players'}
{#if !players.length} {:else}
{#each columns as column (column.key)} {/each} {#each sorted as player} {@const timing = report.timing?.players[player.guid]} {#each columns as column (column.key)} {/each} {/each}
{report.event === 'game_end' ? 'Final' : 'Latest'} player scores for {report.server}
Player Time on server Time in match Round started
{player.name}
GUID
{timing ? elapsedSince(timing.serverJoinedAt, timingNow) : '—'} {timing ? elapsedSince(timing.matchJoinedAt, timingNow) : '—'} {timing?.roundStarted ?? '—'} {#if player[column.key] === null}— {:else}{number.format(player[column.key]!)}{/if}
{/if}

Times and joining rounds are estimated from player reports. Server time carries across consecutive matches; ended or stale reports show time at the last update.

{/if}