Wayne Routledge’s last-gasp header saw Swansea City secure a play-off spot with a handsome victory over 10-man Reading on a dramatic night.
Steve Cooper’s side knew they had to win at the Madejski Stadium to have any hope of a top-six finish, and Rhian Brewster’s 10th goal of the season gave them an ideal start.
The sending off of Yakou Meite then gave the Swans a man advantage, but the Royals equalised before the break through a George Puscas penalty.
The Swans restored their lead through a classy finish from substitute Routledge, before Liam Cullen showed great composure to steer in his first goal for the club.
And when Routledge popped up at the death to complete his brace it put the Swans into the top six as Forest suffered a 4-1 defeat at home to Stoke, meaning Swansea got into the play-offs on goal difference.
An unchanged Swans side started on the front foot, with centurion Connor Roberts having particular joy down the right-hand flank.
Brewster then nearly threaded Conor Gallagher in on goal after fine work by Andre Ayew, before Roberts hit a strike into the ground and over the bar after Jake Bidwell had made the overlap on the opposite flank.
The hosts responded by having a good spell of possession, probing and asking a few questions of their own.
But the visitors hit the lead in the 16th minute through Brewster. The striker picked the ball up some 30 yards out and got the ball out of his feet before smashing a long-range drive that completely deceived Rafael in the Reading goal.
John Swift curled a free-kick over at the other end, while more good work by Roberts could not quite end with Bidwell getting on the end of a deep cross, before Rafael made a hash of dealing with a Gallagher cross.
Swift headed straight at Erwin Mulder from a good counter on the half-hour mark, with Ayew quickly advancing up the field to work Rafael again.
There were opportunities coming at both ends, with Mulder called into action again as Meite took aim from the left side of the area.
Swansea were riding their luck a little, and had a let off when a sliced clearance landed on top of the bar.
Matt Grimes had a free-kick pushed away by Rafael before the home side were reduced to 10 men after Meite had pushed Mike van der Hoorn in the face after a tussle for the ball.
But the hosts made light of the numerical disadvantage by levelling after Bidwell was adjudged to have fouled Andy Rinomhota, with Puscas beating Mulder – who got a hand to the strike – from the spot.
However, the Swans should have led at the break. Ben Cabango’s shot was blocked and fell to Jay Fulton, but the Scot pulled his shot wide of the target.
Rafael pushed away an Ayew drive right on half-time, with Swansea frustrated that referee Stephen Martin did not award them a penalty of their own as Fulton went down under a challenge from Omar Richards.
With Cardiff winning and Nottingham Forest losing, Cooper knew goals were needed and he made two changes at the break.
Yan Dhanda came on for Fulton, while Routledge replaced van der Hoorn, and they were immediately on the front foot.
With Swansea committing so many players forward, Reading looked to sit deep and play on the break and they proved resolute as the visitors battled to find a way through.
Grimes curled a free-kick wide of the target and Gallagher also threatened from distance, but the hour mark came and went without any clear-cut chances to show for their dominance of possession and territory.
However, when they did craft a sight of goal they took the chance clinically. Grimes produced a lovely ball, and Routledge controlled superbly to loft the ball over Rafael and into the net.
Unfortunately for the Swans, that goal went in moments after Forest had equalised against Stoke, which appeared to put a sizeable dent in their play-off aspirations.
Nevertheless, Cooper’s side continued to search for more goals in the hope events in the East Midlands would turn back in their favour.
They so nearly made it 3-1 with 17 minutes to play as lovely link play from Rutledge and Bidwell ended with Ayew steering just wide.
The situation was changing all the time, and Stoke retook the lead at Forest to leave the door ajar for the Swans.
And, when Stoke scored a third at the City Ground and Cullen coolly fired home his first senior goal for the club with six minutes remaining, they suddenly only needed a goal to finish in the play-off places.
Grimes had a deflected shot tipped over, while it took a superb Marc Guehi block to deny Omar Richards as Swansea took risks with their goal within reach.
And the Swans then got the goal they needed in stoppage time as Routledge popped up to nod in at the far post, with Stoke’s fourth goal putting the matter beyond doubt a few moments later to spark delighted celebrations among Cooper, his players and his staff.
Reading: Rafael Cabral; Michael Morrison, Matt Miazga (Tyler Blackett 81), Liam Moore (captain); Chris Gunter, John Swift (Gareth McCleary 75), Michael Olise, Omar Richards, Andy Rinomhota; Yakou Meite, George Puscas (Lucas Boye 85).
Unused Substitutes: Sam Walker, Jordan Obita, Felipe Araruna, Ayub Masika, Charlie Adam, Gabriel Osho.
Swansea City: Erwin Mulder; Ben Cabango (Liam Cullen 82), Mike van der Hoorn (Wayne Routledge 46) (Bersant Celina 93), Marc Guehi; Connor Roberts, Jay Fulton (Yan Dhanda 46), Matt Grimes (captain), Jake Bidwell; Conor Gallagher, Andre Ayew; Rhian Brewster.
Unused Substitutes: Josh Gould, Tivonge Rushesha, Nathan Dyer, Aldo Kalulu, Jordon Garrick.
Referee: Stephen Martin