
Rob Atkinson (right) scored for the second time this season for Bristol City
Middlesbrough missed the chance to cut the gap at the top of the Championship as they lost 2-0 at Bristol City.
Having seen leaders Coventry City draw 1-1 at Southampton in an early kick-off, Boro knew a win would put them just three points behind going into Christmas.
Morgan Whittaker hit the Bristol City post early on, but Emil Riis put the hosts in front with a low effort from the edge of the box.
It was 1-0 at the break despite both sides having good efforts to score, and while Boro pushed for an equaliser in the second half, it was City who doubled their lead when Rob Atkinson headed in a corner eight minutes after coming off the bench.
The loss leaves Middlesbrough six points behind Coventry but five ahead of third-placed Ipswich Town.
Meanwhile, the Robins move up to ninth in the Championship, two points off the play-off places.
Boro almost took a fourth-minute lead as Tommy Conway latched onto a mistake by the recalled Zak Vyner before playing in Whittaker, whose powerful low shot came back off the far post.
Anis Mehmeti had two decent efforts in the space of a minute saved by Boro's Sol Brynn soon after in a breathless start to the game.
Former City forward Conway then had a shot blocked before his ex-teammates went straight up the other end and scored as Riis fired low past Brynn - who let the ball squirm under him - from 18 yards.
The hosts were grateful to a block from midfielder Adam Randell to keep their lead after a mistake by goalkeeper Max O'Leary gifted Hayden Hackney a chance.
Boro upped the pressure before half-time as Conway flashed an effort wide of the post following some good build-up play and Alex Gilbert also went close.
And they continued to trouble City immediately after the interval as Whittaker had two opportunities and Gilbert had a good effort saved.
Having made a mistake for the goal Brynn redeemed himself with a superb diving save from Sinclair Armstrong's curling effort, but from the resulting corner he was helpless as Atkinson ran in to powerfully glance home Twine's delivery and make it 2-0.
The Robins did well to control the game after doubling their lead - a blocked Delano Burgzorg effort in the 86th minute was Boro's best chance as they struggled to create many clear-cut opportunities.
The result was a first defeat for new Boro boss Kim Hellberg as Bristol City extended their unbeaten run against Middlesbrough to eight games - and they have now won each of the last five meetings.
Bristol City head coach Gerhard Struber told BBC Radio Bristol:
"We fought on a really high level today.
"We know Middlesbrough is a really good team and also has really good momentum and it's difficult against them.
"In the end it was a box-defending fight on the highest level, how the boys did it together.
"I would say we could be better in transition moments today, we sometimes gave the ball away too easily, but in the end I'm super happy ahead of Christmas that we celebrate three points."
Gerhard Struber: "We fight on a really high level"
Middlesbrough head coach Kim Hellberg told BBC Radio Tees:
"I'm frustrated that the ball didn't want to go into the goal.
"I think we had 28 shots or something like that, unbelievable attacking play in many parts of the game, but not goals and they scored two and that's the name of the game.
"They did some very good stuff, so frustrating in some ways as a result of not scoring goals, but also proud of many things in how we play, how we act and the togetherness.
"I get a feeling after the game that we are good for real and you'll lose games and the energy from that, and how we go on from that, is the key."
Kim Hellberg: 'It wasn't Boro's day' against Bristol City
Player of the match
After the opportunity to rate players has closed, the score displayed represents the average from all the submissions by BBC Sport users.