Moussa Dembele struck either side of Raheem Sterling's late glaring miss as Lyon stunned Manchester City to reach the Champions Legaue semi-finals with a 3-1 win in Lisbon
City had hauled themselves back into the game after Maxwel Cornet's opener with Kevin De Bruyne's 69th-minute equaliser but former Celtic striker Dembele then came off the bench to turn the tie dramatically.
Dembele first broke from halfway to slot home and then, moments after Sterling's miss, he made victory certain after a spill by Ederson.
Sterling, who had been one of City's better players, will certainly not want to relive the moment he could have levelled the game after 86 minutes.
The England forward had the goal at his mercy but remarkably blazed over in the heat of the moment.
City were then fully punished by Dembele and the wait for them, and their manager Pep Guardiola, goes on.
City had hoped the tournament's new streamlined format would work in their favour but they reckoned without the determination of Lyon, who finished seventh in the curtailed Ligue 1 season.
Again Guardiola made a surprise in his selection for a key tie, bringing in Eric Garcia for Phil Foden.
While the intention was to add strength, deploying the 19-year-old in a three-man back line with Fernandinho and Aymeric Laporte did not work.
City looked disjointed and, with Ilkay Gundogan and Rodri deep in midfield, there was a lack of attacking impetus.
In Sterling, De Bruyne and Gabriel Jesus, they still boasted a potent forward trio but Lyon dealt with them well.
City did have an early chance as Joao Cancelo played in Sterling but his cutback for Jesus was cleared by Fernando Marcal.
Lyon looked to hit City on the counter and stretch their back three and the plan paid off in the 24th minute when Karl Toko Ekambi raced on to a Marcal pass.
Garcia recovered to halt the charge but cleared only as a far as Cornet, who after scoring against City three times last season, stung them again by curling round a stranded Ederson.
City at least responded positively and kept Lyon goalkeeper Anthony Lopes busy for the remainder of the first half.
Lopes had to push away a drilled cross from Cancelo and smother Jesus' attempt on the rebound. He also saved an albeit weak first-time shot from Rodri and then denied Sterling from close range.
City began to look laboured in the early stages of the second half but then De Bruyne took it upon himself to try to retrieve the situation.
The Belgian first tested Lopes with a 25-yard free-kick just before the hour and then curled another set-piece over before having a driving run halted on the edge of the area.
Ederson kept City's hopes alive by keeping out another long-range Marcal shot and they finally broke the French side's rearguard after 69 minutes.
Sterling did brilliantly to turn a defender on the left and his cutback for De Bruyne was perfect, allowing City's chief playmaker to sidefoot past Lopes.
That appeared to energise City and Jesus forced a brilliant save from Lopes with a powerful shot on the turn that appeared destined for the top corner.
Yet just as City began to sense their chance, they were caught out again.
This time Dembele got behind the defence and finished well in the 79th minute. City waited in hope VAR might overturn the goal for a foul on halfway but the goal was given.
Sterling looked like he would take the game to extra time but contrived to miss from Jesus' pass and Dembele then had the final say.