Croatia beat Denmark 3-2 on penalties after a 1-1 draw to take their place in the World Cup quarterfinals on a dramatic night that saw Kasper Schmeichel save a Luka Modric penalty late in extra time before Modric beat him in a see-saw shootout.
The 1998 semi-finalists will play hosts Russia on July 7.
Both teams had scored their goals in an astonishing first four minutes, setting a new tournament record in the process – by all of seven seconds.
Denmark took the lead with only a minute on the clock, Jonas Knudsen’s long throw causing havoc and Mathias Jorgensen’s scuffed shot only helped in off the post by keeper Danijel Subasic.
But three minutes later Croatia were level, a neat build-up on the right resulting in an Andre Rebic cross that was half-cleared and rebounded to Mario Mandzukic, who steered it beyond Schmeichel.
Rebic was causing plenty of problems for Denmark, and when Mathias Jorgensen fouled him on the edge of the area with 10 minutes gone, Ivan Perisic struck at goal but saw the ball deflect over.
Modric set up Rebic, having a field day down the right, but this time the cross was fractionally too high with two teammates waiting in the middle.
After 20 minutes, Mandzukic went down under a challenge in the area after a cross from the left, but the referee waved play on and a VAR check confirmed the decision.
Perisic fired in another threatening ball as Croatia carried the lion’s share of the attacking threat, but Denmark came forward and star man Christian Eriksen’s strike cannoned to safety.
Eriksen then played an astute pass into the path of Braithwaite, who steered it goalwards from an angle but saw Subasic block.
Ivan Rakitic’s long-range effort was pushed out by Schmeichel, and when the ball came back into the area Perisic fired over as the keeper rushed out to narrow the angle.
At the other end, Subasic held an Eriksen cross before Perisic stormed down the left again, his deflected ball into the middle being hacked clear.
Croatia were almost ahead with five minutes remaining until the break when Modric’s flighted free-kick was flicked narrowly wide by Dejan Lovren.
Minutes later, Eriksen was even closer when the ball was laid back to him on the right-hand side of the Croatia box and his floated cross clipped the bar on its way over.
Rakitic found space but saw his low strike saved by Schmeichel and Croatia had a scare when Mandzukic went down after a challenge, but he was able to continue following treatment.
Denmark made a change at the break, bringing on Lasse Schone for Christensen as they sought to bolster their midfield, and within seconds of the restart Perisic was involved again but fired a speculative effort miles over.
That apart, it was an uneventful start to the second half with none of the frenetic pace that had characterised the beginning of the first, Knudsen crossing towards Andreas Cornelius but Subasic claiming.
Braithwaite lashed a loose ball wide from an angle after Yussuf Poulsen had caused problems with a cross and Denmark soon threatened again, Delaney getting into the area but unable to find a final pass.
The Danes, much more comfortable after the break, took off Cornelius and brought on Nicolai Jorgensen up front, and Croatia also changed things as Marcelo Brozovic came off to be replaced by Mateo Kovacic.
Jorgensen fired a low effort at the goalkeeper after turning well inside the area with Denmark now looking the more dangerous, and Eriksen dragged a half-chance wide soon afterwards.
A Modric shot from outside the box was off target as the game entered its final 15 minutes, and Rebic fired in an optimistic strike that Schmeichel held.
Ten minutes from the end, Josip Pivaric came on for Ivan Strinic as Croatia made a change at left-back, and he was quickly into the action with a cross that Perisic headed over.
Superb play from Rebic saw him beat Knudsen and cross, but Pivaric saw his strike blocked before Schone struck wide at the other end.
In three minutes of added time, Rakitic thumped a drive wide from the edge of the box, Braithwaite having time to send a strike of his own wide before the referee’s whistle confirmed extra time.
Knudsen was still causing problems with his long throws, two more of which led to scrambles in the Croatia area before the defender smashed a low cross straight at Lovren.
Striker Andrej Kramaric came on for Perisic in Croatia’s third change and Michael Krohn-Dehli replaced Delaney for Denmark before Kramaric’s deflected cross caused anxiety for Schmeichel, who opted to tip it over.
Denmark introduced the pace of Pione Sisto in place of Braithwaite as the second period of the extra 30 minutes began, and he whipped an effort past the far post soon afterwards.
Mandzukic went off and Milan Badelj came on for Croatia, but Denmark remained the team with the greater assurance and Jorgensen sent a tough chance wide after yet another Knudsen throw.
But with seven minutes of extra time to go, Modric had the chance to win it when, after his through ball, Rebic was brought down by Jorgensen after rounding Schmeichel to give Croatia a penalty.
The Real Madrid man stepped up – but Schmeichel guessed the right way to not only save but also hold the spot-kick to take the game into a shootout.
Denmark went first, Christian Eriksen’s kick tipped superbly onto the post by Subasic – but Schmeichel then saved from Badelj to keep things level. Kjaer blasted home for the Danes before Kramaric kept his cool to beat Schmeichel from the spot.
Krohn-Dehli put Denmark 2-1 up – and then Modric stepped up again and this time fired the ball past Schmeichel, who was close to stopping it before Schone’s unconvincing kick was saved by Subasic to give Croatia the advantage.
Schmeichel guessed right to thwart Pivaric with a diving stop, Jorgensen’s penalty down the middle blocked after he had failed to fool the keeper with a stop-start run up.
That left Croatia on the brink of winning it – and Rakitic obliged, rolling his penalty into the corner to spark huge celebrations.