Captain Hashim Amla struck his 24th Test century as South Africa cut their first-innings deficit to 276 runs against a frustrated England at Newlands.
After the exploits of Ben Stokes led the tourists to a mammoth 629-6 declared on day two, Monday was a very different story as Amla (157 not out) played a patient knock to keep his side in the second Test.
His century came off 214 deliveries with a perfectly executed a late cut off Moeen Ali (0-80) for four, with England made to rue James Anderson's drop of the Proteas skipper off the bowling of Joe Root when he was on 76.
AB de Villiers (88) was also dropped before Steven Finn (1-82) eventually got South Africa's dangerman, with Faf du Plessis (51 no) joining Amla to guide the hosts to 353-3 at stumps - with 77 still required to avoid to follow-on.
De Villiers showed early signs of nerves as a cut went close to Nick Compton at backward point, but it was Amla who was first to benefit from a slice of luck.
A spinning delivery from Root (0-12) found an outside edge, but Anderson (0-53) was unable to hold on at slip as the ball flew quickly to him.
South Africa moved on to 199-2 at lunch, with Amla and De Villiers having added 58 in the opening session.
England's hero from day two, Stokes (1-67), thought he had made an early breakthrough after lunch when he trapped De Villiers lbw, only for the batsman to successfully overturn the decision on review - a clear inside edge saving him.
Amla's second lifeline of the day came in the 90th over as a loose cut flew to Compton at backward point, only for the England man to fail to hold on.
Eventually there was success for England as Anderson held a mistimed pull from De Villiers at mid-wicket, but Du Plessis continued to frustrate the tourists alongside his captain.
Amla registered his seventh Test 150 before the close of play, with Du Plessis edging past his half-century, as South Africa responded with impressive resilience following Sunday's ordeal at the hands of Stokes and Jonny Bairstow.