Dom Sibley's maiden Test centrury sets up final day victory push for England.
Day four scorecard: Close
England 269 all out: Stokes 47; Rabada 3-68, Preorius 2-26, Philander 2-46, Nortje 2-56
South Africa 223 all out: Elgar 88, van der Dussen 68; Anderson 5-40, Broad 2-38, Curran 2-39
England 391/8d: Sibley 133*, Stokes 72, Root 61; Nortje 3-61
South Africa 126/2: Malan 63*
Target 438 runs
Dom Sibley's maiden Test century and an injection of adrenaline from Ben Stokes primed England for a fifth day victory push in Cape Town, but South Africa lost just two wickets in 56 overs to leave plenty of hard work ahead.
Sibley converted his overnight score of 85 into 133 not out on the fourth afternoon of the second Test, undefeated after 311 balls over eight-and-a-half hours, with the hosts declaring with a towering lead of 437.
That was down in large part to an inspired assault from the bat of Ben Stokes, who accelerated the game dramatically in the morning with a knock of 72 in just 47 deliveries.
When Joe Root declared shortly after lunch on 391 for eight England had added 173 runs in just 32 overs, cashing in on Sibley's groundwork throughout the more gently-paced third day.
South Africa's response was measured, with an opening stand of 71 only broken when part-time leg-spinner Joe Denly made Dean Elgar his first Test scalp. That was a lone success until the penultimate over of the day, when James Anderson returned to pick up Zubayr Hamza's outside edge and leave the Proteas 124 for two.
The fate of the game may ultimately be decided by a Newlands pitch which has become increasingly benign but could yet show signs of life if the cracks open. If it does not, Anderson and Stuart Broad will be tasked, not for the first time, with hauling their side over the line through other means.
For the hosts, debutant Pieter Malan showed the way, eating up 193 balls for his 63 not out.
Play resumed on 218 for four, Sibley understandably watchful with his milestone in sight while Stokes batted with playful abandon at the scene of his career-best 258 four years ago. South Africa initially declined to take the second new ball, a decision Stokes seemed intent on punishing.
A pull for four got his blood pumping but a glorious swing for six - high and hard over Dwaine Pretorius' head - and a reverse swat underlined the message. Keshav Maharaj was next on the receiving end, heaved for six into the stands.
Vernon Philander unwrapped the new ball and shipped 12 runs in five balls to Stokes - the same number he had conceded in his first 13 overs. A toe-ended pull off Kagiso Rabada could have ended the fun on 38 but saw the ball squirm through Quinton De Kock's gloves as he raced towards short fine-leg.
Sibley's quiet progress had slipped into the shadows but he reclaimed centre stage as his big moment neared. A thick edge off Rabada took him to 99 but he got over the line in more stylish fashion, stooping to sweep Maharaj for four.
He welcomed the moment joyously, leaping past the stumps at the non-striker's end and punching the air. It was a rare extravagance in an otherwise sober display of old-school batting values.
Stokes, meanwhile, roared past fifty in a whirlwind 34 balls and was threatening to catch his partner until another swipe down the ground was held at long-on to cease Maharaj's suffering.
England added another 65 before declaring, Ollie Pope, Jos Buttler and Sam Curran all departing to the cause of quick runs, while Sibley entered into the spirit himself by nailing Maharaj for his first six in Test cricket.
By now England knew the pitch was not going to offer lashings of assistance, making the new Kookaburra particularly important. Malan and Elgar, who both hit their first balls for four, safely absorbed the initial burst of Anderson and Broad and reached tea on 46 without loss.
Root had experimented with with Denly just before the break and saw enough encouragement against the left-handed Elgar to persist. It was a sound decision, with the final ball of his sixth over pouched by Buttler as the batsman pushed in defence.
England sensed an outside edge and umpire Paul Reiffel agreed after a few seconds of pondering. Elgar challenged the decision but the tiniest sliver of movement on UltraEdge ended his stay on 34.
For more than two hours that was a lone strike, with Stokes particularly unlucky to be unrewarded for a fierce spell. Anderson made one last effort, though, and Buttler held on to remove Hamza from the day five equation.