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.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.