French police fired tear gas in skirmishes with masked demonstrators in Lyon and Nantes on Saturday, the 26th straight weekend of "yellow vest" protests against President Emmanuel Macron and his economic reform agenda.
In Nantes, black-hooded demonstrators on the fringes of a largely peaceful protest hurled bottles and smashed shop windows, while in Lyon tear gas swirled as police tried to funnel protesters away from the central Place Bellecour.
Six months after the grassroot rebellion erupted over the high cost of living and Macron's perceived indifference toward the plight of working class France, the movement is losing momentum.
Saturday's apparently low turnout nationwide will be a relief to Macron, little more than two weeks out from European elections. The far-right, polling neck-and-neck with Macron's party, is billing the vote as a referendum on his first two years in office.
The prolonged unrest has forced the president into costly policy concessions and put the brakes on his reform timetable, including an overhaul of the pension system this year.
With his authority challenged by the "yellow vests", Macron launched his fight back last month, promising after weeks of national debate to cut taxes and apologising for his sometimes sharp tongue.
Even so, in Nantes on Saturday, protesters said Macron's proposals did not go far enough and lacked detail.
"The 'grand debate' was a smoke screen. Today they're smoking us out with tear gas," said one 43-year-old protester who identified himself as Mickael. "But we won't cave in. Yes we're fewer than at the start, but when the others come back, we'll still be here and we'll still be angry."
Saturday's protest in Paris, which has seen some of the worst street violence in decades during the "yellow vest" uprising, was calm. In driving rain, protesters marched under umbrellas, waving placards reading "Macron, clear off".
Protester numbers have dwindled from highs of over 300,000 nationwide at the peak in November to below 30,000 in recent weeks, according to government estimates.