James Reimer made a season-high 41 saves, Mike Hoffman and Evgenii Dadonov scored, and Vincent Trocheck scored the deciding goal in the shootout for the Panthers (24-24-8), who had lost two in a row.
"I thought our commitment was really impressive tonight and I think we knew we had to be good, we knew we had to bring our A-game to beat a team like that," Reimer said. "When we play like that good things will happen. Hopefully we keep that feeling and remember the work it took and keep going."
WATCH: [All Flames vs. Panthers highlights]
Mark Jankowski and Elias Lindholm scored, and Mike Smith made 30 saves for the Flames (34-16-7). Calgary, which is 1-3-2 in its past six games after going 8-0-1 in its previous nine, is tied for first in the Pacific Division with the San Jose Sharks, who lost 5-1 at home to the Washington Capitals on Thursday.
"I thought the effort was there," Smith said. "The compete level was there. The battle level was there. There was a lot of good things out of that game and unfortunately we were just a little too short at the end, but I thought that we did a lot of good things tonight and if we keep playing like that we'll be rewarded for it."