Karim Benzema scored an extra-time penalty as Real Madrid pulled off another astonishing comeback in the Champions League to stun Manchester City 3-1 on Wednesday and book a showdown with Liverpool in the final.
City looked certain to go through when Riyad Mahrez put them 1-0 up and 5-3 ahead on aggregate but Rodrygo, on as a substitute, scored an incredible late double, his goals in the 90th and 91st minutes sending the tie to extra time.
With City still reeling, Real Madrid landed the knock-out blow as Benzema earned and then converted a spot-kick to snatch a 6-5 win on aggregate, with another remarkable fightback at the Santiago Bernabeu added to the club's long list of magical European nights.
This season, Madrid had already performed the unlikeliest of rescue acts to defeat both Paris Saint-Germain in the last 16 and Chelsea in the quarter-finals but, given the stakes and how close they were to defeat, this one against Manchester City was surely the most dramatic.
Like PSG and Chelsea before them, City will wonder how they emerged as losers from a match they largely controlled and there will be fresh scrutiny too on coach Pep Guardiola, who, for all his success, goes another year without leading City to the European glory they so crave.
City's collapse would have been almost inexplicable had it been against anyone other than Real Madrid, who advance to their 17th final in the competition. They are a victory against Liverpool away from lifting a 14th European Cup.
"Another magic night from the kings of Europe," read a banner draped over the stand at one end before kick-off but for most of normal time, this match failed to live up to the seven-goal thriller at the Etihad Stadium last week.
Real Madrid were the more assertive early on, with Benzema given a couple of difficult opportunities that only he, in his current form, might have expected to convert. Instead, he headed over and fired high.
In between, Luka Modric and Rodri clashed over a Casemiro challenge and then City stepped forward, squeezing Madrid into errors as Kevin De Bruyne hit Thibaut Courtois from distance before the goalkeeper had to make a smart reaction save from Bernardo Silva.
Real Madrid survived and then improved before the break, Modric causing a roar of satisfaction when he outsprinted De Bruyne to cut off a counter.
Probably their best chance came within seconds of the restart as Dani Carvajal found space down the right but Vinicius Junior shot wide at the back post.
City were on the back foot as space opened up for Modric in the box but a poor touch made his finish difficult. A sloppy Kyle Walker pass set Casemiro loose but the weaving Vinicius was unable to find a way through.
An injury to Walker checked Madrid's momentum and when the game found its rhythm again, City struck, Ilkay Gundogan's pass cutting through Madrid's midfield and finding Silva, who danced through to the edge of the box.
Silva shaped to shoot but instead wedged the ball right to Mahrez, who smashed it hard, early and past Courtois.
Modric went off and with the Croatian seemed to go some of Madrid's belief.
Jack Grealish, on as a substitute, could have made it two for City but somehow Ferland Mendy cleared off the line, before another Grealish shot flashed past the post.
It felt inconsequential because Madrid looked dead and buried but somehow, out of nowhere, they found a way back.
It was the 90th minute when Benzema cushioned a ball brilliantly across for Rodrygo to feather in at the near post and the cheer for the goal was only a little louder than for the stadium announcer then saying there would be six minutes of added time.
Madrid only needed one as City, for so long so compact and composed, were suddenly sprawled and all it needed was for Carvajal to swing a cross into the box, where the diminutive Rodrygo headed in.
When play resumed, Madrid emerged the stronger and four minutes in, they had a penalty, Benzema tumbling over the tired, lunging leg of Ruben Dias before ignoring City's attempts at distraction by rolling the spot-kick into the corner.
City pushed as Fernandinho came up just short at the back post when Courtois parried away. A late flick from Dias into the box floated harmlessly into the hands of Courtois, City's final attempt coming to nothing.