Gabriel Jesus and Kevin De Bruyne scored late goals as Manchester City came from behind to stun Real Madrid, who had Sergio Ramos sent off.
Despite being the better side for much of a frenetic encounter in Spain, City – who lost Aymeric Laporte to injury in the first half – looked set to be heading for a defeat when Isco put Madrid ahead on the hour.
But De Bruyne, a peripheral figure in the first half, led the fightback, supplying the cross from which Gabriel Jesus headed home an equaliser before coolly slotting in from 12 yards after Dani Carvajal had brought down substitute Raheem Sterling.
And Madrid’s frustrations were compounded with four minutes remaining, captain Sergio Ramos seeing red for a last-man challenge on Jesus as City secured a lead to take back to Manchester.
City could have hit the front in the 21st minute but, having been played in by De Bruyne, Jesus failed to beat Thibaut Courtois.
Karim Benzema’s header looked set to put Madrid ahead in the 30th minute, only for Ederson to pull off a stunning save, with Vinicius Junior unable to tuck in the rebound.
City had to rally from losing Laporte to injury soon after, though they responded well and only a goal-line block from Ramos denied Jesus an opener on the stroke of half-time.
Courtois had to make a save at full stretch to deny Riyad Mahrez yet for all City’s pressure, Madrid had the lead when Nicolas Otamendi lost the ball and Vinicius outmuscled Kyle Walker to square for Isco to slot home.
With Madrid hunting a second, Pep Guardiola turned to Sterling and his introduction sparked the revival – De Bruyne moving into a central role and swiftly finding Jesus, whose header stood after a VAR check for a potential push on Ramos.
The turnaround was complete five minutes later, Sterling drawing a clumsy challenge from Carvajal and De Bruyne sending Courtois the wrong way from the spot.
Madrid’s calamitous collapse got even worse when Ramos received his marching orders in the closing stages.
What does it mean? City strike back in style
On the day City officially lodged an appeal against their two-season ban from European competition, they produced one of their best displays in the competition to date against one of the continent’s leading clubs.
Despite a familiar lapse in concentration at the back, Guardiola’s side were at their vibrant best going forward and, once they smelled blood, did not give up the chase. Madrid, meanwhile, must now look to bounce back in El Clasico on Sunday.
Masterful De Bruyne orchestrates City from the front
By half-time, De Bruyne – usually City’s playmaker-in-chief – had made just 20 passes as he adapted to a more advanced role.
However, he came into his own in the second half, providing a wonderful cross for Jesus’ equaliser and showing supreme composure to beat his compatriot Courtois from 12 yards – his 50th City goal in all competitions.
Ramos takes one for the team
With Jesus running through on goal, Ramos had little choice but to attempt to put City’s forward off. However, his desperate pull-back now leaves Madrid without their captain heading into second leg, giving City even more belief.
It is the small matter of El Clasico up next for Madrid, who host LaLiga title rivals Barca in a huge clash on Sunday. City, meanwhile, go up against Aston Villa in the EFL Cup final at Wembley, as Guardiola’s side look to win the trophy for a third straight season.