Match ends, Bolton Wanderers 2, Cardiff City 0.
Bolton Wanderers scored two late goals to inflict a fourth Championship defeat of the season on Cardiff City.
Gary Madine's 74th-minute penalty put Wanderers ahead after Sol Bamba had handled the ball, before Josh Vela tapped-in from close range.
Neil Warnock's team had a first-half effort ruled out, but otherwise could not make a breakthrough.
The Bluebirds are now seven points behind leaders Wolves as Bolton claimed only their fourth win of the season.
Second-placed Cardiff went into the match hoping to close the gap on the leaders after a run of six matches without defeat against a side second from bottom.
They had had marginally the better of a physical first half and thought they were ahead in the 28th minute when Junior Hoilett had the ball in the net but he was ruled offside.
That aside, the only other effort of note was Sammy Ameobi's speculative long-range drive.
A yellow card for Darren Pratley after he upended Loic Damour was the only booking in a half high on niggle but low on goalmouth action.
Phil Parkinson's Bolton were stubborn and strong, and frustrated the Bluebirds.
They were rewarded when referee Darren Bond adjudged Bamba had handled the ball as he stretched to get to a cross and Madine fired past Neil Etheridge from the penalty spot.
The striker then turned creator as he latched on to Craig Noone's through ball to set up Vela.
And in an unusual twist near the end, Warnock substituted Lee Tomlin 10 minutes after the striker had gone on as a sub.
Bolton Wanderers assistant boss Steve Parkin:
"We knew the game might not be a great spectacle in terms of how much football was played but I thought we showed quality in the second half to give us the opportunities that we got.
"It was a well deserved victory and every man stood up and was counted.
"It was the performance of the season so far in terms of being committed against a very good team."
Cardiff manager Neil Warnock:
"With the penalty, it's hit his hand and we've no complaints about that - but deliberate handball? Come on!
"I think you know when it's a penalty and they were really fortunate to get that.
"When you come up against a side like Bolton you need a strong referee and I think he was weak today. I thought some of the challenges were horrendous early doors and I think we've had more bookings than them.
"With Tomlin I took him off at 2-0 and I could see what [Karl] Henry and Pratley were doing to wind him up and get him sent off, so why not get him off? We'd lost the points, we didn't want to lose a player as well."
- 21PratleyBooked at 41mins
- 24HenryBooked at 61mins
- 11BuckleySubstituted forNooneat 60'minutes
- 14MadineBooked at 87minsSubstituted forWilbrahamat 90+3'minutes
- 2PeltierBooked at 77mins
- 5Ecuele MangaBooked at 78mins
- 15HalfordBooked at 82mins
- 20DamourBooked at 56minsSubstituted forTomlinat 78'minutesSubstituted forFeeneyat 90+4'minutes
- 30BogleSubstituted forZohoreat 66'minutes
- Darren Bond
- Shots on Target
Second Half ends, Bolton Wanderers 2, Cardiff City 0.
Attempt missed. David Junior Hoilett (Cardiff City) right footed shot from the left side of the box is close, but misses the top right corner. Assisted by Nathaniel Mendez-Laing.
Substitution, Cardiff City. Liam Feeney replaces Lee Tomlin.
Substitution, Bolton Wanderers. Aaron Wilbraham replaces Gary Madine.
Foul by Lee Tomlin (Cardiff City).
Andrew Taylor (Bolton Wanderers) wins a free kick in the defensive half.
Goal! Bolton Wanderers 2, Cardiff City 0. Josh Vela (Bolton Wanderers) right footed shot from the centre of the box to the bottom left corner. Assisted by Gary Madine.
Gary Madine (Bolton Wanderers) is shown the yellow card.
Greg Halford (Cardiff City) wins a free kick in the defensive half.
Foul by Gary Madine (Bolton Wanderers).
Greg Halford (Cardiff City) is shown the yellow card for a bad foul.
Foul by Greg Halford (Cardiff City).
Sammy Ameobi (Bolton Wanderers) wins a free kick on the right wing.
Offside, Bolton Wanderers. Mark Little tries a through ball, but Josh Vela is caught offside.
Attempt missed. Gary Madine (Bolton Wanderers) header from the centre of the box is close, but misses to the right. Assisted by Craig Noone with a cross following a set piece situation.
Bruno Ecuele Manga (Cardiff City) is shown the yellow card for a bad foul.
Foul by Bruno Ecuele Manga (Cardiff City).
Sammy Ameobi (Bolton Wanderers) wins a free kick on the left wing.
Substitution, Cardiff City. Lee Tomlin replaces Loïc Damour.