Norwich were agonisingly knocked out of the Emirates FA Cup on penalties after pushing Chelsea all of the way at Stamford Bridge.
City went behind to a second-half strike by Michy Batshuayi, but Jamal Lewis headed home from a Timm Klose cross in the last minute of injury time to send the game into extra time.
Chelsea scored all of their penalties - giving Angus Gunn no chance - and Nelson Oliveira had his penalty brilliantly saved by Willy Caballero, but Norwich will be rightly proud of a gutsy, committed performance at the Bridge.
Kick off was delayed by 15 minutes due to transport problems, and Daniel Farke made only one change to the starting XI from Norwich’s win over Bristol City on Saturday. Harrison Reed came in for Alex Tettey alongside Mario Vrancic in the centre of midfield in a 3-4-3 formation.
Antonio Conte went with a similar starting XI to the stalemate at Carrow Road, although he brought in extra strength on the bench in the form of Eden Hazard and N’Golo Kante.
It was Chelsea with the first effort on goal, Danny Drinkwater driving wide of the post from the edge of the area in the 7th minute. It was Chelsea making the early running, and Tiemoue Bakayoko glanced a header narrowly wide from a corner.
Moments later they went close again, Cesar Azpilicueta clipping a chipped ball through to Willian in the area, who expertly took it down on his chest but poked it comfortably wide of Gunn’s far post from 10 yards when he should have done better.
Norwich grew into it, but Chelsea continued to see the majority of the ball. Both Christoph Zimmermann and Jamal Lewis put in important blocks on 20 minutes as both Kenedy and Davide Zappacosta looked to pull the trigger from tight angles.
Gunn was called into action in the 25th minute, brilliantly tipping a 25-yard effort from Danny Drinkwater on to the bar at full stretch to keep the game scoreless.
Norwich had their first real effort in the 32nd minute. Oliveira showed real tenacity and strength to hold the ball up, spin David Luiz and play in Jamal Lewis to get Norwich on the attack. As Bakayoko came away with the ball he played it straight back to Oliveira on the edge of the area, and his instinctive half-volley struck the crossbar and went over with Caballero beaten.
Minutes later, and more great work from Oliveira, who spun on the edge of the area under pressure from Azpilicueta and Ethan Ampadu but his shot was drilled wide. Josh Murphy then picked up a loose ball and drove down the left before dribbling into the area, but his cross-shot went wide of the far post.
Norwich saw out the rest of the half comfortably, as the Chelsea fans started to get frustrated with City’s defensive resolve.
The opening stages of the second half were even, with City looking to move the ball quicker than in the first half. But Chelsea broke the deadlock 10 minutes into the second period, Batshuayi getting on the end of a Kenedy cross from the left to finish from five yards.
City almost had an equaliser five minutes later. A Maddison free-kick caused confusion in the Chelsea box, and the clearance fell to Murphy who shot through a crowd of players against the far post.
City upped the tempo, and should have equalised when Maddison was played through by Reed. He found room to shoot from just inside the area, but Cabellero saved brilliantly with his right hand. Maddison will feel he should have buried the chance, but it was an outstanding save from the Argentinian.
With 15 minutes remaining, a slick passing move from City found Oliveira on the edge of the box, and he spun but shot straight at Caballero. Down the other end, Gunn got down smartly to his left to save as Tiemoue Bakayoko tried his luck from distance.
With eight minutes remaining, Farke made his first change with Wes Hoolahan replacing Reed.
Chelsea went close to doubling their lead in the 84th minute, when substitute Alvaro Morata headed a Drinkwater cross just wide of the far post.
With five minutes remaining Todd Cantwell came on to make his first-team debut for City, replacing Grant Hanley.
City were relentless in injury time, and they got their reward from an unlikely source. Maddison pinged it into Klose's feet on the left, he cut inside and crossed deep into the box where Lewis glanced it into the bottom corner in the last minute of injury time to take it into extra time. It was his goal for the first-team, and it was met with jubilation.
There was the drama right from the off in extra time, with Willian going down in the box. Referee Graham Scott gave it Norwich's way, and the VAR backed his decision.
Maddison went into the book for a foul on substitute N'Golo Kante. Ten minutes into extra time Hazard entered the fray, replacing Drinkwater.
On 14 minutes Gunn produced a terrific double save. First he kept out Willian's effort from just inside the area by standing strong and then got down brilliantly to deny Morata from close range.
Chelsea were dominating possession, but Norwich were holding firm against Hazard and Willian, and looking to hit Chelsea on the counter. Murphy picked out Cantwell in the box, but under pressure the debutant couldn't get a shot off.
Morata had a great chance to score with five minutes remaining, but his header from a Zappacosta cross was too close to Gunn, who got down well to his right.
Shortly after Alex Tettey came on for Pinto, who had been down for cramp. Chelsea then saw Pedro red-carded for a lunge on Hoolahan from behind, and would have to play the last couple of minutes with 10 men.
Remarkably, Morata was then shown successive yellow cards for simulation and dissent and Chelsea were down to nine men.
Klose then had a glorious chance to win it, but his header from a Hoolahan free-kick in injury time was straight at Caballero, before the agony of a penalty shoot-out defeat.