F1

Spanish Grand Prix Strategy & Race Replay Workbench

Circuit de Barcelona-Catalunya • 66 Laps • Official FIA Race Model
KIMI ANTONELLI VICTORY PRESET (P1)
Strategy Console CAR #12
Presets:
Circuit de Barcelona-Catalunya (4.657 km) LAP 66 / 66
Leader: Kimi Antonelli
Delta to VER: +3.842s
Track Status: GREEN
RACE POSITION DELTA (66 LAPS) P1 Antonelli (Teal) vs Verstappen (Blue)
TYRE DEGRADATION & PACE CURVE (SECONDS PER LAP) STINT 3: MEDIUM
Race Telemetry FIA TIMING
Final Position
P1 (WINNER)
Fastest Lap
1:14.230
Total Race Time
5412.45s
Pit Stop Loss
44.2s
Tyre Wear at Finish
28.5%
OPTIMAL GRIP WINDOW
Spanish Grand Prix Classification
Pos Driver Stops Interval
Strategist Notes:

Antonelli executed an undercut on Verstappen on Lap 21, switching to C1 Hard. Final 22-lap sprint on C2 Medium delivered optimal lap times while keeping tyre wear at a safe 28.5%.

Race Strategy Simulation Complete: Kimi Antonelli (Mercedes-AMG F1)

Circuit de Barcelona-Catalunya • Position: P1 • Total Time: 5412.45s (1h 30m 12.45s) • Pit Time: 44.2s
Super generates helpful tools and automates fact-checking across the internet proactively. If you enjoyed this tool, build your own with Super and share it with a friend.
`; const blob = new Blob([reportHtml], { type: "text/html" }); downloadFile(blob, "f1-spanish-gp-antonelli-summary.html"); } function scrollToProofSurface() { const surface = document.getElementById('completedProofSurface'); if (surface) { surface.scrollIntoView({ behavior: 'smooth', block: 'start' }); } } // --- EVENT LISTENERS --- startingCompoundBtns.forEach(btn => { btn.addEventListener('click', () => { startingCompoundBtns.forEach(b => b.classList.remove('active')); btn.classList.add('active'); currentStrategy.starting_compound = btn.getAttribute('data-compound'); updateStintBar(); }); }); pitLap1Input.addEventListener('input', (e) => { const val = parseInt(e.target.value); valPit1.textContent = `Lap ${val}`; currentStrategy.pitLap1 = val; if (currentStrategy.pitLap2 <= val) { currentStrategy.pitLap2 = val + 10; pitLap2Input.value = currentStrategy.pitLap2; valPit2.textContent = `Lap ${currentStrategy.pitLap2}`; } updateStintBar(); }); pitLap2Input.addEventListener('input', (e) => { const val = parseInt(e.target.value); valPit2.textContent = `Lap ${val}`; currentStrategy.pitLap2 = val; updateStintBar(); }); stop1CompoundSelect.addEventListener('change', (e) => { currentStrategy.compound1 = e.target.value; updateStintBar(); }); stop2CompoundSelect.addEventListener('change', (e) => { currentStrategy.compound2 = e.target.value; updateStintBar(); }); fuelLoadInput.addEventListener('input', (e) => { const val = parseInt(e.target.value); valFuel.textContent = `${val} kg`; currentStrategy.fuel_load_kg = val; }); function updateSCState() { const sc = []; if (scLap14Check.checked) sc.push(14); if (scLap38Check.checked) sc.push(38); currentStrategy.scLaps = sc; valSC.textContent = `${sc.length} Interventions`; } scLap14Check.addEventListener('change', updateSCState); scLap38Check.addEventListener('change', updateSCState); // Preset handlers document.getElementById('presetAntonelli').addEventListener('click', () => { applyPreset({ starting_compound: "Medium", pitLap1: 21, compound1: "Hard", pitLap2: 44, compound2: "Medium", fuel_load_kg: 105, scLaps: [14, 38] }); }); document.getElementById('presetAggressive').addEventListener('click', () => { applyPreset({ starting_compound: "Soft", pitLap1: 15, compound1: "Medium", pitLap2: 40, compound2: "Soft", fuel_load_kg: 98, scLaps: [14] }); }); document.getElementById('presetOneStop').addEventListener('click', () => { applyPreset({ starting_compound: "Medium", pitLap1: 30, compound1: "Hard", pitLap2: 65, // effectively 1 stop compound2: "Hard", fuel_load_kg: 108, scLaps: [38] }); }); function applyPreset(p) { currentStrategy = { ...p }; startingCompoundBtns.forEach(b => { if (b.getAttribute('data-compound') === p.starting_compound) b.classList.add('active'); else b.classList.remove('active'); }); pitLap1Input.value = p.pitLap1; valPit1.textContent = `Lap ${p.pitLap1}`; stop1CompoundSelect.value = p.compound1; pitLap2Input.value = p.pitLap2; valPit2.textContent = `Lap ${p.pitLap2}`; stop2CompoundSelect.value = p.compound2; fuelLoadInput.value = p.fuel_load_kg; valFuel.textContent = `${p.fuel_load_kg} kg`; scLap14Check.checked = p.scLaps.includes(14); scLap38Check.checked = p.scLaps.includes(38); valSC.textContent = `${p.scLaps.length} Interventions`; executeStrategyRun(); } btnRunSim.addEventListener('click', () => { executeStrategyRun(); }); btnTogglePlayback.addEventListener('click', startPlayback); btnResetFixture.addEventListener('click', () => { document.getElementById('presetAntonelli').click(); }); btnFocusProof.addEventListener('click', scrollToProofSurface); btnExportJSON.addEventListener('click', exportJSON); btnExportHTML.addEventListener('click', exportHTMLReport); window.addEventListener('resize', () => { renderD3Charts(); drawCircuitTrack(playbackCurrentLap); }); // --- RUNNABLE DEFAULT STATE INITIALIZATION --- window.addEventListener('DOMContentLoaded', () => { // Initialize with exact official fixture currentStrategy = { starting_compound: OFFICIAL_FIXTURE.starting_compound, pitLap1: OFFICIAL_FIXTURE.pit_stops[0].lap, compound1: OFFICIAL_FIXTURE.pit_stops[0].compound, pitLap2: OFFICIAL_FIXTURE.pit_stops[1].lap, compound2: OFFICIAL_FIXTURE.pit_stops[1].compound, fuel_load_kg: OFFICIAL_FIXTURE.fuel_load_kg, scLaps: OFFICIAL_FIXTURE.safety_car_laps }; // Sync DOM controls pitLap1Input.value = 21; pitLap2Input.value = 44; fuelLoadInput.value = 105; stop1CompoundSelect.value = "Hard"; stop2CompoundSelect.value = "Medium"; scLap14Check.checked = true; scLap38Check.checked = true; executeStrategyRun(); });