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.
“It’s a victory for the Croatian people, we beat the Netherlands in front of their fans, Croatia has one more medal,” Dalic told Croatia’s Nova TV afterwards.
“It’s impossible, unreal, but she deserves it. Surely this is a victory which will go down in history.”
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.
“We have bronze and silver, let’s go for gold so that we can finish this story,” added Dalic.
For the Dutch, their international trophy drought now extends to beyond 35 years – they have not won a major title since the 1988 European Championship.
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.