Juventus suffered their first Serie A loss of the season as their 10 men were humbled at home by Fiorentina.
Juve’s ex-Chelsea midfielder Juan Cuadrado was sent off for a lunge on Gaetano Castrovilli in the 18th minute.
Fiorentina were already ahead by that stage after Dusan Vlahovic lifted a composed finish over Wojciech Szczesny.
Cristiano Ronaldo had a header chalked off for offside for Juventus before an Alex Sandro own goal and a Martin Caceres effort sealed a famous victory.
Defeat capped a frustrating day for Juve, who had already lost three points and dropped to fourth in Serie A, seven points off the top, after their walkover victory over Napoli in October was rescinded.
It was announced on Tuesday that Napoli had won their appeal against the decision to deduct them a point and award hosts Juventus the game when the visitors failed to travel because of positive Covid-19 tests.
The champions’ day quickly went from bad to worse as Franck Ribery’s through ball carved open their defence to allow Vlahovic to race clear and dink home just three minutes in.
Cuadrado was then sent off on his 200th Juventus appearance, the referee consulting his pitchside monitor and upgrading an initial yellow to a red for the Colombian’s reckless high tackle on Castrovilli.
Ronaldo went close to equalising several times, firing just wide and then forcing a good save from Bartlomiej Dragowski, before also being denied by the assistant referee.
However, two Cristiano Biraghi crosses led to the result being confirmed – the first turned into his own net by Sandro on 76 minutes and the second tucked home from close range five minutes later by former Juve right-back Caceres, as Fiorentina ended an eight-game run without a win.