Croatia are one win from their first major title after beating hosts the Netherlands in a dramatic Uefa Nations League semi-final.
Substitute Bruno Petkovic struck from distance in extra-time before Luka Modric's penalty settled a remarkable game in Rotterdam.
A 96th-minute Dutch equaliser from Noa Lang had denied Croatia in normal time.
But Zlatko Dalic's side will now play Italy or Spain in Sunday's final, while the Dutch face a third-place play-off.
Croatia had seemed destined for the final when Andrej Kramaric's penalty and a Mario Pasalic volley put them ahead after Donyell Malen's opener.
But Lang's last-gasp hooked finish levelled the game at 2-2.
Croatia, though, picked themselves up and Petkovic - introduced at the start of extra-time - slammed a fine strike past the Netherlands keeper Justin Bijlow.
Their victory was sealed by 37-year-old talisman Modric from the penalty spot with four minutes left, after he was felled by a clumsy Tyrell Malacia challenge.
It means Croatia have reached just their second international final, following the 2018 World Cup where they were beaten 4-2 by France.
For the Dutch, their international trophy drought now extends to beyond 35 years - they have not won a major title since the 1988 European Championships.
It also continues Ronald Koeman's inauspicious start to his second spell as the Netherlands manager, having lost 4-0 to France in a Euro 2024 qualifier in March.
Magical Modric close to international glory
Modric was making his 165th appearance for CroatiaComing at the end of a long season - Nathan Ake, Denzel Dumfries and Marcelo Brozovic all played just four days after featuring in the Champions League final - both sides struggled to reach a competitive tempo in the early stages.
But, by the end, fans inside De Kuip had witnessed a frenzied thriller.
The Dutch, roared on by a colourful and boisterous crowd, found their rhythm first as Malen opened the scoring on 34 minutes.
A nice passing move from the hosts reached the Borussia Dortmund striker 16 yards out, and he slotted into the bottom corner.
Croatia, however, controlled possession better and eight minutes after the interval, Modric - making his 165th international appearance - capitalised on a loose touch from Cody Gakpo and was brought down in the area by the Liverpool forward. Kramaric calmly slotted the penalty down the middle.
Croatia, who came from behind to beat Canada, Japan and Brazil at the World Cup in Qatar last year, looked to have completed yet another turnaround with 18 minutes to play. Luka Ivanusec lifted in a cross which Pasalic swept in first-time from 10 yards.
The Netherlands - with former Manchester United loanee Wout Weghorst brought on as a substitute - bombarded the Croatian box in response with crosses and long balls, finding reward in the sixth minute of stoppage time as Lang cleverly struck home a loose ball.
But this Croatia side have built their reputation on never knowing when to quit. Their approach was exemplified by Modric, who claimed his side's fourth goal and is now within reach of historic international silverware to go with his trophy-laden club career at Real Madrid.
Line-ups
Netherlands
Formation 4-2-3-1
1Bijlow
22Dumfries12Geertruida4van Dijk5Aké
6Wieffer21F de Jong
18Malen20Koopmeiners11Simons
9Gakpo
1Bijlow22DumfriesSubstituted forLangat 85'minutes12Geertruida4van Dijk5AkéSubstituted forMalaciaat 105'minutesBooked at 116mins6WiefferSubstituted forWijnaldumat 75'minutes21F de JongBooked at 38mins18MalenSubstituted forBergwijnat 75'minutes20KoopmeinersBooked at 93mins11SimonsSubstituted forWeghorstat 64'minutes9GakpoSubstituted forde Roonat 105'minutesSubstitutes
2Timber3Blind7Bergwijn8Wijnaldum10Lang13Flekken14Botman15de Roon16Malacia17Veerman19Weghorst23NoppertCroatia
Formation 4-3-3
1Livakovic
22Juranovic6Sutalo21Vida14Perisic
10Modric11Brozovic8Kovacic
15Pasalic9Kramaric16Ivanusec
1LivakovicBooked at 90mins22JuranovicSubstituted forStanisicat 79'minutes6SutaloSubstituted forPetkovicat 90'minutes21Vida14Perisic10ModricSubstituted forBarisicat 119'minutes11BrozovicBooked at 63mins8KovacicBooked at 17minsSubstituted forMajerat 85'minutes15PasalicBooked at 24mins9KramaricSubstituted forErlicat 90'minutes16IvanusecSubstituted forVlasicat 78'minutesSubstitutes
2Stanisic3Barisic5Erlic7Majer12Labrovic13Vlasic17Petkovic18Musa19Sosa20Beljo23IvusicLive Text
Match ends, Netherlands 2, Croatia 4.
Second Half Extra Time ends, Netherlands 2, Croatia 4.
Offside, Croatia. Bruno Petkovic tries a through ball, but Lovro Majer is caught offside.
Attempt missed. Ivan Perisic (Croatia) left footed shot from outside the box is high and wide to the right from a direct free kick.
Lovro Majer (Croatia) wins a free kick in the attacking half.
Foul by Tyrell Malacia (Netherlands).
Substitution, Croatia. Borna Barisic replaces Luka Modric.
Goal! Netherlands 2, Croatia 4. Luka Modric (Croatia) converts the penalty with a right footed shot to the bottom right corner.
Tyrell Malacia (Netherlands) is shown the yellow card for a bad foul.
Penalty Croatia. Bruno Petkovic draws a foul in the penalty area.
Penalty conceded by Tyrell Malacia (Netherlands) after a foul in the penalty area.
Mario Pasalic (Croatia) hits the bar with a right footed shot from the centre of the box.
Attempt blocked. Marcelo Brozovic (Croatia) left footed shot from the centre of the box is blocked. Assisted by Ivan Perisic.
Bruno Petkovic (Croatia) wins a free kick in the defensive half.
Foul by Marten de Roon (Netherlands).
Foul by Domagoj Vida (Croatia).
Wout Weghorst (Netherlands) wins a free kick on the right wing.
Attempt missed. Noa Lang (Netherlands) right footed shot from a difficult angle on the left is close, but misses to the left.
Attempt saved. Steven Bergwijn (Netherlands) right footed shot from the right side of the box is saved in the centre of the goal. Assisted by Marten de Roon.
Offside, Croatia. Nikola Vlasic tries a through ball, but Lovro Majer is caught offside.