Parma put a dent in AC Milan's hopes of qualifying for next season's Champions League after club captain Bruno Alves scored a superb curling free-kick to secure his side a deserved 1-1 draw at Ennio Tardini.
The Rossoneri went into the game having ended a four-match winless run with a 1-0 victory over Lazio a week earlier but they laboured throughout a first half in which Parma should have taken the lead.
Samu Castillejo made the hosts rue their missed opportunities when he scored what looked like the winner three minutes after coming off the bench but Milan failed to hold out for a smash-and-grab triumph as Parma's determination paid off.
Alves' 87th-minute equaliser was unstoppable and left Milan with a record of one win from their past six matches - hardly the form of a top-four side heading into the final weeks of the season.
Parma put Milan on the back foot early on and Gianluigi Donnarumma slid out to dispossess Fabio Ceravolo with a challenge the referee deemed well-timed despite Parma's insistence he brought the striker down.
Juraj Kucka almost lit up a cagey first half with a moment of brilliance but his acrobatic overhead kick flashed wide of Donnarumma's goal after a looping cross from Marcello Gazzola evaded the Milan defence.
With chances hard to come by, Milan could ill-afford the kind of wastefulness Andrea Conti displayed when he scuffed a close-range shot well wide with the goal at his mercy early in the second half.
Gattuso sent on Castillejo for Conti after 66 minutes and was rewarded shortly after when the Spaniard met Suso's cross from the right with a near-post header that flashed across the face of Luigi Sepe's goal and into the far corner of the net.
Parma substitute Luca Siligardi rounded Donnarumma but failed to find the angle as he shot on the turn, hitting the foot of the post with the goalkeeper beaten, while Patrick Cutrone rightly had a goal ruled out to make it 2-0.
Kucka sent a dipping drive over the crossbar from the edge of the box in the last 10 minutes, and Milan's frustration grew when Fabio Borini felled Mattia Sprocati on the edge of the box and Alves sent the ensuing free-kick curling just inside the near post from 25 yards to the delight of the home supporters.
What does it mean? Milan look set to slide
Milan are being chased down by three teams, with Roma, Atalanta and Lazio all within four points of catching them in Serie A, while Parma are seven points clear of the relegation zone.
Ceravolo a constant threat
Parma refused to sit back and play for a draw, instead feeding Ceravolo throughout a game in which Milan struggled to contain the 32-year-old target man.
Conti caught napping
A goal just after half-time would have settled Milan's nerves but Conti's reactions let him down and he was left kicking thin air before Gattuso hauled him off.
Parma will go to Chievo in confident mood after three unbeaten matches, while Milan need to improve when they face Lazio in the Coppa Italia semi-final second leg on Wednesday, with the tie locked at 0-0.