Paris Saint-Germain's record 36-match unbeaten run in Ligue 1 was brought to an end when they lost 2-1 to Lyon.
Bruno Genesio's hosts led by two at the break after Maxwel Cornet's slick early strike was followed up by a wonderful individual goal from Sergi Darder.
PSG netted when Lucas Moura struck a curler early in the second half, but the home side held on relatively comfortably for a famous victory.
Laurent Blanc's men remain firmly on course to defend their title, but any hopes of going the whole top-flight campaign without defeat and extending a run without losing that began in March 2015 are at an end.
Lyon had been defeated by PSG four times this season - in the reverse Ligue 1 fixture and in three cup competitions - but move up to third place with a triumph that extends their unbeaten run to five games at their new stadium, Parc Olympique Lyonnais.
Elsewhere, Nantes made it 13 league matches unbeaten as they had the better of a 0-0 home draw against second-placed Monaco, whose point means they are 23 behind PSG.
Alejandro Bedoya had a goal ruled out for offside in the second half, while Danijel Subasic was the busier of the two goalkeepers.
Caen's hopes of a shock qualification for the Champions League were boosted with a 2-1 win away at one of their many rivals for a top-three place, Saint-Etienne.
An end-to-end encounter was level until the 78th minute, when Andy Delort headed home from close range for his 10th Ligue 1 goal of the season.
Ronny Rodelin's left-footed strike capped a swift counter-attack as the visitors made it two, meaning Valentin Eysseric's stoppage-time free-kick was a mere consolation for Saint-Etienne.
Just two points separates third-placed Lyon from Caen, Nice, Rennes, Saint-Etienne and Nantes - who sit eighth - in the thrilling race for the Champions League.
The match between Gazelec Ajaccio and Marseille was postponed due to the effects on the pitch of two days' heavy rain.