Jonathan Sarfati: One that got away!
The old 19th century greats played 12...g5 in a similar position without White's weakening 7.b4 ♗b6 exchange. See the games under Games Like Kolisch vs Anderssen, 1860 Stockfish 14 rates it as -5 here. but the game move 12... ♘e5 is still -2.
16.f4 should have lost quickly; computer eval is -7. But 17... ♕h6 lost much of Black's advantage. Best was 17...♖e8 bringing another heavy piece into the attack, e.g. 17...♖e8 18.♕d3 ♕g6 19.♕g3 ♕xe4 20.♕xh4 ♕xb1 (-8). Even 17...♕g6 was -5, e.g. 17...♕g6 18.♕g4 ♕xe4 19.♗e3 ♗f6 20.♘xc3 ♕e8.
There was just no need to defend the ♘h4, e.g., 17...♕g6 18.♔xh4 ♕g2 cutting off the W♔'s retreat, with mate in 8 at most.
After 17...♕h6, 18.♕g4 was best, only -2. After 18.♔g3? the game move 18...c2 was -9. 18...g5 was even stronger.
19...♕g6+ was a miscalculation. This time the ♘ could be grabbed and Black had nothing better than a draw.
{19...g5! was -9.5, e.g. 19...g5 20.f5 Be5+ 21.Kg4 Qf6 22.Qd1 h5+ 23.Kxh5 g4 24.Qd2 Nxf5 25.exf5 Qxf5+ 26.Kh4 Rh8+ 27.Qh6+ Kf7! even stronger than taking the ♕ right away. Mate in 8 at most. White loses even more quickly with 19...g5 20.fxg5 ♖xg5+ 21.♗xg5 ♕xg5+ 22.♔h3 ♕g2+ 23.♔xh4 ♗f6+ 24.♔h5 ♕g5#.