Vincent Lecavalier, with his team-leading 27th, and Dan Boyle also scored in extending Tampa Bay's win streak to a season-best four games. The Lightning also ended a six-game losing skid against the Sabres, and won for the first time in five trips to Buffalo.
Jason Pominville and Ales Kotalik scored for the Eastern Conference-leading Sabres, who have lost four of six and are enduring their worst slump of the season. Buffalo has also lost three straight home games, its worst streak since dropping four in a row from Oct. 26 to Nov. 9, 2005.
Marc Denis secured the win by stopping 32 shots, including all 13 in the third period. His best save came with 9:37 remaining, when he somehow got across to get a piece of Jason Pominville's one-timer from the right circle.
The Lightning took advantage of the Sabres' error-filled performance, with all three Tampa Bay goals coming on giveaways.
Richards scored off on an odd-man rush after Sabres co-captain Chris Drury lost the puck at the left boards in the Tampa Bay zone. Richards one-timed in a shot from the right circle, set up by a nifty blind backhand pass by Paul Ranger.
Buffalo's flat and sloppy play was a carryover from its 4-2 loss to Toronto on Thursday.
They committed 21 giveaways through 40 minutes, among the worst coming on Tampa Bay's first goal 10 minutes in. That's when Martin St. Louis stripped the puck from Teppo Numminen in the left corner and then sneaked a pass through the crease to Lecavalier, who one-timed it in from the right circle.
St. Louis extended his points streak to 10 games, a stretch in which he has five goals and nine assists.
The Sabres played better in the second period, gaining the lead when Pominville, off a scramble in front, and Kotalik scored 44 seconds apart. Kotalik's goal came on an innocent-looking shot from the right circle that beat Denis through the legs.
Boyle tied it 2-2 with 4:22 left in the second, when his shot from the right point appeared to deflect in off Spacek, and beat Ryan Miller high on the short side.
Notes: Sabres LW Daniel Paille appeared in his 21st game this season after being recalled from AHL Rochester earlier in the day. Paille filled in for tough guy Andrew Peters, who was a healthy scratch. ... Lecavalier and St. Louis were among the reserves named to NHL all-star game at Dallas on Jan. 24. Both entered the game with 59 points, tied for third in the league. ... Pominville's goal was his 20th, giving the Sabres a league-leading four players with 20 goals this season. No other team entered the day with three 20-goal scorers.