Rahmat Shah struck 139 in Bulawayo to revive Afghanistan hopes of winning a series-deciding second Test against Zimbabwe before rain stopped play late on day three.
The experienced 31-year-old put on 132 for the seventh wicket with debutant Ismat Alam (64*) to turn a worrying overnight situation into a potential path to victory.
Afghanistan were 46-3 after day two at Queens Sports Club, 40 runs behind having lost star batsman and captain Hashmatullah Shahidi (13).
Much hinged on Shah, a double centurion in the drawn first Test, and he proved equal to the task as Afghanistan reached 291-7 by the close of play for a 205-run lead.
Shah faced 275 balls over two days, having come in at No 3 with the tourists reeling at 18-2 in the southern city.
He performed patiently throughout, offering few chances to an increasingly frustrated Zimbabwe attack, and struck 14 fours in a 401-minute stand.
His innings ended shortly before the rain. A pacey, good length ball from the most successful Zimbabwe bowler, quick Blessing Muzarabani, beat Shah and he was trapped lbw.
Unbeaten Alam followed the cautious approach of Shah, hitting four fours off 122 balls as he atoned for a first-innings duck.
Zia-ur-Rehman (six), Afsar Zazai (five) and Shahidullah Kamal (22) were the other Afghan batsmen to fall on day three, as both teams seek a first Test win since beating each other in 2021.
Brian Bennett caught Rehman at short fine leg, a brilliant catch by Dion Myers at backward point dismissed Zazai and a Shahidullah prod was snapped up by Takudzwanashe Kaitano at silly point.
Muzarabani (4-71) and fellow quick Richard Ngarava (2-47) fared best for Zimbabwe on a surface that has become batter friendly after initially favouring the bowlers.
© Agence France-Presse
Photo: @ACBofficial/X