Match ends, Cardiff City 0, Swansea City 2.
Swansea City climbed into the Championship's automatic promotion places as Jamal Lowe's two goals secured a south Wales derby victory at Cardiff City.
Lowe volleyed in from close range after six minutes as the visitors controlled a derby lacking its usual edge with fans still not allowed to return to stadiums in Wales.
Swansea captain Matt Grimes struck the post and, in the second half, Cardiff midfielder Joe Ralls was sent off after receiving a second booking for a reckless lunge on Korey Smith.
Lowe then put the result beyond doubt with a superb second goal, picking up possession just inside the Cardiff half and beating two defenders before caressing a fine finish with the outside of his boot from the edge of the area.
The goals doubled Lowe's tally for the season, and he was close to completing his hat-trick when he curled another shot narrowly wide.
But it made little difference to the outcome of this 110th south Wales derby, with Swansea now aiming to become the first team to win both league encounters in a single season when the old rivals meet again in March.
Steve Cooper's side move up to second place in the Championship table - at least until the rest of Saturday's games kick off at 15:00 GMT - while Cardiff remain ninth, four points adrift of the play-off spots.
Defeat also ended a run of four successive wins for the Bluebirds, who are without a south Wales derby victory since 2013 after being outplayed on this occasion.
Like all good derbies, matches between Cardiff and Swansea are usually spiteful affairs, simmering with tension and hostility.
But all those elements were missing at an empty Cardiff City Stadium, unnervingly serene without its baying crowd and theatre of hate.
With the Bluebirds' home advantage seemingly negated, their opponents settled quickest and took a deserved early lead.
It was a messy goal to concede from Cardiff's perspective, Jake Bidwell's looping cross from the left headed back across goal by Connor Roberts for Lowe, whose volley squirmed between the legs of Alex Smithies and rolled into the net.
The game followed a predictable pattern, Swansea controlling possession and building their attacks patiently, while Cardiff looked to catch them on the break.
That approach had its moments, with the visitors' Ryan Bennett booked for bringing down Swansea-born Mark Harris to halt a home counter-attack.
But the Swans were still on top and they came close to scoring a second when Grimes took a return pass from his short corner and saw his curling shot brilliantly tipped on to the post by Smithies.
Although they were the dominant side, Swansea were perhaps fortunate to end the first half with 11 players.
Cardiff striker Kieffer Moore manoeuvred himself into a shooting position on the edge of the penalty area but was fouled by Bennett, who may have counted himself lucky not to be shown a second yellow card.
Harry Wilson's resultant free-kick drifted over and Swansea ended the first half well worth their 1-0 lead, their 3-5-2 formation smothering Cardiff's narrow 4-4-2.
Bluebirds manager Neil Harris had named the same team for a fifth successive match - no wonder after winning the previous four - but he was forced into a change 10 minutes after the interval when Moore injured his hamstring attempting an audacious backheel which went over the bar.
The Wales striker's replacement, Robert Glatzel, had come off the bench to score in Tuesday's win at Stoke - though the German found opportunities scarce here.
The second half was a less intense but more even contest, Cardiff at least enjoying a little more possession even if they were still struggling to create genuine chances.
Their hopes of forcing an equaliser went up in flames, however, when Ralls was shown a second yellow card for his ugly challenge on Smith.
Already overrun in midfield, Cardiff were vulnerable to further Swansea attacks and so it proved when Lowe scored his brilliant second goal to add his name to the list of south Wales derby match-winners.
Cardiff manager Neil Harris:
"Swansea were better than us. It pains me to say that to our fanbase and we're disappointed to be on the end of a derby defeat.
"Swansea were better than us in both penalty areas. A referee decision [Ryan Bennett's challenge on Kieffer Moore] possibly went against us but that's not the reason we lost the game.
"More for me, we didn't cause enough problems for Swansea and the first goal in particular was disappointing.
"We weren't good enough."
Swansea head coach Steve Cooper:
"Any derby win is obviously a good one but to do it in the way we did it makes it even nicer. I thought we were more than good for it from start to finish.
"We did it our way, with the ball, trying to play through the lines, trying to create proper chances.
"Our position on the pitch was excellent. We found the spaces very well. We knew moving the ball together would get us to good areas and the game went to plan.
"It's one for the supporters and I hope they have a good day."
- 4MorrisonBooked at 18mins
- 6VaulksSubstituted forWhyteat 90'minutes
- 8RallsBooked at 67mins
- 29M HarrisSubstituted forPackat 77'minutes
- 10MooreBooked at 35minsSubstituted forGlatzelat 56'minutes
- 2BennettBooked at 14mins
- 5GuehiBooked at 35mins
- 10A Ayew
- 9LoweSubstituted forRoutledgeat 87'minutes
- John Brooks
- Shots on Target
Second Half ends, Cardiff City 0, Swansea City 2.
Attempt missed. Marlon Pack (Cardiff City) right footed shot from outside the box misses to the right.
Corner, Cardiff City. Conceded by Connor Roberts.
Foul by Jay Fulton (Swansea City).
Robert Glatzel (Cardiff City) wins a free kick on the right wing.
Substitution, Cardiff City. Gavin Whyte replaces Will Vaulks.
Attempt missed. André Ayew (Swansea City) header from the centre of the box misses to the right. Assisted by Jake Bidwell with a cross.
Foul by Jay Fulton (Swansea City).
Harry Wilson (Cardiff City) wins a free kick in the defensive half.
Substitution, Swansea City. Wayne Routledge replaces Jamal Lowe.
Jamal Lowe (Swansea City) wins a free kick in the defensive half.
Foul by Curtis Nelson (Cardiff City).
Connor Roberts (Swansea City) wins a free kick in the defensive half.
Foul by Harry Wilson (Cardiff City).
Attempt missed. Marc Guehi (Swansea City) right footed shot from the centre of the box is high and wide to the right. Assisted by Korey Smith.
Attempt missed. Jamal Lowe (Swansea City) right footed shot from outside the box is close, but misses to the right. Assisted by Jake Bidwell.
Substitution, Cardiff City. Marlon Pack replaces Mark Harris.
Attempt missed. Robert Glatzel (Cardiff City) header from the centre of the box misses to the left. Assisted by Harry Wilson with a cross following a corner.
Corner, Cardiff City. Conceded by Ryan Bennett.
- The Royle Family box set: Revisit all the laughs from Jim and Barbara's front room
- Chilling Icelandic crime drama: The Valhalla Murders is streaming now