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.
|Sims re-signs with Dragons until 2022|
|Derrius Guice injury update: Redskins RB (knee) has rehab setback, undergoes 3 more procedures|
|Emery: Arsenal could sign defender in January|
|Phillies sign McCutchen to three-year deal|
|O´Neal thinks his Lakers teams could ´easily´ beat Warriors|
|A-League to add two clubs by 2020|
|Curry says he was ´obviously joking´ about moon landing comments|
|Now the beautiful part starts – Ronaldo ready for Champions League knockout stage|
|Bayern have a lot more potential – Lewandowski not satisfied despite top spot|
|Lyon star Fekir shares plaudits for Champions League progression|
|Mourinho not surprised by United´s defeat to Valencia|
|Motivation no issue for Benfica, claims Vitoria|
|Lewandowski finishes Champions League group stage as top scorer|
|Mourinho: We scored two goals and lost 2-1!|
|England have a diamond - Guardiola hails City´s Foden|
|Sterling´s carefree display invites us to love football more than others hate|
|Juventus achieved their objective, despite everything going wrong – Allegri|
|Never say never - Schmidt not ruling out All Blacks role|
|Bologna´s winning start ended in BCL|
|Di Francesco critical of Roma performance|
|Shakhtar Donetsk 1 Lyon 1: Fekir fires French side through in Group F|
|Benfica 1 AEK Athens 0: Grimaldo sends hosts out on a high|
|Young Boys 2 Juventus 1: Hoarau double seals famous victory|
|Manchester City 2 Hoffenheim 1: City through as group winners after Sane brace|
|Ajax 3 Bayern Munich 3: Kovac´s men clinch top spot in Amsterdam thriller|
|Valencia 2 Manchester United 1: Jones scores own goal as Red Devils limp through|
|Solari accepts responsibility for Madrid´s heaviest home defeat in Europe|
|WATCH: Rooney backs Rocky ahead of Canelo showdown|
|McLaren to collaborate with Team Bahrain Merida|
|Las Vegas to host 2020 NFL Draft|
|Stade teenager tragically dies after neck injury|
|Cahill may need to leave Chelsea if he wants to play, admits Sarri|
|Viktoria Plzen 2 Roma 1: Chory winner takes hosts into Europa League|
|Real Madrid 0 CSKA Moscow 3: Champions humiliated at Bernabeu|
|Sarri condemns ´disgusting´ Sterling abuse|
|Hansen hails outstanding Ben Smith ahead of Pau switch|
|Foden, Sterling start for Manchester City v Hoffenheim|
|Sky decision will not affect us in 2019, insist Froome and Thomas|
|Al Ain 3 Team Wellington 3 (aet, 4-3 on penalties): Shootout heartbreak for semi-pros in Club World|
|Jackson to remain Ravens´ starting QB despite Flacco return|
|Rams headline 2019 NFL International Series home teams|
|Rams headline International Series home teams for 2019|
|Atlanta want ´exciting football´ from new boss amid Bielsa links|
|Atlanta still yet to receive ´serious´ bid for ´Bale-like´ Almiron|
|Tottenham v Manchester United to be held at Wembley|
|Matip facing six weeks out with fractured collarbone|
|I´ve had quite a lot of calls – Brailsford encouraged by Team Sky interest|
|Afghanistan Football Federation president provisionally banned by FIFA|
|Knee injury rules Huddersfield´s Mooy out of Asian Cup|
|Arnautovic tipped for Man United move by Austria team-mate Sabitzer|
|Arsenal legend Adams to become RFL president|
|My love for football still burns strong – Toure speaks out amid talk of Premier League return|
|Noble contract extended to 2021|
|Split with Sky is an opportunity, says Brailsford|
|Van der Burgh rolls back the years, two more medals for Hosszu|
|Maitland-Niles praises Sterling for speaking out|
|Life is tough for him right now - Celtic striker Griffiths to take time away from football|
|Froome: Team Sky keen to continue with new partner|
|Emery confirms Koscielny to play against Qarabag|
|Llorente keen on Athletic return|
|I love the guy - Pocock backs under-pressure Cheika|
|Fit-again Ozil in line for Arsenal return against Qarabag|
|Raheem Sterling named Premier League Player of the Month|
|Two more Ligue 1 games postponed due to unrest|
|Pace attack among India´s best ever - Arun|
|Premier League has fostered ´excessive aggression´ among fans, says Scudamore|
|Sharks back Flanagan amid NRL investigation|
|Not good for my recovery! Hoddle delights in Spurs´ Champions League heroics|
|Harris backing Starc to fire in Perth|
|No fears over Atleti´s second-place finish for Simeone|