{v.sides[0].points}–{v.sides[1].points} · {title} · Vash Esports slot.coverUrl)?.coverUrl ?? '/logo.png'} />

{v.name ?? title}

{#if v.tournament} {v.tournament.name}{v.tournament.round ? ` · ${v.tournament.round}` : ''} {:else} {v.kind} match {/if} ·BO{v.rules.bestOf} · {v.rules.teamSize}v{v.rules.teamSize}
{#each videos.live as stream (stream.channelId)} Watch on {stream.name} {/each} {#each videos.recorded.slice(0, 1) as recording (recording.sessionId)} Watch the broadcast {/each}
Details

Match details

Format
BO{v.rules.bestOf} · {v.rules.teamSize}v{v.rules.teamSize}
Win by
{v.rules.winCondition.replace('_', ' ')}
Viewers
{live.viewers}
{#if v.lobby.id && v.lobby.provider === 'irc'} Open osu! lobby {:else if v.lobby.provider === 'simulator' && v.lobby.id}

Simulated lobby

{/if}
{#if devTools && v.sim}{/if} {#if isReferee}{/if}
{guidance.label}

{guidance.detail}

{#if v.paused && !decided}
{v.paused.reason}
{/if} {#if reveal} {#key reveal.index}
{/key} {/if} {#key v.phase === 'playing' ? `playing:${v.live?.slotId}` : v.phase}
{#if decided} {:else if v.phase === 'created' || v.phase === 'waiting'} {:else if v.phase === 'rolling'} {:else if turnPhase} (dialogOpen = true)} /> {:else if v.phase === 'playing' && v.live} {/if}
{/key}
MAP JOURNEY{v.maps.length} played · first to {v.rules.winsNeeded}
{#each Array.from({ length: v.rules.bestOf }) as _, index} {@const map = v.maps[index]} {@const isLive = !map && !!v.live && index === v.maps.length} {@const slot = map ? live.slot(map.slotId) : isLive ? live.slot(v.live?.slotId) : null} {@const winner = map ? live.side(map.winner) : null}
{slot?.label ?? index + 1} {isLive ? 'Now playing' : winner ? winner.name : map ? 'Draw' : `Map ${index + 1}`} {#if winner}{/if}
{/each}