SEATTLE – The Twins offered Jason Castro a $24 million free-agent contract for his defense behind the plate, not his hitting at the plate. But hey, if he wants to frame some pitches with his bat, too, the Twins are more than happy to let him.

Castro extended his hitting streak to 10 straight games Thursday, and while it's an oddly modest streak — the catcher has only 11 hits during that time and has added only 23 points to his batting average — it's an increasingly effective one. Thursday's hit was a 400-foot home run, his third in five games, and staked the Twins to an early lead that they eventually turned into a 2-1 victory over the Mariners to avoid a three-game sweep.

Kyle Gibson pitched six-plus strong innings for the Twins, now 4-3 on their 10-game trip. They avoided being swept for the first time on the road this year, and even got a new save streak started for their closer. One night after giving up a crushing walkoff home run, Brandon Kintzler worked an easy ninth inning, needing only 12 pitches to produce three quick outs and earn his 16th save.

"We were encouraged that some of the work he had done over the winter would bring his offense back," Twins manager Paul Molitor said of the veteran catcher, who turns 30 later this month. "He's had some rough patches, but generally he's had good at-bats."

He had a really quick one in the fourth inning to break up a scoreless game against Mariners righthander Christian Bergman. Castro watched a fastball clocked at 90 miles per hour go by for strike one, but he was sitting on a slider and got it. The ball landed more than a dozen rows deep, near the back of the right field seats, his sixth homer of the year.

The Twins got another run off Bergman, but they didn't have much to do with it. A walk to Ehire Adrianza and an error — two, actually — by Seattle second baseman Robinson Cano gave them a cushion they would need.

With Adrianza on second after a walk and stolen base, Joe Mauer smacked a two-out, hard grounder at Cano, who allowed the ball to carom off his glove. Adrianza rounded third base a little too far, and Cano spotted him, picked up the ball, and fired it across the diamond. But the ball skipped past third baseman Kyle Seager, and Adrianza scored.

Two runs haven't been nearly enough for Gibson on most nights this season, but the righthander, trying to regain his footing after a stint in Class AAA Rochester, made it work. By emphasizing his perennial weakness, first-pitch strikes — he started 17 of the 26 hitters he faced with a strike — Gibson mostly mowed down the Mariners over six innings, his longest outing of the season.

"Getting ahead is always a key for any pitcher," Molitor said before the game. "Kyle has showed a little bit of improvement in getting the ball over the plate a little more frequently, especially early in the count."

Gibson escaped a fourth-inning jam by striking out Mike Zunino, Seattle's walkoff hero a night earlier. And though Jarrod Dyson scorched a fastball into the right field corner for a leadoff triple an inning later, he held Seattle to only one run that inning. Byron Buxton did his part, too, snagging the third out with a running, reaching catch at the warning track to retire Cano.

Gibson came out for the seventh but was removed after a leadoff single. Matt Belisle finished the inning, and Taylor Rogers pitched around two hits in the eighth, catching a Zunino line drive to start a double play.