Barcelona moved back to within a point of La Liga leaders Real Madrid as they twice came from behind to beat Villarreal 3-2 in a thrilling encounter on Sunday.
Madrid loanee Denis Cheryshev put Villarreal ahead against the run of play after half an hour only for the in-form Neymar to level just before the break.
A crazy four-minute spell early in the second-half then yielded three goals as Luciano Vietto put Villarreal back in front, but Rafinha quickly equalised before Lionel Messi struck a memorable winner from the edge of the box.
Victory takes Barca back three points clear of third-placed Atletico Madrid, but Real can regain their four-point lead at the top when they host Sevilla in their game in hand on Wednesday.
Barcelona started with the confidence of a side who had won each of their last seven games, scoring 26 goals in the process, but Luis Suarez’s struggles in front of goal continued.
The Uruguayan dragged a shot wide from Andres Iniesta’s through ball before forcing Sergio Asenjo into a great save from the edge of the box and finally smashing his best opening into the side-netting.
Barca were then punished for the former Liverpool man’s profligacy when Villarreal broke and Mario Gaspar’s wayward effort was deflected beyond Claudio Bravo by Cheryshev.
Crucially Barca managed to get on level terms a minute before the break when Asenjo again parried from Rafinha’s curling effort, but Neymar was on hand to continue his scoring streak with his 22nd of the season.
Luis Enrique’s men were caught out once more at the start of the second-half, though, as a former Barca favourite Giovani dos Santos galloped in behind the Catalans’ defence and squared for Vietto to apply a simple finish.
However, again Villarreal couldn’t hold onto their lead for long as just two minutes later Suarez squared for Messi and when his headed effort was blocked, Rafinha pounced to rattle home from close range.
Suarez then teed up Messi once more as Barca turned the game on its head moments later when the Argentine fired high past Asenjo on his weaker right foot from outside the box.
Villarreal refused to give in and briefly thought they were level when Mateo Musacchio bundled home from close range only to be denied by an offside flag.
From the resulting free-kick Barca sped upfield and Neymar was unlucky not to win a penalty when he was wiped out by Asenjo before Suarez failed to turn Dani Alves’s driven cross on target.
A first defeat in 19 games in all competitions leaves Villarreal now four points adrift of Sevilla in the final Champions League spot.
Earlier, the Andalusians exacted revenge over Espanyol for their Copa del Rey elimination in midweek as they came from behind to move above Valencia into fourth with a 3-2 win. Cristian Stuani put the visitors in front from the penalty spot before goals from Diogo Figueras and Vitolo turned the game around.
Espanyol ‘keeper Kiko Casilla was then sent-off for handling outside his area just before half-time.
Victor Sanchez gave Espanyol hope of an unlikely point when he curled home 13 minutes from time, but Iago Aspas had the final say when he latched onto substitute Carlos Bacca’s through ball to finish low into the far corner in the 89th minute.
Levante dropped to the bottom of the table as two second-half goals from Aritz Aduriz handed Athletic Bilbao a 2-0 win at the Ciutat de Valencia.
Almeria moved out of the relegation zone as a solitary goal from Edgar was enough to earn three points in a 1-0 win over Getafe.