Girona booked their place in next season's Champions League for the first time and wrapped up the La Liga title for Real Madrid by coming from behind to beat Barcelona in a pulsating Catalan derby.
Andreas Christensen opened the scoring in stunning fashion inside three minutes for Barcelona, but Artem Dovbyk hit back just 68 seconds later.
It is Dovbyk's 20th goal in La Liga this season and puts him two clear of Real Madrid's Jude Bellingham in the race for the Pichichi Trophy awarded to the top scorer.
Barcelona twice went close to restoring their lead with Christensen seeing a header clawed off the line by goalkeeper Paulo Gazzaniga, before Ilkay Gundogan hit the crossbar.
The pressure finally told in stoppage time at the end of the first half when Robert Lewandowski coolly dispatched from the penalty spot after Yamal was fouled.
Despite failing to register a shot in the opening 20 minutes of the second half and having to deal with an onslaught from Barcelona, Girona managed to find a way to turn the game on its head with three goals in quick succession.
They equalised for a second time in the 65th minute when Dovbyk pounced on a loose backpass before squaring for substitute Portu to score with his first touch from close range.
Just two minutes later Girona took the lead for the first time when former Real Madrid defender Miguel Gutierrez's shot bobbled over the line with the help of a major deflection.
Portu grabbed Girona's fourth in the 75th minute, meeting a crossfield ball on the full and exquisitely volleying beyond Marc-Andre ter Stegen.
Defeat for Barcelona means Real Madrid, who beat Cadiz 3-0 earlier on Saturday, have been crowned La Liga champions for the 36th time.
Girona are enjoying just their fourth campaign in the Spanish top flight and have exceeded all expectations to make history.
Michel's side will play in Europe for the first time next season with a spot in the Champions League now guaranteed.