France kept alive their dreams of a first Grand Slam and Six Nations title since 2010 with a tense 13-9 win over Wales.
An Anthony Jelonch try and eight points from Melvyn Jaminet set up the victory.
Spirited Wales responded with three Dan Biggar penalties, but could not break down the French defence.
Fabien Galthie's side will aim to complete the Grand Slam against England next Saturday in Paris, while Wales host Italy in their final game.
It was a third defeat in four matches for Wayne Pivac's defending champions, alongside a narrow victory over Scotland.
Despite second-half territory and possession dominance, along with inspired performances by Biggar and Taulupe Faletau, Wales' lacklustre attack could not crack a resolute French rearguard expertly organised by familiar face Shaun Edwards.
The France defence coach was part of Warren Gatland's Wales backroom team between 2008 and 2019 - a period that delivered four Six Nations titles, three Grand Slams and a World Cup semi-final appearance - before he joined Galthie's set-up.
The closest chance came when Wales centre Jonathan Davies just failed to hang onto a pass in the second half with the French line at his mercy.
Led by hooker and man-of-the-match Julian Marchand, France also excelled at the contact area as they took their winning sequence to seven games.
Their first Six Nations silverware in 12 years is now beckoning.
Friday night rugby was back for the first time in the Six Nations in Cardiff since 2017 with the Principality Stadium roof open.
The game was unusually played out in front of some empty seats, with 63,208 attending a stadium that holds 74,500.
Factors such as the game being held on Friday night and travel issues, Covid-19 concerns, Wales losing two out of their first three matches and ticket prices, some costing £100, all helped explain the 11,000 absent fans.
There had been talk of fewer French fans travelling, but that did not translate into the Principality Stadium cauldron with the thousands who had made the trip in fine voice.
Wales head coach Pivac made four changes with Cardiff duo Seb Davies, normally a lock, and Josh Navidi packing down in the back row instead of Ross Moriarty and Taine Basham.
Navidi demonstrated no rustiness despite having played only one game in five months since recovering from a shoulder injury.
Injured centre Nick Tompkins was replaced by Jonathan Davies, with prop Gareth Thomas preferred to Wyn Jones.
France made one change from the side that defeated Scotland as winger Gabin Villiere came in for Damian Penaud, who had tested positive for Covid-19.
Jaminet and Biggar exchanged early penalties before France showed their class with a flowing move for the only try, finished by flanker Jelonch following a scoring pass from Jaminet, who also converted.
Concussion controversy
Wales scrum-half Tomos Williams suffered a noticeable head injury in the move while attempting a tackle and tried to stumble to his feet on a couple of occasions.
Williams was permanently withdrawn with no need for a head injury assessment (HIA) and replaced by Kieran Hardy.
The incident followed on from Wales being involved in a concussion controversy when prop Tomas Francis suffered a head injury against England 13 days previously.
Francis was passed fit to face France despite warnings it would be a grave mistake to select him from Progressive Rugby, a lobby group concerned with safety of players.
Pivac insisted Wales had "gone the extra mile" in involving an independent concussion specialist surrounding Francis.
Wales bounced back into the match with a second Biggar penalty set up by a brilliant Faletau tackle on Jaminet.
The hosts were struggling to cope with Antoine Dupont's sniping, with prop Thomas stopping him on one occasion with a low tackle.
That resulted in the Ospreys front row going off for a head injury assessment, which he passed.
Biggar produced an excellent kicking game in the first half to give Wales attacking line-out options, which the home side could not completely capitalise on as France continued to frustrate at the breakdown.
The Wales captain slotted over a third penalty, awarded after an outstanding 50:22 kick had won crucial territory, as the home side battled back to a 10-9 deficit at half-time, with Faletau and lock Will Rowlands at the heart of the effort.
France prop Mohamed Haouas replaced Uini Atonio at the break before Jaminet extended the lead with a second penalty when Adam Beard was caught offside.
Another brilliant Biggar kick set up an attacking chance for Wales, but hooker Ryan Elias was held up over the line.
Wales, guided by Liam Williams, were gaining the upper hand in the aerial contest with both sides attempting high kicks to gain the ascendency in a cagey third quarter dominated by the whistle of referee Matthew Carley.
Wales' missed chance
Another sublime Biggar chip kick fell into Faletau's hands, but the inside pass to Jonathan Davies went astray in the visiting 22 with the French line in sight.
Wales held territory and possession dominance, but were thwarted by France's efficiency at the contact area.
Pivac threw on wing Louis Rees-Zammit to replace Jonathan Davies with Josh Adams moving into midfield, while Gareth Anscombe replaced full-back Williams.
France took off captain Dupont with eight minutes remaining, but Les Bleus' breakdown dominance continued as Wales' pedestrian attacking game was picked off.
French fans were left singing into the Cardiff night as their side held on for victory.
Wales: L Williams; Cuthbert, Watkin, J Davies, Adams; Biggar (capt), T Williams; G Thomas, Elias, Francis, Rowlands, Beard, S Davies, Navidi, Faletau.
Replacements: Lake, W Jones, Lewis, Moriarty, J Morgan, Hardy, Anscombe, Rees-Zammit.
France: Jaminet; Moefana, Fickou, Danty, Villiere; Ntamack, Dupont (capt); Baille, Marchand, Atonio, Woki, Willemse, Cros, Alldritt, Jelonch.
Replacements: Mauvaka, Gros, Haouas, Flament, Cretin, Lucu, Ramos, Lebel
Referee: Matthew Carley (Eng)
Touch judges: Jaco Peyper (SA) & Andrea Piardi (Ita)
TMO: Tom Foley (Eng)