Enes Unal came off the bench to score two late goals for Villarreal, denying Atletico Madrid victory and dealing Diego Simeone's men a huge blow in LaLiga's title race.
Antoine Griezmann's controversial penalty had Atletico on track for a 12th win in 13 games in all competitions, the striker scoring from 12 yards at Estadio de la Ceramica after he was harshly adjudged to be brought down by Jaume Costa.
Jan Oblak had been mostly untested in the Atletico goal but when Alvaro Gonzalez stood up a fine right-wing cross to the back post, Unal was there to nod home a deserved leveller for Villarreal with eight minutes to go.
And in the first minute of added time, Turkey international Unal tucked home at the back post, Daniele Bonera's cross having made its way through a crowded box to find the unmarked striker.
Griezmann had earlier wasted a golden opportunity to secure all three points for Atletico - now 11 points behind Barcelona - the LaLiga leaders having eased to a comfortable 2-0 win at home to Athletic Bilbao earlier on Sunday.
Atleti are winless in their last six league meetings with Villarreal and their title hopes, having been hurt by a narrow loss at Camp Nou earlier this month, now look over as Atleti imploded, Vitolo's stoppage-time red card compounding their misery.
Saul forced a first-minute save from Sergio Asenjo as Atletico made a rapid start.
Griezmann then collected a booking for fouling Roberto Soriano, which means the striker will be available for next month's derby with rivals Real Madrid after serving a one-game ban.
Villarreal had been on top but after Griezmann went down under Jaume Costa's clumsy challenge in the box, Atletico took the lead in the 20th minute.
Griezmann sent Asenjo the wrong way from 12 yards after a long delay, Villarreal's players claiming the France international deceived the officials.
Koke struck the post from Sime Vrsaljko's pullback as Atletico ran through the gears.
But at the other end Villarreal were close to levelling in the 31st minute, Pablo Fornals rifling narrowly wide after robbing Koke on the edge of the visitors' penalty area.
1 - Rodri Hernandez completed 56 of his 58 passes in this first half, at least 31 more than any Atletico player (Koke, 25/29). Helm. pic.twitter.com/F8iUkD6BVA— OptaJose (@OptaJose) March 18, 2018
Villarreal continued to show attacking intent after the break, with Rodri influential in midfield, Mario Gaspar hitting a ferocious 25-yard drive that Oblak collected well on the bounce.
Penalty appeals for an apparent handball in the Atleti box were rejected before the interval and the referee said no again when Jose Gimenez seemed to drag Carlos Bacca to the ground.
Griezmann should have wrapped up the points in the 70th minute when Diego Costa and Angel Correa combined to set up the striker, but he blazed his shot well over the crossbar and was whistled off by the home fans when Simeone substituted him.
That miss came back to haunt Atletico in incredible fashion as Unal struck only eight minutes after his introduction, guiding home a fine header from Gonzalez's right-wing cross.
With Atletico stunned by the equaliser, worse was to come as Bonera's cross was not cleared, Unal finding himself in space to beat Oblak from close range.
Vitolo then saw red for clashing with Nicola Sansone as Simeone's men - beaten 3-0 at Villarreal last season - endured another miserable visit that left their title hopes in tatters.
#VillarrealAtleti | 2-1 FULL TIME | @EnesUnal16 is the hero on @LaLigaEN Matchday 29 for #Villarreal ! He came on and scored a brace to win it for the Yellows! SUPER SUB!!! #Endavant ! pic.twitter.com/2C7Y23DXSE— Villarreal CF English (@Eng_Villarreal) March 18, 2018
Key Opta stats:
- Rodri Hernandez attempted 102 passes against Atletico (93 successfully), his highest ever tally in a LaLiga game.
- Antoine Griezmann has scored his first LaLiga goal against Villarreal, after 14 appearances.
- Enes Unal is the second substitute to score a brace in a LaLiga game against Atletico under Diego Simeone, after Andrija Delibasic with Rayo in September 2012.
- Only Cristiano Ronaldo (17) has scored more goals than Antoine Griezmann (16, level with Messi) in 2018 in all competitions.
- Vitolo is the first Atletico substitute to have been sent off in the same LaLiga game since Alessio Cerci against Valencia in October 2014.
- Atletico have conceded 42.8 per cent of their goals from headers in LaLiga this season (six of 14), the highest percentage of any team.
- Antoine Griezmann has been directly involved in 15 goals in his last nine games for Atletico in all competitions (11 goals and four assists).
- Atletico have won two penalties in their last four LaLiga games, as many as they had in their previous 39.
- This has been the second LaLiga game in which Griezmann has won and scored a penalty, after March 2016 versus Real Sociedad.
|Brewers benefit from Pirates´ trade deadline acquisition of Archer|
|Barty upsets Kerber in Wuhan|
|England could still pick Cipriani despite training camp snub|
|Astros become first defending champions to reach 100 wins since 1990 Athletics|
|Wilder waiting for ´real offer´ to fight Joshua|
|LeBron focusing on patience after first Lakers practice|
|Pochettino expects Spurs in new stadium by Christmas|
|Inzaghi: With Ronaldo, Juve are best team in Europe|
|Some people talk too much – Icardi hits back at critics|
|Kovac, Robben praise Augsburg after draw|
|Angels star Ohtani to undergo Tommy John surgery|
|Simeone tips Gimenez to be fit for Madrid derby|
|Smith on his NBA Finals miscue: People make mistakes all the time|
|Rams CB Talib to have ankle surgery|
|Cousins ´feeling a lot better´, still unsure when he´ll return|
|I knew we´d be in trouble with Jones on penalties – Mourinho|
|Coyotes forward Galchenyuk expected to miss opener|
|Guardiola won´t compare Foden to Iniesta|
|Lampard shell-shocked as Derby win at Old Trafford|
|Ryder Cup 2018: USA celebrities take the honours|
|Manchester United´s torrid penalty shoot-out run continues against Derby|
|Guardiola: Foden already a great, great player|
|Atletico Madrid 3 Huesca 0: Rojiblancos cruise ahead of Madrid derby|
|EFL Cup: Lampard dumps out Mourinho, Burnley lose at Burton Albion|
|Mourinho denies Pogba row despite stripping midfielder of vice-captaincy|
|Fabinho situation not complicated, insists Klopp|
|Manchester United 2 Derby County 2 (Derby win 8-7 on pens): Lampard heaps pressure on Mourinho|
|Afghanistan snatch tie after Shahzad pummels India|
|Inter 2 Fiorentina 1: D´Ambrosio maintains Nerazzurri revival|
|Oxford United 0 Manchester City 3: Foden stars as EFL Cup holders cruise into round four|
|Cousin takes Gabon post after Aubameyang rejection|
|Bayern Munich 1 Augsburg 1: Neuer error costs champions|
|Paris Saint-Germain must be a Champions League force to help Neymar - Baptista|
|Salgado warns of ´war´ in Spanish football|
|Cech deserves Arsenal place, says Seaman|
|Halep and Garcia among seeds to fall in Wuhan|
|F1 Raceweek: Mercedes taking no comfort in points advantage|
|Benitez charged by FA for referee comment relating to Zaha treatment|
|Cibulkova dumps out hampered Halep in Wuhan|
|Mourinho questions his players amid reports Pogba won´t captain United again|
|European Ryder Cup diary: Fleetwood´s hair delights Poulter|
|USA Ryder Cup diary: Tiger´s roaring reception, McEnroe´s bold prediction|
|Loans to be limited under new FIFA proposal|
|Prolific Nadolo signs new Montpellier contract|
|Modric? For us, Messi is the best – Valverde|
|Murray makes winning start in Shenzhen|
|Mickelson would cherish first victory on European soil|
|Hodge hoping pressure proves too much for South Africa|
|Woodward in show of support for under-fire Mourinho|
|Mickelson jokes he wants ´a shot a side´ from Tiger in Thanksgiving showdown|
|Reed: Captain America is a villain in Europe|
|Duminy to captain Proteas as Elgar replaces injured Amla|
|No Tottenham timeline for Lloris, Vorm returns|
|Woods ready for ´awesome environment´ on Ryder Cup opening hole|
|Tony Bellew determined to prove doubters wrong against Oleksandr Usyk|
|Tuchel explains why he likes Neymar at number 10|
|Manchester United smash revenue record but profits down|
|Furyk downplays Ryder Cup pairings talk, says Tuesday is about individuals|
|Rejuvenated Tiger out to improve poor Ryder Cup record|
|Saunders fined £100,000 for ´sickening´ online video|
|Hazard can reach his full potential with Sarri´s Chelsea - Zola|
|Ryder Cup heading back in Europe´s direction, says Niall Horan|
|Wow! Klopp hails Sarri´s Chelsea transformation|
|Giovinazzi to partner Raikkonen at Sauber in 2019|
|Bjorn backs ´phenomenal´ Rahm to continue trend of Spanish success|
|Durant in no rush to decide Warriors future|
|Rossi to face anti-doping hearing|
|Mignolet to return for Liverpool against Chelsea|
|Premier League ´interesting´ for Germany boss Low|
|Wilder wins Twitter vote to be Joshua´s next opponent|