Coureur #{{ runner.bib }}
{{ runner.finished ? 'Arrivé' : runner.started ? 'En course' : 'En attente' }}
Position: {{ Math.round(runner.position) }}m / {{ totalDistance }}m ({{ Math.round((runner.position / totalDistance) * 100) }}%)
⏱️ Départ: {{ new Date(runner.actualStartTimestamp * 1000).toLocaleTimeString() }}
📅 Unix: {{ runner.actualStartTimestamp }}
🏃 Démarré (temps simulation: {{ runner.startTime }}s) ⏰ Départ prévu dans: {{ runner.startTime - elapsedTime }}s
🏁 Arrivée: {{ new Date(runner.finishTimestamp * 1000).toLocaleTimeString() }}
📅 Unix: {{ runner.finishTimestamp }}
⌚ Temps de course: {{ runner.finishTimestamp - runner.actualStartTimestamp }}s

👆 Dernier drag: {{ new Date(runner.lastDragTimestamp * 1000).toLocaleTimeString() }}
📍 Position drag: {{ runner.lastDragPosition }}m
🔢 Unix drag: {{ runner.lastDragTimestamp }}

⚡ Dernier changement vitesse: {{ new Date(runner.lastSpeedChangeTimestamp * 1000).toLocaleTimeString() }}
📍 Position changement: {{ runner.lastSpeedChangePosition }}m
🔢 Unix changement: {{ runner.lastSpeedChangeTimestamp }}
⏱️ Temps de passage:
{{ checkpoint === 'arrival' ? '🏁 Arrivée' : `🚩 ${checkpoint}km` }}: {{ time }}s

🏆 Estimations de temps

{{ idx < intermediatePoints.length ? `🚩 Point ${point / 1000}km` : '🏁 Arrivée' }}
  • {{ runner.rank === 1 ? '🥇' : runner.rank === 2 ? '🥈' : runner.rank === 3 ? '🥉' : `${runner.rank}.` }} Coureur #{{ runner.bib }} - {{ runner.time }}s à +{{ runner.gap }}s