Brahim Diaz scored a brilliant winner to give Real Madrid a slender advantage over city rivals Atletico after the first leg of their Champions League last-16 tie.
Rodrygo put the hosts ahead inside four minutes in the Bernabeu when he sprinted past Javi Galan and chopped inside the box before bending a wonderful hit past Jan Oblak.
Atletico, though, quickly settled into the game and levelled in the 32nd minute with another wonderful goal.
The in-form Julian Alvarez picked up the ball on the left side of the box, wrongfooted Eduardo Camavinga and whipped a spectacular curling strike around Thibaut Courtois and in off the post.
It was the Argentine striker’s seventh goal in nine appearances in the competition this season.
But it was Diaz, another former Manchester City player, who claimed the decisive goal in an electric Madrid derby.
The Spaniard sent Atletico defender Jose Gimenez to the floor as he skilfully waltzed into the box before driving a low shot into the far corner in the 55th minute.
The 25-year-old midfielder had stepped up in Jude Bellingham’s absence, with the England international serving a one-game suspension after picking up his his third yellow card in the competition against Manchester City earlier this month.
Bellingham will be available for the defending European champions when they make the short trip to the Riyadh Air Metropolitano for the return on Wednesday, 12 March (20:00 GMT), with the winners likely to face Arsenal in the last eight after their 7-1 first-leg thrashing of PSV in Eindhoven.
Atletico midfielder Conor Gallagher told TNT Sports: “Real Madrid are a top team and I think we competed well. I think it was a decent performance.
“We would’ve liked to get a better result but it’s all to play for in the next leg. We feel we can beat any team and with our fans behind us, it helps, and we’ll be looking forward to it.”
Moments of magic decide derby outcome
This was a Madrid derby defined by three moments of outstanding individual brilliance.
First, it was Rodrygo. The Brazilian beat Galan for pace to sprint on to Federico Valverde’s pass before cleverly cutting back to confidently sweep Real into an early lead.
He had a penalty appeal waved away moments later as he again got the better of Galan, who appeared to grab hold of Rodrygo and step across him in the box.
Asked if Rodrygo was underrated, Carlo Ancelotti told TNT Sports: “Not for us. Rodrygo for us, he helped us win the Champions League, he helped us a lot to win the Champions League in the last three years.”
But the 24-year-old’s opening strike was soon overshadowed by Alvarez’s stunning effort. The Argentina international has hit a purple patch for Atletico in recent weeks and that continued as his audacious effort made it six goals in his last seven games.
The 25-year-old, who left Manchester City for £81m in the summer, has been Atletico’s key figure in this campaign and his goal against Athletic Bilbao on Saturday moved them two points above Real – and one behind leaders Barcelona – in a tight La Liga title race.
England international Gallagher said Alvarez’s strike “didn’t surprise” him.
The former Chelsea player, who came off the bench in the 64th minute, added: “It was an unreal goal. It doesn’t surprise me. He’s playing with so much confidence, he’s a top player and a top guy.”
But Diego Simeone’s men were unable to push on and claim a rare win at the Bernabeu as Diaz wrapped up victory for Real, linking up well with Vinicius Jr before his darting run into the box ended with a delightful finish.
The game seemed to lack the hostile atmosphere and aggression of a typical derby between them, with Diaz’s celebration – jumping into the jubilant crowd – the only yellow card of the match.
Real, who have won the previous five Champions League meetings against Atletico in knockout ties, had a late chance to claim a two-goal cushion for the second leg.
But Kylian Mbappe’s poor ball to Vinicius Jr meant the Brazilian missed out on a tap-in.
Player of the match
J. Alvarez