{% from "_macros.html" import empty, chart, demo_context, kpi, pnl, pc, px, source_note %} {% macro t(ms) %}{% if ms %}{{ "%d:%06.3f"|format(ms // 60000, (ms % 60000) / 1000) }}{% endif %}{% endmacro %} {% if not snap %}

Live

No live event right now. The next downhill final will show here while it runs.

{% else %} {# --- status strip --- #}

{{ "Whistler DH · Men's final" if snap.slug == "20260925_mtb" else snap.round }}

{% if mode == 'live' %}live{% else %}{{ "replay · final over" if snap.done else "replay" }}{% endif %}
{% if mode == 'replay' %}UCI live timing as it stood at {{ snap.ts[11:19] }} UTC on {{ snap.ts[:10] }}{% else %}UCI live timing, updated {{ age }} s ago ({{ snap.ts[11:19] }} UTC){% endif %} {{ snap.counts.get('Finished', 0) }} finished{{ snap.counts.get('InRace', 0) }} on course{{ snap.counts.get('NA', 0) }} to start {% if snap.conditions %}conditions {{ snap.conditions }}{% endif %} {% if mode == 'live' %}refreshes itself{% endif %}
{{ source_note(sport, none, none, snap.ts, model=true) }} {% if snap.waiting %}

Before the final. {{ snap.waiting }}.

{% for q in snap.qualifying or [] %}

{{ q.title }}{% if q.running %} running{% endif %}

{% for r in q.rows %}{% endfor %}
#RiderTimeGapStatus
{{ r.rank or "" }}{{ r.name }} {{ r.nation or "" }}{{ t(r.time) }}{{ "+%.3f"|format(r.gap / 1000) if r.gap else "" }}{{ "" if r.rank else r.status or "" }}
{% else %}

No qualifying times yet.

{% endfor %}
{% elif snap.betting and snap.betting.late %}

Late window since {{ (snap.betting.late_at or "")[11:19] }} UTC: updates every {{ snap.betting.interval }} s, the crowd bets at 50× the normal pace, and every private taker has a fresh {{ snap.betting.late_cap|money(false, false) }} cap. Quotes stay live while each market remains safe to price.

{% elif snap.betting %}

Quotes refresh every {{ snap.betting.interval }} s until each individual market becomes unquoteable; the late window opens with {{ snap.betting.to_start }} riders still to start.

{% endif %} {% call demo_context("A live experiment.") %}{% if maker %}The demo maker re-quotes every rider's win and podium market on every timing update: fair odds from a live simulation of the rest of the final, plus a spread that widens while a rider is on course. The demo taker bought a dozen of these quotes before the fast riders started, picked on hype.{% else %}The demo taker bought a dozen YES bets on the maker's quotes before the fast riders started, picked on hype (big names, home riders, fan favourites) rather than on value. Prices update live until the final settles.{% endif %} Paper only.{% endcall %} {# --- the headline numbers --- #}
{% if snap.done %}{{ kpi("Winner", fin[0].name if fin else "–", t(fin[0].time) if fin else "", "", "", small=True) }}{% endif %} {% if maker and mpnl %}{{ kpi("The maker's event P&L · " ~ ("settled" if snap.done else "marked to fair"), mpnl.total, "vs the crowd " ~ mpnl.crowd|money(true) ~ " · vs the demo taker " ~ mpnl.taker|money(true), "money") }}{% endif %} {% if maker and crowd %}{{ kpi("Crowd fills", crowd.fills, (crowd.last_fills if crowd.last_fills is defined else 0) ~ " since the last update · " ~ crowd.active ~ " of " ~ crowd.takers ~ " takers have bet") }} {{ kpi("Crowd volume", (crowd.volume|money(false, false)), (("of " ~ (crowd.budget_total|money(false, false)) ~ " in event budgets ($10–200 each)" if crowd.budget_total is defined and crowd.budget_total is not none else "") if crowd.budget_total is defined and crowd.budget_total is not none else "")) }}{% endif %} {% if picks %}{% if maker %}{{ kpi("The demo taker's picks · the maker's P&L on them", tot.maker_pnl, picks|length ~ " bets, " ~ (tot.stake|money(false, false)) ~ " staked" ~ (" · " ~ tot.won ~ " won, " ~ tot.lost ~ " lost" if tot.won or tot.lost else ""), "money") }} {% else %}{{ kpi("Your picks · P&L", tot.pnl, picks|length ~ " bets, " ~ (tot.stake|money(false, false)) ~ " staked · worth " ~ (tot.value|money) ~ " now" ~ (" · " ~ tot.won ~ " won, " ~ tot.lost ~ " lost" if tot.won or tot.lost else ""), "money") }}{% endif %}{% endif %}
{# --- one view at a time: the race, the odds, the chart, the book --- #} {# --- the race: leaderboard, on course, up next --- #}
{% if not maker %}{% include "live_picks.html" %}{% endif %}

Leaderboard

{% if fin %}
{% for r in fin[:10] %}{% endfor %}
#RiderTimeGap
{{ r.rank }}{{ r.name }} {{ r.nation or "" }}{{ t(r.time) }}{{ "+%.3f"|format(r.gap / 1000) if r.gap else "" }}
{% else %}{{ empty("Nobody has finished yet.") }}{% endif %}

On course

    {% for r in on %}
  • {{ r.name }} {{ r.nation or "" }}
    {% if r.splits %}split {{ r.splits|length }}: {{ t(r.splits[-1]) }}{% if r.split_pos and r.split_pos[-1] %} · {{ r.split_pos[-1] }}{{ {1: "st", 2: "nd", 3: "rd"}.get(r.split_pos[-1], "th") }} at this split{% endif %}{% else %}started{% endif %} {% if maker %}
    win {{ pc(r.p1) }} · podium {{ pc(r.top3) }}{% endif %}
  • {% else %}
  • {{ "The final hasn't started." if snap.waiting else "Nobody on course right now." }}
  • {% endfor %}

Up next

{% if snap.waiting %}the final's start list isn't out yet{% else %}{% for r in nxt %}{{ r.name }}{{ " · " if not loop.last }}{% else %}everyone has started{% endfor %}{% endif %}

{# --- the maker's view: rank probabilities, quotes, the chart, the book --- #} {% if maker %} {% if win_chart %}{% endif %} {% if book %}{% endif %} {% endif %} {% endif %}