Red Bull's Max Verstappen held off Carlos Sainz's charging Ferrari to win the Canadian Grand Prix on Sunday and surge 46 points clear in the Formula One world championship after his 150th race.
The 24-year-old Dutch driver took his 26th career win 0.9 of a second ahead of Spaniard Sainz, who closed the gap and set up a thrilling final chase thanks to a safety car deployment.
Seven times world champion Lewis Hamilton completed the podium for Mercedes in a remarkable turnaround for the Briton, who had dismissed his bouncing car as undriveable only days earlier.
Sainz collected the bonus point for fastest lap as the Italian team trimmed the gap to runaway leaders Red Bull in the constructors' championship to 76 points from a previous 80.
"It was really exciting at the end. I was giving it everything I had and, of course, Carlos was doing the same," said Verstappen after his sixth win of the season and Red Bull's sixth in succession.
"I could see he was pushing and charging, but when you're on the DRS (drag reduction system) it's a lot easier to charge. The last few laps were a lot of fun."
The victory was his first in Canada.
Sainz, who had fresher tyres than Verstappen, said he had tried everything he could to end his long wait for a first win at a circuit named after Canada's late Ferrari great Gilles Villeneuve.
"We were very, very close to winning today. I will take the positives and keep trying in the next one," he added.
Hamilton said the result, with team mate George Russell fourth, was "quite overwhelming" and gave him and the team a lot of hope for the rest of the season.
It was his first podium since third place in Bahrain in the opening race.
"It's been such a battle this year with the car, but we continue to stay vigilant, focused and never giving up, and that's something I'm proud of," he said.
"We're getting closer, so we've got to keep pushing and hopefully we'll eventually be in the fight with these guys."
Verstappen's Mexican team mate Sergio Perez, who remains second overall, retired and triggered a virtual safety car after just eight of the 70 scheduled laps when his car became stuck in gear.
Ferrari's Charles Leclerc started 19th after engine penalties and ended the day fifth, but now 49 points behind Verstappen.
Verstappen had led the field away from pole position, with Alpine's double world champion Fernando Alonso alongside on the front row after a wet Saturday qualifying but unable to make good on his threat to seize the lead into the first corner.
The 40-year-old Spaniard was passed by Sainz on lap three and finished the race seventh, behind team mate Esteban Ocon in sixth, but was demoted to ninth after stewards handed him a five second post-race penalty for weaving on track.
Valtteri Bottas, who was slowed by Alonso's robust defence, moved up to seventh for Alfa Romeo with Chinese team mate Guanyu Zhou eighth.
Canadian Lance Stroll took the final point for Aston Martin on a sunny afternoon.
There was disappointment for Haas after Kevin Magnussen and Mick Schumacher lined up fifth and sixth on the grid but failed to score.
Magnussen had to pit to replace a damaged front wing on lap seven and Schumacher, still chasing his first point in Formula One, slowed and retired on lap 19.
That triggered the second virtual safety car of the afternoon, with Sainz pitting from the lead he had inherited when he stayed out during the Perez incident while Verstappen came in for fresh tyres.
The real safety car was deployed after AlphaTauri's Yuki Tsunoda went into the barriers on lap 48, with Sainz making his second stop and keeping Verstappen in his sights ready to attack over the last 16 laps.