Second-half headers by Nadia Nadim and Theresa Nielsen stunned holders Germany who bow out of the women's Euro after a 2-1 quarter-finals loss to Denmark in Rotterdam on Sunday.
Germany, who have won the Euro six times in a row and eight times overall, dominated the eventful game postponed from Saturday because of heavy rain, but Denmark's counter-attacking was eventually too much for them.
Germany were out of the blocks fast with Isabel Kerschowski drawing first blood on three minutes with massive help from Danish keeper Stina Petersen who palmed her shot from just outside the box into the goal.
But Nadim put Denmark level three minutes after the break with a bullet header from a cross by Stine Larsen and Nielsen then headed home a cross from substitute Frederikke Thoegersen with seven minutes left.
"I'm so happy that we beat Germany. It's amazing," Nielsen beamed after the game.
"Everybody dreams about scoring, but doing it is another thing. Why not today? It's a good day."
Denmark coach Nils Nielsen said the win was deserved as winger Katrine Veje hit the woodwork after a Nadim pass flicked on by Harder with half an hour to go, while Petersen regained self-confidence with several brilliant saves.
"It was fairly equal in term of the chances. Germany didn't put on under big pressure."
German coach Steffi Jones bemoaned a lack of will to win on the German side.
"There's a lot of disappointment. We weren't aggressive enough," she said.
In the semi-final on August 3, Denmark will take on either Austria or Spain, who are playing later on Sunday.
On the same day, the Netherlands, who beat Sweden 2-0 on Saturday, will face either England or France, also playing later on Sunday.