Manchester City were held to a draw by Everton in a feisty Premier League affair at Etihad Stadium.
Erling Haaland, notably incensed after an early exchange with Everton's Ben Godfrey which left the Norway striker requiring treatment, finished off a lovely move to open the scoring in the 24th minute.
Riyad Mahrez received the ball on the edge of the area and, after some nifty footwork to take it round defender Vitaliy Mykolenko, found Haaland, who finished sweetly past Jordan Pickford from the middle of the penalty area.
However, during a tumultuous second half Demarai Gray scored a stunning equaliser after Rodri gave the ball away, making ground down the right and curling home a shot from just inside the area.
City threw what they could at the visitors during 11 minutes of stoppage time, but Everton stifled their attempts to cap off the year with a win.
City defender John Stones said: "I feel like we've lost two points. It's difficult to take.
"We controlled the game for the majority of the time and had a lot of chances. It was a bit of a scrappy game."
Second-placed City are four points behind leaders Arsenal, who play their game in hand against Brighton at 17:30 BST on Saturday.
Everton are 16th in the table, two points above the relegation zone.
Haaland fired up but stoppages restrict City's flow
Having scored twice against Leeds on Wednesday to become the quickest player to 20 Premier League goals in a season, Haaland seemed to direct any further frustration at his four-week absence from football thanks to the World Cup towards Godfrey.
The defender, starting his first game since breaking a leg in Everton's season opener, nudged Haaland in the early stages in an attempt to assert his authority, but seemed to only anger him - and the two engaged in a battle throughout the opening 45 minutes.
Haaland gesticulated and waved at the crowd in an attempt to spur them on, celebrated his opener wildly in Godfrey's direction and was eventually forced to calm down after being booked for a rash challenge just before half-time.
In a first half lacking clear opportunities, Haaland hit the side netting and Stones' header struck a post as referee Andy Madley dished out five yellow cards.
Lengthy delays prevented City from truly taking control of the game in the second half.
A six-minute delay on account of the assistant referee's radio being faulty, followed by another break as City forward Jack Grealish received treatment, sapped the energy that had been so high in the first period.
Gray's equaliser rekindled some fire in City but the game ebbed away from them as Everton defended resolutely.
A searching pass from Mahrez could not find a way through to Haaland and a frantic melee in the box resulted in a stellar save from Pickford.
City are without a win in two home games, having recorded 11 straight victories at the Etihad before conceding in the 98th minute and losing to Brentford last time out.
City manager Pep Guardiola said: "I would say they had eight in the back. They made a fantastic goal and when that happens you say 'congratulations', but in general we did really well."
Gray stunner eases pressure on Lampard
Everton had shipped seven goals in their past three league matches and won only one of their past eight.
An air of inevitability around how Everton's season was shaping up had seemed to settle on supporters, pressure was mounting on manager Frank Lampard and a lack of progress on the pitch looked to be continuing in Manchester.
But, while Guardiola's side looked somewhat deflated by the second-half stoppages, Everton seemed all too pleased for the game to become fragmented and limit City's usually expansive football.
Gray's magnificent goal almost came from nowhere, and every City attempt at a winner was blocked by a pink Everton shirt.
Crucially, Seamus Coleman got in the way of Phil Foden's late opportunity and Rodri completely mistimed a header from a corner in the final seconds.
A point, at the home of the defending champions, is a valuable one for Everton.
Player of the match
GrayDemarai Gray
Everton
Squad number11Player nameGray
Squad number3Player namePatterson
Squad number23Player nameColeman
Squad number26Player nameDavies
Squad number1Player namePickford
Squad number20Player nameMaupay
Squad number30Player nameCoady
Squad number2Player nameTarkowski
Squad number16Player nameDoucouré
Squad number22Player nameGodfrey
Squad number27Player nameGueye
Squad number17Player nameIwobi
Squad number19Player nameMykolenko
Squad number8Player nameOnana
Squad number9Player nameCalvert-Lewin
Line-ups
Man City
Formation 3-4-3
31Ederson
5Stones25Akanji6Aké
82Lewis17De Bruyne16Rodri20Bernardo Silva
26Mahrez9Haaland10Grealish
31Ederson5Stones25Akanji6Aké82LewisSubstituted forGündoganat 87'minutes17De BruyneBooked at 30mins16Rodri20Bernardo SilvaBooked at 16minsSubstituted forÁlvarezat 87'minutes26Mahrez9HaalandBooked at 44mins10GrealishSubstituted forFodenat 87'minutesSubstitutes
2Walker4Phillips7Cancelo8Gündogan18Ortega19Álvarez21Gómez47Foden80PalmerEverton
Formation 5-4-1
1Pickford
3Patterson22Godfrey30Coady2Tarkowski19Mykolenko
17Iwobi8Onana27Gueye11Gray
9Calvert-Lewin
1Pickford3PattersonBooked at 33minsSubstituted forColemanat 70'minutes22GodfreySubstituted forDoucouréat 90+2'minutes30Coady2TarkowskiBooked at 45mins19Mykolenko17Iwobi8OnanaBooked at 63mins27GueyeSubstituted forDaviesat 78'minutes11Gray9Calvert-LewinSubstituted forMaupayat 70'minutesBooked at 90minsSubstitutes
4Holgate7McNeil15Begovic16Doucouré20Maupay23Coleman26Davies29Vinagre60PriceReferee:Andy MadleyAttendance:53,444Live Text
Match ends, Manchester City 1, Everton 1.
Second Half ends, Manchester City 1, Everton 1.
Attempt missed. Rodri (Manchester City) header from very close range misses to the left. Assisted by Riyad Mahrez with a cross following a corner.
Corner, Manchester City. Conceded by James Tarkowski.
Phil Foden (Manchester City) wins a free kick on the left wing.
Foul by Vitaliy Mykolenko (Everton).
Corner, Manchester City. Conceded by Séamus Coleman.
Neal Maupay (Everton) is shown the yellow card for a bad foul.
Nathan Aké (Manchester City) wins a free kick in the defensive half.
Foul by Neal Maupay (Everton).
Foul by John Stones (Manchester City).
Neal Maupay (Everton) wins a free kick on the left wing.
Attempt missed. Rodri (Manchester City) right footed shot from outside the box misses to the left. Assisted by Kevin De Bruyne.
Attempt blocked. Ilkay Gündogan (Manchester City) right footed shot from outside the box is blocked. Assisted by Rodri.
Attempt missed. Phil Foden (Manchester City) header from the centre of the box misses to the right. Assisted by Riyad Mahrez with a cross.
Corner, Manchester City. Conceded by Alex Iwobi.
Attempt saved. Kevin De Bruyne (Manchester City) right footed shot from the right side of the box is saved in the bottom left corner. Assisted by Riyad Mahrez.
Substitution, Everton. Abdoulaye Doucouré replaces Ben Godfrey because of an injury.
Foul by Manuel Akanji (Manchester City).
Neal Maupay (Everton) wins a free kick in the defensive half.
Our coverage of your Premier League club is bigger and better than ever before - here's everything you need to know to make sure you never miss a moment