One Celtic star was left bloodied and another was struck by a coin in two separate incidents as the Scottish Premiership leaders and defending champions were left stunned by their fiercest rivals.
Rangers went into the showdown as underdogs, given the 14-point gulf between the first and second placed teams, but it was the hosts who opened the scoring after just seven minutes through Ianis Hagi.
Celtic tried to play the ball out from the back and it didn't go to plan.
A bad pass from Liam Scales led to the home side racing forward, with Nicolas Raskin dribbling with the ball and flicking it back to Hahi on the edge of the box.
Hagi fired a low strike towards the bottom right corner of the net, beating goalkeeper Kasper Schmeichel.
read more here
Celtic stars troll Rangers at the darts with taunting messages about cup final defeat
'Put your money where your mouth is' - Simon Jordan names solution for Rangers chaos
It was a shock lead for the Gers, and as the first-half drew to a close the usually feisty derby started to descend into a chaos, with Rangers' Brazilian defender Jefte lucky to escape a red card.
A reckless elbow caught Celtic's Nicolas Kuhn as they both battled for the ball.
Kuhn was left with blood on his face in what looked like a nasty injury.
The home fans even gave him a cheery boo as he stood up.
Most read in Football
Roy Keane stuns former manager as Man United legend opens up on surprise career highlight
Spurs eye defender and goalkeeper targets, Rashford United exit, TAA approach
Arsenal eye up January move for striker with just one Premier League goal this season
Every completed transfer in 2025 January window as Brighton sign former Messi teammate
Replays showed the incident to be accidental but it still looked like a hefty whack, although the physios were able to patch up Kuhn's nose.
Then, when the whistle blew for half-time the drama continued.
Celtic's Callum McGregor clashed with Raskin and the Rangers captain reacted badly, putting his hands on his rival and getting booked for his action - all after the whistle had gone.
Rangers boss Philippe Clement could be seen telling his skipper to calm down as players left the pitch.
Robin Propper extended Rangers' lead to leave them more comfortable in the second-half. A corner came in from the right and Raskin produced a strong header, which was superbly saved by Schmeichel on the line.
But the rebound fell straight to Propper at the far post, who fired it into the back of the net from close range.
Rangers didn't take their foot off the gas with another goal to make it 3-0 with nine minutes left of normal play.
Jefte raced down the left wing, delivering a low cross which is blocked.
The rebound fell straight to Danilo like a late Christmas present, who made no mistake and sent the ball into the back of the net.
A day to celebrate and enjoy for Rangers but one incident changed the tone in the final minutes.
Celtic won a corner and some objects appeared to be thrown from the home supporters.
Arne Engles went down holding his face and appeared to be struck by a coin.
Luckily he was not seriously hurt and was able to complete the match with no issues.
Speaking after the contest, Hoops boss Brendan Rodgers confirmed Engels had indeed been hit by a coin and was fortunate not to have been seriously hurt.
Jamie O'Hara fumes at Ally McCoist Rangers prank call as he begs for Jason Cundy to be replaced after Tottenham's draw with Rangers in the Europa League
When asked if Engels was OK, Rodgers replied: "Yes, thankfully, [if] it was an inch lower he'd have been [hit] right in the eye.
"But yes, I think he's OK. It's not obviously great for the game but yes, he's OK."
Read More on talkSPORT
EFL captain spotted leading fan chant in away end during dramatic Middlesbrough win
Darts fan has everyone's worst nightmare during Stephen Bunting's win over Peter Wright
Rangers' 3-0 victory is Celtic's first league defeat of the season and cuts the gap at the top to 11 points.
Going into the game, unbeaten Celtic were hoping to go 17 points clear but Rangers seemed determined to spoil the fun.