France's hopes of a Six Nations Grand Slam are over after a revitalised Scotland inflicted their fourth consecutive Murrayfield defeat.
Fabien Galthie's side had won their first three games but a first-half red card for Mohamed Haouas allowed Scotland to seize control.
Sean Maitland crossed either side of the break after Damian Penaud's score, before Stuart McInally added a third. And Charles Ollivon's late consolation could not prevent Gregor Townsend's side earning consecutive wins.
Adam Hastings, who impressed in place of the exiled Finn Russell, added 13 points with the boot.
France remain top of the championship, but even a bonus-point win over Ireland in Paris next weekend might not seal the title with England still to face Italy.
'Murrayfield revels at ferocious Scots'
Chasing the fourth leg of a Grand Slam, France were met with Scottish belligerence from the get-go, their day beginning badly and getting steadily worse as it went on.
Here they met a home team who had no truck with all the chat of the glorious revival of Les Bleus. They said privately they believed they would win and they set about their mission with zeal.
There were towering performances from the Scotland back-row, with Jamie Ritchie and Hamish Watson bringing their relentless personalities to bear. Lock Grant Gilchrist was outstanding. The front row to a man were ferocious with prop Zander Fagerson doing his bit in a winning scrum and putting in a monstrous shift around the park.
Hastings was terrific and this was a big day for Stuart Hogg, perhaps his biggest in a Scotland jersey. As captain, he would have felt the joy of this big time. There were big performers all over the field. Red card or no red card, this was richly deserved.
France had Francois Cros binned early for dumping Gilchrist on his head in the tackle, with Paul Willemse perhaps getting off lightly for he was on the scene as well. And while Cros was away for his 10 minutes - and there was a case for it being a red card - Scotland hit the front.
The visitors' scrum has been one of their few areas of weakness on their road to Murrayfield this season and now it hurt them again. The Scots have been reborn in that department. When France collapsed, Hastings banged over the first points.
Romain Ntamack had gone by then, the brilliant fly-half injured inside 10 minutes. Another blow following the withdrawal in the warm-up for their replacement hooker, Camille Chat. Things were not going their way.
Cros returned but Hastings made it 6-0 just after. A quarter played and France had produced nothing. When they threatened to get up a head of steam they were halted by the aggression coming at them, their threat snuffed out early through Scotland's intensity and their own handling errors under the pressure of the blitz.
Murrayfield revelled in it - and then Murrayfield winced. Having looked passive, France suddenly switched and regained their magic, if only for a little while.
A thrust up the left from Matthieu Jalibert and Gael Fickou had Scotland in trouble. When they moved it right. Anton Dupont, the wee wizard that he is, put in the most sumptuous cross-field kick for Penaud to score. Jalibert then rifled over the conversion to put France ahead.
'Big & bold Scotland rip Slam from French'
The drama was only starting. Four minutes before the break, Haouas, a boy with the shortest fuse, lost the plot amid a melee on the French line. Practically every player was in there, pushing and shoving, but Haouas threw a punch at Ritchie and he got what he deserved - a red card.
Hastings added to the misery by putting over the reluctant penalty to inch Scotland back in front. Before the half was done, Scotland sickened France further, striking out through their forward muscle before Hastings entered proceedings with some brilliance that France couldn't cope with.
He dummied and slalomed his way into space and found Ali Price in support. France were spreadeagled. Pace and accuracy did for them. Sam Johnson kept his cool in the decisive moment and gave it on a plate to Maitland, who sprinted over in the corner. Within four minutes of Haouas walking Scotland had hit them with eight points. At last, they had found their ruthless streak.
The early minutes of the second half shone a light on how Scotland managed to put it all together on the day. Under ferocious pressure near their own line, they stood up. Big and bold, they would not let the French through, Watson coming up with a massive turnover.
Then, they attacked and France got well and truly Hogg-roasted. The captain took off from his own 10m line, arcing downfield before playing in Chris Harris, who galloped clear. The centre had Price on his shoulder and when Price was hauled down in the French 22, the recycle was quick and the execution precise. Ritchie and Johnson sent Maitland in for his second score.
Hastings conversion from the touchline was pin-sharp. The 15-men led the 14-men 21-7. The Slam had been slammed.
France rallied but the only joy they got from pressure was three points from Jalibert, a penalty that was put over after they seemed to realise that trying to bust the home defence for a try wasn't working out.
The third Scottish try came 15 minutes before the end. It was a fluke, but Murrayfield didn't care a whole lot about that. Scotland had a lineout in the French 22. McInally - on for the 50-cap man Fraser Brown - had his throw pinched, the ball being diverted back on the French side, where no visitor stood. McInally scooped up the gift and ran away to score. Hastings knocked over the conversion.
The Scots led by 28-10, a gap that narrowed to 11 when Ollivon battered his way four minutes from time. Jalibert added the conversion, but he couldn't save the Slam. A thunderous Scotland, with help from the madcap Haouas, ripped it from their grasp.
Line-ups
Scotland: 15-Stuart Hogg (capt); 14-Sean Maitland, 13-Chris Harris, 12-Sam Johnson 11-Blair Kinghorn; 10-Adam Hastings 9-Ali Price; 1-Rory Sutherland, 2-Fraser Brown, 3-Zander Fagerson, 4-Scott Cummings, 5-Grant Gilchrist, 6-Jamie Ritchie 7-Hamish Watson, 8-Nick Haining
Replacement: 16-Stuart McInally, 17-Allan Dell, 18-Willem Nel, 19-Sam Skinner, 20-Magnus Bradbury, 21-George Horne, 22-Duncan Weir, 23-Kyle Steyn
France: 15-Anthony Bouthier; 14-Damian Penaud, 13-Virimi Vakatawa, 12-Arthur Vincent, 11-Gael Fickou; 10-Romain Ntamack, 9-Anthony Dupont; 1-Jefferson Poirot, 2-Julien Marchand, 3-Mohamed Haouas, 4-Bernard Le Roux, 5-Paul Willemse, 6-Francois Cros, 7-Charles Ollivon (capt), 8-Gregory Alldritt
Replacements: 16-Camille Chat, 17-Jean-Baptiste Gros, 18-Demba Bamba, 19-Romain Taofifenua, 20-Dylan Cretin, 21-Baptiste Serin, 22-Mathieu Jalibert, 23-Thomas Ramos
Referee: Paul Williams (New Zealand)
Touch judges: Wayne Barnes (England) & Frank Murphy (Ireland)
TMO: Brian MacNeice (Ireland)