Sydney has pulled off a superb second-half fightback to dismantle Fremantle by 17 points at Optus Stadium and keep its hopes of finishing in the top four alive.
After falling 23 points behind in the first half, the Swans adjusted and picked apart the Dockers' famed defence, winning 11.16 (82) to 9.11 (65).
The win was built on a patient game style that frustrated the Dockers and took the ball out of their hands in the second half, with the Swans racking up a massive 127 uncontested marks to the Dockers' 70.
While Fremantle was able to grab the lead early in the final term, it conceded five of the last six goals to lose just its third game at home this season and end the night with its top-four spot vulnerable.
While Lance Franklin was the superstar attraction in his return to WA, it was another local product who stole the show, with Chad Warner continuing his rapid emergence as a star of the competition with a best-afield performance.
The powerful onballer finished with a career-best 35 disposals, seven clearances, six inside 50s and a goal.
He was supported in the midfield by strong bodies Callum Mills (26 and nine tackles) and Luke Parker (24 and five inside 50s), while Ollie Florent (21 and 11 marks) was tireless.
It was the Swans' classy smalls who finished the job, however, with Tom Papley and Errol Gulden booting two goals each at crucial times.
It was a game of two clear halves, with the Swans scrambling early and conceding the clearances from the outset. They allowed the Dockers to play the game in their half and bringing their army of pressure forwards into the game.
Big man Rory Lobb got the scoreboard ticking, however, recovering from a heavy tackle that jolted his right shoulder and snapping a clever goal in the next passage.
Lance Franklin gave away a 50m penalty for not adhering to the stand rule, paving the way for David Mundy to convert a set shot, and when Bailey Banfield kicked his first the Dockers were racing away.
The Swans' recovery in general play came in the second term, with Warner lifting in the middle with nine disposals and four clearances for the quarter.
Inaccuracy held the visitors back, however, kicking 2.7 from 18 inside 50s, while the Dockers made the most of their more limited opportunities and built a 23-point lead.
Some ill-discipline from defender Jordan Clark in the final seconds led to a free kick in the centre square, however, and opened the door for Franklin to mark and kick his first goal after the siren, cutting the margin to 15 at the main break.
Warner's immense influence continued in the third, spearheading a run of three unanswered goals for the Swans – including his first, from a snap in traffic – as the game turned in their favour.
Sydney controlled possession, amassing 49 uncontested marks to 17 for the quarter, and frustrating the Dockers with their patient ball use, taking a three-point lead at the final break and kicking away late.
The Swans were the dominant side after quarter time. Since quarter time, the Swans won the inside 50 count by 17 and had 25 scoring shots to 14. They kept the ball from the Dockers, registering 115 marks to 51 and outscored the Dockers by 46 points from turnover.
Sydney's 138 marks was its highest tally for the season and the fourth highest by any side this year.
Cancelled out in nine seconds
Lachie Schultz looked like he had kicked the Dockers 23 points clear at the main break, converting a clever snap with nine seconds to play. But moments after his kick sailed through, teammate Jordan Clark ran into the back of Swan Ryan Clarke, leading to a Swans' free kick at the next centre bounce. Callum Mills pumped the ball inside 50, and Lance Franklin did the rest, marking and converting his set shot from 50m after the siren. It felt significant, with a scuffle following and the Swans heading to the rooms on a positive note, and the contest changed significantly in the second half.
FREMANTLE 3.3 6.5 6.9 9.11 (65)
SYDNEY 1.1 3.8 6.12 11.16 (82)
Fremantle: Schultz 2, Banfield 2, Taberner 2, Lobb, Mundy, Walters
Sydney: Amartey 2, Gulden 2, Papley 2, Franklin, Hayward, Heeney, Stephens, Warner
Fremantle: Logue, Ryan, Darcy, Brodie, Mundy
Sydney: Warner, Gulden, Papley, Parker, Florent, Mills, Lloyd
Fremantle: Lobb (shoulder)
Sydney: Amartey (shoulder)
Fremantle: Ethan Hughes (unused)
Sydney: Harry Cunningham (unused)