Dinesh Chandimal made 147 not out and Angelo Mathews ended his century drought to help Sri Lanka rediscover their competitive edge against India on day three of the third and final Test on Monday (December 4).
Sri Lanka's current and former Test skippers combined in a 181-run fourth-wicket partnership to help them reach 356 for nine when bad light stopped play, the first time they had passed 300 in the series.
Chandimal played a captain's knock and his 10th test century included 18 fours and one six.
Lakshan Sandakan was yet to open his account at the other end with Sri Lanka still 180 runs behind.
Beginning the day 405 adrift of India's total of 536 for seven declared, the onus was on overnight batsmen Mathews and Chandimal to lead Sri Lanka's battle for survival at the Feroz Shah Kotla Stadium.
The right-handed duo did not let their team down, denying India in the morning session as Mathews rode his luck to move on to 111 after being dropped twice.
After the second day was blighted by complaints of air pollution by the visitors, Sri Lanka resumed on a slightly hazy morning on 131 for three.
Their occasional discomforts notwithstanding, Chandimal and Mathews displayed the kind of application that has been lacking among the tourists who trail 1-0 after their heaviest defeat in the second Test in Nagpur.
Mathews was on six when Virat Kohli dropped him at second slip on Sunday and paceman Ishant Sharma endured more anguish when Rohit Sharma grassed a catch in the same position with the batsman on 98.
Mathews went on to complete his eighth test century, more than two years after his last against the same opponents, and the relief was evident as he pumped air in celebration.
Mathews was lucky again on 104 when he lofted Ravindra Jadeja to mid-off and the ball burst through substitute fielder Vijay Shankar's hands.
He finally ran out of fortune when Ashwin ended his defiant knock which included 14 fours and two sixes.
Sadeera Samarawickrama, who suffered concussion on Saturday and missed play on Sunday, scored 33 but Sri Lanka lost four wickets for 39 runs in a late collapse.
Ashwin (3-90) spoiled Roshen Silva's test debut by dismissing him for a duck, while Niroshan Dickwella also fell to the off-spinner for nought.