Paris St Germain lost for the first time in Ligue 1 since last March as Lyon recorded a famous 2-1 victory at Parc OL.
First-half goals from Maxwell Cornet and Sergi Darder ended PSG’s unbeaten run at 36 games and lifted Lyon into third place.
Cornet fired Lyon into a 13th-minute lead before Darder doubled the advantage in added time with a quite brilliant effort, scooping the ball over the head of a dozing Thiago Silva before volleying home with the outside of his right foot.
Lucas Moura gave PSG hope of avoiding a first league defeat since last March with an opportunist 51st-minute strike but the runaway Ligue 1 leaders were well below their best on a night when Lyon should have won by a greater margin.
Second-placed Monaco had goalkeeper Danijel Subasic to thank for their goalless draw at Nantes.
The Serb was in excellent form to deny Alejandro Bedoya, Oscar Vizcarrondo and Kolbeinn Sigthorsson and stop Nantes from moving into the top four.
Monaco created little in a disappointing performance but still hold an eight-point lead over Lyon and Caen.
Patrice Garande’s side claimed back-to-back league wins with two late goals in a 2-1 win at St Etienne.
Andy Delort (78) and Ronny Rodelin (82) put Caen in command before Valentin Eysseric grabbed a consolation for Les Verts in stoppage time with a superbly taken free-kick.
The game between Ajaccio and Marseille was postponed due to a waterlogged pitch.
Two days of heavy rain in Corsica had made the Stade Ange Casanova pitch unplayable and the game was postponed on Sunday morning, with a new date yet to be arranged.
On Saturday, Rennes moved into the top four of Ligue 1 after scoring two late goals to beat Toulouse 2-1.
Wissam Ben Yedder fired Toulouse ahead in the 78th minute, but Ousmane Dembele equalised from the edge of the area in the 90th minute and in the second minute of added time Kamil Grosicki lashed home a cross-shot as Rennes snatched all the points.
Montpellier secured a third successive league win by beating in-form Lille 3-0.
Kevin Berigaud headed Montpellier ahead early in the second half, Bryan Dabo netted from close range to make it 2-0 on the hour mark and substitute Ellyes Skhiri added a third late on.
Guingamp missed the chance to move six points clear of the bottom three after being held to a 2-2 draw by 10-man Angers.
Pierrick Capelle’s half-volley gave the visitors a 31st-minute lead before Sloan Privat levelled for Guingamp eight minutes later.
Thibault Giresse’s 66th-minute penalty looked to have clinched it for Guingamp, but Billy Ketkeophomphone converted a spot-kick of his own 11 minutes from time. Angers’ Cheikh N’Doye was sent off for a high challenge on Benjamin Brou Angoua just before half-time.
Reims moved four points clear of the drop zone after thrashing Bordeaux 4-1.
Captain Aissa Mandi and Thievy Bifouma put Reims two-up at the break before Gaetan Charbonnier added a third.
Bordeaux pulled one back two minutes later through Adam Ounas but Lass Bangoura struck the home side’s fourth in the 89th minute.
Troyes remained rooted to the bottom of the table after a 1-0 home defeat to Lorient.
Majeed Waris struck the only goal from close range in the third minute and Troyes’ misery was complete when Fabien Camus was sent off for a dangerous tackle on Remi Mulumba a minute from time.
Third-placed Nice saw their hopes of maintaining a push for a place in next season’s Champions League hit by a shock 2-0 home defeat to Bastia.
The mid-table visitors shocked the hosts with second-half goals from Sadio Diallo and Floyd Ayite after Nice had been reduced to 10 men in the 58th minute when Paul Baysse was sent off.