Ten-man Manchester City blew a two-goal lead as Wolves produced a stunning second-half comeback to win 3-2 on a dramatic evening at Molineux.
Raheem Sterling had scored twice (25, 50) even after Ederson's early red card but Adama Traore pulled one back (55) and set up Raul Jimenez for the equaliser before Matt Doherty's late winner.
The thrilling contest was played out amid an intense atmosphere that was only heightened by a series of debatable VAR decisions, not least a twice-taken - and twice saved - penalty by Sterling.
The result moves Wolves up to fifth but perhaps more significantly means City stay third behind Leicester and remain 14 points adrift of runaway leaders Liverpool.
That would not have been on the minds of many at Molineux as the home supporters were treated to a remarkable comeback that was just about deserved amid the controversy.
Wolves: Patricio (7); Dendoncker (6), Coady (7), Saiss (7); Doherty (8), Neves (8), Moutinho (8), Jonny (6); Traore (8), Jimenez (8), Jota (6).
Subs: Vinagre (6), Neto (7), Bennett (n/a).
Man City: Ederson (3); Walker (6), Otamendi (6), Fernandinho (6), Mendy (5); De Bruyne (7), Rodri (7), Bernardo (7); Mahrez (6), Aguero (5), Sterling (8).
Subs: Bravo (6), Garcia (6), Gundogan (6).
Man of the Match: Adama Traore
How Wolves rallied in chaotic contest
The night started well for Wolves when Conor Coady put Diogo Jota through on goal and Ederson's foul saw the City goalkeeper sent from the field after just 12 minutes.
That prompted Pep Guardiola to sacrifice the returning Sergio Aguero but it did not look like being a problem when City were awarded a penalty for a foul by Leander Dendoncker on Riyad Mahrez soon after.
The decision came after a lengthy VAR check and there was another delay when Sterling's first spot-kick was saved by Rui Patricio only for encroachment to result in a retake.
Sterling saw that one saved too but was able to tuck away the rebound - sparking unseemly scenes as an object was thrown onto the field from the home end amid an increasingly heated atmosphere.
Wolves named an unchanged team for the fifth game in a row following their 2-1 win away to Norwich with Leander Dendoncker and Romain Saiss continuing to line up in defence.
Manchester City recalled Rodri in favour of Ilkay Gundogan, while Sergio Aguero returned from injury to replace Gabriel Jesus in two changes from the team that beat Leicester.
Guardiola attempted to take the sting out of things at the interval, making a defensive change as he withdrew Mahrez to bring on Eric Garcia in defence.
After Jota had missed a good chance to equalise early in the second half, Sterling appeared to have extinguished any hopes of a comeback when he doubled the lead.
Kevin De Bruyne's expertly timed through-ball cut the Wolves defence apart and with Patricio slow to come off his line, Sterling delicately chipped the ball into the net.
When two penalty calls went against Wolves, Nuno Espirito Santo's side were thinking it wasn't their night but then Traore's powerful shot beat Bravo and arrowed low into the far corner and it was game on again.
What the managers said
Wolves' Nuno Espirito Santo: "The atmosphere was amazing from the beginning to the end. It was a very emotional night. I think we played good. We try, we try, we try. We conceded from a mistake but we didn't change our way. Keep on believing, keep on trying. When we compete against these good teams, this is what we want - to grow, to compete, to improve."
Man City's Pep Guardiola: "We are used to being at the top and now we are far away so we have to adjust mentally to that. I said many times it is unrealistic to think about Liverpool we need to think about Leicester. Now it is about trying to catch the second one. We had the chance to return to second but we remain third. There are still 18 games left to play and we have to be mentally strong because in 48 hours we have another one."
Analysis: Wolves rise up as City wilt
Wolves supporters will not forget this one for a while and, try as they might, Manchester City fans might well feel the same way after watching the Premier League title slip even further from their grasp. As Guardiola pointed out, it's Leicester and the teams below them that they are competing with for now -- Liverpool, 14 points ahead, are long gone.
Up until the 82nd minute, the champions looked set to pull off a remarkable victory despite being down to 10 men after Ederson's early error of judgment. Instead, the story of the night was of a team unable to withstand the irresistible force of a Wolves team propelled by the pace, strength and skill of the astonishing Traore.
Guardiola seemed perplexed afterwards when asked whether he considered Nuno's side to be genuine contenders for the top four. He has now seen his team beaten home and away by Wolves - the first team in three seasons to do that to City. Here, they had a one-man advantage but they made it count amid a frenzied Molineux atmosphere.
With the title gone, City might be tempted to turn their attention towards the Champions League in search of silverware. Not that Guardiola is ready to admit it.
"We cannot prioritise the cup competitions otherwise we won't be in Europe," he said afterwards. There is little chance of that. But the list of teams chasing a top-four finish now surely includes Wolves.
- Wolves have won more points from losing positions than any other side in the Premier League this season (14).
- City had just 37.8 percent possession versus Wolves - the lowest figure recorded by a side managed by Pep Guardiola in top-flight history.
- City lost a Premier League game having led by 2+ goals for the first time since April 2018 vs Manchester United (2-3). Indeed, only Tottenham (8) and West Ham (6) have lost more games in Premier League history having led by 2+ goals than Manchester City (5), with two of those defeats coming under Pep Guardiola (also vs United in April 2018).
- Wolves have completed their first league double over City since 1999-00 in the second tier, and for the first time in the top flight since 1960-61.
- Wolves are just the second team to complete a league double against a team managed by Pep Guardiola after Antonio Conte's Chelsea in 2016-17.
- Adama Traore is only the third player to score three goals in a single Premier League season versus Pep Guardiola's City after Eden Hazard and Jamie Vardy (both in 2016-17).
- Raheem Sterling has scored more goals in all competitions this season than any other Premier League player (20).
- Ederson became just the second City goalkeeper to be sent off in the Premier League after Andy Dibble vs QPR in October 1994.
Wolves have the swiftest -- and toughest -- of turnarounds as they follow up the visit of the champions with a trip to Premier League leaders Liverpool at Anfield on Sunday. That game is live on Sky Sports Premier League from 4 p.m BST. Kick-off is at 4.30 p.m.
Manchester City are afforded an extra 90 minutes to prepare for their final game of 2019 as they host surprise package Sheffield United at the Etihad Stadium in a 6 p.m. kick-off.