After two demoralising defeats at Edgbaston and Lord's, India got their act together on Day 1 of the third Test at Trent Bridge on Saturday.
Hardik (5-28 from six overs), whose scalps included Joe Root contentiously given out caught at slip, helped the tourists bowl out England for 161 in 38.2 overs as they earned a 168-run lead on first innings, having made 329 in their opening knock in Nottingham.
Openers Shikhar Dhawan and KL Rahul ensured India maintained their dominance over England in the evening session, sharing an opening stand of 60 before Rahul was bowled by Stokes.
With England on 56, Alastair Cook was first to depart for 29, caught behind off a probing delivery from Ishant Sharma, with his partner Keaton Jennings following next ball when Jasprit Bumrah squared him up horribly.
Watch day three of the third Test between England and India, from Trent Bridge, live on Sky Sports Cricket (channel 404) and Sky Sports Main Event (channel 401) from 10.30am on Monday.
New man in, Pujara was cautious after his recent failures and put on 51 runs with Dhawan for the second wicket before Adil Rashid (1/23) foxed the left-hander with a googly, only to be stumped by Jonny Bairstow.
Olliver Pope (10) and Joe Root (16) added 21 runs for the third wicket, but Sharma's fuller lengths caused all sort of troubles for both the batsman. First, he had Root caught at second slip with Rahul getting his fingers under the ball in time for the TV umpire to rule in his favour.More news: Paul Pogba explains penalty row with Alexis Sanchez
More news: Amnesty International calls for united front against Saudi Arabia
More news: Venezuelan President Maduro's speech abruptly cut short
By the close, India were 2-124 in their second innings - a lead of 292 - after Hardik Pandya had produced a devastating, career-best spell after lunch to rip through England's batting line-up.
For England, James Anderson (3/64), Stuart Broad (3/72) and Chris Woakes (3/75) picked up three wickets apiece.
England were reeling at 108 for 5 in the 30th over as Stokes' struggle ended with Rahul this time claiming a catch off Mohammed Shami (1/56).
Anderson had earlier removed Shami (3) and Bumrah (0) from back-to-back balls - Bumrah bowled by a beauty that angled in at leg and moved away late to hit middle - after Broad had forced Rishabh Pant (24) to chop on and bowled Ravichandran Ashwin (14) with a superb in-swinger.
The 20-year-old became India's 291st Test player when he was handed over the blue cap by skipper Virat Kohli before the start of the match.
Pant joined the elite club of Naren Tamhane (vs Pakistan in 1955), Kiran More (vs England in 1986) and Naman Ojha (vs Sri Lanka in 2015), all of whom took five catches on their Test debuts.