Real Madrid's faint La Liga title hopes were dealt a huge blow as Samuel Chukwueze's stunning strike secured victory for Villarreal at the Bernabeu.
Chukwueze hit a curled finish late on to leave Real 12 points behind leaders Barcelona, having played a game more.
The hosts had taken the lead through a Pau Torres own goal but Chukwueze slotted in an equaliser.
Vinicius Jr's solo strike put Real ahead but Jose Luis Morales equalised before Chukwueze stunned the hosts.
With just 10 La Liga games remaining, Real would need a strong finish to the season and an unlikely Barcelona collapse to defend their title.
Real thought they had an opportunity for a late equaliser when they were awarded a penalty after the referee felt Aissa Mandi handled the ball as he fell to the ground inside his own box.
However, Javier Alberola Rojas overturned that decision after going to the pitchside monitor following a VAR review.
The win moves Villarreal up to fifth in the table, four points off the top four.
Barcelona, meanwhile, could move 15 points clear at the top when they host Girona on Monday.
𝗦𝗲𝗺𝗮𝘀𝗼𝗰𝗶𝗮𝗹 𝗶𝘀 𝘄𝗵𝗲𝗿𝗲 𝗿𝗲𝗮𝗹 𝗽𝗲𝗼𝗽𝗹𝗲 𝗰𝗼𝗻𝗻𝗲𝗰𝘁, 𝗴𝗿𝗼𝘄, 𝗮𝗻𝗱 𝗯𝗲𝗹𝗼𝗻𝗴. We’re more than just a social platform — from jobs and blogs to events and daily chats, we bring people and ideas together in one simple, meaningful space.