Borussia Dortmund suffered a severe setback in the Bundesliga title race when their shock 4-2 home loss to lowly Schalke 04 in the Ruhr valley derby on Saturday left them a point behind leaders Bayern Munich.
Dortmund, who had two players sent off, are on 69 points, with three games left to play, with Bayern, who face strugglers Nuremberg on Sunday, on 70.
The Bavarians will open up a four-point lead with a win on Sunday, leaving Dortmund hoping that Bayern might slip up twice in the remaining three games.
Schalke are now all but certain of staying up, having moved up to 30 points in 15th place, nine ahead of the relegation playoff spot occupied by VfB Stuttgart, who are in action against Borussia Moenchengladbach later on Saturday.
It had all started perfectly for Dortmund with Mario Goetze's header from a superb Jadon Sancho assist putting them in front in the 14th minute.
But Schalke earned a penalty for hand ball four minutes later following a VAR review and Daniel Caligiuri converted it to level.
"We started really well and got the opening goal," said Dortmund coach Lucien Favre. "But then their penalty was ridiculous."
Salif Sane's powerful header from a Caligiuri corner in the 28th then made it 2-1 for Schalke, who looked nothing like the team that have been battling to avoid relegation much of this season.
Disciplined at the back and waiting for their chances on the break, Schalke were able to successfully soak up attack after attack from Dortmund, who had more than 75 percent of possession in the first half but clearly lacked the final pass.
"When you play in this stadium then you have to enjoy it," said Schalke interim coach Huub Stevens.
"My players did what we had set out to do. As for the penalty I do not know if it was one but today we had luck on our side."
Things took a turn for the worse after the break with Dortmund captain Marco Reus sent off on the hour with a straight red card for a studs-up challenge on Suat Serdar.
Caligiuri curled the resulting free kick into the top corner before Dortmund were reduced to nine men with Marius Wolf getting his marching orders in the 65th for another rough challenge on Serdar.
Dortmund gave it all they had and Axel Witsel cut the deficit in the 85th minute but Breel Embolo netted Schalke's fourth goal a minute later to seal a memorable derby win in what has otherwise been a disappointing season for last year's league runners-up.
RB Leipzig made sure of their top-four finish and a return to the Champions League by beating Freiburg 2-1 to remain in third place on 64, 10 ahead of fourth-placed Eintracht Frankfurt.
(For more sports news and updates, follow Ahram Online Sports on Twitter at @AO_Sports and on Facebook at AhramOnlineSports.)