Sri Lanka need just four wickets to win the first Test against West Indies in Galle after setting the all-but-impossible target of 348 today's penultimate day of play.
West Indies had made just 52 before bad light forced an early end after the hosts' spin trio made quick work of the top order.
The sensational collapse saw the tourists lose four wickets in 15 balls for just four runs.
Ramesh Mendis was the pick of the bowlers finishing with four for 17.
The off-spinner had the makings of a hat-trick as he trapped Kyle Mayers leg before.
Jason Holder was expecting the ball to turn into him on the next delivery but a straight path smashed his off-stump.
Joshua da Silva walked in to face the hat-trick ball but it was wayward from Mendis, who bowled down the leg-side.
Lasith Embuldeniya accounted for Jermaine Blackwood and Roston Chase.
There was little hope for West Indies at 18 for six and all signs were that the game was going to end on the fourth day.
Then Nkrumah Bonner (18) and da Silva (15) batted for just over 45 minutes to hang in before the umpires called bad light.
West Indies' lowest total against Sri Lanka is 93 all out in Barbados in 2018.
Sri Lanka declared their second innings on 191 for four after a 123-run stand by Angelo Mathews and Dimuth Karunaratne in just 150 deliveries.
Skipper Karunaratne, who had posted 147 in the first innings, narrowly missed twin centuries with 83, including nine fours.
He finally stumbled after attempting to cut Rahkeem Cornwall, a top edge knocking the ball off the wicketkeeper's gloves and into the hands of first slip.
Karunaratne has been prolific this year with over 850 runs now at an average of 77. He is the world's third-highest run getter in Test cricket for 2021, behind England's Joe Root and India's Rohit Sharma.
The West Indies were 230 all out in the first innings, with nine wickets falling to Sri Lanka's spinners. Left-armer Praveen Jayawickrama was the pick of the bowlers with four scalps to his name.
The fourth day's play was delayed by one hour due to rain. A total of 52 overs were lost on day three due to rain.-AFP