Paris St-Germain’s 36-match unbeaten run in Ligue 1 was ended as Lyon beat them to move into the third and final Champions League qualification spot.
Maxwell Cornet controlled Alexandre Lacazette’s pass to drive in an opener.
Sergi Darder added an exquisite second on half-time, controlling Rafael’s cross and flicking it past Kevin Trapp.
Despite Lucas Moura’s steered finish, PSG lost their first league game since last March, but still have a 23-point lead at the top.
Laurent Blanc’s side had not lost a league match since a 3-2 defeat at Bordeaux 11 months earlier, but looked off the pace and struggled without the creative influence of injured winger Angel di Maria.
After Cornet’s opener, PSG could have been reduced to 10 men, as midfielder Thiago Motta escaped with a booking for raising his fist to the side of Jordan Ferri’s head.
The leaders’ best spell of pressure came shortly before Darder made it 2-0, with Zlatan Ibrahimovic having a shot beaten out by Lyon keeper Anthony Lopes.
PSG rarely looked like equalising after Lucas scored, and the excellent Rachid Ghezzal should have added a third for the home side when clean through, but Trapp advanced from his line to block.
Monaco, in second place, end the weekend having narrowed the gap at the top, despite dropping points themselves in a 0-0 draw at Nantes.
Caen had moved above Lyon and into third earlier on Sunday by winning 2-1 at St-Etienne, with former Wigan striker Andy Delort among the scorers.