Ferrari's Carlos Sainz took an emotional win in the Mexico City Grand Prix on Sunday after Red Bull's Formula One leader Max Verstappen was twice penalised for clashes with title rival Lando Norris and finished sixth.
McLaren's Norris, who called Verstappen 'dangerous' during the race, finished second to slash the triple World champion's overall advantage from 57 points to 47 with four rounds remaining.
Charles Leclerc, caught and passed by Norris with nine laps to go to deny Ferrari a second successive one-two, was third and took a bonus point for fastest lap.
The win was a first for Ferrari in Mexico since 1990 and fourth of Sainz's career.
"I really wanted to win this one. I needed it for myself. I said I wanted one more win for Ferrari and to do it here with this mega crowd is incredible," said the Spaniard, who is leaving for Williams at the end of the season.
Verstappen, who pitted from third place to serve two 10-second penalties on lap 27, had to fight back from 15th after starting on the front row with Sainz on pole position.
The Dutch driver had won five of the last six races in Mexico, including the last three editions, but has now not won for 10 races in a row.
Still the clear title favourite, he sounded unconcerned and unrepentant.
"The biggest problem that I have is that today was a bad day in terms of race pace," said Verstappen.
Mercedes pair Lewis Hamilton and George Russell finished fourth and fifth respectively after a lively battle in the closing stages.
Haas had another good weekend with Kevin Magnussen seventh and Nico Hulkenberg ninth, with McLaren's Oscar Piastri sandwiched between in eighth.
Alpine's Pierre Gasly took the final point, moving the Renault-owned team closer to seventh-placed Williams.
McLaren stayed top of the constructors' standings, but only 29 clear of Ferrari.
Verstappen was again the talk of the afternoon, with stewards taking a hard line against him for forcing Norris off the track after a controversial previous weekend in Texas where it paid off.
In Mexico as in Austin, it was the battle with Norris that provided the sparks.
"I was ahead the whole way through the corner," said Norris over the team radio after being forced off at turn four on lap 10. "This guy is dangerous. It's the same as last time. I'll be in the wall in a minute."
They clashed again at turn seven on the same lap and Verstappen was ruled to have gained an advantage by leaving the track.
"I respect Max as a driver but I was ready to expect something like this and this is not very clean driving in my opinion," Norris said later.
The safety car was deployed when RB's Yuki Tsunoda and Williams Alex Albon collided at the start, with the Japanese careering off with his rear right tyre bouncing down the track.
Red Bull's home posterboy Sergio Perez was handed a five-second penalty for a false start after the Mexican, who swept from 18th to 13th, lined up beyond the front of the marked box on the grid.
That was just the start of a scrappy afternoon for Perez, who fought a series of battles to try and recover places but ended up 17th and last car running in front of a crowd of 154,142.
A clash with RB's Liam Lawson also left a large hole in the side of the Red Bull.
Verstappen had seized the lead from Sainz down the long opening straight but his advantage did not last long once the safety car came in on lap six, with the Spaniard taking back the lead three laps later with the help of drag reduction (DRS).
Sainz finished 4.705 seconds clear of Norris, with Leclerc 34.387 behind his teammate after a late stop for fresh tyres to set the fastest lap.
Aston Martin's Fernando Alonso retired with a cooling and brake issue on the 15th lap of his record 400th Formula One race.