Paris St Germain moved to the brink of another Ligue 1 title, but their celebrations were kept on ice as they had to hit back from two goals down to draw 3-3 against struggling Le Havre.
A win would have guaranteed a 12th league crown for PSG, who made 10 changes, including resting Kylian Mbappe, ahead of Wednesday’s Champions League semi-final first leg against Borussia Dortmund.
Luis Enrique’s decision backfired as Christopher Operi put struggling Le Havre ahead and, while Bradley Barcola levelled, Andrew Ayew’s deflected strike and Abdoulaye Tour’s penalty left PSG trailing 3-1.
Achraf Hakimi narrowed the deficit before substitute Goncalo Ramos headed home deep into injury time to seal a point for PSG that lifted them 12 ahead of Monaco, who have four games left to play.
With a better goal difference than their closest challengers, PSG have one hand on the trophy, but it is not mathematically certain yet.
While they were unable to hand PSG a second defeat in the top flight this season, Le Havre moved above Metz and into 15th, out of the relegation spots on goal difference.
Harry Kane took his tally of goals for the season to 42 as Bayern Munich warmed up for their Champions League semi-final with victory over Eintracht Frankfurt in the Bundesliga.
Tuesday’s first leg against Real Madrid at the Allianz Arena looms large, but goals in both halves for Kane either side of Hugo Ekitike’s strike earned a 2-1 win for Bayern and made it the England striker’s most prolific campaign.
Robert Andrich scored with the last kick of the match as Bayer Leverkusen came from two goals down to draw 2-2 with Stuttgart and preserve their unbeaten record in all competitions this season.
Stuttgart caught the newly-crowned German champions cold by scoring twice in the opening 11 minutes of the second half through Chris Fuhrich and Brighton loanee Deniz Undav.
But Leverkusen showed having the league title wrapped up has not affected their hunger as Amine Adli pulled one back and Andrich fired home a last-gasp leveller to maintain their remarkable run.
Dortmund, ahead of their trip to the French capital in midweek, were thrashed 4-1 at RB Leipzig as their hopes of a top-four finish receded.
Jadon Sancho put Dortmund in front, but Mohamed Simakan, Lois Openda, Christoph Baumgartner and Benjamin Sesko struck for fourth-placed Leipzig, who moved five points ahead of their opponents.
Marco Sportiello made a string of saves after his late call-up to help AC Milan to a goalless draw at Juventus, whose hopes of finishing second in Serie A took a major blow.
Sportiello was drafted in because of a muscle strain in the warm-up to first-choice goalkeeper Mike Maignan at the Allianz Stadium and the Milan deputy continually frustrated Juventus.
A superb double save to deny Filip Kostic and then Danilo’s rebound was the pick of the bunch to leave Juventus trailing Milan by five points with just four matches left.
Girona leapfrogged Barcelona into second in LaLiga as goals from David Lopez and Artem Dovbyk, who struck from the spot, sealed a 2-0 win at Las Palmas, who suffered a fifth successive defeat.
Atletico Madrid boosted their hopes of qualifying for next season’s Champions League after defeating fifth-placed Athletic Bilbao 3-1.
The teams went in level at the break after Rodrigo De Paul’s effort was cancelled out by Nico Williams, but Angel Correa restored Atletico’s lead before Unai Simon’s own goal made sure of the win as Diego Simeone’s side went six points clear of Bilbao.