Manchester City were beaten in their final Champions League group game 2-1 by managerless RB Leipzig, with Kyle Walker sent off late on.
The pressure was off for City, having already secured top spot in Group A last time out. Pep Guardiola made seven changes for the trip to Germany, with the game played behind closed doors due to reintroduced Covid-19 restrictions.
Despite still playing a number of his stars - including Kevin De Bruyne's first start since November 6 - it was Leipzig who took the lead in the first half after a wonderful finish from Dominik Szoboszlai (24).
Man City introduced Raheem Sterling at half-time, who gave a brief boost to the attack, but Leipzig - who parted ways with Jesse Marsch on Friday - soon doubled their lead. It was Andre Silva who fired home (71), only for Riyad Mahrez to net City's reply five minutes later.
- How the teams lined up | Match stats
- Pep Guardiola on Kyle Walker red card: It's not necessary
- Champions League last 16: Teams, dates, draw
- Champions League fixtures | Results | Group tables
The visitors' evening went from bad to worse when Walker was shown a straight red card late on. In a moment of madness, he caught Silva on the back of the ankles, and will now miss City's first knockout game next year.
An unimpressed Guardiola remained tight-lipped on what may have been said after the game, telling his post-match press conference: "It was a red card - definitely. I'm not coming here to say what happened in the dressing room."
Later asked by BT Sport, Guardiola added: "It's not necessary. He cannot play in the last 16 and Kyle Walker is so important for us. We must always be in control of our emotions, especially in this competition… Hopefully he will learn for the future."
RB Leipzig celebrated a famous victory at full-time with interim manager Achim Beierlorzer, having secured their place in the Europa League after finishing third in Group A.
While the defeat will do little to dent Man City's Champions League progress, it does end a seven-match winning run in all competitions and is a bump in the road for the momentum Guardiola was keen to keep building on in their final group game.
How City were beaten in Leipzig
Both teams walked out to an empty Red Bull Arena with coronavirus restrictions once again enforced in Germany. It was a stark reminder of how football has been impacted by the pandemic over the last 18 months and was a strange sight despite its familiarity.
It took a little while for both sides to find their rhythm. Leipzig went close first, with Konrad Laimer almost sneaking the ball in at the near post, but Zack Steffen was there to push it away. Soon after, the City goalkeeper came sliding through to keep Emil Forsberg from slotting home. Kevin De Bruyne and Jack Grealish also sent shots flashing across the face of goal for the visitors.
It was the hosts who then took the lead. Laimer slotted the ball through wonderfully for the run of Szoboszlai. There was a question of offside, but he was clearly on, as he sped away from John Stones. The Leipzig striker then rounded the oncoming Steffen before slotting home into an open net.
RB Leipzig: Gulacsi (6), Mukiele (7), Klostermann (6), Gvardiol (6), Angelino (6), Kampl (7), Laimer (7), Nkunku (6), Szoboszlai (7), Forsberg (8), Andre Silva (7).
Subs used: Simakan (7), Adams (6), Brobbey (n/a), Henrichs (n/a), Moriba (n/a).
Man City: Steffen (7), Walker (5), Stones (5), Ake (6), Zinchenko (7), Fernandinho (7), Gundogan (7), De Bruyne (7), Mahrez (7), Foden (6), Grealish (6).
Subs used: Sterling (7), Palmer (n/a), Dias (n/a).
Man of the match: Emil Forsberg.
Steffen was in inspired form again as he denied Silva from close range. Szoboszali nodded the ball back into the middle for his team-mate, but his own header was denied by a sensational reaction from the City goalkeeper. At the other end, Phil Foden's effort was grazed onto the post by Peter Gulacsi, before the Leipzig stopper kept out a dangerous De Bruyne free kick.
Man City continued to be frustrated into the second half and found themselves two behind in the 71st minute. A sloppy pass from Stones allowed Forsberg to nip through before driving into the area. He squared the ball for Silva on his left, with the Leipzig forward hitting a sweet strike that fired into the bottom corner.
- Only four Man City players kept their spots from the weekend. Kyle Walker, Ilkay Gundogan, Phil Foden and Jack Grealish started again, with Kevin de Bruyne also making his first City start in over a month.
- Youngsters Cole Palmer, James McAtee, Romeo Lavia, Joshua Wilson-Esbrand and Conrad Egan-Riley were all on the bench.
- Leipzig's extensive injury list meant they only named seven sub, with Tyler Adams returning from suspension and making the bench. Former City midfielder Angelino also lined up against his old club
But City hit back five minutes later. It was a wonderful ball in from Oleksandr Zinchenko on the left, with Mahrez waiting at the back post. He stooped low to head the ball into the far corner, sparking hopes of a Man City comeback.
However, their frustrating evening was compounded as Walker was sent off in the 82nd minute. Silva drove down the left, and the Man City defender - who had looked out-of-sorts for much of the game - kicked him in the back of the heels. Silva jumped straight up afterwards and into Walker's face, before both sets of players surrounded the referee.
The referee then produced a straight red card, with Walker sent back to the dressing room 10 minutes early.
It was a feisty end to the encounter in Leipzig, and De Bruyne went close with a late effort. But it curled past the post as Man City were beaten in their final Champions League group game of the season.
Man of the match - Emil Forsberg
An impressive game from a player who was once the next big thing in European football. He regularly drove out from midfield, sometimes playing as a forward, and picked up an assist for his evening's work.
What the managers said
Man City manager Pep Guardiola: "The first half, we lacked a little bit of rhythm… They have a really good team, we knew it from before the group stage. But the second half was much better, but unfortunately, one or two mistakes and they punished us.
"We played better in the second half. We were more aggressive, we played to win the game and we lost it. Congratulations to Leipzig.
"We made an incredible group stage, we qualified with one game left in a tough group. I am more than satisfied with the performance in every single game and in February, hopefully we can arrive in the best condition possible.
"Nathan [Ake] has a problem with his back, we will see tomorrow. Phil [Foden] had problems in the beginning of the game with his ankle, he struggled a little bit. As a precaution, I decided to put Raheem in his position."
RB Leipzig interim manager Achim Beierlorzer: "We had to show a reaction. This game was perfect for us because we proved something.
"We took chances and could have had more. We beat one of the best sides in the world. It is a pity there were no fans here but we did a great job. It was a highly-deserved win."
- Manchester City have failed to keep a clean sheet in 10 of their last 11 games in the UEFA Champions League, conceding in all six of their group stage games this term.
- RB Leipzig are the first German team to beat Man City in the Champions League in 15 games, with German sides losing 13 of the previous 14 such clashes (D1).
- RB Leipzig's André Silva has been directly involved in 10 goals in his 14 games in the UEFA Champions League (7 goals, 3 assists) and has had a direct hand in four goals in six appearances for the German side this term (3 goals, 1 assist).
- Four of Dominik Szoboszlai's five goals in the UEFA Champions League have been scored in home games, while he's also the top scoring Hungarian player in the competition's history (5).
Both sides are in action again on Saturday, with Leipzig hosting Borussia Monchengladbach in the Bundesliga, while City entertain Wolves in the Premier League; kick-off12.30pm.