A controversial Britt Assombalonga goal helped Nottingham Forest on their way to dealing Brighton & Hove Albion's promotion bid a set-back at The City Ground.
Forest's top goalscorer was awarded a goal on the hour mark as substitute Zach Clough's shot deflected off him when he was standing in an offside position
It sparked long protests from the Albion players, but after consulting with the linesman referee Oliver Langford allowed the goal which sent the visitors on the way to their second consecutive defeat.
Forest then made the points safe with a minute remaining as David Stockdale miscontolled a back-pass and Ben Osborn netted, before Clough converted an injury-time penalty.
In truth, while the opening goal will be debated, Albion were far from at their best as 18th-placed Forest secured just their sixth clean sheet of the season.
It was a disjointed first-half performance from the visitors as they struggled to carve out any real clear-cut chances and things failed to improve after the break.
A sticky and bobbly pitch was not conducive to Albion's passing game, but nonetheless there were plenty of misplaced balls to teammates.
Albion remain second, but third-placed Huddersfield, who have a game in hand, could close the gap to three points with victory over leaders Newcastle United this evening.
Liam Rosenior returned to the starting line-up for the first time since last August in place of the injured Sebastien Pocognoli, while Oliver Norwood replaced Chuba Akpom on the bench.
Full-back Rosenior's much-anticipated return came as a huge boost to Albion after Pocognoli limped off with a reoccurance of a groin injury in their defeat to Newcastle on Tuesday night.
A misplaced Danny Fox pass gifted Albion possession on seven minutes and Glenn Murray flicked over the top to Anthony Knockaert. The winger skipped past his man in the box and forced a parried save from Jordan Smith and Jamie Murphy put the follow-up wide.
Murray had the ball in the back of the Forest net on 13 minutes, but the whistle had correctly been blown as the striker handled the ball while turning in the area.
Forest had a couple of dangerous ball into the box cleared in the opening 20 minutes, but their first real effort saw Matty Cash's shot on the turn fly past the post and after incorrectly giving the hosts a corner, referee Oliver Langford immediate gave Albion a foul from the set-piece.
On 34 minutes, Jamie Ward jinxed past Dale Stephens on the edge of the Albion box, but his deflected effort flew over, before Eric Lichaj blasted wide from 30 yards.
Forest keeper Smith - making his fourth-ever senior appearance - did well to hold a powerful cross-come-shot from Murray just before the break in what capped a fairly forgettable first half.
Within seconds of the restart, the home side had a great opening, but Assombalonga's final pass was poor and he failed to find Ben Osborn, who would have been clean through.
Forest then messed up a free kick routine much to the anger of the home crowd as Jamie Ward tried to slip in Osborn, who wasn't expecting the pass.
Murphy's blocked shot on the edge of the box saw Forest break in a counter-attack and Ward's teasing cross was just too high for Assombalonga.
On 58 minutes, Dunk headed Knockaert's free kick back across goal and it dropped just wide, but with Duffy looking to turn it home, he collided with the post.
And two minutes later the hosts led as substitute Clough's shot with his first touch was fired home by Assombalonga sparking mass protests from Albion and a booking for Dunk.
Albion rung the changes with Solly March and Oliver Norwood called upon from the bench and it was March that called upon Smith to make a diving save from his low effort from range.
After the introduction of Tomer Hemed, Bruno's long throw was only half-cleared and dropped kindly for Knockaert, who volleyed over from close range on 73 minutes in Albion's best spell of the game.
But they failed to break a resolute home defence down and late on Albion stopper Stockdale miscontroled a Rosenior back-pass and Osborn poked home.
To rub salt into the wounds, Bruno was penalised in added time for a foul in his penalty area, despite winning the ball and Clough converted.
Brighton: Stockdale, Bruno, Duffy, Dunk, Rosenior; Knockaert, Stephens, Sidwell (Norwood 67), Murphy (March 65); Murray, Baldock (Hemed 72). Unused subs: Walton, Tomori, Huenemeier, Kayal.
Forest: Smith, Lichaj, Worral, Fox, Traore, Pereira (Clough 59), Cash, Cohen, Osborn, Ward, Assombalonga (Brereton 76). Unused subs: Evtimove, Tshibola, Carayol, Lam, McCormack.
Attendance: 22,020 (1,919 away).