Nantes stormed into a three-goal halftime lead and then rode their luck to win 3-1 at home on Saturday and hand runaway leaders Paris St Germain their second Ligue 1 loss of the season.
Nantes saw little of the possession, had a player sent off only to see the red card overturned on VAR review and then watched as Neymar squandered a penalty in a thrill-a-minute clash at the Stade de la Beaujoire.
But they came away with a full haul of points in a surprise reversal for the star-studded PSG line-up.
Randal Kolo Muani put Nantes ahead within four minutes after a storming run down the left wing by Moses Simon, and they were 2-0 up some 12 minutes later when teenager Quentin Merlin scored his first goal for his hometown club with a rasping left-footed shot.
Nantes defender Dennis Appiah was sent off two minutes before the break for tripping Kylian Mbappe as he headed goalwards. But the referee was asked to review his decision by the VAR and changed it to a yellow card when replays showed the clash was not as cynical as first presumed.
VAR then intervened again in stoppage time before the break when Georginio Wijnaldum handled the ball in his own penalty box, handing Nantes a spot kick which Ludovic Blas converted for a stunning halftime lead.
PSG, who started the game 13 points clear of second-placed Olympique de Marseille, pulled a goal back a minute into the second half as Lionel Messi set up Neymar for a clinical finish.
The Brazilian, back in the starting line-up for the first time since November, then had a chance to further reduce the deficit when Appiah again brought down Mbappe, but Neymar's penalty was a weak effort straight at Alban Lafont.
Mbappe then produced an uncharacteristic miss from point-blank range in the final 20 minutes as PSG kept up the pressure but were unable to make use of their numerous chances.
The win saw Nantes leap from 10th to fifth in the Ligue 1 standings as they push for a spot in next season's European club competition.
Earlier on Saturday, Olympique Lyonnais came from a goal down to hold hosts Racing Lens to a 1-1 draw as striker Tino Kadewere scored his first goal since March.
Lens took a 13th-minute lead through Jonathan Clauss and had the ball in the net again in the 37th minute, but Seko Fofana's effort was ruled out after a VAR check. Kadewere's equaliser came on the stroke of half-time.