{#snippet filterFields(suffix: string)}
{#if server === undefined} {/if} {#if server === undefined}
{ event.preventDefault(); update({ q: search.trim() }); if (suffix) filtersOpen = false; }} > Press Enter to search by server name.
{/if} {#if suffix} {/if}
{/snippet}
{@render filterFields('')}
{data?.total ?? '—'} matches{filters.map ? ` · ${data?.maps.find((map) => map.key === filters.map)?.name ?? 'Selected map'}` : ''}
{@render filterFields('-mobile')} {#snippet actions()}{/snippet}
Times in {$timeZone}{filters.days ? ` · Last ${filters.days} days` : ''}{#if hasFilters}{/if}{#if !error}{/if}
{#if error}{/if} {#if loading} {:else if loadedUrl !== apiUrl && error} {:else if data?.matches.length}
{#each sorts.filter((item) => item.key !== 'started') as item} {/each} {#each data.matches as match (match.id)} {@const reporting = match.status === 'active' && !match.server_deleted_at && freshStatusTimestamp(timestampISO(match.lastReportedAt) ?? null, now)} {@const notReporting = match.status === 'active' && !reporting} {@const status = notReporting ? 'Not reporting' : match.status === 'active' ? 'In progress' : match.status === 'completed' ? 'Completed' : match.status === 'end-report-missing' ? 'End report missing' : 'Interrupted'} {@const duration = match.status === 'active' ? reporting ? elapsedSince(timestampISO(match.startedAt) ?? null, now) : null : match.durationMs === null ? null : formatDuration(match.durationMs)} {/each}
Matches sorted by {sorts .find((item) => item.key === filters.sort) ?.label.toLowerCase()}, {filters.direction === 'desc' ? 'highest or newest' : 'lowest or oldest'} first
MatchStatus
{#if match.status === 'completed'}{match.map} · Match #{match.id} {:else if reporting}{match.map} {:else}{match.map}{/if} · {status}{duration !== null ? ` · ${duration}` : ''} {#if notReporting}Last report {/if} {#if match.missingReports !== null && match.missingReports > 0}{`${match.missingReports} ${match.missingReports === 1 ? 'report missing' : 'reports missing'}`}{/if} {#if server === undefined}
{matchInstanceLabel(match)}{#if match.server_deleted_at} · Historical instance{/if}
{/if}
{status}{#if notReporting}Last report {/if}{#if match.missingReports !== null && match.missingReports > 0}{`${match.missingReports} ${match.missingReports === 1 ? 'report missing' : 'reports missing'}`}{/if} {match.uniquePlayers} {duration ?? '—'} {match.status === 'completed' ? (match.finalRound ?? '—') : (match.observedRound ?? '—')}{#if match.status !== 'completed'}Highest observed{/if}
{:else if !error} {#snippet actions()}{#if hasFilters}{/if}{/snippet} {/if} Players counts unique players observed throughout the match.
About match history

Players counts unique players across all reports. A dash means the value is unavailable, not zero. In-progress matches show elapsed time since their recorded start and link to the live server while reports are current. Otherwise, they show Not reporting with the last report time. Completed durations require a recorded start and completed ending. End report missing means a newer game was reported before this game's end report arrived. Missing report counts show gaps in the reporter's sequence and can decrease as delayed reports arrive. Only completed games contribute to the leaderboard. Round shows the final round for completed matches and the highest observed round for unfinished matches. Open a completed match for exact timestamps and starting and ending player counts.