Barcelona lost at home for the second time in five days as Lucas Perez struck to seal a surprise 1-0 victory for LaLiga strugglers Cadiz.
Perez missed the best chance of a dull first half when blazing wide from 12 yards out, but the former Arsenal forward atoned to prod home the game's only goal after 47 minutes.
Jeremias Ledesma pulled off a string of fine saves to stem Barca's comeback attempts, as Xavi saw his side's 15-match unbeaten run in the league come to a shuddering halt.
Having crashed out of the Europa League to Eintracht Frankfurt on Thursday, Barca's slim LaLiga title hopes are surely now over, and they sit only three points above fifth-placed Real Betis.
Despite a boycott from some fans creating a flat atmosphere at Camp Nou, Barca made a bright start – Ousmane Dembele and Ferran Torres forcing Ledesma into a double save.
Cadiz soon settled, and missed the first glaring opportunity of the match after 27 minutes, Perez inexplicably side-footing wide with the goal gaping.
Dembele shot tamely at Ledesma at the other end and Perez made Barca pay after the restart, making no mistake as he nudged in from close range after Marc-Andre ter Stegen had made a fine save.
Ledesma again thwarted Dembele 20 minutes later, though Barca were fortunate that Alex Fernandez and Ruben Sobrino missed great chances.
Ledesma denied Luuk de Jong and turned away Eric Garcia's strike before making his best save of the match, reacting brilliantly to parry Pierre-Emerick Aubameyang's volley as Barca fell to a demoralising defeat.