Adam Randell nodded in a 96th-minute equaliser to earn Bristol City a 1-1 draw with Middlesbrough, who missed the chance to close the gap at the top of the Championship.
With leaders Coventry City losing to Southampton, Middlesbrough looked set to get a vital win thanks to Leo Castledine, but they could not hold out at the Riverside Stadium.
Middlesbrough dominated a first half in which the Robins failed to have a single shot, but Riley McGree was the only one to test Radek Vitek on the stroke of half-time.
Aidan Morris and Alan Browne also called Vitek into action before substitute Castledine found the breakthrough in the 65th minute with a fierce finish.
Chasing a second goal, David Strelec fired a good chance straight at the goalkeeper, and Boro were made to rue their missed opportunities.
Randell thumped City's first shot on target past Sol Brynn in the 96th minute, brilliantly meeting Tomi Horvat's delivery to snatch a point for the visitors.
Elsewhere, Oxford United were denied what could have been a vital win in the relegation fight in a 1-1 draw with Charlton Athletic, who equalised in the 93rd minute through Charlie Kelman's penalty after Cameron Brannagan's earlier spot-kick.
Data Debrief: Boro made to rue missed chances
Having slipped up against Charlton in midweek, Middlesbrough knew they needed a win if they were to hold off Millwall, who are just two points behind them in third and yet to play on Saturday.
Kim Hellberg's side had 19 shots, with seven of those on target, as they massively underperformed their 2.5 expected goals (xG).
They also had five big chances, and 38 touches in the opposition box, but City were clinical, scoring with their only shot on target (from four) after accumulating just 0.32 xG.