Seamer Kagiso Rabada claimed Test-best figures of 7-112 before South Africa improved their advantage over England to 175 on day three of the fourth Test against England.
Rabada followed up his third Test 5-78 by removing six of England's top seven batsmen as the tourists struggled to 342 all out in reply to South Africa's 475 - a first-innings deficit of 133.
James Anderson removed Dean Elgar for one early in the home side's second innings before Stephen Cook (23no) and Hashim Amla (16no) steered South Africa to 42-1, an overall lead of 175, prior to bad light bringing a premature end to play.
Rabada's second five-wicket Test return was rich reward for 29 overs of toil, the paceman taking on additional overs after Kyle Abbott picked up a hamstring injury.
The 20-year-old removed Joe Root (76), James Taylor (14) and Jonny Bairstow (0) before lunch to put the skids under England after Morne Morkel dismissed Alastair Cook (76) with a brute of a ball.
Cook's bid to become the first Englishman to score 10,000 career Test runs came up 41 runs short - England's skipper adding just nine to his overnight 67 not out before nicking behind.
The wicket ended a third-wicket stand of 99 between Cook and Root, who eased to his 19th Test fifty with 11 runs off three consecutive Rabada deliveries.
Taylor (14) got off the mark by driving his first delivery from Morkel for four but never settled, cue-ending an attempted pull after Root had tickled an out-swinger behind.
England lost their fourth wicket for just 34 runs when Bairstow fell for a third-ball duck, a Rabada off-cutter nipping back and hitting the thumb of his glove.
Rain interrupted play for 45 minutes after lunch and on the resumption Ben Stokes took the attack to spinner Dane Piedt, striking 10 off three balls.
But armed with the new ball Rabada struck back almost straight away - finding the edge of Stokes' bat with Amla snaffling the slip catch.
Chris Woakes slowed England's slide, although not before de Kock had parried a high chance when he had scored just one, adding 43 with Moeen Ali, who struck his fifth Test fifty off 90 balls with nine fours.
When Woakes' luck ran out against spinner JP Duminy, an edge deflecting to Elgar via de Kock's knee, Moeen continued to eke out precious runs, adding 47 with Stuart Broad and Anderson before picking out Dane Piedt at deep extra cover off Morkel.
South Africa had improved their lead by just five when James Anderson found the edge of Elgar's bat, Bairstow pouching the nick safely.
England might have removed Amla before he'd scored but Alex Hales couldn't hold a sharp, one-handed chance off the same seamer.
The former South Africa skipper batted on despite taking a painful blow on his thumb from a sharply-lifting Stokes delivery, highlighting the pitch's increasingly unpredictable bounce.
Watch highlights of day three of the fourth Test at 6pm on Sky Sports 4, followed by The Verdict at 7pm on the same channel. Then join us for all the build-up to day four from 7.30am on the Test blog, with our live coverage kicking in at the earlier time of 7.45am on Sky Sports 2. Play will begin at 8.04am so don't be late!