Leicester City lost the opportunity to go second in the Premier League table as they were swept aside by Leeds United at the King Power Stadium.
Harvey Barnes put the Foxes in front, but Stuart Dallas immediately replied for the visitors, who went ahead against the run of play through a superb Patrick Bamford strike midway through the second half.
Bamford unselfishly set up Jack Harrison with six minutes remaining to seal a 3-1 win for Leeds and complete a desperately disappointing day for Leicester.
Back-to-back victories have seen Leeds climb to 12th in the standings.
A scrappy start to the match was soon forgotten when a piece of brilliance from Barnes brought the opening goal after 13 minutes.
He collected the ball just inside his own half and went on a driving run towards the edge of the penalty area, where he played a neat one-two with James Maddison before rolling a shot into the bottom corner of the net.
Leeds's response was immediate, however, and it was another fine goal.
Maddison gave the ball away and Leeds piled forward, with the charge led by Luke Ayling down the left-hand side.
He played a pass infield to Bamford, who spotted the run of Dallas in behind the Leicester defence.
Dallas still had a lot to do but held off his man inside the box and beat Kasper Schmeichel with a finish into the far corner.
Leeds were forced into a change after 21 minutes when Rodrigo had to go off with an injury, with Mateusz Klich coming on in his place, but it did not upset the visitors' rhythm as Harrison, Bamford and Raphinha all forced Schmeichel into fine saves either side of the half-hour mark.
Leicester survived the pressure and looked dangerous again themselves when Marc Albrighton worked Illan Meslier at his near post after exchanging passes with Barnes inside the area.
The hosts made a change of their own eight minutes before half-time, with the fit-again Ricardo Pereira replacing Timothy Castagne at right-back, although it was unclear whether it was an injury or tactical switch by Foxes boss Brendan Rodgers.
Meslier managed to keep the ball out of the net when Ayoze Perez poked Albrighton's cross goalward and Liam Cooper made a last-ditch block to deny Perez again as Leicester found their feet again either side of half-time.
Albrighton was replaced at the break as Rodgers reverted to a back three in defence with the introduction of Caglar Soyuncu.
The hosts were now on top and Meslier was becoming the busier goalkeeper, albeit making comfortable saves to deny Pereira and Youri Tielemans.
So it was against the run of play when Leeds went ahead after 70 minutes. Leeds won the ball back in midfield and Raphinha put Bamford through on the left side of the area.
He still had plenty to do but beat Schmeichel with a left-footed strike into the far top corner of the net.
It was a huge blow for Leicester and one which livened up Rodgers' side. Perez and Jonny Evans were both inches away from getting a decisive touch a yard out after Soyuncu had headed the ball back across the face of goal from a corner.
Meslier then made a fine save to keep out Perez's volley from the edge of the area before smothering an effort from Nampalys Mendy.
Leicester had responded well to falling behind but they were unable to recover from the sucker-punch of a third Leeds goal after 84 minutes.
The visitors hit Leicester on the break. Bamford was through on goal and unselfishly teed up Harrison for a tap-in from eight yards.
Following the game, it was announced that Demarai Gray has joined Bayer Leverkusen from Leicester on a deal running to the summer of 2022.
The 24-year-old winger had been with the Foxes since January 2016 and claimed a Premier League winners' medal that season. He made a total of 133 top-flight appearances for the club, with only one of those coming this season.
We need your consent to load this SoundCloud contentWe use SoundCloud to manage extra content that can set cookies on your device and collect data about your activity. Please review their details and accept them to load the content.Manage Preferences