West Indies debutant Jayden Seales struck late in the day to peg back South Africa to 128/4 on the first day of the first Test in St Lucia.
SCOREBOARD | West Indies v Proteas, Day 1
Seales (3/34) accounted for fellow debutants Keegan Petersen (19) and Kyle Verreynne (6), but also collected the key scalp of Aiden Markram to limit SA's lead to just 31 after Lungi Ngidi (5/19) and Anrich Nortje (4/35) combined to detonate the West Indies for 97.
Markram (60) and Rassie van der Dussen (34*) looked set to take SA to relative safety through a 79-run stand for the third wicket.
Seales, though, induced an edge from Markram that was well taken by Joshua Da Silva and then forced Verreynne into a false shot that saw SA move from 113/2 to 119/4.
Quinton de Kock (4*) and Van der Dussen saw out the last few overs on a day where 14 wickets fell for 225 runs.
That South Africa took 43 overs to pass the West Indies' total and establish a lead was a testament to their patience and willingness to graft and read the conditions.
Markram had to watch Dean Elgar (0), playing his first Test as the full-time captain, disappear for a fifth-ball duck to Kemar Roach (1/27).
He also looked on when a hitherto composed Petersen (19) was dismissed by Seales.
They had a few scares, especially Markram, who was reprieved on four when Windies 'keeper Da Silva missed an edge off Roach's bowling.
He also survived a review on 47 when Seales appealed for a caught behind that wasn't given out by umpire Joel Wilson.
Van der Dussen was on five when he overturned a leg-before decision off Seales's bowling. It wasn't easy going and Rahkeem Cornwall's spin and bounce always caused a few flutters.
In reaching his ninth Test 50 off 99 balls, Markram was a mix of watchfulness and aggression, but couldn't convert when he was prised out by the hugely impressive Seales.
He missed a sixth Test ton, but the Four-Day Franchise Series top run scorer who reeled off three consecutive 50s in the T20 series against Pakistan has crossed in four of his last eight Test knocks.
Earlier, Kraigg Brathwaite (15) and Shai Hope (15) started solidly, but when they were both removed by Nortje, the West Indies didn't have a way back from 31/2.
At lunch, they were 48/4 when Nkrumah Bonner (10) and Kyle Mayers (1) were dismissed by Kagiso Rabada and Nortje.
Bonner was hit on the head by Nortje and was substituted by Kieron Powell because of concussion, but the real damage was inflicted in the afternoon session when Blackwood (1), Roston Chase (8) and Da Silva (0) all fell with the score on 56.
Nortje accounted for Blackwood while Ngidi started his five-wicket march with the scalps of Chase and Da Silva.
Ngidi came back to remove Cornwall, Roach and Jason Holder to prevent the West Indies from getting to triple figures.