Celtic moved one point clear of Aberdeen at the top of the Scottish Premiership with a fiercely contested and pulsating draw against Hearts.
The visitors were strong-willed and led twice through Nir Bitton and Tom Rogic.
Those goals were not enough to quell Hearts, who played with relentless commitment before a packed Tynecastle.
Sam Nicholson equalised at the end of the first half and Osman Sow did the same in the 90th minute with a stunning, slightly deflected strike.
Celtic had been immediately assertive. Their play in the opening stages was full of vigour and intent, with Rogic prominent as he dropped into pockets of space between Hearts' defence and midfield.
The visitors were unable to take full advantage, though, and that contributed to the nature of the game, which was so full of energy and commitment that it swept from one incident to another.
There were moments of alarm for the visitors - who lost Stuart Armstrong and Dedryck Boyata to injury in the opening half-hour - with Craig Gordon saving a Kieran Tierney clearance that bounced towards goal and a Gavin Reilly effort.
The visitors' resolve was being tested by the circumstances, but they did not lack spirit and were soon in front.
Hearts were complicit, with Igor Rossi charging out of his position and his centre-back partner Blazej Augustyn failing to clear the ball with an awkward attempt to volley it away.
Morgaro Gomis could not tidy up the mess either, with the ball being pushed towards Bitton, who, with cool assurance, clipped a shot past Neil Alexander.
There was little time for Celtic to build on the lead, since Hearts refused to be subdued. Three minutes later, Prince Buaben sent a deep cross into the penalty area and although Mikael Lustig reached the ball first, Nicholson steered a volley into the far corner.
The play was scrappier after the break, as if composure was treated as an interloper. There was also two heavy collisions in a matter of minutes, as players hurtled into challenges that told of the aggressive determination and desperation to win, and also left bodies scattered on the pitch.
With a strong sense of purpose, Celtic grew into command. There was good fortune when they took the lead, since the ball broke to Rogic at the edge of the area, but he had the presence of mind and deftness of touch to sweep a left-foot shot into the top corner.
It was not the last accomplished moment of the game, though, since Sow, with the aid of a deflection, delivered a hard-struck and well-directed shot past Gordon after receiving the ball from a short free-kick 20 yards out.
Full Time Match ends, Heart of Midlothian 2, Celtic 2.
90:00 +4:10 Full timeFull Time Second Half ends, Heart of Midlothian 2, Celtic 2.
90:00 +3:42Dario Zanatta (Heart of Midlothian) wins a free kick in the attacking half.
90:00 +3:42Foul by Nadir Ciftci (Celtic).
90:00 +3:17Osman Sow (Heart of Midlothian) wins a free kick in the defensive half.
90:00 +3:17Foul by Efe Ambrose (Celtic).
90:00 +2:22Prince Buaben (Heart of Midlothian) wins a free kick in the attacking half.
90:00 +2:22Foul by Stefan Johansen (Celtic).
90:00 +0:06 Goal scoredGoal! Goal! Heart of Midlothian 2, Celtic 2. Osman Sow (Heart of Midlothian) left footed shot from outside the box to the top left corner. Assisted by Prince Buaben following a set piece situation.
89:22Billy King (Heart of Midlothian) wins a free kick in the attacking half.
89:22Foul by James Forrest (Celtic).
88:53Miguel Pallardó (Heart of Midlothian) wins a free kick on the right wing.
88:53Foul by James Forrest (Celtic).
87:54Attempt missed. Billy King (Heart of Midlothian) left footed shot from the right side of the box is close, but misses to the right.
86:14 SubstitutionSubstitution Substitution, Heart of Midlothian. Dario Zanatta replaces Morgaro Gomis.
80:50Foul by Nadir Ciftci (Celtic).
80:50Miguel Pallardó (Heart of Midlothian) wins a free kick on the right wing.
79:22 SubstitutionSubstitution Substitution, Heart of Midlothian. Billy King replaces Gavin Reilly.
78:59 BookingBooking Nadir Ciftci (Celtic) is shown the yellow card for a bad foul.
78:55Foul by Nadir Ciftci (Celtic).
Blazej Augustyn (Heart of Midlothian) wins a free kick in the attacking half.
77:08 SubstitutionSubstitution Substitution, Celtic. Gary Mackay-Steven replaces Tomas Rogic.
75:43Corner, Heart of Midlothian. Conceded by Kieran Tierney.
73:13Attempt missed. Osman Sow (Heart of Midlothian) right footed shot from outside the box misses to the left.
72:29Attempt missed. Mikael Lustig (Celtic) header from very close range is just a bit too high following a corner.
72:21Corner, Celtic. Conceded by Igor Rossi.
70:54Foul by Callum Paterson (Heart of Midlothian).
70:54Nadir Ciftci (Celtic) wins a free kick in the defensive half.
69:12 Goal scoredGoal! Goal! Heart of Midlothian 1, Celtic 2. Tomas Rogic (Celtic) left footed shot from outside the box to the top left corner. Assisted by Nir Bitton.
63:17 BookingBooking Blazej Augustyn (Heart of Midlothian) is shown the yellow card for a bad foul.
63:09Nadir Ciftci (Celtic) wins a free kick in the defensive half.
63:09Foul by Blazej Augustyn (Heart of Midlothian).
62:10Foul by Nir Bitton (Celtic).
62:10Prince Buaben (Heart of Midlothian) wins a free kick in the defensive half.
61:24 SubstitutionSubstitution Substitution, Heart of Midlothian. Miguel Pallardó replaces Arnaud Djoum because of an injury.
60:56Attempt missed. James Forrest (Celtic) right footed shot from outside the box is too high.
58:08Attempt missed. Stefan Johansen (Celtic) right footed shot from outside the box is just a bit too high.
56:02Kieran Tierney (Celtic) wins a free kick on the left wing.
56:02Foul by Prince Buaben (Heart of Midlothian).
53:16James Forrest (Celtic) wins a free kick in the defensive half.
53:16Foul by Callum Paterson (Heart of Midlothian).
50:17 BookingBooking Efe Ambrose (Celtic) is shown the yellow card for a bad foul.
50:00Arnaud Djoum (Heart of Midlothian) wins a free kick in the defensive half.
49:44Foul by Efe Ambrose (Celtic).
45:24Attempt saved. Nadir Ciftci (Celtic) right footed shot from the left side of the box is saved in the centre of the goal.
45:00Second Half begins Heart of Midlothian 1, Celtic 1.
45:00 +3:08 Half timeHalf Time First Half ends, Heart of Midlothian 1, Celtic 1.
45:00 +2:54Gavin Reilly (Heart of Midlothian) wins a free kick on the right wing.
45:00 +2:54Foul by Jozo Simunovic (Celtic).
45:00 +0:30 Goal scoredGoal! Goal! Heart of Midlothian 1, Celtic 1. Sam Nicholson (Heart of Midlothian) right footed shot from the left side of the six yard box to the top right corner.
44:48Foul by Kieran Tierney (Celtic).
44:48Osman Sow (Heart of Midlothian) wins a free kick in the defensive half.
42:27Foul by Callum McGregor (Celtic).
42:27Juwon Oshaniwa (Heart of Midlothian) wins a free kick in the attacking half.
41:19 Goal scoredGoal! Goal! Heart of Midlothian 0, Celtic 1. Nir Bitton (Celtic) right footed shot from the left side of the box to the bottom right corner. Assisted by Callum McGregor.
39:47Attempt missed. Sam Nicholson (Heart of Midlothian) right footed shot from the left side of the six yard box is close, but misses to the left.
38:30Nir Bitton (Celtic) wins a free kick in the attacking half.
38:30Foul by Callum Paterson (Heart of Midlothian).
35:59Attempt saved. Igor Rossi (Heart of Midlothian) header from the centre of the box is saved in the top centre of the goal.
35:25Corner, Heart of Midlothian. Conceded by Craig Gordon.
35:15Attempt saved. Gavin Reilly (Heart of Midlothian) left footed shot from the centre of the box is saved in the bottom right corner.
33:45Corner, Heart of Midlothian. Conceded by Craig Gordon.
33:27Attempt saved. Prince Buaben (Heart of Midlothian) right footed shot from the centre of the box is saved in the bottom right corner.
32:50 SubstitutionSubstitution Substitution, Celtic. Efe Ambrose replaces Dedryck Boyata because of an injury.
27:23 BookingBooking Stefan Johansen (Celtic) is shown the yellow card for a bad foul.
27:17Foul by Stefan Johansen (Celtic).
27:17Sam Nicholson (Heart of Midlothian) wins a free kick in the defensive half.
25:58Corner, Heart of Midlothian. Conceded by Kieran Tierney.
25:01Corner, Heart of Midlothian. Conceded by Dedryck Boyata.
23:36Attempt missed. James Forrest (Celtic) right footed shot from the left side of the box is high and wide to the left.
20:00Attempt missed. Sam Nicholson (Heart of Midlothian) right footed shot from outside the box is too high.
19:19 SubstitutionSubstitution Substitution, Celtic. James Forrest replaces Stuart Armstrong because of an injury.
17:04Attempt saved. Jozo Simunovic (Celtic) header from the right side of the six yard box is saved in the centre of the goal.
16:20Corner, Celtic. Conceded by Osman Sow.
15:10Stuart Armstrong (Celtic) wins a free kick in the defensive half.
15:10Foul by Prince Buaben (Heart of Midlothian).
10:54Foul by Gavin Reilly (Heart of Midlothian).
10:54Jozo Simunovic (Celtic) wins a free kick in the defensive half.
8:18Attempt saved. Nadir Ciftci (Celtic) header from the centre of the box is saved in the top centre of the goal.
7:39Corner, Celtic. Conceded by Sam Nicholson.
6:47Attempt saved. Tomas Rogic (Celtic) left footed shot from outside the box is saved in the top centre of the goal.
5:18Attempt saved. Nadir Ciftci (Celtic) right footed shot from the centre of the box is saved in the centre of the goal.
4:34Attempt missed. Nadir Ciftci (Celtic) right footed shot from outside the box is too high.
3:09Prince Buaben (Heart of Midlothian) wins a free kick on the left wing.
3:09Foul by Tomas Rogic (Celtic).
2:23Blazej Augustyn (Heart of Midlothian) wins a free kick in the defensive half.
2:23Foul by Callum McGregor (Celtic).
0:52Corner, Celtic. Conceded by Blazej Augustyn.
0:00First Half begins.
0:00Lineups are announced and players are warming up.
Live data and text provided by our data suppliers