<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="https://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:cf="https://www.futureplc.com/rss/content-flags"
>
    <channel>
                    <atom:link href="https://www.tomsguide.com/feeds/tag/fitbit" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Fitbit ]]></title>
                <link>https://www.tomsguide.com/tag/fitbit</link>
        <description><![CDATA[ All the latest fitbit content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Fri, 14 Aug 2026 04:30:00 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ I walked 5,000 steps with the Fitbit Air vs Garmin Cirqa — Round 2: We have a new champ ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google and Garmin both recently dropped new screen-free fitness trackers to rival the popular <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a>. The biggest difference? The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> and <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-just-went-hands-on-with-the-garmin-cirqa-and-it-strikes-a-near-perfect-balance-between-the-fitbit-air-and-whoop-5-0">Garmin Cirqa</a> are both subscription-free.</p><p>I’ve already tested the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-7-000-steps-with-the-garmin-cirqa-vs-fitbit-air-and-theres-a-clear-winner">Fitbit Air vs Garmin Cirqa</a> head-to-head in a prior walk test comparison, but a hiccup with the latter’s data meant a rematch was inevitable. </p><p>About as evenly matched as they come, both the Air and Cirqa track your sleep, workouts, and overall health. Garmin’s insights go a bit more in-depth than Fitbit’s, but the Cirqa is also twice the price of the Air, $199 vs. $99.</p><p>When it comes to onboard tech, neither device has GPS, so you must carry a paired smartphone for location tracking data during outdoor workouts.</p><h3 class="article-body__section" id="section-i-walked-5-000-steps-with-the-fitbit-air-vs-garmin-cirqa"><span>I walked 5,000 steps with the Fitbit Air vs Garmin Cirqa</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="58QF4r9QbpHc9RioxLeRqc" name="Air-v-Cirqa-03" alt="Close-up of the Fitbit Air next to the Garmin Cirqa" src="https://cdn.mos.cms.futurecdn.net/58QF4r9QbpHc9RioxLeRqc.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>So, which screen-free tracker is the more reliable wearable? I walked 5,000 steps with the Fitbit Air on my left wrist and the Garmin Cirqa on my right wrist to find out (the opposite of the previous test). </p><p>For good measure, I also tracked the walk using the Strava app on my iPhone 16, and as always, I manually counted my steps with some help from an old-school tally counter (one click = 100 steps). </p><p>Find the results of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/garmin-cirqa-vs-fitbit-air-5-crucial-differences-you-need-to-know">Fitbit Air vs Garmin Cirqa</a> walk test, round 2, below.</p><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Garmin Cirqa</p></th><th  ><p>Fitbit AIr</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>5,006 steps</p></td><td  ><p>5,009 steps</p></td><td  ><p> 5,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>2.77 miles</p></td><td  ><p>2.71 miles</p></td><td  ><p>2.69 miles</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>394 feet</p></td><td  ><p>248 feet</p></td><td  ><p>393 feet</p></td></tr><tr><td class="firstcol " ><p><strong>Average pace</strong></p></td><td  ><p>16 mins 46 secs per mile</p></td><td  ><p>16 mins 58 secs per mile</p></td><td  ><p>16 mins 49 secs per mile</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>not recorded</p></td><td  ><p>125 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>not recorded</p></td><td  ><p>153 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>240 total calories</p></td><td  ><p>398 total calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery usage</strong></p></td><td  ><p>0%</p></td><td  ><p>2%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-garmin-s-step-count-was-closer"><span>Garmin's step count was closer</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zrwLhcy7pE9gHz99a3wDGf" name="GarminCirqa-v-FitbitAir-02" alt="Close-up of the Garmin Cirqa screen-free fitness tracker" src="https://cdn.mos.cms.futurecdn.net/zrwLhcy7pE9gHz99a3wDGf.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Given the fact that the Fitbit Air, Garmin Cirqa, and Strava were all making use of the same location data, courtesy of my smartphone, you'd expect metrics like distance, steps, and pace to be pretty similar across the board. And that is very much the case.</p><p>However, when it comes to steps, Garmin's tally was closer to my actual count than Fitbit's by a whopping margin of... three steps. This is to say, both devices performed remarkably well here.</p><p>Strava's step count, for what it's worth, was 4,992, another impressive result.</p><h3 class="article-body__section" id="section-the-fitbit-air-continues-to-struggle-with-climb-data"><span>The Fitbit Air continues to struggle with climb data</span></h3><p>Some things never change. While the Garmin Cirqa and Strava calculated virtually the same amount of ascent for my rather hilly walk, the Fitbit Air significantly undercounted. </p><p>This is far from the first time the Air has logged lower-than-expected climb data. I had a similar result when I last pitted the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-7-000-steps-with-the-garmin-cirqa-vs-fitbit-air-and-theres-a-clear-winner">Air vs Cirqa in a walk test</a>. It also undercounted in a <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner">walk test versus the Apple Watch 11</a>, and another time in a comparison <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-000-steps-with-the-fitbit-air-vs-pixel-watch-4-and-im-genuinely-shocked-by-the-results">against the Pixel Watch 4</a>.</p><h3 class="article-body__section" id="section-all-three-tracking-methods-noted-similar-distance-and-pace"><span>All three tracking methods noted similar distance and pace</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4637px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="y55QpRXhUiM9N8DKrxbLSe" name="GarminCirqa-v-FitbitAir" alt="Close-up of the Garmin Cirqa screen-free fitness tracker" src="https://cdn.mos.cms.futurecdn.net/y55QpRXhUiM9N8DKrxbLSe.jpg" mos="" align="middle" fullscreen="" width="4637" height="2608" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Despite inconsistencies in climb data, the Fitbit Air, Garmin Cirqa, and Strava app all calculated roughly the same amount of distance covered and average pace for my ~45-minute walk around sunny Seattle, Washington. That said, Garmin was the most generous with my efforts and speed. </p><h3 class="article-body__section" id="section-garmin-failed-to-record-any-heart-rate-data"><span>Garmin failed to record any heart rate data </span></h3><p>Well, this is a first: For unknown reasons, the Garmin Cirqa failed to record any heart rate data during my walk. This is particularly disappointing given the fact that it performed well in every other regard. Coincidentally, when I last tested the Garmin against the Fitbit, heart rate data was one of the few metrics it <em>did</em> log. </p><p>The Fitbit Air's max and average heart rate data, meanwhile, are right around what I expected for my walk, based on previous walk data from a zillion other tests. </p><h3 class="article-body__section" id="section-fitbit-burned-more-battery-and-calories"><span>Fitbit burned more battery and calories </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5573px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5zLDepBC5i6nn89axNbSMa" name="Air-v-Cirqa-02" alt="Close-up of the Fitbit Air next to the Garmin Cirqa" src="https://cdn.mos.cms.futurecdn.net/5zLDepBC5i6nn89axNbSMa.jpg" mos="" align="middle" fullscreen="" width="5573" height="3135" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Finally, neither device used much battery recording my walking workout, which makes sense given neither has a screen or GPS to power. While the Cirqa registered zero drain, the Air used just 2%.</p><p>Not only did the Fitbit burn more battery, but it also said I burned more calories than the Garmin during my stroll. That said, fitness tracker calorie counts are notoriously inconsistent, and one of the main metrics I tend to ignore.</p><p>Which of these two fitness trackers would you be more likely to use? Let me know in the poll below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODqw4X"></div>                            </div>                            <script src="https://kwizly.com/embed/ODqw4X.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/can-the-usd99-fitbit-air-beat-the-usd799-apple-watch-ultra-3-at-fitness-tracking-i-manually-counted-4-500-steps-to-find-out"><strong>Can the $99 Fitbit Air beat the $799 Apple Watch Ultra 3 at fitness tracking? I manually counted 4,500 steps to find out</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/smartwatches/i-manually-counted-4-000-steps-to-test-the-apple-watch-ultra-3-vs-samsung-galaxy-watch-ultra-2-and-samsung-wins-the-accuracy-battle-with-better-elevation-data-too"><strong>I walked 4,000 steps with the Apple Watch Ultra 3 vs Samsung Galaxy Watch Ultra 2 — and the winning margin was razor-thin</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/exclusive-garmin-cirqa-pm-says-it-just-felt-like-we-had-all-of-the-pieces-in-place-to-launch-a-screen-free-fitness-tracker"><strong>Exclusive: Garmin Cirqa PM says ‘it just felt like we had all of the pieces in place’ to launch a screen-free fitness tracker</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-fitbit-air-vs-garmin-cirqa-round-2-we-have-a-new-champ</link>
                                                                            <description>
                            <![CDATA[ We're back with another fitness-tracking showdown between everyone's favorite new screen-free trackers: the Fitbit Air vs. Garmin Cirq. Who will win round 2? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nuJL3P9hun8vDppGRSaDQM</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AZiNzMo6iqnpTRsefYcEna-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 14 Aug 2026 04:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/AZiNzMo6iqnpTRsefYcEna-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Air next to the Garmin Cirqa]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Air next to the Garmin Cirqa]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Air next to the Garmin Cirqa]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AZiNzMo6iqnpTRsefYcEna-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google and Garmin both recently dropped new screen-free fitness trackers to rival the popular <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a>. The biggest difference? The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> and <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-just-went-hands-on-with-the-garmin-cirqa-and-it-strikes-a-near-perfect-balance-between-the-fitbit-air-and-whoop-5-0">Garmin Cirqa</a> are both subscription-free.</p><p>I’ve already tested the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-7-000-steps-with-the-garmin-cirqa-vs-fitbit-air-and-theres-a-clear-winner">Fitbit Air vs Garmin Cirqa</a> head-to-head in a prior walk test comparison, but a hiccup with the latter’s data meant a rematch was inevitable. </p><p>About as evenly matched as they come, both the Air and Cirqa track your sleep, workouts, and overall health. Garmin’s insights go a bit more in-depth than Fitbit’s, but the Cirqa is also twice the price of the Air, $199 vs. $99.</p><p>When it comes to onboard tech, neither device has GPS, so you must carry a paired smartphone for location tracking data during outdoor workouts.</p><h3 class="article-body__section" id="section-i-walked-5-000-steps-with-the-fitbit-air-vs-garmin-cirqa"><span>I walked 5,000 steps with the Fitbit Air vs Garmin Cirqa</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="58QF4r9QbpHc9RioxLeRqc" name="Air-v-Cirqa-03" alt="Close-up of the Fitbit Air next to the Garmin Cirqa" src="https://cdn.mos.cms.futurecdn.net/58QF4r9QbpHc9RioxLeRqc.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>So, which screen-free tracker is the more reliable wearable? I walked 5,000 steps with the Fitbit Air on my left wrist and the Garmin Cirqa on my right wrist to find out (the opposite of the previous test). </p><p>For good measure, I also tracked the walk using the Strava app on my iPhone 16, and as always, I manually counted my steps with some help from an old-school tally counter (one click = 100 steps). </p><p>Find the results of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/garmin-cirqa-vs-fitbit-air-5-crucial-differences-you-need-to-know">Fitbit Air vs Garmin Cirqa</a> walk test, round 2, below.</p><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Garmin Cirqa</p></th><th  ><p>Fitbit AIr</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>5,006 steps</p></td><td  ><p>5,009 steps</p></td><td  ><p> 5,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>2.77 miles</p></td><td  ><p>2.71 miles</p></td><td  ><p>2.69 miles</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>394 feet</p></td><td  ><p>248 feet</p></td><td  ><p>393 feet</p></td></tr><tr><td class="firstcol " ><p><strong>Average pace</strong></p></td><td  ><p>16 mins 46 secs per mile</p></td><td  ><p>16 mins 58 secs per mile</p></td><td  ><p>16 mins 49 secs per mile</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>not recorded</p></td><td  ><p>125 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>not recorded</p></td><td  ><p>153 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>240 total calories</p></td><td  ><p>398 total calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery usage</strong></p></td><td  ><p>0%</p></td><td  ><p>2%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-garmin-s-step-count-was-closer"><span>Garmin's step count was closer</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zrwLhcy7pE9gHz99a3wDGf" name="GarminCirqa-v-FitbitAir-02" alt="Close-up of the Garmin Cirqa screen-free fitness tracker" src="https://cdn.mos.cms.futurecdn.net/zrwLhcy7pE9gHz99a3wDGf.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Given the fact that the Fitbit Air, Garmin Cirqa, and Strava were all making use of the same location data, courtesy of my smartphone, you'd expect metrics like distance, steps, and pace to be pretty similar across the board. And that is very much the case.</p><p>However, when it comes to steps, Garmin's tally was closer to my actual count than Fitbit's by a whopping margin of... three steps. This is to say, both devices performed remarkably well here.</p><p>Strava's step count, for what it's worth, was 4,992, another impressive result.</p><h3 class="article-body__section" id="section-the-fitbit-air-continues-to-struggle-with-climb-data"><span>The Fitbit Air continues to struggle with climb data</span></h3><p>Some things never change. While the Garmin Cirqa and Strava calculated virtually the same amount of ascent for my rather hilly walk, the Fitbit Air significantly undercounted. </p><p>This is far from the first time the Air has logged lower-than-expected climb data. I had a similar result when I last pitted the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-7-000-steps-with-the-garmin-cirqa-vs-fitbit-air-and-theres-a-clear-winner">Air vs Cirqa in a walk test</a>. It also undercounted in a <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner">walk test versus the Apple Watch 11</a>, and another time in a comparison <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-000-steps-with-the-fitbit-air-vs-pixel-watch-4-and-im-genuinely-shocked-by-the-results">against the Pixel Watch 4</a>.</p><h3 class="article-body__section" id="section-all-three-tracking-methods-noted-similar-distance-and-pace"><span>All three tracking methods noted similar distance and pace</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4637px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="y55QpRXhUiM9N8DKrxbLSe" name="GarminCirqa-v-FitbitAir" alt="Close-up of the Garmin Cirqa screen-free fitness tracker" src="https://cdn.mos.cms.futurecdn.net/y55QpRXhUiM9N8DKrxbLSe.jpg" mos="" align="middle" fullscreen="" width="4637" height="2608" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Despite inconsistencies in climb data, the Fitbit Air, Garmin Cirqa, and Strava app all calculated roughly the same amount of distance covered and average pace for my ~45-minute walk around sunny Seattle, Washington. That said, Garmin was the most generous with my efforts and speed. </p><h3 class="article-body__section" id="section-garmin-failed-to-record-any-heart-rate-data"><span>Garmin failed to record any heart rate data </span></h3><p>Well, this is a first: For unknown reasons, the Garmin Cirqa failed to record any heart rate data during my walk. This is particularly disappointing given the fact that it performed well in every other regard. Coincidentally, when I last tested the Garmin against the Fitbit, heart rate data was one of the few metrics it <em>did</em> log. </p><p>The Fitbit Air's max and average heart rate data, meanwhile, are right around what I expected for my walk, based on previous walk data from a zillion other tests. </p><h3 class="article-body__section" id="section-fitbit-burned-more-battery-and-calories"><span>Fitbit burned more battery and calories </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5573px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5zLDepBC5i6nn89axNbSMa" name="Air-v-Cirqa-02" alt="Close-up of the Fitbit Air next to the Garmin Cirqa" src="https://cdn.mos.cms.futurecdn.net/5zLDepBC5i6nn89axNbSMa.jpg" mos="" align="middle" fullscreen="" width="5573" height="3135" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Finally, neither device used much battery recording my walking workout, which makes sense given neither has a screen or GPS to power. While the Cirqa registered zero drain, the Air used just 2%.</p><p>Not only did the Fitbit burn more battery, but it also said I burned more calories than the Garmin during my stroll. That said, fitness tracker calorie counts are notoriously inconsistent, and one of the main metrics I tend to ignore.</p><p>Which of these two fitness trackers would you be more likely to use? Let me know in the poll below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODqw4X"></div>                            </div>                            <script src="https://kwizly.com/embed/ODqw4X.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/can-the-usd99-fitbit-air-beat-the-usd799-apple-watch-ultra-3-at-fitness-tracking-i-manually-counted-4-500-steps-to-find-out"><strong>Can the $99 Fitbit Air beat the $799 Apple Watch Ultra 3 at fitness tracking? I manually counted 4,500 steps to find out</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/smartwatches/i-manually-counted-4-000-steps-to-test-the-apple-watch-ultra-3-vs-samsung-galaxy-watch-ultra-2-and-samsung-wins-the-accuracy-battle-with-better-elevation-data-too"><strong>I walked 4,000 steps with the Apple Watch Ultra 3 vs Samsung Galaxy Watch Ultra 2 — and the winning margin was razor-thin</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/exclusive-garmin-cirqa-pm-says-it-just-felt-like-we-had-all-of-the-pieces-in-place-to-launch-a-screen-free-fitness-tracker"><strong>Exclusive: Garmin Cirqa PM says ‘it just felt like we had all of the pieces in place’ to launch a screen-free fitness tracker</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google Health gets a lot of hate — but these 5 AI Coach prompts changed my mind ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I've used Apple Health, ChatGPT Health and Google Health, but I keep coming back to Google since the recent update. The redesigned app has gotten mixed opinions from long-time users online, but I've found myself checking it much more throughout the day lately. It gives me one place to see my sleep score, step count, calories burned and other health data without making me hunt for every number.</p><p>Plenty of longtime Fitbit users hate the change, <a href="https://www.tomsguide.com/ai/my-mom-is-in-her-70s-and-uses-ai-every-day-these-are-her-5-go-to-favorite-uses">my own mother being one of them</a>. When <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">Google Health replaced the Fitbit app</a> in May, users complained about missing badges, sleep animals and social features. The new Gemini-powered AI Coach hasn’t won everyone over, either. </p><p>Those complaints are fair, but my personal experience has been different. Google Health has made the information collected by my Fitbit easier to follow. More importantly, its AI Coach can look across that information and help me understand how one part of my routine may be affecting another.</p><p>For the first time, my Fitbit data feels connected and my goals are easier to achieve. </p><h2 id="everything-i-want-to-see-is-in-one-place">Everything I want to see is in one place</h2><p>The first thing I look at is my sleep score. I can see how long I slept, how much time I spent in each sleep stage and whether my night was considered poor, fair or good.</p><p>From there, I can check my steps, exercise and calories burned. Each number is useful on its own, but having them together makes the app more valuable. I don’t have to remember how active I was after a bad night’s sleep or guess whether I moved less on a particularly busy day. What I like about the redesigned Today tab is that I instantly get a quick picture of how I'm doing overall. </p><p>And, if I want more detail, I can move into the Fitness, Sleep and Health sections without losing that larger view.</p><p>Google Health is highly customizable, too. I can decide which metrics deserve space on my main screen instead of scrolling through information I rarely use. Google Health still collects plenty of data, with your approval, but it does a better job of showing me the numbers I care about.</p><h2 id="the-ai-coach-knows-more-about-my-routine-than-i-expected">The AI Coach knows more about my routine than I expected</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WLF8dMQgEMBr4ptsyPzPhi" name="Google Health" alt="Google Health" src="https://cdn.mos.cms.futurecdn.net/WLF8dMQgEMBr4ptsyPzPhi.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The dashboard tells me what is going on day-to-day with my body and The AI Coach tries to explain what it means. </p><p>Google’s Coach is built with Gemini and can use information shared through the app to answer questions about fitness, sleep and general wellness. Depending on what you allow it to access, that can include sleep and activity metrics, workouts, nutrition, cycle tracking, location, local weather and personal medical records.</p><p>It can also remember information you provide during its onboarding conversation. By the way, I encourage you to take the five minutes to have that quick chat. You can tell it about your goals, daily routine, available exercise equipment and any injuries or limitations it should consider.</p><p>That gives it far more context than an ordinary chatbot. </p><h2 id="prompts-to-try-with-google-health-coach">Prompts to try with Google Health Coach</h2><p>The best way to understand what the AI Coach can do is to ask it about information that would normally require comparing several parts of the app.</p><p>Instead of asking a general question such as “How am I doing?” give the Coach a period of time to examine and tell it which parts of your health data you want it to compare.</p><h3 class="article-body__section" id="section-1-find-patterns-in-your-sleep"><span>1. Find patterns in your sleep</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2121px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="QXv47hoUdaFKzY5W7iJnn4" name="Man unable to sleep at night" alt="A man who is unable to sleep at night covers his head with a white pillow while holding a white alarm clock in the other hand" src="https://cdn.mos.cms.futurecdn.net/QXv47hoUdaFKzY5W7iJnn4.jpg" mos="" align="middle" fullscreen="" width="2121" height="1194" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p><strong>Try this prompt:</strong> <em>Looking at my data from the past month, what patterns do you notice in my sleep?</em></p><p>The Coach can examine your sleep duration, scores and consistency instead of giving you generic advice about maintaining a regular bedtime. You can follow up by asking which nights were your best and what those nights had in common.</p><h3 class="article-body__section" id="section-2-learn-how-sleep-affects-activity-levels"><span>2. Learn how sleep affects activity levels</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="UifWn6a5di6kyzzqLuS5Ff" name="desk mobility3_GettyImages-1390200819.jpg" alt="a woman stretching at her desk" src="https://cdn.mos.cms.futurecdn.net/UifWn6a5di6kyzzqLuS5Ff.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p><strong>Try this prompt: </strong><em>How does the amount of sleep I get affect my activity the following day?</em></p><p>This is the kind of comparison I could technically make myself, but I probably wouldn’t. I would need to move between different parts of the app, compare dates and remember what else was happening on those days. The Coach can look across your sleep and activity history to see whether your step count, workouts or calories burned tend to change after a particularly good or bad night.</p><h3 class="article-body__section" id="section-3-ask-what-workout-makes-sense-today"><span>3. Ask what workout makes sense today</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2121px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="t8f6iFDCLJmjufRdgmn7Sn" name="running watch woman.jpg" alt="a photo of a woman looking at her running watch" src="https://cdn.mos.cms.futurecdn.net/t8f6iFDCLJmjufRdgmn7Sn.jpg" mos="" align="middle" fullscreen="" width="2121" height="1193" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty/Carrastock)</span></figcaption></figure><p><strong>Try this prompt: </strong><em>Based on my recent activity and recovery data, what kind of workout makes sense today?</em></p><p>Google wants the Coach to do more than summarize what has already happened. It can use your recent exercise, sleep and readiness to suggest what you might do next.</p><p>If you slept poorly or recently completed several demanding workouts, it may recommend something lighter. If your recovery looks good, it could suggest a more challenging session.</p><p>This is where the Coach has the potential to be the most useful. Fitness trackers have always been good at telling us how far we ran, how many calories we burned and how long we slept. They have been less helpful at telling us what to do with that information.</p><p>That doesn’t mean I would follow every recommendation without question. A fitness tracker cannot know exactly how my body feels, and Google says the Coach is not intended for medical purposes. I treat its suggestions as another piece of information rather than an instruction I have to obey.</p><h3 class="article-body__section" id="section-4-find-your-most-and-least-active-days"><span>4. Find your most and least active days</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2121px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dBByshSEWaesvqxFKYidZB" name="Sleeping on the couch" alt="Man sleeping on the couch in a brightly lit living room" src="https://cdn.mos.cms.futurecdn.net/dBByshSEWaesvqxFKYidZB.jpg" mos="" align="middle" fullscreen="" width="2121" height="1193" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p><strong>Try this prompt: </strong><em>Which days of the week am I usually most active and least active? Compare my steps, workouts and calories burned over the past month.</em></p><p>The Coach may be able to find routines that aren’t obvious from looking at one day at a time. Once it identifies a pattern, you can ask why it reached that conclusion and request the numbers it used.</p><h3 class="article-body__section" id="section-5-ask-what-the-coach-knows-about-you"><span>5. Ask what the Coach knows about you</span></h3><p><strong>Try this prompt</strong>: <em>What information about me are you using to make your recommendations?</em></p><p>Depending on what you allow it to access, it may be drawing from a detailed record of when you sleep, how much you move, when you exercise and how your body responds.</p><p>Google says users control what they share with the Coach. It has also committed not to use Fitbit health and wellness data for Google Ads. Still, this is sensitive information, especially once medical records, cycle tracking or location enter the picture.</p><p>The Coach becomes more useful as it gains more context, but that means giving it access to more of your life. It is worth reviewing the app’s privacy controls and deciding which information you are comfortable sharing.</p><h2 id="how-to-get-google-health-coach">How to get Google Health Coach</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7oiMQfz8og8FDBSS9RjbUV" name="Pixel-Watch-4--09" alt="Close-up of the Google Pixel Watch 4" src="https://cdn.mos.cms.futurecdn.net/7oiMQfz8og8FDBSS9RjbUV.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Toms Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/wellness/smartwatches/forget-apple-watch-11-google-built-the-ai-health-coach-that-i-really-wanted-with-pixel-watch-4">Google Health Coach</a> became globally available in May after an earlier public preview. It is included with a Google Health Premium subscription, which costs $9.99 per month or $99 per year in the United States.</p><p>Google AI Pro and Ultra subscribers receive Google Health Premium at no additional cost. The Coach launched first for eligible Fitbit and Pixel Watch users, with support for additional devices planned.</p><p>After opening Google Health, look for the <strong>Ask Coach</strong> button. The onboarding conversation gives you a chance to explain your goals and routine. You can return later and update those details if your goals change.</p><p>The app can be used without the Coach, and Google provides controls for limiting the information it accesses. Availability and features may vary depending on your device and location.</p><h2 id="final-thoughts">Final thoughts </h2><p>I've tried <a href="https://www.tomsguide.com/ai/chatgpt-congratulated-me-for-being-pregnant-it-was-dead-wrong">ChatGPT Health</a> and <a href="https://www.tomsguide.com/ai/chatgpt/i-used-chatgpt-to-analyze-my-apple-health-activity-and-uncover-trends-heres-what-happened">Apple Health</a>,<a href="https://www.tomsguide.com/ai/chatgpt/i-used-chatgpt-to-analyze-my-apple-health-activity-and-uncover-trends-heres-what-happened"> </a>but after experimenting with each, I keep coming back to Google Health. </p><p>And, yes, I totally understand why longtime Fitbit users are frustrated. Google removed familiar features and placed an AI assistant at the center of an app that many people used simply to check their numbers.</p><p>But Google Health has worked for me because it makes those numbers easier to understand. I can see my sleep, steps, exercise and calories in one place, then ask questions about how they may be connected.</p><p>The AI Coach isn’t a doctor, and it won’t always tell me something I couldn’t figure out myself. What it can do is examine weeks of information in a few seconds and point me toward patterns I might otherwise miss.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/the-smartest-ai-trick-isnt-a-prompt-its-your-google-drive"><strong>The smartest AI trick isn't a prompt — it's your Google Drive</strong></a></li><li><a href="https://www.tomsguide.com/ai/chatgpt/i-found-a-secret-menu-of-chatgpt-features-here-are-my-9-favorites"><strong>I found ChatGPT's secret menu — these 9 features change everything</strong></a></li><li><a href="https://www.tomsguide.com/ai/i-use-gemini-spark-daily-here-are-7-prompts-that-show-what-it-can-really-do"><strong>I use Gemini Spark daily — here are 7 prompts that show what it can really do</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/google-health-gets-a-lot-of-hate-but-these-5-ai-coach-prompts-changed-my-mind</link>
                                                                            <description>
                            <![CDATA[ I’ve been using Google Health to track my sleep, steps and workouts. Here are the AI Coach prompts that make my Fitbit data more useful. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">95gM6PNNCzVXpYyVKhffeV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/RYGcUoTfitKBBxet2ZxE7G-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 06 Aug 2026 11:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 06 Aug 2026 14:49:09 +0000</updated>
                                                                                                                                            <category><![CDATA[AI]]></category>
                                                    <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/RYGcUoTfitKBBxet2ZxE7G-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a female runner smiling as she looks at her phone]]></media:description>                                                            <media:text><![CDATA[a female runner smiling as she looks at her phone]]></media:text>
                                <media:title type="plain"><![CDATA[a female runner smiling as she looks at her phone]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/RYGcUoTfitKBBxet2ZxE7G-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I've used Apple Health, ChatGPT Health and Google Health, but I keep coming back to Google since the recent update. The redesigned app has gotten mixed opinions from long-time users online, but I've found myself checking it much more throughout the day lately. It gives me one place to see my sleep score, step count, calories burned and other health data without making me hunt for every number.</p><p>Plenty of longtime Fitbit users hate the change, <a href="https://www.tomsguide.com/ai/my-mom-is-in-her-70s-and-uses-ai-every-day-these-are-her-5-go-to-favorite-uses">my own mother being one of them</a>. When <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">Google Health replaced the Fitbit app</a> in May, users complained about missing badges, sleep animals and social features. The new Gemini-powered AI Coach hasn’t won everyone over, either. </p><p>Those complaints are fair, but my personal experience has been different. Google Health has made the information collected by my Fitbit easier to follow. More importantly, its AI Coach can look across that information and help me understand how one part of my routine may be affecting another.</p><p>For the first time, my Fitbit data feels connected and my goals are easier to achieve. </p><h2 id="everything-i-want-to-see-is-in-one-place">Everything I want to see is in one place</h2><p>The first thing I look at is my sleep score. I can see how long I slept, how much time I spent in each sleep stage and whether my night was considered poor, fair or good.</p><p>From there, I can check my steps, exercise and calories burned. Each number is useful on its own, but having them together makes the app more valuable. I don’t have to remember how active I was after a bad night’s sleep or guess whether I moved less on a particularly busy day. What I like about the redesigned Today tab is that I instantly get a quick picture of how I'm doing overall. </p><p>And, if I want more detail, I can move into the Fitness, Sleep and Health sections without losing that larger view.</p><p>Google Health is highly customizable, too. I can decide which metrics deserve space on my main screen instead of scrolling through information I rarely use. Google Health still collects plenty of data, with your approval, but it does a better job of showing me the numbers I care about.</p><h2 id="the-ai-coach-knows-more-about-my-routine-than-i-expected">The AI Coach knows more about my routine than I expected</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WLF8dMQgEMBr4ptsyPzPhi" name="Google Health" alt="Google Health" src="https://cdn.mos.cms.futurecdn.net/WLF8dMQgEMBr4ptsyPzPhi.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The dashboard tells me what is going on day-to-day with my body and The AI Coach tries to explain what it means. </p><p>Google’s Coach is built with Gemini and can use information shared through the app to answer questions about fitness, sleep and general wellness. Depending on what you allow it to access, that can include sleep and activity metrics, workouts, nutrition, cycle tracking, location, local weather and personal medical records.</p><p>It can also remember information you provide during its onboarding conversation. By the way, I encourage you to take the five minutes to have that quick chat. You can tell it about your goals, daily routine, available exercise equipment and any injuries or limitations it should consider.</p><p>That gives it far more context than an ordinary chatbot. </p><h2 id="prompts-to-try-with-google-health-coach">Prompts to try with Google Health Coach</h2><p>The best way to understand what the AI Coach can do is to ask it about information that would normally require comparing several parts of the app.</p><p>Instead of asking a general question such as “How am I doing?” give the Coach a period of time to examine and tell it which parts of your health data you want it to compare.</p><h3 class="article-body__section" id="section-1-find-patterns-in-your-sleep"><span>1. Find patterns in your sleep</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2121px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="QXv47hoUdaFKzY5W7iJnn4" name="Man unable to sleep at night" alt="A man who is unable to sleep at night covers his head with a white pillow while holding a white alarm clock in the other hand" src="https://cdn.mos.cms.futurecdn.net/QXv47hoUdaFKzY5W7iJnn4.jpg" mos="" align="middle" fullscreen="" width="2121" height="1194" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p><strong>Try this prompt:</strong> <em>Looking at my data from the past month, what patterns do you notice in my sleep?</em></p><p>The Coach can examine your sleep duration, scores and consistency instead of giving you generic advice about maintaining a regular bedtime. You can follow up by asking which nights were your best and what those nights had in common.</p><h3 class="article-body__section" id="section-2-learn-how-sleep-affects-activity-levels"><span>2. Learn how sleep affects activity levels</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="UifWn6a5di6kyzzqLuS5Ff" name="desk mobility3_GettyImages-1390200819.jpg" alt="a woman stretching at her desk" src="https://cdn.mos.cms.futurecdn.net/UifWn6a5di6kyzzqLuS5Ff.jpg" mos="" align="middle" fullscreen="" width="3000" height="1687" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p><strong>Try this prompt: </strong><em>How does the amount of sleep I get affect my activity the following day?</em></p><p>This is the kind of comparison I could technically make myself, but I probably wouldn’t. I would need to move between different parts of the app, compare dates and remember what else was happening on those days. The Coach can look across your sleep and activity history to see whether your step count, workouts or calories burned tend to change after a particularly good or bad night.</p><h3 class="article-body__section" id="section-3-ask-what-workout-makes-sense-today"><span>3. Ask what workout makes sense today</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2121px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="t8f6iFDCLJmjufRdgmn7Sn" name="running watch woman.jpg" alt="a photo of a woman looking at her running watch" src="https://cdn.mos.cms.futurecdn.net/t8f6iFDCLJmjufRdgmn7Sn.jpg" mos="" align="middle" fullscreen="" width="2121" height="1193" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty/Carrastock)</span></figcaption></figure><p><strong>Try this prompt: </strong><em>Based on my recent activity and recovery data, what kind of workout makes sense today?</em></p><p>Google wants the Coach to do more than summarize what has already happened. It can use your recent exercise, sleep and readiness to suggest what you might do next.</p><p>If you slept poorly or recently completed several demanding workouts, it may recommend something lighter. If your recovery looks good, it could suggest a more challenging session.</p><p>This is where the Coach has the potential to be the most useful. Fitness trackers have always been good at telling us how far we ran, how many calories we burned and how long we slept. They have been less helpful at telling us what to do with that information.</p><p>That doesn’t mean I would follow every recommendation without question. A fitness tracker cannot know exactly how my body feels, and Google says the Coach is not intended for medical purposes. I treat its suggestions as another piece of information rather than an instruction I have to obey.</p><h3 class="article-body__section" id="section-4-find-your-most-and-least-active-days"><span>4. Find your most and least active days</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2121px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dBByshSEWaesvqxFKYidZB" name="Sleeping on the couch" alt="Man sleeping on the couch in a brightly lit living room" src="https://cdn.mos.cms.futurecdn.net/dBByshSEWaesvqxFKYidZB.jpg" mos="" align="middle" fullscreen="" width="2121" height="1193" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p><strong>Try this prompt: </strong><em>Which days of the week am I usually most active and least active? Compare my steps, workouts and calories burned over the past month.</em></p><p>The Coach may be able to find routines that aren’t obvious from looking at one day at a time. Once it identifies a pattern, you can ask why it reached that conclusion and request the numbers it used.</p><h3 class="article-body__section" id="section-5-ask-what-the-coach-knows-about-you"><span>5. Ask what the Coach knows about you</span></h3><p><strong>Try this prompt</strong>: <em>What information about me are you using to make your recommendations?</em></p><p>Depending on what you allow it to access, it may be drawing from a detailed record of when you sleep, how much you move, when you exercise and how your body responds.</p><p>Google says users control what they share with the Coach. It has also committed not to use Fitbit health and wellness data for Google Ads. Still, this is sensitive information, especially once medical records, cycle tracking or location enter the picture.</p><p>The Coach becomes more useful as it gains more context, but that means giving it access to more of your life. It is worth reviewing the app’s privacy controls and deciding which information you are comfortable sharing.</p><h2 id="how-to-get-google-health-coach">How to get Google Health Coach</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7oiMQfz8og8FDBSS9RjbUV" name="Pixel-Watch-4--09" alt="Close-up of the Google Pixel Watch 4" src="https://cdn.mos.cms.futurecdn.net/7oiMQfz8og8FDBSS9RjbUV.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Toms Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/wellness/smartwatches/forget-apple-watch-11-google-built-the-ai-health-coach-that-i-really-wanted-with-pixel-watch-4">Google Health Coach</a> became globally available in May after an earlier public preview. It is included with a Google Health Premium subscription, which costs $9.99 per month or $99 per year in the United States.</p><p>Google AI Pro and Ultra subscribers receive Google Health Premium at no additional cost. The Coach launched first for eligible Fitbit and Pixel Watch users, with support for additional devices planned.</p><p>After opening Google Health, look for the <strong>Ask Coach</strong> button. The onboarding conversation gives you a chance to explain your goals and routine. You can return later and update those details if your goals change.</p><p>The app can be used without the Coach, and Google provides controls for limiting the information it accesses. Availability and features may vary depending on your device and location.</p><h2 id="final-thoughts">Final thoughts </h2><p>I've tried <a href="https://www.tomsguide.com/ai/chatgpt-congratulated-me-for-being-pregnant-it-was-dead-wrong">ChatGPT Health</a> and <a href="https://www.tomsguide.com/ai/chatgpt/i-used-chatgpt-to-analyze-my-apple-health-activity-and-uncover-trends-heres-what-happened">Apple Health</a>,<a href="https://www.tomsguide.com/ai/chatgpt/i-used-chatgpt-to-analyze-my-apple-health-activity-and-uncover-trends-heres-what-happened"> </a>but after experimenting with each, I keep coming back to Google Health. </p><p>And, yes, I totally understand why longtime Fitbit users are frustrated. Google removed familiar features and placed an AI assistant at the center of an app that many people used simply to check their numbers.</p><p>But Google Health has worked for me because it makes those numbers easier to understand. I can see my sleep, steps, exercise and calories in one place, then ask questions about how they may be connected.</p><p>The AI Coach isn’t a doctor, and it won’t always tell me something I couldn’t figure out myself. What it can do is examine weeks of information in a few seconds and point me toward patterns I might otherwise miss.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/the-smartest-ai-trick-isnt-a-prompt-its-your-google-drive"><strong>The smartest AI trick isn't a prompt — it's your Google Drive</strong></a></li><li><a href="https://www.tomsguide.com/ai/chatgpt/i-found-a-secret-menu-of-chatgpt-features-here-are-my-9-favorites"><strong>I found ChatGPT's secret menu — these 9 features change everything</strong></a></li><li><a href="https://www.tomsguide.com/ai/i-use-gemini-spark-daily-here-are-7-prompts-that-show-what-it-can-really-do"><strong>I use Gemini Spark daily — here are 7 prompts that show what it can really do</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I walked 7,000 steps with the Garmin Cirqa vs Fitbit Air — and there's a clear winner ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Which new screen-free fitness tracker is more accurate, the Fitbit Air or the Garmin Cirqa? I decided to find out by popping one on either wrist and logging a long walk.</p><p>Even though the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-just-went-hands-on-with-the-garmin-cirqa-and-it-strikes-a-near-perfect-balance-between-the-fitbit-air-and-whoop-5-0">Garmin Cirqa</a> is twice the cost of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> — $199 vs $99 — these two trackers have a lot in common. Screen-free, your primary method for interacting with either is through the companion app. That said, the Cirqa also has one physical button to start and stop workouts.</p><p>More importantly, neither has onboard GPS, so both require you to bring your paired phone along when logging an outdoor workout so that they can piggyback off its location and elevation data. </p><p>Now, on to the test!</p><div class="product star-deal"><a data-dimension112="b4bf739a-87ad-11f1-b5bc-45577e1d0439" data-action="Star Deal Block" data-label="Air" data-dimension48="Air" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMTZF3V/?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:794px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="UcGoezMNaNCCtsaSfVKrqL" name="Google Fitbit Air" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/UcGoezMNaNCCtsaSfVKrqL.jpg" mos="" align="middle" fullscreen="" width="794" height="794" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>At $99, the screen-free Fitbit Air is a fantastic little fitness tracker that's super comfortable, long-lasting, and discreet. Kind of like a Fitbit Inspire 3 minus the display, it's one of my favorite wearables of 2026.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMTZF3V/?th=1" target="_blank" rel="nofollow" data-dimension112="b4bf739a-87ad-11f1-b5bc-45577e1d0439" data-action="Star Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="b4bf741c-87ad-11f1-9865-cfcc6d58b1e4" data-action="Deal Block" data-label="Cirqa" data-dimension48="Cirqa" data-dimension25="$" href="https://www.amazon.com/Garmin-CIRQATM-Smart-Subscription-French/dp/B0H94C68DZ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:903px;"><p class="vanilla-image-block" style="padding-top:110.30%;"><img id="9hSH5VJVhpTbr5YMN8Adsm" name="Screenshot 2026-07-24 at 3.20.34 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9hSH5VJVhpTbr5YMN8Adsm.png" mos="" align="middle" fullscreen="" width="903" height="996" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Garmin Cirqa is a screen-less fitness tracker with only a single button to start and stop workouts. Boasting up to ten days of battery and a lightweight design, it's Garmin's answer to the Whoop 5.0 and Fitbit Air.<a class="view-deal button" href="https://www.amazon.com/Garmin-CIRQATM-Smart-Subscription-French/dp/B0H94C68DZ/" target="_blank" rel="nofollow" data-dimension112="b4bf741c-87ad-11f1-9865-cfcc6d58b1e4" data-action="Deal Block" data-label="Cirqa" data-dimension48="Cirqa" data-dimension25="$">View Deal</a></p></div><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-cirqa-walk-test-rules"><span>Fitbit Air vs Garmin Cirqa: Walk test rules</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zrwLhcy7pE9gHz99a3wDGf" name="GarminCirqa-v-FitbitAir-02" alt="Close-up of the Garmin Cirqa screen-free fitness tracker" src="https://cdn.mos.cms.futurecdn.net/zrwLhcy7pE9gHz99a3wDGf.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I manually counted 7,000 steps — using my <a href="https://www.amazon.com/SDARMING-Counters-Counting-Knitting-Coaching/dp/B0971CF137/" target="_blank" rel="nofollow">trusty $6 tally counter</a> to log every hundred — with the Fitbit Air on my left wrist and the Garmin Cirqa on my right wrist to determine which is the more accurate fitness tracker. </p><p>I also ran Strava on my iPhone 16 Plus for additional step count, distance, elevation, and pace data. For the Fitbit Air, I manually began a walking workout from the Google Health app. For the Garmin Cirqa, I started the workout by pressing the single button. This proved to be a mistake.</p><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-cirqa-walk-test-results"><span>Fitbit Air vs Garmin Cirqa: Walk test results </span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Garmin Cirqa</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>6,990 steps</p></td><td  ><p>7,070 steps</p></td><td  ><p>7,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>3.86 miles</p></td><td  ><p>not provided</p></td><td  ><p>3.86 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>236 feet</p></td><td  ><p>not provided</p></td><td  ><p> 405 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average pace </strong></p></td><td  ><p> 16 mins 17 secs</p></td><td  ><p>not provided</p></td><td  ><p>16 mins 35 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>115 bpm</p></td><td  ><p>123 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>135 bpm</p></td><td  ><p>160 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>532 calories</p></td><td  ><p>464 calories </p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>It took me about one hour to walk 7,000 steps around sunny Seattle, Washington, a step count total that all three tracking methods came remarkably close to. For these tests, I consider any tally within 100 steps of my actual total to be outstanding. </p><p>Ultimately, the Fitbit Air undercounted by a mere ten steps, while the Garmin Cirqa overcounted by 70. Strava, meanwhile, overcounted by ten. </p><p>Unfortunately, because the Cirqa logged my efforts as a generic workout rather than an outdoor walk, it frustratingly didn't register any distance, climb, or pace data for this test.</p><p>The Fitbit Air, on the other hand, logged the same distance as Strava, which isn't too surprising given both are making use of the same GPS data. However, its climb data is seemingly waaaay off. This is <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-000-steps-with-the-fitbit-air-vs-pixel-watch-4-and-im-genuinely-shocked-by-the-results">neither the first</a> nor <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner">the second time</a> I've had an issue with climb data when it comes to the Air.</p><p>Fortunately, the Air's pace data is much more aligned with Strava's. </p><p>The lack of consistency between the Air and Cirqa for heart rate data is a tad concerning. Without control data, it's hard to say for sure which watch is more accurate in this regard, but I suspect it's the Garmin, given my walk involved quickly ascending several very steep hills, which definitely got the blood pumping.</p><h3 class="article-body__section" id="section-samsung-galaxy-watch-ultra-2-vs-apple-watch-ultra-3-winner"><span>Samsung Galaxy Watch Ultra 2 vs Apple Watch Ultra 3: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3615px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="V5bphk5nqaWqaTZMwFPFaL" name="IMG_0408" alt="a photo of the Fitbit Air and the Garmin Cirqa on the wrist" src="https://cdn.mos.cms.futurecdn.net/V5bphk5nqaWqaTZMwFPFaL.jpg" mos="" align="middle" fullscreen="" width="3615" height="2034" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Despite continuing to struggle with climb data, the Fitbit Air beats the Garmin Cirqa in this walk test head-to-head by a small but legit margin. This is similar to the results my colleague Jane discovered when she tested these two gadgets against one another in a <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-garmin-cirqa-and-fitbit-air-and-the-winner-is-clear">4,000-step comparison</a>.</p><p>Stay tuned for more testing and coverage of the Garmin Cirqa, including my full review, coming soon.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/can-the-usd99-fitbit-air-beat-the-usd799-apple-watch-ultra-3-at-fitness-tracking-i-manually-counted-4-500-steps-to-find-out">Can the $99 Fitbit Air beat the $799 Apple Watch Ultra 3 at fitness tracking? I manually counted 4,500 steps to find out</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-manually-counted-4-000-steps-to-test-the-apple-watch-ultra-3-vs-samsung-galaxy-watch-ultra-2-and-samsung-wins-the-accuracy-battle-with-better-elevation-data-too">I walked 4,000 steps with the Apple Watch Ultra 3 vs Samsung Galaxy Watch Ultra 2 — and the winning margin was razor-thin</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-whoop-or-fitbit-air-5-questions-to-ask-yourself-before-buying-a-screen-free-fitness-tracker">Oura vs Whoop vs Fitbit Air — 5 questions to ask yourself before buying a screen-free fitness tracker</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-walked-7-000-steps-with-the-garmin-cirqa-vs-fitbit-air-and-theres-a-clear-winner</link>
                                                                            <description>
                            <![CDATA[ Which screen-free fitness tracker is more accurate, the Fitbit Air or the Garmin Cirqa? I decided to find out by popping one on either wrist and logging a long walk. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LwQwWeoBCGf93yqLSoC9Ba</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/y55QpRXhUiM9N8DKrxbLSe-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 27 Jul 2026 11:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Jul 2026 14:01:24 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/y55QpRXhUiM9N8DKrxbLSe-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Garmin Cirqa screen-free fitness tracker]]></media:description>                                                            <media:text><![CDATA[Close-up of the Garmin Cirqa screen-free fitness tracker]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Garmin Cirqa screen-free fitness tracker]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/y55QpRXhUiM9N8DKrxbLSe-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Which new screen-free fitness tracker is more accurate, the Fitbit Air or the Garmin Cirqa? I decided to find out by popping one on either wrist and logging a long walk.</p><p>Even though the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-just-went-hands-on-with-the-garmin-cirqa-and-it-strikes-a-near-perfect-balance-between-the-fitbit-air-and-whoop-5-0">Garmin Cirqa</a> is twice the cost of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> — $199 vs $99 — these two trackers have a lot in common. Screen-free, your primary method for interacting with either is through the companion app. That said, the Cirqa also has one physical button to start and stop workouts.</p><p>More importantly, neither has onboard GPS, so both require you to bring your paired phone along when logging an outdoor workout so that they can piggyback off its location and elevation data. </p><p>Now, on to the test!</p><div class="product star-deal"><a data-dimension112="b4bf739a-87ad-11f1-b5bc-45577e1d0439" data-action="Star Deal Block" data-label="Air" data-dimension48="Air" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMTZF3V/?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:794px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="UcGoezMNaNCCtsaSfVKrqL" name="Google Fitbit Air" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/UcGoezMNaNCCtsaSfVKrqL.jpg" mos="" align="middle" fullscreen="" width="794" height="794" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>At $99, the screen-free Fitbit Air is a fantastic little fitness tracker that's super comfortable, long-lasting, and discreet. Kind of like a Fitbit Inspire 3 minus the display, it's one of my favorite wearables of 2026.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMTZF3V/?th=1" target="_blank" rel="nofollow" data-dimension112="b4bf739a-87ad-11f1-b5bc-45577e1d0439" data-action="Star Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="b4bf741c-87ad-11f1-9865-cfcc6d58b1e4" data-action="Deal Block" data-label="Cirqa" data-dimension48="Cirqa" data-dimension25="$" href="https://www.amazon.com/Garmin-CIRQATM-Smart-Subscription-French/dp/B0H94C68DZ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:903px;"><p class="vanilla-image-block" style="padding-top:110.30%;"><img id="9hSH5VJVhpTbr5YMN8Adsm" name="Screenshot 2026-07-24 at 3.20.34 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9hSH5VJVhpTbr5YMN8Adsm.png" mos="" align="middle" fullscreen="" width="903" height="996" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Garmin Cirqa is a screen-less fitness tracker with only a single button to start and stop workouts. Boasting up to ten days of battery and a lightweight design, it's Garmin's answer to the Whoop 5.0 and Fitbit Air.<a class="view-deal button" href="https://www.amazon.com/Garmin-CIRQATM-Smart-Subscription-French/dp/B0H94C68DZ/" target="_blank" rel="nofollow" data-dimension112="b4bf741c-87ad-11f1-9865-cfcc6d58b1e4" data-action="Deal Block" data-label="Cirqa" data-dimension48="Cirqa" data-dimension25="$">View Deal</a></p></div><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-cirqa-walk-test-rules"><span>Fitbit Air vs Garmin Cirqa: Walk test rules</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zrwLhcy7pE9gHz99a3wDGf" name="GarminCirqa-v-FitbitAir-02" alt="Close-up of the Garmin Cirqa screen-free fitness tracker" src="https://cdn.mos.cms.futurecdn.net/zrwLhcy7pE9gHz99a3wDGf.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I manually counted 7,000 steps — using my <a href="https://www.amazon.com/SDARMING-Counters-Counting-Knitting-Coaching/dp/B0971CF137/" target="_blank" rel="nofollow">trusty $6 tally counter</a> to log every hundred — with the Fitbit Air on my left wrist and the Garmin Cirqa on my right wrist to determine which is the more accurate fitness tracker. </p><p>I also ran Strava on my iPhone 16 Plus for additional step count, distance, elevation, and pace data. For the Fitbit Air, I manually began a walking workout from the Google Health app. For the Garmin Cirqa, I started the workout by pressing the single button. This proved to be a mistake.</p><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-cirqa-walk-test-results"><span>Fitbit Air vs Garmin Cirqa: Walk test results </span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Garmin Cirqa</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>6,990 steps</p></td><td  ><p>7,070 steps</p></td><td  ><p>7,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>3.86 miles</p></td><td  ><p>not provided</p></td><td  ><p>3.86 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>236 feet</p></td><td  ><p>not provided</p></td><td  ><p> 405 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average pace </strong></p></td><td  ><p> 16 mins 17 secs</p></td><td  ><p>not provided</p></td><td  ><p>16 mins 35 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>115 bpm</p></td><td  ><p>123 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>135 bpm</p></td><td  ><p>160 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>532 calories</p></td><td  ><p>464 calories </p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>It took me about one hour to walk 7,000 steps around sunny Seattle, Washington, a step count total that all three tracking methods came remarkably close to. For these tests, I consider any tally within 100 steps of my actual total to be outstanding. </p><p>Ultimately, the Fitbit Air undercounted by a mere ten steps, while the Garmin Cirqa overcounted by 70. Strava, meanwhile, overcounted by ten. </p><p>Unfortunately, because the Cirqa logged my efforts as a generic workout rather than an outdoor walk, it frustratingly didn't register any distance, climb, or pace data for this test.</p><p>The Fitbit Air, on the other hand, logged the same distance as Strava, which isn't too surprising given both are making use of the same GPS data. However, its climb data is seemingly waaaay off. This is <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-000-steps-with-the-fitbit-air-vs-pixel-watch-4-and-im-genuinely-shocked-by-the-results">neither the first</a> nor <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner">the second time</a> I've had an issue with climb data when it comes to the Air.</p><p>Fortunately, the Air's pace data is much more aligned with Strava's. </p><p>The lack of consistency between the Air and Cirqa for heart rate data is a tad concerning. Without control data, it's hard to say for sure which watch is more accurate in this regard, but I suspect it's the Garmin, given my walk involved quickly ascending several very steep hills, which definitely got the blood pumping.</p><h3 class="article-body__section" id="section-samsung-galaxy-watch-ultra-2-vs-apple-watch-ultra-3-winner"><span>Samsung Galaxy Watch Ultra 2 vs Apple Watch Ultra 3: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3615px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="V5bphk5nqaWqaTZMwFPFaL" name="IMG_0408" alt="a photo of the Fitbit Air and the Garmin Cirqa on the wrist" src="https://cdn.mos.cms.futurecdn.net/V5bphk5nqaWqaTZMwFPFaL.jpg" mos="" align="middle" fullscreen="" width="3615" height="2034" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Despite continuing to struggle with climb data, the Fitbit Air beats the Garmin Cirqa in this walk test head-to-head by a small but legit margin. This is similar to the results my colleague Jane discovered when she tested these two gadgets against one another in a <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-garmin-cirqa-and-fitbit-air-and-the-winner-is-clear">4,000-step comparison</a>.</p><p>Stay tuned for more testing and coverage of the Garmin Cirqa, including my full review, coming soon.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/can-the-usd99-fitbit-air-beat-the-usd799-apple-watch-ultra-3-at-fitness-tracking-i-manually-counted-4-500-steps-to-find-out">Can the $99 Fitbit Air beat the $799 Apple Watch Ultra 3 at fitness tracking? I manually counted 4,500 steps to find out</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-manually-counted-4-000-steps-to-test-the-apple-watch-ultra-3-vs-samsung-galaxy-watch-ultra-2-and-samsung-wins-the-accuracy-battle-with-better-elevation-data-too">I walked 4,000 steps with the Apple Watch Ultra 3 vs Samsung Galaxy Watch Ultra 2 — and the winning margin was razor-thin</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-whoop-or-fitbit-air-5-questions-to-ask-yourself-before-buying-a-screen-free-fitness-tracker">Oura vs Whoop vs Fitbit Air — 5 questions to ask yourself before buying a screen-free fitness tracker</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve tested over 100 fitness trackers head-to-head — 3 workout stats I trust the least ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I test a lot of smartwatches and fitness trackers here at Tom’s Guide. I mean A LOT. If the device was released in the past three years, there’s a very good chance I’ve not only helped to review it but also tested it head-to-head against the competition.</p><p>The vast majority of name-brand wearables track heart rate, distance, and step count — assuming you're going for a walk or hike — with impressive consistency, in my experience. For example, I’ve performed <a href="https://www.tomsguide.com/wellness/fitness-trackers/can-the-usd99-fitbit-air-beat-the-usd799-apple-watch-ultra-3-at-fitness-tracking-i-manually-counted-4-500-steps-to-find-out">dozens of walk tests</a> where I wear a device on either wrist and manually count my steps to see which comes closer.</p><p>Not only do most modern wearables come within a few hundred steps of my actual count — an impressive accomplishment when we're talking 5,000 or more steps per walk — but most also report similar distance data, down to a few tenths of a mile, and broadly the same heart rate data, give or take a handful of beats per minute. </p><p>That said, there are three workout stats that are consistently, well... inconsistent. And it's not just wallet-friendly models that struggle; even some of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> and <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> occasionally have hiccups tracking these metrics. </p><h3 class="article-body__section" id="section-the-three-fitness-tracking-stats-i-trust-the-least"><span>The three fitness tracking stats I trust the least</span></h3><h3 class="article-body__section" id="section-1-elevation-gain"><span>1. Elevation gain</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5011px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="mKcWHy4FyfXAdxg6cMjXUM" name="Forerunner70-02" alt="Close-up of the Garmin Forerunner 70 entry-level running watch in white" src="https://cdn.mos.cms.futurecdn.net/mKcWHy4FyfXAdxg6cMjXUM.jpg" mos="" align="middle" fullscreen="" width="5011" height="2818" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>As an avid <a href="https://www.tomsguide.com/wellness/smartwatches/i-took-the-apple-watch-ultra-3-vs-garmin-instinct-3-snowboarding-and-there-was-one-clear-winner">mountain sports enthusiast</a> and someone who enjoys urban hiking and <a href="https://www.tomsguide.com/wellness/smartwatches/i-biked-11-miles-with-the-apple-watch-ultra-3-vs-strava-and-theres-a-clear-winner">biking</a> in a particularly hilly part of the U.S. (Seattle, WA), inconsistent elevation tracking seriously irks me. For example, it’s not unusual for a standard midday, two-mile walk to involve several hundred feet of climb.</p><p>Unfortunately, a lot of wearables come up short when it comes to assessing upward effort. </p><p>Not only that, some popular wearables don’t even offer a metric for elevation gain in the post-workout report, like the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>. Others, like the newer <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> — a wearable I otherwise really like — measure elevation about as accurately as a <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner">newborn shooting pool</a>.</p><p>Even the <a href="https://www.tomsguide.com/best-picks/best-apple-watch">best Apple Watch</a> models occasionally report inaccurate climb data. From my experience, the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-3-review">Ultra 3</a> is rock-solid, but both the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Series 11</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">SE 3</a> have been known to log <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-550-steps-with-the-apple-watch-11-vs-apple-watch-se-3-and-im-genuinely-surprised-by-the-results">slightly inflated elevation</a> stats from time to time.</p><p>For what it’s worth, the brand I’ve found most consistent with elevation tracking is Garmin, that is, assuming you purchase one of the <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin </a>watches, specifically, one with an onboard barometric altimeter. The new <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-review">Forerunner 70</a>, for example, lacks one.</p><h3 class="article-body__section" id="section-2-pace"><span>2. Pace</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3692px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="aWCNwEsfVamfA2tPee55CW" name="AW11-v-AW-SE3-02" alt="Close-up of the Apple Watch SE 3 and Apple Watch Series 11 in a user's hand with a colorful, out-of-focus background" src="https://cdn.mos.cms.futurecdn.net/aWCNwEsfVamfA2tPee55CW.jpg" mos="" align="middle" fullscreen="" width="3692" height="2077" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Speaking of Garmin, it’s one of the few smartwatch brands that provides two pace metrics for outdoor activities like walks, hikes, runs, and bike rides: an average moving pace and an average elapsed (total) pace. </p><p>For most of us, the former is the more valuable metric, as it ignores long pauses — like waiting at a traffic light or stopping for a sip of water — thereby providing a more accurate measure of your <em>actual</em> moving effort. </p><p>Unfortunately, brands like Apple and Google only offer one pace metric in their respective workout reports. And though they don’t specify which pace metric it is, it's almost always slower than the competition’s moving pace stat, suggesting both are reporting elapsed pace, the less valuable one.</p><h3 class="article-body__section" id="section-3-calories"><span>3. Calories</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3215px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="42FrbtdE7qLX8u4Kv6drRi" name="AW10-v-GalaxyWatch8-01" alt="Close-up of the Apple Watch Series 10 and Samsung Galaxy Watch 8 Classic in a user's hand showing the results of a logged bike ride" src="https://cdn.mos.cms.futurecdn.net/42FrbtdE7qLX8u4Kv6drRi.jpg" mos="" align="middle" fullscreen="" width="3215" height="1809" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Post-workout calorie counts are perhaps the most all over the place in my testing. For example, it’s not uncommon for one device to log <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-7-500-steps-with-the-apple-watch-se-3-vs-amazfit-active-max-and-theres-a-clear-winner">one hundred or more calories</a> burned than another after the exact same workout. </p><p>In fact, this metric tends to be so inconsistent that I mostly ignore it completely. Not only are most manufacturers opaque about how the calorie counts are even calculated in the first place, but key factors like a user's metabolism or muscle mass are rarely taken into account when generating them. </p><p>Which fitness tracking stats do you think are bupkis? Let me know in the poll below.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xr0NKW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xr0NKW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/can-the-usd99-fitbit-air-beat-the-usd799-apple-watch-ultra-3-at-fitness-tracking-i-manually-counted-4-500-steps-to-find-out"><strong>Can the $99 Fitbit Air beat the $799 Apple Watch Ultra 3 at fitness tracking? I manually counted 4,500 steps to find out</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-500-steps-with-the-apple-watch-se-3-vs-garmin-forerunner-70-and-this-smartwatch-won"><strong>I walked 5,500 steps with the Apple Watch SE 3 vs Garmin Forerunner 70 — and the results surprised me</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-ran-a-5k-with-the-garmin-forerunner-570-vs-apple-watch-ultra-3-5-things-i-learned"><strong>I ran a 5K with the Garmin Forerunner 570 vs Apple Watch Ultra 3, and although the pace data matched up perfectly across both devices, the Garmin’s exercise load metric and detailed vertical ratio analysis made it the clear winner</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/ive-tested-over-100-fitness-trackers-head-to-head-3-workout-stats-i-trust-the-least</link>
                                                                            <description>
                            <![CDATA[ Not all smartwatches or fitness trackers get these basic workout stats wrong, but a surprising amount do. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">vfFaEqZgofmCRrd7daEqC9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Lroa7D5aKGPJEjsjwKJkB7-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 18 Jul 2026 05:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Lroa7D5aKGPJEjsjwKJkB7-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Amazfit Active Max next to the Garmin Forerunner 570 on a bright orange table]]></media:description>                                                            <media:text><![CDATA[Close-up of the Amazfit Active Max next to the Garmin Forerunner 570 on a bright orange table]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Amazfit Active Max next to the Garmin Forerunner 570 on a bright orange table]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Lroa7D5aKGPJEjsjwKJkB7-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I test a lot of smartwatches and fitness trackers here at Tom’s Guide. I mean A LOT. If the device was released in the past three years, there’s a very good chance I’ve not only helped to review it but also tested it head-to-head against the competition.</p><p>The vast majority of name-brand wearables track heart rate, distance, and step count — assuming you're going for a walk or hike — with impressive consistency, in my experience. For example, I’ve performed <a href="https://www.tomsguide.com/wellness/fitness-trackers/can-the-usd99-fitbit-air-beat-the-usd799-apple-watch-ultra-3-at-fitness-tracking-i-manually-counted-4-500-steps-to-find-out">dozens of walk tests</a> where I wear a device on either wrist and manually count my steps to see which comes closer.</p><p>Not only do most modern wearables come within a few hundred steps of my actual count — an impressive accomplishment when we're talking 5,000 or more steps per walk — but most also report similar distance data, down to a few tenths of a mile, and broadly the same heart rate data, give or take a handful of beats per minute. </p><p>That said, there are three workout stats that are consistently, well... inconsistent. And it's not just wallet-friendly models that struggle; even some of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> and <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> occasionally have hiccups tracking these metrics. </p><h3 class="article-body__section" id="section-the-three-fitness-tracking-stats-i-trust-the-least"><span>The three fitness tracking stats I trust the least</span></h3><h3 class="article-body__section" id="section-1-elevation-gain"><span>1. Elevation gain</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5011px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="mKcWHy4FyfXAdxg6cMjXUM" name="Forerunner70-02" alt="Close-up of the Garmin Forerunner 70 entry-level running watch in white" src="https://cdn.mos.cms.futurecdn.net/mKcWHy4FyfXAdxg6cMjXUM.jpg" mos="" align="middle" fullscreen="" width="5011" height="2818" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>As an avid <a href="https://www.tomsguide.com/wellness/smartwatches/i-took-the-apple-watch-ultra-3-vs-garmin-instinct-3-snowboarding-and-there-was-one-clear-winner">mountain sports enthusiast</a> and someone who enjoys urban hiking and <a href="https://www.tomsguide.com/wellness/smartwatches/i-biked-11-miles-with-the-apple-watch-ultra-3-vs-strava-and-theres-a-clear-winner">biking</a> in a particularly hilly part of the U.S. (Seattle, WA), inconsistent elevation tracking seriously irks me. For example, it’s not unusual for a standard midday, two-mile walk to involve several hundred feet of climb.</p><p>Unfortunately, a lot of wearables come up short when it comes to assessing upward effort. </p><p>Not only that, some popular wearables don’t even offer a metric for elevation gain in the post-workout report, like the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>. Others, like the newer <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> — a wearable I otherwise really like — measure elevation about as accurately as a <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner">newborn shooting pool</a>.</p><p>Even the <a href="https://www.tomsguide.com/best-picks/best-apple-watch">best Apple Watch</a> models occasionally report inaccurate climb data. From my experience, the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-3-review">Ultra 3</a> is rock-solid, but both the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Series 11</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">SE 3</a> have been known to log <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-550-steps-with-the-apple-watch-11-vs-apple-watch-se-3-and-im-genuinely-surprised-by-the-results">slightly inflated elevation</a> stats from time to time.</p><p>For what it’s worth, the brand I’ve found most consistent with elevation tracking is Garmin, that is, assuming you purchase one of the <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin </a>watches, specifically, one with an onboard barometric altimeter. The new <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-review">Forerunner 70</a>, for example, lacks one.</p><h3 class="article-body__section" id="section-2-pace"><span>2. Pace</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3692px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="aWCNwEsfVamfA2tPee55CW" name="AW11-v-AW-SE3-02" alt="Close-up of the Apple Watch SE 3 and Apple Watch Series 11 in a user's hand with a colorful, out-of-focus background" src="https://cdn.mos.cms.futurecdn.net/aWCNwEsfVamfA2tPee55CW.jpg" mos="" align="middle" fullscreen="" width="3692" height="2077" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Speaking of Garmin, it’s one of the few smartwatch brands that provides two pace metrics for outdoor activities like walks, hikes, runs, and bike rides: an average moving pace and an average elapsed (total) pace. </p><p>For most of us, the former is the more valuable metric, as it ignores long pauses — like waiting at a traffic light or stopping for a sip of water — thereby providing a more accurate measure of your <em>actual</em> moving effort. </p><p>Unfortunately, brands like Apple and Google only offer one pace metric in their respective workout reports. And though they don’t specify which pace metric it is, it's almost always slower than the competition’s moving pace stat, suggesting both are reporting elapsed pace, the less valuable one.</p><h3 class="article-body__section" id="section-3-calories"><span>3. Calories</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3215px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="42FrbtdE7qLX8u4Kv6drRi" name="AW10-v-GalaxyWatch8-01" alt="Close-up of the Apple Watch Series 10 and Samsung Galaxy Watch 8 Classic in a user's hand showing the results of a logged bike ride" src="https://cdn.mos.cms.futurecdn.net/42FrbtdE7qLX8u4Kv6drRi.jpg" mos="" align="middle" fullscreen="" width="3215" height="1809" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Post-workout calorie counts are perhaps the most all over the place in my testing. For example, it’s not uncommon for one device to log <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-7-500-steps-with-the-apple-watch-se-3-vs-amazfit-active-max-and-theres-a-clear-winner">one hundred or more calories</a> burned than another after the exact same workout. </p><p>In fact, this metric tends to be so inconsistent that I mostly ignore it completely. Not only are most manufacturers opaque about how the calorie counts are even calculated in the first place, but key factors like a user's metabolism or muscle mass are rarely taken into account when generating them. </p><p>Which fitness tracking stats do you think are bupkis? Let me know in the poll below.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xr0NKW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xr0NKW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/can-the-usd99-fitbit-air-beat-the-usd799-apple-watch-ultra-3-at-fitness-tracking-i-manually-counted-4-500-steps-to-find-out"><strong>Can the $99 Fitbit Air beat the $799 Apple Watch Ultra 3 at fitness tracking? I manually counted 4,500 steps to find out</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-500-steps-with-the-apple-watch-se-3-vs-garmin-forerunner-70-and-this-smartwatch-won"><strong>I walked 5,500 steps with the Apple Watch SE 3 vs Garmin Forerunner 70 — and the results surprised me</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-ran-a-5k-with-the-garmin-forerunner-570-vs-apple-watch-ultra-3-5-things-i-learned"><strong>I ran a 5K with the Garmin Forerunner 570 vs Apple Watch Ultra 3, and although the pace data matched up perfectly across both devices, the Garmin’s exercise load metric and detailed vertical ratio analysis made it the clear winner</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Can the $99 Fitbit Air beat the $799 Apple Watch Ultra 3 at fitness tracking? I manually counted 4,500 steps to find out ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Can the $99 Fitbit Air beat the $799 Apple Watch Ultra 3? I manually counted 4,500 steps to find out.</p><p>Steps are, of course, just one of the many metrics these high-tech wearables keep tally of, but for this head-to-head, it’s the primary figure I’ll be using to declare a winner. </p><p>I also tracked my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> vs <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-3-review">Apple Watch Ultra 3</a> walk using the Strava app as a control for distance, climb, and pace.</p><p>Read on for the results!</p><div class="product"><a data-dimension112="ea922704-8089-11f1-ab35-9bdb9843106c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With no screen, buttons, or alerts to distract you — plus nearly a week of battery — the Fitbit Air is as easy-going as it is affordable. It’s also one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html" data-dimension112="ea922704-8089-11f1-ab35-9bdb9843106c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">best fitness trackers </a>of the year.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="ea922704-8089-11f1-ab35-9bdb9843106c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="ea92277c-8089-11f1-a288-7d29c57a3eec" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$729" href="https://www.bestbuy.com/product/apple-watch-ultra-3-gps-cellular-49mm-titanium-case-with-black-alpine-loop-medium-black-2025/JJGCQL87VH/sku/6572974" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jZmNn7NgmEcxvn6y45BBZX" name="Apple Watch Ultra 3 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jZmNn7NgmEcxvn6y45BBZX.jpg" mos="" align="middle" fullscreen="" width="1600" height="1600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/apple-watch-ultra-3-gps-cellular-49mm-titanium-case-with-black-alpine-loop-medium-black-2025/JJGCQL87VH/sku/6572974" target="_blank" rel="nofollow" data-dimension112="ea92277c-8089-11f1-a288-7d29c57a3eec" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$729">Watch Series 11: was $799 now $729</a></strong><br>Its name says it all. The Apple Watch Ultra 3 is Cupertino’s toughest-built, longest-lasting, most feature-packed smartwatch. No wonder it’s one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> of 2026<a class="view-deal button" href="https://www.bestbuy.com/product/apple-watch-ultra-3-gps-cellular-49mm-titanium-case-with-black-alpine-loop-medium-black-2025/JJGCQL87VH/sku/6572974" target="_blank" rel="nofollow" data-dimension112="ea92277c-8089-11f1-a288-7d29c57a3eec" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$729">View Deal</a></p></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="high" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-can-a-99-fitbit-beat-a-799-apple-watch"><span>Can a $99 Fitbit beat a $799 Apple Watch?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4398px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PbdEY3fyuMA89RVPd3VUx7" name="AWU3-v-FitbitA-01" alt="Close-up of the Apple Watch Ultra 3 and Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/PbdEY3fyuMA89RVPd3VUx7.jpg" mos="" align="middle" fullscreen="" width="4398" height="2474" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>But first, if you’re thinking that this isn’t really a fair competition given the price difference between the Fitbit Air and Apple Watch Ultra 3, you’d be right! But who doesn’t love a good old-fashioned underdog showdown? </p><p>It is worth noting just a few of the key differences between these two trendy wearables before moving on to the outcome. The Fitbit Air is a discreet, screen-free health and fitness tracker with no buttons, notifications, or onboard GPS. While tracking a workout, the Air relies on a paired smartphone for location and elevation data. </p><p>The Apple Watch Ultra 3 sports a sizable, ultra-bright display and is easily one of the most high-tech, feature-packed smartwatches on the market. It boasts a dual-frequency GPS antenna and dedicated altimeter for logging outdoor adventures. </p><p>With that out of the way, here are the results of my 4,500-step walk test between the $99 Fitbit Air and the $799 Apple Watch Ultra 3. </p><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-ultra-3-walk-test-results"><span>Fitbit Air vs Apple Watch Ultra 3: Walk test results </span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Apple Watch Ultra 3</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>4,375 steps</p></td><td  ><p>4,469 steps</p></td><td  ><p>4,500 (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>2.36 miles</p></td><td  ><p>2.39 miles</p></td><td  ><p>2.45  miles (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>No data</p></td><td  ><p>377 feet</p></td><td  ><p>360 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average pace </strong></p></td><td  ><p>18 mins 11 secs</p></td><td  ><p>17 mins 44 secs</p></td><td  ><p>17 mins 21 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>133 bpm</p></td><td  ><p>138 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>165 bpm</p></td><td  ><p>166 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>354 calories</p></td><td  ><p>371 calories </p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery usage</strong></p></td><td  ><p>1%</p></td><td  ><p>4%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>Both wearables calculated my total steps with passable accuracy, but the Ultra 3 was closer. As a rule of thumb, I consider any step count total that's within ~150 steps of my actual count to be within a reasonable margin for error/impressive.</p><p>Strava, for what's worth, noted 4,496 total steps.</p><p>The Fitbit Air's distance measurement is a little further off from the control than the Apple Watch Ultra 3's, but not by a concerning amount. </p><p>What is a tad concerning is the fact that Google seemingly removed climb data from the post-workout report. Notably, because every other time I've logged a walking workout using the Air, the metric was there.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3903px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="EvMxy8b2KjzH2ks5YVcSAA" name="FitbitAir-06" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/EvMxy8b2KjzH2ks5YVcSAA.jpg" mos="" align="middle" fullscreen="" width="3903" height="2195" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>However, after some poking around, it appears the lack of climb data may be due to my inadvertently changing the Google Health app's location data setting on my paired phone from "always" to "while using the app" via an ill-timed pop-up. </p><p>Then again, I had the app open for the duration of my test, and it managed to pull all the other usual location-based metrics, so I'm not 100% convinced this caused the hiccup.</p><p>Coincidentally, as noted in my<a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-000-steps-with-the-fitbit-air-vs-pixel-watch-4-and-im-genuinely-shocked-by-the-results"> Fitbit Air vs Pixel Watch 4</a> and<a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner"> Fitbit Air vs Apple Watch <u>11</u></a> walk tests, accurate elevation tracking isn't exactly the Air's strong suit. Whether inconsistent or missing entirely, I'm hopeful this is something Google irons out with future firmware.</p><p>Moving on, the Fitbit Air noted a slower pace than the competition, which is a bit strange, given it measured less distance than Strava and the Ultra 3. More reassuringly, heart rate and calorie data from the Fitbit and Apple Watch pretty much align for this hilly, ~42-minute walk.</p><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-ultra-3-winner"><span>Fitbit Air vs Apple Watch Ultra 3: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3816px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ojGeHvLY8ci8xyzHZZBa38" name="AW-Ultra3-01" alt="Close-up of the Apple Watch Ultra 3" src="https://cdn.mos.cms.futurecdn.net/ojGeHvLY8ci8xyzHZZBa38.jpg" mos="" align="middle" fullscreen="" width="3816" height="2147" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When pondering whether the $99 Fitbit Air can keep up with the $799 Apple Watch Ultra 3 at reliably tracking an outdoor workout, the answer is, well, not quite. The Apple Watch Ultra 3 proved more precise across the board, not just at tracking total steps, but pace and climb, too.</p><p>When it comes to the Fitbit Air, even though it didn't log my workout as accurately as its pricier rival, the results were still in the ballpark (missing elevation data aside). For most folks, myself included, that's more than good enough for my exercise logging needs. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqRBRX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqRBRX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-whoop-or-fitbit-air-5-questions-to-ask-yourself-before-buying-a-screen-free-fitness-tracker">Oura vs Whoop vs Fitbit Air — 5 questions to ask yourself before buying a screen-free fitness tracker</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/can-the-usd99-fitbit-air-beat-the-usd799-apple-watch-ultra-3-at-fitness-tracking-i-manually-counted-4-500-steps-to-find-out</link>
                                                                            <description>
                            <![CDATA[ I wanted to find out if a $99 Fitbit can compete with a $799 Apple Watch to track a basic workout so I counted out the steps while wearing both. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">gyus8k88TVomBvo9ULVyjj</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/jbht4R2m2ZyXg96fHtRNy8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 16 Jul 2026 16:41:22 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/jbht4R2m2ZyXg96fHtRNy8-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Apple Watch Ultra 3 and Fitbit Air]]></media:description>                                                            <media:text><![CDATA[Close-up of the Apple Watch Ultra 3 and Fitbit Air]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Apple Watch Ultra 3 and Fitbit Air]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/jbht4R2m2ZyXg96fHtRNy8-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Can the $99 Fitbit Air beat the $799 Apple Watch Ultra 3? I manually counted 4,500 steps to find out.</p><p>Steps are, of course, just one of the many metrics these high-tech wearables keep tally of, but for this head-to-head, it’s the primary figure I’ll be using to declare a winner. </p><p>I also tracked my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> vs <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-3-review">Apple Watch Ultra 3</a> walk using the Strava app as a control for distance, climb, and pace.</p><p>Read on for the results!</p><div class="product"><a data-dimension112="ea922704-8089-11f1-ab35-9bdb9843106c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With no screen, buttons, or alerts to distract you — plus nearly a week of battery — the Fitbit Air is as easy-going as it is affordable. It’s also one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html" data-dimension112="ea922704-8089-11f1-ab35-9bdb9843106c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">best fitness trackers </a>of the year.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="ea922704-8089-11f1-ab35-9bdb9843106c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="ea92277c-8089-11f1-a288-7d29c57a3eec" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$729" href="https://www.bestbuy.com/product/apple-watch-ultra-3-gps-cellular-49mm-titanium-case-with-black-alpine-loop-medium-black-2025/JJGCQL87VH/sku/6572974" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jZmNn7NgmEcxvn6y45BBZX" name="Apple Watch Ultra 3 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jZmNn7NgmEcxvn6y45BBZX.jpg" mos="" align="middle" fullscreen="" width="1600" height="1600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/apple-watch-ultra-3-gps-cellular-49mm-titanium-case-with-black-alpine-loop-medium-black-2025/JJGCQL87VH/sku/6572974" target="_blank" rel="nofollow" data-dimension112="ea92277c-8089-11f1-a288-7d29c57a3eec" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$729">Watch Series 11: was $799 now $729</a></strong><br>Its name says it all. The Apple Watch Ultra 3 is Cupertino’s toughest-built, longest-lasting, most feature-packed smartwatch. No wonder it’s one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> of 2026<a class="view-deal button" href="https://www.bestbuy.com/product/apple-watch-ultra-3-gps-cellular-49mm-titanium-case-with-black-alpine-loop-medium-black-2025/JJGCQL87VH/sku/6572974" target="_blank" rel="nofollow" data-dimension112="ea92277c-8089-11f1-a288-7d29c57a3eec" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$729">View Deal</a></p></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="high" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-can-a-99-fitbit-beat-a-799-apple-watch"><span>Can a $99 Fitbit beat a $799 Apple Watch?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4398px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PbdEY3fyuMA89RVPd3VUx7" name="AWU3-v-FitbitA-01" alt="Close-up of the Apple Watch Ultra 3 and Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/PbdEY3fyuMA89RVPd3VUx7.jpg" mos="" align="middle" fullscreen="" width="4398" height="2474" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>But first, if you’re thinking that this isn’t really a fair competition given the price difference between the Fitbit Air and Apple Watch Ultra 3, you’d be right! But who doesn’t love a good old-fashioned underdog showdown? </p><p>It is worth noting just a few of the key differences between these two trendy wearables before moving on to the outcome. The Fitbit Air is a discreet, screen-free health and fitness tracker with no buttons, notifications, or onboard GPS. While tracking a workout, the Air relies on a paired smartphone for location and elevation data. </p><p>The Apple Watch Ultra 3 sports a sizable, ultra-bright display and is easily one of the most high-tech, feature-packed smartwatches on the market. It boasts a dual-frequency GPS antenna and dedicated altimeter for logging outdoor adventures. </p><p>With that out of the way, here are the results of my 4,500-step walk test between the $99 Fitbit Air and the $799 Apple Watch Ultra 3. </p><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-ultra-3-walk-test-results"><span>Fitbit Air vs Apple Watch Ultra 3: Walk test results </span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Apple Watch Ultra 3</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>4,375 steps</p></td><td  ><p>4,469 steps</p></td><td  ><p>4,500 (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>2.36 miles</p></td><td  ><p>2.39 miles</p></td><td  ><p>2.45  miles (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>No data</p></td><td  ><p>377 feet</p></td><td  ><p>360 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average pace </strong></p></td><td  ><p>18 mins 11 secs</p></td><td  ><p>17 mins 44 secs</p></td><td  ><p>17 mins 21 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>133 bpm</p></td><td  ><p>138 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>165 bpm</p></td><td  ><p>166 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>354 calories</p></td><td  ><p>371 calories </p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery usage</strong></p></td><td  ><p>1%</p></td><td  ><p>4%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>Both wearables calculated my total steps with passable accuracy, but the Ultra 3 was closer. As a rule of thumb, I consider any step count total that's within ~150 steps of my actual count to be within a reasonable margin for error/impressive.</p><p>Strava, for what's worth, noted 4,496 total steps.</p><p>The Fitbit Air's distance measurement is a little further off from the control than the Apple Watch Ultra 3's, but not by a concerning amount. </p><p>What is a tad concerning is the fact that Google seemingly removed climb data from the post-workout report. Notably, because every other time I've logged a walking workout using the Air, the metric was there.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3903px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="EvMxy8b2KjzH2ks5YVcSAA" name="FitbitAir-06" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/EvMxy8b2KjzH2ks5YVcSAA.jpg" mos="" align="middle" fullscreen="" width="3903" height="2195" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>However, after some poking around, it appears the lack of climb data may be due to my inadvertently changing the Google Health app's location data setting on my paired phone from "always" to "while using the app" via an ill-timed pop-up. </p><p>Then again, I had the app open for the duration of my test, and it managed to pull all the other usual location-based metrics, so I'm not 100% convinced this caused the hiccup.</p><p>Coincidentally, as noted in my<a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-000-steps-with-the-fitbit-air-vs-pixel-watch-4-and-im-genuinely-shocked-by-the-results"> Fitbit Air vs Pixel Watch 4</a> and<a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner"> Fitbit Air vs Apple Watch <u>11</u></a> walk tests, accurate elevation tracking isn't exactly the Air's strong suit. Whether inconsistent or missing entirely, I'm hopeful this is something Google irons out with future firmware.</p><p>Moving on, the Fitbit Air noted a slower pace than the competition, which is a bit strange, given it measured less distance than Strava and the Ultra 3. More reassuringly, heart rate and calorie data from the Fitbit and Apple Watch pretty much align for this hilly, ~42-minute walk.</p><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-ultra-3-winner"><span>Fitbit Air vs Apple Watch Ultra 3: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3816px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ojGeHvLY8ci8xyzHZZBa38" name="AW-Ultra3-01" alt="Close-up of the Apple Watch Ultra 3" src="https://cdn.mos.cms.futurecdn.net/ojGeHvLY8ci8xyzHZZBa38.jpg" mos="" align="middle" fullscreen="" width="3816" height="2147" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When pondering whether the $99 Fitbit Air can keep up with the $799 Apple Watch Ultra 3 at reliably tracking an outdoor workout, the answer is, well, not quite. The Apple Watch Ultra 3 proved more precise across the board, not just at tracking total steps, but pace and climb, too.</p><p>When it comes to the Fitbit Air, even though it didn't log my workout as accurately as its pricier rival, the results were still in the ballpark (missing elevation data aside). For most folks, myself included, that's more than good enough for my exercise logging needs. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqRBRX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqRBRX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-whoop-or-fitbit-air-5-questions-to-ask-yourself-before-buying-a-screen-free-fitness-tracker">Oura vs Whoop vs Fitbit Air — 5 questions to ask yourself before buying a screen-free fitness tracker</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I counted 4,000 steps to test the Fitbit Air vs Pixel Watch 4 — and the Fitbit Air wins the accuracy battle with one major caveat ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="product"><a data-dimension112="8bf0b0e6-7aec-11f1-9120-ddbc45e99d13" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html" data-dimension112="8bf0b0e6-7aec-11f1-9120-ddbc45e99d13" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">best fitness trackers</a> in 2026, especially if you want an easy-to-wear, set-it-and-forget-it piece of tech that keeps tabs on your key health and fitness metrics with no distractions or fuss. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="8bf0b0e6-7aec-11f1-9120-ddbc45e99d13" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="8bf0b168-7aec-11f1-8dcb-11e95c55bbe9" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$349" href="https://www.bestbuy.com/product/google-pixel-watch-4-41mm-wi-fi-polished-silver-case-porcelain-band-2025/J39TC8JK7T/sku/6637232" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1348px;"><p class="vanilla-image-block" style="padding-top:109.35%;"><img id="ivKPobCKkt5YfBEYBd2tgR" name="Screenshot 2026-01-27 at 12.40.43 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ivKPobCKkt5YfBEYBd2tgR.png" mos="" align="middle" fullscreen="" width="1348" height="1474" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Pixel Watch 4 is Google's flagship smartwatch and one of the<a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch#section-best-smartwatch-for-android" data-dimension112="8bf0b168-7aec-11f1-8dcb-11e95c55bbe9" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$349"> best full-featured smartwatches</a> you can buy, with loads of health and safety tools, workout insights, AI features, and more.<a class="view-deal button" href="https://www.bestbuy.com/product/google-pixel-watch-4-41mm-wi-fi-polished-silver-case-porcelain-band-2025/J39TC8JK7T/sku/6637232" target="_blank" rel="nofollow" data-dimension112="8bf0b168-7aec-11f1-8dcb-11e95c55bbe9" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$349">View Deal</a></p></div><p>I pitted the $99 Fitbit Air against the $349 Pixel Watch 4 in a head-to-head fitness tracking comparison to determine which is the more precise Google wearable. The results genuinely surprised me.</p><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is a lightweight, screen-free fitness tracking band that's as easy on the wallet as it is comfortable on the wrist. The <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a> is Google's flagship smartwatch, with a large, bright display and features galore, including a handy, voice- or gesture-activated Gemini AI assistant. </p><p>To find out which of these flagship Google products is the more competent fitness tracker — at least when it comes to step-counting — I walked 4,000 steps with the Fitbit Air on my right wrist and the Pixel Watch 4 on my left. My primary control metric for the comparison is total steps taken. To ensure a precise tally on my end, I manually counted my steps, noting every hundred with a click of my old-school tally counter. </p><p>As a control for distance, pace, and climb, I brought along my iPhone 16 Plus and logged the walk using the Strava app. Find the results of the Fitbit Air vs Pixel Watch 4 walk test below.</p><h3 class="article-body__section" id="section-fitbit-air-vs-pixel-watch-4-fitness-tracking-accuracy-compared"><span>Fitbit Air vs Pixel Watch 4: fitness tracking accuracy compared</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5212px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="uAUZPAs6PTLr7NyeADhfgH" name="Pixel4-v-FitbitAir-02" alt="Close-up of the Google Pixel Watch 4 and Fitbit Air in a user's hand against a bright red background" src="https://cdn.mos.cms.futurecdn.net/uAUZPAs6PTLr7NyeADhfgH.jpg" mos="" align="middle" fullscreen="" width="5212" height="2931" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When it comes to tracking outdoor workouts, it's important to note a key difference between the Fitbit Air and Pixel Watch 4. The former lacks onboard GPS, so for location-based insights, you need to carry along a paired smartphone. </p><p>In addition to piggybacking off of your phone's GPS antenna, the Fitbit Air also relies on its altimeter for elevation data. The Pixel Watch 4, meanwhile, boasts both an onboard GPS antenna and a barometric altimeter. </p><p>Now, on to the test results!</p><h3 class="article-body__section" id="section-fitbit-air-vs-pixel-watch-4-walk-test-results"><span>Fitbit Air vs Pixel Watch 4: Walk test results </span></h3><div ><table><caption>4,000-step walk comparison: Fitbit Air vs Pixel Watch 4</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Pixel Watch 4</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>3,993 steps</p></td><td  ><p>3,985 steps</p></td><td  ><p>4,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>2.15 miles</p></td><td  ><p>2.09 miles</p></td><td  ><p>2.14 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>184 feet</p></td><td  ><p> 288 feet</p></td><td  ><p>255 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average pace</strong></p></td><td  ><p>18 mins 02 secs</p></td><td  ><p>18 mins 33 secs</p></td><td  ><p> 17 mins 51 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>114 bpm</p></td><td  ><p>121 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>147 bpm</p></td><td  ><p>161 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>284 calories</p></td><td  ><p>303 calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery usage</strong></p></td><td  ><p>3%</p></td><td  ><p>4%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>I took exactly 4,000 steps (manually counted) during my 38-minute walk, including a stroll up <a href="https://www.tomsguide.com/home/electric-bikes/i-tried-to-ride-treks-new-ebike-up-the-steepest-hill-in-seattle-and-it-didnt-go-as-planned">Seattle's steepest block </a>(for old-time's sake). While both wearables noted step count totals within 15 steps of my actual count — a seriously impressive result and well within a reasonable margin for error — much to my surprise, the Fitbit Air was a little bit closer than the Pixel Watch 4.</p><p>The Air and Pixel Watch 4 also beat Strava, which logged 3,978 steps. </p><p>The Fitbit Air's distance data is additionally more in line with the control; the same goes for pace. However, the Air's climb data is woefully inaccurate, a result I noted in my previous walk test with the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner">Fitbit Air vs Apple Watch 11</a>.</p><p>When it comes to heart rate and calories, the Air logged a slightly less aggressive workout compared to the Pixel Watch 4. The Air also used marginally less battery — not surprising, since it lacks a display.</p><h3 class="article-body__section" id="section-fitbit-air-vs-pixel-watch-4-winner"><span>Fitbit Air vs Pixel Watch 4: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>And the winner is... the Fitbit Air, thanks to a slightly more accurate step count total, pace metric, and distance data. That said, the Air's win versus the Pixel Watch 4 comes with an asterisk due to disappointing elevation tracking performance.</p><p>The Pixel Watch 4, meanwhile, performed with acceptable accuracy across the board, including measuring my climb. For this reason, as someone who loves mountain sports, I'd likely opt for the latest Pixel Watch over the Fitbit Air for logging my next adventure. What do you think? Let me know which Google wearable <em>you</em> prefer in the poll below.</p><p>Which fitness trackers or smartwatches should I test head-to-head next?</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORMGAW"></div>                            </div>                            <script src="https://kwizly.com/embed/ORMGAW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-whoop-or-fitbit-air-5-questions-to-ask-yourself-before-buying-a-screen-free-fitness-tracker">Oura vs Whoop vs Fitbit Air — 5 questions to ask yourself before buying a screen-free fitness tracker</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/exclusive-google-design-director-says-fitbit-air-reception-proves-they-made-the-right-decision-going-screen-free">Exclusive: Google design director says Fitbit Air reception proves they 'made the right decision' going screen-free</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-000-steps-with-the-fitbit-air-vs-pixel-watch-4-and-im-genuinely-shocked-by-the-results</link>
                                                                            <description>
                            <![CDATA[ I pitted the $99 Fitbit Air against the $349 Pixel Watch 4 in a head-to-head fitness tracking comparison to determine which is the more precise Google wearable. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">HYafMbbwJyHnhSasJTYJuS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/p7EE7sd3jMDNJaHNhZksb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 09 Jul 2026 09:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 09 Jul 2026 23:59:03 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/p7EE7sd3jMDNJaHNhZksb-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Google Pixel Watch 4 and Fitbit Air on a user&#039;s wrist against a yellow/green background]]></media:description>                                                            <media:text><![CDATA[Close-up of the Google Pixel Watch 4 and Fitbit Air on a user&#039;s wrist against a yellow/green background]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Google Pixel Watch 4 and Fitbit Air on a user&#039;s wrist against a yellow/green background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/p7EE7sd3jMDNJaHNhZksb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="product"><a data-dimension112="8bf0b0e6-7aec-11f1-9120-ddbc45e99d13" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html" data-dimension112="8bf0b0e6-7aec-11f1-9120-ddbc45e99d13" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">best fitness trackers</a> in 2026, especially if you want an easy-to-wear, set-it-and-forget-it piece of tech that keeps tabs on your key health and fitness metrics with no distractions or fuss. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="8bf0b0e6-7aec-11f1-9120-ddbc45e99d13" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="8bf0b168-7aec-11f1-8dcb-11e95c55bbe9" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$349" href="https://www.bestbuy.com/product/google-pixel-watch-4-41mm-wi-fi-polished-silver-case-porcelain-band-2025/J39TC8JK7T/sku/6637232" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1348px;"><p class="vanilla-image-block" style="padding-top:109.35%;"><img id="ivKPobCKkt5YfBEYBd2tgR" name="Screenshot 2026-01-27 at 12.40.43 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ivKPobCKkt5YfBEYBd2tgR.png" mos="" align="middle" fullscreen="" width="1348" height="1474" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Pixel Watch 4 is Google's flagship smartwatch and one of the<a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch#section-best-smartwatch-for-android" data-dimension112="8bf0b168-7aec-11f1-8dcb-11e95c55bbe9" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$349"> best full-featured smartwatches</a> you can buy, with loads of health and safety tools, workout insights, AI features, and more.<a class="view-deal button" href="https://www.bestbuy.com/product/google-pixel-watch-4-41mm-wi-fi-polished-silver-case-porcelain-band-2025/J39TC8JK7T/sku/6637232" target="_blank" rel="nofollow" data-dimension112="8bf0b168-7aec-11f1-8dcb-11e95c55bbe9" data-action="Deal Block" data-label="Pixel Watch 4" data-dimension48="Pixel Watch 4" data-dimension25="$349">View Deal</a></p></div><p>I pitted the $99 Fitbit Air against the $349 Pixel Watch 4 in a head-to-head fitness tracking comparison to determine which is the more precise Google wearable. The results genuinely surprised me.</p><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is a lightweight, screen-free fitness tracking band that's as easy on the wallet as it is comfortable on the wrist. The <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a> is Google's flagship smartwatch, with a large, bright display and features galore, including a handy, voice- or gesture-activated Gemini AI assistant. </p><p>To find out which of these flagship Google products is the more competent fitness tracker — at least when it comes to step-counting — I walked 4,000 steps with the Fitbit Air on my right wrist and the Pixel Watch 4 on my left. My primary control metric for the comparison is total steps taken. To ensure a precise tally on my end, I manually counted my steps, noting every hundred with a click of my old-school tally counter. </p><p>As a control for distance, pace, and climb, I brought along my iPhone 16 Plus and logged the walk using the Strava app. Find the results of the Fitbit Air vs Pixel Watch 4 walk test below.</p><h3 class="article-body__section" id="section-fitbit-air-vs-pixel-watch-4-fitness-tracking-accuracy-compared"><span>Fitbit Air vs Pixel Watch 4: fitness tracking accuracy compared</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5212px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="uAUZPAs6PTLr7NyeADhfgH" name="Pixel4-v-FitbitAir-02" alt="Close-up of the Google Pixel Watch 4 and Fitbit Air in a user's hand against a bright red background" src="https://cdn.mos.cms.futurecdn.net/uAUZPAs6PTLr7NyeADhfgH.jpg" mos="" align="middle" fullscreen="" width="5212" height="2931" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When it comes to tracking outdoor workouts, it's important to note a key difference between the Fitbit Air and Pixel Watch 4. The former lacks onboard GPS, so for location-based insights, you need to carry along a paired smartphone. </p><p>In addition to piggybacking off of your phone's GPS antenna, the Fitbit Air also relies on its altimeter for elevation data. The Pixel Watch 4, meanwhile, boasts both an onboard GPS antenna and a barometric altimeter. </p><p>Now, on to the test results!</p><h3 class="article-body__section" id="section-fitbit-air-vs-pixel-watch-4-walk-test-results"><span>Fitbit Air vs Pixel Watch 4: Walk test results </span></h3><div ><table><caption>4,000-step walk comparison: Fitbit Air vs Pixel Watch 4</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Pixel Watch 4</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>3,993 steps</p></td><td  ><p>3,985 steps</p></td><td  ><p>4,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>2.15 miles</p></td><td  ><p>2.09 miles</p></td><td  ><p>2.14 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>184 feet</p></td><td  ><p> 288 feet</p></td><td  ><p>255 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average pace</strong></p></td><td  ><p>18 mins 02 secs</p></td><td  ><p>18 mins 33 secs</p></td><td  ><p> 17 mins 51 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>114 bpm</p></td><td  ><p>121 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>147 bpm</p></td><td  ><p>161 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>284 calories</p></td><td  ><p>303 calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery usage</strong></p></td><td  ><p>3%</p></td><td  ><p>4%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>I took exactly 4,000 steps (manually counted) during my 38-minute walk, including a stroll up <a href="https://www.tomsguide.com/home/electric-bikes/i-tried-to-ride-treks-new-ebike-up-the-steepest-hill-in-seattle-and-it-didnt-go-as-planned">Seattle's steepest block </a>(for old-time's sake). While both wearables noted step count totals within 15 steps of my actual count — a seriously impressive result and well within a reasonable margin for error — much to my surprise, the Fitbit Air was a little bit closer than the Pixel Watch 4.</p><p>The Air and Pixel Watch 4 also beat Strava, which logged 3,978 steps. </p><p>The Fitbit Air's distance data is additionally more in line with the control; the same goes for pace. However, the Air's climb data is woefully inaccurate, a result I noted in my previous walk test with the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner">Fitbit Air vs Apple Watch 11</a>.</p><p>When it comes to heart rate and calories, the Air logged a slightly less aggressive workout compared to the Pixel Watch 4. The Air also used marginally less battery — not surprising, since it lacks a display.</p><h3 class="article-body__section" id="section-fitbit-air-vs-pixel-watch-4-winner"><span>Fitbit Air vs Pixel Watch 4: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>And the winner is... the Fitbit Air, thanks to a slightly more accurate step count total, pace metric, and distance data. That said, the Air's win versus the Pixel Watch 4 comes with an asterisk due to disappointing elevation tracking performance.</p><p>The Pixel Watch 4, meanwhile, performed with acceptable accuracy across the board, including measuring my climb. For this reason, as someone who loves mountain sports, I'd likely opt for the latest Pixel Watch over the Fitbit Air for logging my next adventure. What do you think? Let me know which Google wearable <em>you</em> prefer in the poll below.</p><p>Which fitness trackers or smartwatches should I test head-to-head next?</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ORMGAW"></div>                            </div>                            <script src="https://kwizly.com/embed/ORMGAW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-whoop-or-fitbit-air-5-questions-to-ask-yourself-before-buying-a-screen-free-fitness-tracker">Oura vs Whoop vs Fitbit Air — 5 questions to ask yourself before buying a screen-free fitness tracker</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/exclusive-google-design-director-says-fitbit-air-reception-proves-they-made-the-right-decision-going-screen-free">Exclusive: Google design director says Fitbit Air reception proves they 'made the right decision' going screen-free</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I manually counted 5,000 steps to test the Apple Watch 11 vs Fitbit Air, and Apple wins the accuracy battle while offering superior elevation data ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Apple Watch Series 11 or Fitbit Air, which popular wearable is the more competent/reliable fitness tracker? I decided to find out by performing one of my renowned head-to-head walk tests.</p><p>For this showdown, I wore the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch 11</a> on my left wrist and the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> on my right wrist for a 5,000-step walk around beautiful Seattle, Washington. How do I know it was 5,000 steps? I counted every darn one, with some assistance from my trusty tally counter (one click= 100 steps).  </p><p>Now, if I were a betting man (I'm not), my money would be on the Series 11 to come out victorious. Not only is it one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> in 2026, but it's also four times the cost of the Fitbit Air: $399 vs $99.</p><p>Then again, the Fitbit Air may be affordable, but it's also one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best fitness trackers </a>in 2026. Not only that, when I pitted in a separate walk test versus the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3</a>, the Air surprisingly came out victorious. Will this be a repeat win? Read on!</p><div class="product"><a data-dimension112="5cba36ea-7a41-11f1-b31b-af2e03721331" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a diminutive, comfortable fitness tracker with no screen or buttons. Just $99, it boasts nearly a week of battery and lots of health, sleep, and workout insights. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="5cba36ea-7a41-11f1-b31b-af2e03721331" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="5cba3776-7a41-11f1-a017-358c1246c879" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$329" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3574px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jng7bX5CBKGUQwXAqm8PR8" name="AW 11" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jng7bX5CBKGUQwXAqm8PR8.jpg" mos="" align="middle" fullscreen="" width="3574" height="3574" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Watch Series 11 is one of the most high-tech smartwatches money can buy, with plenty of apps and features to keep you connected, healthy, safe, and fit. It also boasts a big, bright touchscreen and up to 24 hours of battery per charge. <a class="view-deal button" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5?th=1" target="_blank" rel="nofollow" data-dimension112="5cba3776-7a41-11f1-a017-358c1246c879" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$329">View Deal</a></p></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-apple-watch-11-vs-fitbit-air-tech-compared"><span>Apple Watch 11 vs Fitbit Air: tech compared</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4835px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="kQiKSFbo9N8ktNQvJumyeN" name="FitbitAir-v-AW11-03" alt="Close-up of the Apple Watch Series 11 next to the Fitbit Air; both are on colorful straps" src="https://cdn.mos.cms.futurecdn.net/kQiKSFbo9N8ktNQvJumyeN.jpg" mos="" align="middle" fullscreen="" width="4835" height="2720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When it comes to wrist-based trackers, the Fitbit Air and Apple Watch 11 couldn't be more different. The former has no screens, buttons, or notifications, and lasts up to a week. </p><p>The Series 11, meanwhile, is a super-connected device, boasting a large, bright touchscreen, multiple physical buttons, and compatibility with a dizzying array of apps. That said, the Series 11 comes up short on battery life; 24 hours per charge is the norm.</p><p>Another major difference: the Fitbit Air has no onboard GPS for location tracking or altimeter for elevation data, so you need to carry a smartphone along when logging an outdoor workout. The Apple Watch 11, on the other wrist, has both GPS and an altimeter.</p><p>With that out of the way, let's move on to the results!</p><h3 class="article-body__section" id="section-apple-watch-11-vs-fitbit-air-walk-test-results"><span>Apple Watch 11 vs Fitbit Air: Walk test results </span></h3><div ><table><caption>5,000-step walk comparison: Apple Watch 11 vs Fitbit Air</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Apple Watch 11</p></th><th  ><p>Fitbit Air</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>5,053 steps</p></td><td  ><p> 5,108 steps</p></td><td  ><p>steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>2.63 miles</p></td><td  ><p>2.72 miles</p></td><td  ><p>2.39 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>372 feet</p></td><td  ><p>205 feet</p></td><td  ><p>328 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace </p></td><td  ><p>18 mins 51 secs</p></td><td  ><p>18 mins 03 secs</p></td><td  ><p>17 mins 22 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>119 bpm</p></td><td  ><p>119 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p> 153 bpm</p></td><td  ><p>153 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Calories burned</p></td><td  ><p>312 calories </p></td><td  ><p>373 calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Battery usage</p></td><td  ><p>6%</p></td><td  ><p>1%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>Before we begin, it's worth noting that Strava appears to have had a "hiccup" while recording this walk test. How do I know? The app logged just 4,506 steps, which is a major red flag. Normally, Strava's step-count data is within 10-20 steps of my actual count. TLDR: Take Strava's distance, climb, and pace data with a grain of salt.</p><p>Anyhow, both the Apple Watch 11 and Fitbit Air performed admirably when it came to keeping an accurate tally of my steps — anything within ~150 steps of the control is considered excellent in my book —  but the Apple Watch was just a little closer!</p><p>Distance data between the Apple Watch and Fitbit Air is similar enough for my liking. The Fitbit noted slightly more ground covered but also a faster pace, which checks out.</p><p>The Fitbit Air's elevation metric is concerningly inaccurate (this walk was particularly hill-heavy), which doesn't make a whole lot of sense, given the device can piggyback off of the iPhone 16 Plus's climb data. This also isn't the first time I experienced less-than-precise elevation tracking insights from the Fitbit Air; it was also way lower than expected versus the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-500-steps-with-the-fitbit-air-vs-apple-watch-se-3-and-im-surprised-by-the-winner">Apple Watch SE 3</a>.</p><p>Fortunately, the Fitbit Air finishes strong: Heart rate data is a perfect match with the Apple Watch Series 11, a result I love to see. Meanwhile, the Air logged slightly more calories burned, but used way less battery during my ~42-minute stroll. </p><h3 class="article-body__section" id="section-apple-watch-11-vs-fitbit-air-winner"><span>Apple Watch 11 vs Fitbit Air: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5477px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WcgA326oXsje3z5eX8zdrM" name="FitbitAir-v-AW11-02" alt="Close-up of the Apple Watch Series 11 next to the Fitbit Air; both are on colorful straps" src="https://cdn.mos.cms.futurecdn.net/WcgA326oXsje3z5eX8zdrM.jpg" mos="" align="middle" fullscreen="" width="5477" height="3081" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Ultimately, the Apple Watch Series 11 wins this showdown of fitness tracking accuracy against the Fitbit Air, with a more precise total step count and climb data. </p><p>Which fitness trackers or smartwatches should I pit head-to-head next? Let me know in the comments below. Also, which do you prefer, the Apple Watch 11 or the Fitbit Air? Share your opinion in the poll below.  </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e47DBX"></div>                            </div>                            <script src="https://kwizly.com/embed/e47DBX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-whoop-or-fitbit-air-5-questions-to-ask-yourself-before-buying-a-screen-free-fitness-tracker">Oura vs Whoop vs Fitbit Air — 5 questions to ask yourself before buying a screen-free fitness tracker</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-11-vs-fitbit-air-and-theres-a-clear-winner</link>
                                                                            <description>
                            <![CDATA[ Which popular wearable is the more competent fitness tracker, the Apple Watch 11 or the Fitbit Air? I decided to find out by tracking the same workout with both. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UUAxKKpkGzg6ubeodyLVWJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4gLpwabHDL6mCHnbXWz6uM-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 08 Jul 2026 11:30:00 +0000</pubDate>                                                                                                                                <updated>Wed, 08 Jul 2026 19:52:52 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/4gLpwabHDL6mCHnbXWz6uM-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Apple Watch Series 11 next to the Fitbit Air; both are on colorful straps]]></media:description>                                                            <media:text><![CDATA[Close-up of the Apple Watch Series 11 next to the Fitbit Air; both are on colorful straps]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Apple Watch Series 11 next to the Fitbit Air; both are on colorful straps]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4gLpwabHDL6mCHnbXWz6uM-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple Watch Series 11 or Fitbit Air, which popular wearable is the more competent/reliable fitness tracker? I decided to find out by performing one of my renowned head-to-head walk tests.</p><p>For this showdown, I wore the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch 11</a> on my left wrist and the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> on my right wrist for a 5,000-step walk around beautiful Seattle, Washington. How do I know it was 5,000 steps? I counted every darn one, with some assistance from my trusty tally counter (one click= 100 steps).  </p><p>Now, if I were a betting man (I'm not), my money would be on the Series 11 to come out victorious. Not only is it one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> in 2026, but it's also four times the cost of the Fitbit Air: $399 vs $99.</p><p>Then again, the Fitbit Air may be affordable, but it's also one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best fitness trackers </a>in 2026. Not only that, when I pitted in a separate walk test versus the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3</a>, the Air surprisingly came out victorious. Will this be a repeat win? Read on!</p><div class="product"><a data-dimension112="5cba36ea-7a41-11f1-b31b-af2e03721331" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a diminutive, comfortable fitness tracker with no screen or buttons. Just $99, it boasts nearly a week of battery and lots of health, sleep, and workout insights. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="5cba36ea-7a41-11f1-b31b-af2e03721331" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="5cba3776-7a41-11f1-a017-358c1246c879" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$329" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3574px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jng7bX5CBKGUQwXAqm8PR8" name="AW 11" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jng7bX5CBKGUQwXAqm8PR8.jpg" mos="" align="middle" fullscreen="" width="3574" height="3574" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Watch Series 11 is one of the most high-tech smartwatches money can buy, with plenty of apps and features to keep you connected, healthy, safe, and fit. It also boasts a big, bright touchscreen and up to 24 hours of battery per charge. <a class="view-deal button" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5?th=1" target="_blank" rel="nofollow" data-dimension112="5cba3776-7a41-11f1-a017-358c1246c879" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$329">View Deal</a></p></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-apple-watch-11-vs-fitbit-air-tech-compared"><span>Apple Watch 11 vs Fitbit Air: tech compared</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4835px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="kQiKSFbo9N8ktNQvJumyeN" name="FitbitAir-v-AW11-03" alt="Close-up of the Apple Watch Series 11 next to the Fitbit Air; both are on colorful straps" src="https://cdn.mos.cms.futurecdn.net/kQiKSFbo9N8ktNQvJumyeN.jpg" mos="" align="middle" fullscreen="" width="4835" height="2720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When it comes to wrist-based trackers, the Fitbit Air and Apple Watch 11 couldn't be more different. The former has no screens, buttons, or notifications, and lasts up to a week. </p><p>The Series 11, meanwhile, is a super-connected device, boasting a large, bright touchscreen, multiple physical buttons, and compatibility with a dizzying array of apps. That said, the Series 11 comes up short on battery life; 24 hours per charge is the norm.</p><p>Another major difference: the Fitbit Air has no onboard GPS for location tracking or altimeter for elevation data, so you need to carry a smartphone along when logging an outdoor workout. The Apple Watch 11, on the other wrist, has both GPS and an altimeter.</p><p>With that out of the way, let's move on to the results!</p><h3 class="article-body__section" id="section-apple-watch-11-vs-fitbit-air-walk-test-results"><span>Apple Watch 11 vs Fitbit Air: Walk test results </span></h3><div ><table><caption>5,000-step walk comparison: Apple Watch 11 vs Fitbit Air</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Apple Watch 11</p></th><th  ><p>Fitbit Air</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>5,053 steps</p></td><td  ><p> 5,108 steps</p></td><td  ><p>steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>2.63 miles</p></td><td  ><p>2.72 miles</p></td><td  ><p>2.39 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>372 feet</p></td><td  ><p>205 feet</p></td><td  ><p>328 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace </p></td><td  ><p>18 mins 51 secs</p></td><td  ><p>18 mins 03 secs</p></td><td  ><p>17 mins 22 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>119 bpm</p></td><td  ><p>119 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p> 153 bpm</p></td><td  ><p>153 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Calories burned</p></td><td  ><p>312 calories </p></td><td  ><p>373 calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Battery usage</p></td><td  ><p>6%</p></td><td  ><p>1%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>Before we begin, it's worth noting that Strava appears to have had a "hiccup" while recording this walk test. How do I know? The app logged just 4,506 steps, which is a major red flag. Normally, Strava's step-count data is within 10-20 steps of my actual count. TLDR: Take Strava's distance, climb, and pace data with a grain of salt.</p><p>Anyhow, both the Apple Watch 11 and Fitbit Air performed admirably when it came to keeping an accurate tally of my steps — anything within ~150 steps of the control is considered excellent in my book —  but the Apple Watch was just a little closer!</p><p>Distance data between the Apple Watch and Fitbit Air is similar enough for my liking. The Fitbit noted slightly more ground covered but also a faster pace, which checks out.</p><p>The Fitbit Air's elevation metric is concerningly inaccurate (this walk was particularly hill-heavy), which doesn't make a whole lot of sense, given the device can piggyback off of the iPhone 16 Plus's climb data. This also isn't the first time I experienced less-than-precise elevation tracking insights from the Fitbit Air; it was also way lower than expected versus the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-500-steps-with-the-fitbit-air-vs-apple-watch-se-3-and-im-surprised-by-the-winner">Apple Watch SE 3</a>.</p><p>Fortunately, the Fitbit Air finishes strong: Heart rate data is a perfect match with the Apple Watch Series 11, a result I love to see. Meanwhile, the Air logged slightly more calories burned, but used way less battery during my ~42-minute stroll. </p><h3 class="article-body__section" id="section-apple-watch-11-vs-fitbit-air-winner"><span>Apple Watch 11 vs Fitbit Air: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5477px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WcgA326oXsje3z5eX8zdrM" name="FitbitAir-v-AW11-02" alt="Close-up of the Apple Watch Series 11 next to the Fitbit Air; both are on colorful straps" src="https://cdn.mos.cms.futurecdn.net/WcgA326oXsje3z5eX8zdrM.jpg" mos="" align="middle" fullscreen="" width="5477" height="3081" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Ultimately, the Apple Watch Series 11 wins this showdown of fitness tracking accuracy against the Fitbit Air, with a more precise total step count and climb data. </p><p>Which fitness trackers or smartwatches should I pit head-to-head next? Let me know in the comments below. Also, which do you prefer, the Apple Watch 11 or the Fitbit Air? Share your opinion in the poll below.  </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e47DBX"></div>                            </div>                            <script src="https://kwizly.com/embed/e47DBX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-whoop-or-fitbit-air-5-questions-to-ask-yourself-before-buying-a-screen-free-fitness-tracker">Oura vs Whoop vs Fitbit Air — 5 questions to ask yourself before buying a screen-free fitness tracker</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Oura vs Whoop vs Fitbit Air — 5 questions to ask yourself before buying a screen-free fitness tracker ]]></title>
                                                                                                <dc:content><![CDATA[ <p>From the Oura Ring 5 to the Fitbit Air to the Whoop 5.0, screen-less health and fitness trackers are more popular than ever. But is a display-free wearable better than, say, the <a href="https://www.tomsguide.com/us/best-gps-watches,review-2638.html">best smartwatch</a> on the market today?</p><p>That depends on your expectations for the device, namely, whether you want a piece of tech that monitors your health passively or something you interact with more actively. </p><p>As TG’s resident wearables expert — and someone who just reviewed the new <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> — below are the five biggest things to consider before committing to the no-screen lifestyle. </p><h3 class="article-body__section" id="section-1-is-distraction-free-the-way-to-be"><span>1. Is distraction-free the way to be?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4654px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3ZgyaboUC5K2rnhcC6Kifi" name="Inspire3-v-Air-02" alt="Close-up of the Fitbit Inspire 3 next to the Fitbit Air on a user's wrist" src="https://cdn.mos.cms.futurecdn.net/3ZgyaboUC5K2rnhcC6Kifi.jpg" mos="" align="middle" fullscreen="" width="4654" height="2618" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Whether you're considering one of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/best-smart-rings">best smart rings</a>, like the <a href="https://www.tomsguide.com/wellness/smart-rings/oura-ring-5-hands-on-review-ive-worn-the-worlds-smallest-smart-ring-for-a-week-and-it-changes-fitness-tracking-forever">Oura Ring 5</a> or the more wallet-friendly <a href="https://www.tomsguide.com/wellness/smart-rings/ringconn-gen-2-air-review-this-budget-smart-ring-beats-the-oura-ring-4-in-three-big-ways">Ringconn Gen 2 Air</a>, or a screen-less fitness band, like the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> or Fitbit Air, all of these wearables promise distraction-free health and fitness tracking insights.</p><p>Of course, if you want mirrored smartphone notifications, there is no shortage of wrist-based wearables that fill the role, including the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">$99 Fitbit Inspire 3</a> and <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-reviewed-this-usd49-fitness-tracker-almost-a-year-ago-and-im-still-wearing-it-today-heres-why">$50 Amazfit Band 7</a>. In fact, when comparing the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs. the Fitbit Inspire 3</a>, both devices offer broadly the same set of data; the Inspire 3 is just a little more "connected."</p><p>The point is, when it comes to screen-free fitness trackers in 2026, giving up the display also means giving up the ability to receive on-wrist/finger smartphone alerts. If that sounds delightful, read on.</p><h3 class="article-body__section" id="section-2-am-i-ready-to-bond-with-a-companion-app"><span>2. Am I ready to bond with a companion app?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GcmoiqjEbMzcEdFygVHbAY" name="Oura sleep tracking prompts" alt="A woman's hand with pink nails wearing a silver Oura Ring on index finger surrounded by screenshots from Oura app of sleep tracking prompts" src="https://cdn.mos.cms.futurecdn.net/GcmoiqjEbMzcEdFygVHbAY.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Most of the best screen-free wellness trackers, including the Oura Ring 5 and Fitbit Air, lack buttons, which means the companion app is your new best friend, whether you're checking how much battery you have left or trying to start tracking a workout. </p><p>As such, it's a good idea to get a sense of whether or not you vibe with, say, the Google Health app (<a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">formerly the Fitbit app</a>) if you're considering the Fitbit Air. It's also worth mentioning that both Oura and Whoop charge monthly fees for their respective apps. </p><p>That said, there are plenty of subscription-free smart rings and trackers available (some with screens, some without). The tradeoff is that Oura and Whoop's holistic insights are the most in-depth across the board, especially for hardcore athletes. The Fitbit Air, on the other wrist, is subscription-optional and more geared toward casual health-conscious users.</p><h3 class="article-body__section" id="section-3-smart-features-what-smart-features"><span>3. Smart features? What smart features? </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3346px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DrGLk5J27hSMuPjPQNnEkM" name="IMG_3567" alt="a photo of the Whoop MG on the wrist" src="https://cdn.mos.cms.futurecdn.net/DrGLk5J27hSMuPjPQNnEkM.jpg" mos="" align="middle" fullscreen="" width="3346" height="1882" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>With no display, buttons, or notifications, it probably doesn't come as much of a surprise that the best screen-free fitness trackers also lack support for smart features. Still, I would love to see NFC added to a smart ring, if for no other reason, because paying for something with a tap of the finger sounds positively futuristic. </p><h3 class="article-body__section" id="section-4-no-gps-no-problem"><span>4. No GPS, no problem?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2725px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="3NGtETDM2oCM52k7CxYYoe" name="RingConn2Air-14" alt="Close-up of the Ringconn Gen 2 Air smart ring on a user's index finger" src="https://cdn.mos.cms.futurecdn.net/3NGtETDM2oCM52k7CxYYoe.jpg" mos="" align="middle" fullscreen="" width="2725" height="1533" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>For my outdoor workout peeps, one of the biggest considerations to make before investing in a screen-free wearable is whether or not you can get by without onboard GPS. </p><p>While many of the best smartwatches and some of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best fitness trackers</a> have built-in GPS antennas, no smart rings or screen-free trackers do. This means, for accurate location-based data when working out, you'll need to bring your paired smartphone along for insights into your distance, speed, pace, climb, and more after a run, walk, bike ride, etc.</p><h3 class="article-body__section" id="section-5-am-i-big-on-battery-life"><span>5. Am I big on battery life?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3986px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9ZrfpRB5krdJGJhqZGcMMg" name="IMG_8507" alt="a photo of the Whoop MG and Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/9ZrfpRB5krdJGJhqZGcMMg.jpg" mos="" align="middle" fullscreen="" width="3986" height="2242" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>It still kind of blows my mind that one of the most popular smartwatches in 2026 only lasts for roughly 24 hours per charge. I'm speaking, of course, of the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch Series 11</a>.</p><p>Fortunately, screen-free wearables, by and large, beat their display-graced siblings when it comes to longevity. In fact, from smart rings to fitness bands, most will last up to a week, sometimes more, per charge. </p><p>What do you think of screen-free wearables? Do you already own one? Are you considering one? Let me know in the poll or comments below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XkwQ3X"></div>                            </div>                            <script src="https://kwizly.com/embed/XkwQ3X.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/exclusive-google-design-director-says-fitbit-air-reception-proves-they-made-the-right-decision-going-screen-free">Exclusive: Google design director says Fitbit Air reception proves they 'made the right decision' going screen-free</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/leaked-apple-watch-12-design-change-is-the-opposite-of-an-upgrade-and-that-has-me-worried">Leaked Apple Watch 12 design change is the opposite of an upgrade — and that has me worried</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/take-off-that-apple-watch-5-reasons-why-its-okay-to-swap-your-smartwatch-for-a-dumb-watch">5 reasons why I sometimes still wear a 'dumb' watch</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/oura-whoop-or-fitbit-air-5-questions-to-ask-yourself-before-buying-a-screen-free-fitness-tracker</link>
                                                                            <description>
                            <![CDATA[ From the Oura Ring 5 to the Fitbit Air to the Whoop 5.0, screen-less health and fitness trackers are more popular than ever. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">8AGUdKRTVHgAwtdJvVRtk6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/m58aY2hFFy6FdCrzDEoo69-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 07 Jul 2026 11:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 09 Jul 2026 23:41:40 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/m58aY2hFFy6FdCrzDEoo69-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a photo of Oura Ring 5, Fitbit Air, Whoop MG]]></media:description>                                                            <media:text><![CDATA[a photo of Oura Ring 5, Fitbit Air, Whoop MG]]></media:text>
                                <media:title type="plain"><![CDATA[a photo of Oura Ring 5, Fitbit Air, Whoop MG]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/m58aY2hFFy6FdCrzDEoo69-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>From the Oura Ring 5 to the Fitbit Air to the Whoop 5.0, screen-less health and fitness trackers are more popular than ever. But is a display-free wearable better than, say, the <a href="https://www.tomsguide.com/us/best-gps-watches,review-2638.html">best smartwatch</a> on the market today?</p><p>That depends on your expectations for the device, namely, whether you want a piece of tech that monitors your health passively or something you interact with more actively. </p><p>As TG’s resident wearables expert — and someone who just reviewed the new <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> — below are the five biggest things to consider before committing to the no-screen lifestyle. </p><h3 class="article-body__section" id="section-1-is-distraction-free-the-way-to-be"><span>1. Is distraction-free the way to be?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4654px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3ZgyaboUC5K2rnhcC6Kifi" name="Inspire3-v-Air-02" alt="Close-up of the Fitbit Inspire 3 next to the Fitbit Air on a user's wrist" src="https://cdn.mos.cms.futurecdn.net/3ZgyaboUC5K2rnhcC6Kifi.jpg" mos="" align="middle" fullscreen="" width="4654" height="2618" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Whether you're considering one of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/best-smart-rings">best smart rings</a>, like the <a href="https://www.tomsguide.com/wellness/smart-rings/oura-ring-5-hands-on-review-ive-worn-the-worlds-smallest-smart-ring-for-a-week-and-it-changes-fitness-tracking-forever">Oura Ring 5</a> or the more wallet-friendly <a href="https://www.tomsguide.com/wellness/smart-rings/ringconn-gen-2-air-review-this-budget-smart-ring-beats-the-oura-ring-4-in-three-big-ways">Ringconn Gen 2 Air</a>, or a screen-less fitness band, like the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> or Fitbit Air, all of these wearables promise distraction-free health and fitness tracking insights.</p><p>Of course, if you want mirrored smartphone notifications, there is no shortage of wrist-based wearables that fill the role, including the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">$99 Fitbit Inspire 3</a> and <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-reviewed-this-usd49-fitness-tracker-almost-a-year-ago-and-im-still-wearing-it-today-heres-why">$50 Amazfit Band 7</a>. In fact, when comparing the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs. the Fitbit Inspire 3</a>, both devices offer broadly the same set of data; the Inspire 3 is just a little more "connected."</p><p>The point is, when it comes to screen-free fitness trackers in 2026, giving up the display also means giving up the ability to receive on-wrist/finger smartphone alerts. If that sounds delightful, read on.</p><h3 class="article-body__section" id="section-2-am-i-ready-to-bond-with-a-companion-app"><span>2. Am I ready to bond with a companion app?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GcmoiqjEbMzcEdFygVHbAY" name="Oura sleep tracking prompts" alt="A woman's hand with pink nails wearing a silver Oura Ring on index finger surrounded by screenshots from Oura app of sleep tracking prompts" src="https://cdn.mos.cms.futurecdn.net/GcmoiqjEbMzcEdFygVHbAY.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Most of the best screen-free wellness trackers, including the Oura Ring 5 and Fitbit Air, lack buttons, which means the companion app is your new best friend, whether you're checking how much battery you have left or trying to start tracking a workout. </p><p>As such, it's a good idea to get a sense of whether or not you vibe with, say, the Google Health app (<a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">formerly the Fitbit app</a>) if you're considering the Fitbit Air. It's also worth mentioning that both Oura and Whoop charge monthly fees for their respective apps. </p><p>That said, there are plenty of subscription-free smart rings and trackers available (some with screens, some without). The tradeoff is that Oura and Whoop's holistic insights are the most in-depth across the board, especially for hardcore athletes. The Fitbit Air, on the other wrist, is subscription-optional and more geared toward casual health-conscious users.</p><h3 class="article-body__section" id="section-3-smart-features-what-smart-features"><span>3. Smart features? What smart features? </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3346px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DrGLk5J27hSMuPjPQNnEkM" name="IMG_3567" alt="a photo of the Whoop MG on the wrist" src="https://cdn.mos.cms.futurecdn.net/DrGLk5J27hSMuPjPQNnEkM.jpg" mos="" align="middle" fullscreen="" width="3346" height="1882" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>With no display, buttons, or notifications, it probably doesn't come as much of a surprise that the best screen-free fitness trackers also lack support for smart features. Still, I would love to see NFC added to a smart ring, if for no other reason, because paying for something with a tap of the finger sounds positively futuristic. </p><h3 class="article-body__section" id="section-4-no-gps-no-problem"><span>4. No GPS, no problem?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2725px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="3NGtETDM2oCM52k7CxYYoe" name="RingConn2Air-14" alt="Close-up of the Ringconn Gen 2 Air smart ring on a user's index finger" src="https://cdn.mos.cms.futurecdn.net/3NGtETDM2oCM52k7CxYYoe.jpg" mos="" align="middle" fullscreen="" width="2725" height="1533" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>For my outdoor workout peeps, one of the biggest considerations to make before investing in a screen-free wearable is whether or not you can get by without onboard GPS. </p><p>While many of the best smartwatches and some of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best fitness trackers</a> have built-in GPS antennas, no smart rings or screen-free trackers do. This means, for accurate location-based data when working out, you'll need to bring your paired smartphone along for insights into your distance, speed, pace, climb, and more after a run, walk, bike ride, etc.</p><h3 class="article-body__section" id="section-5-am-i-big-on-battery-life"><span>5. Am I big on battery life?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3986px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9ZrfpRB5krdJGJhqZGcMMg" name="IMG_8507" alt="a photo of the Whoop MG and Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/9ZrfpRB5krdJGJhqZGcMMg.jpg" mos="" align="middle" fullscreen="" width="3986" height="2242" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>It still kind of blows my mind that one of the most popular smartwatches in 2026 only lasts for roughly 24 hours per charge. I'm speaking, of course, of the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch Series 11</a>.</p><p>Fortunately, screen-free wearables, by and large, beat their display-graced siblings when it comes to longevity. In fact, from smart rings to fitness bands, most will last up to a week, sometimes more, per charge. </p><p>What do you think of screen-free wearables? Do you already own one? Are you considering one? Let me know in the poll or comments below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XkwQ3X"></div>                            </div>                            <script src="https://kwizly.com/embed/XkwQ3X.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/exclusive-google-design-director-says-fitbit-air-reception-proves-they-made-the-right-decision-going-screen-free">Exclusive: Google design director says Fitbit Air reception proves they 'made the right decision' going screen-free</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/leaked-apple-watch-12-design-change-is-the-opposite-of-an-upgrade-and-that-has-me-worried">Leaked Apple Watch 12 design change is the opposite of an upgrade — and that has me worried</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/take-off-that-apple-watch-5-reasons-why-its-okay-to-swap-your-smartwatch-for-a-dumb-watch">5 reasons why I sometimes still wear a 'dumb' watch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’m a deep sleeper, and I wish I’d found this hidden Fitbit Air setting weeks ago ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I’m not sure whether it’s the fact I’m training for a marathon (again), or that I have a toddler who wakes me up at least once a night, but when I do sleep, I go into a coma. </p><p>I’ve been seriously impressed with the new $99 <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> — in fact, I’d go as far as to say it’s one of the best wearables to launch so far this year, but I’ve had one issue with it: the haptic alarm just isn’t strong enough to wake me from said sleep coma in the mornings. </p><p>I know what you’re thinking — surely my two-year-old is my alarm clock, and you’d be right, but as any parent knows, if I want to drink a warm cup of coffee, do a quick Pilates workout, or just sit and stare at my phone in silence, the only way to do so is to wake up before he does. Luckily, I’ve found a hidden Fitbit Air hack that solves this problem — read on to find out more. </p><section class="howto-block">                    <h3>How to change vibration settings on Fitbit Air</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/zCBBhA82yv8MGUKAmpHWt5.jpg"                                        alt="Close-up of the sensors on the Fitbit Air"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/zCBBhA82yv8MGUKAmpHWt5.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Dan Bracaglia/Tom's Guide)</div></figure>                    <p><p>I’m not sure why Fitbit made this simple tweak so difficult to find, but you can, in fact, change the level of vibration on your Fitbit Air. By default, the haptic alerts on the alarm feature are set to low, so if, like me, you’re not finding them powerful enough to wake you up in the morning, here’s how to fix it.</p><p>Head to the <strong>Google Health app</strong>, and tap on <strong>Devices</strong> in the top left-hand corner. Select your <strong>Fitbit Air. </strong>Tap <strong>Device Preferences. </strong>The top option is <strong>Vibration Settings. </strong>By default, you’ll see that Vibration is set to low, so if you’re finding this hasn’t been strong enough to wake you up, you can switch this to <strong>High</strong>. </p></p>                </section><p>I found that by making this simple tweak, I was <em>definitely </em>able to feel the alarm going off on my wrist in the morning. It was still silent enough that it didn’t wake my toddler if he had crept into my bed at 2 am, and I was able to have 20 minutes of peace before my day began. </p><p>If I didn’t have a human alarm clock, I’d love the custom alarm schedule on the Fitbit Air, which allows you to set different alarms for different days of the week. The Smart Wake feature also looks great for those who don’t want such an abrupt start to their day — the Fitbit Air will gently wake you up in a timeframe that’s best for your REM sleep, helping you wake up feeling more refreshed. A girl can only dream. </p><p>Did you know about this hidden vibration setting? Follow Tom’s Guide for more Fitbit Air tips and tricks. </p><p><em><strong>Follow </strong></em><a href="https://www.instagram.com/tomsguidefitness/" target="_blank"><em><strong>Tom's Guide fitness</strong></em></a><em><strong> on Instagram for more workouts, routines, tips, and tricks.</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/take-off-that-apple-watch-5-reasons-why-its-okay-to-swap-your-smartwatch-for-a-dumb-watch">I review smartwatches for a living, but these are 5 reasons why I sometimes still wear a 'dumb' watch</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-everything-we-know-so-far">Apple Watch Series 12 rumors — everything we know so far</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-rumored-screen-less-wearable-just-might-be-the-subscription-free-whoop-rival-ive-been-waiting-for">Garmin’s rumored screen-less wearable just might be the subscription-free Whoop rival I’ve been waiting for</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/im-a-deep-sleeper-and-i-wish-id-found-this-hidden-fitbit-air-setting-weeks-ago</link>
                                                                            <description>
                            <![CDATA[ Making this simple tweak can change how well your Fitbit Air wakes you up, if you're a deep sleeper, that is. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">GjGDzgRRxys5FNyrUBigcc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Mimn2jQmsFeajNnNQ8NWGU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 05 Jul 2026 07:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ jane.mcguire@futurenet.com (Jane McGuire) ]]></author>                    <dc:creator><![CDATA[ Jane McGuire ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/vV4Uj3e5TZvBqmmsjT2EU6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jane McGuire is Tom&#039;s Guide&#039;s Fitness Managing Editor, which means she looks after everything fitness-related — from running gear and fitness trackers to yoga mats and sports bras. An avid runner, Jane has tested and reviewed fitness products for the past five years, so she knows what to look for when finding a good running watch or a pair of shorts with pockets big enough for your smartphone, running gels, and house keys. &lt;/p&gt;&lt;p&gt;Jane has run six marathons — the London Marathon five times, and the Berlin Marathon once -and is still on a quest to tick off all of the marathon majors. Her marathon PR is 3:30, which she ran in the New Balance Supercomp Elite V5&#039;s, but she also spends a lot of time talking about her  ‘joy plan’, where she runs for happiness, not for PR’s. &lt;/p&gt;&lt;p&gt;Previous to Tom’s Guide, Jane worked for Runner’s World, where she co-hosted the Runner’s World podcast. She also presents on a YouTube channel called the Run Testers, alongside other running-mad journalists, where they review the latest shoes, kit, and tech. Her work has also appeared in Coach, Get Sweat Go, and Women’s Health. &lt;/p&gt;&lt;p&gt;When she&#039;s not pounding the pavements, you&#039;ll find Jane striding round the Surrey Hills, taking far too many photos of her spaniel, Toby. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Mimn2jQmsFeajNnNQ8NWGU-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a photo of the Fitbit Air on the wrist ]]></media:description>                                                            <media:text><![CDATA[a photo of the Fitbit Air on the wrist ]]></media:text>
                                <media:title type="plain"><![CDATA[a photo of the Fitbit Air on the wrist ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Mimn2jQmsFeajNnNQ8NWGU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’m not sure whether it’s the fact I’m training for a marathon (again), or that I have a toddler who wakes me up at least once a night, but when I do sleep, I go into a coma. </p><p>I’ve been seriously impressed with the new $99 <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> — in fact, I’d go as far as to say it’s one of the best wearables to launch so far this year, but I’ve had one issue with it: the haptic alarm just isn’t strong enough to wake me from said sleep coma in the mornings. </p><p>I know what you’re thinking — surely my two-year-old is my alarm clock, and you’d be right, but as any parent knows, if I want to drink a warm cup of coffee, do a quick Pilates workout, or just sit and stare at my phone in silence, the only way to do so is to wake up before he does. Luckily, I’ve found a hidden Fitbit Air hack that solves this problem — read on to find out more. </p><section class="howto-block">                    <h3>How to change vibration settings on Fitbit Air</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/zCBBhA82yv8MGUKAmpHWt5.jpg"                                        alt="Close-up of the sensors on the Fitbit Air"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/zCBBhA82yv8MGUKAmpHWt5.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Dan Bracaglia/Tom's Guide)</div></figure>                    <p><p>I’m not sure why Fitbit made this simple tweak so difficult to find, but you can, in fact, change the level of vibration on your Fitbit Air. By default, the haptic alerts on the alarm feature are set to low, so if, like me, you’re not finding them powerful enough to wake you up in the morning, here’s how to fix it.</p><p>Head to the <strong>Google Health app</strong>, and tap on <strong>Devices</strong> in the top left-hand corner. Select your <strong>Fitbit Air. </strong>Tap <strong>Device Preferences. </strong>The top option is <strong>Vibration Settings. </strong>By default, you’ll see that Vibration is set to low, so if you’re finding this hasn’t been strong enough to wake you up, you can switch this to <strong>High</strong>. </p></p>                </section><p>I found that by making this simple tweak, I was <em>definitely </em>able to feel the alarm going off on my wrist in the morning. It was still silent enough that it didn’t wake my toddler if he had crept into my bed at 2 am, and I was able to have 20 minutes of peace before my day began. </p><p>If I didn’t have a human alarm clock, I’d love the custom alarm schedule on the Fitbit Air, which allows you to set different alarms for different days of the week. The Smart Wake feature also looks great for those who don’t want such an abrupt start to their day — the Fitbit Air will gently wake you up in a timeframe that’s best for your REM sleep, helping you wake up feeling more refreshed. A girl can only dream. </p><p>Did you know about this hidden vibration setting? Follow Tom’s Guide for more Fitbit Air tips and tricks. </p><p><em><strong>Follow </strong></em><a href="https://www.instagram.com/tomsguidefitness/" target="_blank"><em><strong>Tom's Guide fitness</strong></em></a><em><strong> on Instagram for more workouts, routines, tips, and tricks.</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/take-off-that-apple-watch-5-reasons-why-its-okay-to-swap-your-smartwatch-for-a-dumb-watch">I review smartwatches for a living, but these are 5 reasons why I sometimes still wear a 'dumb' watch</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-everything-we-know-so-far">Apple Watch Series 12 rumors — everything we know so far</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-rumored-screen-less-wearable-just-might-be-the-subscription-free-whoop-rival-ive-been-waiting-for">Garmin’s rumored screen-less wearable just might be the subscription-free Whoop rival I’ve been waiting for</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tracked my sleep on Fitbit Air vs Whoop for a week — does spending more buy you better sleep data? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Ever since the <a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-a-user-friendly-fitness-tracker-thats-just-usd99-at-best-buy">Fitbit Air launched</a> in May 2026, the conversation has almost always been about its price point. Reviews have been calling it a "$100 Whoop killer," and even we named it the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">best Whoop alternative <em>for the rest of us</em></a>. But one thing everyone seems to be missing is whether the tracking is actually any good. </p><p>Sure, it costs less, but does the Fitbit and Google name automatically mean it's great at tracking your health? Does it even give insights that are, first of all, accurate and then actually useful? </p><p>I've been tracking my sleep with both the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-fitbit-air-vs-whoop-side-by-side-heres-the-screenless-fitness-tracker-id-buy">Fitbit Air and the Whoop MG</a> for a week, and the Fitbit Air actually held up much better than I expected. It's not perfect, though, and there are a few things you should know before buying one.</p><div data-widget-type="productname" data-model-name="Google Fitbit Air" class="hawk-root"></div><h2 id="here-s-how-i-tested-both-trackers-side-by-side">Here's how I tested both trackers side by side</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SGCZVmHfd2ygyWi2Jy45xL" name="fitbit-air-3" alt="Google Fitbit Air in the hands of the author" src="https://cdn.mos.cms.futurecdn.net/SGCZVmHfd2ygyWi2Jy45xL.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>Before we get into the numbers, there's one thing worth knowing upfront: I've been using the Whoop MG for over a year now. It's been my primary <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">fitness and health tracking device</a> for that entire time, which means it has a lot more context about my body compared to the Fitbit Air. </p><p>I got the Fitbit Air around June 16 and started properly testing it from the night of June 17. For this test, I wore the Fitbit Air on my left, non-dominant wrist, while my Whoop MG has been on a bicep band on the same arm for the past three months. I tracked a full week across both devices from June 17 to June 25, with two nights being an exception where I actually slept without any of the bands because I fell sick. </p><p>Before we dive into the numbers, though, it's worth knowing that since the Fitbit Air was brand new out of the box, it was still building its baseline during the first couple of nights. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Cp6RfTemyGYHBGMZgpFN5M" name="awhoop-mg-fitbit-air-1" alt="Google Fitbit Air in the hands of the author" src="https://cdn.mos.cms.futurecdn.net/Cp6RfTemyGYHBGMZgpFN5M.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>It's also worth noting that wearing the Whoop MG on the bicep rather than the wrist does influence readings. Both are valid measurement points, but it's commonly believed that less movement leads to more accurate results. </p><p>The wrist moves around a lot, while the bicep stays relatively still, so the Whoop data could be slightly more accurate because of that, though I can't say for certain. Either way, the Fitbit Air doesn't offer a bicep band yet, so if a bicep option is something you need, the Whoop MG is currently the only choice.</p><h2 id="fitbit-needed-a-few-nights-before-the-data-made-sense">Fitbit needed a few nights before the data made sense</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9RQGTxBse9fSaGqQz5GiiL" name="fitbit-air-4" alt="Google Fitbit Air in the hands of the author" src="https://cdn.mos.cms.futurecdn.net/9RQGTxBse9fSaGqQz5GiiL.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>As expected, the Fitbit Air took a couple of days to calibrate to my body and sleep patterns. I wasn't expecting it to agree with the Whoop MG right from the first night, and that was pretty obvious in the data. On day one, there was almost a one-hour difference in total sleep. Fitbit Air logged just 5 hours and 15 minutes of sleep, while the Whoop MG recorded around 6 hours and 15 minutes. </p><p>Thankfully, things improved quickly after that. From the second night onward, the two trackers became much more consistent. On the final two nights of my testing (June 22 and June 25), both devices recorded roughly seven hours of sleep on one night and around seven and a half hours on the other, with only about a 15-minute difference. </p><p>I'd call that accurate enough for tracking total sleep duration. If all you care about is knowing how long you slept, the Fitbit Air becomes much more reliable after a few days of wear. </p><div ><table><caption>Fitbit Air vs Whoop MG </caption><thead><tr><th class="firstcol " ><p>Night</p></th><th  ><p>Whoop MG</p></th><th  ><p>Fitbit Air</p></th><th  ><p>Difference</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Jun 17<br>(Fitbit calibrating)</p></td><td  ><p>Duration: 6h 15m<br>Deep sleep: 1h 30m<br>REM: 1h 3m</p></td><td  ><p>Duration: 5h 15m<br>Deep sleep: 34 min<br>REM: 1h 14m</p></td><td  ><p>Duration: 60 min<br>Deep sleep: 56 min<br>REM: 11 min</p></td></tr><tr><td class="firstcol " ><p>Jun 18</p></td><td  ><p>Duration: 6h 39m<br>Deep sleep: 58 min<br>REM: 57 min</p></td><td  ><p>Duration: 6h 53m<br>Deep sleep: 44 min<br>REM: 41 min</p></td><td  ><p>Duration: 14 min<br>Deep sleep: 14 min<br>REM: 16 min</p></td></tr><tr><td class="firstcol " ><p>Jun 19</p></td><td  ><p>Duration: 6h 56m<br>Deep sleep: 1h 25m<br>REM: 1h 7m</p></td><td  ><p>Duration: 7h 33m<br>Deep sleep: 1h 10m<br>REM: 1h 17m</p></td><td  ><p>Duration: 37 min<br>Deep sleep: 15 min<br>REM: 10 min</p></td></tr><tr><td class="firstcol " ><p>Jun 22</p></td><td  ><p>Duration: 6h 32m<br>Deep sleep: 1h 14m<br>REM: 1h 10m</p></td><td  ><p>Duration: 6h 48m<br>Deep sleep: 54 min<br>REM: 1h 16m</p></td><td  ><p>Duration: 16 min<br>Deep sleep: 20 min<br>REM: 6 min</p></td></tr><tr><td class="firstcol " ><p>Jun 25</p></td><td  ><p>Duration: 7h 17m<br>Deep sleep: 45 min<br>REM: 1h 11m</p></td><td  ><p>Duration: 7h 34m<br>Deep sleep: 42 min<br>REM: 1h 58m</p></td><td  ><p>Duration: 17 min<br>Deep sleep: 3 min<br>REM: 47 min</p></td></tr></tbody></table></div><p>Sleep stages, though, are a completely different story. Even after a week, both devices continued to disagree quite a bit on deep sleep and REM sleep. You can see from the table above that there are some pretty noticeable differences between the two, despite both devices tracking the exact same nights. </p><p>Which one is actually right? Honestly, it's hard to tell after just a week of testing. A longer testing period might reveal whether the two begin converging over time, but that is something I'll give one or two months to test. </p><p>It's also worth noting that placement could be playing a role here. As I mentioned above, I wore the Whoop MG on my left bicep while the Fitbit Air stayed on my left wrist, and this might have led the trackers to produce slightly different readings. </p><p>One area where the Fitbit Air clearly felt better to me, however, was the representation of the data collected overnight.</p><h2 id="fitbit-s-app-actually-won-me-over">Fitbit's app actually won me over</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bUEQ7ZBJq48hf5cha6TdkW" name="google-fibit-air-screenshot" alt="Sleep tracking on the Google Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/bUEQ7ZBJq48hf5cha6TdkW.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I've said this before, and I'll say it again. While Whoop has become popular with casual users, it's still a product built primarily for athletes. That means the moment you open the app after waking up, you're greeted with a wall of numbers, graphs, and recovery metrics. </p><p>I can't believe I'm saying this, but I actually think Google has done a great job with the <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">Google Health app</a> that powers the Fitbit Air, even though plenty of Fitbit users might disagree with me.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aRinS32WEMo5G74gWPMBbJ" name="whoop-app-sleep-stats" alt="Sleep stats inside the Whoop app" src="https://cdn.mos.cms.futurecdn.net/aRinS32WEMo5G74gWPMBbJ.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>I don't want to wake up and immediately analyze a dashboard full of metrics. Instead, Fitbit Air gives me a quick summary of how I slept, and for most mornings, that's all I need to know whether I had a good night's sleep or not. I also like that I can tell the app when I don't agree with how I'm feeling, rather than blindly accepting the data. </p><p>One thing I also noticed during my testing was how much faster Fitbit Air processes sleep data. Most mornings, it gave me my sleep summary within five to seven minutes of waking up. </p><p>The Whoop app, on the other hand, often took much longer. There were days when I didn't get my sleep report for nearly 30 minutes, and sometimes I even had to manually end the sleep session before it would process the data. </p><h2 id="verdict">Verdict</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9YLsF7HXdWUUN3ENeQckxL" name="fitbit-air-2" alt="Google Fitbit Air in the hands of the author" src="https://cdn.mos.cms.futurecdn.net/9YLsF7HXdWUUN3ENeQckxL.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>Overall, I still think the Fitbit Air offers a better experience for the average user. Sure, the data differed from Whoop, but that's true of almost every consumer sleep tracker. None of these devices are clinical-grade after all.</p><p>After a week of wearing both trackers, I don't think sleep tracking alone is a good enough reason to spend significantly more on a Whoop. Once the Fitbit Air had a few nights to calibrate, its total sleep tracking was consistently close enough that I stopped paying attention to the differences.</p><p>What you're really paying the Whoop premium for isn't better sleep tracking. It has other features as well, like ECG, blood pressure insights, strain tracking, and a whole recovery ecosystem built for athletes. If those features matter to you, the subscription makes sense.</p><p>But if your main priority is simply understanding how well you slept each night, I honestly think the $100 Fitbit Air gets you most of the way there, with a friendlier app experience <em>and</em> for a fraction of the yearly cost.</p><div data-widget-type="productname" data-model-name="Whoop MG" class="hawk-root"></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/sleep-tech/apple-watch-vs-whoop-mg-sleep-tracker-comparison">I used the Apple Watch and Whoop to track my sleep for a year — there's a clear winner for me</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-500-steps-with-the-fitbit-air-vs-fitbit-inspire-3-and-theres-a-clear-winner">I walked 3,500 steps with the Fitbit Air vs Fitbit Inspire 3 — and there's a clear winner</a></li><li><a href="https://www.tomsguide.com/audio/airpods/forget-the-apple-watch-i-use-airpods-pro-3-for-live-heart-rate-tracking-while-running-and-theyre-usd70-off-right-now">Forget the Apple Watch: I use AirPods Pro 3 for Live Heart Rate Tracking while running</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-tracked-sleep-fitbit-air-vs-whoop-mg-one-week</link>
                                                                            <description>
                            <![CDATA[ I compared Fitbit Air and Whoop MG sleep tracking over seven nights to see how closely the two agreed. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nttfASf4kzrc36seBiJzY8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/WSbSWrhCAzEANUyvE5kg4M-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 04 Jul 2026 06:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                                    <dc:creator><![CDATA[ Sanuj Bhatia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/8p5BvMVA7cnu5AWkxnTjRC.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/WSbSWrhCAzEANUyvE5kg4M-1280-80.jpg">
                                                            <media:credit><![CDATA[Sanuj Bhatia / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Google Fitbit Air in the hands of the author]]></media:description>                                                            <media:text><![CDATA[Google Fitbit Air in the hands of the author]]></media:text>
                                <media:title type="plain"><![CDATA[Google Fitbit Air in the hands of the author]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/WSbSWrhCAzEANUyvE5kg4M-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Ever since the <a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-a-user-friendly-fitness-tracker-thats-just-usd99-at-best-buy">Fitbit Air launched</a> in May 2026, the conversation has almost always been about its price point. Reviews have been calling it a "$100 Whoop killer," and even we named it the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">best Whoop alternative <em>for the rest of us</em></a>. But one thing everyone seems to be missing is whether the tracking is actually any good. </p><p>Sure, it costs less, but does the Fitbit and Google name automatically mean it's great at tracking your health? Does it even give insights that are, first of all, accurate and then actually useful? </p><p>I've been tracking my sleep with both the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-fitbit-air-vs-whoop-side-by-side-heres-the-screenless-fitness-tracker-id-buy">Fitbit Air and the Whoop MG</a> for a week, and the Fitbit Air actually held up much better than I expected. It's not perfect, though, and there are a few things you should know before buying one.</p><div data-widget-type="productname" data-model-name="Google Fitbit Air" class="hawk-root"></div><h2 id="here-s-how-i-tested-both-trackers-side-by-side">Here's how I tested both trackers side by side</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SGCZVmHfd2ygyWi2Jy45xL" name="fitbit-air-3" alt="Google Fitbit Air in the hands of the author" src="https://cdn.mos.cms.futurecdn.net/SGCZVmHfd2ygyWi2Jy45xL.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>Before we get into the numbers, there's one thing worth knowing upfront: I've been using the Whoop MG for over a year now. It's been my primary <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">fitness and health tracking device</a> for that entire time, which means it has a lot more context about my body compared to the Fitbit Air. </p><p>I got the Fitbit Air around June 16 and started properly testing it from the night of June 17. For this test, I wore the Fitbit Air on my left, non-dominant wrist, while my Whoop MG has been on a bicep band on the same arm for the past three months. I tracked a full week across both devices from June 17 to June 25, with two nights being an exception where I actually slept without any of the bands because I fell sick. </p><p>Before we dive into the numbers, though, it's worth knowing that since the Fitbit Air was brand new out of the box, it was still building its baseline during the first couple of nights. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Cp6RfTemyGYHBGMZgpFN5M" name="awhoop-mg-fitbit-air-1" alt="Google Fitbit Air in the hands of the author" src="https://cdn.mos.cms.futurecdn.net/Cp6RfTemyGYHBGMZgpFN5M.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>It's also worth noting that wearing the Whoop MG on the bicep rather than the wrist does influence readings. Both are valid measurement points, but it's commonly believed that less movement leads to more accurate results. </p><p>The wrist moves around a lot, while the bicep stays relatively still, so the Whoop data could be slightly more accurate because of that, though I can't say for certain. Either way, the Fitbit Air doesn't offer a bicep band yet, so if a bicep option is something you need, the Whoop MG is currently the only choice.</p><h2 id="fitbit-needed-a-few-nights-before-the-data-made-sense">Fitbit needed a few nights before the data made sense</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9RQGTxBse9fSaGqQz5GiiL" name="fitbit-air-4" alt="Google Fitbit Air in the hands of the author" src="https://cdn.mos.cms.futurecdn.net/9RQGTxBse9fSaGqQz5GiiL.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>As expected, the Fitbit Air took a couple of days to calibrate to my body and sleep patterns. I wasn't expecting it to agree with the Whoop MG right from the first night, and that was pretty obvious in the data. On day one, there was almost a one-hour difference in total sleep. Fitbit Air logged just 5 hours and 15 minutes of sleep, while the Whoop MG recorded around 6 hours and 15 minutes. </p><p>Thankfully, things improved quickly after that. From the second night onward, the two trackers became much more consistent. On the final two nights of my testing (June 22 and June 25), both devices recorded roughly seven hours of sleep on one night and around seven and a half hours on the other, with only about a 15-minute difference. </p><p>I'd call that accurate enough for tracking total sleep duration. If all you care about is knowing how long you slept, the Fitbit Air becomes much more reliable after a few days of wear. </p><div ><table><caption>Fitbit Air vs Whoop MG </caption><thead><tr><th class="firstcol " ><p>Night</p></th><th  ><p>Whoop MG</p></th><th  ><p>Fitbit Air</p></th><th  ><p>Difference</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Jun 17<br>(Fitbit calibrating)</p></td><td  ><p>Duration: 6h 15m<br>Deep sleep: 1h 30m<br>REM: 1h 3m</p></td><td  ><p>Duration: 5h 15m<br>Deep sleep: 34 min<br>REM: 1h 14m</p></td><td  ><p>Duration: 60 min<br>Deep sleep: 56 min<br>REM: 11 min</p></td></tr><tr><td class="firstcol " ><p>Jun 18</p></td><td  ><p>Duration: 6h 39m<br>Deep sleep: 58 min<br>REM: 57 min</p></td><td  ><p>Duration: 6h 53m<br>Deep sleep: 44 min<br>REM: 41 min</p></td><td  ><p>Duration: 14 min<br>Deep sleep: 14 min<br>REM: 16 min</p></td></tr><tr><td class="firstcol " ><p>Jun 19</p></td><td  ><p>Duration: 6h 56m<br>Deep sleep: 1h 25m<br>REM: 1h 7m</p></td><td  ><p>Duration: 7h 33m<br>Deep sleep: 1h 10m<br>REM: 1h 17m</p></td><td  ><p>Duration: 37 min<br>Deep sleep: 15 min<br>REM: 10 min</p></td></tr><tr><td class="firstcol " ><p>Jun 22</p></td><td  ><p>Duration: 6h 32m<br>Deep sleep: 1h 14m<br>REM: 1h 10m</p></td><td  ><p>Duration: 6h 48m<br>Deep sleep: 54 min<br>REM: 1h 16m</p></td><td  ><p>Duration: 16 min<br>Deep sleep: 20 min<br>REM: 6 min</p></td></tr><tr><td class="firstcol " ><p>Jun 25</p></td><td  ><p>Duration: 7h 17m<br>Deep sleep: 45 min<br>REM: 1h 11m</p></td><td  ><p>Duration: 7h 34m<br>Deep sleep: 42 min<br>REM: 1h 58m</p></td><td  ><p>Duration: 17 min<br>Deep sleep: 3 min<br>REM: 47 min</p></td></tr></tbody></table></div><p>Sleep stages, though, are a completely different story. Even after a week, both devices continued to disagree quite a bit on deep sleep and REM sleep. You can see from the table above that there are some pretty noticeable differences between the two, despite both devices tracking the exact same nights. </p><p>Which one is actually right? Honestly, it's hard to tell after just a week of testing. A longer testing period might reveal whether the two begin converging over time, but that is something I'll give one or two months to test. </p><p>It's also worth noting that placement could be playing a role here. As I mentioned above, I wore the Whoop MG on my left bicep while the Fitbit Air stayed on my left wrist, and this might have led the trackers to produce slightly different readings. </p><p>One area where the Fitbit Air clearly felt better to me, however, was the representation of the data collected overnight.</p><h2 id="fitbit-s-app-actually-won-me-over">Fitbit's app actually won me over</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bUEQ7ZBJq48hf5cha6TdkW" name="google-fibit-air-screenshot" alt="Sleep tracking on the Google Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/bUEQ7ZBJq48hf5cha6TdkW.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I've said this before, and I'll say it again. While Whoop has become popular with casual users, it's still a product built primarily for athletes. That means the moment you open the app after waking up, you're greeted with a wall of numbers, graphs, and recovery metrics. </p><p>I can't believe I'm saying this, but I actually think Google has done a great job with the <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">Google Health app</a> that powers the Fitbit Air, even though plenty of Fitbit users might disagree with me.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aRinS32WEMo5G74gWPMBbJ" name="whoop-app-sleep-stats" alt="Sleep stats inside the Whoop app" src="https://cdn.mos.cms.futurecdn.net/aRinS32WEMo5G74gWPMBbJ.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>I don't want to wake up and immediately analyze a dashboard full of metrics. Instead, Fitbit Air gives me a quick summary of how I slept, and for most mornings, that's all I need to know whether I had a good night's sleep or not. I also like that I can tell the app when I don't agree with how I'm feeling, rather than blindly accepting the data. </p><p>One thing I also noticed during my testing was how much faster Fitbit Air processes sleep data. Most mornings, it gave me my sleep summary within five to seven minutes of waking up. </p><p>The Whoop app, on the other hand, often took much longer. There were days when I didn't get my sleep report for nearly 30 minutes, and sometimes I even had to manually end the sleep session before it would process the data. </p><h2 id="verdict">Verdict</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9YLsF7HXdWUUN3ENeQckxL" name="fitbit-air-2" alt="Google Fitbit Air in the hands of the author" src="https://cdn.mos.cms.futurecdn.net/9YLsF7HXdWUUN3ENeQckxL.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sanuj Bhatia / Tom's Guide)</span></figcaption></figure><p>Overall, I still think the Fitbit Air offers a better experience for the average user. Sure, the data differed from Whoop, but that's true of almost every consumer sleep tracker. None of these devices are clinical-grade after all.</p><p>After a week of wearing both trackers, I don't think sleep tracking alone is a good enough reason to spend significantly more on a Whoop. Once the Fitbit Air had a few nights to calibrate, its total sleep tracking was consistently close enough that I stopped paying attention to the differences.</p><p>What you're really paying the Whoop premium for isn't better sleep tracking. It has other features as well, like ECG, blood pressure insights, strain tracking, and a whole recovery ecosystem built for athletes. If those features matter to you, the subscription makes sense.</p><p>But if your main priority is simply understanding how well you slept each night, I honestly think the $100 Fitbit Air gets you most of the way there, with a friendlier app experience <em>and</em> for a fraction of the yearly cost.</p><div data-widget-type="productname" data-model-name="Whoop MG" class="hawk-root"></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/sleep-tech/apple-watch-vs-whoop-mg-sleep-tracker-comparison">I used the Apple Watch and Whoop to track my sleep for a year — there's a clear winner for me</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-500-steps-with-the-fitbit-air-vs-fitbit-inspire-3-and-theres-a-clear-winner">I walked 3,500 steps with the Fitbit Air vs Fitbit Inspire 3 — and there's a clear winner</a></li><li><a href="https://www.tomsguide.com/audio/airpods/forget-the-apple-watch-i-use-airpods-pro-3-for-live-heart-rate-tracking-while-running-and-theyre-usd70-off-right-now">Forget the Apple Watch: I use AirPods Pro 3 for Live Heart Rate Tracking while running</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Exclusive: Google design director says Fitbit Air reception proves they 'made the right decision' going screen-free ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I must admit, as a wearable tech writer, I predicted that Fitbit would <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">die under Google</a>, which acquired the brand in 2021. I was wrong.</p><p>So, when the opportunity arose to sit down and chat with Jonah Becker  — design director for wearables at Google — about the recently debuted <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a>, I was a tad embarrassed. Fortunately, Jonah didn’t take my doomsday predictions personally, which is a relief given he’s been working on Fitbit products for over a decade.</p><p>Jonah started at Fitbit in 2016 and moved over to Google during the <a href="https://www.tomsguide.com/news/google-acquires-fitbit-for-21-billion">2021 acquisition</a>. He currently leads the industrial design teams behind the Pixel Watch, Pixel Buds, and, of course, Fitbit. </p><p>Our chat touched on the inspiration and design process behind the Fitbit Air (i.e., one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026), the reason it doesn’t have onboard GPS, and the possibility of other Google-built screen-free wearables. I also got his candid thoughts on the outcome of the Google x Fitbit acquisition, five years on. </p><h3 class="article-body__section" id="section-inspired-by-his-children-s-friendship-bracelets"><span>Inspired by his children's friendship bracelets</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4923px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="v4R3RdVkt2tearzZXDp52N" name="FitbitAir-rev-07" alt="Close-up of the Fitbit Air on a person's wrist" src="https://cdn.mos.cms.futurecdn.net/v4R3RdVkt2tearzZXDp52N.jpg" mos="" align="middle" fullscreen="" width="4923" height="2769" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>"The inspiration we had from the start was the friendship bracelet."</p></blockquote></div><p>The Fitbit Air is a $99 screen- and button-free fitness tracker that doesn’t require a subscription and works with both Android and iOS devices. Incredibly lightweight and comfortable, it barely even looks like a piece of wearable tech, and that’s the point. </p><p>“The inspiration we had from the start was the friendship bracelet — the idea that you have this thing that is super lightweight, comfortable —  it's not a typical fitness watch or fitness tracker,” says Becker. It’s “something that has a more casual, all-hours-in-the-day vibe. I would see my kids at summer camp; they'd put on a friendship bracelet and wear it for months on end until basically the threads went bare and they fell off.”</p><p>The beauty of the Fitbit Air is that all of the tracking technology is condensed into a small, bean-like object that can easily be popped in and out of bands for maximum customization. Google even released a hardware development kit allowing DIYers to design and 3D-print their own bands for the Air. </p><p>“There are a lot of creative people in the world who have unique situations, and the idea that it becomes something that people can have fun with," says Becker on the subject of creating your own straps for the Air. "You know, as long as it's working in a way that it's supporting their health, that's what's most important.”</p><h3 class="article-body__section" id="section-a-whoop-alternative-for-you-and-me"><span>A Whoop alternative for you and me</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:50.01%;"><img id="wNxwSP3oTrgcw3KuNCjzw" name="Fitbit-Air-lead-05-header" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/wNxwSP3oTrgcw3KuNCjzw.jpg" mos="" align="middle" fullscreen="" width="4805" height="2403" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>"I see it as sort of the archetype of the ambient fitness tracker. We have so many devices around us demanding our attention all the time, and at the same time, health is every hour of every day, seven days a week."</p></blockquote></div><p>Of course, the Fitbit Air is far from the only screen-free fitness tracker out there. Its primary competition is the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a>, a subscription-based tracker that’s big on heady training stats and recovery insights. Perfect for hardcore athletes and pros, the Fitbit Air is essentially the exact opposite. </p><p>While Whoop-wearers are less likely to need daily motivation to work out, the rest of us, well, could probably benefit from it.</p><p>"You have your high-tier athletes, and then you have like the other 99.7% of the population. There are a lot of people who don't have that motivation and guidance. So for me, it's like, that's where the real opportunity is, this broad population health."</p><p>As I noted in my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">review of the Fitbit Air</a>, the device is basically a “Whoop alternative for the rest of us.” And after chatting with Becker, it seems that was the intention behind its development. </p><p>"I see [the Fitbit Air] as sort of the archetype of the ambient fitness tracker, the displayless tracker that's not demanding your attention. We have so many devices around us demanding our attention all the time, and at the same time, health is every hour of every day, seven days a week." </p><h3 class="article-body__section" id="section-no-gps-no-problem-for-most-people"><span>No GPS, no problem... for most people</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4654px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3ZgyaboUC5K2rnhcC6Kifi" name="Inspire3-v-Air-02" alt="Close-up of the Fitbit Inspire 3 next to the Fitbit Air on a user's wrist" src="https://cdn.mos.cms.futurecdn.net/3ZgyaboUC5K2rnhcC6Kifi.jpg" mos="" align="middle" fullscreen="" width="4654" height="2618" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>“The reality is that like 99% of people who might want to track a run or a hike or something like that are going to have their phones with them."</p></blockquote></div><p>It's worth noting that the Fitbit Air lacks onboard GPS, something I critiqued in the review, but why? According to Becker, the size, cost, and battery implications of including GPS didn’t align with the overall design intent of the Air. </p><p>Moreover, “the reality is that like 99% of people who might want to track a run or a hike or something like that are going to have their phones with them. So, having the paired GPS with the phone is going to provide a great experience,” adds Becker. </p><h3 class="article-body__section" id="section-on-the-longterm-outcome-of-google-s-fitbit-acquisition"><span>On the longterm outcome of Google’s Fitbit acquisition </span></h3><div><blockquote><p>"To launch [the Fitbit Air] now feels in many ways like the first big move in delivering upon the promise of the [Google] acquisition."</p></blockquote></div><p>Becker has the unique perspective of working on the Fitbit brand both when it was a standalone company and under Google. And much to my surprise, he revealed that Fitbit Air has been under development since shortly after the acquisition in 2021. That's a long time! </p><p>“To launch [the Fitbit Air] now feels in many ways like the first big move in delivering upon the promise of the acquisition,” admits Becker. </p><p>“I think one of the great things about Fitbit becoming part of Google is that Fitbit brings a ton of health expertise, history, brand recognition, and many years — a decade plus — of data collection, so an understanding of people's biometrics and behaviors,” says Becker. “And Google is a company that can probably do the best job in the world of making sense of all that data, and I think that's what it's really unlocked.”</p><h3 class="article-body__section" id="section-what-s-next-for-fitbit"><span>What’s next for Fitbit? </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ktst4G4aEo3tp2SAEDwt7A" name="FitbitAir-01" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/ktst4G4aEo3tp2SAEDwt7A.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>"I think we are seeing a really great reception to Fitbit Air, so it gives us confidence that we made the right decision in pursuing a screen-free form factor."</p></blockquote></div><p>All of this begs the question: Is the Fitbit brand <em>actually</em> here to stay? When I asked Becker, he was coy, but I picked up on a glimmer of excitement. So, I pushed further. "With word of a <a href="https://www.tomsguide.com/wellness/smart-rings/samsung-confirms-galaxy-ring-2-is-coming-and-it-might-even-work-with-ios">Samsung Galaxy Ring 2</a> under development, might we expect other screen-free wearables from Google in the near future?" I asked. </p><p>“I think we are seeing a really great reception to Fitbit Air, so it gives us confidence that we made the right decision in pursuing a screen-free form factor, and I, and I'll have to leave it at that.” </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-performance-issues-3-ways-to-make-sure-the-fitbit-air-accurately-tracks-your-next-workout">Fitbit Air performance issues? 3 ways to make sure the Fitbit Air accurately tracks your next workout</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/an-iphone-moment-for-your-eyes-why-xpanceo-is-betting-big-on-smart-contact-lenses-as-the-future-of-ar">An ‘iPhone moment’ for your eyes — why Xpanceo is betting big on smart contact lenses as the future of AR</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-went-to-sweden-to-watch-bike-helmets-get-smashed-into-anvils-3-things-i-learned-at-the-mips-test-lab">I went to Sweden to watch bike helmets get smashed into anvils — 3 things I learned at the MIPS test lab</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/exclusive-google-design-director-says-fitbit-air-reception-proves-they-made-the-right-decision-going-screen-free</link>
                                                                            <description>
                            <![CDATA[ I spoke to the lead designer behind the Fitbit Air to learn more about Google’s new $99 tracker and to determine if the Fitbit brand is actually here to stay. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FMBWthhcB3yswm44bNJRsE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UDs8Ptawp2Ta84dW6N8vJD-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 02 Jul 2026 04:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UDs8Ptawp2Ta84dW6N8vJD-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the sensors on the underside of the Fitbit Air fitness tracker]]></media:description>                                                            <media:text><![CDATA[Close-up of the sensors on the underside of the Fitbit Air fitness tracker]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the sensors on the underside of the Fitbit Air fitness tracker]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UDs8Ptawp2Ta84dW6N8vJD-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I must admit, as a wearable tech writer, I predicted that Fitbit would <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">die under Google</a>, which acquired the brand in 2021. I was wrong.</p><p>So, when the opportunity arose to sit down and chat with Jonah Becker  — design director for wearables at Google — about the recently debuted <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a>, I was a tad embarrassed. Fortunately, Jonah didn’t take my doomsday predictions personally, which is a relief given he’s been working on Fitbit products for over a decade.</p><p>Jonah started at Fitbit in 2016 and moved over to Google during the <a href="https://www.tomsguide.com/news/google-acquires-fitbit-for-21-billion">2021 acquisition</a>. He currently leads the industrial design teams behind the Pixel Watch, Pixel Buds, and, of course, Fitbit. </p><p>Our chat touched on the inspiration and design process behind the Fitbit Air (i.e., one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026), the reason it doesn’t have onboard GPS, and the possibility of other Google-built screen-free wearables. I also got his candid thoughts on the outcome of the Google x Fitbit acquisition, five years on. </p><h3 class="article-body__section" id="section-inspired-by-his-children-s-friendship-bracelets"><span>Inspired by his children's friendship bracelets</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4923px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="v4R3RdVkt2tearzZXDp52N" name="FitbitAir-rev-07" alt="Close-up of the Fitbit Air on a person's wrist" src="https://cdn.mos.cms.futurecdn.net/v4R3RdVkt2tearzZXDp52N.jpg" mos="" align="middle" fullscreen="" width="4923" height="2769" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>"The inspiration we had from the start was the friendship bracelet."</p></blockquote></div><p>The Fitbit Air is a $99 screen- and button-free fitness tracker that doesn’t require a subscription and works with both Android and iOS devices. Incredibly lightweight and comfortable, it barely even looks like a piece of wearable tech, and that’s the point. </p><p>“The inspiration we had from the start was the friendship bracelet — the idea that you have this thing that is super lightweight, comfortable —  it's not a typical fitness watch or fitness tracker,” says Becker. It’s “something that has a more casual, all-hours-in-the-day vibe. I would see my kids at summer camp; they'd put on a friendship bracelet and wear it for months on end until basically the threads went bare and they fell off.”</p><p>The beauty of the Fitbit Air is that all of the tracking technology is condensed into a small, bean-like object that can easily be popped in and out of bands for maximum customization. Google even released a hardware development kit allowing DIYers to design and 3D-print their own bands for the Air. </p><p>“There are a lot of creative people in the world who have unique situations, and the idea that it becomes something that people can have fun with," says Becker on the subject of creating your own straps for the Air. "You know, as long as it's working in a way that it's supporting their health, that's what's most important.”</p><h3 class="article-body__section" id="section-a-whoop-alternative-for-you-and-me"><span>A Whoop alternative for you and me</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:50.01%;"><img id="wNxwSP3oTrgcw3KuNCjzw" name="Fitbit-Air-lead-05-header" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/wNxwSP3oTrgcw3KuNCjzw.jpg" mos="" align="middle" fullscreen="" width="4805" height="2403" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>"I see it as sort of the archetype of the ambient fitness tracker. We have so many devices around us demanding our attention all the time, and at the same time, health is every hour of every day, seven days a week."</p></blockquote></div><p>Of course, the Fitbit Air is far from the only screen-free fitness tracker out there. Its primary competition is the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a>, a subscription-based tracker that’s big on heady training stats and recovery insights. Perfect for hardcore athletes and pros, the Fitbit Air is essentially the exact opposite. </p><p>While Whoop-wearers are less likely to need daily motivation to work out, the rest of us, well, could probably benefit from it.</p><p>"You have your high-tier athletes, and then you have like the other 99.7% of the population. There are a lot of people who don't have that motivation and guidance. So for me, it's like, that's where the real opportunity is, this broad population health."</p><p>As I noted in my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">review of the Fitbit Air</a>, the device is basically a “Whoop alternative for the rest of us.” And after chatting with Becker, it seems that was the intention behind its development. </p><p>"I see [the Fitbit Air] as sort of the archetype of the ambient fitness tracker, the displayless tracker that's not demanding your attention. We have so many devices around us demanding our attention all the time, and at the same time, health is every hour of every day, seven days a week." </p><h3 class="article-body__section" id="section-no-gps-no-problem-for-most-people"><span>No GPS, no problem... for most people</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4654px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3ZgyaboUC5K2rnhcC6Kifi" name="Inspire3-v-Air-02" alt="Close-up of the Fitbit Inspire 3 next to the Fitbit Air on a user's wrist" src="https://cdn.mos.cms.futurecdn.net/3ZgyaboUC5K2rnhcC6Kifi.jpg" mos="" align="middle" fullscreen="" width="4654" height="2618" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>“The reality is that like 99% of people who might want to track a run or a hike or something like that are going to have their phones with them."</p></blockquote></div><p>It's worth noting that the Fitbit Air lacks onboard GPS, something I critiqued in the review, but why? According to Becker, the size, cost, and battery implications of including GPS didn’t align with the overall design intent of the Air. </p><p>Moreover, “the reality is that like 99% of people who might want to track a run or a hike or something like that are going to have their phones with them. So, having the paired GPS with the phone is going to provide a great experience,” adds Becker. </p><h3 class="article-body__section" id="section-on-the-longterm-outcome-of-google-s-fitbit-acquisition"><span>On the longterm outcome of Google’s Fitbit acquisition </span></h3><div><blockquote><p>"To launch [the Fitbit Air] now feels in many ways like the first big move in delivering upon the promise of the [Google] acquisition."</p></blockquote></div><p>Becker has the unique perspective of working on the Fitbit brand both when it was a standalone company and under Google. And much to my surprise, he revealed that Fitbit Air has been under development since shortly after the acquisition in 2021. That's a long time! </p><p>“To launch [the Fitbit Air] now feels in many ways like the first big move in delivering upon the promise of the acquisition,” admits Becker. </p><p>“I think one of the great things about Fitbit becoming part of Google is that Fitbit brings a ton of health expertise, history, brand recognition, and many years — a decade plus — of data collection, so an understanding of people's biometrics and behaviors,” says Becker. “And Google is a company that can probably do the best job in the world of making sense of all that data, and I think that's what it's really unlocked.”</p><h3 class="article-body__section" id="section-what-s-next-for-fitbit"><span>What’s next for Fitbit? </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ktst4G4aEo3tp2SAEDwt7A" name="FitbitAir-01" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/ktst4G4aEo3tp2SAEDwt7A.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>"I think we are seeing a really great reception to Fitbit Air, so it gives us confidence that we made the right decision in pursuing a screen-free form factor."</p></blockquote></div><p>All of this begs the question: Is the Fitbit brand <em>actually</em> here to stay? When I asked Becker, he was coy, but I picked up on a glimmer of excitement. So, I pushed further. "With word of a <a href="https://www.tomsguide.com/wellness/smart-rings/samsung-confirms-galaxy-ring-2-is-coming-and-it-might-even-work-with-ios">Samsung Galaxy Ring 2</a> under development, might we expect other screen-free wearables from Google in the near future?" I asked. </p><p>“I think we are seeing a really great reception to Fitbit Air, so it gives us confidence that we made the right decision in pursuing a screen-free form factor, and I, and I'll have to leave it at that.” </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-performance-issues-3-ways-to-make-sure-the-fitbit-air-accurately-tracks-your-next-workout">Fitbit Air performance issues? 3 ways to make sure the Fitbit Air accurately tracks your next workout</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/an-iphone-moment-for-your-eyes-why-xpanceo-is-betting-big-on-smart-contact-lenses-as-the-future-of-ar">An ‘iPhone moment’ for your eyes — why Xpanceo is betting big on smart contact lenses as the future of AR</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-went-to-sweden-to-watch-bike-helmets-get-smashed-into-anvils-3-things-i-learned-at-the-mips-test-lab">I went to Sweden to watch bike helmets get smashed into anvils — 3 things I learned at the MIPS test lab</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Fitbit Air performance issues? 3 ways to make sure the Fitbit Air accurately tracks your next workout ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you’re having issues with your Fitbit Air’s fitness tracking accuracy, I’m here to help. I just reviewed the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> and have been wearing one pretty much nonstop for nearly a month. I’ve tested it against numerous other wearables, as well as Strava, while walking, running, hiking, and cycling with mostly impressive results. </p><p>Of course, shiny new pieces of consumer tech often ship with “quirks” —  who could forget Apple's “Antennagate” — but with a growing number of Fitbit Air users reporting issues with fitness tracking accuracy via TikTok and Reddit, it’s worth rehashing the device’s technical limitations, along with some troubleshooting tips. </p><p>So, if you’re having issues with Fitbit Air fitness tracking accuracy, try these three things.</p><h3 class="article-body__section" id="section-1-manually-start-your-workouts-from-the-app-don-t-use-auto-tracking"><span>1. Manually start your workouts from the app; don’t use auto-tracking </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ktst4G4aEo3tp2SAEDwt7A" name="FitbitAir-01" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/ktst4G4aEo3tp2SAEDwt7A.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air’s auto workout tracking needs, well, work. At present, it only logs walks, bike rides, "sports," and "other activities." Moreover, you need to spend 15-20 consecutive minutes or more doing a supported activity for tracking to kick in. That’s hardly ideal.</p><p>For instance, <a href="https://www.tomsguide.com/wellness/running/im-a-running-noob-doing-my-first-5k-heres-all-the-tech-im-using-to-cross-the-finish-line">I'm a beginner runner</a> who averages about two miles per outdoor session. As a result, my runs tend to be shorter than 20 minutes, which means the Fitbit Air is hit-or-miss at automatically logging them.</p><p>Fortunately, the solution to this issue is simple: If you want to ensure the Fitbit Air <em>actually</em> records your workout, manually start a workout session for your activity of choice in the Google Health app (formerly the Fitbit app) before beginning. </p><h3 class="article-body__section" id="section-2-for-accurate-daily-step-counts-carry-your-phone-at-all-times"><span>2. For accurate daily step counts, carry your phone at all times</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4382px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YVcdQrtyDuQoDUeaZKAmLi" name="SE3-v-Air-03" alt="Close-up of the Apple Watch SE 3 and Fitbit Air in a user's hand against a bright, colorful background" src="https://cdn.mos.cms.futurecdn.net/YVcdQrtyDuQoDUeaZKAmLi.jpg" mos="" align="middle" fullscreen="" width="4382" height="2465" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>One of the biggest complaints I've heard about the Fitbit Air is that daily step count totals are far from accurate. However, there's a good reason this might be the case.</p><p>As a reminder, the Fitbit Air lacks an onboard GPS. This means you need to carry a paired smartphone with you at all times if you want precise daily step count totals, as the Air piggybacks off your phone’s GPS signal. </p><h3 class="article-body__section" id="section-3-when-tracking-outdoor-workouts-always-bring-your-phone"><span>3. When tracking outdoor workouts, always bring your phone </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4114px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="m3zAnMrGySMYrDxq46JKLY" name="Fitbit-Air-lead-03" alt="Close-up of the sensors on the Fitbit Air screenless fitness tracker" src="https://cdn.mos.cms.futurecdn.net/m3zAnMrGySMYrDxq46JKLY.jpg" mos="" align="middle" fullscreen="" width="4114" height="2315" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Similarly, if you want accurate run, hike, walk, or bike data in your post-workout report, you must carry your phone along; otherwise, metrics like distance and pace will be far from accurate. </p><p>In my testing, you can start an outdoor-based workout from your phone, then leave it behind, and the Fitbit Air will try its best to measure location-based stats, but the results are <em>faaaar</em> from reliable. It’s also worth noting that there’s no onboard altimeter in the Fitbit Air. So, like GPS, the wearable relies on a paired phone, carried with you, for that info.</p><p>Ultimately, Google might be wise to add a warning in the Google Health app when users start an outdoor workout stating that a paired phone is required for accurate data. </p><p>Alternatively, Google could simply turn off all location-based metrics in the post-workout report when no GPS or altimeter info is available. If nothing else, this might help folks better understand the technical limitations of the Fitbit Air. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-500-steps-with-the-fitbit-air-vs-fitbit-inspire-3-and-theres-a-clear-winner">I walked 3,500 steps with the Fitbit Air vs Fitbit Inspire 3 — and there's a clear winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-went-for-a-run-with-the-fitbit-air-and-garmin-forerunner-70-to-see-how-the-usd99-tracker-compared-and-im-impressed">I went for a run with the Fitbit Air and Garmin Forerunner 70 to see how the $99 tracker compared, and I’m impressed</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs Fitbit Inspire 3 — which $99 fitness tracker wins?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-performance-issues-3-ways-to-make-sure-the-fitbit-air-accurately-tracks-your-next-workout</link>
                                                                            <description>
                            <![CDATA[ Some users are reporting fitness-tracking performance issues with the new Fitbit Air. However, these hiccups may actually be technical limitations rather than bugs. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kAYs5ctQBMpYbzhrcqpG29</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EvMxy8b2KjzH2ks5YVcSAA-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 27 Jun 2026 11:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EvMxy8b2KjzH2ks5YVcSAA-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap]]></media:description>                                                            <media:text><![CDATA[Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap]]></media:text>
                                <media:title type="plain"><![CDATA[Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EvMxy8b2KjzH2ks5YVcSAA-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you’re having issues with your Fitbit Air’s fitness tracking accuracy, I’m here to help. I just reviewed the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> and have been wearing one pretty much nonstop for nearly a month. I’ve tested it against numerous other wearables, as well as Strava, while walking, running, hiking, and cycling with mostly impressive results. </p><p>Of course, shiny new pieces of consumer tech often ship with “quirks” —  who could forget Apple's “Antennagate” — but with a growing number of Fitbit Air users reporting issues with fitness tracking accuracy via TikTok and Reddit, it’s worth rehashing the device’s technical limitations, along with some troubleshooting tips. </p><p>So, if you’re having issues with Fitbit Air fitness tracking accuracy, try these three things.</p><h3 class="article-body__section" id="section-1-manually-start-your-workouts-from-the-app-don-t-use-auto-tracking"><span>1. Manually start your workouts from the app; don’t use auto-tracking </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ktst4G4aEo3tp2SAEDwt7A" name="FitbitAir-01" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/ktst4G4aEo3tp2SAEDwt7A.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air’s auto workout tracking needs, well, work. At present, it only logs walks, bike rides, "sports," and "other activities." Moreover, you need to spend 15-20 consecutive minutes or more doing a supported activity for tracking to kick in. That’s hardly ideal.</p><p>For instance, <a href="https://www.tomsguide.com/wellness/running/im-a-running-noob-doing-my-first-5k-heres-all-the-tech-im-using-to-cross-the-finish-line">I'm a beginner runner</a> who averages about two miles per outdoor session. As a result, my runs tend to be shorter than 20 minutes, which means the Fitbit Air is hit-or-miss at automatically logging them.</p><p>Fortunately, the solution to this issue is simple: If you want to ensure the Fitbit Air <em>actually</em> records your workout, manually start a workout session for your activity of choice in the Google Health app (formerly the Fitbit app) before beginning. </p><h3 class="article-body__section" id="section-2-for-accurate-daily-step-counts-carry-your-phone-at-all-times"><span>2. For accurate daily step counts, carry your phone at all times</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4382px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YVcdQrtyDuQoDUeaZKAmLi" name="SE3-v-Air-03" alt="Close-up of the Apple Watch SE 3 and Fitbit Air in a user's hand against a bright, colorful background" src="https://cdn.mos.cms.futurecdn.net/YVcdQrtyDuQoDUeaZKAmLi.jpg" mos="" align="middle" fullscreen="" width="4382" height="2465" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>One of the biggest complaints I've heard about the Fitbit Air is that daily step count totals are far from accurate. However, there's a good reason this might be the case.</p><p>As a reminder, the Fitbit Air lacks an onboard GPS. This means you need to carry a paired smartphone with you at all times if you want precise daily step count totals, as the Air piggybacks off your phone’s GPS signal. </p><h3 class="article-body__section" id="section-3-when-tracking-outdoor-workouts-always-bring-your-phone"><span>3. When tracking outdoor workouts, always bring your phone </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4114px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="m3zAnMrGySMYrDxq46JKLY" name="Fitbit-Air-lead-03" alt="Close-up of the sensors on the Fitbit Air screenless fitness tracker" src="https://cdn.mos.cms.futurecdn.net/m3zAnMrGySMYrDxq46JKLY.jpg" mos="" align="middle" fullscreen="" width="4114" height="2315" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Similarly, if you want accurate run, hike, walk, or bike data in your post-workout report, you must carry your phone along; otherwise, metrics like distance and pace will be far from accurate. </p><p>In my testing, you can start an outdoor-based workout from your phone, then leave it behind, and the Fitbit Air will try its best to measure location-based stats, but the results are <em>faaaar</em> from reliable. It’s also worth noting that there’s no onboard altimeter in the Fitbit Air. So, like GPS, the wearable relies on a paired phone, carried with you, for that info.</p><p>Ultimately, Google might be wise to add a warning in the Google Health app when users start an outdoor workout stating that a paired phone is required for accurate data. </p><p>Alternatively, Google could simply turn off all location-based metrics in the post-workout report when no GPS or altimeter info is available. If nothing else, this might help folks better understand the technical limitations of the Fitbit Air. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-500-steps-with-the-fitbit-air-vs-fitbit-inspire-3-and-theres-a-clear-winner">I walked 3,500 steps with the Fitbit Air vs Fitbit Inspire 3 — and there's a clear winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-went-for-a-run-with-the-fitbit-air-and-garmin-forerunner-70-to-see-how-the-usd99-tracker-compared-and-im-impressed">I went for a run with the Fitbit Air and Garmin Forerunner 70 to see how the $99 tracker compared, and I’m impressed</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs Fitbit Inspire 3 — which $99 fitness tracker wins?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple Watch, Garmin, Oura, Whoop and Fitbit — all the best Prime Day sleep tracker deals in one place, from $86 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Amazon is full of sleep tracker deals this Prime Day, but it can be hard to know what's a good deal or what tech is worth buying. That's why we've rounded up every deal on every sleep tracker we've ever tested and loved, and that includes the <a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank"><strong>Oura Ring 4 (now down to $226</strong></a> at Amazon and <a href="https://www.amazon.co.uk/dp/B0D9WWHXHD" target="_blank"><strong>£199.99 at Amazon UK</strong></a>)</p><p>The Oura Ring 4 may be our favorite sleep tracker, but it's not the only entry in our<a href="https://www.tomsguide.com/wellness/sleep-tech/best-sleep-tracker"> best sleep trackers</a> guide to get a price drop this Prime Day. In this sleep-tracking deals hub we've included all the best Amazon discounts on top choices from Apple Watch, Garmin, Oura, Whoop, Withings, and Fitbit, all reviewed by the Tom's Guide team. </p><p>While Amazon's Prime Day event has, to be honest, been underwhelming in some areas, it definitely hasn't let us down in the sleep tech department. So, here's a list of the top five sleep tracker discount in both the US and UK, and why they're the best <a href="https://www.tomsguide.com/wellness/mattresses/amazon-prime-day-mattress-deals">Amazon Prime Day mattress and sleep deals </a>we've seen so far. </p><h2 id="don-t-forget-your-prime-membership">Don't forget your Prime Membership...</h2><div class="product"><a data-dimension112="04f4cd62-5e03-410e-bcd0-39e63eedf558" data-action="Deal Block" data-label="Prime Membership" data-dimension48="Prime Membership" data-dimension25="$0" href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:57.15%;"><img id="k4vqt3qVs98dCVuWg7KzWJ" name="Amazon Prime logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/k4vqt3qVs98dCVuWg7KzWJ.jpg" mos="" align="middle" fullscreen="" width="4000" height="2286" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a free 30-day trial of Amazon Prime this week. As soon as you sign up, you'll get access to this year's Prime Day discounts on thousands of items, from mattresses to air fryers. Prime memberships (from $14.99 a month) also include access to Prime Video, Prime Reading, Prime Music, Amazon photo storage, plus free shipping.<a class="view-deal button" href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow" data-dimension112="04f4cd62-5e03-410e-bcd0-39e63eedf558" data-action="Deal Block" data-label="Prime Membership" data-dimension48="Prime Membership" data-dimension25="$0">View Deal</a></p></div><h3 class="article-body__section" id="section-top-5-sleep-tracker-us-prime-day-deals"><span>Top 5 sleep tracker US Prime Day deals </span></h3><div class="product"><a data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:898px;"><p class="vanilla-image-block" style="padding-top:86.97%;"><img id="gZJwTTiTSeCKqGf7Yh5Y88" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gZJwTTiTSeCKqGf7Yh5Y88.png" mos="" align="middle" fullscreen="" width="898" height="781" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Oura Ring 4 is a sleek, stylish ring that sits comfortably on your index finger, tracking key sleep metrics. Its accompanying app features an AI sleep advisor, which analyses your sleep data and tells you how you can improve. The Oura Ring is now 43% off at AMazon, but remember there's a $5.99 monthly subscription fee to unlock all features (but the first month is completely free). </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review" data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226"><strong>Oura Ring 4 review score:</strong></a><strong> </strong>★★★★★<br><a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVSZ56/ref?th=1"><strong>User score</strong></a><strong>: </strong>★★★★ (8,000+ reviews)<a class="view-deal button" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank" rel="nofollow" data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226">View Deal</a></p></div><div class="product"><a data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85.45" href="https://www.amazon.com/gp/aw/d/B0CC62ZG1M/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:916px;"><p class="vanilla-image-block" style="padding-top:119.21%;"><img id="7SyXAycyiGG6YApyTLSkSj" name="Fitbit Charge 6 deal block.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7SyXAycyiGG6YApyTLSkSj.jpeg" mos="" align="middle" fullscreen="" width="916" height="1092" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Charge 6 tracks sleep using an SpO2 sensor for patterns, displaying total time and scores on-wrist, with deeper stages reserved for Premium app users. In testing, its metrics closely mirrored the more expensive Oura Ring, proving highly impressive and accurate for a fraction of the price. t just under $86, the Fitbit Charge 6 is the Prime Day deal that offers the best value for money. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85.45"><strong>Fitbit Charge 6 review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★<br><a href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (6,600+ reviews)<a class="view-deal button" href="https://www.amazon.com/gp/aw/d/B0CC62ZG1M/" target="_blank" rel="nofollow" data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85.45">View Deal</a></p></div><div class="product"><a data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299" href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:113.25%;"><img id="hoKNR4oZqDAFmbNaVfpUYB" name="whoop 5.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hoKNR4oZqDAFmbNaVfpUYB.jpg" mos="" align="middle" fullscreen="" width="679" height="769" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow" data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299">5.0/MG Sleep and Activity Tracker (Life membership): was $359 now $299</a></strong><br>The Whoop 5.0/MG is an advanced recovery and sleep tracker designed for athletes. It tracks essential fitness and health metrics, including VO2 max, HRV status, blood oxygen levels, and sleep efficiency scores. Additionally, it delivers live ECG readings and monitors your overnight skin temperature to help optimize your training.It uses a subscription model instead of charging upfront for hardware. This Prime Day, the advanced annual fee is discounted to $299 (down from $359), while the entry-level subscription is $199.</p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker"><strong>Whoop 5.0/MG score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (3,600+ reviews)<a class="view-deal button" href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow" data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5" href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="RWo9DyHcP7kCeRzfRK2UCQ" name="Index Sleep Monitor 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RWo9DyHcP7kCeRzfRK2UCQ.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow" data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5">Smart Sleep Optimisation System: was $169.14 now $130.5</a></strong><br>The Garmin Index Sleep Monitor is a screenless, lightweight armband with a week-long battery and smart alarm. This dedicated tracker offers accurate sleep metrics, letting users charge their main smartwatch overnight without missing health data. Down from $169.14 to $130.50, it's one of the more budget-friendly options. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/sleep-tech/garmin-index-sleep-monitor-review"><strong>Garmin Index Sleep Monitor review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMW5K7P/ref=sr_1_1" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★(200+ reviews)<a class="view-deal button" href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow" data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5">View Deal</a></p></div><div class="product"><a data-dimension112="df999393-9749-428a-a766-8cf6ad377b7a" data-action="Deal Block" data-label="Watch 11" data-dimension48="Watch 11" data-dimension25="$279" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFPB851/ref=sr_1_1_sspa" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:118.67%;"><img id="zpTresKtjPzk37YdCtdZd9" name="Apple Watch 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zpTresKtjPzk37YdCtdZd9.jpg" mos="" align="middle" fullscreen="" width="1264" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Watch features the famous Sleep Score, a metric which scores sleep quality out of 100. The comfortable smart watch breaks down data into three key areas: sleep duration, bedtime consistency, and interruptions. This targeted breakdown helps users identify specific habits, such as irregular schedules, allowing them to make focused improvements to their routine. At Amazon, this 30% discount is selling fast, so Prime Day really is the best time to buy.<br><br><strong>Our </strong><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review" data-dimension112="df999393-9749-428a-a766-8cf6ad377b7a" data-action="Deal Block" data-label="Watch 11" data-dimension48="Watch 11" data-dimension25="$279"><strong>Apple Watch 11 review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFPB851/ref=sr_1_1_sspa" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★<strong>½</strong>(5,000+ reviews)<a class="view-deal button" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFPB851/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="df999393-9749-428a-a766-8cf6ad377b7a" data-action="Deal Block" data-label="Watch 11" data-dimension48="Watch 11" data-dimension25="$279">View Deal</a></p></div><div data-model-name="Oura Ring 4,Whoop MG,Garmin Index Sleep Monitor,Fitbit Charge 6,Apple Watch SE 3" data-widget-type="multimodelreview" data-widget-title="Today's best US sleep tracker deals" class="hawk-root"></div><h3 class="article-body__section" id="section-top-5-sleep-tracker-uk-prime-day-deals"><span>Top 5 sleep tracker UK Prime Day deals </span></h3><div class="product"><a data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£199.99" href="https://www.amazon.co.uk/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWB3WX/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:898px;"><p class="vanilla-image-block" style="padding-top:86.97%;"><img id="gZJwTTiTSeCKqGf7Yh5Y88" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gZJwTTiTSeCKqGf7Yh5Y88.png" mos="" align="middle" fullscreen="" width="898" height="781" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Oura Ring 4 is our top choice for sleep tracking thanks t its accurate data. comfortable and stylish fit, and an intuitive app featuring AI-assisted sleep coaching. The downside is a subscription fee of £5.99 a month, but we think it's worth it as it unlocks key features. (There's a first-month free trial.) Now 43% off at Amazon, this is your chance to save big this summer. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review" data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£199.99"><strong>Oura Ring 4 review score:</strong></a><strong> </strong>★★★★★<br><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FOura-Ring-Tracking-Wearable-Fitness%2Fdp%2FB0D9WW6RPJ%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-gb-1099464785133196552-20"><strong>User score</strong></a><strong>: </strong>★★★★ (3,800+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWB3WX/ref" target="_blank" rel="nofollow" data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£199.99">View Deal</a></p></div><div class="product"><a data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£88.99" href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ajAbuA6CSc4Ku3Nh53Jo9H" name="withings_sleep_tracker_square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ajAbuA6CSc4Ku3Nh53Jo9H.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Unlike every sleep tracker in this hub, the Withings Sleep Analyzer is actually a discreet sleep-tracking mat that slides under your mattress. It's great for anyone who finds wearables irritating or sleep-disrupting, and it even has sleep apnea detection. Now 32% off at Amazon, the Withings is a top pick if you need a sleep tracker under £100. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/sleep-tech/withings-sleep-analyzer-review" data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£88.99"><strong>Withings Sleep Analyser review score</strong></a><strong>: </strong>★★★★<br><a href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★ (2,300+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank" rel="nofollow" data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£88.99">View Deal</a></p></div><div class="product"><a data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99" href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:135.35%;"><img id="kvAhR7mf4oG5Nhd2ebsemS" name="Fitbit Inspire 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kvAhR7mf4oG5Nhd2ebsemS.jpg" mos="" align="middle" fullscreen="" width="679" height="919" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow" data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99">Inspire 3 Tracker: was £84.99 now £56.99</a></strong><br>Fitbit accurately tracks sleep onset and nightly wakeups. However, in-depth metrics—including guided sleep programs and the overall nightly sleep score (calculated from heart rate, restlessness, and sleep stages) — are locked behind a Fitbit Premium paywall of £7.99 a month, while free members only see total time asleep.</p><p><strong>Our </strong><a href="https://www.tomsguide.com/reviews/fitbit-inspire-3"><strong>Fitbit Inspire 3 review score</strong></a><strong>: </strong>★★★★<strong>½</strong><br><a href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (11,000+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow" data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99">View Deal</a></p></div><div class="product"><a data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="£186.15" href="https://www.amazon.co.uk/Apple-Smartwatch-Midnight-Aluminium-Resistant/dp/B0FQFJSX87/ref=sr_1_7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:113.25%;"><img id="hoKNR4oZqDAFmbNaVfpUYB" name="whoop 5.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hoKNR4oZqDAFmbNaVfpUYB.jpg" mos="" align="middle" fullscreen="" width="679" height="769" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Like all Apple Watch sleep trackers, the SE 3 provides a daily Sleep Score out of 100, and you can look at your sleep metrics on the intutive Health app. However, the Apple Watch SE 3 is the first model in Apple's entry-level range with <a href="https://www.tomsguide.com/wellness/smartwatches/apple-gets-fda-approval-to-bring-sleep-apnea-notifications-to-apple-watch" data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="£186.15">sleep apnea alerts</a>. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review"><strong>Apple Watch SE 3 review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.co.uk/Apple-Smartwatch-Midnight-Aluminium-Resistant/dp/B0FQFJSX87/ref=sr_1_7"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (469+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Apple-Smartwatch-Midnight-Aluminium-Resistant/dp/B0FQFJSX87/ref=sr_1_7" target="_blank" rel="nofollow" data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="£186.15">View Deal</a></p></div><div class="product"><a data-dimension112="c5bf573d-a5bd-49b0-b124-ddd58e0cb744" data-action="Deal Block" data-label="Index Sleep Monitor (S/M)" data-dimension48="Index Sleep Monitor (S/M)" data-dimension25="$132.26" href="https://www.amazon.co.uk/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMWRMHV/ref=sr_1_1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="RWo9DyHcP7kCeRzfRK2UCQ" name="Index Sleep Monitor 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RWo9DyHcP7kCeRzfRK2UCQ.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMWRMHV/ref=sr_1_1" target="_blank" rel="nofollow" data-dimension112="c5bf573d-a5bd-49b0-b124-ddd58e0cb744" data-action="Deal Block" data-label="Index Sleep Monitor (S/M)" data-dimension48="Index Sleep Monitor (S/M)" data-dimension25="$132.26">Index Sleep Monitor (S/M): was $149.99 now $132.26</a></strong><br>The Garmin Index Sleep Monitor is a rare, screenless upper-arm tracker that provides a comfortable, distraction-free alternative to watches. At just under $133, it precisely captures overnight sleep data at a fraction of the price of some sleep trackers. However, be warned that Bluetooth connectivity can be a problem. <br><br><strong>Our </strong><a href="https://www.tomsguide.com/wellness/sleep-tech/garmin-index-sleep-monitor-review"><strong>Garmin Index Sleep Monitor review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.co.uk/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMWRMHV/ref=sr_1_1"><strong>User score</strong></a><strong>: </strong>★★★<strong>½</strong> (200+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMWRMHV/ref=sr_1_1" target="_blank" rel="nofollow" data-dimension112="c5bf573d-a5bd-49b0-b124-ddd58e0cb744" data-action="Deal Block" data-label="Index Sleep Monitor (S/M)" data-dimension48="Index Sleep Monitor (S/M)" data-dimension25="$132.26">View Deal</a></p></div><div data-model-name="Oura Ring 4,Whoop MG,Garmin Index Sleep Monitor,Fitbit Charge 6,Apple Watch SE 3" data-widget-type="multimodelreview" data-widget-title="Today's best UK sleep tracker deals" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep-tech/apple-watch-garmin-oura-whoop-and-fitbit-all-the-best-prime-day-sleep-tracker-deals-in-one-place-from-usd86</link>
                                                                            <description>
                            <![CDATA[ From medical-grade armbands to stylish rings, here are all the US and UK Prime Day deals on the best sleep trackers we've tested —starting at $86 and £57 ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ergZhd4SxyX9FyGsCBGo7c</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/bLpssSppeqQCRsCaLWBS4G-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 25 Jun 2026 22:55:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sleep Tech]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Sleep]]></category>
                                                                                                                    <dc:creator><![CDATA[ Frances Daniels ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/gwtHaY4CfWtqYQH6EuKPGE.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/bLpssSppeqQCRsCaLWBS4G-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A woman wears a Garmin Index Sleep Monitor. In the top right hand corner, there is a Prime Day deals badge. ]]></media:description>                                                            <media:text><![CDATA[A woman wears a Garmin Index Sleep Monitor. In the top right hand corner, there is a Prime Day deals badge. ]]></media:text>
                                <media:title type="plain"><![CDATA[A woman wears a Garmin Index Sleep Monitor. In the top right hand corner, there is a Prime Day deals badge. ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/bLpssSppeqQCRsCaLWBS4G-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Amazon is full of sleep tracker deals this Prime Day, but it can be hard to know what's a good deal or what tech is worth buying. That's why we've rounded up every deal on every sleep tracker we've ever tested and loved, and that includes the <a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank"><strong>Oura Ring 4 (now down to $226</strong></a> at Amazon and <a href="https://www.amazon.co.uk/dp/B0D9WWHXHD" target="_blank"><strong>£199.99 at Amazon UK</strong></a>)</p><p>The Oura Ring 4 may be our favorite sleep tracker, but it's not the only entry in our<a href="https://www.tomsguide.com/wellness/sleep-tech/best-sleep-tracker"> best sleep trackers</a> guide to get a price drop this Prime Day. In this sleep-tracking deals hub we've included all the best Amazon discounts on top choices from Apple Watch, Garmin, Oura, Whoop, Withings, and Fitbit, all reviewed by the Tom's Guide team. </p><p>While Amazon's Prime Day event has, to be honest, been underwhelming in some areas, it definitely hasn't let us down in the sleep tech department. So, here's a list of the top five sleep tracker discount in both the US and UK, and why they're the best <a href="https://www.tomsguide.com/wellness/mattresses/amazon-prime-day-mattress-deals">Amazon Prime Day mattress and sleep deals </a>we've seen so far. </p><h2 id="don-t-forget-your-prime-membership">Don't forget your Prime Membership...</h2><div class="product"><a data-dimension112="04f4cd62-5e03-410e-bcd0-39e63eedf558" data-action="Deal Block" data-label="Prime Membership" data-dimension48="Prime Membership" data-dimension25="$0" href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:57.15%;"><img id="k4vqt3qVs98dCVuWg7KzWJ" name="Amazon Prime logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/k4vqt3qVs98dCVuWg7KzWJ.jpg" mos="" align="middle" fullscreen="" width="4000" height="2286" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a free 30-day trial of Amazon Prime this week. As soon as you sign up, you'll get access to this year's Prime Day discounts on thousands of items, from mattresses to air fryers. Prime memberships (from $14.99 a month) also include access to Prime Video, Prime Reading, Prime Music, Amazon photo storage, plus free shipping.<a class="view-deal button" href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow" data-dimension112="04f4cd62-5e03-410e-bcd0-39e63eedf558" data-action="Deal Block" data-label="Prime Membership" data-dimension48="Prime Membership" data-dimension25="$0">View Deal</a></p></div><h3 class="article-body__section" id="section-top-5-sleep-tracker-us-prime-day-deals"><span>Top 5 sleep tracker US Prime Day deals </span></h3><div class="product"><a data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:898px;"><p class="vanilla-image-block" style="padding-top:86.97%;"><img id="gZJwTTiTSeCKqGf7Yh5Y88" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gZJwTTiTSeCKqGf7Yh5Y88.png" mos="" align="middle" fullscreen="" width="898" height="781" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Oura Ring 4 is a sleek, stylish ring that sits comfortably on your index finger, tracking key sleep metrics. Its accompanying app features an AI sleep advisor, which analyses your sleep data and tells you how you can improve. The Oura Ring is now 43% off at AMazon, but remember there's a $5.99 monthly subscription fee to unlock all features (but the first month is completely free). </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review" data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226"><strong>Oura Ring 4 review score:</strong></a><strong> </strong>★★★★★<br><a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVSZ56/ref?th=1"><strong>User score</strong></a><strong>: </strong>★★★★ (8,000+ reviews)<a class="view-deal button" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank" rel="nofollow" data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226">View Deal</a></p></div><div class="product"><a data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85.45" href="https://www.amazon.com/gp/aw/d/B0CC62ZG1M/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:916px;"><p class="vanilla-image-block" style="padding-top:119.21%;"><img id="7SyXAycyiGG6YApyTLSkSj" name="Fitbit Charge 6 deal block.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7SyXAycyiGG6YApyTLSkSj.jpeg" mos="" align="middle" fullscreen="" width="916" height="1092" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Charge 6 tracks sleep using an SpO2 sensor for patterns, displaying total time and scores on-wrist, with deeper stages reserved for Premium app users. In testing, its metrics closely mirrored the more expensive Oura Ring, proving highly impressive and accurate for a fraction of the price. t just under $86, the Fitbit Charge 6 is the Prime Day deal that offers the best value for money. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85.45"><strong>Fitbit Charge 6 review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★<br><a href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (6,600+ reviews)<a class="view-deal button" href="https://www.amazon.com/gp/aw/d/B0CC62ZG1M/" target="_blank" rel="nofollow" data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85.45">View Deal</a></p></div><div class="product"><a data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299" href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:113.25%;"><img id="hoKNR4oZqDAFmbNaVfpUYB" name="whoop 5.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hoKNR4oZqDAFmbNaVfpUYB.jpg" mos="" align="middle" fullscreen="" width="679" height="769" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow" data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299">5.0/MG Sleep and Activity Tracker (Life membership): was $359 now $299</a></strong><br>The Whoop 5.0/MG is an advanced recovery and sleep tracker designed for athletes. It tracks essential fitness and health metrics, including VO2 max, HRV status, blood oxygen levels, and sleep efficiency scores. Additionally, it delivers live ECG readings and monitors your overnight skin temperature to help optimize your training.It uses a subscription model instead of charging upfront for hardware. This Prime Day, the advanced annual fee is discounted to $299 (down from $359), while the entry-level subscription is $199.</p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker"><strong>Whoop 5.0/MG score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (3,600+ reviews)<a class="view-deal button" href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow" data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5" href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="RWo9DyHcP7kCeRzfRK2UCQ" name="Index Sleep Monitor 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RWo9DyHcP7kCeRzfRK2UCQ.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow" data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5">Smart Sleep Optimisation System: was $169.14 now $130.5</a></strong><br>The Garmin Index Sleep Monitor is a screenless, lightweight armband with a week-long battery and smart alarm. This dedicated tracker offers accurate sleep metrics, letting users charge their main smartwatch overnight without missing health data. Down from $169.14 to $130.50, it's one of the more budget-friendly options. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/sleep-tech/garmin-index-sleep-monitor-review"><strong>Garmin Index Sleep Monitor review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMW5K7P/ref=sr_1_1" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★(200+ reviews)<a class="view-deal button" href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow" data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5">View Deal</a></p></div><div class="product"><a data-dimension112="df999393-9749-428a-a766-8cf6ad377b7a" data-action="Deal Block" data-label="Watch 11" data-dimension48="Watch 11" data-dimension25="$279" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFPB851/ref=sr_1_1_sspa" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:118.67%;"><img id="zpTresKtjPzk37YdCtdZd9" name="Apple Watch 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zpTresKtjPzk37YdCtdZd9.jpg" mos="" align="middle" fullscreen="" width="1264" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Watch features the famous Sleep Score, a metric which scores sleep quality out of 100. The comfortable smart watch breaks down data into three key areas: sleep duration, bedtime consistency, and interruptions. This targeted breakdown helps users identify specific habits, such as irregular schedules, allowing them to make focused improvements to their routine. At Amazon, this 30% discount is selling fast, so Prime Day really is the best time to buy.<br><br><strong>Our </strong><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review" data-dimension112="df999393-9749-428a-a766-8cf6ad377b7a" data-action="Deal Block" data-label="Watch 11" data-dimension48="Watch 11" data-dimension25="$279"><strong>Apple Watch 11 review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFPB851/ref=sr_1_1_sspa" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★<strong>½</strong>(5,000+ reviews)<a class="view-deal button" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFPB851/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="df999393-9749-428a-a766-8cf6ad377b7a" data-action="Deal Block" data-label="Watch 11" data-dimension48="Watch 11" data-dimension25="$279">View Deal</a></p></div><div data-model-name="Oura Ring 4,Whoop MG,Garmin Index Sleep Monitor,Fitbit Charge 6,Apple Watch SE 3" data-widget-type="multimodelreview" data-widget-title="Today's best US sleep tracker deals" class="hawk-root"></div><h3 class="article-body__section" id="section-top-5-sleep-tracker-uk-prime-day-deals"><span>Top 5 sleep tracker UK Prime Day deals </span></h3><div class="product"><a data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£199.99" href="https://www.amazon.co.uk/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWB3WX/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:898px;"><p class="vanilla-image-block" style="padding-top:86.97%;"><img id="gZJwTTiTSeCKqGf7Yh5Y88" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gZJwTTiTSeCKqGf7Yh5Y88.png" mos="" align="middle" fullscreen="" width="898" height="781" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Oura Ring 4 is our top choice for sleep tracking thanks t its accurate data. comfortable and stylish fit, and an intuitive app featuring AI-assisted sleep coaching. The downside is a subscription fee of £5.99 a month, but we think it's worth it as it unlocks key features. (There's a first-month free trial.) Now 43% off at Amazon, this is your chance to save big this summer. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review" data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£199.99"><strong>Oura Ring 4 review score:</strong></a><strong> </strong>★★★★★<br><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FOura-Ring-Tracking-Wearable-Fitness%2Fdp%2FB0D9WW6RPJ%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-gb-1099464785133196552-20"><strong>User score</strong></a><strong>: </strong>★★★★ (3,800+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWB3WX/ref" target="_blank" rel="nofollow" data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£199.99">View Deal</a></p></div><div class="product"><a data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£88.99" href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ajAbuA6CSc4Ku3Nh53Jo9H" name="withings_sleep_tracker_square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ajAbuA6CSc4Ku3Nh53Jo9H.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Unlike every sleep tracker in this hub, the Withings Sleep Analyzer is actually a discreet sleep-tracking mat that slides under your mattress. It's great for anyone who finds wearables irritating or sleep-disrupting, and it even has sleep apnea detection. Now 32% off at Amazon, the Withings is a top pick if you need a sleep tracker under £100. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/sleep-tech/withings-sleep-analyzer-review" data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£88.99"><strong>Withings Sleep Analyser review score</strong></a><strong>: </strong>★★★★<br><a href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★ (2,300+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank" rel="nofollow" data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£88.99">View Deal</a></p></div><div class="product"><a data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99" href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:135.35%;"><img id="kvAhR7mf4oG5Nhd2ebsemS" name="Fitbit Inspire 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kvAhR7mf4oG5Nhd2ebsemS.jpg" mos="" align="middle" fullscreen="" width="679" height="919" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow" data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99">Inspire 3 Tracker: was £84.99 now £56.99</a></strong><br>Fitbit accurately tracks sleep onset and nightly wakeups. However, in-depth metrics—including guided sleep programs and the overall nightly sleep score (calculated from heart rate, restlessness, and sleep stages) — are locked behind a Fitbit Premium paywall of £7.99 a month, while free members only see total time asleep.</p><p><strong>Our </strong><a href="https://www.tomsguide.com/reviews/fitbit-inspire-3"><strong>Fitbit Inspire 3 review score</strong></a><strong>: </strong>★★★★<strong>½</strong><br><a href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (11,000+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow" data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99">View Deal</a></p></div><div class="product"><a data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="£186.15" href="https://www.amazon.co.uk/Apple-Smartwatch-Midnight-Aluminium-Resistant/dp/B0FQFJSX87/ref=sr_1_7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:113.25%;"><img id="hoKNR4oZqDAFmbNaVfpUYB" name="whoop 5.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hoKNR4oZqDAFmbNaVfpUYB.jpg" mos="" align="middle" fullscreen="" width="679" height="769" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Like all Apple Watch sleep trackers, the SE 3 provides a daily Sleep Score out of 100, and you can look at your sleep metrics on the intutive Health app. However, the Apple Watch SE 3 is the first model in Apple's entry-level range with <a href="https://www.tomsguide.com/wellness/smartwatches/apple-gets-fda-approval-to-bring-sleep-apnea-notifications-to-apple-watch" data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="£186.15">sleep apnea alerts</a>. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review"><strong>Apple Watch SE 3 review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.co.uk/Apple-Smartwatch-Midnight-Aluminium-Resistant/dp/B0FQFJSX87/ref=sr_1_7"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (469+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Apple-Smartwatch-Midnight-Aluminium-Resistant/dp/B0FQFJSX87/ref=sr_1_7" target="_blank" rel="nofollow" data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="£186.15">View Deal</a></p></div><div class="product"><a data-dimension112="c5bf573d-a5bd-49b0-b124-ddd58e0cb744" data-action="Deal Block" data-label="Index Sleep Monitor (S/M)" data-dimension48="Index Sleep Monitor (S/M)" data-dimension25="$132.26" href="https://www.amazon.co.uk/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMWRMHV/ref=sr_1_1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="RWo9DyHcP7kCeRzfRK2UCQ" name="Index Sleep Monitor 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RWo9DyHcP7kCeRzfRK2UCQ.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMWRMHV/ref=sr_1_1" target="_blank" rel="nofollow" data-dimension112="c5bf573d-a5bd-49b0-b124-ddd58e0cb744" data-action="Deal Block" data-label="Index Sleep Monitor (S/M)" data-dimension48="Index Sleep Monitor (S/M)" data-dimension25="$132.26">Index Sleep Monitor (S/M): was $149.99 now $132.26</a></strong><br>The Garmin Index Sleep Monitor is a rare, screenless upper-arm tracker that provides a comfortable, distraction-free alternative to watches. At just under $133, it precisely captures overnight sleep data at a fraction of the price of some sleep trackers. However, be warned that Bluetooth connectivity can be a problem. <br><br><strong>Our </strong><a href="https://www.tomsguide.com/wellness/sleep-tech/garmin-index-sleep-monitor-review"><strong>Garmin Index Sleep Monitor review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.co.uk/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMWRMHV/ref=sr_1_1"><strong>User score</strong></a><strong>: </strong>★★★<strong>½</strong> (200+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Garmin-Monitor-Advanced-Tracking-Recovery/dp/B0FCMWRMHV/ref=sr_1_1" target="_blank" rel="nofollow" data-dimension112="c5bf573d-a5bd-49b0-b124-ddd58e0cb744" data-action="Deal Block" data-label="Index Sleep Monitor (S/M)" data-dimension48="Index Sleep Monitor (S/M)" data-dimension25="$132.26">View Deal</a></p></div><div data-model-name="Oura Ring 4,Whoop MG,Garmin Index Sleep Monitor,Fitbit Charge 6,Apple Watch SE 3" data-widget-type="multimodelreview" data-widget-title="Today's best UK sleep tracker deals" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’m a smartwatch expert — and these are the 5 best Prime Day deals I actually recommend ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Amazon Prime Day, excuse me, week, is hit or miss when it comes to the <a href="https://www.tomsguide.com/live/news/savings-squad-prime-day-live-blog-amazon-best-buy-walmart">best tech deals</a>, and this time around is no exception. That said, as a smartwatch and wearables expert, I’ve scoured Amazon far and wide to hunt down the five best deals so far.</p><p>For my <a href="https://www.tomsguide.com/wellness/running/im-a-running-noob-doing-my-first-5k-heres-all-the-tech-im-using-to-cross-the-finish-line">beginner runners</a>, the easy-wearing, feature-packed Garmin Forerunner 165 is nearly <a href="https://www.amazon.com/Garmin-Forerunner-Smartwatch-Colorful-Training/dp/B0CT3SGHXL?th=1" target="_blank" rel="nofollow">50% off</a> on Amazon. Meanwhile, the latest Apple Watch Series 11 is <a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow">on sale for 30% off.</a></p><p>Find all details on these deals and my other favorites below.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>Fitbit Inspire 3: </strong><a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/" target="_blank" rel="nofollow"><strong>was $99 now $66 @ Amazon</strong></a></li><li><strong>Fitbit Charge 6: was </strong><a href="https://www.amazon.com/Fitbit-Charge-Fitness-Tracker-Google/dp/B0CC62ZG1M/" target="_blank" rel="nofollow"><strong>$159 now $85 @ Amazon</strong></a></li><li><strong>Garmin Forerunner 165: </strong><a href="https://www.amazon.com/Garmin-Forerunner-Smartwatch-Colorful-Training/dp/B0CT3SGHXL?th=1" target="_blank" rel="nofollow"><strong>was $249 now $129 @ Amazon</strong></a></li><li><strong>Apple Watch Series 11: </strong><a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow"><strong>was $399 now $279 @ Amazon</strong></a></li><li><strong>Garmin Instinct 3: </strong><a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSC8JF59/" target="_blank" rel="nofollow"><strong>was $449 now $299 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-best-prime-day-2026-smartwatch-deals"><span>Best Prime Day 2026 smartwatch deals </span></h3><div class="product"><a data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$66" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="wBB4ZfJMwwzqWzRfDKHY4d" name="Inspire3-comp" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wBB4ZfJMwwzqWzRfDKHY4d.jpg" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3" data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$66">Fitbit Inspire 3</a> is one of the <a href="https://www.tomsguide.com/best-picks/best-cheap-fitness-trackers">best fitness wearables</a> for folks who don’t like adding bulk to the wrist. Sure, it’s not as slender as the newer <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a>, but it does offer a small AMOLED screen, support for most common workout types, mirrored smartphone notifications, and detailed sleep insights. All for just $66.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/" target="_blank" rel="nofollow" data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$66">View Deal</a></p></div><div class="product"><a data-dimension112="e1c7fd44-01bc-4091-bd3d-c787f6796fc2" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85" href="https://www.amazon.com/Fitbit-Charge-Fitness-Tracker-Google/dp/B0CC62ZG1M/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XJdcnPAkGqaCLqcmrHCQib" name="Fitbit Charge 6.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XJdcnPAkGqaCLqcmrHCQib.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="e1c7fd44-01bc-4091-bd3d-c787f6796fc2" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85">Fitbit Charge 6 </a>is the most well-rounded fitness tracker in 2026, boasting onboard GPS, a bright, albeit small display, support for Google Maps and Google Wallet, nearly a week of battery, and mirrored notifications, all packed into a sleek, easy-wearing device. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Charge-Fitness-Tracker-Google/dp/B0CC62ZG1M/" target="_blank" rel="nofollow" data-dimension112="e1c7fd44-01bc-4091-bd3d-c787f6796fc2" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85">View Deal</a></p></div><div class="product"><a data-dimension112="0a319c0e-fdf5-402f-8122-6950af729d59" data-action="Deal Block" data-label="Forerunner 165" data-dimension48="Forerunner 165" data-dimension25="$129" href="https://www.amazon.com/Garmin-Forerunner-Smartwatch-Colorful-Training/dp/B0CT3SGHXL?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:675px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="7GxV2AK4CUU5iZBg96GNiF" name="Garmin Forerunner 165 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7GxV2AK4CUU5iZBg96GNiF.jpg" mos="" align="middle" fullscreen="" width="675" height="675" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-165" data-dimension112="0a319c0e-fdf5-402f-8122-6950af729d59" data-action="Deal Block" data-label="Forerunner 165" data-dimension48="Forerunner 165" data-dimension25="$129">Garmin Forerunner 165</a> is an excellent choice for folks who are just getting into running and looking to improve their speed, form, and endurance. Comfortable, lightweight, and easy to read in bright daylight, the Forerunner 165 offers ample physical controls, excellent battery life, reliable GPS, accurate heart rate tracking, and impressive sleep/workout recovery insights. <a class="view-deal button" href="https://www.amazon.com/Garmin-Forerunner-Smartwatch-Colorful-Training/dp/B0CT3SGHXL?th=1" target="_blank" rel="nofollow" data-dimension112="0a319c0e-fdf5-402f-8122-6950af729d59" data-action="Deal Block" data-label="Forerunner 165" data-dimension48="Forerunner 165" data-dimension25="$129">View Deal</a></p></div><div class="product"><a data-dimension112="afd8b980-25b6-4a68-befe-fd07526be52c" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$279" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:118.67%;"><img id="zpTresKtjPzk37YdCtdZd9" name="Apple Watch 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zpTresKtjPzk37YdCtdZd9.jpg" mos="" align="middle" fullscreen="" width="1264" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow" data-dimension112="afd8b980-25b6-4a68-befe-fd07526be52c" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$279">Watch Series 11: was $399 now $279</a></strong><br>The <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch 11</a> is one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> in 2026, especially if you want a well-rounded wearable packed to the brim with smart features, safety tools, health and fitness insights, and apps galore. I’m an especially big fan of the Series 11’s support for <a href="https://www.tomsguide.com/wellness/smartwatches/from-fall-detection-to-hypertension-10-apple-watch-innovations-that-changed-the-game#section-2025-hypertension-alerts">Hypertension Alerts</a>, something you’ll find on few other smartwatches. <a class="view-deal button" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow" data-dimension112="afd8b980-25b6-4a68-befe-fd07526be52c" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$279">View Deal</a></p></div><div class="product"><a data-dimension112="93b81301-1d88-4f53-8f48-8b99f556cd69" data-action="Deal Block" data-label="Instinct 3" data-dimension48="Instinct 3" data-dimension25="$229" href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSC8JF59/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1392px;"><p class="vanilla-image-block" style="padding-top:105.17%;"><img id="ftM9z5bRyFZM4QgKoEHhiZ" name="Screenshot 2025-01-21 at 4.21.06 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ftM9z5bRyFZM4QgKoEHhiZ.png" mos="" align="middle" fullscreen="" width="1392" height="1464" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I’m an <a href="https://www.tomsguide.com/wellness/smartwatches/im-a-smartwatch-expert-and-this-is-the-one-garmin-deal-im-recommending-most-on-prime-day" data-dimension112="93b81301-1d88-4f53-8f48-8b99f556cd69" data-action="Deal Block" data-label="Instinct 3" data-dimension48="Instinct 3" data-dimension25="$229">enormous fan</a> of the <a href="https://www.tomsguide.com/Garmin-Instinct-3-review">Garmin Instinct 3</a>. In fact, it’s my go-to wearable anytime I’m embarking on an outdoor adventure. Built like a tank with weeks of battery life and 100 meters of water resistance, the Instinct 3 is just as tough as you are. It also boasts rock-solid GPS location and elevation tracking performance, and sports a handy LED flashlight built into the case. <a class="view-deal button" href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSC8JF59/" target="_blank" rel="nofollow" data-dimension112="93b81301-1d88-4f53-8f48-8b99f556cd69" data-action="Deal Block" data-label="Instinct 3" data-dimension48="Instinct 3" data-dimension25="$229">View Deal</a></p></div><h3 class="article-body__section" id="section-we-re-tracking-all-the-best-prime-day-smartwatch-deals"><span>We're tracking all the best Prime Day smartwatch deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Wearables+%26+Fitness+Tech&price=60_&min_discount_ratio=0.95&offer_type=all&rows=4&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&show_countdown=true&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right {      right: 0;      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>\n        \x3C/div>\n      \x3C/div>\n    \x3C/div>          \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const encodedTag = encodeURIComponent(this.activeDealTag.toLowerCase().replace(/\s+/g, '-'));             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map(v => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              return `                \x3Ca href="${this.escapeHTML(linkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item">                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let existingChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             if (this.getViewMode() === 'carousel') {                 if (!existingChevron) {                     gridWrapper.insertAdjacentHTML('beforeend', '\n                 \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: \'smooth\'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>');                 }             } else {                 if (existingChevron) {                     existingChevron.remove();                 }             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/im-a-smartwatch-expert-and-these-are-the-5-best-prime-day-deals-i-actually-recommend</link>
                                                                            <description>
                            <![CDATA[ Save nearly 50% off these hand-picked smartwatch deals, including my favorite Garmins, Apple Watches, and Fitbits. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2yTDAcsy3rbtLtXnvNFojV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ifNkDfjTiBhiy4T7xaRX6a-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 25 Jun 2026 04:51:35 +0000</pubDate>                                                                                                                                <updated>Thu, 25 Jun 2026 04:53:33 +0000</updated>
                                                                                                                                            <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ifNkDfjTiBhiy4T7xaRX6a-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Garmin Instinct 3 and Apple Watch Series 11]]></media:description>                                                            <media:text><![CDATA[Close-up of the Garmin Instinct 3 and Apple Watch Series 11]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Garmin Instinct 3 and Apple Watch Series 11]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ifNkDfjTiBhiy4T7xaRX6a-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Amazon Prime Day, excuse me, week, is hit or miss when it comes to the <a href="https://www.tomsguide.com/live/news/savings-squad-prime-day-live-blog-amazon-best-buy-walmart">best tech deals</a>, and this time around is no exception. That said, as a smartwatch and wearables expert, I’ve scoured Amazon far and wide to hunt down the five best deals so far.</p><p>For my <a href="https://www.tomsguide.com/wellness/running/im-a-running-noob-doing-my-first-5k-heres-all-the-tech-im-using-to-cross-the-finish-line">beginner runners</a>, the easy-wearing, feature-packed Garmin Forerunner 165 is nearly <a href="https://www.amazon.com/Garmin-Forerunner-Smartwatch-Colorful-Training/dp/B0CT3SGHXL?th=1" target="_blank" rel="nofollow">50% off</a> on Amazon. Meanwhile, the latest Apple Watch Series 11 is <a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow">on sale for 30% off.</a></p><p>Find all details on these deals and my other favorites below.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>Fitbit Inspire 3: </strong><a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/" target="_blank" rel="nofollow"><strong>was $99 now $66 @ Amazon</strong></a></li><li><strong>Fitbit Charge 6: was </strong><a href="https://www.amazon.com/Fitbit-Charge-Fitness-Tracker-Google/dp/B0CC62ZG1M/" target="_blank" rel="nofollow"><strong>$159 now $85 @ Amazon</strong></a></li><li><strong>Garmin Forerunner 165: </strong><a href="https://www.amazon.com/Garmin-Forerunner-Smartwatch-Colorful-Training/dp/B0CT3SGHXL?th=1" target="_blank" rel="nofollow"><strong>was $249 now $129 @ Amazon</strong></a></li><li><strong>Apple Watch Series 11: </strong><a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow"><strong>was $399 now $279 @ Amazon</strong></a></li><li><strong>Garmin Instinct 3: </strong><a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSC8JF59/" target="_blank" rel="nofollow"><strong>was $449 now $299 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-best-prime-day-2026-smartwatch-deals"><span>Best Prime Day 2026 smartwatch deals </span></h3><div class="product"><a data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$66" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="wBB4ZfJMwwzqWzRfDKHY4d" name="Inspire3-comp" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wBB4ZfJMwwzqWzRfDKHY4d.jpg" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3" data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$66">Fitbit Inspire 3</a> is one of the <a href="https://www.tomsguide.com/best-picks/best-cheap-fitness-trackers">best fitness wearables</a> for folks who don’t like adding bulk to the wrist. Sure, it’s not as slender as the newer <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a>, but it does offer a small AMOLED screen, support for most common workout types, mirrored smartphone notifications, and detailed sleep insights. All for just $66.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/" target="_blank" rel="nofollow" data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$66">View Deal</a></p></div><div class="product"><a data-dimension112="e1c7fd44-01bc-4091-bd3d-c787f6796fc2" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85" href="https://www.amazon.com/Fitbit-Charge-Fitness-Tracker-Google/dp/B0CC62ZG1M/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XJdcnPAkGqaCLqcmrHCQib" name="Fitbit Charge 6.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XJdcnPAkGqaCLqcmrHCQib.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="e1c7fd44-01bc-4091-bd3d-c787f6796fc2" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85">Fitbit Charge 6 </a>is the most well-rounded fitness tracker in 2026, boasting onboard GPS, a bright, albeit small display, support for Google Maps and Google Wallet, nearly a week of battery, and mirrored notifications, all packed into a sleek, easy-wearing device. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Charge-Fitness-Tracker-Google/dp/B0CC62ZG1M/" target="_blank" rel="nofollow" data-dimension112="e1c7fd44-01bc-4091-bd3d-c787f6796fc2" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$85">View Deal</a></p></div><div class="product"><a data-dimension112="0a319c0e-fdf5-402f-8122-6950af729d59" data-action="Deal Block" data-label="Forerunner 165" data-dimension48="Forerunner 165" data-dimension25="$129" href="https://www.amazon.com/Garmin-Forerunner-Smartwatch-Colorful-Training/dp/B0CT3SGHXL?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:675px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="7GxV2AK4CUU5iZBg96GNiF" name="Garmin Forerunner 165 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7GxV2AK4CUU5iZBg96GNiF.jpg" mos="" align="middle" fullscreen="" width="675" height="675" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-165" data-dimension112="0a319c0e-fdf5-402f-8122-6950af729d59" data-action="Deal Block" data-label="Forerunner 165" data-dimension48="Forerunner 165" data-dimension25="$129">Garmin Forerunner 165</a> is an excellent choice for folks who are just getting into running and looking to improve their speed, form, and endurance. Comfortable, lightweight, and easy to read in bright daylight, the Forerunner 165 offers ample physical controls, excellent battery life, reliable GPS, accurate heart rate tracking, and impressive sleep/workout recovery insights. <a class="view-deal button" href="https://www.amazon.com/Garmin-Forerunner-Smartwatch-Colorful-Training/dp/B0CT3SGHXL?th=1" target="_blank" rel="nofollow" data-dimension112="0a319c0e-fdf5-402f-8122-6950af729d59" data-action="Deal Block" data-label="Forerunner 165" data-dimension48="Forerunner 165" data-dimension25="$129">View Deal</a></p></div><div class="product"><a data-dimension112="afd8b980-25b6-4a68-befe-fd07526be52c" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$279" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:118.67%;"><img id="zpTresKtjPzk37YdCtdZd9" name="Apple Watch 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zpTresKtjPzk37YdCtdZd9.jpg" mos="" align="middle" fullscreen="" width="1264" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow" data-dimension112="afd8b980-25b6-4a68-befe-fd07526be52c" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$279">Watch Series 11: was $399 now $279</a></strong><br>The <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch 11</a> is one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> in 2026, especially if you want a well-rounded wearable packed to the brim with smart features, safety tools, health and fitness insights, and apps galore. I’m an especially big fan of the Series 11’s support for <a href="https://www.tomsguide.com/wellness/smartwatches/from-fall-detection-to-hypertension-10-apple-watch-innovations-that-changed-the-game#section-2025-hypertension-alerts">Hypertension Alerts</a>, something you’ll find on few other smartwatches. <a class="view-deal button" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQFL8PZ5/" target="_blank" rel="nofollow" data-dimension112="afd8b980-25b6-4a68-befe-fd07526be52c" data-action="Deal Block" data-label="Watch Series 11" data-dimension48="Watch Series 11" data-dimension25="$279">View Deal</a></p></div><div class="product"><a data-dimension112="93b81301-1d88-4f53-8f48-8b99f556cd69" data-action="Deal Block" data-label="Instinct 3" data-dimension48="Instinct 3" data-dimension25="$229" href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSC8JF59/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1392px;"><p class="vanilla-image-block" style="padding-top:105.17%;"><img id="ftM9z5bRyFZM4QgKoEHhiZ" name="Screenshot 2025-01-21 at 4.21.06 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ftM9z5bRyFZM4QgKoEHhiZ.png" mos="" align="middle" fullscreen="" width="1392" height="1464" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I’m an <a href="https://www.tomsguide.com/wellness/smartwatches/im-a-smartwatch-expert-and-this-is-the-one-garmin-deal-im-recommending-most-on-prime-day" data-dimension112="93b81301-1d88-4f53-8f48-8b99f556cd69" data-action="Deal Block" data-label="Instinct 3" data-dimension48="Instinct 3" data-dimension25="$229">enormous fan</a> of the <a href="https://www.tomsguide.com/Garmin-Instinct-3-review">Garmin Instinct 3</a>. In fact, it’s my go-to wearable anytime I’m embarking on an outdoor adventure. Built like a tank with weeks of battery life and 100 meters of water resistance, the Instinct 3 is just as tough as you are. It also boasts rock-solid GPS location and elevation tracking performance, and sports a handy LED flashlight built into the case. <a class="view-deal button" href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSC8JF59/" target="_blank" rel="nofollow" data-dimension112="93b81301-1d88-4f53-8f48-8b99f556cd69" data-action="Deal Block" data-label="Instinct 3" data-dimension48="Instinct 3" data-dimension25="$229">View Deal</a></p></div><h3 class="article-body__section" id="section-we-re-tracking-all-the-best-prime-day-smartwatch-deals"><span>We're tracking all the best Prime Day smartwatch deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Wearables+%26+Fitness+Tech&price=60_&min_discount_ratio=0.95&offer_type=all&rows=4&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&show_countdown=true&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right {      right: 0;      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>\n        \x3C/div>\n      \x3C/div>\n    \x3C/div>          \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const encodedTag = encodeURIComponent(this.activeDealTag.toLowerCase().replace(/\s+/g, '-'));             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map(v => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              return `                \x3Ca href="${this.escapeHTML(linkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item">                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let existingChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             if (this.getViewMode() === 'carousel') {                 if (!existingChevron) {                     gridWrapper.insertAdjacentHTML('beforeend', '\n                 \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: \'smooth\'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>');                 }             } else {                 if (existingChevron) {                     existingChevron.remove();                 }             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I test sleep trackers for a living and these are the 4 best Prime Day deals on the Oura Ring, Whoop, Fitbit and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Amazon Prime Day is a great time to shop tech. While not all gadgets are good news for sleep (your smartphone could be what's robbing you of quality ZZZs), wearable tech from trusted brands certainly has a place in the bedroom. </p><p>Right now, you can <a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank"><strong>save 48% on the Oura Ring 4 at Amazon</strong></a> and <a href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank"><strong>take 33% off the Fitbit Versa 4 at Amazon</strong></a>. These devices can help you learn more about your sleep habits and supercharge your rest this summer. </p><p>I've spent the past two years on the hunt for the <a href="https://www.tomsguide.com/wellness/sleep-tech/best-sleep-tracker">best sleep trackers</a> on the market, putting various watches, rings, armbands, and mats through our sleep tracker testing methodology, and recording their sale prices along the way. </p><p>That means a) I know what design elements, software, and sensors make a good sleep tracker, and b) I can spot a worthy deal when I see one. So, here I'm zoning in on the best tracker deals in current<a href="https://www.tomsguide.com/wellness/mattresses/amazon-prime-day-mattress-deals#section-best-amazon-prime-day-sleep-tech-deals-2026"> Amazon Prime Day sleep sales</a> on both sides of the Atlantic right now.</p><h2 id="don-t-forget-your-prime-membership-2">Don't forget your Prime Membership...</h2><div class="product"><a data-dimension112="04f4cd62-5e03-410e-bcd0-39e63eedf558" data-action="Deal Block" data-label="Prime Membership" data-dimension48="Prime Membership" data-dimension25="$0" href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:57.15%;"><img id="k4vqt3qVs98dCVuWg7KzWJ" name="Amazon Prime logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/k4vqt3qVs98dCVuWg7KzWJ.jpg" mos="" align="middle" fullscreen="" width="4000" height="2286" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a free 30-day trial of Amazon Prime this week. As soon as you sign up, you'll get access to this year's Prime Day discounts on thousands of items, from mattresses to air fryers. Prime memberships (from $14.99 a month) also include access to Prime Video, Prime Reading, Prime Music, Amazon photo storage, plus free shipping.<a class="view-deal button" href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow" data-dimension112="04f4cd62-5e03-410e-bcd0-39e63eedf558" data-action="Deal Block" data-label="Prime Membership" data-dimension48="Prime Membership" data-dimension25="$0">View Deal</a></p></div><h3 class="article-body__section" id="section-top-4-sleep-tracker-us-prime-day-deals"><span>Top 4 sleep tracker US Prime Day deals </span></h3><p>From 48% off the world's top-rated smart ring (need we mention, it's the Oura Ring) to $38 savings on an up-and-coming, contact-free sleep monitor, here are the deals I recommend checking out if you're in America...</p><div class="product"><a data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:898px;"><p class="vanilla-image-block" style="padding-top:86.97%;"><img id="gZJwTTiTSeCKqGf7Yh5Y88" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gZJwTTiTSeCKqGf7Yh5Y88.png" mos="" align="middle" fullscreen="" width="898" height="781" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>You simply won't get a more accurate, more reliable sleep tracker than the Oura Ring 4. Although it's recently had an upgrade with the launch of the Ring 5, the Ring 4 is the one to shop with up to 48% off this Prime Day. That cuts the black, brushed silver, and stealth colorways to $226 (from $399) and the gold ring to $259 from $499. Meanwhile, the Ring 5 sits at MSRP of $399. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review" data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226"><strong>Oura Ring 4 review score:</strong></a><strong> </strong>★★★★★<br><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FOura-Ring-Tracking-Wearable-Fitness%2Fdp%2FB0D9WW6RPJ%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-gb-1099464785133196552-20"><strong>User score</strong></a><strong>: </strong>★★★★ (3,800+ reviews)<a class="view-deal button" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank" rel="nofollow" data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226">View Deal</a></p></div><div class="product"><a data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Versa 4 Smartwatch" data-dimension48="Versa 4 Smartwatch" data-dimension25="$134.95" href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EDKiptmAVfXg4nKuhNQAdA" name="fitbit versa 4 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EDKiptmAVfXg4nKuhNQAdA.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Fitbit can be described as the OG of sleep tracking and the brand remains the place to go if you want a health tracker for great value. The Fitbit Versa 4 Smartwatch has plenty of features geared towards sleep including sleep stage data, a smart alarm, do not disturb mode, and a monthly sleep profile that helps you understand your sleep tendencies. This Prime Day, Amazon are knocking a generous 33% off bringing the price of this well-rounded sleep and activity tracker down to $134.95 from $199.95.  </p><p><strong>Our </strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4" data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Versa 4 Smartwatch" data-dimension48="Versa 4 Smartwatch" data-dimension25="$134.95"><strong>Fitbit Versa 4 review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★<br><a href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (6,600+ reviews)<a class="view-deal button" href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank" rel="nofollow" data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Versa 4 Smartwatch" data-dimension48="Versa 4 Smartwatch" data-dimension25="$134.95">View Deal</a></p></div><div class="product"><a data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299" href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:113.25%;"><img id="hoKNR4oZqDAFmbNaVfpUYB" name="whoop 5.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hoKNR4oZqDAFmbNaVfpUYB.jpg" mos="" align="middle" fullscreen="" width="679" height="769" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow" data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299">5.0/MG Sleep and Activity Tracker (Life membership): was $359 now $299</a></strong><br>The Whoop 5.0/MG is our recommended sleep tracker for athletes looking to get a handle on and boost their recovery between training sessions. It's loaded with important fitness metrics from VO2 max readings to HRV status, blood oxygen levels, and sleep efficiency scores, alongside delivering ECG readings and overnight skin temperature. At Whoop, instead of paying for the hardware, you pay an <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-and-whoop-mg-just-announced-heres-everything-you-need-to-know">annual subscription fee</a> to use the device. The most advanced payment plan is on sale this Prime Day, with the annual fee down to $299 from $359; expect to pay $199 for the entry-level subscription. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker"><strong>Whoop 5.0/MG score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (3,600+ reviews)<a class="view-deal button" href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow" data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5" href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1080px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="yH9qB8btQTsjgVhRzsaEuL" name="SOMNDEEP sleep tracker" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yH9qB8btQTsjgVhRzsaEuL.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow" data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5">Smart Sleep Optimisation System: was $169.14 now $130.5</a></strong><br>If, understandably, you're not a fan of wearing smart watch or ring to bed, the SOMNDEEP sleep tracker is the perfect alternative. This subtle device sits at your bedside, cleverly detecting your heart rate, breathing patterns, sleep stages, body motion, and nighttime waking. This Prime Day, there's 17% off saving you over $29. Rest assured, the few customers who have given reviews say it was "installed in no time" and is "incredibly accurate."</p><p><a href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★★ (2 reviews)<a class="view-deal button" href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow" data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5">View Deal</a></p></div><h3 class="article-body__section" id="section-top-4-sleep-tracker-uk-prime-day-deals"><span>Top 4 sleep tracker UK Prime Day deals </span></h3><p>For UK folk, the best Prime Day deals feature Oura (shock), Fitbit and Withings. Read on for all the deets... </p><div class="product"><a data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£232" href="https://www.amazon.co.uk/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWB3WX/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:898px;"><p class="vanilla-image-block" style="padding-top:86.97%;"><img id="gZJwTTiTSeCKqGf7Yh5Y88" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gZJwTTiTSeCKqGf7Yh5Y88.png" mos="" align="middle" fullscreen="" width="898" height="781" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>No surprise here: The Oura Ring 4 is also great value in the UK this Prime Day. There's 34% off silver, black, and stealth models, cutting the cost to £232 from £349, and 46% off the gold colorway which now sits at £267 (was £499) —that's outstanding value if I've ever seen it. For the price, plus a £5.99 monthly fee, you get reliable sleep data and personalised sleep coaching via Oura's AI Advisor. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review" data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£232"><strong>Oura Ring 4 review score:</strong></a><strong> </strong>★★★★★<br><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FOura-Ring-Tracking-Wearable-Fitness%2Fdp%2FB0D9WW6RPJ%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-gb-1099464785133196552-20"><strong>User score</strong></a><strong>: </strong>★★★★ (3,800+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWB3WX/ref" target="_blank" rel="nofollow" data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£232">View Deal</a></p></div><div class="product"><a data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£76.5" href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ajAbuA6CSc4Ku3Nh53Jo9H" name="withings_sleep_tracker_square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ajAbuA6CSc4Ku3Nh53Jo9H.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This is a deal you don't want to miss. We rarely see money off at Withings and the current Prime Day deal knocks the Sleep Analyser to nigh on its lowest-ever price at £76.50 from £129.95 (£74.96 is the price to beat, so there's hardly anything in it). In short, if you want a discreet tracker that needn't be in contact with your body overnight, or clutter up your bedside, the Withings Sleep Analyser is a great pick. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/sleep-tech/withings-sleep-analyzer-review" data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£76.5"><strong>Withings Sleep Analyser review score</strong></a><strong>: </strong>★★★★<br><a href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★ (2,300+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank" rel="nofollow" data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£76.5">View Deal</a></p></div><div class="product"><a data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99" href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="wBB4ZfJMwwzqWzRfDKHY4d" name="Inspire3-comp" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wBB4ZfJMwwzqWzRfDKHY4d.jpg" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow" data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99">Inspire 3 Tracker: was £84.99 now £56.99</a></strong><br>Honestly, the wearable deals are popping off this Prime Day. The already great value Fitbit Inspire 3, which I tend to recommend to people looking for a basic, entry-level sleep tracker, is 33% off bringing the price to just $56.99 from $84.99. That doesn't mean it falls short in reliability, our reviewer says it accurately predicted the time she fell asleep and woke up at night, differentiating sleep time from laying in bed on her phone. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/reviews/fitbit-inspire-3"><strong>Fitbit Inspire 3 review score</strong></a><strong>: </strong>★★★★<strong>½</strong><br><a href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (11,000+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow" data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99">View Deal</a></p></div><div class="product"><a data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension48="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension25="£189" href="https://www.amazon.co.uk/WHOOP-Peak-Membership-Personalized-Healthspan-Black/dp/B0DY2SWV16/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:113.25%;"><img id="hoKNR4oZqDAFmbNaVfpUYB" name="whoop 5.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hoKNR4oZqDAFmbNaVfpUYB.jpg" mos="" align="middle" fullscreen="" width="679" height="769" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/WHOOP-Peak-Membership-Personalized-Healthspan-Black/dp/B0DY2SWV16/ref" target="_blank" rel="nofollow" data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension48="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension25="£189">MG/5.0 Sleep and Activity Tracker (Peak membership): was £229 now £189</a></strong><br>Here's a deal to give a whoop about: 17% off the Peak annual plan at Whoop. That cuts the cost of Whoop's mid-level subscription to £189 from £229. For the serious athletes among us, the Whoop 5.0/MG screen-less wristband is the most in depth, scientifically-backed sleep and recovery tracker you can buy. It may be a commercial device, but it's worn by elite athletes from Christiano Ronaldo to the Ferrari Formula One team who value the personalised sleep, strain, and recovery insights it delivers. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker"><strong>Whoop 5.0/MG score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (3,600+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/WHOOP-Peak-Membership-Personalized-Healthspan-Black/dp/B0DY2SWV16/ref" target="_blank" rel="nofollow" data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension48="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension25="£189">View Deal</a></p></div><div data-widget-type="multimodelreview" data-model-name="Oura Ring 4,Fitbit Versa,Fitbit Inspire 3,Garmin Index Sleep Monitor,Apple Watch 11" data-widget-title="Today's best sleep tracker deals near you..." class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep-tech/i-test-sleep-trackers-for-a-living-these-are-the-most-top-rated-prime-day-deals-on-oura-ring-whoop-fitbit-and-more</link>
                                                                            <description>
                            <![CDATA[ I've spent the year finding the most top-rated sleep trackers from Oura, Whoop, and Fitbit. Trust me, these are the Amazon Prime Day deals you don't want to miss... ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nEGJiA4crTVxwVxovvqvZC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/9iXdoRJgdgYtKm5BayMHyG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 24 Jun 2026 16:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sleep Tech]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Sleep]]></category>
                                                                                                                    <dc:creator><![CDATA[ Eve Davies ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/MyvW9VLArpyJoqfRp3GDDb.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/9iXdoRJgdgYtKm5BayMHyG-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A collage of Tom&#039;s Guide sleep tech reviewer wearing sleep trackers including the Oura Ring 4 (top left), the Whoop MG (top right), placing the Withings Sleep Analyser under mattress (bottom left), the Fitbit Versa 4 on woman&#039;s wrist (bottom right). ]]></media:description>                                                            <media:text><![CDATA[A collage of Tom&#039;s Guide sleep tech reviewer wearing sleep trackers including the Oura Ring 4 (top left), the Whoop MG (top right), placing the Withings Sleep Analyser under mattress (bottom left), the Fitbit Versa 4 on woman&#039;s wrist (bottom right). ]]></media:text>
                                <media:title type="plain"><![CDATA[A collage of Tom&#039;s Guide sleep tech reviewer wearing sleep trackers including the Oura Ring 4 (top left), the Whoop MG (top right), placing the Withings Sleep Analyser under mattress (bottom left), the Fitbit Versa 4 on woman&#039;s wrist (bottom right). ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/9iXdoRJgdgYtKm5BayMHyG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Amazon Prime Day is a great time to shop tech. While not all gadgets are good news for sleep (your smartphone could be what's robbing you of quality ZZZs), wearable tech from trusted brands certainly has a place in the bedroom. </p><p>Right now, you can <a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank"><strong>save 48% on the Oura Ring 4 at Amazon</strong></a> and <a href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank"><strong>take 33% off the Fitbit Versa 4 at Amazon</strong></a>. These devices can help you learn more about your sleep habits and supercharge your rest this summer. </p><p>I've spent the past two years on the hunt for the <a href="https://www.tomsguide.com/wellness/sleep-tech/best-sleep-tracker">best sleep trackers</a> on the market, putting various watches, rings, armbands, and mats through our sleep tracker testing methodology, and recording their sale prices along the way. </p><p>That means a) I know what design elements, software, and sensors make a good sleep tracker, and b) I can spot a worthy deal when I see one. So, here I'm zoning in on the best tracker deals in current<a href="https://www.tomsguide.com/wellness/mattresses/amazon-prime-day-mattress-deals#section-best-amazon-prime-day-sleep-tech-deals-2026"> Amazon Prime Day sleep sales</a> on both sides of the Atlantic right now.</p><h2 id="don-t-forget-your-prime-membership-2">Don't forget your Prime Membership...</h2><div class="product"><a data-dimension112="04f4cd62-5e03-410e-bcd0-39e63eedf558" data-action="Deal Block" data-label="Prime Membership" data-dimension48="Prime Membership" data-dimension25="$0" href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:57.15%;"><img id="k4vqt3qVs98dCVuWg7KzWJ" name="Amazon Prime logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/k4vqt3qVs98dCVuWg7KzWJ.jpg" mos="" align="middle" fullscreen="" width="4000" height="2286" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is offering a free 30-day trial of Amazon Prime this week. As soon as you sign up, you'll get access to this year's Prime Day discounts on thousands of items, from mattresses to air fryers. Prime memberships (from $14.99 a month) also include access to Prime Video, Prime Reading, Prime Music, Amazon photo storage, plus free shipping.<a class="view-deal button" href="https://www.amazon.com/amazonprime" target="_blank" rel="nofollow" data-dimension112="04f4cd62-5e03-410e-bcd0-39e63eedf558" data-action="Deal Block" data-label="Prime Membership" data-dimension48="Prime Membership" data-dimension25="$0">View Deal</a></p></div><h3 class="article-body__section" id="section-top-4-sleep-tracker-us-prime-day-deals"><span>Top 4 sleep tracker US Prime Day deals </span></h3><p>From 48% off the world's top-rated smart ring (need we mention, it's the Oura Ring) to $38 savings on an up-and-coming, contact-free sleep monitor, here are the deals I recommend checking out if you're in America...</p><div class="product"><a data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:898px;"><p class="vanilla-image-block" style="padding-top:86.97%;"><img id="gZJwTTiTSeCKqGf7Yh5Y88" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gZJwTTiTSeCKqGf7Yh5Y88.png" mos="" align="middle" fullscreen="" width="898" height="781" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>You simply won't get a more accurate, more reliable sleep tracker than the Oura Ring 4. Although it's recently had an upgrade with the launch of the Ring 5, the Ring 4 is the one to shop with up to 48% off this Prime Day. That cuts the black, brushed silver, and stealth colorways to $226 (from $399) and the gold ring to $259 from $499. Meanwhile, the Ring 5 sits at MSRP of $399. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review" data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226"><strong>Oura Ring 4 review score:</strong></a><strong> </strong>★★★★★<br><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FOura-Ring-Tracking-Wearable-Fitness%2Fdp%2FB0D9WW6RPJ%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-gb-1099464785133196552-20"><strong>User score</strong></a><strong>: </strong>★★★★ (3,800+ reviews)<a class="view-deal button" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVYHL6/ref" target="_blank" rel="nofollow" data-dimension112="a9e24260-6499-4626-936d-f29d76cfdb98" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$226">View Deal</a></p></div><div class="product"><a data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Versa 4 Smartwatch" data-dimension48="Versa 4 Smartwatch" data-dimension25="$134.95" href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EDKiptmAVfXg4nKuhNQAdA" name="fitbit versa 4 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EDKiptmAVfXg4nKuhNQAdA.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Fitbit can be described as the OG of sleep tracking and the brand remains the place to go if you want a health tracker for great value. The Fitbit Versa 4 Smartwatch has plenty of features geared towards sleep including sleep stage data, a smart alarm, do not disturb mode, and a monthly sleep profile that helps you understand your sleep tendencies. This Prime Day, Amazon are knocking a generous 33% off bringing the price of this well-rounded sleep and activity tracker down to $134.95 from $199.95.  </p><p><strong>Our </strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4" data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Versa 4 Smartwatch" data-dimension48="Versa 4 Smartwatch" data-dimension25="$134.95"><strong>Fitbit Versa 4 review score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★<br><a href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (6,600+ reviews)<a class="view-deal button" href="https://www.amazon.com/dp/B0B4MZWCXK/ref" target="_blank" rel="nofollow" data-dimension112="84996d86-9b43-47d8-a859-2b2bfa406acb" data-action="Deal Block" data-label="Versa 4 Smartwatch" data-dimension48="Versa 4 Smartwatch" data-dimension25="$134.95">View Deal</a></p></div><div class="product"><a data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299" href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:113.25%;"><img id="hoKNR4oZqDAFmbNaVfpUYB" name="whoop 5.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hoKNR4oZqDAFmbNaVfpUYB.jpg" mos="" align="middle" fullscreen="" width="679" height="769" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow" data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299">5.0/MG Sleep and Activity Tracker (Life membership): was $359 now $299</a></strong><br>The Whoop 5.0/MG is our recommended sleep tracker for athletes looking to get a handle on and boost their recovery between training sessions. It's loaded with important fitness metrics from VO2 max readings to HRV status, blood oxygen levels, and sleep efficiency scores, alongside delivering ECG readings and overnight skin temperature. At Whoop, instead of paying for the hardware, you pay an <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-and-whoop-mg-just-announced-heres-everything-you-need-to-know">annual subscription fee</a> to use the device. The most advanced payment plan is on sale this Prime Day, with the annual fee down to $299 from $359; expect to pay $199 for the entry-level subscription. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker"><strong>Whoop 5.0/MG score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (3,600+ reviews)<a class="view-deal button" href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref" target="_blank" rel="nofollow" data-dimension112="f84a5f9b-94de-466d-bbb5-bc0d4e896c9b" data-action="Deal Block" data-label="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension48="5.0/MG Sleep and Activity Tracker (Life membership)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5" href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1080px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="yH9qB8btQTsjgVhRzsaEuL" name="SOMNDEEP sleep tracker" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yH9qB8btQTsjgVhRzsaEuL.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow" data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5">Smart Sleep Optimisation System: was $169.14 now $130.5</a></strong><br>If, understandably, you're not a fan of wearing smart watch or ring to bed, the SOMNDEEP sleep tracker is the perfect alternative. This subtle device sits at your bedside, cleverly detecting your heart rate, breathing patterns, sleep stages, body motion, and nighttime waking. This Prime Day, there's 17% off saving you over $29. Rest assured, the few customers who have given reviews say it was "installed in no time" and is "incredibly accurate."</p><p><a href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★★ (2 reviews)<a class="view-deal button" href="https://www.amazon.com/SOMNDEEP-Contactless-Breathing-Non-Wearable-Suggestion/dp/B0GS1F9YPD/ref" target="_blank" rel="nofollow" data-dimension112="c5798819-72e6-4880-aadd-8a2f1bba6829" data-action="Deal Block" data-label="Smart Sleep Optimisation System" data-dimension48="Smart Sleep Optimisation System" data-dimension25="$130.5">View Deal</a></p></div><h3 class="article-body__section" id="section-top-4-sleep-tracker-uk-prime-day-deals"><span>Top 4 sleep tracker UK Prime Day deals </span></h3><p>For UK folk, the best Prime Day deals feature Oura (shock), Fitbit and Withings. Read on for all the deets... </p><div class="product"><a data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£232" href="https://www.amazon.co.uk/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWB3WX/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:898px;"><p class="vanilla-image-block" style="padding-top:86.97%;"><img id="gZJwTTiTSeCKqGf7Yh5Y88" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gZJwTTiTSeCKqGf7Yh5Y88.png" mos="" align="middle" fullscreen="" width="898" height="781" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>No surprise here: The Oura Ring 4 is also great value in the UK this Prime Day. There's 34% off silver, black, and stealth models, cutting the cost to £232 from £349, and 46% off the gold colorway which now sits at £267 (was £499) —that's outstanding value if I've ever seen it. For the price, plus a £5.99 monthly fee, you get reliable sleep data and personalised sleep coaching via Oura's AI Advisor. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review" data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£232"><strong>Oura Ring 4 review score:</strong></a><strong> </strong>★★★★★<br><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FOura-Ring-Tracking-Wearable-Fitness%2Fdp%2FB0D9WW6RPJ%3Ftag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-gb-1099464785133196552-20"><strong>User score</strong></a><strong>: </strong>★★★★ (3,800+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWB3WX/ref" target="_blank" rel="nofollow" data-dimension112="ff0d2fa9-e9ef-4fa6-92d0-2834216877fc" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="£232">View Deal</a></p></div><div class="product"><a data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£76.5" href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ajAbuA6CSc4Ku3Nh53Jo9H" name="withings_sleep_tracker_square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ajAbuA6CSc4Ku3Nh53Jo9H.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This is a deal you don't want to miss. We rarely see money off at Withings and the current Prime Day deal knocks the Sleep Analyser to nigh on its lowest-ever price at £76.50 from £129.95 (£74.96 is the price to beat, so there's hardly anything in it). In short, if you want a discreet tracker that needn't be in contact with your body overnight, or clutter up your bedside, the Withings Sleep Analyser is a great pick. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/sleep-tech/withings-sleep-analyzer-review" data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£76.5"><strong>Withings Sleep Analyser review score</strong></a><strong>: </strong>★★★★<br><a href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★ (2,300+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Withings-Sleep-Analyzer-Clinically-Under-Mattress/dp/B084HS3HRD/ref" target="_blank" rel="nofollow" data-dimension112="c8c39a3e-62ab-4c0a-9273-24960703ce7b" data-action="Deal Block" data-label="Sleep Analyser" data-dimension48="Sleep Analyser" data-dimension25="£76.5">View Deal</a></p></div><div class="product"><a data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99" href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="wBB4ZfJMwwzqWzRfDKHY4d" name="Inspire3-comp" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wBB4ZfJMwwzqWzRfDKHY4d.jpg" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow" data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99">Inspire 3 Tracker: was £84.99 now £56.99</a></strong><br>Honestly, the wearable deals are popping off this Prime Day. The already great value Fitbit Inspire 3, which I tend to recommend to people looking for a basic, entry-level sleep tracker, is 33% off bringing the price to just $56.99 from $84.99. That doesn't mean it falls short in reliability, our reviewer says it accurately predicted the time she fell asleep and woke up at night, differentiating sleep time from laying in bed on her phone. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/reviews/fitbit-inspire-3"><strong>Fitbit Inspire 3 review score</strong></a><strong>: </strong>★★★★<strong>½</strong><br><a href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (11,000+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/Fitbit-Activity-6-months-Membership-Readiness/dp/B0B6WRFY5S/ref" target="_blank" rel="nofollow" data-dimension112="e022af70-5608-4887-b5be-cbaf0d66a6e1" data-action="Deal Block" data-label="Inspire 3 Tracker" data-dimension48="Inspire 3 Tracker" data-dimension25="£56.99">View Deal</a></p></div><div class="product"><a data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension48="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension25="£189" href="https://www.amazon.co.uk/WHOOP-Peak-Membership-Personalized-Healthspan-Black/dp/B0DY2SWV16/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:113.25%;"><img id="hoKNR4oZqDAFmbNaVfpUYB" name="whoop 5.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hoKNR4oZqDAFmbNaVfpUYB.jpg" mos="" align="middle" fullscreen="" width="679" height="769" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/WHOOP-Peak-Membership-Personalized-Healthspan-Black/dp/B0DY2SWV16/ref" target="_blank" rel="nofollow" data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension48="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension25="£189">MG/5.0 Sleep and Activity Tracker (Peak membership): was £229 now £189</a></strong><br>Here's a deal to give a whoop about: 17% off the Peak annual plan at Whoop. That cuts the cost of Whoop's mid-level subscription to £189 from £229. For the serious athletes among us, the Whoop 5.0/MG screen-less wristband is the most in depth, scientifically-backed sleep and recovery tracker you can buy. It may be a commercial device, but it's worn by elite athletes from Christiano Ronaldo to the Ferrari Formula One team who value the personalised sleep, strain, and recovery insights it delivers. </p><p><strong>Our </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker"><strong>Whoop 5.0/MG score</strong></a><strong>:</strong><a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><strong> </strong></a>★★★★<br><a href="https://www.amazon.com/WHOOP-Life-12-Month-Membership-Pressure/dp/B0DY2PB7RB/ref"><strong>User score</strong></a><strong>: </strong>★★★★<strong>½</strong> (3,600+ reviews)<a class="view-deal button" href="https://www.amazon.co.uk/WHOOP-Peak-Membership-Personalized-Healthspan-Black/dp/B0DY2SWV16/ref" target="_blank" rel="nofollow" data-dimension112="765010b2-a880-434c-a4f5-d9730656c810" data-action="Deal Block" data-label="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension48="MG/5.0 Sleep and Activity Tracker (Peak membership)" data-dimension25="£189">View Deal</a></p></div><div data-widget-type="multimodelreview" data-model-name="Oura Ring 4,Fitbit Versa,Fitbit Inspire 3,Garmin Index Sleep Monitor,Apple Watch 11" data-widget-title="Today's best sleep tracker deals near you..." class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I test wearable tech for a living — and my favorite fitness tracker is nearly 40% off right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The new<a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review"> Fitbit Air</a> may be the talk of the town, but the Fitbit Charge 6 is actually a more competent health and fitness tracker thanks to onboard GPS and support for ECG readings. Better yet, it’s currently selling for the same price as the Fitbit Air. </p><p>The Fitbit Charge 6 is roughly the same size as the Fitbit Air but features a small AMOLED touchscreen. Normally priced at $159, you can score the <a href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow">Fitbit Charge 6 for just $99 via Amazon</a> right now. That’s nearly 40% off retail and one of my favorite early <a href="https://www.tomsguide.com/news/best-prime-day-deals-and-sales">Prime Day deals</a>.</p><h3 class="article-body__section" id="section-epic-fitbit-charge-6-deal"><span>Epic Fitbit Charge 6 deal</span></h3><div class="product"><a data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:119.29%;"><img id="cT9DuD2RvghnQbp7ggZByi" name="FitbitCharge6-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cT9DuD2RvghnQbp7ggZByi.jpg" mos="" align="middle" fullscreen="" width="679" height="810" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Charge 6 is one of the most well-rounded fitness trackers you can buy in 2026, especially when it’s on sale for 38% off. Comfortable, accurate, and long-lasting, it tracks a wide range of workout types while providing detailed sleep and wellness insights. <a class="view-deal button" href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><h3 class="article-body__section" id="section-one-of-the-best-fitness-trackers-i-ve-tested"><span>One of the best Fitness trackers I've tested</span></h3><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> may have arrived in late 2023, but it remains one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers </a>you can buy in 2026. </p><p>I frequently recommend it because it’s lightweight and comfortable, offers accurate health and fitness tracking insights, lasts nearly a week on a single charge, and has just the right amount of non-holistic smart features. These include support for Google Maps, Google Wallet, and mirrored smartphone notifications. </p><p>Plus, onboard GPS means you don’t need to carry a paired smartphone for location-based data when logging an outdoor workout. </p><p>How accurate is the Fitbit Charge 6’s fitness tracking performance? When I tested it <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-000-steps-with-the-apple-watch-10-vs-fitbit-charge-6-this-device-was-more-accurate">versus the Apple Watch 10</a>, a much pricier wearable, it proved nearly as precise. And <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-6-500-steps-with-the-fitbit-charge-6-vs-pixel-watch-3-and-im-surprised-by-the-winner">versus the Pixel Watch 3</a>, the Charge 6 bested its Google-built sibling. So, yeah, I’d say it’s pretty darn accurate. </p><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Wearables+%26+Fitness+Tech&min_discount_ratio=0.95&offer_type=all&view_mode=carousel&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right {      right: 0;      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>\n        \x3C/div>\n      \x3C/div>\n    \x3C/div>          \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                if(!r) return;                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const encodedTag = encodeURIComponent(this.activeDealTag.toLowerCase().replace(/\s+/g, '-'));             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map(v => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              return `                \x3Ca href="${this.escapeHTML(linkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item">                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let existingChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             if (this.getViewMode() === 'carousel') {                 if (!existingChevron) {                     gridWrapper.insertAdjacentHTML('beforeend', '\n                 \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: \'smooth\'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>');                 }             } else {                 if (existingChevron) {                     existingChevron.remove();                 }             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/i-test-wearable-tech-for-a-living-and-my-favorite-fitness-tracker-is-nearly-40-percent-off-right-now</link>
                                                                            <description>
                            <![CDATA[ The Fitbit Charge 6 is one of the best fitness trackers I've ever tested, and now is a great time to buy one, thanks to this epic price reduction. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">N9DRR8bTcmMGc4qeT8h6qH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/apvvNRr9FpJt4KdmJD4j5Q-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 18 Jun 2026 18:23:20 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/apvvNRr9FpJt4KdmJD4j5Q-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Charge 6 on an orange strap next to a Tom&#039;s Guide deals badge]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Charge 6 on an orange strap next to a Tom&#039;s Guide deals badge]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Charge 6 on an orange strap next to a Tom&#039;s Guide deals badge]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/apvvNRr9FpJt4KdmJD4j5Q-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The new<a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review"> Fitbit Air</a> may be the talk of the town, but the Fitbit Charge 6 is actually a more competent health and fitness tracker thanks to onboard GPS and support for ECG readings. Better yet, it’s currently selling for the same price as the Fitbit Air. </p><p>The Fitbit Charge 6 is roughly the same size as the Fitbit Air but features a small AMOLED touchscreen. Normally priced at $159, you can score the <a href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow">Fitbit Charge 6 for just $99 via Amazon</a> right now. That’s nearly 40% off retail and one of my favorite early <a href="https://www.tomsguide.com/news/best-prime-day-deals-and-sales">Prime Day deals</a>.</p><h3 class="article-body__section" id="section-epic-fitbit-charge-6-deal"><span>Epic Fitbit Charge 6 deal</span></h3><div class="product"><a data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:119.29%;"><img id="cT9DuD2RvghnQbp7ggZByi" name="FitbitCharge6-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cT9DuD2RvghnQbp7ggZByi.jpg" mos="" align="middle" fullscreen="" width="679" height="810" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Charge 6 is one of the most well-rounded fitness trackers you can buy in 2026, especially when it’s on sale for 38% off. Comfortable, accurate, and long-lasting, it tracks a wide range of workout types while providing detailed sleep and wellness insights. <a class="view-deal button" href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="7e5e3c2c-86fe-4fdf-ab9e-2b09bdb9897a" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><h3 class="article-body__section" id="section-one-of-the-best-fitness-trackers-i-ve-tested"><span>One of the best Fitness trackers I've tested</span></h3><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> may have arrived in late 2023, but it remains one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers </a>you can buy in 2026. </p><p>I frequently recommend it because it’s lightweight and comfortable, offers accurate health and fitness tracking insights, lasts nearly a week on a single charge, and has just the right amount of non-holistic smart features. These include support for Google Maps, Google Wallet, and mirrored smartphone notifications. </p><p>Plus, onboard GPS means you don’t need to carry a paired smartphone for location-based data when logging an outdoor workout. </p><p>How accurate is the Fitbit Charge 6’s fitness tracking performance? When I tested it <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-000-steps-with-the-apple-watch-10-vs-fitbit-charge-6-this-device-was-more-accurate">versus the Apple Watch 10</a>, a much pricier wearable, it proved nearly as precise. And <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-6-500-steps-with-the-fitbit-charge-6-vs-pixel-watch-3-and-im-surprised-by-the-winner">versus the Pixel Watch 3</a>, the Charge 6 bested its Google-built sibling. So, yeah, I’d say it’s pretty darn accurate. </p><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Wearables+%26+Fitness+Tech&min_discount_ratio=0.95&offer_type=all&view_mode=carousel&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right {      right: 0;      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>\n        \x3C/div>\n      \x3C/div>\n    \x3C/div>          \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                if(!r) return;                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const encodedTag = encodeURIComponent(this.activeDealTag.toLowerCase().replace(/\s+/g, '-'));             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map(v => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              return `                \x3Ca href="${this.escapeHTML(linkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item">                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let existingChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             if (this.getViewMode() === 'carousel') {                 if (!existingChevron) {                     gridWrapper.insertAdjacentHTML('beforeend', '\n                 \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: \'smooth\'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>');                 }             } else {                 if (existingChevron) {                     existingChevron.remove();                 }             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Fitbit Air vs Fitbit Charge 6 — which top-performing Fitness tracker wins? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> and <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> are two of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026. But is one better than the other? That truly depends on your budget, the number of smart features, and the type of user experience you desire.</p><p>To help you better understand the differences between 2023's Fitbit Charge 6 and 2026's Fitbit Air, I've compared the two across five categories, including cost, design, health and fitness tracking features, smart features, and battery life. </p>        <div class="featured_product_block featured_block_versus" data-id="1df8a721-a22a-4452-9976-e8274076b86c">            <a href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV/" data-model-name="Fitbit Air" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:119.29%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/y8LR2TSKeacYvTkKdrs9oA.jpg" alt="Fitbit Air"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Fitbit</div>                    <div class="featured__title">Air</div>                                    </div>                <div class="subtitle__description">                                <div class="stars__reviews"><span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" class="chunk rating"><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star half"></span><meta itemprop="bestRating" content="100.0" /><meta itemprop="worstRating" content="0.0" /><meta itemprop="ratingValue" content="90" /></span></div>                                        <p><p>The Fitbit Air is my favorite distraction-free fitness tracker in 2026, with no screen,  buttons or notifications to slow you down. Battery life is good for up to a week, and health and fitness tracking performance proved reliable in testing. However, it lacks onboard GPS, so you'll need to carry a smartphone for location data when working out outdoors.  </p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="1da96b6e-3a0e-4977-8b58-c86d2e6b4006">            <a href="https://www.bestbuy.com/product/google-fitbit-charge-6-advanced-fitness-health-tracker-works-with-android-and-ios-obsidian-2023/J39TC3VHT6/sku/6559662" data-model-name="Fitbit Charge 6" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:119.29%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cT9DuD2RvghnQbp7ggZByi.jpg" alt="Fitbit Charge 6 on an orange strap"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Fitbit</div>                    <div class="featured__title">Charge 6</div>                                    </div>                <div class="subtitle__description">                                <div class="stars__reviews"><span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" class="chunk rating"><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star half"></span><meta itemprop="bestRating" content="100.0" /><meta itemprop="worstRating" content="0.0" /><meta itemprop="ratingValue" content="90" /></span></div>                                        <p><p>The Fitbit Charge 6 may have debuted in 2023, but it's still one of the most well-rounded fitness wearables money can buy in 2026 thanks to reliable tracking performance, excellent battery life, and just the right amount of smart features. Easy-wearing, it also boasts onboard GPS, so you don't need a smartphone for location-based fitness insights. </p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-specs-compared"><span>Fitbit Air vs Fitbit Charge 6: Specs compared</span></h3><div ><table><caption>Fitbit Air vs Fitbit Charge 6</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Fitbit Charge 6</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$99</p></td><td  ><p>$159</p></td></tr><tr><td class="firstcol " ><p><strong>Launch date</strong></p></td><td  ><p>May, 2026</p></td><td  ><p>Sept, 2023</p></td></tr><tr><td class="firstcol " ><p><strong>Compatibility </strong></p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>34.9 x 17 x 8.9 mm</p></td><td  ><p>11.4 x 22.9 x 10.2 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight w/ strap</strong></p></td><td  ><p>12 g</p></td><td  ><p>15 g</p></td></tr><tr><td class="firstcol " ><p><strong>Display </strong></p></td><td  ><p>n/a</p></td><td  ><p>1.04-inch AMOLED</p></td></tr><tr><td class="firstcol " ><p><strong>Sensors</strong></p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, ECG, Skin temp, Accelerometer, Gyroscope, NFC</p></td></tr><tr><td class="firstcol " ><p><strong>GPS</strong></p></td><td  ><p>No</p></td><td  ><p>Yes</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life</strong></p></td><td  ><p>Up to 7 days</p></td><td  ><p>Up to 6 days</p></td></tr><tr><td class="firstcol " ><p><strong>Water resistance </strong></p></td><td  ><p>50 meters</p></td><td  ><p>50 meters</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-cost"><span>Fitbit Air vs Fitbit Charge 6: Cost</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3661px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="rRWHyTSbAQrti6zaLozV97" name="IMG_9308.jpg" alt="run settings on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/rRWHyTSbAQrti6zaLozV97.jpg" mos="" align="middle" fullscreen="" width="3661" height="2059" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The newer Fitbit Air is $99, while 2023's Fitbit Charge 6 is $159. However, the latter goes on sale frequently. For example, you can pick up the Charge 6 right now for just <a href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV/" target="_blank" rel="nofollow">$99 via Amazon</a>. That said, the Fitbit Air is consistently cheaper than the Charge 6, so it wins this category.</p><p><em><strong>Winner: </strong></em><em>Fitbit Air</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-design"><span>Fitbit Air vs Fitbit Charge 6: design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4923px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8TnS5oF2ouHVYSDY3B8TxM" name="FitbitAir-rev-05" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/8TnS5oF2ouHVYSDY3B8TxM.jpg" mos="" align="middle" fullscreen="" width="4923" height="2769" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Both fitness trackers are lightweight, comfortable wearables with modest footprints. While the Fitbit Air is screen-free and button-free, providing a no-distractions health and fitness tracking experience, the Charge 6 offers a small 1.04-inch AMOLED touchscreen and haptic side buttons.</p><p>Does this make the Charge 6 a better tracker than the Air? That depends on whether you prefer a more-connected device capable of mirroring phone notifications and displaying stats, or one designed with a set-it-and-forget-it mentality.</p><p>Either way, the Charge 6 and Air each proved to be well-built in our testing, with respectable water resistance ratings of 50 meters. The Air is, of course, a bit more understated due to the lack of a screen; it's also a bit smaller. These factors don't necessarily make it a better-designed device, though.</p><p><em><strong>Winner: </strong></em><em>draw</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-charge-6-health-and-fitness-tracking"><span>Fitbit Air vs Charge 6: Health and fitness tracking</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5000px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="FPN2oVhyGKaa4tcqQn5Nm4" name="Fitbit-Charge6" alt="Close-up showing the back of the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/FPN2oVhyGKaa4tcqQn5Nm4.jpg" mos="" align="middle" fullscreen="" width="5000" height="2812" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air proved to be a competent fitness tracker when pitted head-to-head against other popular wearables, like <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-500-steps-with-the-fitbit-air-vs-fitbit-inspire-3-and-theres-a-clear-winner">versus the Fitbit Inspire 3</a>. However, it lacks onboard GPS, so you need to carry your paired phone to ensure metrics like distance, pace, and elevation gain are recorded accurately. </p><p>Not a fan of jogging with a bulky smartphone in your pocket? I feel you. In that case, the GPS-sporting Fitbit Charge 6 is going to be the better tracker for you.</p><p>The Charge 6 has other advantages over the Fitbit Air, most notably, the ability to record ECGs.  When it comes to tracking workouts, both devices support over 40 modes with automatic detection and tracking for basic workouts like walks, runs, and bike rides.</p><p>Of course, thanks to its screen, users can manually start a workout on the Charge 6 with just a few taps, while Fitbit Air users will need to make a trip to the Google Health app on their paired phone.</p><p><em><strong>Winner:</strong></em><em> Fitbit Charge 6</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-smart-features"><span>Fitbit Air vs Fitbit Charge 6: Smart features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6556px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TnsKN5QkXMtSHCm4Zj8EGa" name="Fitbit Charge 6 Lifestyle Cycling Porcelain crop copy.jpg" alt="a photo of the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/TnsKN5QkXMtSHCm4Zj8EGa.jpg" mos="" align="middle" fullscreen="" width="6556" height="3688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Fitbit)</span></figcaption></figure><p>This one isn't even close. When it comes to support for smart features, the Fitbit Charge 6 blows the Fitbit Air out of the water. However, the Charge 6 doesn't offer anywhere near the level of smarts you'll get from the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatch</a> models in 2026, like the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch Series 11</a> or <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Google Pixel Watch 4</a>.</p><p>Still, the Charge 6 has NFC, so you can tap-to-pay using Google Wallet. It also supports a small selection of handy Google apps, like Google Maps and YouTube Music. There's no onboard music storage, but you can control media playback from your paired device.</p><p>The Charge 6 additionally mirrors smartphone notifications for both Android and iOS users.  </p><p><em><strong>Winner:</strong></em><em> Fitbit Charge 6</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-battery-life"><span>Fitbit Air vs Fitbit Charge 6: Battery life</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>The Fitbit Charge 6 is rated to last up to six days per charge on average, while the Fitbit Air is billed for up to seven days per charge. In my testing, both ratings proved accurate, making the Fitbit Air the winner of this category.</p><p><em><strong>Winner:</strong></em><em> Fitbit Air</em></p><h3 class="article-body__section" id="section-verdict"><span>Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When choosing between the Fitbit Air and the Fitbit Charge 6, the ultimate question to ask yourself is, "Do I want a screen-free and distraction-free fitness tracker or a more connected device?"</p><p>Put another way, the Fitbit Air is a wearable that you simply, well, wear and let it do its thing; the Charge 6 is one you interact with via a small touchscreen and haptic buttons. </p><p>Both are reliable, comfortable, and long-lasting. Of course, the Charge 6 has the advantage of onboard GPS, which is why I ultimately prefer it to the Air, along with NFC. But if you're not big on outdoor workouts or using tap-to-pay from this wrist, this may not matter much to you. </p><p><em><strong>Overall winner: </strong></em><em>Draw</em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYxboO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYxboO.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs Fitbit Inspire 3 — which $99 fitness tracker wins?</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-all-3-fitbit-air-accessory-bands-and-theres-a-clear-winner">I tested all 3 Fitbit Air accessory bands — and there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">I've been using the Fitbit Air for over a week, and my favorite feature has completely changed the way I wake up</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-charge-6-which-top-performing-fitness-tracker-wins</link>
                                                                            <description>
                            <![CDATA[ Google's new $99 Fitbit Air has a lot in common with 2023's Fitbit Charge 6. Here's how the two compare head-to-head regarding features, battery, cost, and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jkD849NjczvU65BjA3tYaH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Rbh4AAXBsxGF2read2LhJJ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 18 Jun 2026 10:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Rbh4AAXBsxGF2read2LhJJ-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Air and Fitbit Charge 6 on a user&#039;s wrist against a blue background]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Air and Fitbit Charge 6 on a user&#039;s wrist against a blue background]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Air and Fitbit Charge 6 on a user&#039;s wrist against a blue background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Rbh4AAXBsxGF2read2LhJJ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> and <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> are two of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026. But is one better than the other? That truly depends on your budget, the number of smart features, and the type of user experience you desire.</p><p>To help you better understand the differences between 2023's Fitbit Charge 6 and 2026's Fitbit Air, I've compared the two across five categories, including cost, design, health and fitness tracking features, smart features, and battery life. </p>        <div class="featured_product_block featured_block_versus" data-id="1df8a721-a22a-4452-9976-e8274076b86c">            <a href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV/" data-model-name="Fitbit Air" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:119.29%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/y8LR2TSKeacYvTkKdrs9oA.jpg" alt="Fitbit Air"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Fitbit</div>                    <div class="featured__title">Air</div>                                    </div>                <div class="subtitle__description">                                <div class="stars__reviews"><span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" class="chunk rating"><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star half"></span><meta itemprop="bestRating" content="100.0" /><meta itemprop="worstRating" content="0.0" /><meta itemprop="ratingValue" content="90" /></span></div>                                        <p><p>The Fitbit Air is my favorite distraction-free fitness tracker in 2026, with no screen,  buttons or notifications to slow you down. Battery life is good for up to a week, and health and fitness tracking performance proved reliable in testing. However, it lacks onboard GPS, so you'll need to carry a smartphone for location data when working out outdoors.  </p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="1da96b6e-3a0e-4977-8b58-c86d2e6b4006">            <a href="https://www.bestbuy.com/product/google-fitbit-charge-6-advanced-fitness-health-tracker-works-with-android-and-ios-obsidian-2023/J39TC3VHT6/sku/6559662" data-model-name="Fitbit Charge 6" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:119.29%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cT9DuD2RvghnQbp7ggZByi.jpg" alt="Fitbit Charge 6 on an orange strap"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Fitbit</div>                    <div class="featured__title">Charge 6</div>                                    </div>                <div class="subtitle__description">                                <div class="stars__reviews"><span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" class="chunk rating"><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star half"></span><meta itemprop="bestRating" content="100.0" /><meta itemprop="worstRating" content="0.0" /><meta itemprop="ratingValue" content="90" /></span></div>                                        <p><p>The Fitbit Charge 6 may have debuted in 2023, but it's still one of the most well-rounded fitness wearables money can buy in 2026 thanks to reliable tracking performance, excellent battery life, and just the right amount of smart features. Easy-wearing, it also boasts onboard GPS, so you don't need a smartphone for location-based fitness insights. </p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-specs-compared"><span>Fitbit Air vs Fitbit Charge 6: Specs compared</span></h3><div ><table><caption>Fitbit Air vs Fitbit Charge 6</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Fitbit Charge 6</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$99</p></td><td  ><p>$159</p></td></tr><tr><td class="firstcol " ><p><strong>Launch date</strong></p></td><td  ><p>May, 2026</p></td><td  ><p>Sept, 2023</p></td></tr><tr><td class="firstcol " ><p><strong>Compatibility </strong></p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>34.9 x 17 x 8.9 mm</p></td><td  ><p>11.4 x 22.9 x 10.2 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight w/ strap</strong></p></td><td  ><p>12 g</p></td><td  ><p>15 g</p></td></tr><tr><td class="firstcol " ><p><strong>Display </strong></p></td><td  ><p>n/a</p></td><td  ><p>1.04-inch AMOLED</p></td></tr><tr><td class="firstcol " ><p><strong>Sensors</strong></p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, ECG, Skin temp, Accelerometer, Gyroscope, NFC</p></td></tr><tr><td class="firstcol " ><p><strong>GPS</strong></p></td><td  ><p>No</p></td><td  ><p>Yes</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life</strong></p></td><td  ><p>Up to 7 days</p></td><td  ><p>Up to 6 days</p></td></tr><tr><td class="firstcol " ><p><strong>Water resistance </strong></p></td><td  ><p>50 meters</p></td><td  ><p>50 meters</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-cost"><span>Fitbit Air vs Fitbit Charge 6: Cost</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3661px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="rRWHyTSbAQrti6zaLozV97" name="IMG_9308.jpg" alt="run settings on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/rRWHyTSbAQrti6zaLozV97.jpg" mos="" align="middle" fullscreen="" width="3661" height="2059" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The newer Fitbit Air is $99, while 2023's Fitbit Charge 6 is $159. However, the latter goes on sale frequently. For example, you can pick up the Charge 6 right now for just <a href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV/" target="_blank" rel="nofollow">$99 via Amazon</a>. That said, the Fitbit Air is consistently cheaper than the Charge 6, so it wins this category.</p><p><em><strong>Winner: </strong></em><em>Fitbit Air</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-design"><span>Fitbit Air vs Fitbit Charge 6: design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4923px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8TnS5oF2ouHVYSDY3B8TxM" name="FitbitAir-rev-05" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/8TnS5oF2ouHVYSDY3B8TxM.jpg" mos="" align="middle" fullscreen="" width="4923" height="2769" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Both fitness trackers are lightweight, comfortable wearables with modest footprints. While the Fitbit Air is screen-free and button-free, providing a no-distractions health and fitness tracking experience, the Charge 6 offers a small 1.04-inch AMOLED touchscreen and haptic side buttons.</p><p>Does this make the Charge 6 a better tracker than the Air? That depends on whether you prefer a more-connected device capable of mirroring phone notifications and displaying stats, or one designed with a set-it-and-forget-it mentality.</p><p>Either way, the Charge 6 and Air each proved to be well-built in our testing, with respectable water resistance ratings of 50 meters. The Air is, of course, a bit more understated due to the lack of a screen; it's also a bit smaller. These factors don't necessarily make it a better-designed device, though.</p><p><em><strong>Winner: </strong></em><em>draw</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-charge-6-health-and-fitness-tracking"><span>Fitbit Air vs Charge 6: Health and fitness tracking</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5000px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="FPN2oVhyGKaa4tcqQn5Nm4" name="Fitbit-Charge6" alt="Close-up showing the back of the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/FPN2oVhyGKaa4tcqQn5Nm4.jpg" mos="" align="middle" fullscreen="" width="5000" height="2812" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air proved to be a competent fitness tracker when pitted head-to-head against other popular wearables, like <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-500-steps-with-the-fitbit-air-vs-fitbit-inspire-3-and-theres-a-clear-winner">versus the Fitbit Inspire 3</a>. However, it lacks onboard GPS, so you need to carry your paired phone to ensure metrics like distance, pace, and elevation gain are recorded accurately. </p><p>Not a fan of jogging with a bulky smartphone in your pocket? I feel you. In that case, the GPS-sporting Fitbit Charge 6 is going to be the better tracker for you.</p><p>The Charge 6 has other advantages over the Fitbit Air, most notably, the ability to record ECGs.  When it comes to tracking workouts, both devices support over 40 modes with automatic detection and tracking for basic workouts like walks, runs, and bike rides.</p><p>Of course, thanks to its screen, users can manually start a workout on the Charge 6 with just a few taps, while Fitbit Air users will need to make a trip to the Google Health app on their paired phone.</p><p><em><strong>Winner:</strong></em><em> Fitbit Charge 6</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-smart-features"><span>Fitbit Air vs Fitbit Charge 6: Smart features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6556px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TnsKN5QkXMtSHCm4Zj8EGa" name="Fitbit Charge 6 Lifestyle Cycling Porcelain crop copy.jpg" alt="a photo of the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/TnsKN5QkXMtSHCm4Zj8EGa.jpg" mos="" align="middle" fullscreen="" width="6556" height="3688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Fitbit)</span></figcaption></figure><p>This one isn't even close. When it comes to support for smart features, the Fitbit Charge 6 blows the Fitbit Air out of the water. However, the Charge 6 doesn't offer anywhere near the level of smarts you'll get from the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatch</a> models in 2026, like the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch Series 11</a> or <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Google Pixel Watch 4</a>.</p><p>Still, the Charge 6 has NFC, so you can tap-to-pay using Google Wallet. It also supports a small selection of handy Google apps, like Google Maps and YouTube Music. There's no onboard music storage, but you can control media playback from your paired device.</p><p>The Charge 6 additionally mirrors smartphone notifications for both Android and iOS users.  </p><p><em><strong>Winner:</strong></em><em> Fitbit Charge 6</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-charge-6-battery-life"><span>Fitbit Air vs Fitbit Charge 6: Battery life</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>The Fitbit Charge 6 is rated to last up to six days per charge on average, while the Fitbit Air is billed for up to seven days per charge. In my testing, both ratings proved accurate, making the Fitbit Air the winner of this category.</p><p><em><strong>Winner:</strong></em><em> Fitbit Air</em></p><h3 class="article-body__section" id="section-verdict"><span>Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When choosing between the Fitbit Air and the Fitbit Charge 6, the ultimate question to ask yourself is, "Do I want a screen-free and distraction-free fitness tracker or a more connected device?"</p><p>Put another way, the Fitbit Air is a wearable that you simply, well, wear and let it do its thing; the Charge 6 is one you interact with via a small touchscreen and haptic buttons. </p><p>Both are reliable, comfortable, and long-lasting. Of course, the Charge 6 has the advantage of onboard GPS, which is why I ultimately prefer it to the Air, along with NFC. But if you're not big on outdoor workouts or using tap-to-pay from this wrist, this may not matter much to you. </p><p><em><strong>Overall winner: </strong></em><em>Draw</em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYxboO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYxboO.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs Fitbit Inspire 3 — which $99 fitness tracker wins?</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-all-3-fitbit-air-accessory-bands-and-theres-a-clear-winner">I tested all 3 Fitbit Air accessory bands — and there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">I've been using the Fitbit Air for over a week, and my favorite feature has completely changed the way I wake up</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I walked 3,500 steps with the Fitbit Air vs Fitbit Inspire 3 — and there's a clear winner ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Which $99 Fitbit fitness tracker is more accurate, the Fitbit Inspire 3 or the newer, screen-free Fitbit Air? Both devices performed admirably in our review test process, but is one more reliable than the other? I decided to find out.</p><p>On a picture-perfect cerulean Seattle summer day, I took one for the team and walked 3,500 steps with the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a> strapped to my left wrist and the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> affixed to my right. </p><p>How do I know I walked exactly 3.5K steps? I counted each and every one, clicking my trusty manual tally counter to note every hundred, before starting the count over at one.</p><p>While my manual count was a control for steps, I used the Strava app on my<a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-plus-review-not-as-big-as-the-max-not-as-pricey-either"> iPhone 16 Plus</a> as a control for distance, pace, and elevation gain. Ultimately, one of these <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">top-performing fitness trackers</a> proved more competent. Was it the Fitbit Air or the Fitbit Inspire 3? Read on for the results.</p><div class="product"><a data-dimension112="de560822-687a-4a7d-8bba-802e73d72c5e" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a comfortable, screen and distraction-free health and fitness tracker with a set-it-and-forget-it disposition, and up to a week of battery life.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="de560822-687a-4a7d-8bba-802e73d72c5e" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="0480caf1-594e-4a13-806a-11869a77e22c" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$79" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:112.25%;"><img id="SkbXeX6htqKZuVz49GdyV" name="Fitbit-Inspire-3-deal.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/SkbXeX6htqKZuVz49GdyV.jpg" mos="" align="middle" fullscreen="" width="2000" height="2245" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Inspire 3 is nearly four years older than the Air, but it offers many of the same health and fitness tracking features in a nearly as tiny package with great battery life. It also sports a tiny screen. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/?th=1" target="_blank" rel="nofollow" data-dimension112="0480caf1-594e-4a13-806a-11869a77e22c" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$79">View Deal</a></p></div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-key-differences"><span>Fitbit Air vs Fitbit Inspire 3: key differences </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5150px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="ACasPG6gGJGN83nJ2M5yiD" name="FitbitAir-Inspire-03" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/ACasPG6gGJGN83nJ2M5yiD.jpg" mos="" align="middle" fullscreen="" width="5150" height="2896" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I’ve already gone in-depth concerning the pros and cons of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs. the Fitbit Inspire 3</a>. But as a quick refresher, both wearables are compact and record the basics, like sleep quality, workouts, women’s health, and overall well-being. </p><p>The most notable difference: The Fitbit Inspire 3 has a screen — albeit a tiny one — for mirrored smartphone notifications, starting workouts, and viewing stats. The Fitbit Air, meanwhile, is screen-free and distraction-free.</p><p>They each cost $99, though the Inspire 3 is frequently on sale for less (It's just <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/?th=1" target="_blank" rel="nofollow">$79 via Amazon</a> as of publishing). When it comes to logging outdoor workouts, like walks, neither has an onboard GPS, so you’ll need to carry your smartphone along (as I did) for accurate location-based metrics. </p><p>Now, on to the results of my 3,500-step walk test with the Fitbit Air vs the Fitbit Inspire 3.</p><h3 class="article-body__section" id="section-i-walked-3-500-steps-with-the-fitbit-air-vs-fitbit-inspire-3"><span>I walked 3,500 steps with the Fitbit Air vs Fitbit Inspire 3</span></h3><div ><table><caption>Fitbit Air vs Inspire 3 walk test results</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Fitbit Inspire 3</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>3,501 steps</p></td><td  ><p>3,517 steps</p></td><td  ><p>3,500 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>1.89 miles</p></td><td  ><p>1.62 miles</p></td><td  ><p>1.90 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>210 feet</p></td><td  ><p>n/a</p></td><td  ><p>246 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace (elapsed) </p></td><td  ><p>18 mins 07 secs per mile</p></td><td  ><p>20 mins 33 secs per mile</p></td><td  ><p>17 mins 56 secs secs (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>117 bpm</p></td><td  ><p>121 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>136 bpm</p></td><td  ><p>145 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Calories burned</p></td><td  ><p>253 calories</p></td><td  ><p>278 calories </p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>During my roughly 34-minute walk, I took exactly 3,500 steps. The Fitbit Air was more accurate, with a total that's off by just a single step. Strava, for what it's worth, noted a total of 3,510 steps. </p><p>The Fitbit Air recorded nearly the same total distance covered as Strava, while the Inspire 3 was off by nearly a third of a mile. </p><p>"The Fitbit Air's elevation tracking data has proven <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-500-steps-with-the-fitbit-air-vs-apple-watch-se-3-and-im-surprised-by-the-winner" target="_blank">less than reliable</a> in my testing, but at least the tracker provides the metric (unlike the Inspire 3)."</p><p>The Air's pace data is pretty darn close to Strava's. I didn't pause at any point during the walk, so I expected roughly the same pace from all three tracking methods. That may be the case for the Fitit Air, but not the Inspire 3.</p><p>Despite noting less distance covered, the Fitbit Inspire 3 recorded slightly higher heart rate data than the Air and more calories burned.</p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-winner"><span>Fitbit Air vs Fitbit Inspire 3: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4654px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3ZgyaboUC5K2rnhcC6Kifi" name="Inspire3-v-Air-02" alt="Close-up of the Fitbit Inspire 3 next to the Fitbit Air on a user's wrist" src="https://cdn.mos.cms.futurecdn.net/3ZgyaboUC5K2rnhcC6Kifi.jpg" mos="" align="middle" fullscreen="" width="4654" height="2618" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is the clear winner of this head-to-head fitness-tracking accuracy showdown against its older sibling, the Fitbit Inspire 3.</p><p>Ultimately, the Air has newer hardware and represents the latest in Google's holistic tech. The Fitbit Inspire 3 may record most of the same metrics, but the Fitbit Air does so with better overall accuracy.</p><p>Which fitness trackers or smartwatches should I test head-to-head next? Let me know in the comments below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYxboO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYxboO.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-all-3-fitbit-air-accessory-bands-and-theres-a-clear-winner">I tested all 3 Fitbit Air accessory bands — and there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/we-asked-toms-guide-readers-if-they-prefer-the-fitbit-air-vs-the-garmin-forerunner-70-and-the-results-were-overwhelming">We asked Tom's Guide readers if they prefer the Fitbit Air vs. the Garmin Forerunner 70 — and the results were overwhelming</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-500-steps-with-the-fitbit-air-vs-fitbit-inspire-3-and-theres-a-clear-winner</link>
                                                                            <description>
                            <![CDATA[ I tested the fitness-tracking accuracy of the Fitbit Air and the Inspire 3, and one of these $99 trackers came out on top. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">rv27LvGoy6YYVJL2QNGaQb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/M4CeSFG4rbanYS3SpzfT2E-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 17 Jun 2026 06:30:00 +0000</pubDate>                                                                                                                                <updated>Wed, 17 Jun 2026 10:13:36 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/M4CeSFG4rbanYS3SpzfT2E-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Air and Fitbit Inspire 3 in a user&#039;s hand with a colorful out-of-focus background]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Air and Fitbit Inspire 3 in a user&#039;s hand with a colorful out-of-focus background]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Air and Fitbit Inspire 3 in a user&#039;s hand with a colorful out-of-focus background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/M4CeSFG4rbanYS3SpzfT2E-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Which $99 Fitbit fitness tracker is more accurate, the Fitbit Inspire 3 or the newer, screen-free Fitbit Air? Both devices performed admirably in our review test process, but is one more reliable than the other? I decided to find out.</p><p>On a picture-perfect cerulean Seattle summer day, I took one for the team and walked 3,500 steps with the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a> strapped to my left wrist and the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> affixed to my right. </p><p>How do I know I walked exactly 3.5K steps? I counted each and every one, clicking my trusty manual tally counter to note every hundred, before starting the count over at one.</p><p>While my manual count was a control for steps, I used the Strava app on my<a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-plus-review-not-as-big-as-the-max-not-as-pricey-either"> iPhone 16 Plus</a> as a control for distance, pace, and elevation gain. Ultimately, one of these <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">top-performing fitness trackers</a> proved more competent. Was it the Fitbit Air or the Fitbit Inspire 3? Read on for the results.</p><div class="product"><a data-dimension112="de560822-687a-4a7d-8bba-802e73d72c5e" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a comfortable, screen and distraction-free health and fitness tracker with a set-it-and-forget-it disposition, and up to a week of battery life.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="de560822-687a-4a7d-8bba-802e73d72c5e" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="0480caf1-594e-4a13-806a-11869a77e22c" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$79" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:112.25%;"><img id="SkbXeX6htqKZuVz49GdyV" name="Fitbit-Inspire-3-deal.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/SkbXeX6htqKZuVz49GdyV.jpg" mos="" align="middle" fullscreen="" width="2000" height="2245" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Inspire 3 is nearly four years older than the Air, but it offers many of the same health and fitness tracking features in a nearly as tiny package with great battery life. It also sports a tiny screen. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/?th=1" target="_blank" rel="nofollow" data-dimension112="0480caf1-594e-4a13-806a-11869a77e22c" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$79">View Deal</a></p></div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-key-differences"><span>Fitbit Air vs Fitbit Inspire 3: key differences </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5150px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="ACasPG6gGJGN83nJ2M5yiD" name="FitbitAir-Inspire-03" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/ACasPG6gGJGN83nJ2M5yiD.jpg" mos="" align="middle" fullscreen="" width="5150" height="2896" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I’ve already gone in-depth concerning the pros and cons of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs. the Fitbit Inspire 3</a>. But as a quick refresher, both wearables are compact and record the basics, like sleep quality, workouts, women’s health, and overall well-being. </p><p>The most notable difference: The Fitbit Inspire 3 has a screen — albeit a tiny one — for mirrored smartphone notifications, starting workouts, and viewing stats. The Fitbit Air, meanwhile, is screen-free and distraction-free.</p><p>They each cost $99, though the Inspire 3 is frequently on sale for less (It's just <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7/?th=1" target="_blank" rel="nofollow">$79 via Amazon</a> as of publishing). When it comes to logging outdoor workouts, like walks, neither has an onboard GPS, so you’ll need to carry your smartphone along (as I did) for accurate location-based metrics. </p><p>Now, on to the results of my 3,500-step walk test with the Fitbit Air vs the Fitbit Inspire 3.</p><h3 class="article-body__section" id="section-i-walked-3-500-steps-with-the-fitbit-air-vs-fitbit-inspire-3"><span>I walked 3,500 steps with the Fitbit Air vs Fitbit Inspire 3</span></h3><div ><table><caption>Fitbit Air vs Inspire 3 walk test results</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Fitbit Inspire 3</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>3,501 steps</p></td><td  ><p>3,517 steps</p></td><td  ><p>3,500 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>1.89 miles</p></td><td  ><p>1.62 miles</p></td><td  ><p>1.90 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>210 feet</p></td><td  ><p>n/a</p></td><td  ><p>246 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace (elapsed) </p></td><td  ><p>18 mins 07 secs per mile</p></td><td  ><p>20 mins 33 secs per mile</p></td><td  ><p>17 mins 56 secs secs (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>117 bpm</p></td><td  ><p>121 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>136 bpm</p></td><td  ><p>145 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Calories burned</p></td><td  ><p>253 calories</p></td><td  ><p>278 calories </p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>During my roughly 34-minute walk, I took exactly 3,500 steps. The Fitbit Air was more accurate, with a total that's off by just a single step. Strava, for what it's worth, noted a total of 3,510 steps. </p><p>The Fitbit Air recorded nearly the same total distance covered as Strava, while the Inspire 3 was off by nearly a third of a mile. </p><p>"The Fitbit Air's elevation tracking data has proven <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-500-steps-with-the-fitbit-air-vs-apple-watch-se-3-and-im-surprised-by-the-winner" target="_blank">less than reliable</a> in my testing, but at least the tracker provides the metric (unlike the Inspire 3)."</p><p>The Air's pace data is pretty darn close to Strava's. I didn't pause at any point during the walk, so I expected roughly the same pace from all three tracking methods. That may be the case for the Fitit Air, but not the Inspire 3.</p><p>Despite noting less distance covered, the Fitbit Inspire 3 recorded slightly higher heart rate data than the Air and more calories burned.</p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-winner"><span>Fitbit Air vs Fitbit Inspire 3: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4654px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3ZgyaboUC5K2rnhcC6Kifi" name="Inspire3-v-Air-02" alt="Close-up of the Fitbit Inspire 3 next to the Fitbit Air on a user's wrist" src="https://cdn.mos.cms.futurecdn.net/3ZgyaboUC5K2rnhcC6Kifi.jpg" mos="" align="middle" fullscreen="" width="4654" height="2618" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is the clear winner of this head-to-head fitness-tracking accuracy showdown against its older sibling, the Fitbit Inspire 3.</p><p>Ultimately, the Air has newer hardware and represents the latest in Google's holistic tech. The Fitbit Inspire 3 may record most of the same metrics, but the Fitbit Air does so with better overall accuracy.</p><p>Which fitness trackers or smartwatches should I test head-to-head next? Let me know in the comments below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYxboO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYxboO.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-all-3-fitbit-air-accessory-bands-and-theres-a-clear-winner">I tested all 3 Fitbit Air accessory bands — and there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/we-asked-toms-guide-readers-if-they-prefer-the-fitbit-air-vs-the-garmin-forerunner-70-and-the-results-were-overwhelming">We asked Tom's Guide readers if they prefer the Fitbit Air vs. the Garmin Forerunner 70 — and the results were overwhelming</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ We asked Tom's Guide readers if they prefer the Fitbit Air vs. the Garmin Forerunner 70 — and the results were overwhelming ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We asked Tom’s Guide readers which new fitness tracker they prefer, the screen-free Fitbit Air or the running-focused Garmin Forerunner 70, and your response was overwhelming.</p><p>With more than 800 total votes — 821 to be exact — one wearable proved far more popular than the other, receiving nods from 67% of respondents. So, which of these <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">top-performing fitness trackers</a> came out on top, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> or the <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-review">Garmin Forerunner 70</a>? Read on.</p><h3 class="article-body__section" id="section-67-of-tg-readers-prefer-the-fitbit-air-but-why"><span>67% of TG readers prefer the Fitbit Air, but why?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4163px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="uzqVqau5gm5cPhz9DYttUR" name="F70-v-FitbitAir-01" alt="Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist" src="https://cdn.mos.cms.futurecdn.net/uzqVqau5gm5cPhz9DYttUR.jpg" mos="" align="middle" fullscreen="" width="4163" height="2342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>We ran our “Which 2026 fitness tracker do you prefer, the latest Garmin or the newest Fitbit?” poll for two weeks, and the results speak for themselves. With all votes tallied, 67% of Tom’s Guide readers prefer the Fitbit Air to the Garmin Forerunner 70. But why?</p><p>For starters, the Fitbit Air is just $99, and the Garmin Forerunner 70 is $249, but that’s just one likely factor in the former’s popularity. </p><p>An even bigger reason folks prefer the Fitbit might come down to the target audiences. While the Garmin Forerunner 70 is designed with <a href="https://www.tomsguide.com/wellness/running/im-a-running-noob-doing-my-first-5k-heres-all-the-tech-im-using-to-cross-the-finish-line">running enthusiasts</a> in mind, the Fitbit Air is geared toward, well, anyone who’s looking for health and fitness insights from a no-fuss wearable.</p><p>Ultimately, the Forerunner 70 is a more niche product, while the Fitbit Air has more <a href="https://www.youtube.com/watch?v=y9lNbNGbo24" target="_blank">mass appeal</a>. </p><div class="product"><a data-dimension112="adceea34-6f93-46b7-ba65-c5d0fb95feea" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a small, easy-wearing, and screen-free fitness tracker offering up to seven days of battery, meaningful sleep insights, and dependable workout-tracking performance. It's  Google's first new Fitbit in nearly three years, and my favorite tracker of 2026 so far.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="adceea34-6f93-46b7-ba65-c5d0fb95feea" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="0debec55-c9ac-469f-9079-72d4db6d95e8" data-action="Deal Block" data-label="Forerunner 70" data-dimension48="Forerunner 70" data-dimension25="$249" href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F7T6G9/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1042px;"><p class="vanilla-image-block" style="padding-top:103.45%;"><img id="JxZy6K7r5Qf8aMgGg2NDqQ" name="Screenshot 2026-05-19 at 2.33.47 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JxZy6K7r5Qf8aMgGg2NDqQ.png" mos="" align="middle" fullscreen="" width="1042" height="1078" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Forerunner 70 is Garmin's latest beginner-focused running watch, replacing the beloved Forerunner 55. Upgrades include a bright AMOLED screen and loads of training tools and insights for runners, offered neatly in a familiar, user-friendly package. <a class="view-deal button" href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F7T6G9/" target="_blank" rel="nofollow" data-dimension112="0debec55-c9ac-469f-9079-72d4db6d95e8" data-action="Deal Block" data-label="Forerunner 70" data-dimension48="Forerunner 70" data-dimension25="$249">View Deal</a></p></div><p><strong>Fitbit Air vs Garmin Forerunner 70: Biggest differences </strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I’ve already covered the core differences between the Fitbit Air vs Garmin Forerunner 70 in the intro to my <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">3,000-step walk test</a> between the two (Spoiler alert: both performed with remarkable accuracy). But to summarize, the Garmin boasts more training and recovery tools, running features, and onboard GPS. It’s light on smart features but does offer mirrored notifications and media control.</p><p>The Fitbit Air, meanwhile, offers a well-rounded mix of holistic and fitness features with no screen, buttons, or ability to mirror notifications. It also requires a paired smartphone for location data when working out. </p><p>Ultimately, both the Fitbit Air and Garmin Forerunner 70 impressed me during testing, with each proving reliable, long-lasting, durable, and comfortable. </p><p>Haven’t voted in our Fitbit Air vs Garmin Forerunner 70 poll yet? Make your voice heard now, below.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqvznX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqvznX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-vs-forerunner-55-biggest-upgrades-explained">Garmin Forerunner 70 vs Forerunner 55: Here's how Garmin's new entry-level running watch stacks up against its predecessor</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-went-for-a-run-with-the-fitbit-air-and-garmin-forerunner-70-to-see-how-the-usd99-tracker-compared-and-im-impressed">I went for a run with the Fitbit Air and Garmin Forerunner 70 to see how the $99 tracker compared, and I’m impressed</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs Fitbit Inspire 3 — which $99 fitness tracker wins?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/we-asked-toms-guide-readers-if-they-prefer-the-fitbit-air-vs-the-garmin-forerunner-70-and-the-results-were-overwhelming</link>
                                                                            <description>
                            <![CDATA[ Fitbit Air vs Garmin Forerunner 70: Which wearable is more popular? With over 800 responses, 67% of readers would buy this tracker over the other. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">PxA7pX5zKBPRSWwKVdnMFK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/eNA2i2htvrPTQUDfXX7WNR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 16 Jun 2026 05:45:00 +0000</pubDate>                                                                                                                                <updated>Tue, 16 Jun 2026 12:02:35 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/eNA2i2htvrPTQUDfXX7WNR-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist]]></media:description>                                                            <media:text><![CDATA[Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/eNA2i2htvrPTQUDfXX7WNR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We asked Tom’s Guide readers which new fitness tracker they prefer, the screen-free Fitbit Air or the running-focused Garmin Forerunner 70, and your response was overwhelming.</p><p>With more than 800 total votes — 821 to be exact — one wearable proved far more popular than the other, receiving nods from 67% of respondents. So, which of these <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">top-performing fitness trackers</a> came out on top, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> or the <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-review">Garmin Forerunner 70</a>? Read on.</p><h3 class="article-body__section" id="section-67-of-tg-readers-prefer-the-fitbit-air-but-why"><span>67% of TG readers prefer the Fitbit Air, but why?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4163px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="uzqVqau5gm5cPhz9DYttUR" name="F70-v-FitbitAir-01" alt="Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist" src="https://cdn.mos.cms.futurecdn.net/uzqVqau5gm5cPhz9DYttUR.jpg" mos="" align="middle" fullscreen="" width="4163" height="2342" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>We ran our “Which 2026 fitness tracker do you prefer, the latest Garmin or the newest Fitbit?” poll for two weeks, and the results speak for themselves. With all votes tallied, 67% of Tom’s Guide readers prefer the Fitbit Air to the Garmin Forerunner 70. But why?</p><p>For starters, the Fitbit Air is just $99, and the Garmin Forerunner 70 is $249, but that’s just one likely factor in the former’s popularity. </p><p>An even bigger reason folks prefer the Fitbit might come down to the target audiences. While the Garmin Forerunner 70 is designed with <a href="https://www.tomsguide.com/wellness/running/im-a-running-noob-doing-my-first-5k-heres-all-the-tech-im-using-to-cross-the-finish-line">running enthusiasts</a> in mind, the Fitbit Air is geared toward, well, anyone who’s looking for health and fitness insights from a no-fuss wearable.</p><p>Ultimately, the Forerunner 70 is a more niche product, while the Fitbit Air has more <a href="https://www.youtube.com/watch?v=y9lNbNGbo24" target="_blank">mass appeal</a>. </p><div class="product"><a data-dimension112="adceea34-6f93-46b7-ba65-c5d0fb95feea" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a small, easy-wearing, and screen-free fitness tracker offering up to seven days of battery, meaningful sleep insights, and dependable workout-tracking performance. It's  Google's first new Fitbit in nearly three years, and my favorite tracker of 2026 so far.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="adceea34-6f93-46b7-ba65-c5d0fb95feea" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="0debec55-c9ac-469f-9079-72d4db6d95e8" data-action="Deal Block" data-label="Forerunner 70" data-dimension48="Forerunner 70" data-dimension25="$249" href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F7T6G9/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1042px;"><p class="vanilla-image-block" style="padding-top:103.45%;"><img id="JxZy6K7r5Qf8aMgGg2NDqQ" name="Screenshot 2026-05-19 at 2.33.47 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JxZy6K7r5Qf8aMgGg2NDqQ.png" mos="" align="middle" fullscreen="" width="1042" height="1078" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Forerunner 70 is Garmin's latest beginner-focused running watch, replacing the beloved Forerunner 55. Upgrades include a bright AMOLED screen and loads of training tools and insights for runners, offered neatly in a familiar, user-friendly package. <a class="view-deal button" href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F7T6G9/" target="_blank" rel="nofollow" data-dimension112="0debec55-c9ac-469f-9079-72d4db6d95e8" data-action="Deal Block" data-label="Forerunner 70" data-dimension48="Forerunner 70" data-dimension25="$249">View Deal</a></p></div><p><strong>Fitbit Air vs Garmin Forerunner 70: Biggest differences </strong></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I’ve already covered the core differences between the Fitbit Air vs Garmin Forerunner 70 in the intro to my <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">3,000-step walk test</a> between the two (Spoiler alert: both performed with remarkable accuracy). But to summarize, the Garmin boasts more training and recovery tools, running features, and onboard GPS. It’s light on smart features but does offer mirrored notifications and media control.</p><p>The Fitbit Air, meanwhile, offers a well-rounded mix of holistic and fitness features with no screen, buttons, or ability to mirror notifications. It also requires a paired smartphone for location data when working out. </p><p>Ultimately, both the Fitbit Air and Garmin Forerunner 70 impressed me during testing, with each proving reliable, long-lasting, durable, and comfortable. </p><p>Haven’t voted in our Fitbit Air vs Garmin Forerunner 70 poll yet? Make your voice heard now, below.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqvznX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqvznX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-vs-forerunner-55-biggest-upgrades-explained">Garmin Forerunner 70 vs Forerunner 55: Here's how Garmin's new entry-level running watch stacks up against its predecessor</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-went-for-a-run-with-the-fitbit-air-and-garmin-forerunner-70-to-see-how-the-usd99-tracker-compared-and-im-impressed">I went for a run with the Fitbit Air and Garmin Forerunner 70 to see how the $99 tracker compared, and I’m impressed</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins">Fitbit Air vs Fitbit Inspire 3 — which $99 fitness tracker wins?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Fitbit Air vs Fitbit Inspire 3 — which $99 fitness tracker wins? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Which fitness tracker is better, 2026's Fitbit Air or 2022's Fitbit Inspire 3? Logic might suggest that the newer model has the advantage, but that's not necessarily the case.</p><p>I just reviewed the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> and have worn a <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a> for several years, and there's plenty of good reason why both make our list of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026. </p><p>Here's how these two trackers compare head-to-head across six categories, including cost, design, customization, health and fitness features, smart features, and battery. </p>        <div class="featured_product_block featured_block_versus" data-id="1df8a721-a22a-4452-9976-e8274076b86c">            <a href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV/" data-model-name="Fitbit Air" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:95.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" alt="Fitbit Air in berry"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Fitbit</div>                    <div class="featured__title">Air</div>                                    </div>                <div class="subtitle__description">                                <div class="stars__reviews"><span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" class="chunk rating"><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star half"></span><meta itemprop="bestRating" content="100.0" /><meta itemprop="worstRating" content="0.0" /><meta itemprop="ratingValue" content="90" /></span></div>                                        <p><p>The Fitbit Air is a screen-free and distraction-free fitness tracker launched in 2026 for $99. Lightweight, comfortable, and long-lasting (battery life is good for up to a week), the Fitit Air is a competent fitness, health, and sleep tracker. However, it lacks onboard GPS, so you'll need to carry a smartphone for location data when working out outdoors. </p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="1da96b6e-3a0e-4977-8b58-c86d2e6b4006">            <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7" data-model-name="Fitbit Inspire 3" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:95.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wBB4ZfJMwwzqWzRfDKHY4d.jpg" alt="Fitbit Inspire 3"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Fitbit</div>                    <div class="featured__title">Inspire 3</div>                                    </div>                <div class="subtitle__description">                                <div class="stars__reviews"><span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" class="chunk rating"><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star half"></span><meta itemprop="bestRating" content="100.0" /><meta itemprop="worstRating" content="0.0" /><meta itemprop="ratingValue" content="90" /></span></div>                                        <p><p>The Fitbit Inspire 3 may have debuted in 2022, but it's still one of my favorite fitness trackers and a near match for the newer Fitbit Air when it comes to fitness and holistic tracking chops. Smart features are limited, and it similarly lacks a GPS, but unlike the Air, the Inspire 3 boasts a small onboard display and can even mirror smartphone notifications. </p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-specs-compared"><span>Fitbit Air vs Fitbit Inspire 3: Specs compared</span></h3><div ><table><caption>Fitbit Air vs Fitbit Inspire 3</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Fitbit Inspire 3</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$99</p></td><td  ><p>$99</p></td></tr><tr><td class="firstcol " ><p><strong>Launch date</strong></p></td><td  ><p>May, 2026</p></td><td  ><p>Sept, 2022</p></td></tr><tr><td class="firstcol " ><p><strong>Compatibility </strong></p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>34.9 x 17 x 8.9 mm</p></td><td  ><p>39.4 x 18.5 x 11.7 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight w/ strap</strong></p></td><td  ><p>12 g</p></td><td  ><p>17.7 g</p></td></tr><tr><td class="firstcol " ><p><strong>Display </strong></p></td><td  ><p>n/a</p></td><td  ><p> 0.5-inch AMOLED</p></td></tr><tr><td class="firstcol " ><p><strong>Sensors</strong></p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td></tr><tr><td class="firstcol " ><p><strong>GPS</strong></p></td><td  ><p>No</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life</strong></p></td><td  ><p>Up to 7 days</p></td><td  ><p>Up to 10 days</p></td></tr><tr><td class="firstcol " ><p><strong>Water resistance </strong></p></td><td  ><p>50 meters</p></td><td  ><p>50 meters</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-cost"><span>Fitbit Air vs Fitbit Inspire 3: Cost</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air and Fitbit Inspire 3 each cost $99. However, the former is much newer and unlikely to see a discount anytime soon, while the latter goes on sale often for up to 30% off. </p><p>For example, as of writing, you can pick up the Inspire 3 for just <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7" target="_blank" rel="nofollow">$79 at Amazon.</a></p><p><em><strong>Winner: </strong></em><em>Fitbit Inspire 3 </em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-design"><span>Fitbit Air vs Fitbit Inspire 3: design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5150px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="ACasPG6gGJGN83nJ2M5yiD" name="FitbitAir-Inspire-03" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/ACasPG6gGJGN83nJ2M5yiD.jpg" mos="" align="middle" fullscreen="" width="5150" height="2896" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Inspire 3 and Fitbit Air are both small, comfortable fitness trackers that don't garner much attention or get in the way of daily life. However, the newer Air is both smaller and lighter than the Inspire 3 and offers a wider selection of band materials.</p><p>Neither wearable has physical buttons, but the Inspire 3 offers two haptic buttons on either side and sports a small AMOLED touchscreen. Depending on your ability to read tiny text and the daintiness of your fingers, navigating the Inspire 3's controls is a hit-or-miss affair. </p><p>Ultimately, I prefer the simpler, less-distracting design of the Fitbit Air to the fiddly controls and comically small screen of the Inspire 3.</p><p><em><strong>Winner: </strong></em><em>Fitbit Air</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-customization"><span>Fitbit Air vs Fitbit Inspire 3: customization </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5459px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ZbZb7oVskZ74qYjLHoJ2UN" name="FitbitAir-rev-03" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/ZbZb7oVskZ74qYjLHoJ2UN.jpg" mos="" align="middle" fullscreen="" width="5459" height="3071" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is designed for maximum accessory customization. All of the tracking components and battery are contained within a small, pebble-like shell that can easily be popped out of one strap and swapped into another.</p><p>Google has a decent selection of accessory bands for the Fitbit Air available; I tried them all, and <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-all-3-fitbit-air-accessory-bands-and-theres-a-clear-winner">there's a clear winner</a>. However, with a starting price of $34.99, I'm looking forward to more affordable third-party options popping up on Amazon and the likes, eventually. </p><p>The Fitbit Inspire 3 also supports band swapping, but removing and installing a band is a trickier process. That said, to my surprise, Google sells some pretty cool-looking <a href="https://store.google.com/us/product/fitbit_inspire_3_band_translucent" target="_blank" rel="nofollow">Inspire 3 bands </a>to replace the standard-issued ones.</p><p><em><strong>Winner: </strong></em><em>Fitbit Air</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-health-and-fitness"><span>Fitbit Air vs Fitbit Inspire 3: Health and fitness</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5353px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="VkLkWNHBhnVYjFjPbnwNVD" name="FitbitAir-Inspire-04" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/VkLkWNHBhnVYjFjPbnwNVD.jpg" mos="" align="middle" fullscreen="" width="5353" height="3011" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Inspire 3 and Fitbit Air boast the same onboard tech, including sensors for tracking heart rate, blood oxygen saturation, movement and temperature. However, it's unclear whether the Air is using newer sensors or the same generation as the Inspire 3. </p><p>Either way, both devices keep tabs on your overall well-being, sleep quality, fitness, and women's health. However, neither sports an onboard GPS for location tracking data or an altimeter for elevation insights. </p><p>This means that you'll need to carry a paired smartphone along when working out to accurately capture metrics like distance, pace, speed, and elevation gain.  </p><p>You also get automatic workout tracking for a small selection of common exercises, regardless of which tracker you choose. Meanwhile, more nuanced activities can be manually selected. </p><p><em><strong>Winner:</strong></em><em> Draw</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-smart-features"><span>Fitbit Air vs Fitbit Inspire 3: Smart features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3336px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="mNXSahwgqp3bezyap6J7SH" name="IMG_7170.jpg" alt="A photo of the sleep tracking on the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/mNXSahwgqp3bezyap6J7SH.jpg" mos="" align="middle" fullscreen="" width="3336" height="1876" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Neither of these fitness trackers offers much by way of smart features, but that's the point. Apps like Google Wallet and YouTube Music are reserved for the higher-end <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>. You also won't find onboard storage for saving music on either. </p><p>The Inspire 3 <em>can</em> mirror smartphone notifications from Android or iOS devices on its tiny screen, but it's not a great user experience. Meanwhile, both wearables support Google's lovely <a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">Smart Wake</a> haptic alarm feature. And that's a wrap for smart features. </p><p><em><strong>Winner:</strong></em><em> Draw</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-battery-life"><span>Fitbit Air vs Fitbit Inspire 3: Battery life</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3606px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="jEK2CMjArSconc4xGujcpa" name="Fitbit-Inspire3-red" alt="Rear of the Fitbit Inspire 3 up-close on a red background; the new Fitbit Air could cost the same as the Inspire 3 ($99)" src="https://cdn.mos.cms.futurecdn.net/jEK2CMjArSconc4xGujcpa.jpg" mos="" align="middle" fullscreen="" width="3606" height="2028" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Battery life is impressive with any tracker you choose, but the Fitbit Inspire 3 lasts a little longer than the Air. In our testing, the Inspire 3 easily meets the ten-day-per-charge threshold, while the Air effortlessly matches the advertised seven days per charge. </p><p><em><strong>Winner:</strong></em><em> Fitbit Inspire 3 </em></p><h3 class="article-body__section" id="section-verdict"><span>Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>In terms of performance, wearability, and cost, the Fitbit Air and Fitbit Inspire 3 are extremely similar. What sets them apart largely boils down to design. Simply put, the Inspire 3 has a small screen for starting workouts, viewing stats, and receiving mirrored smartphone notifications, while the Air does not.</p><p>Personally, I prefer the Fitbit Air's set-it-and-forget-it approach to wellness tracking, with no annoying controls or tiny screens to deal with. I admit, starting a workout session from the Google Health app is a tad annoying, and the Air's <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review#section-fitbit-air-fitness-tracking-3-5">auto workout tracking</a> needs... work, but the overall user experience of the Air feels more refined than that of the Inspire 3. </p><p>Of course, at the end of the day, they both log the same health and fitness insights. </p><p><em><strong>Overall winner: </strong></em><em>Draw</em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYxboO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYxboO.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-all-3-fitbit-air-accessory-bands-and-theres-a-clear-winner">I tested all 3 Fitbit Air accessory bands — and there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">I've been using the Fitbit Air for over a week, and my favorite feature has completely changed the way I wake up</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-vs-fitbit-inspire-3-which-usd99-fitness-tracker-wins</link>
                                                                            <description>
                            <![CDATA[ Google's new $99 Fitbit Air has a whole lot in common with 2022's Fitbit Inspire 3. Here's how the two stack up head-to-head. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KXuDLZFxxsDZurPLrFHUFV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/3ZgyaboUC5K2rnhcC6Kifi-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 10 Jun 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/3ZgyaboUC5K2rnhcC6Kifi-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Inspire 3 next to the Fitbit Air on a user&#039;s wrist]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Inspire 3 next to the Fitbit Air on a user&#039;s wrist]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Inspire 3 next to the Fitbit Air on a user&#039;s wrist]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/3ZgyaboUC5K2rnhcC6Kifi-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Which fitness tracker is better, 2026's Fitbit Air or 2022's Fitbit Inspire 3? Logic might suggest that the newer model has the advantage, but that's not necessarily the case.</p><p>I just reviewed the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> and have worn a <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a> for several years, and there's plenty of good reason why both make our list of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026. </p><p>Here's how these two trackers compare head-to-head across six categories, including cost, design, customization, health and fitness features, smart features, and battery. </p>        <div class="featured_product_block featured_block_versus" data-id="1df8a721-a22a-4452-9976-e8274076b86c">            <a href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV/" data-model-name="Fitbit Air" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:95.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" alt="Fitbit Air in berry"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Fitbit</div>                    <div class="featured__title">Air</div>                                    </div>                <div class="subtitle__description">                                <div class="stars__reviews"><span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" class="chunk rating"><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star half"></span><meta itemprop="bestRating" content="100.0" /><meta itemprop="worstRating" content="0.0" /><meta itemprop="ratingValue" content="90" /></span></div>                                        <p><p>The Fitbit Air is a screen-free and distraction-free fitness tracker launched in 2026 for $99. Lightweight, comfortable, and long-lasting (battery life is good for up to a week), the Fitit Air is a competent fitness, health, and sleep tracker. However, it lacks onboard GPS, so you'll need to carry a smartphone for location data when working out outdoors. </p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="1da96b6e-3a0e-4977-8b58-c86d2e6b4006">            <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7" data-model-name="Fitbit Inspire 3" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:95.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wBB4ZfJMwwzqWzRfDKHY4d.jpg" alt="Fitbit Inspire 3"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Fitbit</div>                    <div class="featured__title">Inspire 3</div>                                    </div>                <div class="subtitle__description">                                <div class="stars__reviews"><span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" class="chunk rating"><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star"> </span><span class="icon icon-star half"></span><meta itemprop="bestRating" content="100.0" /><meta itemprop="worstRating" content="0.0" /><meta itemprop="ratingValue" content="90" /></span></div>                                        <p><p>The Fitbit Inspire 3 may have debuted in 2022, but it's still one of my favorite fitness trackers and a near match for the newer Fitbit Air when it comes to fitness and holistic tracking chops. Smart features are limited, and it similarly lacks a GPS, but unlike the Air, the Inspire 3 boasts a small onboard display and can even mirror smartphone notifications. </p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-specs-compared"><span>Fitbit Air vs Fitbit Inspire 3: Specs compared</span></h3><div ><table><caption>Fitbit Air vs Fitbit Inspire 3</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Fitbit Inspire 3</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$99</p></td><td  ><p>$99</p></td></tr><tr><td class="firstcol " ><p><strong>Launch date</strong></p></td><td  ><p>May, 2026</p></td><td  ><p>Sept, 2022</p></td></tr><tr><td class="firstcol " ><p><strong>Compatibility </strong></p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>34.9 x 17 x 8.9 mm</p></td><td  ><p>39.4 x 18.5 x 11.7 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight w/ strap</strong></p></td><td  ><p>12 g</p></td><td  ><p>17.7 g</p></td></tr><tr><td class="firstcol " ><p><strong>Display </strong></p></td><td  ><p>n/a</p></td><td  ><p> 0.5-inch AMOLED</p></td></tr><tr><td class="firstcol " ><p><strong>Sensors</strong></p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td></tr><tr><td class="firstcol " ><p><strong>GPS</strong></p></td><td  ><p>No</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life</strong></p></td><td  ><p>Up to 7 days</p></td><td  ><p>Up to 10 days</p></td></tr><tr><td class="firstcol " ><p><strong>Water resistance </strong></p></td><td  ><p>50 meters</p></td><td  ><p>50 meters</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-cost"><span>Fitbit Air vs Fitbit Inspire 3: Cost</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air and Fitbit Inspire 3 each cost $99. However, the former is much newer and unlikely to see a discount anytime soon, while the latter goes on sale often for up to 30% off. </p><p>For example, as of writing, you can pick up the Inspire 3 for just <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7" target="_blank" rel="nofollow">$79 at Amazon.</a></p><p><em><strong>Winner: </strong></em><em>Fitbit Inspire 3 </em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-design"><span>Fitbit Air vs Fitbit Inspire 3: design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5150px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="ACasPG6gGJGN83nJ2M5yiD" name="FitbitAir-Inspire-03" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/ACasPG6gGJGN83nJ2M5yiD.jpg" mos="" align="middle" fullscreen="" width="5150" height="2896" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Inspire 3 and Fitbit Air are both small, comfortable fitness trackers that don't garner much attention or get in the way of daily life. However, the newer Air is both smaller and lighter than the Inspire 3 and offers a wider selection of band materials.</p><p>Neither wearable has physical buttons, but the Inspire 3 offers two haptic buttons on either side and sports a small AMOLED touchscreen. Depending on your ability to read tiny text and the daintiness of your fingers, navigating the Inspire 3's controls is a hit-or-miss affair. </p><p>Ultimately, I prefer the simpler, less-distracting design of the Fitbit Air to the fiddly controls and comically small screen of the Inspire 3.</p><p><em><strong>Winner: </strong></em><em>Fitbit Air</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-customization"><span>Fitbit Air vs Fitbit Inspire 3: customization </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5459px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ZbZb7oVskZ74qYjLHoJ2UN" name="FitbitAir-rev-03" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/ZbZb7oVskZ74qYjLHoJ2UN.jpg" mos="" align="middle" fullscreen="" width="5459" height="3071" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is designed for maximum accessory customization. All of the tracking components and battery are contained within a small, pebble-like shell that can easily be popped out of one strap and swapped into another.</p><p>Google has a decent selection of accessory bands for the Fitbit Air available; I tried them all, and <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-all-3-fitbit-air-accessory-bands-and-theres-a-clear-winner">there's a clear winner</a>. However, with a starting price of $34.99, I'm looking forward to more affordable third-party options popping up on Amazon and the likes, eventually. </p><p>The Fitbit Inspire 3 also supports band swapping, but removing and installing a band is a trickier process. That said, to my surprise, Google sells some pretty cool-looking <a href="https://store.google.com/us/product/fitbit_inspire_3_band_translucent" target="_blank" rel="nofollow">Inspire 3 bands </a>to replace the standard-issued ones.</p><p><em><strong>Winner: </strong></em><em>Fitbit Air</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-health-and-fitness"><span>Fitbit Air vs Fitbit Inspire 3: Health and fitness</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5353px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="VkLkWNHBhnVYjFjPbnwNVD" name="FitbitAir-Inspire-04" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/VkLkWNHBhnVYjFjPbnwNVD.jpg" mos="" align="middle" fullscreen="" width="5353" height="3011" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Inspire 3 and Fitbit Air boast the same onboard tech, including sensors for tracking heart rate, blood oxygen saturation, movement and temperature. However, it's unclear whether the Air is using newer sensors or the same generation as the Inspire 3. </p><p>Either way, both devices keep tabs on your overall well-being, sleep quality, fitness, and women's health. However, neither sports an onboard GPS for location tracking data or an altimeter for elevation insights. </p><p>This means that you'll need to carry a paired smartphone along when working out to accurately capture metrics like distance, pace, speed, and elevation gain.  </p><p>You also get automatic workout tracking for a small selection of common exercises, regardless of which tracker you choose. Meanwhile, more nuanced activities can be manually selected. </p><p><em><strong>Winner:</strong></em><em> Draw</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-smart-features"><span>Fitbit Air vs Fitbit Inspire 3: Smart features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3336px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="mNXSahwgqp3bezyap6J7SH" name="IMG_7170.jpg" alt="A photo of the sleep tracking on the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/mNXSahwgqp3bezyap6J7SH.jpg" mos="" align="middle" fullscreen="" width="3336" height="1876" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Neither of these fitness trackers offers much by way of smart features, but that's the point. Apps like Google Wallet and YouTube Music are reserved for the higher-end <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>. You also won't find onboard storage for saving music on either. </p><p>The Inspire 3 <em>can</em> mirror smartphone notifications from Android or iOS devices on its tiny screen, but it's not a great user experience. Meanwhile, both wearables support Google's lovely <a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">Smart Wake</a> haptic alarm feature. And that's a wrap for smart features. </p><p><em><strong>Winner:</strong></em><em> Draw</em></p><h3 class="article-body__section" id="section-fitbit-air-vs-fitbit-inspire-3-battery-life"><span>Fitbit Air vs Fitbit Inspire 3: Battery life</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3606px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="jEK2CMjArSconc4xGujcpa" name="Fitbit-Inspire3-red" alt="Rear of the Fitbit Inspire 3 up-close on a red background; the new Fitbit Air could cost the same as the Inspire 3 ($99)" src="https://cdn.mos.cms.futurecdn.net/jEK2CMjArSconc4xGujcpa.jpg" mos="" align="middle" fullscreen="" width="3606" height="2028" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Battery life is impressive with any tracker you choose, but the Fitbit Inspire 3 lasts a little longer than the Air. In our testing, the Inspire 3 easily meets the ten-day-per-charge threshold, while the Air effortlessly matches the advertised seven days per charge. </p><p><em><strong>Winner:</strong></em><em> Fitbit Inspire 3 </em></p><h3 class="article-body__section" id="section-verdict"><span>Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>In terms of performance, wearability, and cost, the Fitbit Air and Fitbit Inspire 3 are extremely similar. What sets them apart largely boils down to design. Simply put, the Inspire 3 has a small screen for starting workouts, viewing stats, and receiving mirrored smartphone notifications, while the Air does not.</p><p>Personally, I prefer the Fitbit Air's set-it-and-forget-it approach to wellness tracking, with no annoying controls or tiny screens to deal with. I admit, starting a workout session from the Google Health app is a tad annoying, and the Air's <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review#section-fitbit-air-fitness-tracking-3-5">auto workout tracking</a> needs... work, but the overall user experience of the Air feels more refined than that of the Inspire 3. </p><p>Of course, at the end of the day, they both log the same health and fitness insights. </p><p><em><strong>Overall winner: </strong></em><em>Draw</em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYxboO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYxboO.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-tested-all-3-fitbit-air-accessory-bands-and-theres-a-clear-winner">I tested all 3 Fitbit Air accessory bands — and there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">I've been using the Fitbit Air for over a week, and my favorite feature has completely changed the way I wake up</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tested all 3 Fitbit Air accessory bands — and there’s a clear winner ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Which Fitbit Air band is best? I tried all three, and there’s a clear winner. </p><p>The screen-free and subscription-optional <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is Google's answer to the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> fitness tracker, and one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best fitness trackers</a> in 2026. Starting at $99, users can select from three strap types —  though, more are in the works — including two woven options and one silicone.</p><p>I've been wearing the Fitbit Air for over a week and tested all three options, both while working out and hanging out. Here's how I rank them. </p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gMwOBe" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><div class="product"><a data-dimension112="1c98e836-a1a9-4fec-b0ef-55f22508488c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.bestbuy.com/product/google-fitbit-air-screenless-fitness-and-health-tracking-works-with-android-and-ios-lavender-2026/J39TC8CYPC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a $99 tracker with no screens and no distractions. Promising a week of battery, reliable health and fitness logging, and a sleek, comfortable design, it's a great non-fuss wearable with lots of helpful holistic insights. <a class="view-deal button" href="https://www.bestbuy.com/product/google-fitbit-air-screenless-fitness-and-health-tracking-works-with-android-and-ios-lavender-2026/J39TC8CYPC" target="_blank" rel="nofollow" data-dimension112="1c98e836-a1a9-4fec-b0ef-55f22508488c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><h3 class="article-body__section" id="section-third-place-fitbit-active-band"><span>Third place: Fitbit Active Band</span></h3><ul><li><strong>Price: </strong>$34.99 or $99 with Fitbit Air</li><li><strong>Styles: </strong>Obsidian, Lavender, Berry, Fog</li><li><strong>Sizes: </strong>Small (130-175mm), Large (165-210mm)</li><li><strong>Material: </strong>Silicone</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>In third place, we have the silicone Fitbit Active Band, available in your choice of four colors, including Berry, shown here. This option is sold either kitted with the Fitbit Air for $99 or on its own for <a href="https://store.google.com/product/google_fitbit_air_active_band" target="_blank" rel="nofollow">$34.99 via Google</a> directly. </p><p>As far as rubbery/silicone straps go, this one is fairly soft on the skin; however, several factors detract from its appeal.</p><p>For starters, the Active Band is both thicker and less flexible than the woven strap options. It also secures to your wrist with a pin-and-buckle style system, so you can't make micro-adjustments for maximum comfort. That said, two sizes are available.</p><p>Finally, I'm not a fan of how silicone feels on my skin, in general, when I'm super sweaty. So, the Fitbit Active Band was never going to be my top choice. </p><h3 class="article-body__section" id="section-second-place-fitbit-performance-loop"><span>Second place: Fitbit Performance Loop</span></h3><ul><li><strong>Price: </strong>$34.99 or $99 with Fitbit Air</li><li><strong>Styles: </strong>Obsidian, Lavender, Berry, Fog</li><li><strong>Size: </strong>One size (130-210mm)</li><li><strong>Material: </strong>Woven polyester and elastane fabric, stainless steel buckle</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3986px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9ZrfpRB5krdJGJhqZGcMMg" name="IMG_8507" alt="a photo of the Whoop MG and Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/9ZrfpRB5krdJGJhqZGcMMg.jpg" mos="" align="middle" fullscreen="" width="3986" height="2242" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In second place, we have the Fitbit Performance Loop, which comes in the same four color options as the Active Band above. It's also priced at <a href="https://store.google.com/product/google_fitbit_air_performance_loop_band" target="_blank" rel="nofollow">$34.99 from Google</a> à la carte, or $99 with the tracker.</p><p>The Performance Loop is a woven textile strap made from a mix of polyester and stretchy elastane, with a shiny, stainless steel buckle. Available in one size, velcro allows for infinite micro-adjustments. </p><p>Overall, I found this strap to be quite comfortable; it's seriously lightweight, flexible, and anything but thick. However, the woven material is a bit slick, so the Fitbit's sensors occasionally slide from their ideal position, atop the wrist, when working out or just getting sweaty. </p><p>Fortunately, my favorite Fitbit Air band solves this issue.</p><h3 class="article-body__section" id="section-first-place-fitbit-stephen-curry-loop"><span>First place: Fitbit Stephen Curry Loop </span></h3><ul><li><strong>Price: </strong>$129 with Fitbit Air</li><li><strong>Style: </strong>Orange and Rye</li><li><strong>Size: </strong>One size (130-210mm)</li><li><strong>Material: </strong>Woven polyester and elastane fabric w/ water resistant coating and silicone ribs, satin finish stainless steel buckle</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>The Fitbit Air Stephen Curry Loop is hands down the best accessory band for the device from a comfort standpoint. I also think the black, orange, and rye woven pattern looks really sharp; colleagues and pals tend to agree.</p><p>Unfortunately, at this time, Google isn't selling the Stephen Curry band on its own. The only way to secure one is to purchase the special edition <a href="https://www.bestbuy.com/product/google-fitbit-air-screenless-fitness-and-health-tracking-works-with-android-and-ios-lavender-2026/J39TC8CYPC" target="_blank" rel="nofollow">Fitbit Air for $129.99</a>; fortunately, while it's 'special edition,' it's not 'limited edition.' </p><p>This band uses the same woven material as the standard Performance Loop; however, Steph's version is treated with a water-repellent coating to make it more quick drying. In my testing, it dries extremely fast, even after a proper soaking in the shower.</p><p>The underside of the Steph Curry Loop features raised silicone ribs running parallel to the length of the strap. These not only increase airflow but also help secure the Fitbit Air in place on your wrist during physical activities. </p><p>Ultimately, I think the Steph Curry strap is worth the extra $30 compared to the others. Now I just wish Google would offer it in additional styles and à la carte. Even if they're $40, I'd probably pick up another. Any more than that, and I'll wait for a sale.</p><p>Which Fitbit Air strap do you prefer? Let me know in the poll below.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVPrW"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVPrW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">I've been using the Fitbit Air for over a week, and my favorite feature has completely changed the way I wake up</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Forget the Whoop 5.0 — The new Fitbit Air is a screen-less, subscription-free fitness tracker for the masses</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-tested-all-3-fitbit-air-accessory-bands-and-theres-a-clear-winner</link>
                                                                            <description>
                            <![CDATA[ I've been wearing the Fitbit Air for over a week and tested all three accessory bands, both while working out and hanging out. Here's how I rank them. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">tbLtLghoYpHZaVCCHkc9Ra</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ZbZb7oVskZ74qYjLHoJ2UN-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 02 Jun 2026 11:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 02 Jun 2026 15:25:55 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ZbZb7oVskZ74qYjLHoJ2UN-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Air]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Air]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Air]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ZbZb7oVskZ74qYjLHoJ2UN-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Which Fitbit Air band is best? I tried all three, and there’s a clear winner. </p><p>The screen-free and subscription-optional <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is Google's answer to the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> fitness tracker, and one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best fitness trackers</a> in 2026. Starting at $99, users can select from three strap types —  though, more are in the works — including two woven options and one silicone.</p><p>I've been wearing the Fitbit Air for over a week and tested all three options, both while working out and hanging out. Here's how I rank them. </p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gMwOBe" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><div class="product"><a data-dimension112="1c98e836-a1a9-4fec-b0ef-55f22508488c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.bestbuy.com/product/google-fitbit-air-screenless-fitness-and-health-tracking-works-with-android-and-ios-lavender-2026/J39TC8CYPC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a $99 tracker with no screens and no distractions. Promising a week of battery, reliable health and fitness logging, and a sleek, comfortable design, it's a great non-fuss wearable with lots of helpful holistic insights. <a class="view-deal button" href="https://www.bestbuy.com/product/google-fitbit-air-screenless-fitness-and-health-tracking-works-with-android-and-ios-lavender-2026/J39TC8CYPC" target="_blank" rel="nofollow" data-dimension112="1c98e836-a1a9-4fec-b0ef-55f22508488c" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><h3 class="article-body__section" id="section-third-place-fitbit-active-band"><span>Third place: Fitbit Active Band</span></h3><ul><li><strong>Price: </strong>$34.99 or $99 with Fitbit Air</li><li><strong>Styles: </strong>Obsidian, Lavender, Berry, Fog</li><li><strong>Sizes: </strong>Small (130-175mm), Large (165-210mm)</li><li><strong>Material: </strong>Silicone</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>In third place, we have the silicone Fitbit Active Band, available in your choice of four colors, including Berry, shown here. This option is sold either kitted with the Fitbit Air for $99 or on its own for <a href="https://store.google.com/product/google_fitbit_air_active_band" target="_blank" rel="nofollow">$34.99 via Google</a> directly. </p><p>As far as rubbery/silicone straps go, this one is fairly soft on the skin; however, several factors detract from its appeal.</p><p>For starters, the Active Band is both thicker and less flexible than the woven strap options. It also secures to your wrist with a pin-and-buckle style system, so you can't make micro-adjustments for maximum comfort. That said, two sizes are available.</p><p>Finally, I'm not a fan of how silicone feels on my skin, in general, when I'm super sweaty. So, the Fitbit Active Band was never going to be my top choice. </p><h3 class="article-body__section" id="section-second-place-fitbit-performance-loop"><span>Second place: Fitbit Performance Loop</span></h3><ul><li><strong>Price: </strong>$34.99 or $99 with Fitbit Air</li><li><strong>Styles: </strong>Obsidian, Lavender, Berry, Fog</li><li><strong>Size: </strong>One size (130-210mm)</li><li><strong>Material: </strong>Woven polyester and elastane fabric, stainless steel buckle</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3986px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9ZrfpRB5krdJGJhqZGcMMg" name="IMG_8507" alt="a photo of the Whoop MG and Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/9ZrfpRB5krdJGJhqZGcMMg.jpg" mos="" align="middle" fullscreen="" width="3986" height="2242" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In second place, we have the Fitbit Performance Loop, which comes in the same four color options as the Active Band above. It's also priced at <a href="https://store.google.com/product/google_fitbit_air_performance_loop_band" target="_blank" rel="nofollow">$34.99 from Google</a> à la carte, or $99 with the tracker.</p><p>The Performance Loop is a woven textile strap made from a mix of polyester and stretchy elastane, with a shiny, stainless steel buckle. Available in one size, velcro allows for infinite micro-adjustments. </p><p>Overall, I found this strap to be quite comfortable; it's seriously lightweight, flexible, and anything but thick. However, the woven material is a bit slick, so the Fitbit's sensors occasionally slide from their ideal position, atop the wrist, when working out or just getting sweaty. </p><p>Fortunately, my favorite Fitbit Air band solves this issue.</p><h3 class="article-body__section" id="section-first-place-fitbit-stephen-curry-loop"><span>First place: Fitbit Stephen Curry Loop </span></h3><ul><li><strong>Price: </strong>$129 with Fitbit Air</li><li><strong>Style: </strong>Orange and Rye</li><li><strong>Size: </strong>One size (130-210mm)</li><li><strong>Material: </strong>Woven polyester and elastane fabric w/ water resistant coating and silicone ribs, satin finish stainless steel buckle</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>The Fitbit Air Stephen Curry Loop is hands down the best accessory band for the device from a comfort standpoint. I also think the black, orange, and rye woven pattern looks really sharp; colleagues and pals tend to agree.</p><p>Unfortunately, at this time, Google isn't selling the Stephen Curry band on its own. The only way to secure one is to purchase the special edition <a href="https://www.bestbuy.com/product/google-fitbit-air-screenless-fitness-and-health-tracking-works-with-android-and-ios-lavender-2026/J39TC8CYPC" target="_blank" rel="nofollow">Fitbit Air for $129.99</a>; fortunately, while it's 'special edition,' it's not 'limited edition.' </p><p>This band uses the same woven material as the standard Performance Loop; however, Steph's version is treated with a water-repellent coating to make it more quick drying. In my testing, it dries extremely fast, even after a proper soaking in the shower.</p><p>The underside of the Steph Curry Loop features raised silicone ribs running parallel to the length of the strap. These not only increase airflow but also help secure the Fitbit Air in place on your wrist during physical activities. </p><p>Ultimately, I think the Steph Curry strap is worth the extra $30 compared to the others. Now I just wish Google would offer it in additional styles and à la carte. Even if they're $40, I'd probably pick up another. Any more than that, and I'll wait for a sale.</p><p>Which Fitbit Air strap do you prefer? Let me know in the poll below.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVPrW"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVPrW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">I've been using the Fitbit Air for over a week, and my favorite feature has completely changed the way I wake up</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Forget the Whoop 5.0 — The new Fitbit Air is a screen-less, subscription-free fitness tracker for the masses</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I walked 4,500 steps with the Fitbit Air vs Apple Watch SE 3 — and I'm surprised by the winner ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I tested the fitness tracking performance of the Apple Watch SE 3 vs the Fitbit Air while walking exactly 4,500 steps, and I'm surprised by the winner.</p><p>The <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3 </a>is Cupertino's latest entry-level, full-featured smartwatch and one of the <a href="https://www.tomsguide.com/us/best-cheap-smartwatches,review-6342.html#section-best-cheap-apple-watch">best cheap smartwatches</a> of 2026. The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a>, meanwhile, is a brand-new, diminutive, screen-free wearable and one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best fitness trackers</a> available right now. </p><p>Both devices track tons of workout types and deliver similarly detailed post-effort insights, but which one is more reliable? To find out, I walked 4,5000 steps while wearing the Apple Watch SE 3 on my left wrist and the Fitbit Air on my right. As a primary control for tracking accuracy, I manually counted my steps, noting every hundred taken with a click of my trusty tally counter.</p><p>I also logged my efforts using the Strava app on my iPhone 16 Plus as a control for distance, pace, and climb data. So, which wearable came out on top, the Fitbit Air or the Apple Watch SE 3? Read on.</p><div class="product"><a data-dimension112="6666762c-7a55-11f1-983d-f7d770b22802" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is an easy-wearing, screen and distraction-free set-it-and-forget-it fitness tracker that costs just $99 and is big on health, sleep, and workout insights. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="6666762c-7a55-11f1-983d-f7d770b22802" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="66667690-7a55-11f1-b29a-41d69a115788" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="$239" href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H/ref=sr_1_1_sspa" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1273px;"><p class="vanilla-image-block" style="padding-top:117.83%;"><img id="2bCWceQAvz6EQqKG8LB4ee" name="Apple Watch SE 3 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2bCWceQAvz6EQqKG8LB4ee.png" mos="" align="middle" fullscreen="" width="1273" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="66667690-7a55-11f1-b29a-41d69a115788" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="$239">Watch SE 3: was $249 now $239</a></strong><br>Apple's entry-level smartwatch offers nearly all the same features as its pricier siblings, for a whole lot less coin. Boasting a lovely AMOLED screen, reliable holistic insights, and support for virtually a zillion smart features and apps, it's my favorite cheap smartwatch of 2026.<a class="view-deal button" href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="66667690-7a55-11f1-b29a-41d69a115788" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="$239">View Deal</a></p></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-se-3-fitness-tracking-accuracy-compared"><span>Fitbit Air vs Apple Watch SE 3: fitness tracking accuracy compared</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="xn3fPVemZegbKeK8ruNc7W" name="SE3-v-Air-05" alt="Close-up of the Apple Watch SE 3 and Fitbit Air in a user's hand against a colorful, vibrant background" src="https://cdn.mos.cms.futurecdn.net/xn3fPVemZegbKeK8ruNc7W.jpg" mos="" align="middle" fullscreen="" width="5712" height="3214" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Before jumping into the results, it's worth noting some of the primary differences between these two popular wearables. For starters, the screen-less Fitbit Air is designed to be a distraction-free tracker with no notifications or smart features (<a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">except just one</a>).</p><p>On the other hand, the Apple Watch SE 3 is essentially the opposite: an ultra-connected smartwatch that does much more, in terms of smart features, than just track health and fitness stats. The SE 3 is also considerably pricier than the Air, starting at $249 compared to $99 for the latest Fitbit.</p><p>Finally, the Apple Watch SE 3 sports onboard GPS for location tracking without a paired smartphone; the Fitbit Air does not. That said, when you do carry your smartphone while logging an outdoor workout with the Air, fitness tracking <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review#section-fitbit-air-fitness-tracking-3-5">performance is excellent</a>. </p><p>Now, on to the test results!</p><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-se-3-walk-test-results"><span>Fitbit Air vs Apple Watch SE 3: Walk test results </span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Apple Watch SE 3</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>4,488 steps</p></td><td  ><p> 4,463 steps</p></td><td  ><p>4,500 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>2.41 miles</p></td><td  ><p>2.37 miles</p></td><td  ><p>2.40 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>199 feet</p></td><td  ><p>289 feet</p></td><td  ><p>277 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace (elapsed) </p></td><td  ><p>17 mins 24 secs</p></td><td  ><p>17 mins 07 secs</p></td><td  ><p>16 mins 50 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>122 bpm</p></td><td  ><p>135 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>160 bpm</p></td><td  ><p>167 bpm</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>I logged exactly 4,500 steps (manual count) during my roughly 40-minute walk around a gloomy Seattle, Washington, including a climb up the <a href="https://www.tomsguide.com/home/electric-bikes/i-tried-to-ride-treks-new-ebike-up-the-steepest-hill-in-seattle-and-it-didnt-go-as-planned">city's steepest hill</a>. And much to my delight, both wearables logged similar step counts that fall well within a reasonable margin of error; ultimately, any tally within 100 steps of my actual count is considered an impressive outcome. </p><p>However, while the Apple Watch SE 3 is just 37 steps of my actual total, the Fitbit Air is off by just 12 steps. Strava, meanwhile, bested them both, logging 4,502 steps. </p><p>Distance data is similarly enough across the board, with Fitbit Air proving slightly more in line with the control data.  However, the Air's climb data leaves a lot to be desired. The SE 3, in contrast, noted just a bit more uphill effort than Strava. </p><p>Thanks to the gloom, I encountered little traffic, which meant that I didn't stop moving at any point during this walk. As a result, I expected my average pace to be pretty similar across the board, which it is. However, Apple's pace calculation is closer to the control than Fitbit's.</p><p>Similar to my prior walk test with the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">Fitbit Air vs Garmin Forerunner 70</a>, the former's heart rate data is noticeably lower than the competition's. This is a somewhat odd result, given that the Fitbit Air's heart rate tracking performed admirably time and again during testing for the review, regardless of which wrist I wore it on.</p><p>One possible theory for the discrepancies: I didn't wear the Air tightly enough during my last two walk tests. </p><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-se-3-winner"><span>Fitbit Air vs Apple Watch SE 3: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:50.01%;"><img id="wNxwSP3oTrgcw3KuNCjzw" name="Fitbit-Air-lead-05-header" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/wNxwSP3oTrgcw3KuNCjzw.jpg" mos="" align="middle" fullscreen="" width="4805" height="2403" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Despite the Apple Watch SE 3 costing 2.5x the Fitbit Air, Google's humble, screen-less fitness tracker wins this showdown. However, the SE 3 performed nearly as well when it comes to step count and was more accurate across the board for other key metrics. </p><p>Which fitness trackers, smartwatches, smart rings, etc. would you like me to test head-to-head next? Let me know in the comments below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eAxA4X"></div>                            </div>                            <script src="https://kwizly.com/embed/eAxA4X.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-spent-one-week-with-a-wallet-friendly-garmin-forerunner-970-dupe-5-things-that-stand-out-about-the-usd300-cheaper-amazfit-cheetah-2-pro">I spent one week with a wallet-friendly Garmin Forerunner 970 dupe —  5 things that stand out about the $300 cheaper Amazfit Cheetah 2 Pro</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-walked-4-500-steps-with-the-fitbit-air-vs-apple-watch-se-3-and-im-surprised-by-the-winner</link>
                                                                            <description>
                            <![CDATA[ Can the new $99 Fitbit Air compete with the $249 Apple Watch SE 3? To find out, I walked precisely 4,500 steps wearing both, and analyzed the results. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KupxRX2ZjCf7aQAGSdDwsk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/YVcdQrtyDuQoDUeaZKAmLi-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 31 May 2026 10:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 07 Jul 2026 22:44:23 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/YVcdQrtyDuQoDUeaZKAmLi-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Apple Watch SE 3 and Fitbit Air in a user&#039;s hand against a bright, colorful background]]></media:description>                                                            <media:text><![CDATA[Close-up of the Apple Watch SE 3 and Fitbit Air in a user&#039;s hand against a bright, colorful background]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Apple Watch SE 3 and Fitbit Air in a user&#039;s hand against a bright, colorful background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/YVcdQrtyDuQoDUeaZKAmLi-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I tested the fitness tracking performance of the Apple Watch SE 3 vs the Fitbit Air while walking exactly 4,500 steps, and I'm surprised by the winner.</p><p>The <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3 </a>is Cupertino's latest entry-level, full-featured smartwatch and one of the <a href="https://www.tomsguide.com/us/best-cheap-smartwatches,review-6342.html#section-best-cheap-apple-watch">best cheap smartwatches</a> of 2026. The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a>, meanwhile, is a brand-new, diminutive, screen-free wearable and one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best fitness trackers</a> available right now. </p><p>Both devices track tons of workout types and deliver similarly detailed post-effort insights, but which one is more reliable? To find out, I walked 4,5000 steps while wearing the Apple Watch SE 3 on my left wrist and the Fitbit Air on my right. As a primary control for tracking accuracy, I manually counted my steps, noting every hundred taken with a click of my trusty tally counter.</p><p>I also logged my efforts using the Strava app on my iPhone 16 Plus as a control for distance, pace, and climb data. So, which wearable came out on top, the Fitbit Air or the Apple Watch SE 3? Read on.</p><div class="product"><a data-dimension112="6666762c-7a55-11f1-983d-f7d770b22802" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is an easy-wearing, screen and distraction-free set-it-and-forget-it fitness tracker that costs just $99 and is big on health, sleep, and workout insights. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="6666762c-7a55-11f1-983d-f7d770b22802" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="66667690-7a55-11f1-b29a-41d69a115788" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="$239" href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H/ref=sr_1_1_sspa" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1273px;"><p class="vanilla-image-block" style="padding-top:117.83%;"><img id="2bCWceQAvz6EQqKG8LB4ee" name="Apple Watch SE 3 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2bCWceQAvz6EQqKG8LB4ee.png" mos="" align="middle" fullscreen="" width="1273" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="66667690-7a55-11f1-b29a-41d69a115788" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="$239">Watch SE 3: was $249 now $239</a></strong><br>Apple's entry-level smartwatch offers nearly all the same features as its pricier siblings, for a whole lot less coin. Boasting a lovely AMOLED screen, reliable holistic insights, and support for virtually a zillion smart features and apps, it's my favorite cheap smartwatch of 2026.<a class="view-deal button" href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="66667690-7a55-11f1-b29a-41d69a115788" data-action="Deal Block" data-label="Watch SE 3" data-dimension48="Watch SE 3" data-dimension25="$239">View Deal</a></p></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-se-3-fitness-tracking-accuracy-compared"><span>Fitbit Air vs Apple Watch SE 3: fitness tracking accuracy compared</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="xn3fPVemZegbKeK8ruNc7W" name="SE3-v-Air-05" alt="Close-up of the Apple Watch SE 3 and Fitbit Air in a user's hand against a colorful, vibrant background" src="https://cdn.mos.cms.futurecdn.net/xn3fPVemZegbKeK8ruNc7W.jpg" mos="" align="middle" fullscreen="" width="5712" height="3214" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Before jumping into the results, it's worth noting some of the primary differences between these two popular wearables. For starters, the screen-less Fitbit Air is designed to be a distraction-free tracker with no notifications or smart features (<a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day">except just one</a>).</p><p>On the other hand, the Apple Watch SE 3 is essentially the opposite: an ultra-connected smartwatch that does much more, in terms of smart features, than just track health and fitness stats. The SE 3 is also considerably pricier than the Air, starting at $249 compared to $99 for the latest Fitbit.</p><p>Finally, the Apple Watch SE 3 sports onboard GPS for location tracking without a paired smartphone; the Fitbit Air does not. That said, when you do carry your smartphone while logging an outdoor workout with the Air, fitness tracking <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review#section-fitbit-air-fitness-tracking-3-5">performance is excellent</a>. </p><p>Now, on to the test results!</p><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-se-3-walk-test-results"><span>Fitbit Air vs Apple Watch SE 3: Walk test results </span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Apple Watch SE 3</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>4,488 steps</p></td><td  ><p> 4,463 steps</p></td><td  ><p>4,500 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>2.41 miles</p></td><td  ><p>2.37 miles</p></td><td  ><p>2.40 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>199 feet</p></td><td  ><p>289 feet</p></td><td  ><p>277 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace (elapsed) </p></td><td  ><p>17 mins 24 secs</p></td><td  ><p>17 mins 07 secs</p></td><td  ><p>16 mins 50 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>122 bpm</p></td><td  ><p>135 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>160 bpm</p></td><td  ><p>167 bpm</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>I logged exactly 4,500 steps (manual count) during my roughly 40-minute walk around a gloomy Seattle, Washington, including a climb up the <a href="https://www.tomsguide.com/home/electric-bikes/i-tried-to-ride-treks-new-ebike-up-the-steepest-hill-in-seattle-and-it-didnt-go-as-planned">city's steepest hill</a>. And much to my delight, both wearables logged similar step counts that fall well within a reasonable margin of error; ultimately, any tally within 100 steps of my actual count is considered an impressive outcome. </p><p>However, while the Apple Watch SE 3 is just 37 steps of my actual total, the Fitbit Air is off by just 12 steps. Strava, meanwhile, bested them both, logging 4,502 steps. </p><p>Distance data is similarly enough across the board, with Fitbit Air proving slightly more in line with the control data.  However, the Air's climb data leaves a lot to be desired. The SE 3, in contrast, noted just a bit more uphill effort than Strava. </p><p>Thanks to the gloom, I encountered little traffic, which meant that I didn't stop moving at any point during this walk. As a result, I expected my average pace to be pretty similar across the board, which it is. However, Apple's pace calculation is closer to the control than Fitbit's.</p><p>Similar to my prior walk test with the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">Fitbit Air vs Garmin Forerunner 70</a>, the former's heart rate data is noticeably lower than the competition's. This is a somewhat odd result, given that the Fitbit Air's heart rate tracking performed admirably time and again during testing for the review, regardless of which wrist I wore it on.</p><p>One possible theory for the discrepancies: I didn't wear the Air tightly enough during my last two walk tests. </p><h3 class="article-body__section" id="section-fitbit-air-vs-apple-watch-se-3-winner"><span>Fitbit Air vs Apple Watch SE 3: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:50.01%;"><img id="wNxwSP3oTrgcw3KuNCjzw" name="Fitbit-Air-lead-05-header" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/wNxwSP3oTrgcw3KuNCjzw.jpg" mos="" align="middle" fullscreen="" width="4805" height="2403" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Despite the Apple Watch SE 3 costing 2.5x the Fitbit Air, Google's humble, screen-less fitness tracker wins this showdown. However, the SE 3 performed nearly as well when it comes to step count and was more accurate across the board for other key metrics. </p><p>Which fitness trackers, smartwatches, smart rings, etc. would you like me to test head-to-head next? Let me know in the comments below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eAxA4X"></div>                            </div>                            <script src="https://kwizly.com/embed/eAxA4X.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-spent-one-week-with-a-wallet-friendly-garmin-forerunner-970-dupe-5-things-that-stand-out-about-the-usd300-cheaper-amazfit-cheetah-2-pro">I spent one week with a wallet-friendly Garmin Forerunner 970 dupe —  5 things that stand out about the $300 cheaper Amazfit Cheetah 2 Pro</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've been using the Fitbit Air for over a week, and my favorite feature has completely changed the way I wake up ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026, especially if you prefer a screenless and distraction-free wearable with long-lasting battery and rock-solid reliability. </p><p>Priced at $99, with all major health, sleep, and fitness metrics available subscription-free, the Fitbit Air is also the best budget-friendly Whoop alternative, and my favorite fitness tracker of 2026 so far.</p><p>With no screen, buttons, NFC, or mirrored smartphone notifications to distract you, the Fitbit Air offers just one feature I’d consider to be truly ‘smart.’ More importantly, this feature has totally changed the way I start my day. </p><h3 class="article-body__section" id="section-no-smart-alerts-or-distractions-except-this-one"><span>No smart alerts or distractions… except this one</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>In theory, the Fitbit Air <em>could</em> alert you to an incoming phone call, text message, or any other notification. However, by design, the onboard haptic motor is only capable of vibrating when you set an alarm from the sleep tab in the Google Health app (formerly the <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">Fitbit app</a>). </p><p>This is by no means a new or groundbreaking feature for wearables in 2026; plenty of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbits</a> and many of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatch</a> models offer something similar. However, I’m a little surprised but genuinely pleased that Google included hatpic feedback with the brand’s latest Fitbit. </p><p>Users can save up to eight alarms total. When one goes off, the tracker gently vibrates for roughly 30 seconds before going into snooze mode. This delays the alarm for exactly nine minutes (and can’t be changed) before it goes off again.</p><p>Not only is this a lovely, non-startling way to wake up — and one I’ve fully adopted — but unlike a standard audible alarm, the Fitbit Air alarm doesn’t wake my sleeping partner, or even my dog, Belverdere. </p><p>To silence the Fitbit Air’s haptic alarm, firmly double-tap the top of the tracker. From my experience, this works the first time, roughly 90% of the time. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4114px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="m3zAnMrGySMYrDxq46JKLY" name="Fitbit-Air-lead-03" alt="Close-up of the sensors on the Fitbit Air screenless fitness tracker" src="https://cdn.mos.cms.futurecdn.net/m3zAnMrGySMYrDxq46JKLY.jpg" mos="" align="middle" fullscreen="" width="4114" height="2315" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><h3 class="article-body__section" id="section-the-brilliance-of-smart-wake"><span>The brilliance of ‘Smart Wake’</span></h3><p>In addition to a haptic alarm, the Fitbit Air also supports Google’s ‘Smart Wake’ feature, which, when activated, prioritizes waking you during your optimal sleep stage, i.e., when you’re not in deep sleep or REM. </p><p>When switched on, Smart Wake will wake you up to 30 minutes before your actual alarm, but never after. </p><h3 class="article-body__section" id="section-some-room-for-improvement"><span>Some room for improvement </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4923px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="v4R3RdVkt2tearzZXDp52N" name="FitbitAir-rev-07" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/v4R3RdVkt2tearzZXDp52N.jpg" mos="" align="middle" fullscreen="" width="4923" height="2769" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>It’s worth noting that I’m a reasonably light sleeper, and even though the level of vibration offered by the Fitbit Air’s alarm is more than enough to get my eyes open, it may not be enough to awaken more hardcore snoozers.</p><p>My suggested solution for Google: Add a new function that lets users adjust how much the Air vibrates when the alarm goes off, with three levels to select from. </p><p>Have you ever tried waking up via haptics on a fitness tracker or smartwatch? What was your experience? Let me know in the comments below. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-screen-less-whoop-competitor-could-cost-five-times-as-much-as-the-fitbit-air"><strong>Garmin’s screen-less Whoop competitor could cost five times as much as the Fitbit Air</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing"><strong>The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses"><strong>Forget the Whoop 5.0 — The new Fitbit Air is a screen-less, subscription-free fitness tracker for the masses</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-only-has-one-smart-feature-and-its-totally-changed-the-way-i-start-my-day</link>
                                                                            <description>
                            <![CDATA[ I just spent over a week reviewing the new screen-free, $99 Fitbit Air fitness tracker, and this simple, yet brilliant feature is my favorite. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">HW9uKHG8QFuJ8XY3pi8N8E</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 29 May 2026 06:30:00 +0000</pubDate>                                                                                                                                <updated>Sat, 30 May 2026 00:09:32 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap]]></media:description>                                                            <media:text><![CDATA[Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026, especially if you prefer a screenless and distraction-free wearable with long-lasting battery and rock-solid reliability. </p><p>Priced at $99, with all major health, sleep, and fitness metrics available subscription-free, the Fitbit Air is also the best budget-friendly Whoop alternative, and my favorite fitness tracker of 2026 so far.</p><p>With no screen, buttons, NFC, or mirrored smartphone notifications to distract you, the Fitbit Air offers just one feature I’d consider to be truly ‘smart.’ More importantly, this feature has totally changed the way I start my day. </p><h3 class="article-body__section" id="section-no-smart-alerts-or-distractions-except-this-one"><span>No smart alerts or distractions… except this one</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4805px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bFju7tvNftUTkppemXS2tT" name="Fitbit-Air-lead-05" alt="Close-up of the Fitbit Air on-wrist on a red strap against a blue background" src="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT.jpg" mos="" align="middle" fullscreen="" width="4805" height="2703" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>In theory, the Fitbit Air <em>could</em> alert you to an incoming phone call, text message, or any other notification. However, by design, the onboard haptic motor is only capable of vibrating when you set an alarm from the sleep tab in the Google Health app (formerly the <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">Fitbit app</a>). </p><p>This is by no means a new or groundbreaking feature for wearables in 2026; plenty of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbits</a> and many of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatch</a> models offer something similar. However, I’m a little surprised but genuinely pleased that Google included hatpic feedback with the brand’s latest Fitbit. </p><p>Users can save up to eight alarms total. When one goes off, the tracker gently vibrates for roughly 30 seconds before going into snooze mode. This delays the alarm for exactly nine minutes (and can’t be changed) before it goes off again.</p><p>Not only is this a lovely, non-startling way to wake up — and one I’ve fully adopted — but unlike a standard audible alarm, the Fitbit Air alarm doesn’t wake my sleeping partner, or even my dog, Belverdere. </p><p>To silence the Fitbit Air’s haptic alarm, firmly double-tap the top of the tracker. From my experience, this works the first time, roughly 90% of the time. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4114px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="m3zAnMrGySMYrDxq46JKLY" name="Fitbit-Air-lead-03" alt="Close-up of the sensors on the Fitbit Air screenless fitness tracker" src="https://cdn.mos.cms.futurecdn.net/m3zAnMrGySMYrDxq46JKLY.jpg" mos="" align="middle" fullscreen="" width="4114" height="2315" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><h3 class="article-body__section" id="section-the-brilliance-of-smart-wake"><span>The brilliance of ‘Smart Wake’</span></h3><p>In addition to a haptic alarm, the Fitbit Air also supports Google’s ‘Smart Wake’ feature, which, when activated, prioritizes waking you during your optimal sleep stage, i.e., when you’re not in deep sleep or REM. </p><p>When switched on, Smart Wake will wake you up to 30 minutes before your actual alarm, but never after. </p><h3 class="article-body__section" id="section-some-room-for-improvement"><span>Some room for improvement </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4923px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="v4R3RdVkt2tearzZXDp52N" name="FitbitAir-rev-07" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/v4R3RdVkt2tearzZXDp52N.jpg" mos="" align="middle" fullscreen="" width="4923" height="2769" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>It’s worth noting that I’m a reasonably light sleeper, and even though the level of vibration offered by the Fitbit Air’s alarm is more than enough to get my eyes open, it may not be enough to awaken more hardcore snoozers.</p><p>My suggested solution for Google: Add a new function that lets users adjust how much the Air vibrates when the alarm goes off, with three levels to select from. </p><p>Have you ever tried waking up via haptics on a fitness tracker or smartwatch? What was your experience? Let me know in the comments below. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-screen-less-whoop-competitor-could-cost-five-times-as-much-as-the-fitbit-air"><strong>Garmin’s screen-less Whoop competitor could cost five times as much as the Fitbit Air</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing"><strong>The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses"><strong>Forget the Whoop 5.0 — The new Fitbit Air is a screen-less, subscription-free fitness tracker for the masses</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget the Fitbit Air — take 20% off the smarter Fitbit Charge 6 right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is finally here, but if you’re looking for something a little less bare-bones and more feature-packed — the Air is designed to be a screen-less, distraction-free device — then I recommend taking a look at the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>.</p><p>Not only is the Charge 6 one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html#section-best-fitness-tracker-overall">best fitness trackers</a> in 2026, despite launching in 2023, but it's a more capable tracker than the newer Fitbit Air.</p><p>Better yet, the Fitbit Charge 6 is on sale right now for<a href="https://www.walmart.com/ip/Fitbit-Charge-6-Black-aluminum-activity-tracker-with-infinity-band-silicone-obsidian-NFC-Bluetooth-1-33-oz/5087333627" target="_blank" rel="nofollow"> 20% off at Walmart</a>. That drops the price to $127 from $159, making the Fitbit Charge 6 nearly as affordable as the $99 Fitbit Air. And that's not the only Fitbit on sale right now...</p><h2 id="best-fitbit-spring-deals">Best Fitbit spring deals</h2><ul><li><strong>Fitbit Charge 6: </strong><a href="https://www.walmart.com/ip/Fitbit-Charge-6-Black-aluminum-activity-tracker-with-infinity-band-silicone-obsidian-NFC-Bluetooth-1-33-oz/5087333627" target="_blank" rel="nofollow"><strong>was $159 now $127 @ Walmart</strong></a></li><li><strong>Fitbit Inspire 3: </strong><a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Included/dp/B0B5FCYMFD?th=1" target="_blank" rel="nofollow"><strong>was $99 now $84 @ Amazon</strong></a><strong></strong></li></ul><h2 id="fitbit-charge-6-vs-fitbit-air">Fitbit Charge 6 vs Fitbit Air</h2><div class="product"><a data-dimension112="c4a5ee40-8712-4fe7-bc90-d897fff79273" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$127" href="https://www.walmart.com/ip/Fitbit-Charge-6-Black-aluminum-activity-tracker-with-infinity-band-silicone-obsidian-NFC-Bluetooth-1-33-oz/5087333627" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XJdcnPAkGqaCLqcmrHCQib" name="Fitbit Charge 6.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XJdcnPAkGqaCLqcmrHCQib.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The easy-wearing Fitbit Charge 6 boasts accurate heart rate tracking, support for Google Maps and Google Wallet, a bright and well-saturated display, and impressive sleep insights. <a class="view-deal button" href="https://www.walmart.com/ip/Fitbit-Charge-6-Black-aluminum-activity-tracker-with-infinity-band-silicone-obsidian-NFC-Bluetooth-1-33-oz/5087333627" target="_blank" rel="nofollow" data-dimension112="c4a5ee40-8712-4fe7-bc90-d897fff79273" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$127">View Deal</a></p></div><p>Think of the Charge 6 as the Fitbit Air’s older brother. The two are similarly slender and easy to wear, but the Charge 6 sports an AMOLED screen — albeit a small one — and a host of ‘smart’ features, including support for NFC payments, turn-by-turn directions via Google Maps, mirrored smartphone notifications, and music/media controls.</p><p>Another advantage of the Fitbit Charge 6: It sports an onboard GPS antenna, which allows you to track outdoor workouts without needing to carry your paired smartphone. That said, <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review#section-fitbit-air-fitness-tracking-3-5">in my testing</a>, the Fitbit Air proved to be just as accurate as the new, pricier <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">Garmin Forerunner 70</a> when you <em>do</em> carry your phone along. </p><h2 id="save-on-the-fitbit-inspire-3-too">Save on the Fitbit Inspire 3, too</h2><div class="product"><a data-dimension112="aeb2265a-4fe9-4301-b013-ca3866ec029e" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$84" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Included/dp/B0B5FCYMFD?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:134.02%;"><img id="2PQF9aKt4wqDbwzjzjgDyi" name="FitbitInspire30-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2PQF9aKt4wqDbwzjzjgDyi.jpg" mos="" align="middle" fullscreen="" width="679" height="910" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're intrigued by the Fitbit Air, but are looking to save some money or prefer a wearable with a screen, the Fitbit Inspire 3 is nearly as slender and supports nearly all the same tracking features.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Included/dp/B0B5FCYMFD?th=1" target="_blank" rel="nofollow" data-dimension112="aeb2265a-4fe9-4301-b013-ca3866ec029e" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$84">View Deal</a></p></div><p>In addition to the Fitbit Charge 6 deal, the smaller, more entry-level <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a> — which sports an even smaller screen than the Charge 6 and similarly lacks GPS like the Air — is also on sale for <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Included/dp/B0B5FCYMFD?th=1" target="_blank" rel="nofollow">15% off on Amazon</a>, bringing the price down from $99 to $84. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">The Fitbit app is officially dead — but don’t panic, its replacement is even better</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/forget-the-fitbit-air-take-20-percent-off-the-smarter-fitbit-charge-6-right-now</link>
                                                                            <description>
                            <![CDATA[ Not feeling Fitbit's new screen-less wearable? The more feature-rich Charge 6 is on sale for nearly the same cost. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LtmbiVqTfyDsKB696fCU5S</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QeZn2NznZasJEcpi6cGdxS-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 28 May 2026 23:22:29 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/QeZn2NznZasJEcpi6cGdxS-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Charge 6 shown on wrist]]></media:description>                                                            <media:text><![CDATA[Fitbit Charge 6 shown on wrist]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Charge 6 shown on wrist]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QeZn2NznZasJEcpi6cGdxS-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is finally here, but if you’re looking for something a little less bare-bones and more feature-packed — the Air is designed to be a screen-less, distraction-free device — then I recommend taking a look at the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>.</p><p>Not only is the Charge 6 one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html#section-best-fitness-tracker-overall">best fitness trackers</a> in 2026, despite launching in 2023, but it's a more capable tracker than the newer Fitbit Air.</p><p>Better yet, the Fitbit Charge 6 is on sale right now for<a href="https://www.walmart.com/ip/Fitbit-Charge-6-Black-aluminum-activity-tracker-with-infinity-band-silicone-obsidian-NFC-Bluetooth-1-33-oz/5087333627" target="_blank" rel="nofollow"> 20% off at Walmart</a>. That drops the price to $127 from $159, making the Fitbit Charge 6 nearly as affordable as the $99 Fitbit Air. And that's not the only Fitbit on sale right now...</p><h2 id="best-fitbit-spring-deals">Best Fitbit spring deals</h2><ul><li><strong>Fitbit Charge 6: </strong><a href="https://www.walmart.com/ip/Fitbit-Charge-6-Black-aluminum-activity-tracker-with-infinity-band-silicone-obsidian-NFC-Bluetooth-1-33-oz/5087333627" target="_blank" rel="nofollow"><strong>was $159 now $127 @ Walmart</strong></a></li><li><strong>Fitbit Inspire 3: </strong><a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Included/dp/B0B5FCYMFD?th=1" target="_blank" rel="nofollow"><strong>was $99 now $84 @ Amazon</strong></a><strong></strong></li></ul><h2 id="fitbit-charge-6-vs-fitbit-air">Fitbit Charge 6 vs Fitbit Air</h2><div class="product"><a data-dimension112="c4a5ee40-8712-4fe7-bc90-d897fff79273" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$127" href="https://www.walmart.com/ip/Fitbit-Charge-6-Black-aluminum-activity-tracker-with-infinity-band-silicone-obsidian-NFC-Bluetooth-1-33-oz/5087333627" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XJdcnPAkGqaCLqcmrHCQib" name="Fitbit Charge 6.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XJdcnPAkGqaCLqcmrHCQib.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The easy-wearing Fitbit Charge 6 boasts accurate heart rate tracking, support for Google Maps and Google Wallet, a bright and well-saturated display, and impressive sleep insights. <a class="view-deal button" href="https://www.walmart.com/ip/Fitbit-Charge-6-Black-aluminum-activity-tracker-with-infinity-band-silicone-obsidian-NFC-Bluetooth-1-33-oz/5087333627" target="_blank" rel="nofollow" data-dimension112="c4a5ee40-8712-4fe7-bc90-d897fff79273" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$127">View Deal</a></p></div><p>Think of the Charge 6 as the Fitbit Air’s older brother. The two are similarly slender and easy to wear, but the Charge 6 sports an AMOLED screen — albeit a small one — and a host of ‘smart’ features, including support for NFC payments, turn-by-turn directions via Google Maps, mirrored smartphone notifications, and music/media controls.</p><p>Another advantage of the Fitbit Charge 6: It sports an onboard GPS antenna, which allows you to track outdoor workouts without needing to carry your paired smartphone. That said, <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review#section-fitbit-air-fitness-tracking-3-5">in my testing</a>, the Fitbit Air proved to be just as accurate as the new, pricier <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">Garmin Forerunner 70</a> when you <em>do</em> carry your phone along. </p><h2 id="save-on-the-fitbit-inspire-3-too">Save on the Fitbit Inspire 3, too</h2><div class="product"><a data-dimension112="aeb2265a-4fe9-4301-b013-ca3866ec029e" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$84" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Included/dp/B0B5FCYMFD?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:134.02%;"><img id="2PQF9aKt4wqDbwzjzjgDyi" name="FitbitInspire30-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2PQF9aKt4wqDbwzjzjgDyi.jpg" mos="" align="middle" fullscreen="" width="679" height="910" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're intrigued by the Fitbit Air, but are looking to save some money or prefer a wearable with a screen, the Fitbit Inspire 3 is nearly as slender and supports nearly all the same tracking features.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Included/dp/B0B5FCYMFD?th=1" target="_blank" rel="nofollow" data-dimension112="aeb2265a-4fe9-4301-b013-ca3866ec029e" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$84">View Deal</a></p></div><p>In addition to the Fitbit Charge 6 deal, the smaller, more entry-level <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a> — which sports an even smaller screen than the Charge 6 and similarly lacks GPS like the Air — is also on sale for <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Included/dp/B0B5FCYMFD?th=1" target="_blank" rel="nofollow">15% off on Amazon</a>, bringing the price down from $99 to $84. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results">I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">The Fitbit app is officially dead — but don’t panic, its replacement is even better</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I walked 3,000 steps with the Fitbit Air vs Garmin Forerunner 70 — and I’m seriously amazed by the results ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I tested the fitness tracking performance of the new Fitbit Air versus the (also) new Garmin Forerunner 70, and was seriously amazed by the results. </p><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is a screen-less, wallet-friendly alternative to the Whoop 5.0, while the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">Garmin Forerunner 70</a> is the brand’s latest entry-level running watch, replacing the beloved but aging <a href="https://www.tomsguide.com/reviews/garmin-forerunner-55">Forerunner 55</a>.</p><p>To find out which of these 2026 wearables is the more accurate fitness tracker, I walked 3,000 steps with the Garmin on my left wrist and the Fitbit on my right. As a primary control for this head-to-head, I manually counted my steps (with some help from my trusty, old-school <a href="https://www.amazon.com/SDARMING-Counters-Counting-Knitting-Coaching/dp/B0971CF137/" target="_blank" rel="nofollow">tally counter</a>). Additionally, I logged my walk using the Strava app on an iPhone 16 Plus. </p><div class="product"><a data-dimension112="ec9f2724-77ae-47ed-ac0f-a3e915ff831b" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a tiny, lightweight, and screen-free fitness tracker with seven days of battery, detailed sleep insights, and reliable workout-tracking chops. It's also the brand's first new Fitbit in nearly three years, and my favorite tracker of 2026.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="ec9f2724-77ae-47ed-ac0f-a3e915ff831b" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="1c6fe19d-d223-4d3f-a7ba-785952d4421b" data-action="Deal Block" data-label="Forerunner 70" data-dimension48="Forerunner 70" data-dimension25="$249" href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F7T6G9/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1042px;"><p class="vanilla-image-block" style="padding-top:103.45%;"><img id="JxZy6K7r5Qf8aMgGg2NDqQ" name="Screenshot 2026-05-19 at 2.33.47 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JxZy6K7r5Qf8aMgGg2NDqQ.png" mos="" align="middle" fullscreen="" width="1042" height="1078" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Forerunner 70 is Garmin's latest entry-level running watch, replacing the ancient Forerunner 55. It boasts a bright AMOLED screen, a lightweight and durable case, accurate GPS tracking, and tons of training tools and insights for runners. <a class="view-deal button" href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F7T6G9/" target="_blank" rel="nofollow" data-dimension112="1c6fe19d-d223-4d3f-a7ba-785952d4421b" data-action="Deal Block" data-label="Forerunner 70" data-dimension48="Forerunner 70" data-dimension25="$249">View Deal</a></p></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-forerunner-70-fitness-tracking-accuracy-compared"><span>Fitbit Air vs Garmin Forerunner 70: fitness tracking accuracy compared</span></h3><p>Before diving into the results, it’s worth noting some key differences between these two devices. For one, the Garmin Forerunner 70 is <a href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F9VT52/" target="_blank" rel="nofollow">$250 on Amazon</a> and other major retailers, which is more than twice the cost of the <a href="https://www.amazon.com/gp/aw/d/B0GTMTZF3V/">$99 Fitbit Air</a>. </p><p>Both wearables offer their primary health and fitness tracking features without a subscription. Want personalized insights, trend reports, workout recommendations, and more? <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">Google Health Premium</a> for the Fitbit Air is $9.99 a month or $99 for the year, while <a href="https://www.tomsguide.com/wellness/smartwatches/i-tried-garmin-connect-for-a-week-heres-3-things-i-like-and-3-i-dislike">Garmin Connect+</a> is $6.99 a month or $69.99 annually. </p><p>The other notable difference is that the Garmin Forerunner 70 sports an onboard GPS while the Fitbit Air doesn’t. This means you'll need to carry your smartphone for location and elevation data when tracking an outdoor workout with the Air, something that isn’t the case for the Forerunner 70.</p><p>Now, on to the test results!</p><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-forerunner-70-walk-test-results"><span>Fitbit Air vs Garmin Forerunner 70: Walk test results </span></h3><div ><table><caption>3,000-step walk comparison vs Garmin vs Strava</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Forerunner 70</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>3,004 steps</p></td><td  ><p>2.996 steps</p></td><td  ><p>3,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>1.61 miles</p></td><td  ><p>1.57 miles</p></td><td  ><p>1.60 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>165 feet</p></td><td  ><p>154 feet</p></td><td  ><p>176 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace (elapsed) </p></td><td  ><p>18 mins 31 secs</p></td><td  ><p>17 mins 48 secs</p></td><td  ><p>18 mins 21 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>116 bpm</p></td><td  ><p>125 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>161 bpm</p></td><td  ><p>163 bpm</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>Any step count total within one hundred steps of my actual tally is considered a fantastic result by TG walk test standards. For this head-to-head, the Fitbit Air and Garmin Forerunner 70 were both within just five steps of the actual tally, a seriously amazing outcome. Strava, meanwhile, logged 3,006 total steps taken.</p><p>Distance data also lines up nicely across the board, with Fitbit's tally being just a tad closer to the control. The Fitbit Air also delivered a more accurate elevation gain total than the Garmin Forerunner 70, which notably lacks a barometric altimeter for tracking climb data (the Air piggyback's off your phone's altimeter just like it does for GPS).</p><p>While Strava and Garmin each provide moving and elapsed pace metrics, the Fitbit Air only offers one, and doesn't specify which it is (my money is on the latter). The figures above reflect Garmin and Strava's elapsed pace. For moving pace, Strava noted 17 mins 15 secs per mile, while Garmin logged 17 mins 35 secs. </p><p>Fitbit's average heart rate metric is quite a bit lower than Garmin's — the Fitbit was on my right wrist and the Garmin on my left, which could be a factor — but both wearables recorded roughly the same max heart rate for the walk, which notably included some extra-steep terrain to get my blood pumping. </p><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-forerunner-70-winner"><span>Fitbit Air vs Garmin Forerunner 70: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3706px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="eNA2i2htvrPTQUDfXX7WNR" name="F70-v-FitbitAir-02" alt="Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist" src="https://cdn.mos.cms.futurecdn.net/eNA2i2htvrPTQUDfXX7WNR.jpg" mos="" align="middle" fullscreen="" width="3706" height="2085" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>And the winner is... both wearables! This one is a tie, as both the Air and Forerunner 70 were within four steps of my actual count. </p><p>Ultimately, the Fitbit Air is one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> you can buy in 2026, and while I'm still reviewing the Garmin Forerunner 70, there's a solid shot it's destined for our <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin watch</a> guide as well. </p><p>This is to say, top-notch performance is not only what I hoped for from these two modern wearables, but also what I expected. And both delivered with flying colors. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqvznX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqvznX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-just-added-whatsapp-support-to-a-huge-number-of-watches-heres-how-to-unlock-it">Garmin just added WhatsApp support to a huge number of watches — here’s how to unlock it</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-spent-one-week-with-a-wallet-friendly-garmin-forerunner-970-dupe-5-things-that-stand-out-about-the-usd300-cheaper-amazfit-cheetah-2-pro">I spent one week with a wallet-friendly Garmin Forerunner 970 dupe —  5 things that stand out about the $300 cheaper Amazfit Cheetah 2 Pro</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-walked-3-000-steps-with-the-fitbit-air-vs-garmin-forerunner-70-and-im-seriously-amazed-by-the-results</link>
                                                                            <description>
                            <![CDATA[ Can the $99 Fitbit compete with the $249 Forerunner 70? I decided to find out by wearing both while walking exactly 3,000 steps and comparing the results. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">JUuVPu6ZGkSekeKWEhpPTD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/uzqVqau5gm5cPhz9DYttUR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 28 May 2026 05:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 28 May 2026 20:00:52 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/uzqVqau5gm5cPhz9DYttUR-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist]]></media:description>                                                            <media:text><![CDATA[Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/uzqVqau5gm5cPhz9DYttUR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I tested the fitness tracking performance of the new Fitbit Air versus the (also) new Garmin Forerunner 70, and was seriously amazed by the results. </p><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a> is a screen-less, wallet-friendly alternative to the Whoop 5.0, while the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">Garmin Forerunner 70</a> is the brand’s latest entry-level running watch, replacing the beloved but aging <a href="https://www.tomsguide.com/reviews/garmin-forerunner-55">Forerunner 55</a>.</p><p>To find out which of these 2026 wearables is the more accurate fitness tracker, I walked 3,000 steps with the Garmin on my left wrist and the Fitbit on my right. As a primary control for this head-to-head, I manually counted my steps (with some help from my trusty, old-school <a href="https://www.amazon.com/SDARMING-Counters-Counting-Knitting-Coaching/dp/B0971CF137/" target="_blank" rel="nofollow">tally counter</a>). Additionally, I logged my walk using the Strava app on an iPhone 16 Plus. </p><div class="product"><a data-dimension112="ec9f2724-77ae-47ed-ac0f-a3e915ff831b" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:95.22%;"><img id="6rQV9bADzd2zqYvNPGPxwE" name="Screenshot 2026-05-28 at 12.55.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6rQV9bADzd2zqYvNPGPxwE.png" mos="" align="middle" fullscreen="" width="858" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a tiny, lightweight, and screen-free fitness tracker with seven days of battery, detailed sleep insights, and reliable workout-tracking chops. It's also the brand's first new Fitbit in nearly three years, and my favorite tracker of 2026.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="ec9f2724-77ae-47ed-ac0f-a3e915ff831b" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="1c6fe19d-d223-4d3f-a7ba-785952d4421b" data-action="Deal Block" data-label="Forerunner 70" data-dimension48="Forerunner 70" data-dimension25="$249" href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F7T6G9/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1042px;"><p class="vanilla-image-block" style="padding-top:103.45%;"><img id="JxZy6K7r5Qf8aMgGg2NDqQ" name="Screenshot 2026-05-19 at 2.33.47 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JxZy6K7r5Qf8aMgGg2NDqQ.png" mos="" align="middle" fullscreen="" width="1042" height="1078" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Forerunner 70 is Garmin's latest entry-level running watch, replacing the ancient Forerunner 55. It boasts a bright AMOLED screen, a lightweight and durable case, accurate GPS tracking, and tons of training tools and insights for runners. <a class="view-deal button" href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F7T6G9/" target="_blank" rel="nofollow" data-dimension112="1c6fe19d-d223-4d3f-a7ba-785952d4421b" data-action="Deal Block" data-label="Forerunner 70" data-dimension48="Forerunner 70" data-dimension25="$249">View Deal</a></p></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-forerunner-70-fitness-tracking-accuracy-compared"><span>Fitbit Air vs Garmin Forerunner 70: fitness tracking accuracy compared</span></h3><p>Before diving into the results, it’s worth noting some key differences between these two devices. For one, the Garmin Forerunner 70 is <a href="https://www.amazon.com/Garmin-Forerunner%C2%AE-Smartwatch-Advanced-Training/dp/B0H1F9VT52/" target="_blank" rel="nofollow">$250 on Amazon</a> and other major retailers, which is more than twice the cost of the <a href="https://www.amazon.com/gp/aw/d/B0GTMTZF3V/">$99 Fitbit Air</a>. </p><p>Both wearables offer their primary health and fitness tracking features without a subscription. Want personalized insights, trend reports, workout recommendations, and more? <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">Google Health Premium</a> for the Fitbit Air is $9.99 a month or $99 for the year, while <a href="https://www.tomsguide.com/wellness/smartwatches/i-tried-garmin-connect-for-a-week-heres-3-things-i-like-and-3-i-dislike">Garmin Connect+</a> is $6.99 a month or $69.99 annually. </p><p>The other notable difference is that the Garmin Forerunner 70 sports an onboard GPS while the Fitbit Air doesn’t. This means you'll need to carry your smartphone for location and elevation data when tracking an outdoor workout with the Air, something that isn’t the case for the Forerunner 70.</p><p>Now, on to the test results!</p><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-forerunner-70-walk-test-results"><span>Fitbit Air vs Garmin Forerunner 70: Walk test results </span></h3><div ><table><caption>3,000-step walk comparison vs Garmin vs Strava</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Forerunner 70</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>3,004 steps</p></td><td  ><p>2.996 steps</p></td><td  ><p>3,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>1.61 miles</p></td><td  ><p>1.57 miles</p></td><td  ><p>1.60 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>165 feet</p></td><td  ><p>154 feet</p></td><td  ><p>176 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace (elapsed) </p></td><td  ><p>18 mins 31 secs</p></td><td  ><p>17 mins 48 secs</p></td><td  ><p>18 mins 21 secs (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>116 bpm</p></td><td  ><p>125 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>161 bpm</p></td><td  ><p>163 bpm</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>Any step count total within one hundred steps of my actual tally is considered a fantastic result by TG walk test standards. For this head-to-head, the Fitbit Air and Garmin Forerunner 70 were both within just five steps of the actual tally, a seriously amazing outcome. Strava, meanwhile, logged 3,006 total steps taken.</p><p>Distance data also lines up nicely across the board, with Fitbit's tally being just a tad closer to the control. The Fitbit Air also delivered a more accurate elevation gain total than the Garmin Forerunner 70, which notably lacks a barometric altimeter for tracking climb data (the Air piggyback's off your phone's altimeter just like it does for GPS).</p><p>While Strava and Garmin each provide moving and elapsed pace metrics, the Fitbit Air only offers one, and doesn't specify which it is (my money is on the latter). The figures above reflect Garmin and Strava's elapsed pace. For moving pace, Strava noted 17 mins 15 secs per mile, while Garmin logged 17 mins 35 secs. </p><p>Fitbit's average heart rate metric is quite a bit lower than Garmin's — the Fitbit was on my right wrist and the Garmin on my left, which could be a factor — but both wearables recorded roughly the same max heart rate for the walk, which notably included some extra-steep terrain to get my blood pumping. </p><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-forerunner-70-winner"><span>Fitbit Air vs Garmin Forerunner 70: Winner </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3706px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="eNA2i2htvrPTQUDfXX7WNR" name="F70-v-FitbitAir-02" alt="Close-up of the Garmin Forerunner 70 next to the Fitbit Air fitness tracker on the same wrist" src="https://cdn.mos.cms.futurecdn.net/eNA2i2htvrPTQUDfXX7WNR.jpg" mos="" align="middle" fullscreen="" width="3706" height="2085" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>And the winner is... both wearables! This one is a tie, as both the Air and Forerunner 70 were within four steps of my actual count. </p><p>Ultimately, the Fitbit Air is one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> you can buy in 2026, and while I'm still reviewing the Garmin Forerunner 70, there's a solid shot it's destined for our <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin watch</a> guide as well. </p><p>This is to say, top-notch performance is not only what I hoped for from these two modern wearables, but also what I expected. And both delivered with flying colors. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqvznX"></div>                            </div>                            <script src="https://kwizly.com/embed/OqvznX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-just-added-whatsapp-support-to-a-huge-number-of-watches-heres-how-to-unlock-it">Garmin just added WhatsApp support to a huge number of watches — here’s how to unlock it</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-spent-one-week-with-a-wallet-friendly-garmin-forerunner-970-dupe-5-things-that-stand-out-about-the-usd300-cheaper-amazfit-cheetah-2-pro">I spent one week with a wallet-friendly Garmin Forerunner 970 dupe —  5 things that stand out about the $300 cheaper Amazfit Cheetah 2 Pro</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve been testing the new Fitbit Air, and it’s changed the way I track my sleep — 5 reasons I recommend Google’s $99 tracker, and 2 reasons I don’t  ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I just <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">reviewed the Fitbit Air</a>, and it’s safe to say that it’s destined for our <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness tracker</a> buying guide. But, is it the best fitness tracker for you?</p><p>That depends on factors like your holistic and fitness monitoring needs, budget, and desire for smart features. With that in mind, here are five reasons to buy the Fitbit Air and two reasons to skip it. </p><h3 class="article-body__section" id="section-buy-the-price-it-s-cheap"><span>Buy: The price (it’s cheap)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5459px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ZbZb7oVskZ74qYjLHoJ2UN" name="FitbitAir-rev-03" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/ZbZb7oVskZ74qYjLHoJ2UN.jpg" mos="" align="middle" fullscreen="" width="5459" height="3071" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Fitbit Air</a> is just $99 with no subscription costs for core health and fitness tracking insights. However, a Google Health Premium subscription for $99 a year or $9.99 a month unlocks all sorts of heady AI-backed holistic tools and trend deep dives. </p><p>Not a subscription person? Google includes three months of Google Health Premium free with your purchase, so that you can try those premium features first before making a commitment. </p><div class="product"><a data-dimension112="ad034099-8c1e-423b-925e-561c0c8e0c3d" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1075px;"><p class="vanilla-image-block" style="padding-top:128.37%;"><img id="GiUfYfk8cH5PUmkAM3abAo" name="Google Fitbit Air deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GiUfYfk8cH5PUmkAM3abAo.jpg" mos="" align="middle" fullscreen="" width="1075" height="1380" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a $99, subscription-free fitness tracker with no screen or smart notifications, but plenty of battery, health and fitness insights, and a super comfortable design. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV" target="_blank" rel="nofollow" data-dimension112="ad034099-8c1e-423b-925e-561c0c8e0c3d" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><h3 class="article-body__section" id="section-buy-all-day-comfort"><span>Buy: All-day comfort</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4531px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="BBBTQpnYGPTfEqiPa6DRxM" name="FitbitAir-rev-06" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/BBBTQpnYGPTfEqiPa6DRxM.jpg" mos="" align="middle" fullscreen="" width="4531" height="2549" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is the smallest and lightest screen-free fitness tracker of its kind, with a footprint that’s 35 x 17 x 8 mm and a weight of only 5.2 g without the strap. By comparison, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> weighs a wrist-crunching 26.5 g.</p><p>The straps for the Fitbit Air are also noticeably slimmer than the competition’s offerings, making the Air one of the comfiest trackers I’ve tested, particularly on the special edition Stephen Curry knit strap. </p><p>This also makes the Air an excellent choice for sleep tracking insights, especially if you’re like me and seriously loathe anything bulky on the wrist while snoozing. </p><h3 class="article-body__section" id="section-buy-accurate-health-and-fitness-insights"><span>Buy: Accurate health and fitness insights </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>I tested the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review#section-fitbit-air-fitness-tracking-3-5">Fitbit Air’s tracking performance</a> against the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">Garmin Forerunner 70,</a> a $250 entry-leving running watch, and the Strava app, my go-to for logging any outdoor workout. </p><p>After comparing the data from a 3,000-step walk and a 1.5-mile run, the results proved decisive: the Fitbit Air is as competent and reliable a wearable for measuring heart rate and metrics like speed, pace, and distance during outdoor workouts as the far pricier Garmin. </p><h3 class="article-body__section" id="section-buy-distraction-free-tracking"><span>Buy: Distraction-free tracking</span></h3><p>One of the biggest selling points of the Fitbit Air is what it doesn’t have: there’s no screen, no buttons, no mirrored smartphone notifications, and basically, no distractions to slow you down. </p><p>The device does have a built-in haptic motor that can be used to gently and silently wake you using the Fitbit’s Smart Alarm, but that’s essentially it for smarts. </p><h3 class="article-body__section" id="section-buy-long-lasting-battery"><span>Buy: Long-lasting battery</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4467px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="FR2AiWoTMykhFBDo5j984N" name="FitbitAir-rev-02" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/FR2AiWoTMykhFBDo5j984N.jpg" mos="" align="middle" fullscreen="" width="4467" height="2513" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Google promises up to seven days of battery from the Fitbit Air, and that’s been exactly my experience while testing it. After seven consecutive days wearing the device pretty much 24/7, I had roughly 15% battery remaining. </p><p>Considering just how lightweight the Air is, a week of battery is darn impressive. It also recharges rather quickly, going from 0 to 100% in about 90 minutes. </p><h3 class="article-body__section" id="section-skip-a-lack-of-gps"><span>Skip: A lack of GPS</span></h3><p>I mentioned accurate fitness tracking performance, but there’s one caveat: the Fitbit Air lacks an onboard GPS for location tracking data, so you’ll need to carry your paired smartphone for insights into distance, pace, etc, along with a post-effort map.</p><p>The Air additionally lacks an onboard altimeter for elevation tracking data, but worry not! Your smartphone also has one of those, too. </p><h3 class="article-body__section" id="section-skip-no-smart-features"><span>Skip: No smart features </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3195px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="AZ96hmo6jgBwYJFCBhwes6" name="rEpkssC899SufDo23cfMh6" alt="Fitbit Charge 6 and Fitbit Coach" src="https://cdn.mos.cms.futurecdn.net/AZ96hmo6jgBwYJFCBhwes6.jpg" mos="" align="middle" fullscreen="" width="3195" height="1797" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Finally, if you’re the type of person who prefers a screen, buttons, smart features, and optional smartphone notifications, the Fitbit Air isn’t for you. </p><p>Instead, I recommend taking a look at the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>, which is similar in size but with a screen, NFC payments, and other useful smarts. A little pricier than the Air at $159, it also sports onboard GPS. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-screen-less-whoop-competitor-could-cost-five-times-as-much-as-the-fitbit-air">Garmin’s screen-less Whoop competitor could cost five times as much as the Fitbit Air</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">The Fitbit app is officially dead — but don’t panic, its replacement is even better</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/ive-been-testing-the-new-fitbit-air-and-its-changed-the-way-i-track-my-sleep-5-reasons-i-recommend-googles-usd99-tracker-and-2-reasons-i-dont</link>
                                                                            <description>
                            <![CDATA[ The Fitbit Air has a ton going for it, including an affordable price, but these two major factors might be dealbreakers for you. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">HxyDsDnC6fhRLMyCGU6jMH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/v4R3RdVkt2tearzZXDp52N-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 27 May 2026 05:31:42 +0000</pubDate>                                                                                                                                <updated>Wed, 27 May 2026 12:54:36 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/v4R3RdVkt2tearzZXDp52N-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Air]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Air]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Air]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/v4R3RdVkt2tearzZXDp52N-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I just <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">reviewed the Fitbit Air</a>, and it’s safe to say that it’s destined for our <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness tracker</a> buying guide. But, is it the best fitness tracker for you?</p><p>That depends on factors like your holistic and fitness monitoring needs, budget, and desire for smart features. With that in mind, here are five reasons to buy the Fitbit Air and two reasons to skip it. </p><h3 class="article-body__section" id="section-buy-the-price-it-s-cheap"><span>Buy: The price (it’s cheap)</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5459px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ZbZb7oVskZ74qYjLHoJ2UN" name="FitbitAir-rev-03" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/ZbZb7oVskZ74qYjLHoJ2UN.jpg" mos="" align="middle" fullscreen="" width="5459" height="3071" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Fitbit Air</a> is just $99 with no subscription costs for core health and fitness tracking insights. However, a Google Health Premium subscription for $99 a year or $9.99 a month unlocks all sorts of heady AI-backed holistic tools and trend deep dives. </p><p>Not a subscription person? Google includes three months of Google Health Premium free with your purchase, so that you can try those premium features first before making a commitment. </p><div class="product"><a data-dimension112="ad034099-8c1e-423b-925e-561c0c8e0c3d" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1075px;"><p class="vanilla-image-block" style="padding-top:128.37%;"><img id="GiUfYfk8cH5PUmkAM3abAo" name="Google Fitbit Air deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GiUfYfk8cH5PUmkAM3abAo.jpg" mos="" align="middle" fullscreen="" width="1075" height="1380" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a $99, subscription-free fitness tracker with no screen or smart notifications, but plenty of battery, health and fitness insights, and a super comfortable design. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV" target="_blank" rel="nofollow" data-dimension112="ad034099-8c1e-423b-925e-561c0c8e0c3d" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><h3 class="article-body__section" id="section-buy-all-day-comfort"><span>Buy: All-day comfort</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4531px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="BBBTQpnYGPTfEqiPa6DRxM" name="FitbitAir-rev-06" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/BBBTQpnYGPTfEqiPa6DRxM.jpg" mos="" align="middle" fullscreen="" width="4531" height="2549" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is the smallest and lightest screen-free fitness tracker of its kind, with a footprint that’s 35 x 17 x 8 mm and a weight of only 5.2 g without the strap. By comparison, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> weighs a wrist-crunching 26.5 g.</p><p>The straps for the Fitbit Air are also noticeably slimmer than the competition’s offerings, making the Air one of the comfiest trackers I’ve tested, particularly on the special edition Stephen Curry knit strap. </p><p>This also makes the Air an excellent choice for sleep tracking insights, especially if you’re like me and seriously loathe anything bulky on the wrist while snoozing. </p><h3 class="article-body__section" id="section-buy-accurate-health-and-fitness-insights"><span>Buy: Accurate health and fitness insights </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>I tested the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review#section-fitbit-air-fitness-tracking-3-5">Fitbit Air’s tracking performance</a> against the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">Garmin Forerunner 70,</a> a $250 entry-leving running watch, and the Strava app, my go-to for logging any outdoor workout. </p><p>After comparing the data from a 3,000-step walk and a 1.5-mile run, the results proved decisive: the Fitbit Air is as competent and reliable a wearable for measuring heart rate and metrics like speed, pace, and distance during outdoor workouts as the far pricier Garmin. </p><h3 class="article-body__section" id="section-buy-distraction-free-tracking"><span>Buy: Distraction-free tracking</span></h3><p>One of the biggest selling points of the Fitbit Air is what it doesn’t have: there’s no screen, no buttons, no mirrored smartphone notifications, and basically, no distractions to slow you down. </p><p>The device does have a built-in haptic motor that can be used to gently and silently wake you using the Fitbit’s Smart Alarm, but that’s essentially it for smarts. </p><h3 class="article-body__section" id="section-buy-long-lasting-battery"><span>Buy: Long-lasting battery</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4467px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="FR2AiWoTMykhFBDo5j984N" name="FitbitAir-rev-02" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/FR2AiWoTMykhFBDo5j984N.jpg" mos="" align="middle" fullscreen="" width="4467" height="2513" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Google promises up to seven days of battery from the Fitbit Air, and that’s been exactly my experience while testing it. After seven consecutive days wearing the device pretty much 24/7, I had roughly 15% battery remaining. </p><p>Considering just how lightweight the Air is, a week of battery is darn impressive. It also recharges rather quickly, going from 0 to 100% in about 90 minutes. </p><h3 class="article-body__section" id="section-skip-a-lack-of-gps"><span>Skip: A lack of GPS</span></h3><p>I mentioned accurate fitness tracking performance, but there’s one caveat: the Fitbit Air lacks an onboard GPS for location tracking data, so you’ll need to carry your paired smartphone for insights into distance, pace, etc, along with a post-effort map.</p><p>The Air additionally lacks an onboard altimeter for elevation tracking data, but worry not! Your smartphone also has one of those, too. </p><h3 class="article-body__section" id="section-skip-no-smart-features"><span>Skip: No smart features </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3195px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="AZ96hmo6jgBwYJFCBhwes6" name="rEpkssC899SufDo23cfMh6" alt="Fitbit Charge 6 and Fitbit Coach" src="https://cdn.mos.cms.futurecdn.net/AZ96hmo6jgBwYJFCBhwes6.jpg" mos="" align="middle" fullscreen="" width="3195" height="1797" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Finally, if you’re the type of person who prefers a screen, buttons, smart features, and optional smartphone notifications, the Fitbit Air isn’t for you. </p><p>Instead, I recommend taking a look at the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>, which is similar in size but with a screen, NFC payments, and other useful smarts. A little pricier than the Air at $159, it also sports onboard GPS. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-screen-less-whoop-competitor-could-cost-five-times-as-much-as-the-fitbit-air">Garmin’s screen-less Whoop competitor could cost five times as much as the Fitbit Air</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing">The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">The Fitbit app is officially dead — but don’t panic, its replacement is even better</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The Fitbit app is officially dead — but don’t panic, its replacement is even better ]]></title>
                                                                                                <dc:content><![CDATA[ <p>What happened to the Fitbit app? After an epic 14-year run, the Fitbit app is officially dead. But don't shed a tear just yet, because the new <a href="https://www.tomsguide.com/wellness/smartwatches/forget-apple-watch-11-google-built-the-ai-health-coach-that-i-really-wanted-with-pixel-watch-4">Google Health</a> app that replaces it is better in just about every way.</p><p>That's right, the Fitbit app is now the Google Health app, and Fitbit Premium is now Google Health Premium. Pricing for the Premium subscription remains the same: $9.99 a month or $99 annually. </p><h3 class="article-body__section" id="section-new-name-same-basic-app-better-design"><span>New name, same basic app, better design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4983px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MfNaddUSjrxwgKrVvBN5YX" name="Fitbit-Google_health-03" alt="The new Google Health app shown on an iPhone 16" src="https://cdn.mos.cms.futurecdn.net/MfNaddUSjrxwgKrVvBN5YX.jpg" mos="" align="middle" fullscreen="" width="4983" height="2803" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The new app was built based on feedback from longtime Fitbit wearers, and organizes everything into four cour tabs: Today, Fitness, Sleep, and Health. Rather than inundating users with numbers and graphs, the most relevant wellness metrics are presented front and center.</p><p>Of course, users can customize the dashboards on each page to their heart's content. Available for both Android and iOS, the new Google Health app plays nicely with a ton of other popular health and fitness apps, like Run Club, AllTrails, MyFitnessPal, and the Oura app. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1192px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="g6JECnwEbQfRNNPhFkPd9S" name="Fitbit-Google_health-02" alt="Screenshot showing the Google Health app update, which changes the name from Fitbit" src="https://cdn.mos.cms.futurecdn.net/g6JECnwEbQfRNNPhFkPd9S.jpg" mos="" align="middle" fullscreen="" width="1192" height="670" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>A new 'Leaderboard' feature lets users compete in fitness challenges head-to-head with friends and family, which is somewhat ironic, given the fact that Google <a href="https://www.tomsguide.com/news/google-is-stripping-away-the-things-that-make-fitbit-fitbit-and-its-a-huge-mistake">nixed a similar community challenges feature</a> from the Fitbit app back in 2023. </p><h3 class="article-body__section" id="section-what-does-this-mean-for-premium-subscribers"><span>What does this mean for Premium subscribers? </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3195px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="AZ96hmo6jgBwYJFCBhwes6" name="rEpkssC899SufDo23cfMh6" alt="Fitbit Charge 6 and Fitbit Coach" src="https://cdn.mos.cms.futurecdn.net/AZ96hmo6jgBwYJFCBhwes6.jpg" mos="" align="middle" fullscreen="" width="3195" height="1797" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As noted above, Fitbit Premium is now Google Health Premium. The price is the same, but your subscription now unlocks a whole lot more.</p><p>With the launch of Google Health Premium, Google's AI-powered, personalized health and fitness concierge officially moves out of beta and becomes a full-blown part of the Premium experience.</p><p>When <a href="https://www.tomsguide.com/wellness/fitness/i-spent-20-minutes-chatting-with-fitbits-new-ai-fitness-coach-5-things-that-surprised-me">I tried Google's AI fitness coach</a> back in November — which started with a casual conversation about my health and fitness goals —  I was impressed. And the Coach has only gotten better over time. What exactly does it do? The Coach can generate custom workout plans, suggest daily exercises, help you eat and sleep better, generate all sorts of trend reports with actionable insights, and much more.</p><p>Other new features for Premium users include the ability to upload medical records, giving the Google Health app an even more complete understanding of your wellness. Google says that this data is encrypted end-to-end and that users have complete control over their data privacy. </p><h3 class="article-body__section" id="section-how-to-update-from-the-fitbit-app-to-google-health"><span>How to update from the Fitbit app to Google Health</span></h3><p>Google started rolling out the new app last week, on May 19th.  </p><p>If you search for the Fitbit app in the Apple App Store or Google Play Store, you'll likely be redirected to the 'Google Health (Fitbit)' app instead. </p><p>For folks who already have the Fitbit app downloaded, simply update your app to the latest version to unlock the newer Google Health layout and expanded features.</p><h3 class="article-body__section" id="section-the-fitbit-name-lives-on-elsewhere"><span>The Fitbit name lives on elsewhere </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>As noted in the intro, there's no need to pour one out for the Fitbit brand just yet. While the Fitbit app may be dead, the brand lives on via the outstanding and affordable ($99) new <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Fitbit Air</a>, a screen-free, long-lasting wearable that's nothing but a pleasure to use. </p><p>Read my complete <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air review</a>, and stay tuned for a full review on the new Google Health app, including the premium features.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Wl3kYe"></div>                            </div>                            <script src="https://kwizly.com/embed/Wl3kYe.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-screen-less-whoop-competitor-could-cost-five-times-as-much-as-the-fitbit-air"><strong>Garmin’s screen-less Whoop competitor could cost five times as much as the Fitbit Air</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing"><strong>The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses"><strong>Forget the Whoop 5.0 — The new Fitbit Air is a screen-less, subscription-free fitness tracker for the masses</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better</link>
                                                                            <description>
                            <![CDATA[ The Fitbit app may be dead, but its aura lives on in the new Google Health app. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mKEvFEMpNZkBAddfRtRJ7M</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Cz2cRVDMPrtiSvfDQKSQjf-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 26 May 2026 20:52:37 +0000</pubDate>                                                                                                                                <updated>Wed, 27 May 2026 01:45:01 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Cz2cRVDMPrtiSvfDQKSQjf-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[fitbit logo on phone]]></media:description>                                                            <media:text><![CDATA[fitbit logo on phone]]></media:text>
                                <media:title type="plain"><![CDATA[fitbit logo on phone]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Cz2cRVDMPrtiSvfDQKSQjf-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>What happened to the Fitbit app? After an epic 14-year run, the Fitbit app is officially dead. But don't shed a tear just yet, because the new <a href="https://www.tomsguide.com/wellness/smartwatches/forget-apple-watch-11-google-built-the-ai-health-coach-that-i-really-wanted-with-pixel-watch-4">Google Health</a> app that replaces it is better in just about every way.</p><p>That's right, the Fitbit app is now the Google Health app, and Fitbit Premium is now Google Health Premium. Pricing for the Premium subscription remains the same: $9.99 a month or $99 annually. </p><h3 class="article-body__section" id="section-new-name-same-basic-app-better-design"><span>New name, same basic app, better design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4983px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MfNaddUSjrxwgKrVvBN5YX" name="Fitbit-Google_health-03" alt="The new Google Health app shown on an iPhone 16" src="https://cdn.mos.cms.futurecdn.net/MfNaddUSjrxwgKrVvBN5YX.jpg" mos="" align="middle" fullscreen="" width="4983" height="2803" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The new app was built based on feedback from longtime Fitbit wearers, and organizes everything into four cour tabs: Today, Fitness, Sleep, and Health. Rather than inundating users with numbers and graphs, the most relevant wellness metrics are presented front and center.</p><p>Of course, users can customize the dashboards on each page to their heart's content. Available for both Android and iOS, the new Google Health app plays nicely with a ton of other popular health and fitness apps, like Run Club, AllTrails, MyFitnessPal, and the Oura app. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1192px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="g6JECnwEbQfRNNPhFkPd9S" name="Fitbit-Google_health-02" alt="Screenshot showing the Google Health app update, which changes the name from Fitbit" src="https://cdn.mos.cms.futurecdn.net/g6JECnwEbQfRNNPhFkPd9S.jpg" mos="" align="middle" fullscreen="" width="1192" height="670" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>A new 'Leaderboard' feature lets users compete in fitness challenges head-to-head with friends and family, which is somewhat ironic, given the fact that Google <a href="https://www.tomsguide.com/news/google-is-stripping-away-the-things-that-make-fitbit-fitbit-and-its-a-huge-mistake">nixed a similar community challenges feature</a> from the Fitbit app back in 2023. </p><h3 class="article-body__section" id="section-what-does-this-mean-for-premium-subscribers"><span>What does this mean for Premium subscribers? </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3195px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="AZ96hmo6jgBwYJFCBhwes6" name="rEpkssC899SufDo23cfMh6" alt="Fitbit Charge 6 and Fitbit Coach" src="https://cdn.mos.cms.futurecdn.net/AZ96hmo6jgBwYJFCBhwes6.jpg" mos="" align="middle" fullscreen="" width="3195" height="1797" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As noted above, Fitbit Premium is now Google Health Premium. The price is the same, but your subscription now unlocks a whole lot more.</p><p>With the launch of Google Health Premium, Google's AI-powered, personalized health and fitness concierge officially moves out of beta and becomes a full-blown part of the Premium experience.</p><p>When <a href="https://www.tomsguide.com/wellness/fitness/i-spent-20-minutes-chatting-with-fitbits-new-ai-fitness-coach-5-things-that-surprised-me">I tried Google's AI fitness coach</a> back in November — which started with a casual conversation about my health and fitness goals —  I was impressed. And the Coach has only gotten better over time. What exactly does it do? The Coach can generate custom workout plans, suggest daily exercises, help you eat and sleep better, generate all sorts of trend reports with actionable insights, and much more.</p><p>Other new features for Premium users include the ability to upload medical records, giving the Google Health app an even more complete understanding of your wellness. Google says that this data is encrypted end-to-end and that users have complete control over their data privacy. </p><h3 class="article-body__section" id="section-how-to-update-from-the-fitbit-app-to-google-health"><span>How to update from the Fitbit app to Google Health</span></h3><p>Google started rolling out the new app last week, on May 19th.  </p><p>If you search for the Fitbit app in the Apple App Store or Google Play Store, you'll likely be redirected to the 'Google Health (Fitbit)' app instead. </p><p>For folks who already have the Fitbit app downloaded, simply update your app to the latest version to unlock the newer Google Health layout and expanded features.</p><h3 class="article-body__section" id="section-the-fitbit-name-lives-on-elsewhere"><span>The Fitbit name lives on elsewhere </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mDuzwW4uiRspx4hCjNoWDJ" name="Fitbit-Air-lead-02" alt="Close-up of the sensors on the Fitbit Air fitness tracker on the special edition Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/mDuzwW4uiRspx4hCjNoWDJ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia)</span></figcaption></figure><p>As noted in the intro, there's no need to pour one out for the Fitbit brand just yet. While the Fitbit app may be dead, the brand lives on via the outstanding and affordable ($99) new <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Fitbit Air</a>, a screen-free, long-lasting wearable that's nothing but a pleasure to use. </p><p>Read my complete <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air review</a>, and stay tuned for a full review on the new Google Health app, including the premium features.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Wl3kYe"></div>                            </div>                            <script src="https://kwizly.com/embed/Wl3kYe.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-screen-less-whoop-competitor-could-cost-five-times-as-much-as-the-fitbit-air"><strong>Garmin’s screen-less Whoop competitor could cost five times as much as the Fitbit Air</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing"><strong>The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses"><strong>Forget the Whoop 5.0 — The new Fitbit Air is a screen-less, subscription-free fitness tracker for the masses</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Fitbit Air review: I tested the Fitbit Air for a week, and it's the best Whoop alternative for the rest of us ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Good things <em>should</em> be worth the wait. After all, the legendary neo-soul recording artist D’Angelo kept us waiting 14 years for his third and arguably most groundbreaking album, <em>Black Messiah</em>. Google hasn’t made us wait quite as long for a new Fitbit model; the last Fitbit designed for adults debuted in 2023 — the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> — while the latest entry-level addition to the lineup, the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>, launched in 2022. </p><p>Thankfully — and <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">much to my surprise</a> — Google’s Fitbit draught ended in early May with the debut of the ultra-petite, screen-free, and subscription-optional Fitbit Air. </p><p>Priced at just $99, the Fitbit Air is designed to be a set-it-and-forget-it, ultra-discreet health tracker with 24/7 heart rate monitoring, detailed nightly sleep reports, basic fitness tracking, recovery recommendations, women’s health tracking, and perhaps most notably, zero buttons or smart features. </p><p>I tested the Fitbit Air for over a week, and I may never take it off. The Fitbit Air is easily the best no-fuss, bang-for-your-buck, screen-less fitness tracker on the market in 2026. That's right, forget the more advanced, serious-athletes-only, wallet-draining <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a>, here’s why I’ll be recommending the Fitbit Air to users far and wide for the foreseeable future.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-fitbit-air-specs-compared"><span>Fitbit Air: Specs compared</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fBUH3NHzWwpzrTaW5D5X2N" name="FitbitAir-rev-01" alt="Close-up of the Fitbit Air, Polar Loop, and Amazfit Helio Strap" src="https://cdn.mos.cms.futurecdn.net/fBUH3NHzWwpzrTaW5D5X2N.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">From clockwise the top: the Amazfit Helio Strap, Polar Loop, and Fitbit Air.  </span><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><caption>Fitbit Air vs Whoop 5.0 vs Amazfit Helio Strap</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit AIr</p></th><th  ><p>Whoop 5.0</p></th><th  ><p>Helio strap</p></th><th  ><p>Polar Loop</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Starting price</strong></p></td><td  ><p>$99</p></td><td  ><p>Free with subscription</p></td><td  ><p>$99</p></td><td  ><p>$199</p></td></tr><tr><td class="firstcol " ><p><strong>Subscription cost</strong></p></td><td  ><p>Optional, $9.99 a month or $99 per year</p></td><td  ><p>$199, $239 or $359 per year depending on tier </p></td><td  ><p>n/a</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions (without strap)</strong></p></td><td  ><p>35 x 17 x 8 mm</p></td><td  ><p>35  x 24  x 11 mm</p></td><td  ><p>34 x 24 x 11 mm</p></td><td  ><p>28 x 43 x  10 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight (without strap)</strong></p></td><td  ><p>5.2 g</p></td><td  ><p>26.5 g</p></td><td  ><p>20 g</p></td><td  ><p>20 g</p></td></tr><tr><td class="firstcol " ><p><strong>Sensors</strong></p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, Skin temp, Accelerometer</p></td></tr><tr><td class="firstcol " ><p><strong>Water resistance </strong></p></td><td  ><p>50 meters</p></td><td  ><p>10 meters</p></td><td  ><p>50 meters</p></td><td  ><p>30 meters</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life</strong></p></td><td  ><p>7 days</p></td><td  ><p>14 days</p></td><td  ><p>10 days</p></td><td  ><p>8 days</p></td></tr><tr><td class="firstcol " ><p><strong>Compatibility </strong></p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-fitbit-air-value-5-5"><span>Fitbit Air value: 5/5</span></h3><ul><li><strong>At $99 and subscription-free for core features, the Fitbit Air is one of the best value screenless trackers available in 2026</strong></li><li><strong>An optional Google Health Premium account unlocks personalized AI-backed health and fitness insights, along with deeper dives into your holistic trends; it's $9.99 a month or $99 a year</strong></li><li><strong>Cost-wise, the Fitbit Air is the same price as 2022's entry-level Fitbit Inspire 3 tracker, which is still sold by Google (but often for $79); the Air is less than the GPS-sporting Fitbit Charge 6 ($159)</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5459px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ZbZb7oVskZ74qYjLHoJ2UN" name="FitbitAir-rev-03" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/ZbZb7oVskZ74qYjLHoJ2UN.jpg" mos="" align="middle" fullscreen="" width="5459" height="3071" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is $99, the same price that the Fitbit Inspire 3 debuted at in 2022. This may have you thinking that the Air replaces the Inspire 3 in the brand's lineup, but that's not the case. Google will continue selling the Fitbit Inspire 3 for $79-$99 and the Fitbit Charge 6 for $159 for the foreseeable future.</p><p>The Fitbit Air will set you back $99 paired with one of Google's standard silicone or kniy straps or $129 paired with the special edition Stephan Curry strap (which I'm a big fan of, more on that below).</p><p>Compared to the competition, the Fitbit Air is the same price as the <a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-helio-strap-review">Amazfit Helio Strap</a> and half the price of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/polars-screenless-fitness-tracker-has-arrived-heres-everything-you-need-to-know-about-the-whoop-rival">Polar Loop</a>, both of which are also subscription-free. The Fitbit Air is additionally less than half the price of the cheapest annual Whoop subscription. </p><p>Speaking of subscriptions, some of the more advanced features, like AI-backed recommendations and trend insights, require a Google Health Premium (previously Fitbit Premium) subscription for $9.99 a month or $99 for the year; full review of that coming soon.  </p><p>Ultimately, the Fitbit Air ships with a three-month trial to Premium to help you decide whether those additional features are worth it to you, something I appreciate.</p><p><strong>Fitbit Air value: 5/5</strong></p><h3 class="article-body__section" id="section-fitbit-air-design-and-comfort-5-5"><span>Fitbit Air design and comfort: 5/5</span></h3><ul><li><strong>The Fitbit Air is smaller, lighter, and more comfortable than the competition </strong></li><li><strong>Better water resistance than Whoop 5.0</strong></li><li><strong>Designed to be swapped from strap to strap with ease</strong></li><li><strong>The special edition Stephen Curry strap is the comfiest of Google's initial offerings</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5003px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="aCdSoGC6BVb7zmo5NrorbA" name="FitbitAir-07" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/aCdSoGC6BVb7zmo5NrorbA.jpg" mos="" align="middle" fullscreen="" width="5003" height="2815" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air doesn't have a screen or any buttons; however, it does have a haptic motor, which can be set to vibrate for a limited number of use cases, most notably as a way to gently and silently wake you up via Google's Smart Alarm function. You cannot set it to vibrate to alert you to incoming texts, calls, or other smartphone notifications. </p><p>The Fitbit Air is noticeably smaller, thinner, and lighter than all of its competitors, including the Whoop 5.0, Polar Loop, and Amazfit Helio Strap. </p><p>Weighing just over 5 g and with a tiny footprint, the Fitbit Air is not only extremely comfortable, especially on the special edition Stephen Curry strap, but it also doesn't really resemble a fitness tracker... like, at all. Instead, it looks more like a sporty bracelet than a tech gadget.</p><p>Water resistance is 50 meters, which beats the pants off the Whoop 5.0, and should be enough to protect the Air during short surface-level swims, showers, hand-washing, etc. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5554px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3grJp6fgcq7zoZ3EmCdraA" name="FitbitAir-04" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/3grJp6fgcq7zoZ3EmCdraA.jpg" mos="" align="middle" fullscreen="" width="5554" height="3124" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The tracker itself is nothing more than a small plastic pebble with some sensors and charging contacts on the underside. However, because it's protected by the strap, it's nearly impossible to damage the tech components, even if you slam your wrist unintentionally into a wall. </p><p>Customization is a big selling point of the Air. The tracker itself, which looks like a slimmed-down Inspire 3 without straps, pops with delightful fashion in and out of its housing with a firm push. </p><p>Google is selling a fairly wide selection of straps, starting at $34.99, in all sorts of eye-catching colors. Choose from sporty silicone or stretchy knit fabric. Meanwhile, wallet-friendly, third-party straps have yet to materialize on Amazon and the likes, but give it time. </p><p>It's worth calling out the Steph Curry strap, because it feels a lot more premium, breathable, and less scratchy than the standard knit strap Google offers with the device for $99.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gMwOBe" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-health-tracking-4-5"><span>Health tracking: 4/5</span></h3><ul><li><strong>Lots of sleep tracking insights on par with the </strong><a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html"><strong>best fitness trackers</strong></a><strong> and </strong><a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch"><strong>best smartwatches</strong></a></li><li><strong>User-friendly app for tracking holistic trends like resting heart rate, average calorie burn, step count, heart rate variability, menstrual cycles, and daily readiness </strong></li><li><strong>Some health tracking features require a Google Health Premium subscription, like AI-analyzed sleep trend recommendations (via Google Coach)</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ktst4G4aEo3tp2SAEDwt7A" name="FitbitAir-01" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/ktst4G4aEo3tp2SAEDwt7A.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air sports an onboard continuous heart rate tracker, blood oxygen saturation (SpO2) reader, and body temperature sensor for keeping tabs on all your core holistic metrics, including heart rate variability trends, breath rate, cardio load, and daily readiness, a numeric score out of 100. </p><p>For a $99 wearable, the Fitbit Air provides detailed sleep reports on par with some of the best smartwatch models in 2026, with insights into your sleep duration, time spent in sleep cycles, restlessness, and daily sleep quality rating and score, also out of 100. </p><div><blockquote><p>For a $99 wearable, the Fitbit Air provides detailed sleep reports on par with some of the best smartwatch models in 2026</p></blockquote></div><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4114px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="m3zAnMrGySMYrDxq46JKLY" name="Fitbit-Air-lead-03" alt="Close-up of the sensors on the Fitbit Air screenless fitness tracker" src="https://cdn.mos.cms.futurecdn.net/m3zAnMrGySMYrDxq46JKLY.jpg" mos="" align="middle" fullscreen="" width="4114" height="2315" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><caption>Same-night sleep data comparison vs Garmin</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Forerunner 70</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Sleep Score </strong></p></td><td  ><p>73, Fair</p></td><td  ><p>66, Fair</p></td></tr><tr><td class="firstcol " ><p><strong>Sleep duration</strong></p></td><td  ><p>7 hours 37 mins</p></td><td  ><p>8 hours 9 mins</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>66 bpm</p></td><td  ><p>65 bpm</p></td></tr><tr><td class="firstcol " ><p><strong>REM sleep</strong></p></td><td  ><p>30 mins</p></td><td  ><p>1 hours 35 mins</p></td></tr><tr><td class="firstcol " ><p><strong>Light sleep</strong></p></td><td  ><p>5 hours 59 mins</p></td><td  ><p>5 hours 45 mins</p></td></tr><tr><td class="firstcol " ><p><strong>Deep sleep</strong></p></td><td  ><p>41 mins</p></td><td  ><p>49 mins</p></td></tr></tbody></table></div><p>I tested the Fitbit Air against the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">Garmin Forerunner 70</a> nightly for a week straight. The chart above shows recent results, logged during the same night from each tracker. While the data doesn't match perfectly, the results are pretty darn close across the board, suggesting that the Fitbit Air is just as capable of logging sleep quality as a device 2.5 times its cost.</p><p>Google completely overhauled the Fitbit companion app, now called 'Google Health,' and the results are an easy-to-navigate experience with quick and easy access to whatever metrics you value most — the app is highly customizable — along with just the right amount of context and analysis to prove useful but not overwhelming.</p><h3 class="article-body__section" id="section-fitbit-air-fitness-tracking-3-5"><span>Fitbit Air fitness tracking: 3/5</span></h3><ul><li><strong>Reliable fitness tracking performance when you carry a paired smartphone for location and elevation data</strong></li><li><strong>Auto workout mode only starts tracking after 15 minutes and is limited to a handful of common exercises</strong></li><li><strong>Similar heart rate tracking reliability to entry-level Garmin watches; no apparent performance differences between tracking on left vs right wrists </strong></li><li><strong>Personalized AI-backed adaptive fitness plans require a Google Health Premium subscription</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3341px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="Mimn2jQmsFeajNnNQ8NWGU" name="IMG_7880" alt="a photo of the Fitbit Air on the wrist" src="https://cdn.mos.cms.futurecdn.net/Mimn2jQmsFeajNnNQ8NWGU.jpg" mos="" align="middle" fullscreen="" width="3341" height="1879" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Like nearly every screen-less wearable, the Fitbit Air lacks an onboard GPS for location data and an altimeter for elevation insights. This means that you'll want to carry your paired smartphone when performing outdoor workouts for the Air to piggyback off of, to ensure reliable distance, pace, and elevation gain metrics.</p><p>The Fitbit Air automatically tracks a small selection of workout types, including walks, bike rides, 'sports,' and 'other activities.' It does so whether you carry your paired phone or not, but there's a catch. For an activity to be auto-logged, you have to do it for at least 15 consecutive minutes.</p><p><a href="https://www.tomsguide.com/wellness/running/im-a-running-noob-doing-my-first-5k-heres-all-the-tech-im-using-to-cross-the-finish-line">I'm a newbie runner</a> who jogs roughly 1.5 miles several times a week. That often takes me less than 15 minutes, which means that I have to manually open the Fitbit app on my phone and start a running workout session to ensure the Air <em>actually</em> logs it. This is less than ideal, IMHO, and Google should instead lower the auto workout threshold for the Air to five minutes instead.</p><p>The selectable tracking modes for the Fitbit Air in the app are also somewhat limited compared to the competition, with just 41 to choose from. For example, there isn't even a pickleball mode!</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4V36jPbP2C9WJfa94qMJdW" name="FitbitAir-Inspire-05" alt="Close-up of the Fitbit Inspire 3 and Fitbit Air in a user's hand" src="https://cdn.mos.cms.futurecdn.net/4V36jPbP2C9WJfa94qMJdW.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The Fitbit Air (right) and Fitbit Inspire 3. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><caption>3,000-step walk comparison vs Garmin vs Strava</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Forerunner 70</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>3,004 steps</p></td><td  ><p>2.996 steps</p></td><td  ><p>3,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>1.61 miles</p></td><td  ><p>1.57 miles</p></td><td  ><p>1.60 miles</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>165 feet</p></td><td  ><p>154 feet</p></td><td  ><p>176 feet</p></td></tr><tr><td class="firstcol " ><p>Pace (elapsed)</p></td><td  ><p>18 mins 31 secs per mile</p></td><td  ><p>17 mins 48 secs</p></td><td  ><p>18 mins 21 secs</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>116 bpm</p></td><td  ><p>125 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>161 bpm</p></td><td  ><p>163 bpm</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><div><blockquote><p>The Fitbit Air tracks your heart rate with similar reliability to Garmin's top entry-level smartwatch, regardless of which wrist you wear it on</p></blockquote></div><p>When carrying a paired smartphone, fitness tracking performance from the Fitbit Air is top-notch. I walked 3,000 steps — manually counted — with the Fitbit Air vs Garmin Forerunner 70 vs Strava running on an iPhone 16, and the Air proved just as accurate across the board as the others (though its pace data was a little sluggish). </p><p>To ensure similar heart rate tracking capabilities on either wrist, I performed 50 jumping jacks with the Air on first on my left and then on my right wrist (giving time for my heart to return to a resting rate in between). I also wore the Garmin Forerunner 70 on the opposite wrist of the Air during testing for an additional data set. The results: The Fitbit Air tracks your heart rate with similar reliability to Garmin's top entry-level smartwatch, regardless of which wrist you wear it on.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DPJMY7WKMhYgAKhiUVJdBA" name="FitbitAir-03" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/DPJMY7WKMhYgAKhiUVJdBA.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><caption>1.5-mile run comparison vs Garmin vs Strava</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Forerunner 70</p></th><th  ><p>Strava</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>1.48 miles</p></td><td  ><p>1.44 miles</p></td><td  ><p>1.52 miles</p></td></tr><tr><td class="firstcol " ><p>Pace per mile</p></td><td  ><p>9 mins 38 secs</p></td><td  ><p>9 mins 11 secs</p></td><td  ><p>8 mins 35 secs </p></td></tr><tr><td class="firstcol " ><p>Elevation gained</p></td><td  ><p>76 feet</p></td><td  ><p>85 feet</p></td><td  ><p>78 feet</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>156 bpm</p></td><td  ><p>158 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>176 bpm</p></td><td  ><p>177 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Calories burned</p></td><td  ><p>168 calories</p></td><td  ><p>158 calories</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>In addition to testing the Fitbit Air while walking and doing aerobic workouts, I also tested it against Garmin and Strava while going for a 1.5-mile run. In this test, the Air's results once again line up nicely with the competition. </p><p>Of course, for the most valuable insights into your fitness trends, you'll want to take Google Health Premium for a spin, which notably unlocks Google's Gemini-backed 'Coach,' a personalized, holistic concierge that is far more helpful, in my testing, than <a href="https://www.tomsguide.com/wellness/fitness/i-ran-15-miles-with-the-apple-watchs-new-workout-buddy-heres-my-verdict">Apple's 'Workout Buddy'</a> or <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review#section-samsung-galaxy-watch-8-health-and-fitness-tracking">Samsung's 'Running Coach.'</a></p><p>For example, after a week of less-than-ideal sleep and more workouts logged than normal, the Coach not only advised I take it easy, but also gave me targets for how much sleep to get in the next few nights, low-key workout suggestions that target muscle groups I didn't utilize in recent days, and big picture advice based on my fitness goals and recent performance. </p><h3 class="article-body__section" id="section-fitbit-air-battery-life-4-5"><span>Fitbit Air battery life: 4/5</span></h3><ul><li><strong>The Fitbit Air lasted over a week in my testing, meeting its advertised rating</strong></li><li><strong>It also recharges quickly: 0 to 100% in roughly 90 minutes </strong></li><li><strong>Whoop 5.0 boasts double the battery life of the Fitbit Air</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4467px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="FR2AiWoTMykhFBDo5j984N" name="FitbitAir-rev-02" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/FR2AiWoTMykhFBDo5j984N.jpg" mos="" align="middle" fullscreen="" width="4467" height="2513" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is rated to last up to seven days per charge. After exactly one week of testing the Fitbit Air on my wrist, I still had 15% battery remaining. During my time wearing the device, I recorded around a dozen workouts and only took the tracker off while showering.</p><p>Google says you can fully recharge the Air from 0% to 100% battery in roughly 90 minutes, a claim that also proved true in my testing.</p><p>Sure, the Whoop 5.0 offers double the advertised battery life of the Fitbit Air, but it also weighs roughly five times more. Besides, a week of battery is more than enough in my opinion, especially when you consider that some of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch#section-best-smartwatch-for-iphone">best smartwatch </a>models only last for one day per charge... cough, cough,<a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review"> Apple Watch 11</a>.</p><h3 class="article-body__section" id="section-fitbit-air-review-verdict"><span>Fitbit Air review: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4923px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="v4R3RdVkt2tearzZXDp52N" name="FitbitAir-rev-07" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/v4R3RdVkt2tearzZXDp52N.jpg" mos="" align="middle" fullscreen="" width="4923" height="2769" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>The combination of a completely distraction-free user experience, an affordable price, reliable holistic features, excellent comfort, impressive battery life, and no subscription requirement all add up to the Fitbit Air being my new favorite fitness tracker in 2026</p></blockquote></div><p>I tested the Fitbit Air for a week, and I have no intentions of taking it off anytime soon. In fact, it's hands down my favorite screenless, subscription-free tracker on the market today and a great choice for anyone looking to learn more about their health trends without breaking the bank or straining their wrist. In short: It's a Whoop 5.0 for the rest of us. </p><p>Smaller, lighter, and overall more comfortable than alternatives from Whoop, Amazfit, and Polar, it may not have the best-in-class battery life, but at over a week per charge, it's good enough for me. While you'll find more in-depth fitness tracking insights from the <a href="https://www.tomsguide.com/us/best-gps-watches,review-2638.html">best GPS sport watches</a>, the Fitbit Air covers all the basics well, even if the auto-workout tracking could use refinement and an expansion of exercise types. </p><p>Ultimately, the combination of a completely distraction-free user experience, an affordable price, reliable holistic features, excellent comfort, impressive battery life, and no subscription requirement all add up to the Fitbit Air being my new favorite fitness tracker in 2026, and a wearable I'll be recommending to all sorts of wellness and fitness enthusiasts. </p><p><em><strong>Fitbit Air final score: 21 out of 25</strong></em></p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review</link>
                                                                            <description>
                            <![CDATA[ The Fitbit Air is a discreet and distraction-free (no screen) fitness tracker that's easy to use, accurate, and long-lasting. Subscription-free, it costs just $99. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Aq62ktJZbSys7nsx7Jxwp5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 26 May 2026 13:00:00 +0000</pubDate>                                                                                                                                <updated>Wed, 27 May 2026 19:15:26 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Air on-wrist on a red strap against a blue background]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Air on-wrist on a red strap against a blue background]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Air on-wrist on a red strap against a blue background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/bFju7tvNftUTkppemXS2tT-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Good things <em>should</em> be worth the wait. After all, the legendary neo-soul recording artist D’Angelo kept us waiting 14 years for his third and arguably most groundbreaking album, <em>Black Messiah</em>. Google hasn’t made us wait quite as long for a new Fitbit model; the last Fitbit designed for adults debuted in 2023 — the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> — while the latest entry-level addition to the lineup, the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>, launched in 2022. </p><p>Thankfully — and <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">much to my surprise</a> — Google’s Fitbit draught ended in early May with the debut of the ultra-petite, screen-free, and subscription-optional Fitbit Air. </p><p>Priced at just $99, the Fitbit Air is designed to be a set-it-and-forget-it, ultra-discreet health tracker with 24/7 heart rate monitoring, detailed nightly sleep reports, basic fitness tracking, recovery recommendations, women’s health tracking, and perhaps most notably, zero buttons or smart features. </p><p>I tested the Fitbit Air for over a week, and I may never take it off. The Fitbit Air is easily the best no-fuss, bang-for-your-buck, screen-less fitness tracker on the market in 2026. That's right, forget the more advanced, serious-athletes-only, wallet-draining <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a>, here’s why I’ll be recommending the Fitbit Air to users far and wide for the foreseeable future.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/LCKJ8K4sdXk" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-fitbit-air-specs-compared"><span>Fitbit Air: Specs compared</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4656px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fBUH3NHzWwpzrTaW5D5X2N" name="FitbitAir-rev-01" alt="Close-up of the Fitbit Air, Polar Loop, and Amazfit Helio Strap" src="https://cdn.mos.cms.futurecdn.net/fBUH3NHzWwpzrTaW5D5X2N.jpg" mos="" align="middle" fullscreen="" width="4656" height="2619" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">From clockwise the top: the Amazfit Helio Strap, Polar Loop, and Fitbit Air.  </span><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><caption>Fitbit Air vs Whoop 5.0 vs Amazfit Helio Strap</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit AIr</p></th><th  ><p>Whoop 5.0</p></th><th  ><p>Helio strap</p></th><th  ><p>Polar Loop</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Starting price</strong></p></td><td  ><p>$99</p></td><td  ><p>Free with subscription</p></td><td  ><p>$99</p></td><td  ><p>$199</p></td></tr><tr><td class="firstcol " ><p><strong>Subscription cost</strong></p></td><td  ><p>Optional, $9.99 a month or $99 per year</p></td><td  ><p>$199, $239 or $359 per year depending on tier </p></td><td  ><p>n/a</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions (without strap)</strong></p></td><td  ><p>35 x 17 x 8 mm</p></td><td  ><p>35  x 24  x 11 mm</p></td><td  ><p>34 x 24 x 11 mm</p></td><td  ><p>28 x 43 x  10 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight (without strap)</strong></p></td><td  ><p>5.2 g</p></td><td  ><p>26.5 g</p></td><td  ><p>20 g</p></td><td  ><p>20 g</p></td></tr><tr><td class="firstcol " ><p><strong>Sensors</strong></p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, Skin temp, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, Skin temp, Accelerometer</p></td></tr><tr><td class="firstcol " ><p><strong>Water resistance </strong></p></td><td  ><p>50 meters</p></td><td  ><p>10 meters</p></td><td  ><p>50 meters</p></td><td  ><p>30 meters</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life</strong></p></td><td  ><p>7 days</p></td><td  ><p>14 days</p></td><td  ><p>10 days</p></td><td  ><p>8 days</p></td></tr><tr><td class="firstcol " ><p><strong>Compatibility </strong></p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td><td  ><p>Android, iOS</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-fitbit-air-value-5-5"><span>Fitbit Air value: 5/5</span></h3><ul><li><strong>At $99 and subscription-free for core features, the Fitbit Air is one of the best value screenless trackers available in 2026</strong></li><li><strong>An optional Google Health Premium account unlocks personalized AI-backed health and fitness insights, along with deeper dives into your holistic trends; it's $9.99 a month or $99 a year</strong></li><li><strong>Cost-wise, the Fitbit Air is the same price as 2022's entry-level Fitbit Inspire 3 tracker, which is still sold by Google (but often for $79); the Air is less than the GPS-sporting Fitbit Charge 6 ($159)</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5459px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ZbZb7oVskZ74qYjLHoJ2UN" name="FitbitAir-rev-03" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/ZbZb7oVskZ74qYjLHoJ2UN.jpg" mos="" align="middle" fullscreen="" width="5459" height="3071" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is $99, the same price that the Fitbit Inspire 3 debuted at in 2022. This may have you thinking that the Air replaces the Inspire 3 in the brand's lineup, but that's not the case. Google will continue selling the Fitbit Inspire 3 for $79-$99 and the Fitbit Charge 6 for $159 for the foreseeable future.</p><p>The Fitbit Air will set you back $99 paired with one of Google's standard silicone or kniy straps or $129 paired with the special edition Stephan Curry strap (which I'm a big fan of, more on that below).</p><p>Compared to the competition, the Fitbit Air is the same price as the <a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-helio-strap-review">Amazfit Helio Strap</a> and half the price of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/polars-screenless-fitness-tracker-has-arrived-heres-everything-you-need-to-know-about-the-whoop-rival">Polar Loop</a>, both of which are also subscription-free. The Fitbit Air is additionally less than half the price of the cheapest annual Whoop subscription. </p><p>Speaking of subscriptions, some of the more advanced features, like AI-backed recommendations and trend insights, require a Google Health Premium (previously Fitbit Premium) subscription for $9.99 a month or $99 for the year; full review of that coming soon.  </p><p>Ultimately, the Fitbit Air ships with a three-month trial to Premium to help you decide whether those additional features are worth it to you, something I appreciate.</p><p><strong>Fitbit Air value: 5/5</strong></p><h3 class="article-body__section" id="section-fitbit-air-design-and-comfort-5-5"><span>Fitbit Air design and comfort: 5/5</span></h3><ul><li><strong>The Fitbit Air is smaller, lighter, and more comfortable than the competition </strong></li><li><strong>Better water resistance than Whoop 5.0</strong></li><li><strong>Designed to be swapped from strap to strap with ease</strong></li><li><strong>The special edition Stephen Curry strap is the comfiest of Google's initial offerings</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5003px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="aCdSoGC6BVb7zmo5NrorbA" name="FitbitAir-07" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/aCdSoGC6BVb7zmo5NrorbA.jpg" mos="" align="middle" fullscreen="" width="5003" height="2815" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air doesn't have a screen or any buttons; however, it does have a haptic motor, which can be set to vibrate for a limited number of use cases, most notably as a way to gently and silently wake you up via Google's Smart Alarm function. You cannot set it to vibrate to alert you to incoming texts, calls, or other smartphone notifications. </p><p>The Fitbit Air is noticeably smaller, thinner, and lighter than all of its competitors, including the Whoop 5.0, Polar Loop, and Amazfit Helio Strap. </p><p>Weighing just over 5 g and with a tiny footprint, the Fitbit Air is not only extremely comfortable, especially on the special edition Stephen Curry strap, but it also doesn't really resemble a fitness tracker... like, at all. Instead, it looks more like a sporty bracelet than a tech gadget.</p><p>Water resistance is 50 meters, which beats the pants off the Whoop 5.0, and should be enough to protect the Air during short surface-level swims, showers, hand-washing, etc. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5554px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3grJp6fgcq7zoZ3EmCdraA" name="FitbitAir-04" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/3grJp6fgcq7zoZ3EmCdraA.jpg" mos="" align="middle" fullscreen="" width="5554" height="3124" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The tracker itself is nothing more than a small plastic pebble with some sensors and charging contacts on the underside. However, because it's protected by the strap, it's nearly impossible to damage the tech components, even if you slam your wrist unintentionally into a wall. </p><p>Customization is a big selling point of the Air. The tracker itself, which looks like a slimmed-down Inspire 3 without straps, pops with delightful fashion in and out of its housing with a firm push. </p><p>Google is selling a fairly wide selection of straps, starting at $34.99, in all sorts of eye-catching colors. Choose from sporty silicone or stretchy knit fabric. Meanwhile, wallet-friendly, third-party straps have yet to materialize on Amazon and the likes, but give it time. </p><p>It's worth calling out the Steph Curry strap, because it feels a lot more premium, breathable, and less scratchy than the standard knit strap Google offers with the device for $99.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gMwOBe" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-health-tracking-4-5"><span>Health tracking: 4/5</span></h3><ul><li><strong>Lots of sleep tracking insights on par with the </strong><a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html"><strong>best fitness trackers</strong></a><strong> and </strong><a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch"><strong>best smartwatches</strong></a></li><li><strong>User-friendly app for tracking holistic trends like resting heart rate, average calorie burn, step count, heart rate variability, menstrual cycles, and daily readiness </strong></li><li><strong>Some health tracking features require a Google Health Premium subscription, like AI-analyzed sleep trend recommendations (via Google Coach)</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ktst4G4aEo3tp2SAEDwt7A" name="FitbitAir-01" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/ktst4G4aEo3tp2SAEDwt7A.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air sports an onboard continuous heart rate tracker, blood oxygen saturation (SpO2) reader, and body temperature sensor for keeping tabs on all your core holistic metrics, including heart rate variability trends, breath rate, cardio load, and daily readiness, a numeric score out of 100. </p><p>For a $99 wearable, the Fitbit Air provides detailed sleep reports on par with some of the best smartwatch models in 2026, with insights into your sleep duration, time spent in sleep cycles, restlessness, and daily sleep quality rating and score, also out of 100. </p><div><blockquote><p>For a $99 wearable, the Fitbit Air provides detailed sleep reports on par with some of the best smartwatch models in 2026</p></blockquote></div><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4114px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="m3zAnMrGySMYrDxq46JKLY" name="Fitbit-Air-lead-03" alt="Close-up of the sensors on the Fitbit Air screenless fitness tracker" src="https://cdn.mos.cms.futurecdn.net/m3zAnMrGySMYrDxq46JKLY.jpg" mos="" align="middle" fullscreen="" width="4114" height="2315" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><caption>Same-night sleep data comparison vs Garmin</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Forerunner 70</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Sleep Score </strong></p></td><td  ><p>73, Fair</p></td><td  ><p>66, Fair</p></td></tr><tr><td class="firstcol " ><p><strong>Sleep duration</strong></p></td><td  ><p>7 hours 37 mins</p></td><td  ><p>8 hours 9 mins</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>66 bpm</p></td><td  ><p>65 bpm</p></td></tr><tr><td class="firstcol " ><p><strong>REM sleep</strong></p></td><td  ><p>30 mins</p></td><td  ><p>1 hours 35 mins</p></td></tr><tr><td class="firstcol " ><p><strong>Light sleep</strong></p></td><td  ><p>5 hours 59 mins</p></td><td  ><p>5 hours 45 mins</p></td></tr><tr><td class="firstcol " ><p><strong>Deep sleep</strong></p></td><td  ><p>41 mins</p></td><td  ><p>49 mins</p></td></tr></tbody></table></div><p>I tested the Fitbit Air against the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">Garmin Forerunner 70</a> nightly for a week straight. The chart above shows recent results, logged during the same night from each tracker. While the data doesn't match perfectly, the results are pretty darn close across the board, suggesting that the Fitbit Air is just as capable of logging sleep quality as a device 2.5 times its cost.</p><p>Google completely overhauled the Fitbit companion app, now called 'Google Health,' and the results are an easy-to-navigate experience with quick and easy access to whatever metrics you value most — the app is highly customizable — along with just the right amount of context and analysis to prove useful but not overwhelming.</p><h3 class="article-body__section" id="section-fitbit-air-fitness-tracking-3-5"><span>Fitbit Air fitness tracking: 3/5</span></h3><ul><li><strong>Reliable fitness tracking performance when you carry a paired smartphone for location and elevation data</strong></li><li><strong>Auto workout mode only starts tracking after 15 minutes and is limited to a handful of common exercises</strong></li><li><strong>Similar heart rate tracking reliability to entry-level Garmin watches; no apparent performance differences between tracking on left vs right wrists </strong></li><li><strong>Personalized AI-backed adaptive fitness plans require a Google Health Premium subscription</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3341px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="Mimn2jQmsFeajNnNQ8NWGU" name="IMG_7880" alt="a photo of the Fitbit Air on the wrist" src="https://cdn.mos.cms.futurecdn.net/Mimn2jQmsFeajNnNQ8NWGU.jpg" mos="" align="middle" fullscreen="" width="3341" height="1879" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Like nearly every screen-less wearable, the Fitbit Air lacks an onboard GPS for location data and an altimeter for elevation insights. This means that you'll want to carry your paired smartphone when performing outdoor workouts for the Air to piggyback off of, to ensure reliable distance, pace, and elevation gain metrics.</p><p>The Fitbit Air automatically tracks a small selection of workout types, including walks, bike rides, 'sports,' and 'other activities.' It does so whether you carry your paired phone or not, but there's a catch. For an activity to be auto-logged, you have to do it for at least 15 consecutive minutes.</p><p><a href="https://www.tomsguide.com/wellness/running/im-a-running-noob-doing-my-first-5k-heres-all-the-tech-im-using-to-cross-the-finish-line">I'm a newbie runner</a> who jogs roughly 1.5 miles several times a week. That often takes me less than 15 minutes, which means that I have to manually open the Fitbit app on my phone and start a running workout session to ensure the Air <em>actually</em> logs it. This is less than ideal, IMHO, and Google should instead lower the auto workout threshold for the Air to five minutes instead.</p><p>The selectable tracking modes for the Fitbit Air in the app are also somewhat limited compared to the competition, with just 41 to choose from. For example, there isn't even a pickleball mode!</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4V36jPbP2C9WJfa94qMJdW" name="FitbitAir-Inspire-05" alt="Close-up of the Fitbit Inspire 3 and Fitbit Air in a user's hand" src="https://cdn.mos.cms.futurecdn.net/4V36jPbP2C9WJfa94qMJdW.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The Fitbit Air (right) and Fitbit Inspire 3. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><caption>3,000-step walk comparison vs Garmin vs Strava</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Forerunner 70</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>3,004 steps</p></td><td  ><p>2.996 steps</p></td><td  ><p>3,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>1.61 miles</p></td><td  ><p>1.57 miles</p></td><td  ><p>1.60 miles</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>165 feet</p></td><td  ><p>154 feet</p></td><td  ><p>176 feet</p></td></tr><tr><td class="firstcol " ><p>Pace (elapsed)</p></td><td  ><p>18 mins 31 secs per mile</p></td><td  ><p>17 mins 48 secs</p></td><td  ><p>18 mins 21 secs</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>116 bpm</p></td><td  ><p>125 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>161 bpm</p></td><td  ><p>163 bpm</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><div><blockquote><p>The Fitbit Air tracks your heart rate with similar reliability to Garmin's top entry-level smartwatch, regardless of which wrist you wear it on</p></blockquote></div><p>When carrying a paired smartphone, fitness tracking performance from the Fitbit Air is top-notch. I walked 3,000 steps — manually counted — with the Fitbit Air vs Garmin Forerunner 70 vs Strava running on an iPhone 16, and the Air proved just as accurate across the board as the others (though its pace data was a little sluggish). </p><p>To ensure similar heart rate tracking capabilities on either wrist, I performed 50 jumping jacks with the Air on first on my left and then on my right wrist (giving time for my heart to return to a resting rate in between). I also wore the Garmin Forerunner 70 on the opposite wrist of the Air during testing for an additional data set. The results: The Fitbit Air tracks your heart rate with similar reliability to Garmin's top entry-level smartwatch, regardless of which wrist you wear it on.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DPJMY7WKMhYgAKhiUVJdBA" name="FitbitAir-03" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/DPJMY7WKMhYgAKhiUVJdBA.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><caption>1.5-mile run comparison vs Garmin vs Strava</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Air</p></th><th  ><p>Forerunner 70</p></th><th  ><p>Strava</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>1.48 miles</p></td><td  ><p>1.44 miles</p></td><td  ><p>1.52 miles</p></td></tr><tr><td class="firstcol " ><p>Pace per mile</p></td><td  ><p>9 mins 38 secs</p></td><td  ><p>9 mins 11 secs</p></td><td  ><p>8 mins 35 secs </p></td></tr><tr><td class="firstcol " ><p>Elevation gained</p></td><td  ><p>76 feet</p></td><td  ><p>85 feet</p></td><td  ><p>78 feet</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>156 bpm</p></td><td  ><p>158 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>176 bpm</p></td><td  ><p>177 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Calories burned</p></td><td  ><p>168 calories</p></td><td  ><p>158 calories</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>In addition to testing the Fitbit Air while walking and doing aerobic workouts, I also tested it against Garmin and Strava while going for a 1.5-mile run. In this test, the Air's results once again line up nicely with the competition. </p><p>Of course, for the most valuable insights into your fitness trends, you'll want to take Google Health Premium for a spin, which notably unlocks Google's Gemini-backed 'Coach,' a personalized, holistic concierge that is far more helpful, in my testing, than <a href="https://www.tomsguide.com/wellness/fitness/i-ran-15-miles-with-the-apple-watchs-new-workout-buddy-heres-my-verdict">Apple's 'Workout Buddy'</a> or <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review#section-samsung-galaxy-watch-8-health-and-fitness-tracking">Samsung's 'Running Coach.'</a></p><p>For example, after a week of less-than-ideal sleep and more workouts logged than normal, the Coach not only advised I take it easy, but also gave me targets for how much sleep to get in the next few nights, low-key workout suggestions that target muscle groups I didn't utilize in recent days, and big picture advice based on my fitness goals and recent performance. </p><h3 class="article-body__section" id="section-fitbit-air-battery-life-4-5"><span>Fitbit Air battery life: 4/5</span></h3><ul><li><strong>The Fitbit Air lasted over a week in my testing, meeting its advertised rating</strong></li><li><strong>It also recharges quickly: 0 to 100% in roughly 90 minutes </strong></li><li><strong>Whoop 5.0 boasts double the battery life of the Fitbit Air</strong></li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4467px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="FR2AiWoTMykhFBDo5j984N" name="FitbitAir-rev-02" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/FR2AiWoTMykhFBDo5j984N.jpg" mos="" align="middle" fullscreen="" width="4467" height="2513" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is rated to last up to seven days per charge. After exactly one week of testing the Fitbit Air on my wrist, I still had 15% battery remaining. During my time wearing the device, I recorded around a dozen workouts and only took the tracker off while showering.</p><p>Google says you can fully recharge the Air from 0% to 100% battery in roughly 90 minutes, a claim that also proved true in my testing.</p><p>Sure, the Whoop 5.0 offers double the advertised battery life of the Fitbit Air, but it also weighs roughly five times more. Besides, a week of battery is more than enough in my opinion, especially when you consider that some of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch#section-best-smartwatch-for-iphone">best smartwatch </a>models only last for one day per charge... cough, cough,<a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review"> Apple Watch 11</a>.</p><h3 class="article-body__section" id="section-fitbit-air-review-verdict"><span>Fitbit Air review: Verdict</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4923px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="v4R3RdVkt2tearzZXDp52N" name="FitbitAir-rev-07" alt="Close-up of the Fitbit Air" src="https://cdn.mos.cms.futurecdn.net/v4R3RdVkt2tearzZXDp52N.jpg" mos="" align="middle" fullscreen="" width="4923" height="2769" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>The combination of a completely distraction-free user experience, an affordable price, reliable holistic features, excellent comfort, impressive battery life, and no subscription requirement all add up to the Fitbit Air being my new favorite fitness tracker in 2026</p></blockquote></div><p>I tested the Fitbit Air for a week, and I have no intentions of taking it off anytime soon. In fact, it's hands down my favorite screenless, subscription-free tracker on the market today and a great choice for anyone looking to learn more about their health trends without breaking the bank or straining their wrist. In short: It's a Whoop 5.0 for the rest of us. </p><p>Smaller, lighter, and overall more comfortable than alternatives from Whoop, Amazfit, and Polar, it may not have the best-in-class battery life, but at over a week per charge, it's good enough for me. While you'll find more in-depth fitness tracking insights from the <a href="https://www.tomsguide.com/us/best-gps-watches,review-2638.html">best GPS sport watches</a>, the Fitbit Air covers all the basics well, even if the auto-workout tracking could use refinement and an expansion of exercise types. </p><p>Ultimately, the combination of a completely distraction-free user experience, an affordable price, reliable holistic features, excellent comfort, impressive battery life, and no subscription requirement all add up to the Fitbit Air being my new favorite fitness tracker in 2026, and a wearable I'll be recommending to all sorts of wellness and fitness enthusiasts. </p><p><em><strong>Fitbit Air final score: 21 out of 25</strong></em></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve been wearing the new Fitbit Air all week — 3 reasons why I’m obsessed with this $99 tracker ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I’m currently reviewing the new <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Fitbit Air</a>, and after four days wearing it, I’m already obsessed.</p><p>While the Fitbit Air is far from the most advanced fitness tracker on the market today — it doesn’t even have a screen or onboard GPS — a $99 price tag, playful design, and simple-to-use disposition make it a potentially compelling choice for wrists far and wide. </p><p>With that in mind, these are the three biggest reasons why I’m smitten with the new Fitbit Air, so much so that it just might be my favorite wearable in 2026, at least, so far. </p><div class="product"><a data-dimension112="aab4019f-2411-4ce9-bbe2-c254185f516e" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2kWy3efzpjJSVZR9UpMGJQ" name="Fitbit-Air-04" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2kWy3efzpjJSVZR9UpMGJQ.jpg" mos="" align="middle" fullscreen="" width="4000" height="2250" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a screen-free, subscription-free fitness tracker that's lightweight, easy-to-use, long-lasting, and seriously customizable. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="aab4019f-2411-4ce9-bbe2-c254185f516e" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><h3 class="article-body__section" id="section-1-accessibly-priced-plays-well-with-others"><span>1. Accessibly priced; plays well with others </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5554px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3grJp6fgcq7zoZ3EmCdraA" name="FitbitAir-04" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/3grJp6fgcq7zoZ3EmCdraA.jpg" mos="" align="middle" fullscreen="" width="5554" height="3124" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is accessibly priced at $99. That cost covers the tracker and one band; additional straps start at <a href="https://www.amazon.com/dp/B0GHPYSJ7V/" target="_blank" rel="nofollow">$34.99 via Amazon</a> and come in a wide range of colors, and your choice of silicone or woven knit. </p><p>Speaking of accessible, the Fitbit app… excuse me, the Google Health app (new name) plays nicely on both Android and iOS devices, offering users the same experience regardless of their OS preference; how democratic!</p><h3 class="article-body__section" id="section-2-subscription-and-distraction-free-tracking"><span>2. Subscription and distraction-free tracking </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4946px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jwpwjZpppYynDr8bV3cUMA" name="FitbitAir-02" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/jwpwjZpppYynDr8bV3cUMA.jpg" mos="" align="middle" fullscreen="" width="4946" height="2782" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>With no screen and no buttons to get in your way, not to mention a diminutive footprint (more on that below), the Fitbit Air is the antithesis of wearables like the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch 11</a>, the <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review">Samsung Galaxy Watch 8</a>, or the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Google Pixel Watch 4</a>, and that's the point! </p><p>There’s also no NFC for mobile payments, no speaker or microphone for taking calls, and ultimately, nothing to distract you from living in the moment. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ktst4G4aEo3tp2SAEDwt7A" name="FitbitAir-01" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/ktst4G4aEo3tp2SAEDwt7A.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Additionally, unlike other popular screen-free trackers aimed more at advanced athletes, most notably the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0 and MG</a>, the Fitbit Air is subscription-optional. So, aside from the cost of the device itself, you never need to shell out any additional cash to make use of its primary tracking features.</p><p>That said, Google <em>does</em> offer an optional subscription plan for the Fitbit Air and Pixel Watch series called <a href="https://www.tomsguide.com/ai/googles-new-usd100-ai-ultra-plan-just-changed-the-ai-race-and-gemini-spark-is-the-biggest-reason-why">Google Health Premium</a> (previously called Fitbit Premium). Priced at $9.99 a month or $99 for the year, a subscription unlocks all sorts of additional holistic tools, perhaps most notably, access to the tech giant’s new personalized wellness ‘Coach’ that turns your health data into surprisingly actionable insights. </p><h3 class="article-body__section" id="section-3-easy-wearing-and-addictively-customizable"><span>3. Easy-wearing and addictively customizable</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5003px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="aCdSoGC6BVb7zmo5NrorbA" name="FitbitAir-07" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/aCdSoGC6BVb7zmo5NrorbA.jpg" mos="" align="middle" fullscreen="" width="5003" height="2815" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>After roughly four days with the Fitbit Air on my wrist, I can say with certainty that this thing is comfortable as heck, <a href="https://www.tomsguide.com/wellness/smartwatches/ive-been-wearing-the-new-fitbit-air-for-5-days-and-this-is-the-one-thing-that-has-really-impressed-me-so-far">a sentiment shared</a> by my colleague Jane McGuire. Not only that, it barely resembles a piece of nerdy wearable tech; rather, it looks more like a stylish little bracelet, depending on which strap you opt for. I’m currently rocking the slick, limited-edition Stephen Curry jawn, and I’m hooked. </p><p>It’s also addictively easy to pop the little tracker out of the strap housing and swap it into a different setup. This is, of course, intentional on Google’s part. The idea is to make it easy for users to match their Air strap to their outfit or mood. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DPJMY7WKMhYgAKhiUVJdBA" name="FitbitAir-03" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/DPJMY7WKMhYgAKhiUVJdBA.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The official Google Fitbit Air straps start at $34.99, but I don't doubt that cheaper, third-party options will start popping up on Amazon in the coming weeks and months. When that happens, you can bet I’ll be purchasing a variety to test out. </p><p>What do you think of the Fitbit Air? What features are you most impressed with (or not), and are you considering buying one? Let me know in the comments below.  </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eAx6MX"></div>                            </div>                            <script src="https://kwizly.com/embed/eAx6MX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">I just spent 36 hours with Garmin’s new entry-level watch for runners — 5 things to know about the Garmin Forerunner 70</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-just-ran-my-first-5k-heres-how-i-conquered-the-pre-race-jitters">I just ran my first 5K — 5 practical ways I conquered my pre-race nerves for a strong finish</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tested-the-usd79-amazfit-bip-6-vs-the-usd249-apple-watch-se-3-and-the-cheaper-smartwatch-is-a-lot-better-than-i-thought">I tested the $79 Amazfit Bip 6 vs the $249 Apple Watch SE 3 — and the cheaper smartwatch is a lot better than I thought</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/ive-been-wearing-the-new-fitbit-air-all-week-3-reasons-why-im-obsessed-with-this-usd99-tracker</link>
                                                                            <description>
                            <![CDATA[ I’m in the process of reviewing the new Fitbit Air — expect my review early next week — and after four days wearing it, I’m already obsessed. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3Dw4PsgBGUNQPykvdTdNrc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EvMxy8b2KjzH2ks5YVcSAA-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 21 May 2026 05:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EvMxy8b2KjzH2ks5YVcSAA-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap]]></media:description>                                                            <media:text><![CDATA[Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap]]></media:text>
                                <media:title type="plain"><![CDATA[Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EvMxy8b2KjzH2ks5YVcSAA-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’m currently reviewing the new <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Fitbit Air</a>, and after four days wearing it, I’m already obsessed.</p><p>While the Fitbit Air is far from the most advanced fitness tracker on the market today — it doesn’t even have a screen or onboard GPS — a $99 price tag, playful design, and simple-to-use disposition make it a potentially compelling choice for wrists far and wide. </p><p>With that in mind, these are the three biggest reasons why I’m smitten with the new Fitbit Air, so much so that it just might be my favorite wearable in 2026, at least, so far. </p><div class="product"><a data-dimension112="aab4019f-2411-4ce9-bbe2-c254185f516e" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2kWy3efzpjJSVZR9UpMGJQ" name="Fitbit-Air-04" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2kWy3efzpjJSVZR9UpMGJQ.jpg" mos="" align="middle" fullscreen="" width="4000" height="2250" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Air is a screen-free, subscription-free fitness tracker that's lightweight, easy-to-use, long-lasting, and seriously customizable. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Air-Screenless-Personalized/dp/B0GTMJF7PV?th=1" target="_blank" rel="nofollow" data-dimension112="aab4019f-2411-4ce9-bbe2-c254185f516e" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$99">View Deal</a></p></div><h3 class="article-body__section" id="section-1-accessibly-priced-plays-well-with-others"><span>1. Accessibly priced; plays well with others </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5554px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3grJp6fgcq7zoZ3EmCdraA" name="FitbitAir-04" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/3grJp6fgcq7zoZ3EmCdraA.jpg" mos="" align="middle" fullscreen="" width="5554" height="3124" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Air is accessibly priced at $99. That cost covers the tracker and one band; additional straps start at <a href="https://www.amazon.com/dp/B0GHPYSJ7V/" target="_blank" rel="nofollow">$34.99 via Amazon</a> and come in a wide range of colors, and your choice of silicone or woven knit. </p><p>Speaking of accessible, the Fitbit app… excuse me, the Google Health app (new name) plays nicely on both Android and iOS devices, offering users the same experience regardless of their OS preference; how democratic!</p><h3 class="article-body__section" id="section-2-subscription-and-distraction-free-tracking"><span>2. Subscription and distraction-free tracking </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4946px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jwpwjZpppYynDr8bV3cUMA" name="FitbitAir-02" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/jwpwjZpppYynDr8bV3cUMA.jpg" mos="" align="middle" fullscreen="" width="4946" height="2782" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>With no screen and no buttons to get in your way, not to mention a diminutive footprint (more on that below), the Fitbit Air is the antithesis of wearables like the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch 11</a>, the <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review">Samsung Galaxy Watch 8</a>, or the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Google Pixel Watch 4</a>, and that's the point! </p><p>There’s also no NFC for mobile payments, no speaker or microphone for taking calls, and ultimately, nothing to distract you from living in the moment. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ktst4G4aEo3tp2SAEDwt7A" name="FitbitAir-01" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/ktst4G4aEo3tp2SAEDwt7A.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Additionally, unlike other popular screen-free trackers aimed more at advanced athletes, most notably the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0 and MG</a>, the Fitbit Air is subscription-optional. So, aside from the cost of the device itself, you never need to shell out any additional cash to make use of its primary tracking features.</p><p>That said, Google <em>does</em> offer an optional subscription plan for the Fitbit Air and Pixel Watch series called <a href="https://www.tomsguide.com/ai/googles-new-usd100-ai-ultra-plan-just-changed-the-ai-race-and-gemini-spark-is-the-biggest-reason-why">Google Health Premium</a> (previously called Fitbit Premium). Priced at $9.99 a month or $99 for the year, a subscription unlocks all sorts of additional holistic tools, perhaps most notably, access to the tech giant’s new personalized wellness ‘Coach’ that turns your health data into surprisingly actionable insights. </p><h3 class="article-body__section" id="section-3-easy-wearing-and-addictively-customizable"><span>3. Easy-wearing and addictively customizable</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5003px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="aCdSoGC6BVb7zmo5NrorbA" name="FitbitAir-07" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/aCdSoGC6BVb7zmo5NrorbA.jpg" mos="" align="middle" fullscreen="" width="5003" height="2815" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>After roughly four days with the Fitbit Air on my wrist, I can say with certainty that this thing is comfortable as heck, <a href="https://www.tomsguide.com/wellness/smartwatches/ive-been-wearing-the-new-fitbit-air-for-5-days-and-this-is-the-one-thing-that-has-really-impressed-me-so-far">a sentiment shared</a> by my colleague Jane McGuire. Not only that, it barely resembles a piece of nerdy wearable tech; rather, it looks more like a stylish little bracelet, depending on which strap you opt for. I’m currently rocking the slick, limited-edition Stephen Curry jawn, and I’m hooked. </p><p>It’s also addictively easy to pop the little tracker out of the strap housing and swap it into a different setup. This is, of course, intentional on Google’s part. The idea is to make it easy for users to match their Air strap to their outfit or mood. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DPJMY7WKMhYgAKhiUVJdBA" name="FitbitAir-03" alt="Hands-on with the Fitbit Air on the orange and brown Stephen Curry strap" src="https://cdn.mos.cms.futurecdn.net/DPJMY7WKMhYgAKhiUVJdBA.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The official Google Fitbit Air straps start at $34.99, but I don't doubt that cheaper, third-party options will start popping up on Amazon in the coming weeks and months. When that happens, you can bet I’ll be purchasing a variety to test out. </p><p>What do you think of the Fitbit Air? What features are you most impressed with (or not), and are you considering buying one? Let me know in the comments below.  </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eAx6MX"></div>                            </div>                            <script src="https://kwizly.com/embed/eAx6MX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-just-took-my-first-jog-with-garmins-new-entry-level-running-watch-5-things-to-know-about-the-forerunner-70">I just spent 36 hours with Garmin’s new entry-level watch for runners — 5 things to know about the Garmin Forerunner 70</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-just-ran-my-first-5k-heres-how-i-conquered-the-pre-race-jitters">I just ran my first 5K — 5 practical ways I conquered my pre-race nerves for a strong finish</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tested-the-usd79-amazfit-bip-6-vs-the-usd249-apple-watch-se-3-and-the-cheaper-smartwatch-is-a-lot-better-than-i-thought">I tested the $79 Amazfit Bip 6 vs the $249 Apple Watch SE 3 — and the cheaper smartwatch is a lot better than I thought</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The Fitbit Air is basically just a screen-less Fitbit Inspire 3 — and that’s a very good thing ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I review wearable tech for a living, and while some folks, myself included, predicted the <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">death of the Fitbit brand</a> at the hands of Google in 2026, much to my delight, the tech giant just came through with the shiny new <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Fitbit Air</a>.</p><p>Priced at $99, this diminutive fitness tracker focuses on the basics, like monitoring your daily movement, workouts, sleep quality and women’s health. There’s no GPS, so you’ll need to carry your phone for location data, no NFC for mobile payments and no onboard storage for music.</p><p>But, wait a minute, that sounds a whole lot like 2022’s entry-level <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>, which also costs $99 (but can easily be found for less, like this <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7?th=1" target="_blank" rel="nofollow">Inspire 3 Amazon deal for $84</a>). So, is the Fitbit Air essentially just a Fitbit Inspire 3 without a screen? </p><p>I’d argue that it is, but that’s actually a very good thing. Here’s why.</p><h3 class="article-body__section" id="section-did-we-really-wait-four-years-for-a-screen-less-fitbit-inspire-3-yes-and-no"><span>Did we really wait four years for a screen-less Fitbit Inspire 3? Yes and no.</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5150px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="ACasPG6gGJGN83nJ2M5yiD" name="FitbitAir-Inspire-03" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/ACasPG6gGJGN83nJ2M5yiD.jpg" mos="" align="middle" fullscreen="" width="5150" height="2896" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Inspire 3 was my very first fitness tracker, which I purchased shortly after its 2022 debut. Well-priced and offering more than enough features for my fitness and health-tracking needs at the time, it was the little tracker I ultimately grew attached to and wore daily for years.</p><p>However, the Inspire 3, which is still technically a current fitness tracker in Google’s lineup, wasn’t without its faults. For one, the screen is tiny, and the controls are rather fiddly. This makes it a poor choice for folks with larger hands or those who struggle to read teeny-tiny text. </p><h3 class="article-body__section" id="section-the-fitbit-air-is-the-natural-successor-to-the-inspire-3-but-it-s-better-in-lots-of-ways"><span>The Fitbit Air is the natural successor to the Inspire 3, but it’s better in lots of ways</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3885px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="i6GmVBt2WizcxJ5yP57q7D" name="FitbitAir-Inspire-02" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/i6GmVBt2WizcxJ5yP57q7D.jpg" mos="" align="middle" fullscreen="" width="3885" height="2185" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>Thanks to the lack of a screen and buttons, the Fitbit Air lets you tune out the digital noise, all while still tracking essential wellness and fitness metrics.</p></blockquote></div><p>Ultimately, the Fitbit Air is the natural evolution of the entry-level Inspire line. Sure, Google could’ve slimmed down the Inspire 3 case, slightly expanded the screen size, and even given the Inspire 4 physical controls, but I’m glad that didn't happen, especially since the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" target="_blank">Fitbit Charge 6</a> still exists. </p><p>Instead, Google took the screen-free, distraction-free approach, mimicking the experience you might get with a <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0 </a>and <a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review">Oura Ring 4</a>, but without the recurring subscription costs. </p><p>I applaud this because with each passing year, it feels harder and harder to escape the siren sounds of our hyper-connected world. Was that the case in 2022 when the Inspire 3 debuted? Sure, but in 2026, folks (including yours truly) seem more eager than ever to disconnect from the endlessness of information inundation. </p><p>And thanks to the lack of a screen or buttons, the Fitbit Air encourages just that, letting you tune out the digital noise, all while still tracking essential wellness and fitness metrics. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4V36jPbP2C9WJfa94qMJdW" name="FitbitAir-Inspire-05" alt="Close-up of the Fitbit Inspire 3 and Fitbit Air in a user's hand" src="https://cdn.mos.cms.futurecdn.net/4V36jPbP2C9WJfa94qMJdW.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>It's worth noting that the Fitbit Air and the Fitbit Inspire 3 boast similar health tech, consisting of an optical heart rate sensor, accelerometer, gyroscope, blood oxygen sensor and skin temperature sensor. Smart features are also all but non-existent on either, though the Inspire 3 does mirror smartphone notifications. </p><p>Those similarities aside, the Fitbit Air has the advantage of being more comfortable on the wrist thanks to a smaller and lighter footprint. It’s also built around customization; the tracker pops out of the straps with a firm push, letting you change up the vibe and re-accesorize at a moment’s notice. A huge number of strap options are already available, starting at <a href="https://www.amazon.com/Google-Fitbit-Active-Band-Workout-Friendly/dp/B0GHP6944W?th=1" target="_blank" rel="nofollow">$34.99 via Amazon</a>. </p><p>Of course, comfort and customization aren't nearly as big selling points as the Fitbit Air’s distraction and control-free disposition. Stay tuned for my full Fitbit Air review, coming soon! </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-screen-less-whoop-competitor-could-cost-five-times-as-much-as-the-fitbit-air">Garmin’s screen-less Whoop competitor could cost five times as much as the Fitbit Air</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-vs-garmin-forerunner-170-the-main-differences-between-garmins-two-new-running-watches">Garmin Forerunner 70 vs Garmin Forerunner 170 — what are the main differences between Garmin’s two new running watches</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tested-the-usd79-amazfit-bip-6-vs-the-usd249-apple-watch-se-3-and-the-cheaper-smartwatch-is-a-lot-better-than-i-thought">I tested the $79 Amazfit Bip 6 vs the $249 Apple Watch SE 3 — and the cheaper smartwatch is a lot better than I thought</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-air-is-basically-just-a-screen-less-fitbit-inspire-3-and-thats-a-very-good-thing</link>
                                                                            <description>
                            <![CDATA[ The new Fitbit Air is the natural successor to the Inspire line. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">fvLbZtBNhF8UQ63CMW5uej</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VkLkWNHBhnVYjFjPbnwNVD-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 21 May 2026 01:30:55 +0000</pubDate>                                                                                                                                <updated>Thu, 21 May 2026 07:47:17 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/VkLkWNHBhnVYjFjPbnwNVD-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Air next to the Fitbit Inspire 3]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Air next to the Fitbit Inspire 3]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Air next to the Fitbit Inspire 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VkLkWNHBhnVYjFjPbnwNVD-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I review wearable tech for a living, and while some folks, myself included, predicted the <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">death of the Fitbit brand</a> at the hands of Google in 2026, much to my delight, the tech giant just came through with the shiny new <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Fitbit Air</a>.</p><p>Priced at $99, this diminutive fitness tracker focuses on the basics, like monitoring your daily movement, workouts, sleep quality and women’s health. There’s no GPS, so you’ll need to carry your phone for location data, no NFC for mobile payments and no onboard storage for music.</p><p>But, wait a minute, that sounds a whole lot like 2022’s entry-level <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>, which also costs $99 (but can easily be found for less, like this <a href="https://www.amazon.com/Fitbit-Management-Intensity-Tracking-Midnight/dp/B0B5F9SZW7?th=1" target="_blank" rel="nofollow">Inspire 3 Amazon deal for $84</a>). So, is the Fitbit Air essentially just a Fitbit Inspire 3 without a screen? </p><p>I’d argue that it is, but that’s actually a very good thing. Here’s why.</p><h3 class="article-body__section" id="section-did-we-really-wait-four-years-for-a-screen-less-fitbit-inspire-3-yes-and-no"><span>Did we really wait four years for a screen-less Fitbit Inspire 3? Yes and no.</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5150px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="ACasPG6gGJGN83nJ2M5yiD" name="FitbitAir-Inspire-03" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/ACasPG6gGJGN83nJ2M5yiD.jpg" mos="" align="middle" fullscreen="" width="5150" height="2896" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Inspire 3 was my very first fitness tracker, which I purchased shortly after its 2022 debut. Well-priced and offering more than enough features for my fitness and health-tracking needs at the time, it was the little tracker I ultimately grew attached to and wore daily for years.</p><p>However, the Inspire 3, which is still technically a current fitness tracker in Google’s lineup, wasn’t without its faults. For one, the screen is tiny, and the controls are rather fiddly. This makes it a poor choice for folks with larger hands or those who struggle to read teeny-tiny text. </p><h3 class="article-body__section" id="section-the-fitbit-air-is-the-natural-successor-to-the-inspire-3-but-it-s-better-in-lots-of-ways"><span>The Fitbit Air is the natural successor to the Inspire 3, but it’s better in lots of ways</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3885px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="i6GmVBt2WizcxJ5yP57q7D" name="FitbitAir-Inspire-02" alt="Close-up of the Fitbit Air next to the Fitbit Inspire 3" src="https://cdn.mos.cms.futurecdn.net/i6GmVBt2WizcxJ5yP57q7D.jpg" mos="" align="middle" fullscreen="" width="3885" height="2185" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>Thanks to the lack of a screen and buttons, the Fitbit Air lets you tune out the digital noise, all while still tracking essential wellness and fitness metrics.</p></blockquote></div><p>Ultimately, the Fitbit Air is the natural evolution of the entry-level Inspire line. Sure, Google could’ve slimmed down the Inspire 3 case, slightly expanded the screen size, and even given the Inspire 4 physical controls, but I’m glad that didn't happen, especially since the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" target="_blank">Fitbit Charge 6</a> still exists. </p><p>Instead, Google took the screen-free, distraction-free approach, mimicking the experience you might get with a <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0 </a>and <a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review">Oura Ring 4</a>, but without the recurring subscription costs. </p><p>I applaud this because with each passing year, it feels harder and harder to escape the siren sounds of our hyper-connected world. Was that the case in 2022 when the Inspire 3 debuted? Sure, but in 2026, folks (including yours truly) seem more eager than ever to disconnect from the endlessness of information inundation. </p><p>And thanks to the lack of a screen or buttons, the Fitbit Air encourages just that, letting you tune out the digital noise, all while still tracking essential wellness and fitness metrics. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4V36jPbP2C9WJfa94qMJdW" name="FitbitAir-Inspire-05" alt="Close-up of the Fitbit Inspire 3 and Fitbit Air in a user's hand" src="https://cdn.mos.cms.futurecdn.net/4V36jPbP2C9WJfa94qMJdW.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>It's worth noting that the Fitbit Air and the Fitbit Inspire 3 boast similar health tech, consisting of an optical heart rate sensor, accelerometer, gyroscope, blood oxygen sensor and skin temperature sensor. Smart features are also all but non-existent on either, though the Inspire 3 does mirror smartphone notifications. </p><p>Those similarities aside, the Fitbit Air has the advantage of being more comfortable on the wrist thanks to a smaller and lighter footprint. It’s also built around customization; the tracker pops out of the straps with a firm push, letting you change up the vibe and re-accesorize at a moment’s notice. A huge number of strap options are already available, starting at <a href="https://www.amazon.com/Google-Fitbit-Active-Band-Workout-Friendly/dp/B0GHP6944W?th=1" target="_blank" rel="nofollow">$34.99 via Amazon</a>. </p><p>Of course, comfort and customization aren't nearly as big selling points as the Fitbit Air’s distraction and control-free disposition. Stay tuned for my full Fitbit Air review, coming soon! </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-screen-less-whoop-competitor-could-cost-five-times-as-much-as-the-fitbit-air">Garmin’s screen-less Whoop competitor could cost five times as much as the Fitbit Air</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-vs-garmin-forerunner-170-the-main-differences-between-garmins-two-new-running-watches">Garmin Forerunner 70 vs Garmin Forerunner 170 — what are the main differences between Garmin’s two new running watches</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tested-the-usd79-amazfit-bip-6-vs-the-usd249-apple-watch-se-3-and-the-cheaper-smartwatch-is-a-lot-better-than-i-thought">I tested the $79 Amazfit Bip 6 vs the $249 Apple Watch SE 3 — and the cheaper smartwatch is a lot better than I thought</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Garmin's screenless fitness tracker just leaked and, if this price is accurate, the Fitbit Air won't be worried ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Take a look at our <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin watches</a> guide and you'll probably find exactly the kind of sports watch or fitness tracker you're looking for. Unless, of course, you want one without a screen.</p><p>Screenless fitness trackers like the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> and <a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review">Oura Ring 4</a> seem to quietly be on the rise — Fitbit has just <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">unveiled the Fitbit Air</a>, and now it seems Garmin <a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-rumored-screen-less-wearable-just-might-be-the-subscription-free-whoop-rival-ive-been-waiting-for">isn't far behind</a>. </p><p>A Ukrainian retailer appears to have accidentally leaked the upcoming "Garmin Cirqa" screenless tracker. Spotted by <a href="https://www.notebookcheck.net/Garmin-CIRQA-leaks-at-onlineshop-with-surprisingly-high-price.1296728.0.html" target="_blank">Notebookcheck</a>, this leak suggests the black tracker will be a low-key screenless fabric band available in two sizes: S/M and L/XL.</p><p>As expected, the Garmin Cirqa will monitor heart rate and passively document metrics like steps and calories, as well as sleep quality. So far, so good. But let's talk about that price.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xmo3PW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xmo3PW.js" async></script><h2 id="a-high-price-for-minimalism">A high price for minimalism</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="M8T6RzKkhosv69xgzAGj4L" name="Garmin Cirqa leak" alt="A leaked retail page showing an unannounced Garmin fitness tracker" src="https://cdn.mos.cms.futurecdn.net/M8T6RzKkhosv69xgzAGj4L.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Stylus Store)</span></figcaption></figure><p>According to the listing (which, at time of writing, is <a href="https://stls.store/garmin-cirqa-black-010-04675-00-p1457732c1514.html#about" target="_blank">still live</a>), the most eye-catching thing about this minimalist piece of fitness tech is the price. It states the Garmin Cirqa will be available for 22,399 Ukrainian hryvnia, which roughly translates to $507 / £379. That's already more expensive than either the Oura Ring 4 ($349) or the Fitbit Air ($99). And if you throw in a $6.99 per month <a href="https://www.tomsguide.com/wellness/smartwatches/i-tried-garmin-connect-for-a-week-heres-3-things-i-like-and-3-i-dislike">Garmin Connect+ membership</a>, it gets even more pricey.</p><p>Whoop, which arguably started the screenless trend, doesn't charge up front for the band, but users still need to pay between $199 and $359 a year for an active subscription. So if this listing does prove to be true — and the pricing is carried across — Garmin is planning to release the most expensive screenless tracker on the market.</p><p>The natural caveats are all in place: this is an unconfirmed leak, and pricing could easily change in different regions. But at a time when many of us are trying to save as much as possible when it comes to our tech, it would be a bold move for Garmin to launch with a price so much higher than market rivals.</p><div class="product"><a data-dimension112="2d59bf97-e51f-40e2-8086-4eb94af7081a" data-action="Deal Block" data-label="Forerunner 265" data-dimension48="Forerunner 265" data-dimension25="$349" href="https://www.amazon.com/dp/B0BS1T7G8S" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2295px;"><p class="vanilla-image-block" style="padding-top:100.04%;"><img id="xG42cp4qBMeThn5yCckwWQ" name="garmin forerunner 265.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xG42cp4qBMeThn5yCckwWQ.jpeg" mos="" align="middle" fullscreen="" width="2295" height="2296" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The latest Forerunner is our new top pick for the best Garmin watch. In our <a href="https://www.tomsguide.com/reviews/garmin-forerunner-265" data-dimension112="2d59bf97-e51f-40e2-8086-4eb94af7081a" data-action="Deal Block" data-label="Forerunner 265" data-dimension48="Forerunner 265" data-dimension25="$349">Garmin Forerunner 265 review</a>, we called it "a huge improvement" over the previous model. This iteration of the watch brings a gorgeous AMOLED display with a higher resolution, plus Garmin's Training Readiness Score feature. You also get accurate GPS and lots of advanced training metrics at a glance.<a class="view-deal button" href="https://www.amazon.com/dp/B0BS1T7G8S" target="_blank" rel="nofollow" data-dimension112="2d59bf97-e51f-40e2-8086-4eb94af7081a" data-action="Deal Block" data-label="Forerunner 265" data-dimension48="Forerunner 265" data-dimension25="$349">View Deal</a></p></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness/upgrade-your-run-with-these-12-best-running-apparel-picks-on-amazon-under-usd100">Upgrade your run with these 12 best running apparel picks on Amazon under $100</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-vs-garmin-forerunner-170-the-main-differences-between-garmins-two-new-running-watches">Garmin Forerunner 70 vs Garmin Forerunner 170 — what are the main differences between Garmin’s two new running watches</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Forget the Whoop 5.0 — The new Fitbit Air is a screen-less, subscription-free fitness tracker for the masses</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/garmins-screenless-fitness-tracker-just-leaked-and-if-this-price-is-accurate-the-fitbit-air-wont-be-worried</link>
                                                                            <description>
                            <![CDATA[ Garmin is planning to rival the Whoop band and Fitbit Air with a screenless fitness tracker, but the price could be a sticking point. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">qrDYThezS72yeV2PddvWye</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JpSXwAkfnPAtMwt3ZYMFrR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 15 May 2026 10:06:29 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ jeff.parsons@futurenet.com (Jeff Parsons) ]]></author>                    <dc:creator><![CDATA[ Jeff Parsons ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7z3UTGGrmSokMKxTWHmhjX.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is U.K. Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. &lt;/p&gt;&lt;p&gt;Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialling into the zeitgeist of the day’s tech news. A journalist for over a decade, he&#039;s travelled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the U.K.’s biggest national news sites: Metro.co.uk and the Daily Mirror. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;&lt;p&gt;When not plugged into the current news agenda, editing or commissioning a series of articles or debating the merits of Apple vs Android, Jeff can usually be found out for a run trying to shave precious seconds off his PB. Or lifting weights in a vain attempt to offset the ageing process.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/JpSXwAkfnPAtMwt3ZYMFrR-1280-80.jpg">
                                                            <media:credit><![CDATA[Google]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Air fitness tracker]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Air fitness tracker]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Air fitness tracker]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JpSXwAkfnPAtMwt3ZYMFrR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Take a look at our <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin watches</a> guide and you'll probably find exactly the kind of sports watch or fitness tracker you're looking for. Unless, of course, you want one without a screen.</p><p>Screenless fitness trackers like the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> and <a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review">Oura Ring 4</a> seem to quietly be on the rise — Fitbit has just <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">unveiled the Fitbit Air</a>, and now it seems Garmin <a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-rumored-screen-less-wearable-just-might-be-the-subscription-free-whoop-rival-ive-been-waiting-for">isn't far behind</a>. </p><p>A Ukrainian retailer appears to have accidentally leaked the upcoming "Garmin Cirqa" screenless tracker. Spotted by <a href="https://www.notebookcheck.net/Garmin-CIRQA-leaks-at-onlineshop-with-surprisingly-high-price.1296728.0.html" target="_blank">Notebookcheck</a>, this leak suggests the black tracker will be a low-key screenless fabric band available in two sizes: S/M and L/XL.</p><p>As expected, the Garmin Cirqa will monitor heart rate and passively document metrics like steps and calories, as well as sleep quality. So far, so good. But let's talk about that price.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xmo3PW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xmo3PW.js" async></script><h2 id="a-high-price-for-minimalism">A high price for minimalism</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="M8T6RzKkhosv69xgzAGj4L" name="Garmin Cirqa leak" alt="A leaked retail page showing an unannounced Garmin fitness tracker" src="https://cdn.mos.cms.futurecdn.net/M8T6RzKkhosv69xgzAGj4L.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Stylus Store)</span></figcaption></figure><p>According to the listing (which, at time of writing, is <a href="https://stls.store/garmin-cirqa-black-010-04675-00-p1457732c1514.html#about" target="_blank">still live</a>), the most eye-catching thing about this minimalist piece of fitness tech is the price. It states the Garmin Cirqa will be available for 22,399 Ukrainian hryvnia, which roughly translates to $507 / £379. That's already more expensive than either the Oura Ring 4 ($349) or the Fitbit Air ($99). And if you throw in a $6.99 per month <a href="https://www.tomsguide.com/wellness/smartwatches/i-tried-garmin-connect-for-a-week-heres-3-things-i-like-and-3-i-dislike">Garmin Connect+ membership</a>, it gets even more pricey.</p><p>Whoop, which arguably started the screenless trend, doesn't charge up front for the band, but users still need to pay between $199 and $359 a year for an active subscription. So if this listing does prove to be true — and the pricing is carried across — Garmin is planning to release the most expensive screenless tracker on the market.</p><p>The natural caveats are all in place: this is an unconfirmed leak, and pricing could easily change in different regions. But at a time when many of us are trying to save as much as possible when it comes to our tech, it would be a bold move for Garmin to launch with a price so much higher than market rivals.</p><div class="product"><a data-dimension112="2d59bf97-e51f-40e2-8086-4eb94af7081a" data-action="Deal Block" data-label="Forerunner 265" data-dimension48="Forerunner 265" data-dimension25="$349" href="https://www.amazon.com/dp/B0BS1T7G8S" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2295px;"><p class="vanilla-image-block" style="padding-top:100.04%;"><img id="xG42cp4qBMeThn5yCckwWQ" name="garmin forerunner 265.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xG42cp4qBMeThn5yCckwWQ.jpeg" mos="" align="middle" fullscreen="" width="2295" height="2296" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The latest Forerunner is our new top pick for the best Garmin watch. In our <a href="https://www.tomsguide.com/reviews/garmin-forerunner-265" data-dimension112="2d59bf97-e51f-40e2-8086-4eb94af7081a" data-action="Deal Block" data-label="Forerunner 265" data-dimension48="Forerunner 265" data-dimension25="$349">Garmin Forerunner 265 review</a>, we called it "a huge improvement" over the previous model. This iteration of the watch brings a gorgeous AMOLED display with a higher resolution, plus Garmin's Training Readiness Score feature. You also get accurate GPS and lots of advanced training metrics at a glance.<a class="view-deal button" href="https://www.amazon.com/dp/B0BS1T7G8S" target="_blank" rel="nofollow" data-dimension112="2d59bf97-e51f-40e2-8086-4eb94af7081a" data-action="Deal Block" data-label="Forerunner 265" data-dimension48="Forerunner 265" data-dimension25="$349">View Deal</a></p></div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness/upgrade-your-run-with-these-12-best-running-apparel-picks-on-amazon-under-usd100">Upgrade your run with these 12 best running apparel picks on Amazon under $100</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-70-vs-garmin-forerunner-170-the-main-differences-between-garmins-two-new-running-watches">Garmin Forerunner 70 vs Garmin Forerunner 170 — what are the main differences between Garmin’s two new running watches</a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses">Forget the Whoop 5.0 — The new Fitbit Air is a screen-less, subscription-free fitness tracker for the masses</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget the Whoop 5.0 — The new Fitbit Air is a screen-less, subscription-free fitness tracker for the masses ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It’s been nearly three years since we got a new Fitbit model (excluding the kid-centric Fitbit Ace LTE). That all changes today with the introduction of the Fitbit Air, a $99 screenless and subscription-free tracker with a simple-to-use disposition, a week of battery, and basic sleep, workout, and holistic insights.</p><p>While the popular, screen-less <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0 </a>tracker is targeted toward hardcore athletes, the Fitbit Air is designed to appeal to just about anyone. </p><p>Here’s everything you need to know about the new Fitbit Air, including availability, onboard tech, features, and outlook.</p><h3 class="article-body__section" id="section-fitbit-air-price-and-availability"><span>Fitbit Air: price and availability </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4052px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="gGNW5NbMse5JZrejm5gAGQ" name="Fitbit-Air-02" alt="Close-up of the Fitbit Air fitness tracker" src="https://cdn.mos.cms.futurecdn.net/gGNW5NbMse5JZrejm5gAGQ.jpg" mos="" align="middle" fullscreen="" width="4052" height="2279" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Fitbit Air is available for preorder starting today for $99, with units expected to ship by the end of May. That price includes the tracker itself and one swappable band. Additional bands — they come in a huge range of styles — start at $34.99.</p><p>Google is also offering a special edition Stephen Curry strap for the Fitbit Air that’s designed for “increased airflow,” and looks pretty darn snazzy.</p><p>The $99 Fitbit Air additionally includes a 3-month trial to Google Health Premium (previously called Fitbit Premium). </p><p>It’s also worth noting that the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a> and <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> will remain in the Fitbit catalog for now.</p><h3 class="article-body__section" id="section-fitbit-air-design"><span>Fitbit Air: Design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2kWy3efzpjJSVZR9UpMGJQ" name="Fitbit-Air-04" alt="Close-up of the Fitbit Air fitness tracker" src="https://cdn.mos.cms.futurecdn.net/2kWy3efzpjJSVZR9UpMGJQ.jpg" mos="" align="middle" fullscreen="" width="4000" height="2250" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Fitbit Air has no screens or buttons, but an onboard motor provides haptic feedback for alerts; it can also be used to gently and silently wake you up via Fitbit’s Smart Wake feature. The polycarbonate housing sports only a status lamp, which illuminates when the device is charging.</p><p>With dimensions of 1.4 x 0.7 x 0.3 inches and a weight of just 12 g (sans strap), the Fitbit Air truly lives up to its name. Google says it’s the brand's smallest tracker ever, with a footprint that's 25% smaller than the <a href="https://www.tomsguide.com/reviews/fitbit-luxe">Fitbit Luxe</a>. Despite the plastic housing, water resistance is a respectable 50 meters. </p><p>Designed so that you can easily swap one band for another, the selection of strap options at launch is seriously vast, with a wide range of both silicone and textile options to choose from.  </p><h3 class="article-body__section" id="section-fitbit-air-health-and-fitness-features"><span>Fitbit Air: Health and fitness features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:9788px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="NuN56ab3xSSYyeLJXhGE4R" name="Fitbit-Air-08" alt="Close-up of the Fitbit Air fitness tracker" src="https://cdn.mos.cms.futurecdn.net/NuN56ab3xSSYyeLJXhGE4R.jpg" mos="" align="middle" fullscreen="" width="9788" height="5505" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The diminutive Fitbit Air sports an optical heart rate sensor, accelerometer, gyroscope, SpO2 sensor, and skin temperature sensor. It’s worth noting, however, that the latter is less sophisticated than the skin temperature sensor found in the latest <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a>.</p><p>The Air can detect several potentially deadly conditions, including atrial fibrillation (AFib). It also monitors heart rate variability and can autodetect a small selection of common workout types, like walking, running, cycling, and swimming. </p><p>In addition to the auto-tracked workouts, the Fitbit Air supports a wide range of other exercises. You’ll just need to manually select those prior to your workout using the companion app. </p><p>There’s no onboard GPS in the Fitbit Air, so you’ll need to bring along a paired smartphone for location and elevation data when working out outdoors. </p><p>When it comes to sleep tracking, the Fitbit Air provides all the insights you’d expect, like how much time you spent in each sleep stage, your total sleep time, any signs of restlessness, and a numerical sleep score out of 100. It can also autodetect naps as brief as 20 minutes. </p><h3 class="article-body__section" id="section-fitbit-air-battery-life"><span> Fitbit Air: Battery life</span></h3><p>Google says that the Fitbit Air battery should last for up to seven days per charge, which is impressive. Charging the device from 0% to 100% takes just 90 minutes, and users can get a full day of juice from just a five-minute charge.</p><p>Similar to other Fitbit models, a magnetic charger with metal contacts attaches to the underside of the device. </p><h3 class="article-body__section" id="section-fitbit-air-outlook"><span>Fitbit Air: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6996px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="S7rj9Ysn9dyL4QqAhNFCrQ" name="Fitbit-Air-06" alt="Close-up of the Fitbit Air fitness tracker" src="https://cdn.mos.cms.futurecdn.net/S7rj9Ysn9dyL4QqAhNFCrQ.jpg" mos="" align="middle" fullscreen="" width="6996" height="3936" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>I predict the Fitbit Air appealing to lots of folks, given its $99 price tag and the fact that the core features are completely subscription-free. While it lacks some of the higher-end sensor tech found in the Whoop 5.0, namely onboard GPS and an altimeter, I don’t think that will be a dealbreaker for most users.</p><p>I also love the fact that Google is prioritizing the ability to quickly and painlessly swap out one strap for another to match your mood or outfit. While $34.99 is a tad pricey for a watch strap, I’m confident that cheaper third-party options will become available sooner or later. </p><p>Google is also making it easy for Pixel Watch owners to seamlessly swap back and forth between their smartwatch and a Fitbit Air for tracking purposes. So, if you’re like me and hate wearing a smartwatch to bed, the Fitbit Air could be an excellent nighttime tracking alternative to the chunkier Pixel Watch 4. </p><h3 class="article-body__section" id="section-one-more-thing-the-fitbit-app-is-now-the-google-health-app"><span>One more thing: The Fitbit app is now the Google Health app</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="b2jL3L8cLS9nGEdWdtbJ9D" name="Google_health" alt="Google Health app" src="https://cdn.mos.cms.futurecdn.net/b2jL3L8cLS9nGEdWdtbJ9D.jpg" mos="" align="middle" fullscreen="" width="1600" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>One more thing! In addition to debuting the Fitbit Air, Google is now officially changing the name of the Fitbit app to the Google Health app. Similarly, Fitbit Premium is now Google Health Premium, which still costs $9.99 a month or $99 for the year. </p><p>This change will begin rolling out on May 19th via an app update. Current Fitbit app users won’t need to download a new app; rather, the update will automatically change the name of the app, import all of your data, and present everything in a new, slicker format.</p><p>Available for both Android and iOS, the new app is built around four core tabs: Today, Fitness, Sleep, and Health, with a major emphasis on user customization. It also plays nicely with tons of other popular fitness apps, including Nike Run Club, <a href="https://www.tomsguide.com/wellness/fitness/i-tried-alltrails-new-custom-routes-tool-and-its-a-game-changer-for-hikers-bikers-and-runners">AllTrails</a>, MyFitnessPal, and the <a href="https://www.tomsguide.com/wellness/smart-rings/i-just-discovered-these-5-hidden-features-on-the-oura-ring-and-you-need-to-know-about-them">Oura app</a>. </p><p>A new feature lets users securely upload medical records to the app for an even more complete view of health. For peace of mind, all health data is encrypted end-to-end. </p><p>Additionally, a new “Leaderboard” feature in the app lets you compete with friends and family in fitness challenges, like who can get the most steps in a given timeframe. </p><p>Finally, Google is bringing its AI-powered, personalized fitness training tool, the "Coach," out of beta and making it available to all premium users.  The Coach can help you set fitness goals, generate workout plans, improve sleep quality, and even custom-tailor daily workouts based on the weather. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/fitbit-is-exiting-the-cheap-smartwatch-race-and-this-brand-could-replace-it">Fitbit is exiting the cheap smartwatch race — and this brand could replace it</a></li><li><a href="https://www.tomsguide.com/wellness/smart-rings/the-oura-ring-5-is-coming-and-these-are-the-5-biggest-upgrades-im-hoping-to-see">The Oura Ring 5 is coming — and these are the 5 biggest upgrades I’m hoping to see</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/take-off-that-apple-watch-5-reasons-why-its-okay-to-swap-your-smartwatch-for-a-dumb-watch">5 reasons why I sometimes still wear a 'dumb' watch</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-the-new-fitbit-air-is-a-screen-less-subscription-free-fitness-tracker-for-the-masses</link>
                                                                            <description>
                            <![CDATA[ The Fitbit Air is the brand’s first new fitness tracker in nearly three years. Not only is it tiny, affordable, and subscription-free, but it also boasts a week of battery and loads of holistic insights. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4wdjEsa3Zmj2p7mM7qutgA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JpSXwAkfnPAtMwt3ZYMFrR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 07 May 2026 14:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/JpSXwAkfnPAtMwt3ZYMFrR-1280-80.jpg">
                                                            <media:credit><![CDATA[Google]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Air fitness tracker]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Air fitness tracker]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Air fitness tracker]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JpSXwAkfnPAtMwt3ZYMFrR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It’s been nearly three years since we got a new Fitbit model (excluding the kid-centric Fitbit Ace LTE). That all changes today with the introduction of the Fitbit Air, a $99 screenless and subscription-free tracker with a simple-to-use disposition, a week of battery, and basic sleep, workout, and holistic insights.</p><p>While the popular, screen-less <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0 </a>tracker is targeted toward hardcore athletes, the Fitbit Air is designed to appeal to just about anyone. </p><p>Here’s everything you need to know about the new Fitbit Air, including availability, onboard tech, features, and outlook.</p><h3 class="article-body__section" id="section-fitbit-air-price-and-availability"><span>Fitbit Air: price and availability </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4052px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="gGNW5NbMse5JZrejm5gAGQ" name="Fitbit-Air-02" alt="Close-up of the Fitbit Air fitness tracker" src="https://cdn.mos.cms.futurecdn.net/gGNW5NbMse5JZrejm5gAGQ.jpg" mos="" align="middle" fullscreen="" width="4052" height="2279" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Fitbit Air is available for preorder starting today for $99, with units expected to ship by the end of May. That price includes the tracker itself and one swappable band. Additional bands — they come in a huge range of styles — start at $34.99.</p><p>Google is also offering a special edition Stephen Curry strap for the Fitbit Air that’s designed for “increased airflow,” and looks pretty darn snazzy.</p><p>The $99 Fitbit Air additionally includes a 3-month trial to Google Health Premium (previously called Fitbit Premium). </p><p>It’s also worth noting that the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a> and <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> will remain in the Fitbit catalog for now.</p><h3 class="article-body__section" id="section-fitbit-air-design"><span>Fitbit Air: Design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2kWy3efzpjJSVZR9UpMGJQ" name="Fitbit-Air-04" alt="Close-up of the Fitbit Air fitness tracker" src="https://cdn.mos.cms.futurecdn.net/2kWy3efzpjJSVZR9UpMGJQ.jpg" mos="" align="middle" fullscreen="" width="4000" height="2250" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The Fitbit Air has no screens or buttons, but an onboard motor provides haptic feedback for alerts; it can also be used to gently and silently wake you up via Fitbit’s Smart Wake feature. The polycarbonate housing sports only a status lamp, which illuminates when the device is charging.</p><p>With dimensions of 1.4 x 0.7 x 0.3 inches and a weight of just 12 g (sans strap), the Fitbit Air truly lives up to its name. Google says it’s the brand's smallest tracker ever, with a footprint that's 25% smaller than the <a href="https://www.tomsguide.com/reviews/fitbit-luxe">Fitbit Luxe</a>. Despite the plastic housing, water resistance is a respectable 50 meters. </p><p>Designed so that you can easily swap one band for another, the selection of strap options at launch is seriously vast, with a wide range of both silicone and textile options to choose from.  </p><h3 class="article-body__section" id="section-fitbit-air-health-and-fitness-features"><span>Fitbit Air: Health and fitness features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:9788px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="NuN56ab3xSSYyeLJXhGE4R" name="Fitbit-Air-08" alt="Close-up of the Fitbit Air fitness tracker" src="https://cdn.mos.cms.futurecdn.net/NuN56ab3xSSYyeLJXhGE4R.jpg" mos="" align="middle" fullscreen="" width="9788" height="5505" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>The diminutive Fitbit Air sports an optical heart rate sensor, accelerometer, gyroscope, SpO2 sensor, and skin temperature sensor. It’s worth noting, however, that the latter is less sophisticated than the skin temperature sensor found in the latest <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a>.</p><p>The Air can detect several potentially deadly conditions, including atrial fibrillation (AFib). It also monitors heart rate variability and can autodetect a small selection of common workout types, like walking, running, cycling, and swimming. </p><p>In addition to the auto-tracked workouts, the Fitbit Air supports a wide range of other exercises. You’ll just need to manually select those prior to your workout using the companion app. </p><p>There’s no onboard GPS in the Fitbit Air, so you’ll need to bring along a paired smartphone for location and elevation data when working out outdoors. </p><p>When it comes to sleep tracking, the Fitbit Air provides all the insights you’d expect, like how much time you spent in each sleep stage, your total sleep time, any signs of restlessness, and a numerical sleep score out of 100. It can also autodetect naps as brief as 20 minutes. </p><h3 class="article-body__section" id="section-fitbit-air-battery-life"><span> Fitbit Air: Battery life</span></h3><p>Google says that the Fitbit Air battery should last for up to seven days per charge, which is impressive. Charging the device from 0% to 100% takes just 90 minutes, and users can get a full day of juice from just a five-minute charge.</p><p>Similar to other Fitbit models, a magnetic charger with metal contacts attaches to the underside of the device. </p><h3 class="article-body__section" id="section-fitbit-air-outlook"><span>Fitbit Air: Outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6996px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="S7rj9Ysn9dyL4QqAhNFCrQ" name="Fitbit-Air-06" alt="Close-up of the Fitbit Air fitness tracker" src="https://cdn.mos.cms.futurecdn.net/S7rj9Ysn9dyL4QqAhNFCrQ.jpg" mos="" align="middle" fullscreen="" width="6996" height="3936" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>I predict the Fitbit Air appealing to lots of folks, given its $99 price tag and the fact that the core features are completely subscription-free. While it lacks some of the higher-end sensor tech found in the Whoop 5.0, namely onboard GPS and an altimeter, I don’t think that will be a dealbreaker for most users.</p><p>I also love the fact that Google is prioritizing the ability to quickly and painlessly swap out one strap for another to match your mood or outfit. While $34.99 is a tad pricey for a watch strap, I’m confident that cheaper third-party options will become available sooner or later. </p><p>Google is also making it easy for Pixel Watch owners to seamlessly swap back and forth between their smartwatch and a Fitbit Air for tracking purposes. So, if you’re like me and hate wearing a smartwatch to bed, the Fitbit Air could be an excellent nighttime tracking alternative to the chunkier Pixel Watch 4. </p><h3 class="article-body__section" id="section-one-more-thing-the-fitbit-app-is-now-the-google-health-app"><span>One more thing: The Fitbit app is now the Google Health app</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="b2jL3L8cLS9nGEdWdtbJ9D" name="Google_health" alt="Google Health app" src="https://cdn.mos.cms.futurecdn.net/b2jL3L8cLS9nGEdWdtbJ9D.jpg" mos="" align="middle" fullscreen="" width="1600" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>One more thing! In addition to debuting the Fitbit Air, Google is now officially changing the name of the Fitbit app to the Google Health app. Similarly, Fitbit Premium is now Google Health Premium, which still costs $9.99 a month or $99 for the year. </p><p>This change will begin rolling out on May 19th via an app update. Current Fitbit app users won’t need to download a new app; rather, the update will automatically change the name of the app, import all of your data, and present everything in a new, slicker format.</p><p>Available for both Android and iOS, the new app is built around four core tabs: Today, Fitness, Sleep, and Health, with a major emphasis on user customization. It also plays nicely with tons of other popular fitness apps, including Nike Run Club, <a href="https://www.tomsguide.com/wellness/fitness/i-tried-alltrails-new-custom-routes-tool-and-its-a-game-changer-for-hikers-bikers-and-runners">AllTrails</a>, MyFitnessPal, and the <a href="https://www.tomsguide.com/wellness/smart-rings/i-just-discovered-these-5-hidden-features-on-the-oura-ring-and-you-need-to-know-about-them">Oura app</a>. </p><p>A new feature lets users securely upload medical records to the app for an even more complete view of health. For peace of mind, all health data is encrypted end-to-end. </p><p>Additionally, a new “Leaderboard” feature in the app lets you compete with friends and family in fitness challenges, like who can get the most steps in a given timeframe. </p><p>Finally, Google is bringing its AI-powered, personalized fitness training tool, the "Coach," out of beta and making it available to all premium users.  The Coach can help you set fitness goals, generate workout plans, improve sleep quality, and even custom-tailor daily workouts based on the weather. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/fitbit-is-exiting-the-cheap-smartwatch-race-and-this-brand-could-replace-it">Fitbit is exiting the cheap smartwatch race — and this brand could replace it</a></li><li><a href="https://www.tomsguide.com/wellness/smart-rings/the-oura-ring-5-is-coming-and-these-are-the-5-biggest-upgrades-im-hoping-to-see">The Oura Ring 5 is coming — and these are the 5 biggest upgrades I’m hoping to see</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/take-off-that-apple-watch-5-reasons-why-its-okay-to-swap-your-smartwatch-for-a-dumb-watch">5 reasons why I sometimes still wear a 'dumb' watch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Finally, a new Fitbit? Rumors of Google’s screenless ‘Fitbit Air’ hint at a spring launch ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Fitbit has been a <a href="https://www.tomsguide.com/news/google-acquires-fitbit-for-21-billion">Google brand</a> for roughly five years, and in that time, the big ‘G’ has shuttered the <a href="https://www.tomsguide.com/wellness/smartwatches/google-just-killed-off-fitbit-smartwatches-and-nobody-should-be-surprised">Fitbit smartwatch range</a>, killed some of the <a href="https://www.tomsguide.com/news/google-is-stripping-away-the-things-that-make-fitbit-fitbit-and-its-a-huge-mistake">best Fitbit community features</a>, and even <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">removed useful apps</a>, like Google Assistant, from still-support devices.</p><p>Outside of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-ace-lte">Fitbit Ace LTE</a> — a wearable designed with kids in mind —  there hasn’t been a new Fitbit since 2023’s <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>. That could all change in the next few months, as rumors of a new Fitbit model reach a fevered pitch. There is, however, a slight catch.</p><p>Here’s everything we know so far about the <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-gave-us-a-sneak-peek-of-its-screenless-fitbit-band-and-whoop-should-be-worried">rumored Fitbit Air</a>, including possible features and design, a potential launch date, price, and more. </p><h3 class="article-body__section" id="section-fitbit-air-biggest-rumors"><span>Fitbit Air — Biggest rumors </span></h3><ul><li><strong>First teased in early April 2026 by U.S. basketball star Steph Curry </strong></li><li><strong>Rumored to be a screen-less wearable similar to the Whoop 5.0</strong></li><li><strong>Images suggest a lightweight design, possibly available in a range of colors and strap types, including a woven material</strong></li><li><strong>Likely to offer basic workout, movement, and sleep tracking features </strong></li><li><strong>Battery life could exceed two weeks </strong></li><li><strong>Tipped for a mid-May 2026 debut</strong></li><li><strong>Possible $99 launch price; likely subscription-free for core features </strong></li></ul><h3 class="article-body__section" id="section-fitbit-air-possible-price-and-release-date"><span>Fitbit Air — Possible price and release date </span></h3><p>According to an insider report from <a href="https://9to5google.com/2026/04/20/fitbit-air-release-date-price-color-report/" target="_blank">9to5Google</a>, the Fitbit Air could debut as soon as May 16th with a launch price of $99. That's the same cost as the entry-level <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>.</p><p>More importantly, unlike the biggest player in the screenless, wrist-based tracker market, Whoop, Google will likely offer most of the Fitbit Air's core features without a subscription fee. </p><p>By comparison, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> is either $199 to $349 annually, depending on how extensive you want your training insights. That said, the device itself is technically free with a subscription commitment.</p><h3 class="article-body__section" id="section-fitbit-air-rumored-design"><span>Fitbit Air — Rumored design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2243px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="mhCxvbV9KM4P9KqNcjtWaR" name="IMG_3573" alt="doing an ECG reading on the Whoop MG" src="https://cdn.mos.cms.futurecdn.net/mhCxvbV9KM4P9KqNcjtWaR.jpg" mos="" align="middle" fullscreen="" width="2243" height="1262" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Based on the images shared on <a href="https://www.instagram.com/stephencurry30/" target="_blank">Steph Curry's Instagram</a>, the Fitbit Air appears to be a diminutive tracker on a woven cloth strap, and a somewhat similar design to the Whoop 5.0.</p><p>According to retail info first reported on by <a href="https://www.droid-life.com/2026/04/20/googles-fitbit-air-will-come-in-3-colors-several-band-options/" target="_blank" rel="nofollow">DroidLife</a>, the Fitbit Air could be available in a wide range of strap types and styles, including both cloth, silicone, and mesh metal options, with colors like 'Obsidian,' 'Lavender,' and 'Berry' on offer. </p><h3 class="article-body__section" id="section-fitbit-air-possible-features"><span>Fitbit Air — Possible features </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1207px;"><p class="vanilla-image-block" style="padding-top:56.17%;"><img id="sD3RENyeioa4hXC5AS62n5" name="Vivosmart4" alt="The sensors on the Garmin Vivosmart 4 fitness tracker" src="https://cdn.mos.cms.futurecdn.net/sD3RENyeioa4hXC5AS62n5.jpg" mos="" align="middle" fullscreen="" width="1207" height="678" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Given the rumored $99 price tag, the Fitbit Air will probably offer fairly basic fitness and health tracking insights, including a range of workout tracking modes, sleep and recovery insights, daily movement tracking with reminders, heart health insights, and women's health tracking.</p><p>That said, given the fact that it's being backed by a famous pro athlete, it's entirely possible that the device is capable of more advanced fitness training tools, advice, and metrics. Those, perhaps, will be locked behind some sort of monthly Google Health subscription. </p><p>No word on battery life, but the lack of a screen should result in solid longevity. The Whoop 5.0, for example, lasts for two weeks per charge. I reckon Google will aim to match or beat this rating with the Fitbit Air.  </p><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-cirqa-vs-whoop"><span>Fitbit Air vs Garmin ‘Cirqa’ vs Whoop </span></h3><div><blockquote><p>I can't get over the fact that in 2026, the biggest innovation we're talking about in wearable tech is the lack of a screen... 2015 called and wants its fitness trackers back.</p></blockquote></div><p>Google isn't the only major consumer tech brand evidently hungry for a piece of the Whoop pie. Reports suggest that Garmin is also working on a subscription-free fitness tracker to rival the Whoop 5.0, possibly named the <a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-rumored-screen-less-wearable-just-might-be-the-subscription-free-whoop-rival-ive-been-waiting-for">Garmin Cirqa</a>. </p><p>Like the Fitbit Air, the Garmin Cirqa is also tipped for a summer 2026 debut. The question is, will these likely budget-friendly wearables be direct competitors to the seemingly pro athlete-level Whoop? Or, will they be more targeted to the traditional fitness tracker crowd?</p><p>My money is on the latter. However, the fact that Google is clearly going to launch the Fitbit Air with the endorsement of a world-class athlete throws a bit of a monkey wrench into that prediction. </p><p>Ultimately, I can't quite get over the fact that in 2026, the biggest innovation we're talking about in wearable technology is the lack of a screen. It's almost as if 2015 called and wants its fitness trackers back. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/fitbit-is-exiting-the-cheap-smartwatch-race-and-this-brand-could-replace-it">Fitbit is exiting the cheap smartwatch race — and this brand could replace it</a></li><li><a href="https://www.tomsguide.com/wellness/smart-rings/the-oura-ring-5-is-coming-and-these-are-the-5-biggest-upgrades-im-hoping-to-see">The Oura Ring 5 is coming — and these are the 5 biggest upgrades I’m hoping to see</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/take-off-that-apple-watch-5-reasons-why-its-okay-to-swap-your-smartwatch-for-a-dumb-watch">5 reasons why I sometimes still wear a 'dumb' watch</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/forget-the-whoop-5-0-a-screenless-fitbit-air-could-arrive-this-summer-for-just-usd99</link>
                                                                            <description>
                            <![CDATA[ We may finally get a new Fitbit-branded wearable. The rumored Fitbit Air could cost as little as $99 and go head-to-head with the Whoop 5.0. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2kak8meDW6cmNZTGrC5gAS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/FPN2oVhyGKaa4tcqQn5Nm4-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 21 Apr 2026 02:26:22 +0000</pubDate>                                                                                                                                <updated>Wed, 22 Apr 2026 20:59:09 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/FPN2oVhyGKaa4tcqQn5Nm4-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up showing the back of the Fitbit Charge 6]]></media:description>                                                            <media:text><![CDATA[Close-up showing the back of the Fitbit Charge 6]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up showing the back of the Fitbit Charge 6]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/FPN2oVhyGKaa4tcqQn5Nm4-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Fitbit has been a <a href="https://www.tomsguide.com/news/google-acquires-fitbit-for-21-billion">Google brand</a> for roughly five years, and in that time, the big ‘G’ has shuttered the <a href="https://www.tomsguide.com/wellness/smartwatches/google-just-killed-off-fitbit-smartwatches-and-nobody-should-be-surprised">Fitbit smartwatch range</a>, killed some of the <a href="https://www.tomsguide.com/news/google-is-stripping-away-the-things-that-make-fitbit-fitbit-and-its-a-huge-mistake">best Fitbit community features</a>, and even <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">removed useful apps</a>, like Google Assistant, from still-support devices.</p><p>Outside of the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-ace-lte">Fitbit Ace LTE</a> — a wearable designed with kids in mind —  there hasn’t been a new Fitbit since 2023’s <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>. That could all change in the next few months, as rumors of a new Fitbit model reach a fevered pitch. There is, however, a slight catch.</p><p>Here’s everything we know so far about the <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-gave-us-a-sneak-peek-of-its-screenless-fitbit-band-and-whoop-should-be-worried">rumored Fitbit Air</a>, including possible features and design, a potential launch date, price, and more. </p><h3 class="article-body__section" id="section-fitbit-air-biggest-rumors"><span>Fitbit Air — Biggest rumors </span></h3><ul><li><strong>First teased in early April 2026 by U.S. basketball star Steph Curry </strong></li><li><strong>Rumored to be a screen-less wearable similar to the Whoop 5.0</strong></li><li><strong>Images suggest a lightweight design, possibly available in a range of colors and strap types, including a woven material</strong></li><li><strong>Likely to offer basic workout, movement, and sleep tracking features </strong></li><li><strong>Battery life could exceed two weeks </strong></li><li><strong>Tipped for a mid-May 2026 debut</strong></li><li><strong>Possible $99 launch price; likely subscription-free for core features </strong></li></ul><h3 class="article-body__section" id="section-fitbit-air-possible-price-and-release-date"><span>Fitbit Air — Possible price and release date </span></h3><p>According to an insider report from <a href="https://9to5google.com/2026/04/20/fitbit-air-release-date-price-color-report/" target="_blank">9to5Google</a>, the Fitbit Air could debut as soon as May 16th with a launch price of $99. That's the same cost as the entry-level <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>.</p><p>More importantly, unlike the biggest player in the screenless, wrist-based tracker market, Whoop, Google will likely offer most of the Fitbit Air's core features without a subscription fee. </p><p>By comparison, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop 5.0</a> is either $199 to $349 annually, depending on how extensive you want your training insights. That said, the device itself is technically free with a subscription commitment.</p><h3 class="article-body__section" id="section-fitbit-air-rumored-design"><span>Fitbit Air — Rumored design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2243px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="mhCxvbV9KM4P9KqNcjtWaR" name="IMG_3573" alt="doing an ECG reading on the Whoop MG" src="https://cdn.mos.cms.futurecdn.net/mhCxvbV9KM4P9KqNcjtWaR.jpg" mos="" align="middle" fullscreen="" width="2243" height="1262" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Based on the images shared on <a href="https://www.instagram.com/stephencurry30/" target="_blank">Steph Curry's Instagram</a>, the Fitbit Air appears to be a diminutive tracker on a woven cloth strap, and a somewhat similar design to the Whoop 5.0.</p><p>According to retail info first reported on by <a href="https://www.droid-life.com/2026/04/20/googles-fitbit-air-will-come-in-3-colors-several-band-options/" target="_blank" rel="nofollow">DroidLife</a>, the Fitbit Air could be available in a wide range of strap types and styles, including both cloth, silicone, and mesh metal options, with colors like 'Obsidian,' 'Lavender,' and 'Berry' on offer. </p><h3 class="article-body__section" id="section-fitbit-air-possible-features"><span>Fitbit Air — Possible features </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1207px;"><p class="vanilla-image-block" style="padding-top:56.17%;"><img id="sD3RENyeioa4hXC5AS62n5" name="Vivosmart4" alt="The sensors on the Garmin Vivosmart 4 fitness tracker" src="https://cdn.mos.cms.futurecdn.net/sD3RENyeioa4hXC5AS62n5.jpg" mos="" align="middle" fullscreen="" width="1207" height="678" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Given the rumored $99 price tag, the Fitbit Air will probably offer fairly basic fitness and health tracking insights, including a range of workout tracking modes, sleep and recovery insights, daily movement tracking with reminders, heart health insights, and women's health tracking.</p><p>That said, given the fact that it's being backed by a famous pro athlete, it's entirely possible that the device is capable of more advanced fitness training tools, advice, and metrics. Those, perhaps, will be locked behind some sort of monthly Google Health subscription. </p><p>No word on battery life, but the lack of a screen should result in solid longevity. The Whoop 5.0, for example, lasts for two weeks per charge. I reckon Google will aim to match or beat this rating with the Fitbit Air.  </p><h3 class="article-body__section" id="section-fitbit-air-vs-garmin-cirqa-vs-whoop"><span>Fitbit Air vs Garmin ‘Cirqa’ vs Whoop </span></h3><div><blockquote><p>I can't get over the fact that in 2026, the biggest innovation we're talking about in wearable tech is the lack of a screen... 2015 called and wants its fitness trackers back.</p></blockquote></div><p>Google isn't the only major consumer tech brand evidently hungry for a piece of the Whoop pie. Reports suggest that Garmin is also working on a subscription-free fitness tracker to rival the Whoop 5.0, possibly named the <a href="https://www.tomsguide.com/wellness/fitness-trackers/garmins-rumored-screen-less-wearable-just-might-be-the-subscription-free-whoop-rival-ive-been-waiting-for">Garmin Cirqa</a>. </p><p>Like the Fitbit Air, the Garmin Cirqa is also tipped for a summer 2026 debut. The question is, will these likely budget-friendly wearables be direct competitors to the seemingly pro athlete-level Whoop? Or, will they be more targeted to the traditional fitness tracker crowd?</p><p>My money is on the latter. However, the fact that Google is clearly going to launch the Fitbit Air with the endorsement of a world-class athlete throws a bit of a monkey wrench into that prediction. </p><p>Ultimately, I can't quite get over the fact that in 2026, the biggest innovation we're talking about in wearable technology is the lack of a screen. It's almost as if 2015 called and wants its fitness trackers back. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/fitbit-is-exiting-the-cheap-smartwatch-race-and-this-brand-could-replace-it">Fitbit is exiting the cheap smartwatch race — and this brand could replace it</a></li><li><a href="https://www.tomsguide.com/wellness/smart-rings/the-oura-ring-5-is-coming-and-these-are-the-5-biggest-upgrades-im-hoping-to-see">The Oura Ring 5 is coming — and these are the 5 biggest upgrades I’m hoping to see</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/take-off-that-apple-watch-5-reasons-why-its-okay-to-swap-your-smartwatch-for-a-dumb-watch">5 reasons why I sometimes still wear a 'dumb' watch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google just gave us a sneak peek of its screenless Fitbit band, and Whoop should be worried ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Google has trailed the launch of a new screenless fitness tracker, with Steph Curry giving us a sneak peek of the new device on his Instagram account.</p><p>In the video, Curry is seen wearing the screenless grey and orange band, which he describes as the ‘first of its kind’ before saying he won’t spoil it.</p><div class="instagram-embed"><blockquote class="instagram-media"  data-instgrm-version="6" style="width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><p><a href="https://www.instagram.com/p/DWjhdflgcF5/" target="_blank">A post shared by Wardell Curry (@stephencurry30)</a></p><p>A photo posted by  on </p></blockquote></div><p><a href="https://www.bloomberg.com/news/articles/2026-04-01/google-readies-revamped-screenless-fitbit-to-rival-growing-whoop-craze" target="_blank">Bloomberg reports </a>that the band will come with basic features and that you’ll need a Fitbit Premium subscription to unlock its full capabilities.</p><p>That the new tracker will be launched under the Fitbit brand is interesting because Google has seemingly been winding down Fitbit products over the past couple of years. </p><p>This would be a major new launch that leans on Fitbit’s background in fitness tracking, and it could be the first screenless band to really rival <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop</a>, which has been dominant in this area of the market.</p><h3 class="article-body__section" id="section-why-fitbit-can-take-on-whoop"><span>Why Fitbit can take on Whoop</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LYgmUAogLrfdpYGgNsYafQ" name="shutterstock_2574854121" alt="smartphone on laptop keyboard showing Fitbit logo." src="https://cdn.mos.cms.futurecdn.net/LYgmUAogLrfdpYGgNsYafQ.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Several screenless bands have hit the market over the past year, with the most notable Whoop rivals being the<a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-helio-strap-review"> Amazfit Helio Strap</a> and the<a href="https://www.tomsguide.com/wellness/fitness-trackers/polars-screenless-fitness-tracker-has-arrived-heres-everything-you-need-to-know-about-the-whoop-rival"> Polar Loop</a> band.</p><p>Neither has really dented Whoop’s popularity as yet. The Helio Strap is a good budget alternative but lacks the name recognition of Whoop, while the Polar Loop is undermined by poor software and hasn’t proved to be that accurate in my testing either.</p><p>Whoop has also been successful in blocking the sale of some rivals, like the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-wins-injunction-to-block-sale-of-rival-lexqi-band-what-does-this-mean-for-polar">Lexqi band</a>, and has sued Polar for ‘copying’ its design, something <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-just-sued-polar-over-the-design-of-its-loop-fitness-tracker">Polar firmly denied</a> when we asked them for comment.</p><p>A Google/Fitbit band wouldn’t have any problems with name recognition or its app. Fitbit remains one of the biggest names in fitness tracking tech, and the Fitbit app is easy and enjoyable to use, which is vital with a screenless band when you rely on the app to see all your data.</p><p>Showcasing the band on the wrist of Steph Curry is also a notable move because Whoop has always benefited from having a lot of partnerships with elite athletes across a range of sports. </p><p>Athletes don’t get much bigger and more recognizable than Curry, and if Google is smart, they’ll have other pros lined up to show off wearing the band.</p><p>It promises to be a big year for screenless trackers, with rumors of a Garmin band continuing to swirl as well. We’ll test any new bands as soon as we can to see if they really are a compelling Whoop alternative.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/not-the-fenix-9-this-is-the-new-garmin-watch-i-want-to-see-in-2026?hasComeFromProof=true">Not the Fenix 9 — this is the new Garmin watch I want to see in 2026</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/coros-pace-4-vs-coros-pace-3-vs-coros-pace-pro-which-is-the-best-coros-watch-for-you">Coros Pace 4 vs Coros Pace 3 vs Coros Pace Pro: Which is the best Coros watch for you?</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-8-vs-garmin-fenix-8-pro-should-you-upgrade">Garmin Fenix 8 vs. Garmin Fenix 8 Pro: should you upgrade?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/google-just-gave-us-a-sneak-peek-of-its-screenless-fitbit-band-and-whoop-should-be-worried</link>
                                                                            <description>
                            <![CDATA[ Steph Curry has teased the upcoming screenless Fitbit band on his Instagram, and Google could succeed where others have failed in making a potent Whoop rival. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">8k3oEi3Q983bkLDT23e7zB</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mhCxvbV9KM4P9KqNcjtWaR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Apr 2026 14:59:43 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nick Harris-Fry ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/J5Jjp49GUVjLZEbjEkTex.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Nick has been a journalist since 2012 and has spent most of that time writing about health and fitness for a variety of publications. Nick spent nine years working on the Coach magazine and website before moving to the fitness team at Tom’s Guide in 2024. Nick is a keen runner and also the founder of YouTube channel &lt;a href=&quot;https://www.youtube.com/channel/UCOBM9FasII4dKbyE_HKkbjw&quot;&gt;The Run Testers&lt;/a&gt;, which specialises in reviewing running shoes, watches, headphones and other gear.&lt;/p&gt;&lt;p&gt;Nick has covered all aspects of health and fitness throughout his career, interviewing experts and celebrities, trying fitness classes and running marathons, all in the name of providing readers with the information they need to get the most out of an active lifestyle.&lt;/p&gt;&lt;p&gt;Nick ran his first marathon in 2016 after six weeks of training for a magazine feature and subsequently became obsessed with the sport. He now has PBs of 2hr 25min for the marathon and 15min 30sec for 5K, and has run 16 marathons in total, as well as a 50-mile ultramarathon.&lt;/p&gt;&lt;p&gt;Nick runs 60-90 miles a week and races regularly with his club, which gives him a lot of opportunity to test out running gear: he has tested and reviewed hundreds of pairs of running shoes, as well as fitness trackers, running watches, sports headphones, treadmills, and all manner of other kit. Nick is also a qualified Run Leader in the UK.&lt;/p&gt;&lt;p&gt;Nick is an established expert in the health and fitness area and along with writing for several publications, including &lt;a href=&quot;https://www.livescience.com/author/nick-harris-fry&quot;&gt;Live Science&lt;/a&gt;, &lt;a href=&quot;https://www.expertreviews.co.uk/authors/nick-harris-fry&quot;&gt;Expert Reviews&lt;/a&gt;, &lt;a href=&quot;https://www.wareable.com/author/n.harris-fry&quot;&gt;Wareable&lt;/a&gt;, &lt;a href=&quot;https://www.coachweb.com/author/nick-harris-fry&quot;&gt;Coach&lt;/a&gt; and &lt;a href=&quot;https://www.getsweatgo.com/author/n.harrisfry&quot;&gt;Get Sweat Go&lt;/a&gt;, he has been quoted on &lt;a href=&quot;https://www.theguardian.com/thefilter/2024/oct/20/if-you-pay-more-than-4-youre-being-ripped-off-the-fair-price-for-14-everyday-items-from-cleaning-spray-to-olive-oil&quot;&gt;The Guardian&lt;/a&gt; and &lt;a href=&quot;https://www.independent.co.uk/life-style/health-and-families/london-marathon-2021-date-training-tips-summer-running-a9482486.html&quot;&gt;The Independent&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Nick graduated from the University of York in 2010 with a degree in Politics, Philosophy and Economics and worked in the NHS for three years, during which time he completed his NCTJ Diploma in Journalism at News Associates in London. Before starting on Coach and moving into health and fitness, Nick worked as a football journalist and lived in Kathmandu, Nepal for two years.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/mhCxvbV9KM4P9KqNcjtWaR-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[doing an ECG reading on the Whoop MG ]]></media:description>                                                            <media:text><![CDATA[doing an ECG reading on the Whoop MG ]]></media:text>
                                <media:title type="plain"><![CDATA[doing an ECG reading on the Whoop MG ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mhCxvbV9KM4P9KqNcjtWaR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Google has trailed the launch of a new screenless fitness tracker, with Steph Curry giving us a sneak peek of the new device on his Instagram account.</p><p>In the video, Curry is seen wearing the screenless grey and orange band, which he describes as the ‘first of its kind’ before saying he won’t spoil it.</p><div class="instagram-embed"><blockquote class="instagram-media"  data-instgrm-version="6" style="width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><p><a href="https://www.instagram.com/p/DWjhdflgcF5/" target="_blank">A post shared by Wardell Curry (@stephencurry30)</a></p><p>A photo posted by  on </p></blockquote></div><p><a href="https://www.bloomberg.com/news/articles/2026-04-01/google-readies-revamped-screenless-fitbit-to-rival-growing-whoop-craze" target="_blank">Bloomberg reports </a>that the band will come with basic features and that you’ll need a Fitbit Premium subscription to unlock its full capabilities.</p><p>That the new tracker will be launched under the Fitbit brand is interesting because Google has seemingly been winding down Fitbit products over the past couple of years. </p><p>This would be a major new launch that leans on Fitbit’s background in fitness tracking, and it could be the first screenless band to really rival <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-5-0-review-should-you-give-a-whoop-about-this-new-tracker">Whoop</a>, which has been dominant in this area of the market.</p><h3 class="article-body__section" id="section-why-fitbit-can-take-on-whoop"><span>Why Fitbit can take on Whoop</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LYgmUAogLrfdpYGgNsYafQ" name="shutterstock_2574854121" alt="smartphone on laptop keyboard showing Fitbit logo." src="https://cdn.mos.cms.futurecdn.net/LYgmUAogLrfdpYGgNsYafQ.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Several screenless bands have hit the market over the past year, with the most notable Whoop rivals being the<a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-helio-strap-review"> Amazfit Helio Strap</a> and the<a href="https://www.tomsguide.com/wellness/fitness-trackers/polars-screenless-fitness-tracker-has-arrived-heres-everything-you-need-to-know-about-the-whoop-rival"> Polar Loop</a> band.</p><p>Neither has really dented Whoop’s popularity as yet. The Helio Strap is a good budget alternative but lacks the name recognition of Whoop, while the Polar Loop is undermined by poor software and hasn’t proved to be that accurate in my testing either.</p><p>Whoop has also been successful in blocking the sale of some rivals, like the <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-wins-injunction-to-block-sale-of-rival-lexqi-band-what-does-this-mean-for-polar">Lexqi band</a>, and has sued Polar for ‘copying’ its design, something <a href="https://www.tomsguide.com/wellness/fitness-trackers/whoop-just-sued-polar-over-the-design-of-its-loop-fitness-tracker">Polar firmly denied</a> when we asked them for comment.</p><p>A Google/Fitbit band wouldn’t have any problems with name recognition or its app. Fitbit remains one of the biggest names in fitness tracking tech, and the Fitbit app is easy and enjoyable to use, which is vital with a screenless band when you rely on the app to see all your data.</p><p>Showcasing the band on the wrist of Steph Curry is also a notable move because Whoop has always benefited from having a lot of partnerships with elite athletes across a range of sports. </p><p>Athletes don’t get much bigger and more recognizable than Curry, and if Google is smart, they’ll have other pros lined up to show off wearing the band.</p><p>It promises to be a big year for screenless trackers, with rumors of a Garmin band continuing to swirl as well. We’ll test any new bands as soon as we can to see if they really are a compelling Whoop alternative.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/not-the-fenix-9-this-is-the-new-garmin-watch-i-want-to-see-in-2026?hasComeFromProof=true">Not the Fenix 9 — this is the new Garmin watch I want to see in 2026</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/coros-pace-4-vs-coros-pace-3-vs-coros-pace-pro-which-is-the-best-coros-watch-for-you">Coros Pace 4 vs Coros Pace 3 vs Coros Pace Pro: Which is the best Coros watch for you?</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-8-vs-garmin-fenix-8-pro-should-you-upgrade">Garmin Fenix 8 vs. Garmin Fenix 8 Pro: should you upgrade?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 7 fitness tracker deals I’d shop from $64 — up to 40% off Garmin, Fitbit, Amazfit and more ]]></title>
                                                                                                <dc:content><![CDATA[ <p>New Year’s resolutions are hard to stick to. So if you want to make any health-related goals easier to accomplish, I'd recommend getting yourself a fitness tracker. Tracking your activity with hard data can be more motivating than just relying on your memory, especially when you can look back over your progress over a long period of time!</p><p>January is one of the best times of year to buy a fitness tracker, since these devices see some of their biggest discounts of the year during this period. For example, right now you can get the <a href="https://www.amazon.com/Forerunner%C2%AE-Advanced-Triathlon-Smartwatch-Translucent/dp/B0F8QZF3GS" target="_blank" rel="nofollow">Garmin Forerunner 570 (47mm) on sale for $427 at Amazon</a>. This is the lowest price I’ve seen for the Forerunner 570, which we rank as the <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin watch</a> you can buy right now. </p><p>Looking for a more affordable option? I recommend the <a href="https://www.amazon.com/Amazfit-Battery-Display-Bluetooth-Water-Resistance/dp/B0DYJKTHYF" target="_blank" rel="nofollow">Amazfit Bip 6 on sale for $64 at Amazon</a>. This is one of the <a href="https://www.tomsguide.com/best-picks/best-cheap-fitness-trackers#section-best-cheap-fitness-tracker-under-100">best cheap fitness trackers</a> we’ve tested, and with this discount, it’s even better value. </p><p>Keep scrolling for more fitness tracker deals from Garmin, Fitbit and more. I also recommend checking out the <a href="https://www.tomsguide.com/wellness/fitness/15-skechers-deals-id-shop-from-usd17-at-amazon-get-up-to-63-percent-off-now#mrfhud=true">Skechers deals I’d shop from $17</a>. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.amazon.com/b/?_encoding=UTF8&node=8849526011" target="_blank" rel="nofollow"><strong>shop all fitness tracker deals at Amazon</strong></a></li><li><strong>Amazfit Bip 6: </strong><a href="https://www.amazon.com/Amazfit-Battery-Display-Bluetooth-Water-Resistance/dp/B0DYJKTHYF" target="_blank" rel="nofollow"><strong>was $79 now $64</strong></a></li><li><strong>Fitbit Charge 6: </strong><a href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><strong>was $159 now $128</strong></a></li><li><strong>Garmin Forerunner 55: </strong><a href="https://www.amazon.com/Garmin-Forerunner-Running-Suggested-Workouts/dp/B092RCLKHN" target="_blank" rel="nofollow"><strong>was $199 now $149</strong></a></li><li><strong>Apple Watch SE 3 (GPS/42mm): </strong><a href="https://www.amazon.com/dp/B0FQFW7M9H" target="_blank" rel="nofollow"><strong>was $249 now $239</strong></a></li><li><strong>Garmin Forerunner 570: </strong><a href="https://www.amazon.com/dp/B0F8QZF3GS" target="_blank" rel="nofollow"><strong>was $549 now $427</strong></a><strong></strong></li><li><strong>Garmin Fenix E: </strong><a href="https://www.amazon.com/Garmin-f%C4%93nix%C2%AE-Multisport-Smartwatch-Long-Lasting/dp/B0DD5RD79L" target="_blank" rel="nofollow"><strong>was $799 now $499</strong></a></li></ul><h3 class="article-body__section" id="section-garmin-deals"><span>Garmin deals</span></h3><div class="product"><a data-dimension112="3816f24f-3a8d-4309-a810-35ff7404e4ac" data-action="Deal Block" data-label="Bip 6" data-dimension48="Bip 6" data-dimension25="$64" href="https://www.amazon.com/Amazfit-Battery-Display-Bluetooth-Water-Resistance/dp/B0DYJKTHYF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1083px;"><p class="vanilla-image-block" style="padding-top:107.39%;"><img id="VNBoC54EtdABHYBMozqkBL" name="Amazfit Bip 6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/VNBoC54EtdABHYBMozqkBL.jpg" mos="" align="middle" fullscreen="" width="1083" height="1163" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-bip-6-review" data-dimension112="3816f24f-3a8d-4309-a810-35ff7404e4ac" data-action="Deal Block" data-label="Bip 6" data-dimension48="Bip 6" data-dimension25="$64">Amazfit Bip 6</a> perfectly tracks sleep, readiness and workouts while giving feedback to enhance your fitness. The budget price tag says nothing about the performance of this awesome smartwatch. <a class="view-deal button" href="https://www.amazon.com/Amazfit-Battery-Display-Bluetooth-Water-Resistance/dp/B0DYJKTHYF" target="_blank" rel="nofollow" data-dimension112="3816f24f-3a8d-4309-a810-35ff7404e4ac" data-action="Deal Block" data-label="Bip 6" data-dimension48="Bip 6" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="407185f7-e944-467b-9b4c-da6df87e078b" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bLX6nP5rSbxiGe58RX5eK9" name="1710845702.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bLX6nP5rSbxiGe58RX5eK9.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>We tested the Charge 6 and found that it was easily the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html" data-dimension112="407185f7-e944-467b-9b4c-da6df87e078b" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128">best fitness tracker</a> for most people. The on-device menus are easy to use, the screen is bright even in direct sunlight, and the tracker lasts six days between charges. It's an ideal option for keeping tabs on your daily activities and light exercise, with all the data accessible in the Fitbit app. Plus, the Charge 6 has Google Maps and Google Wallet (for contactless payments) and an ECG for keeping tabs on your heart health. Note: this has sold for $99 in the past.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="407185f7-e944-467b-9b4c-da6df87e078b" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128">View Deal</a></p></div><div class="product"><a data-dimension112="f8b7eeed-802c-476b-96c6-16ab56c05904" data-action="Deal Block" data-label="Forerunner 55" data-dimension48="Forerunner 55" data-dimension25="$149" href="https://www.amazon.com/Garmin-Forerunner-Running-Suggested-Workouts/dp/B092RCLKHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1015px;"><p class="vanilla-image-block" style="padding-top:100.99%;"><img id="DXyUPYXb7KBxZYvWKaTu2j" name="Foerunner55-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DXyUPYXb7KBxZYvWKaTu2j.jpg" mos="" align="middle" fullscreen="" width="1015" height="1025" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This is the Garmin to get if you're buying a running watch for the first time. It offers a bright screen, easy to read stats, and long battery life. You'll also have access to PacePro suggested workouts. In our <a href="https://www.tomsguide.com/reviews/garmin-forerunner-55" data-dimension112="f8b7eeed-802c-476b-96c6-16ab56c05904" data-action="Deal Block" data-label="Forerunner 55" data-dimension48="Forerunner 55" data-dimension25="$149">Garmin Forerunner 55 review</a>, we said this watch was like having an expert coach on your wrist.<a class="view-deal button" href="https://www.amazon.com/Garmin-Forerunner-Running-Suggested-Workouts/dp/B092RCLKHN" target="_blank" rel="nofollow" data-dimension112="f8b7eeed-802c-476b-96c6-16ab56c05904" data-action="Deal Block" data-label="Forerunner 55" data-dimension48="Forerunner 55" data-dimension25="$149">View Deal</a></p></div><div class="product"><a data-dimension112="46edac28-3111-4ed1-9295-f56f8976d90e" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$239" href="https://www.amazon.com/dp/B0FQFW7M9H" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1250px;"><p class="vanilla-image-block" style="padding-top:120.00%;"><img id="P5u4zYQs5ZvG5TAnrthGhE" name="Apple Watch SE 3 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/P5u4zYQs5ZvG5TAnrthGhE.jpg" mos="" align="middle" fullscreen="" width="1250" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FQFW7M9H" target="_blank" rel="nofollow" data-dimension112="46edac28-3111-4ed1-9295-f56f8976d90e" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$239">Watch SE 3 (GPS/42mm): was $249 now $239</a></strong><br>The Apple Watch SE 3 sports a lot of new features that redefine Apple's entry-level smartwatch. Among them, you'll find an always-on display, S10 processor, and better health features, such as support for Sleep Score and Workout Buddy. (The latter is powered by Apple Intelligence and requires an iPhone 15 Pro or higher). In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3 review</a>, we called it the best smartwatch value around. Note: this has sold for $199 in the past.<a class="view-deal button" href="https://www.amazon.com/dp/B0FQFW7M9H" target="_blank" rel="nofollow" data-dimension112="46edac28-3111-4ed1-9295-f56f8976d90e" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$239">View Deal</a></p></div><div class="product"><a data-dimension112="0179540f-5590-4181-97df-4fa268145fda" data-action="Deal Block" data-label="Pixel Watch 3 (45mm/LTE)" data-dimension48="Pixel Watch 3 (45mm/LTE)" data-dimension25="$239" href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D91424WX" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1492px;"><p class="vanilla-image-block" style="padding-top:91.69%;"><img id="J5JY6oNLHRKynnkrwYPPuY" name="Google Pixel Watch 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J5JY6oNLHRKynnkrwYPPuY.png" mos="" align="middle" fullscreen="" width="1492" height="1368" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D91424WX" target="_blank" rel="nofollow" data-dimension112="0179540f-5590-4181-97df-4fa268145fda" data-action="Deal Block" data-label="Pixel Watch 3 (45mm/LTE)" data-dimension48="Pixel Watch 3 (45mm/LTE)" data-dimension25="$239">Pixel Watch 3 (45mm/LTE): was $399 now $239</a></strong><br>Right now you can get the fully decked out <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review">Google Pixel Watch 3</a> — with a 45mm display and LTE support — on sale for $239, which is a steal. It's one of our favorite long-lasting smartwatches for Android, offering two full days of battery with normal use. It also has Google's ground-breaking and possibly life-saving new Loss of Pulse Detection, and is loaded with other insightful wellness tools and helpful smart features. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D91424WX" target="_blank" rel="nofollow" data-dimension112="0179540f-5590-4181-97df-4fa268145fda" data-action="Deal Block" data-label="Pixel Watch 3 (45mm/LTE)" data-dimension48="Pixel Watch 3 (45mm/LTE)" data-dimension25="$239">View Deal</a></p></div><div class="product"><a data-dimension112="5b8a2fbd-2567-488a-a441-9009223a33ad" data-action="Deal Block" data-label="Forerunner 570 (47mm)" data-dimension48="Forerunner 570 (47mm)" data-dimension25="$427" href="https://www.amazon.com/dp/B0F8QZF3GS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1260px;"><p class="vanilla-image-block" style="padding-top:97.94%;"><img id="DUAtoQmnxeCzNeEg8LWQf5" name="61lVr+OEzeL._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DUAtoQmnxeCzNeEg8LWQf5.jpg" mos="" align="middle" fullscreen="" width="1260" height="1234" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0F8QZF3GS" target="_blank" rel="nofollow" data-dimension112="5b8a2fbd-2567-488a-a441-9009223a33ad" data-action="Deal Block" data-label="Forerunner 570 (47mm)" data-dimension48="Forerunner 570 (47mm)" data-dimension25="$427">Forerunner 570 (47mm): was $549 now $427</a></strong><br>The Garmin Forerunner 570 comes with a bright AMOLED touchscreen display, 11 days of battery life and new adjustable font size on the display. There's even an on-board microphone that lets you take calls directly from your watch. We gave it 4 stars in our <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-570-review">Garmin Forerunner 570 review</a>, and currently rank it as the <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin watch</a> for runners. <a class="view-deal button" href="https://www.amazon.com/dp/B0F8QZF3GS" target="_blank" rel="nofollow" data-dimension112="5b8a2fbd-2567-488a-a441-9009223a33ad" data-action="Deal Block" data-label="Forerunner 570 (47mm)" data-dimension48="Forerunner 570 (47mm)" data-dimension25="$427">View Deal</a></p></div><div class="product"><a data-dimension112="88e57e94-7a32-4e37-a50b-5052bbdc83b1" data-action="Deal Block" data-label="Fenix E" data-dimension48="Fenix E" data-dimension25="$499" href="https://www.amazon.com/Garmin-f%C4%93nix%C2%AE-Multisport-Smartwatch-Long-Lasting/dp/B0DD5RD79L" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1290px;"><p class="vanilla-image-block" style="padding-top:116.28%;"><img id="V45Kzwg8MHpkhcbFFeepWP" name="Fenix E" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/V45Kzwg8MHpkhcbFFeepWP.jpg" mos="" align="middle" fullscreen="" width="1290" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Garmin-f%C4%93nix%C2%AE-Multisport-Smartwatch-Long-Lasting/dp/B0DD5RD79L" target="_blank" rel="nofollow" data-dimension112="88e57e94-7a32-4e37-a50b-5052bbdc83b1" data-action="Deal Block" data-label="Fenix E" data-dimension48="Fenix E" data-dimension25="$499">Fenix E: was $799 now $499</a></strong><br>This smartwatch is a budget-friendly alternative to the <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-8-review">Garmin Fenix 8</a>. While it lacks the Fenix 8's mic, speaker and flashlight, it's still a great smartwatch with a 47mm AMOLED display and 16-day battery life. You also get access to advanced sleep monitoring, respiration tracking and Pulse Ox levels.<a class="view-deal button" href="https://www.amazon.com/Garmin-f%C4%93nix%C2%AE-Multisport-Smartwatch-Long-Lasting/dp/B0DD5RD79L" target="_blank" rel="nofollow" data-dimension112="88e57e94-7a32-4e37-a50b-5052bbdc83b1" data-action="Deal Block" data-label="Fenix E" data-dimension48="Fenix E" data-dimension25="$499">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/7-fitness-tracker-deals-id-shop-from-usd64-up-to-40-percent-off-garmin-fitbit-amazfit-and-more</link>
                                                                            <description>
                            <![CDATA[ Some of the best fitness trackers we’ve tested are on sale — scoop up these deals while you can. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aWxdg3nczRxLcTwARQmPWJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EAec3inR56gahY5jUXNuX3-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 19 Jan 2026 14:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ millie.daviswilliams@futurenet.com (Millie Davis-Williams) ]]></author>                    <dc:creator><![CDATA[ Millie Davis-Williams ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/WU6pa7hKuxs5ScCoqcXYWA.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Millie is a Deals Editor at Tom&#039;s Guide specializing in tech deals content. Based in London, Millie has spent a lifetime stubbornly refusing to pay full price on any possible purchase. She has years of searching for the best discounts on the latest and greatest phones, TVs and gadgets under her belt, and knows how to sort the best deals from the rest. Helping readers save on the products they want is her mission, whether it’s an Apple Watch or a new tablet.&lt;/p&gt;&lt;p&gt;Since working at Tom’s Guide, Millie has covered retail events like Prime Day, Black Friday and Cyber Monday extensively, meaning she knows the products readers are looking for and the best times of year to hit “purchase.”&lt;/p&gt;&lt;p&gt;When she’s not looking for discounts, Millie covers news and writes how-to articles about everything from phones, streaming devices, and headphones to apps and video games.&lt;/p&gt;&lt;p&gt;In her spare time, Millie enjoys reading, gaming on her Nintendo Switch and creating digital art. She’s also a fan of watching Disney movies and collecting plush (the latter having totally taken over her bedroom.)&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EAec3inR56gahY5jUXNuX3-1280-80.jpg">
                                                            <media:credit><![CDATA[Garmin]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Garmin Forerunner 570 smartwatch]]></media:description>                                                            <media:text><![CDATA[Garmin Forerunner 570 smartwatch]]></media:text>
                                <media:title type="plain"><![CDATA[Garmin Forerunner 570 smartwatch]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EAec3inR56gahY5jUXNuX3-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>New Year’s resolutions are hard to stick to. So if you want to make any health-related goals easier to accomplish, I'd recommend getting yourself a fitness tracker. Tracking your activity with hard data can be more motivating than just relying on your memory, especially when you can look back over your progress over a long period of time!</p><p>January is one of the best times of year to buy a fitness tracker, since these devices see some of their biggest discounts of the year during this period. For example, right now you can get the <a href="https://www.amazon.com/Forerunner%C2%AE-Advanced-Triathlon-Smartwatch-Translucent/dp/B0F8QZF3GS" target="_blank" rel="nofollow">Garmin Forerunner 570 (47mm) on sale for $427 at Amazon</a>. This is the lowest price I’ve seen for the Forerunner 570, which we rank as the <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin watch</a> you can buy right now. </p><p>Looking for a more affordable option? I recommend the <a href="https://www.amazon.com/Amazfit-Battery-Display-Bluetooth-Water-Resistance/dp/B0DYJKTHYF" target="_blank" rel="nofollow">Amazfit Bip 6 on sale for $64 at Amazon</a>. This is one of the <a href="https://www.tomsguide.com/best-picks/best-cheap-fitness-trackers#section-best-cheap-fitness-tracker-under-100">best cheap fitness trackers</a> we’ve tested, and with this discount, it’s even better value. </p><p>Keep scrolling for more fitness tracker deals from Garmin, Fitbit and more. I also recommend checking out the <a href="https://www.tomsguide.com/wellness/fitness/15-skechers-deals-id-shop-from-usd17-at-amazon-get-up-to-63-percent-off-now#mrfhud=true">Skechers deals I’d shop from $17</a>. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.amazon.com/b/?_encoding=UTF8&node=8849526011" target="_blank" rel="nofollow"><strong>shop all fitness tracker deals at Amazon</strong></a></li><li><strong>Amazfit Bip 6: </strong><a href="https://www.amazon.com/Amazfit-Battery-Display-Bluetooth-Water-Resistance/dp/B0DYJKTHYF" target="_blank" rel="nofollow"><strong>was $79 now $64</strong></a></li><li><strong>Fitbit Charge 6: </strong><a href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><strong>was $159 now $128</strong></a></li><li><strong>Garmin Forerunner 55: </strong><a href="https://www.amazon.com/Garmin-Forerunner-Running-Suggested-Workouts/dp/B092RCLKHN" target="_blank" rel="nofollow"><strong>was $199 now $149</strong></a></li><li><strong>Apple Watch SE 3 (GPS/42mm): </strong><a href="https://www.amazon.com/dp/B0FQFW7M9H" target="_blank" rel="nofollow"><strong>was $249 now $239</strong></a></li><li><strong>Garmin Forerunner 570: </strong><a href="https://www.amazon.com/dp/B0F8QZF3GS" target="_blank" rel="nofollow"><strong>was $549 now $427</strong></a><strong></strong></li><li><strong>Garmin Fenix E: </strong><a href="https://www.amazon.com/Garmin-f%C4%93nix%C2%AE-Multisport-Smartwatch-Long-Lasting/dp/B0DD5RD79L" target="_blank" rel="nofollow"><strong>was $799 now $499</strong></a></li></ul><h3 class="article-body__section" id="section-garmin-deals"><span>Garmin deals</span></h3><div class="product"><a data-dimension112="3816f24f-3a8d-4309-a810-35ff7404e4ac" data-action="Deal Block" data-label="Bip 6" data-dimension48="Bip 6" data-dimension25="$64" href="https://www.amazon.com/Amazfit-Battery-Display-Bluetooth-Water-Resistance/dp/B0DYJKTHYF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1083px;"><p class="vanilla-image-block" style="padding-top:107.39%;"><img id="VNBoC54EtdABHYBMozqkBL" name="Amazfit Bip 6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/VNBoC54EtdABHYBMozqkBL.jpg" mos="" align="middle" fullscreen="" width="1083" height="1163" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-bip-6-review" data-dimension112="3816f24f-3a8d-4309-a810-35ff7404e4ac" data-action="Deal Block" data-label="Bip 6" data-dimension48="Bip 6" data-dimension25="$64">Amazfit Bip 6</a> perfectly tracks sleep, readiness and workouts while giving feedback to enhance your fitness. The budget price tag says nothing about the performance of this awesome smartwatch. <a class="view-deal button" href="https://www.amazon.com/Amazfit-Battery-Display-Bluetooth-Water-Resistance/dp/B0DYJKTHYF" target="_blank" rel="nofollow" data-dimension112="3816f24f-3a8d-4309-a810-35ff7404e4ac" data-action="Deal Block" data-label="Bip 6" data-dimension48="Bip 6" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="407185f7-e944-467b-9b4c-da6df87e078b" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bLX6nP5rSbxiGe58RX5eK9" name="1710845702.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bLX6nP5rSbxiGe58RX5eK9.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>We tested the Charge 6 and found that it was easily the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html" data-dimension112="407185f7-e944-467b-9b4c-da6df87e078b" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128">best fitness tracker</a> for most people. The on-device menus are easy to use, the screen is bright even in direct sunlight, and the tracker lasts six days between charges. It's an ideal option for keeping tabs on your daily activities and light exercise, with all the data accessible in the Fitbit app. Plus, the Charge 6 has Google Maps and Google Wallet (for contactless payments) and an ECG for keeping tabs on your heart health. Note: this has sold for $99 in the past.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="407185f7-e944-467b-9b4c-da6df87e078b" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128">View Deal</a></p></div><div class="product"><a data-dimension112="f8b7eeed-802c-476b-96c6-16ab56c05904" data-action="Deal Block" data-label="Forerunner 55" data-dimension48="Forerunner 55" data-dimension25="$149" href="https://www.amazon.com/Garmin-Forerunner-Running-Suggested-Workouts/dp/B092RCLKHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1015px;"><p class="vanilla-image-block" style="padding-top:100.99%;"><img id="DXyUPYXb7KBxZYvWKaTu2j" name="Foerunner55-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DXyUPYXb7KBxZYvWKaTu2j.jpg" mos="" align="middle" fullscreen="" width="1015" height="1025" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This is the Garmin to get if you're buying a running watch for the first time. It offers a bright screen, easy to read stats, and long battery life. You'll also have access to PacePro suggested workouts. In our <a href="https://www.tomsguide.com/reviews/garmin-forerunner-55" data-dimension112="f8b7eeed-802c-476b-96c6-16ab56c05904" data-action="Deal Block" data-label="Forerunner 55" data-dimension48="Forerunner 55" data-dimension25="$149">Garmin Forerunner 55 review</a>, we said this watch was like having an expert coach on your wrist.<a class="view-deal button" href="https://www.amazon.com/Garmin-Forerunner-Running-Suggested-Workouts/dp/B092RCLKHN" target="_blank" rel="nofollow" data-dimension112="f8b7eeed-802c-476b-96c6-16ab56c05904" data-action="Deal Block" data-label="Forerunner 55" data-dimension48="Forerunner 55" data-dimension25="$149">View Deal</a></p></div><div class="product"><a data-dimension112="46edac28-3111-4ed1-9295-f56f8976d90e" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$239" href="https://www.amazon.com/dp/B0FQFW7M9H" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1250px;"><p class="vanilla-image-block" style="padding-top:120.00%;"><img id="P5u4zYQs5ZvG5TAnrthGhE" name="Apple Watch SE 3 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/P5u4zYQs5ZvG5TAnrthGhE.jpg" mos="" align="middle" fullscreen="" width="1250" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FQFW7M9H" target="_blank" rel="nofollow" data-dimension112="46edac28-3111-4ed1-9295-f56f8976d90e" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$239">Watch SE 3 (GPS/42mm): was $249 now $239</a></strong><br>The Apple Watch SE 3 sports a lot of new features that redefine Apple's entry-level smartwatch. Among them, you'll find an always-on display, S10 processor, and better health features, such as support for Sleep Score and Workout Buddy. (The latter is powered by Apple Intelligence and requires an iPhone 15 Pro or higher). In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3 review</a>, we called it the best smartwatch value around. Note: this has sold for $199 in the past.<a class="view-deal button" href="https://www.amazon.com/dp/B0FQFW7M9H" target="_blank" rel="nofollow" data-dimension112="46edac28-3111-4ed1-9295-f56f8976d90e" data-action="Deal Block" data-label="Watch SE 3 (GPS/42mm)" data-dimension48="Watch SE 3 (GPS/42mm)" data-dimension25="$239">View Deal</a></p></div><div class="product"><a data-dimension112="0179540f-5590-4181-97df-4fa268145fda" data-action="Deal Block" data-label="Pixel Watch 3 (45mm/LTE)" data-dimension48="Pixel Watch 3 (45mm/LTE)" data-dimension25="$239" href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D91424WX" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1492px;"><p class="vanilla-image-block" style="padding-top:91.69%;"><img id="J5JY6oNLHRKynnkrwYPPuY" name="Google Pixel Watch 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J5JY6oNLHRKynnkrwYPPuY.png" mos="" align="middle" fullscreen="" width="1492" height="1368" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D91424WX" target="_blank" rel="nofollow" data-dimension112="0179540f-5590-4181-97df-4fa268145fda" data-action="Deal Block" data-label="Pixel Watch 3 (45mm/LTE)" data-dimension48="Pixel Watch 3 (45mm/LTE)" data-dimension25="$239">Pixel Watch 3 (45mm/LTE): was $399 now $239</a></strong><br>Right now you can get the fully decked out <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review">Google Pixel Watch 3</a> — with a 45mm display and LTE support — on sale for $239, which is a steal. It's one of our favorite long-lasting smartwatches for Android, offering two full days of battery with normal use. It also has Google's ground-breaking and possibly life-saving new Loss of Pulse Detection, and is loaded with other insightful wellness tools and helpful smart features. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D91424WX" target="_blank" rel="nofollow" data-dimension112="0179540f-5590-4181-97df-4fa268145fda" data-action="Deal Block" data-label="Pixel Watch 3 (45mm/LTE)" data-dimension48="Pixel Watch 3 (45mm/LTE)" data-dimension25="$239">View Deal</a></p></div><div class="product"><a data-dimension112="5b8a2fbd-2567-488a-a441-9009223a33ad" data-action="Deal Block" data-label="Forerunner 570 (47mm)" data-dimension48="Forerunner 570 (47mm)" data-dimension25="$427" href="https://www.amazon.com/dp/B0F8QZF3GS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1260px;"><p class="vanilla-image-block" style="padding-top:97.94%;"><img id="DUAtoQmnxeCzNeEg8LWQf5" name="61lVr+OEzeL._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DUAtoQmnxeCzNeEg8LWQf5.jpg" mos="" align="middle" fullscreen="" width="1260" height="1234" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0F8QZF3GS" target="_blank" rel="nofollow" data-dimension112="5b8a2fbd-2567-488a-a441-9009223a33ad" data-action="Deal Block" data-label="Forerunner 570 (47mm)" data-dimension48="Forerunner 570 (47mm)" data-dimension25="$427">Forerunner 570 (47mm): was $549 now $427</a></strong><br>The Garmin Forerunner 570 comes with a bright AMOLED touchscreen display, 11 days of battery life and new adjustable font size on the display. There's even an on-board microphone that lets you take calls directly from your watch. We gave it 4 stars in our <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-570-review">Garmin Forerunner 570 review</a>, and currently rank it as the <a href="https://www.tomsguide.com/best-picks/best-garmin-watch">best Garmin watch</a> for runners. <a class="view-deal button" href="https://www.amazon.com/dp/B0F8QZF3GS" target="_blank" rel="nofollow" data-dimension112="5b8a2fbd-2567-488a-a441-9009223a33ad" data-action="Deal Block" data-label="Forerunner 570 (47mm)" data-dimension48="Forerunner 570 (47mm)" data-dimension25="$427">View Deal</a></p></div><div class="product"><a data-dimension112="88e57e94-7a32-4e37-a50b-5052bbdc83b1" data-action="Deal Block" data-label="Fenix E" data-dimension48="Fenix E" data-dimension25="$499" href="https://www.amazon.com/Garmin-f%C4%93nix%C2%AE-Multisport-Smartwatch-Long-Lasting/dp/B0DD5RD79L" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1290px;"><p class="vanilla-image-block" style="padding-top:116.28%;"><img id="V45Kzwg8MHpkhcbFFeepWP" name="Fenix E" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/V45Kzwg8MHpkhcbFFeepWP.jpg" mos="" align="middle" fullscreen="" width="1290" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Garmin-f%C4%93nix%C2%AE-Multisport-Smartwatch-Long-Lasting/dp/B0DD5RD79L" target="_blank" rel="nofollow" data-dimension112="88e57e94-7a32-4e37-a50b-5052bbdc83b1" data-action="Deal Block" data-label="Fenix E" data-dimension48="Fenix E" data-dimension25="$499">Fenix E: was $799 now $499</a></strong><br>This smartwatch is a budget-friendly alternative to the <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-8-review">Garmin Fenix 8</a>. While it lacks the Fenix 8's mic, speaker and flashlight, it's still a great smartwatch with a 47mm AMOLED display and 16-day battery life. You also get access to advanced sleep monitoring, respiration tracking and Pulse Ox levels.<a class="view-deal button" href="https://www.amazon.com/Garmin-f%C4%93nix%C2%AE-Multisport-Smartwatch-Long-Lasting/dp/B0DD5RD79L" target="_blank" rel="nofollow" data-dimension112="88e57e94-7a32-4e37-a50b-5052bbdc83b1" data-action="Deal Block" data-label="Fenix E" data-dimension48="Fenix E" data-dimension25="$499">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The Fitbit Charge 6 just crashed to $99 at Amazon — lowest price ever ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Need some help hitting those New Year’s resolutions? The <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness tracker</a> we’ve tested has seen an epic discount in the first week of 2026, so now’s the perfect time to pick one up and stay on top of your activity. </p><p>Right now the <a href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow">Fitbit Charge 6 is on sale for $99 at Amazon</a>. We love it because of its lightweight and comfortable design, bright touch display and reliable fitness tracking metrics.</p><p>Not sure a Fitbit is for you? Check out our guide to the <a href="https://www.tomsguide.com/wellness/fitness-trackers/rip-fitbit-5-alternatives-to-fitbits-best-trackers-and-smartwatches">best Fitbit alternatives</a>.</p><div class="product"><a data-dimension112="4bf7bde9-faf9-4608-8cb6-343b26a31671" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bLX6nP5rSbxiGe58RX5eK9" name="1710845702.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bLX6nP5rSbxiGe58RX5eK9.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>We tested the Charge 6 and found that it was easily the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html" data-dimension112="4bf7bde9-faf9-4608-8cb6-343b26a31671" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">best fitness tracker</a> for most people. The on-device menus are easy to use, the screen is bright even in direct sunlight, and the tracker lasts six days between charges. It's an ideal option for keeping tabs on your daily activities and light exercise, with all the data accessible in the Fitbit app. Plus, the Charge 6 has Google Maps and Google Wallet (for contactless payments) and an ECG for keeping tabs on your heart health.<a class="view-deal button" href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="4bf7bde9-faf9-4608-8cb6-343b26a31671" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><p>We gave this tracker a 4.5-star rating in our <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6 review</a>. We knocked it down from five stars because of its slightly loose charger and small display. But these issues are easy to overlook, since the Fitbit Charge 6’s 7-day battery life means you won’t have to charge it often, and the small display means the device is sleek and easy to wear. (And don’t worry, the display is still bright and easy to see.)</p><p>This tracker has incredibly accurate fitness tracking on board with a reliable heart rate monitor, as well as lots of sleep tracking features and a SpO2 monitor. We also like the physical side button, which is easier to use than a touch screen if your hands get sweaty while working out. </p><p>The Fitbit Charge 6 has connectivity with other smart workout equipment like Peloton, NordicTrack and Tonal. And since it has support for Google Maps and Google Wallet, you may be able to leave your phone at home while you’re out on a run.</p><p>At $99, this is a steal, so grab it while you can! I also recommend checking out our <a href="https://www.tomsguide.com/coupons/amazon.com">Amazon promo codes</a> and the <a href="https://www.tomsguide.com/wellness/running/15-deals-id-get-in-asics-sale-with-up-to-47-percent-off-running-shoes-and-apparel">best Asics deals with up to 47% off</a>. </p><div data-model-name="Fitbit Charge 6" data-widget-type="review" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/the-fitbit-charge-6-just-crashed-to-usd99-at-amazon-lowest-price-ever</link>
                                                                            <description>
                            <![CDATA[ Amazon just slashed 38% off the Fitbit Charge 6, bringing its price under $100. It’s the best fitness tracker we’ve tested. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6BLvxYqsFrXGv6GfwYXvg6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QeZn2NznZasJEcpi6cGdxS-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 07 Jan 2026 11:38:16 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ millie.daviswilliams@futurenet.com (Millie Davis-Williams) ]]></author>                    <dc:creator><![CDATA[ Millie Davis-Williams ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/WU6pa7hKuxs5ScCoqcXYWA.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Millie is a Deals Editor at Tom&#039;s Guide specializing in tech deals content. Based in London, Millie has spent a lifetime stubbornly refusing to pay full price on any possible purchase. She has years of searching for the best discounts on the latest and greatest phones, TVs and gadgets under her belt, and knows how to sort the best deals from the rest. Helping readers save on the products they want is her mission, whether it’s an Apple Watch or a new tablet.&lt;/p&gt;&lt;p&gt;Since working at Tom’s Guide, Millie has covered retail events like Prime Day, Black Friday and Cyber Monday extensively, meaning she knows the products readers are looking for and the best times of year to hit “purchase.”&lt;/p&gt;&lt;p&gt;When she’s not looking for discounts, Millie covers news and writes how-to articles about everything from phones, streaming devices, and headphones to apps and video games.&lt;/p&gt;&lt;p&gt;In her spare time, Millie enjoys reading, gaming on her Nintendo Switch and creating digital art. She’s also a fan of watching Disney movies and collecting plush (the latter having totally taken over her bedroom.)&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/QeZn2NznZasJEcpi6cGdxS-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Charge 6 shown on wrist]]></media:description>                                                            <media:text><![CDATA[Fitbit Charge 6 shown on wrist]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Charge 6 shown on wrist]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QeZn2NznZasJEcpi6cGdxS-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Need some help hitting those New Year’s resolutions? The <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness tracker</a> we’ve tested has seen an epic discount in the first week of 2026, so now’s the perfect time to pick one up and stay on top of your activity. </p><p>Right now the <a href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow">Fitbit Charge 6 is on sale for $99 at Amazon</a>. We love it because of its lightweight and comfortable design, bright touch display and reliable fitness tracking metrics.</p><p>Not sure a Fitbit is for you? Check out our guide to the <a href="https://www.tomsguide.com/wellness/fitness-trackers/rip-fitbit-5-alternatives-to-fitbits-best-trackers-and-smartwatches">best Fitbit alternatives</a>.</p><div class="product"><a data-dimension112="4bf7bde9-faf9-4608-8cb6-343b26a31671" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bLX6nP5rSbxiGe58RX5eK9" name="1710845702.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bLX6nP5rSbxiGe58RX5eK9.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>We tested the Charge 6 and found that it was easily the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html" data-dimension112="4bf7bde9-faf9-4608-8cb6-343b26a31671" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">best fitness tracker</a> for most people. The on-device menus are easy to use, the screen is bright even in direct sunlight, and the tracker lasts six days between charges. It's an ideal option for keeping tabs on your daily activities and light exercise, with all the data accessible in the Fitbit app. Plus, the Charge 6 has Google Maps and Google Wallet (for contactless payments) and an ECG for keeping tabs on your heart health.<a class="view-deal button" href="https://www.amazon.com/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="4bf7bde9-faf9-4608-8cb6-343b26a31671" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><p>We gave this tracker a 4.5-star rating in our <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6 review</a>. We knocked it down from five stars because of its slightly loose charger and small display. But these issues are easy to overlook, since the Fitbit Charge 6’s 7-day battery life means you won’t have to charge it often, and the small display means the device is sleek and easy to wear. (And don’t worry, the display is still bright and easy to see.)</p><p>This tracker has incredibly accurate fitness tracking on board with a reliable heart rate monitor, as well as lots of sleep tracking features and a SpO2 monitor. We also like the physical side button, which is easier to use than a touch screen if your hands get sweaty while working out. </p><p>The Fitbit Charge 6 has connectivity with other smart workout equipment like Peloton, NordicTrack and Tonal. And since it has support for Google Maps and Google Wallet, you may be able to leave your phone at home while you’re out on a run.</p><p>At $99, this is a steal, so grab it while you can! I also recommend checking out our <a href="https://www.tomsguide.com/coupons/amazon.com">Amazon promo codes</a> and the <a href="https://www.tomsguide.com/wellness/running/15-deals-id-get-in-asics-sale-with-up-to-47-percent-off-running-shoes-and-apparel">best Asics deals with up to 47% off</a>. </p><div data-model-name="Fitbit Charge 6" data-widget-type="review" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 5 wearable tech predictions for 2026 — from futuristic Fitbits to the ever-elusive Apple Ring ]]></title>
                                                                                                <dc:content><![CDATA[ <p>2025 was an exciting year for wearable tech. Oura dropped a new smart ring, Apple updated every Apple Watch model in the lineup, Samsung brought back the clicky bezel for its flagship Galaxy Watch and lots of revolutionary new safety tools debuted—including hypertension detection (Apple) and loss of pulse detection (Google).</p><p>So, what does 2026 have in store for wearable devices? It’s time for me to once again gaze into the consumer tech crystal ball (I just updated the firmware) and make predictions for the year ahead. </p><p>With that in mind, here are the potential product drops I’m most excited for in 2026, from likely-to-launch models to total Hail Marys. </p><h3 class="article-body__section" id="section-apple-watch-series-12"><span>Apple Watch Series 12 </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="g6cEh4MumgB8V7qrZwi5Nc" name="Apple Watch Series 11-1" alt="Apple Watch Series 11 on a person's wrist" src="https://cdn.mos.cms.futurecdn.net/g6cEh4MumgB8V7qrZwi5Nc.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>You can bet your bottom dollar that Apple will debut a new Apple Watch Series 12 come fall, 2026. The Cupertino kid has maintained this release schedule for the brand’s flagship smartwatch for eleven years straight; the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch Series 11</a> is the latest installment. </p><p>With the wallet-friendly SE and rugged Ultra series refreshed every two to three years — and I don’t expect a new version of either for 2026 — this frees up Apple to focus solely on the Series 12.</p><p>Ultimately, the jump from the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-11-vs-apple-watch-10">Apple Watch Series 10 to the Series 11</a> is a minor one. The newer model sports the same case design and display, with better battery life, slightly tougher screen protection, optional 5G (vs. 4G-LTE), and not a whole lot else. </p><div><blockquote><p>The Series 12 might represent a more significant update, akin to the jump from the Series 9 to the Series 10.</p></blockquote></div><p>This leads me to believe that the Series 12 might represent a more significant update, akin to the jump from the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-10-vs-apple-watch-9-biggest-upgrades">Series 9 to the Series 10</a>, which brought about a new, sleeker case design, faster charging, and a better display.  </p><p>Rumors on the Apple Watch Series 12 are fairly thin as of writing, but upgraded health tracking tools, a more efficient and potentially brighter display, onboard Apple Intelligence features, and improved battery life are all possible. </p><h3 class="article-body__section" id="section-fitbit-charge-7"><span>Fitbit Charge 7</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3800px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="AfagmsVBggYaP7Ri4jaNEU" name="Charge-5-v-Charge-6-04.jpg" alt="Fitbit Charge 6 vs. Charge 5" src="https://cdn.mos.cms.futurecdn.net/AfagmsVBggYaP7Ri4jaNEU.jpg" mos="" align="middle" fullscreen="" width="3800" height="2138" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I’ve got to be honest, up until a few months ago, I really thought <a href="https://www.tomsguide.com/wellness/fitness-trackers/rip-fitbit-5-alternatives-to-fitbits-best-trackers-and-smartwatches">Fitbit was as good as dead</a>. However, reps from the brand casually mentioned <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-says-new-fitbit-hardware-is-coming-in-2026">new Fitbit models for 2026</a> during a press briefing on the latest AI-powered, personalized <a href="https://www.tomsguide.com/wellness/fitness/i-spent-20-minutes-chatting-with-fitbits-new-ai-fitness-coach-5-things-that-surprised-me">Fitbit Premium features</a> (the Fitbit app is also the default workout app on the Pixel Watch range).</p><p>With Google also acknowledging the <a href="https://www.tomsguide.com/wellness/smartwatches/google-just-killed-off-fitbit-smartwatches-and-nobody-should-be-surprised">end of the road for Fitbit-branded smartwatches</a>, the new models will likely come in the form of traditional fitness trackers. </p><div><blockquote><p>Despite debuting in 2023, the Fitbit Charge 6 remains the best fitness tracker available today.</p></blockquote></div><p>Despite debuting in 2023, the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> remains the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness tracker</a> available today, and gosh darn is it due for a refresh. Not only would such a move make my job as a wearables reviewer much easier — I recommend the Charge 6 frequently, but with the caveat that it's long in the tooth — it would likely keep the Fitbit name at the forefront of the best fitness tracker convo for the foreseeable future.</p><p>As far as features, rumors are far and few between. So, here’s what I’m hoping for in a Fitbit Charge 6: Improved battery life that lasts well over a week, an onboard altimeter for precision elevation data, dual-band GPS for better location tracking, onboard music storage, and a larger, brighter display… all in a similarly-sized package. Oh, and some additional smart features would be nice. </p><h3 class="article-body__section" id="section-fitbit-inspire-4"><span>Fitbit Inspire 4</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3500px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DoPYvNjBt4ygR6hHXQfTmY" name="Fitbit-Inspire3-set-up-8.jpg" alt="How to set up the Fitbit Inspire 3." src="https://cdn.mos.cms.futurecdn.net/DoPYvNjBt4ygR6hHXQfTmY.jpg" mos="" align="middle" fullscreen="" width="3500" height="1969" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The other likely Fitbit candidate due for a refresh is the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>, which debuted all the way back in 2022. This is Fitbit’s most entry-level, wallet-friendly option. It’s also the lightest, easiest-wearing Fitbit in the lineup.</p><p>Like a potential Charge 7, leaks and insider details on the Fitbit Inspire 4 amount to little. So once again, here’s what I’m wishing for: a larger and brighter screen, onboard GPS (even if it’s only single-band), support for NFC payments, onboard music storage, and a similarly affordable price to the Inspire 3 ($99).</p><h3 class="article-body__section" id="section-samsung-galaxy-ring-2"><span>Samsung Galaxy Ring 2</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gzxQxmJUpx6CdtEMQiYrKb" name="Galaxy-Ring-1.jpg" alt="The Samsung Galaxy Ring in a user's hand with blue painted fingernails" src="https://cdn.mos.cms.futurecdn.net/gzxQxmJUpx6CdtEMQiYrKb.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/samsung-galaxy-ring-review">Samsung Galaxy Ring</a> is roughly a year-and-a-half old. One of my top choices in our <a href="https://www.tomsguide.com/wellness/fitness-trackers/best-smart-rings">best smart ring guide</a>, unlike the wearables above, there are a number of <a href="https://www.tomsguide.com/wellness/fitness-trackers/samsung-galaxy-ring-2">Galaxy Ring 2 rumors</a> floating around, some more believable than others.</p><p>Potential upgrades include a thinner and more comfortable design, significant battery life gains, an onboard body temperature sensor, improved tracking accuracy, all sorts of new AI-based personalized training tools, and an expansion of the sizes. </p><p>As of writing, the Samsung Galaxy Ring is the closest smart ring to beating the<a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review"> Oura Ring 4</a>. No doubt, Samsung is eager to jump ahead of the competition with its follow-up device. With that in mind, if we do get a Galaxy Ring 2 in 2026, I’m betting it will be a fairly hefty upgrade. </p><h3 class="article-body__section" id="section-apple-ring"><span>Apple Ring</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xNKwFX2ybydJTPQ2dGxhAd" name="Apple Ring concept1.jpg" alt="A concept image of the Apple smart ring" src="https://cdn.mos.cms.futurecdn.net/xNKwFX2ybydJTPQ2dGxhAd.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Midjourney AI)</span></figcaption></figure><p>Okay, now we’re officially in ‘probably not going to happen’ territory, but a wearable tech journalist can dream. <a href="https://www.tomsguide.com/wellness/fitness-trackers/apple-ring-rumors-release-date-price-design-features#section-apple-ring-rumored-features">Rumors of an Apple Ring</a> have been circulating since before I was of legal drinking age (I’m 37). Over the year, Apple has filed all sorts of patents that seem to hint at a potential finger-based wearable.</p><p>The question is, are these patents being filed as a purely defensive move, or do Tim Cook and Co. actually have intentions to one day drop an Apple smart ring? I obviously cannot say; my crystal ball only sees so much. </p><p>If we do get an Apple Ring in 2026, and that’s an ‘if’ the size of the Burj Khalifa, it could be pretty darn cool. From <a href="https://www.tomsguide.com/wellness/smart-rings/rumored-apple-smart-ring-may-do-more-than-track-your-health-what-we-know">gesture controls</a> and an onboard voice assistant (here’s hoping for an <a href="https://www.tomsguide.com/phones/iphones/apples-reportedly-closing-in-on-a-deal-to-power-ai-siri-with-google-gemini-what-that-means-for-you">AI-powered Siri</a>) to advanced fitness-focused tools and seamless integration with all your other Apple products, I’d be first in line to try the Apple iRing.</p><p>What wearable technology launches are you most hoping for in 2026? And what are some features that might convince you to upgrade from your current wearable? Let me know in the comments below. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/google-exclusive-how-the-pixel-watch-3-got-a-life-saving-feature-the-apple-watch-cant-match">Google Exclusive: How the Pixel Watch 3 got a life-saving feature the Apple Watch can't match</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/5-biggest-wearables-predictions-for-2025-samsung-ar-smart-glasses-apple-watch-11-and-more">5 smartwatch and smart ring predictions for 2025 — Apple Watch Ultra 3, Samsung AR glasses and more</a></li><li><a href="https://www.tomsguide.com/wellness/smart-rings/i-test-smart-rings-5-battery-maintenance-tips-to-avoid-catastrophe">I test smart rings — 5 battery maintenance tips to avoid catastrophe</a></li></ul><div data-widget-type="review" data-model-name="Apple Watch 11,Samsung Galaxy Ring" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/5-biggest-wearable-tech-predictions-for-2026-from-new-fitbits-to-the-ever-elusive-apple-ring</link>
                                                                            <description>
                            <![CDATA[ From likely releases from Apple and Fitbit to long shots, these are the smartwatch and smart ring debuts I'm hoping for most in the new year. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">wuPCTdgecvA3fNkSsf92N</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/HZiASkxSpuMQBmVmc8cQhV-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 16 Dec 2025 08:01:00 +0000</pubDate>                                                                                                                                <updated>Fri, 19 Dec 2025 06:51:37 +0000</updated>
                                                                                                                                            <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/HZiASkxSpuMQBmVmc8cQhV-1280-80.jpg">
                                                            <media:credit><![CDATA[Copilot/DALL-E 3]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Smart Ring]]></media:description>                                                            <media:text><![CDATA[Apple Smart Ring]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Smart Ring]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/HZiASkxSpuMQBmVmc8cQhV-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>2025 was an exciting year for wearable tech. Oura dropped a new smart ring, Apple updated every Apple Watch model in the lineup, Samsung brought back the clicky bezel for its flagship Galaxy Watch and lots of revolutionary new safety tools debuted—including hypertension detection (Apple) and loss of pulse detection (Google).</p><p>So, what does 2026 have in store for wearable devices? It’s time for me to once again gaze into the consumer tech crystal ball (I just updated the firmware) and make predictions for the year ahead. </p><p>With that in mind, here are the potential product drops I’m most excited for in 2026, from likely-to-launch models to total Hail Marys. </p><h3 class="article-body__section" id="section-apple-watch-series-12"><span>Apple Watch Series 12 </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="g6cEh4MumgB8V7qrZwi5Nc" name="Apple Watch Series 11-1" alt="Apple Watch Series 11 on a person's wrist" src="https://cdn.mos.cms.futurecdn.net/g6cEh4MumgB8V7qrZwi5Nc.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>You can bet your bottom dollar that Apple will debut a new Apple Watch Series 12 come fall, 2026. The Cupertino kid has maintained this release schedule for the brand’s flagship smartwatch for eleven years straight; the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review">Apple Watch Series 11</a> is the latest installment. </p><p>With the wallet-friendly SE and rugged Ultra series refreshed every two to three years — and I don’t expect a new version of either for 2026 — this frees up Apple to focus solely on the Series 12.</p><p>Ultimately, the jump from the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-11-vs-apple-watch-10">Apple Watch Series 10 to the Series 11</a> is a minor one. The newer model sports the same case design and display, with better battery life, slightly tougher screen protection, optional 5G (vs. 4G-LTE), and not a whole lot else. </p><div><blockquote><p>The Series 12 might represent a more significant update, akin to the jump from the Series 9 to the Series 10.</p></blockquote></div><p>This leads me to believe that the Series 12 might represent a more significant update, akin to the jump from the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-10-vs-apple-watch-9-biggest-upgrades">Series 9 to the Series 10</a>, which brought about a new, sleeker case design, faster charging, and a better display.  </p><p>Rumors on the Apple Watch Series 12 are fairly thin as of writing, but upgraded health tracking tools, a more efficient and potentially brighter display, onboard Apple Intelligence features, and improved battery life are all possible. </p><h3 class="article-body__section" id="section-fitbit-charge-7"><span>Fitbit Charge 7</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3800px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="AfagmsVBggYaP7Ri4jaNEU" name="Charge-5-v-Charge-6-04.jpg" alt="Fitbit Charge 6 vs. Charge 5" src="https://cdn.mos.cms.futurecdn.net/AfagmsVBggYaP7Ri4jaNEU.jpg" mos="" align="middle" fullscreen="" width="3800" height="2138" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I’ve got to be honest, up until a few months ago, I really thought <a href="https://www.tomsguide.com/wellness/fitness-trackers/rip-fitbit-5-alternatives-to-fitbits-best-trackers-and-smartwatches">Fitbit was as good as dead</a>. However, reps from the brand casually mentioned <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-says-new-fitbit-hardware-is-coming-in-2026">new Fitbit models for 2026</a> during a press briefing on the latest AI-powered, personalized <a href="https://www.tomsguide.com/wellness/fitness/i-spent-20-minutes-chatting-with-fitbits-new-ai-fitness-coach-5-things-that-surprised-me">Fitbit Premium features</a> (the Fitbit app is also the default workout app on the Pixel Watch range).</p><p>With Google also acknowledging the <a href="https://www.tomsguide.com/wellness/smartwatches/google-just-killed-off-fitbit-smartwatches-and-nobody-should-be-surprised">end of the road for Fitbit-branded smartwatches</a>, the new models will likely come in the form of traditional fitness trackers. </p><div><blockquote><p>Despite debuting in 2023, the Fitbit Charge 6 remains the best fitness tracker available today.</p></blockquote></div><p>Despite debuting in 2023, the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> remains the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness tracker</a> available today, and gosh darn is it due for a refresh. Not only would such a move make my job as a wearables reviewer much easier — I recommend the Charge 6 frequently, but with the caveat that it's long in the tooth — it would likely keep the Fitbit name at the forefront of the best fitness tracker convo for the foreseeable future.</p><p>As far as features, rumors are far and few between. So, here’s what I’m hoping for in a Fitbit Charge 6: Improved battery life that lasts well over a week, an onboard altimeter for precision elevation data, dual-band GPS for better location tracking, onboard music storage, and a larger, brighter display… all in a similarly-sized package. Oh, and some additional smart features would be nice. </p><h3 class="article-body__section" id="section-fitbit-inspire-4"><span>Fitbit Inspire 4</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3500px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DoPYvNjBt4ygR6hHXQfTmY" name="Fitbit-Inspire3-set-up-8.jpg" alt="How to set up the Fitbit Inspire 3." src="https://cdn.mos.cms.futurecdn.net/DoPYvNjBt4ygR6hHXQfTmY.jpg" mos="" align="middle" fullscreen="" width="3500" height="1969" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The other likely Fitbit candidate due for a refresh is the <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>, which debuted all the way back in 2022. This is Fitbit’s most entry-level, wallet-friendly option. It’s also the lightest, easiest-wearing Fitbit in the lineup.</p><p>Like a potential Charge 7, leaks and insider details on the Fitbit Inspire 4 amount to little. So once again, here’s what I’m wishing for: a larger and brighter screen, onboard GPS (even if it’s only single-band), support for NFC payments, onboard music storage, and a similarly affordable price to the Inspire 3 ($99).</p><h3 class="article-body__section" id="section-samsung-galaxy-ring-2"><span>Samsung Galaxy Ring 2</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gzxQxmJUpx6CdtEMQiYrKb" name="Galaxy-Ring-1.jpg" alt="The Samsung Galaxy Ring in a user's hand with blue painted fingernails" src="https://cdn.mos.cms.futurecdn.net/gzxQxmJUpx6CdtEMQiYrKb.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/samsung-galaxy-ring-review">Samsung Galaxy Ring</a> is roughly a year-and-a-half old. One of my top choices in our <a href="https://www.tomsguide.com/wellness/fitness-trackers/best-smart-rings">best smart ring guide</a>, unlike the wearables above, there are a number of <a href="https://www.tomsguide.com/wellness/fitness-trackers/samsung-galaxy-ring-2">Galaxy Ring 2 rumors</a> floating around, some more believable than others.</p><p>Potential upgrades include a thinner and more comfortable design, significant battery life gains, an onboard body temperature sensor, improved tracking accuracy, all sorts of new AI-based personalized training tools, and an expansion of the sizes. </p><p>As of writing, the Samsung Galaxy Ring is the closest smart ring to beating the<a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review"> Oura Ring 4</a>. No doubt, Samsung is eager to jump ahead of the competition with its follow-up device. With that in mind, if we do get a Galaxy Ring 2 in 2026, I’m betting it will be a fairly hefty upgrade. </p><h3 class="article-body__section" id="section-apple-ring"><span>Apple Ring</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xNKwFX2ybydJTPQ2dGxhAd" name="Apple Ring concept1.jpg" alt="A concept image of the Apple smart ring" src="https://cdn.mos.cms.futurecdn.net/xNKwFX2ybydJTPQ2dGxhAd.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Midjourney AI)</span></figcaption></figure><p>Okay, now we’re officially in ‘probably not going to happen’ territory, but a wearable tech journalist can dream. <a href="https://www.tomsguide.com/wellness/fitness-trackers/apple-ring-rumors-release-date-price-design-features#section-apple-ring-rumored-features">Rumors of an Apple Ring</a> have been circulating since before I was of legal drinking age (I’m 37). Over the year, Apple has filed all sorts of patents that seem to hint at a potential finger-based wearable.</p><p>The question is, are these patents being filed as a purely defensive move, or do Tim Cook and Co. actually have intentions to one day drop an Apple smart ring? I obviously cannot say; my crystal ball only sees so much. </p><p>If we do get an Apple Ring in 2026, and that’s an ‘if’ the size of the Burj Khalifa, it could be pretty darn cool. From <a href="https://www.tomsguide.com/wellness/smart-rings/rumored-apple-smart-ring-may-do-more-than-track-your-health-what-we-know">gesture controls</a> and an onboard voice assistant (here’s hoping for an <a href="https://www.tomsguide.com/phones/iphones/apples-reportedly-closing-in-on-a-deal-to-power-ai-siri-with-google-gemini-what-that-means-for-you">AI-powered Siri</a>) to advanced fitness-focused tools and seamless integration with all your other Apple products, I’d be first in line to try the Apple iRing.</p><p>What wearable technology launches are you most hoping for in 2026? And what are some features that might convince you to upgrade from your current wearable? Let me know in the comments below. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/google-exclusive-how-the-pixel-watch-3-got-a-life-saving-feature-the-apple-watch-cant-match">Google Exclusive: How the Pixel Watch 3 got a life-saving feature the Apple Watch can't match</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/5-biggest-wearables-predictions-for-2025-samsung-ar-smart-glasses-apple-watch-11-and-more">5 smartwatch and smart ring predictions for 2025 — Apple Watch Ultra 3, Samsung AR glasses and more</a></li><li><a href="https://www.tomsguide.com/wellness/smart-rings/i-test-smart-rings-5-battery-maintenance-tips-to-avoid-catastrophe">I test smart rings — 5 battery maintenance tips to avoid catastrophe</a></li></ul><div data-widget-type="review" data-model-name="Apple Watch 11,Samsung Galaxy Ring" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ These 5 smartwatches are still on sale — including the latest from Apple and Garmin ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I've been monitoring smartwatch deals for the past two months, and five of my favorite models remain discounted at their lowest-ever price, including models from Apple, Garmin, Google, and Samsung.</p><p>The latest <a href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H?th=1" target="_blank" rel="nofollow">Apple Watch SE 3 is just $199</a>, down from $249, and one of my favorite watches of 2025, the <a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH?th=1" target="_blank" rel="nofollow">Garmin Instinct 3 Solar, is only $299</a>, reduced from $399.</p><p>Find details on these epic smartwatch deals, plus three more, below. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>Apple Watch SE 3: </strong><a href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H?th=1" target="_blank" rel="nofollow"><strong>was $249 now $199 @ Amazon</strong></a></li><li><strong>Apple Watch Series 11: </strong><a href="https://www.amazon.com/dp/B0FQFL8PZ5?th=1" target="_blank" rel="nofollow"><strong>was $399 now $329 @ Amazon</strong></a></li><li><strong>Garmin Instinct 3 Solar: </strong><a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH/" target="_blank" rel="nofollow"><strong>was $399 now $299 @ Amazon</strong></a></li><li><strong>Google Pixel Watch 4: </strong><a href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJWQP6LX/ref=sr_1_3" target="_blank" rel="nofollow"><strong>was $399 now $349 @ Amazon</strong></a></li><li><strong>Samsung Galaxy Watch 8 Classic: </strong><a href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Rotating-Coaching/dp/B0F7PS35R2/?th=1" target="_blank" rel="nofollow"><strong>was $499 now $399 @ Amazon </strong></a></li></ul><h3 class="article-body__section" id="section-best-smartwatch-deals"><span>Best smartwatch deals</span></h3><div class="product"><a data-dimension112="b5ebfdd7-573b-4cec-8f9f-f5a823d652a9" data-action="Deal Block" data-label="Watch SE 3 (40mm)" data-dimension48="Watch SE 3 (40mm)" data-dimension25="$199" href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1274px;"><p class="vanilla-image-block" style="padding-top:117.74%;"><img id="86u2sTbKJqjie24DWxKo35" name="Apple Watch SE 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/86u2sTbKJqjie24DWxKo35.jpg" mos="" align="middle" fullscreen="" width="1274" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H" target="_blank" rel="nofollow" data-dimension112="b5ebfdd7-573b-4cec-8f9f-f5a823d652a9" data-action="Deal Block" data-label="Watch SE 3 (40mm)" data-dimension48="Watch SE 3 (40mm)" data-dimension25="$199">Watch SE 3 (40mm): was $249 now $199</a></strong><br>Real talk: The <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3</a> is my favorite model in the 2025 series. Though it lacks some of the higher-end wellness tech of its pricier siblings, it covers all the basics, with impressive sleep insights, loads of fitness tracking and training tools, useful safety features, and no shortage of apps.<a class="view-deal button" href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H" target="_blank" rel="nofollow" data-dimension112="b5ebfdd7-573b-4cec-8f9f-f5a823d652a9" data-action="Deal Block" data-label="Watch SE 3 (40mm)" data-dimension48="Watch SE 3 (40mm)" data-dimension25="$199">View Deal</a></p></div><div class="product"><a data-dimension112="b7cff08c-f38d-4b2f-b503-b8ba3341ddba" data-action="Deal Block" data-label="Watch Series 11 (42mm)" data-dimension48="Watch Series 11 (42mm)" data-dimension25="$329" href="https://www.amazon.com/dp/B0FQFL8PZ5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:118.67%;"><img id="zpTresKtjPzk37YdCtdZd9" name="Apple Watch 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zpTresKtjPzk37YdCtdZd9.jpg" mos="" align="middle" fullscreen="" width="1264" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FQFL8PZ5" target="_blank" rel="nofollow" data-dimension112="b7cff08c-f38d-4b2f-b503-b8ba3341ddba" data-action="Deal Block" data-label="Watch Series 11 (42mm)" data-dimension48="Watch Series 11 (42mm)" data-dimension25="$329">Watch Series 11 (42mm): was $399 now $329</a></strong><br>The Apple Watch Series 11 is currently selling for its all-time lowest price of $329 for the 42mm GPS model, or $70 off. Longer lasting than the SE 3, it gets up to 24 hours per charge versus 18 hours. The Series 11 also has a brighter screen and state-of-the-art life-saving wellness tools, including hypertension alerts. All this adds up to the <a href="https://www.tomsguide.com/best-picks/best-apple-watch#section-the-best-apple-watch-for-most-people">best Apple Watch</a> for most people in 2025. <a class="view-deal button" href="https://www.amazon.com/dp/B0FQFL8PZ5" target="_blank" rel="nofollow" data-dimension112="b7cff08c-f38d-4b2f-b503-b8ba3341ddba" data-action="Deal Block" data-label="Watch Series 11 (42mm)" data-dimension48="Watch Series 11 (42mm)" data-dimension25="$329">View Deal</a></p></div><div class="product"><a data-dimension112="a77fc897-0a4d-4caa-add2-65f401ef2055" data-action="Deal Block" data-label="Instinct 3 Solar (45mm)" data-dimension48="Instinct 3 Solar (45mm)" data-dimension25="$299" href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1301px;"><p class="vanilla-image-block" style="padding-top:100.08%;"><img id="BvUtL659GJKq3dpf6SzYqV" name="Instinct-3-Solar-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BvUtL659GJKq3dpf6SzYqV.jpg" mos="" align="middle" fullscreen="" width="1301" height="1302" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH/" target="_blank" rel="nofollow" data-dimension112="a77fc897-0a4d-4caa-add2-65f401ef2055" data-action="Deal Block" data-label="Instinct 3 Solar (45mm)" data-dimension48="Instinct 3 Solar (45mm)" data-dimension25="$299">Instinct 3 Solar (45mm): was $399 now $299</a></strong><br>The <a href="https://www.tomsguide.com/Garmin-Instinct-3-review">Garmin Instinct 3</a> is not only my favorite Garmin release of 2025, but my top smartwatch for tracking hikes and other <a href="https://www.tomsguide.com/wellness/smartwatches/i-skied-17-000-feet-of-vertical-with-the-garmin-instinct-3-heres-5-things-i-learned">outdoor adventures</a>. And it's finally on sale! Save $100 off the 45mm Solar model. While the <a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSC754NH/?th=1" target="_blank" rel="nofollow">AMOLED Instinct 3 is also discounted</a>, it isn't nearly as long-lasting. That said, all Instinct 3 variations offer rock-solid location and elevation tracking with support for an enormous range of activity types. A shock-proof design with 100 meters of water resistance, along with a built-in LED flashlight, only adds to its appeal. <a class="view-deal button" href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH/" target="_blank" rel="nofollow" data-dimension112="a77fc897-0a4d-4caa-add2-65f401ef2055" data-action="Deal Block" data-label="Instinct 3 Solar (45mm)" data-dimension48="Instinct 3 Solar (45mm)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="4c7f9ae1-6dd1-4d13-af46-150ccc862db1" data-action="Deal Block" data-label="Venu 4 (41mm)" data-dimension48="Venu 4 (41mm)" data-dimension25="$449" href="https://www.bestbuy.com/product/garmin-venu-4-gps-smartwatch-41-mm-fiber-reinforced-polymer-lunar-gold-2025/JXF9YF5F6Z/sku/6646700" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="uNEaedibtPLvvSPRdufPPc" name="Garmin Venu 4 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uNEaedibtPLvvSPRdufPPc.jpg" mos="" align="middle" fullscreen="" width="1600" height="1600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/garmin-venu-4-gps-smartwatch-41-mm-fiber-reinforced-polymer-lunar-gold-2025/JXF9YF5F6Z/sku/6646700" target="_blank" rel="nofollow" data-dimension112="4c7f9ae1-6dd1-4d13-af46-150ccc862db1" data-action="Deal Block" data-label="Venu 4 (41mm)" data-dimension48="Venu 4 (41mm)" data-dimension25="$449">Venu 4 (41mm): was $499 now $449</a></strong><br>The <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-venu-4-review">Garmin Venu 4</a> is a stylish and long-lasting smartwatch with just the right amount of fitness tracking and wellness monitoring tech to meet the needs of most folks. With an ultra-bright AMOLED screen, and smart features including support for NFC payments and Google Maps, onboard music storage, a mic and speaker for taking calls from a paired phone, and loads of safety tools, it's easily Garmin's closest competitor to the Apple Watch 11 above.  <a class="view-deal button" href="https://www.bestbuy.com/product/garmin-venu-4-gps-smartwatch-41-mm-fiber-reinforced-polymer-lunar-gold-2025/JXF9YF5F6Z/sku/6646700" target="_blank" rel="nofollow" data-dimension112="4c7f9ae1-6dd1-4d13-af46-150ccc862db1" data-action="Deal Block" data-label="Venu 4 (41mm)" data-dimension48="Venu 4 (41mm)" data-dimension25="$449">View Deal</a></p></div><div class="product"><a data-dimension112="8eb6df71-0bd7-4225-ac78-25851ebd16c9" data-action="Deal Block" data-label="Pixel Watch 4 (45mm)" data-dimension48="Pixel Watch 4 (45mm)" data-dimension25="$349" href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJWQP6LX/ref=sr_1_3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:969px;"><p class="vanilla-image-block" style="padding-top:154.80%;"><img id="brGPm4gsnAxhQW2LVKdTzM" name="Google Pixel Watch 4 LTE" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/brGPm4gsnAxhQW2LVKdTzM.png" mos="" align="middle" fullscreen="" width="969" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJWQP6LX/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="8eb6df71-0bd7-4225-ac78-25851ebd16c9" data-action="Deal Block" data-label="Pixel Watch 4 (45mm)" data-dimension48="Pixel Watch 4 (45mm)" data-dimension25="$349">Pixel Watch 4 (45mm): was $399 now $349</a></strong><br>The <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Google Pixel Watch 4</a> is the <a href="https://www.tomsguide.com/best-picks/best-smartwatches-android#section-the-best-android-smartwatch-overall">best smartwatch for Android</a> in 2025, specifically, the larger 45mm model. It boasts a slightly larger screen than the 41mm model (<a href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJW36Y5Q/ref=sr_1_3?th=1" target="_blank" rel="nofollow">also on sale</a>), along with superior battery life. In my testing, the 45mm Pixel Watch 4 lasts for up to <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android#section-google-pixel-watch-4-battery-life">60 hours per charge</a>. You also get comprehensive wellness and fitness tracking tools and access to the best AI-powered smartwatch voice assistant, Gemini. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJWQP6LX/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="8eb6df71-0bd7-4225-ac78-25851ebd16c9" data-action="Deal Block" data-label="Pixel Watch 4 (45mm)" data-dimension48="Pixel Watch 4 (45mm)" data-dimension25="$349">View Deal</a></p></div><div class="product"><a data-dimension112="071822bc-3838-4c17-a9d8-33dd4f930030" data-action="Deal Block" data-label="Galaxy Watch 8 (41mm)" data-dimension48="Galaxy Watch 8 (41mm)" data-dimension25="$249" href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Coaching-Tracking/dp/B0F7QD4HSD/ref=sr_1_1?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1108px;"><p class="vanilla-image-block" style="padding-top:117.51%;"><img id="tZoi7VwBvACpxuPpDLW2Nh" name="Galaxy Watch 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tZoi7VwBvACpxuPpDLW2Nh.jpg" mos="" align="middle" fullscreen="" width="1108" height="1302" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Coaching-Tracking/dp/B0F7QD4HSD/ref=sr_1_1?th=1" target="_blank" rel="nofollow" data-dimension112="071822bc-3838-4c17-a9d8-33dd4f930030" data-action="Deal Block" data-label="Galaxy Watch 8 (41mm)" data-dimension48="Galaxy Watch 8 (41mm)" data-dimension25="$249">Galaxy Watch 8 (41mm): was $349 now $249</a></strong><br>Samsung's latest <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review">Galaxy Watch 8</a> smartwatch is on sale for a respectable 29% off during Cyber Monday, its biggest discount yet. With an updated 'cushion' style case, an ultra-bright AMOLED screen, and seriously impressive AI-powered wellness tools and insights, it's no wonder we chose the Galaxy Watch 8 as one of the <a href="https://www.tomsguide.com/best-picks/best-smartwatches-android#section-best-android-smartwatch-with-gemini">best smartwatch models</a> of the year. <a class="view-deal button" href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Coaching-Tracking/dp/B0F7QD4HSD/ref=sr_1_1?th=1" target="_blank" rel="nofollow" data-dimension112="071822bc-3838-4c17-a9d8-33dd4f930030" data-action="Deal Block" data-label="Galaxy Watch 8 (41mm)" data-dimension48="Galaxy Watch 8 (41mm)" data-dimension25="$249">View Deal</a></p></div><div class="product"><a data-dimension112="e0fab25c-018b-4dd8-bcea-70f808c4c39d" data-action="Deal Block" data-label="Galaxy Watch 8 Classic" data-dimension48="Galaxy Watch 8 Classic" data-dimension25="$399" href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Rotating-Coaching/dp/B0F7PS35R2/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1279px;"><p class="vanilla-image-block" style="padding-top:117.28%;"><img id="foy6D5439kfhX9etqvXcLk" name="Galaxy Watch 8 Classic deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/foy6D5439kfhX9etqvXcLk.jpg" mos="" align="middle" fullscreen="" width="1279" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Samsung brought back the fan-favorite 'Classic' edition of its flagship smartwatch for 2025. The Galaxy Watch 8 Classic boasts a useful and fidget-friendly clicky bezel for navigation and extra customizable buttons on the side of the case. That said, the guts are essentially the same as the standard Galaxy Watch 8. However, the Classic is much <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review#section-samsung-galaxy-watch-8-battery-life" data-dimension112="e0fab25c-018b-4dd8-bcea-70f808c4c39d" data-action="Deal Block" data-label="Galaxy Watch 8 Classic" data-dimension48="Galaxy Watch 8 Classic" data-dimension25="$399">longer-lasting</a>.<a class="view-deal button" href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Rotating-Coaching/dp/B0F7PS35R2/" target="_blank" rel="nofollow" data-dimension112="e0fab25c-018b-4dd8-bcea-70f808c4c39d" data-action="Deal Block" data-label="Galaxy Watch 8 Classic" data-dimension48="Galaxy Watch 8 Classic" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="abcf1c18-399b-49ed-8205-4dc1db84b3c8" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XJdcnPAkGqaCLqcmrHCQib" name="Fitbit Charge 6.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XJdcnPAkGqaCLqcmrHCQib.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I realize that the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="abcf1c18-399b-49ed-8205-4dc1db84b3c8" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">Fitbit Charge 6</a> is neither new (it launched in 2023) nor technically a smartwatch. However, I felt compelled to include it in this list because 1. It remains the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness tracker</a> money can buy, and 2. It is rarely discounted this much. Extremely comfortable, with up to a week of battery and plenty of fitness tracking modes, the Charge 6 also sports a small but bright AMOLED screen and access to handy smart apps like Google Maps and Google Wallet. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="abcf1c18-399b-49ed-8205-4dc1db84b3c8" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><div data-name="Buying Guide Multimodel widget" data-widget-title="Today’s fitness tracker deals" data-widget-type="multimodelreview" data-model-name="Apple Watch 11,Apple Watch SE 3,Garmin Instinct 3,Garmin Venu 4,Samsung Galaxy Watch 8,Samsung Galaxy Watch 8 Classic,Google Pixel Watch 4" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/all-of-our-favorite-smartwatches-are-still-on-sale-for-cyber-monday-including-my-favorite-apple-watch-and-garmin</link>
                                                                            <description>
                            <![CDATA[ The latest smartwatches from Apple, Garmin, Google, and Samsung continue to sell for their lowest price ever. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">tsVULX5uA4VcuidvAnXFoC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ifNkDfjTiBhiy4T7xaRX6a-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 02 Dec 2025 02:01:29 +0000</pubDate>                                                                                                                                <updated>Tue, 02 Dec 2025 21:08:06 +0000</updated>
                                                                                                                                            <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ifNkDfjTiBhiy4T7xaRX6a-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Garmin Instinct 3 and Apple Watch Series 11]]></media:description>                                                            <media:text><![CDATA[Close-up of the Garmin Instinct 3 and Apple Watch Series 11]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Garmin Instinct 3 and Apple Watch Series 11]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ifNkDfjTiBhiy4T7xaRX6a-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I've been monitoring smartwatch deals for the past two months, and five of my favorite models remain discounted at their lowest-ever price, including models from Apple, Garmin, Google, and Samsung.</p><p>The latest <a href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H?th=1" target="_blank" rel="nofollow">Apple Watch SE 3 is just $199</a>, down from $249, and one of my favorite watches of 2025, the <a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH?th=1" target="_blank" rel="nofollow">Garmin Instinct 3 Solar, is only $299</a>, reduced from $399.</p><p>Find details on these epic smartwatch deals, plus three more, below. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>Apple Watch SE 3: </strong><a href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H?th=1" target="_blank" rel="nofollow"><strong>was $249 now $199 @ Amazon</strong></a></li><li><strong>Apple Watch Series 11: </strong><a href="https://www.amazon.com/dp/B0FQFL8PZ5?th=1" target="_blank" rel="nofollow"><strong>was $399 now $329 @ Amazon</strong></a></li><li><strong>Garmin Instinct 3 Solar: </strong><a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH/" target="_blank" rel="nofollow"><strong>was $399 now $299 @ Amazon</strong></a></li><li><strong>Google Pixel Watch 4: </strong><a href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJWQP6LX/ref=sr_1_3" target="_blank" rel="nofollow"><strong>was $399 now $349 @ Amazon</strong></a></li><li><strong>Samsung Galaxy Watch 8 Classic: </strong><a href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Rotating-Coaching/dp/B0F7PS35R2/?th=1" target="_blank" rel="nofollow"><strong>was $499 now $399 @ Amazon </strong></a></li></ul><h3 class="article-body__section" id="section-best-smartwatch-deals"><span>Best smartwatch deals</span></h3><div class="product"><a data-dimension112="b5ebfdd7-573b-4cec-8f9f-f5a823d652a9" data-action="Deal Block" data-label="Watch SE 3 (40mm)" data-dimension48="Watch SE 3 (40mm)" data-dimension25="$199" href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1274px;"><p class="vanilla-image-block" style="padding-top:117.74%;"><img id="86u2sTbKJqjie24DWxKo35" name="Apple Watch SE 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/86u2sTbKJqjie24DWxKo35.jpg" mos="" align="middle" fullscreen="" width="1274" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H" target="_blank" rel="nofollow" data-dimension112="b5ebfdd7-573b-4cec-8f9f-f5a823d652a9" data-action="Deal Block" data-label="Watch SE 3 (40mm)" data-dimension48="Watch SE 3 (40mm)" data-dimension25="$199">Watch SE 3 (40mm): was $249 now $199</a></strong><br>Real talk: The <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3</a> is my favorite model in the 2025 series. Though it lacks some of the higher-end wellness tech of its pricier siblings, it covers all the basics, with impressive sleep insights, loads of fitness tracking and training tools, useful safety features, and no shortage of apps.<a class="view-deal button" href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFW7M9H" target="_blank" rel="nofollow" data-dimension112="b5ebfdd7-573b-4cec-8f9f-f5a823d652a9" data-action="Deal Block" data-label="Watch SE 3 (40mm)" data-dimension48="Watch SE 3 (40mm)" data-dimension25="$199">View Deal</a></p></div><div class="product"><a data-dimension112="b7cff08c-f38d-4b2f-b503-b8ba3341ddba" data-action="Deal Block" data-label="Watch Series 11 (42mm)" data-dimension48="Watch Series 11 (42mm)" data-dimension25="$329" href="https://www.amazon.com/dp/B0FQFL8PZ5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:118.67%;"><img id="zpTresKtjPzk37YdCtdZd9" name="Apple Watch 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zpTresKtjPzk37YdCtdZd9.jpg" mos="" align="middle" fullscreen="" width="1264" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FQFL8PZ5" target="_blank" rel="nofollow" data-dimension112="b7cff08c-f38d-4b2f-b503-b8ba3341ddba" data-action="Deal Block" data-label="Watch Series 11 (42mm)" data-dimension48="Watch Series 11 (42mm)" data-dimension25="$329">Watch Series 11 (42mm): was $399 now $329</a></strong><br>The Apple Watch Series 11 is currently selling for its all-time lowest price of $329 for the 42mm GPS model, or $70 off. Longer lasting than the SE 3, it gets up to 24 hours per charge versus 18 hours. The Series 11 also has a brighter screen and state-of-the-art life-saving wellness tools, including hypertension alerts. All this adds up to the <a href="https://www.tomsguide.com/best-picks/best-apple-watch#section-the-best-apple-watch-for-most-people">best Apple Watch</a> for most people in 2025. <a class="view-deal button" href="https://www.amazon.com/dp/B0FQFL8PZ5" target="_blank" rel="nofollow" data-dimension112="b7cff08c-f38d-4b2f-b503-b8ba3341ddba" data-action="Deal Block" data-label="Watch Series 11 (42mm)" data-dimension48="Watch Series 11 (42mm)" data-dimension25="$329">View Deal</a></p></div><div class="product"><a data-dimension112="a77fc897-0a4d-4caa-add2-65f401ef2055" data-action="Deal Block" data-label="Instinct 3 Solar (45mm)" data-dimension48="Instinct 3 Solar (45mm)" data-dimension25="$299" href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1301px;"><p class="vanilla-image-block" style="padding-top:100.08%;"><img id="BvUtL659GJKq3dpf6SzYqV" name="Instinct-3-Solar-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BvUtL659GJKq3dpf6SzYqV.jpg" mos="" align="middle" fullscreen="" width="1301" height="1302" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH/" target="_blank" rel="nofollow" data-dimension112="a77fc897-0a4d-4caa-add2-65f401ef2055" data-action="Deal Block" data-label="Instinct 3 Solar (45mm)" data-dimension48="Instinct 3 Solar (45mm)" data-dimension25="$299">Instinct 3 Solar (45mm): was $399 now $299</a></strong><br>The <a href="https://www.tomsguide.com/Garmin-Instinct-3-review">Garmin Instinct 3</a> is not only my favorite Garmin release of 2025, but my top smartwatch for tracking hikes and other <a href="https://www.tomsguide.com/wellness/smartwatches/i-skied-17-000-feet-of-vertical-with-the-garmin-instinct-3-heres-5-things-i-learned">outdoor adventures</a>. And it's finally on sale! Save $100 off the 45mm Solar model. While the <a href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSC754NH/?th=1" target="_blank" rel="nofollow">AMOLED Instinct 3 is also discounted</a>, it isn't nearly as long-lasting. That said, all Instinct 3 variations offer rock-solid location and elevation tracking with support for an enormous range of activity types. A shock-proof design with 100 meters of water resistance, along with a built-in LED flashlight, only adds to its appeal. <a class="view-deal button" href="https://www.amazon.com/Garmin-Instinct%C2%AE-Smartwatch-Metal-Reinforced-Flashlight/dp/B0DSG9VCRH/" target="_blank" rel="nofollow" data-dimension112="a77fc897-0a4d-4caa-add2-65f401ef2055" data-action="Deal Block" data-label="Instinct 3 Solar (45mm)" data-dimension48="Instinct 3 Solar (45mm)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="4c7f9ae1-6dd1-4d13-af46-150ccc862db1" data-action="Deal Block" data-label="Venu 4 (41mm)" data-dimension48="Venu 4 (41mm)" data-dimension25="$449" href="https://www.bestbuy.com/product/garmin-venu-4-gps-smartwatch-41-mm-fiber-reinforced-polymer-lunar-gold-2025/JXF9YF5F6Z/sku/6646700" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="uNEaedibtPLvvSPRdufPPc" name="Garmin Venu 4 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uNEaedibtPLvvSPRdufPPc.jpg" mos="" align="middle" fullscreen="" width="1600" height="1600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/garmin-venu-4-gps-smartwatch-41-mm-fiber-reinforced-polymer-lunar-gold-2025/JXF9YF5F6Z/sku/6646700" target="_blank" rel="nofollow" data-dimension112="4c7f9ae1-6dd1-4d13-af46-150ccc862db1" data-action="Deal Block" data-label="Venu 4 (41mm)" data-dimension48="Venu 4 (41mm)" data-dimension25="$449">Venu 4 (41mm): was $499 now $449</a></strong><br>The <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-venu-4-review">Garmin Venu 4</a> is a stylish and long-lasting smartwatch with just the right amount of fitness tracking and wellness monitoring tech to meet the needs of most folks. With an ultra-bright AMOLED screen, and smart features including support for NFC payments and Google Maps, onboard music storage, a mic and speaker for taking calls from a paired phone, and loads of safety tools, it's easily Garmin's closest competitor to the Apple Watch 11 above.  <a class="view-deal button" href="https://www.bestbuy.com/product/garmin-venu-4-gps-smartwatch-41-mm-fiber-reinforced-polymer-lunar-gold-2025/JXF9YF5F6Z/sku/6646700" target="_blank" rel="nofollow" data-dimension112="4c7f9ae1-6dd1-4d13-af46-150ccc862db1" data-action="Deal Block" data-label="Venu 4 (41mm)" data-dimension48="Venu 4 (41mm)" data-dimension25="$449">View Deal</a></p></div><div class="product"><a data-dimension112="8eb6df71-0bd7-4225-ac78-25851ebd16c9" data-action="Deal Block" data-label="Pixel Watch 4 (45mm)" data-dimension48="Pixel Watch 4 (45mm)" data-dimension25="$349" href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJWQP6LX/ref=sr_1_3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:969px;"><p class="vanilla-image-block" style="padding-top:154.80%;"><img id="brGPm4gsnAxhQW2LVKdTzM" name="Google Pixel Watch 4 LTE" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/brGPm4gsnAxhQW2LVKdTzM.png" mos="" align="middle" fullscreen="" width="969" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJWQP6LX/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="8eb6df71-0bd7-4225-ac78-25851ebd16c9" data-action="Deal Block" data-label="Pixel Watch 4 (45mm)" data-dimension48="Pixel Watch 4 (45mm)" data-dimension25="$349">Pixel Watch 4 (45mm): was $399 now $349</a></strong><br>The <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Google Pixel Watch 4</a> is the <a href="https://www.tomsguide.com/best-picks/best-smartwatches-android#section-the-best-android-smartwatch-overall">best smartwatch for Android</a> in 2025, specifically, the larger 45mm model. It boasts a slightly larger screen than the 41mm model (<a href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJW36Y5Q/ref=sr_1_3?th=1" target="_blank" rel="nofollow">also on sale</a>), along with superior battery life. In my testing, the 45mm Pixel Watch 4 lasts for up to <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android#section-google-pixel-watch-4-battery-life">60 hours per charge</a>. You also get comprehensive wellness and fitness tracking tools and access to the best AI-powered smartwatch voice assistant, Gemini. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Watch-45mm-Smartwatch/dp/B0FJWQP6LX/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="8eb6df71-0bd7-4225-ac78-25851ebd16c9" data-action="Deal Block" data-label="Pixel Watch 4 (45mm)" data-dimension48="Pixel Watch 4 (45mm)" data-dimension25="$349">View Deal</a></p></div><div class="product"><a data-dimension112="071822bc-3838-4c17-a9d8-33dd4f930030" data-action="Deal Block" data-label="Galaxy Watch 8 (41mm)" data-dimension48="Galaxy Watch 8 (41mm)" data-dimension25="$249" href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Coaching-Tracking/dp/B0F7QD4HSD/ref=sr_1_1?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1108px;"><p class="vanilla-image-block" style="padding-top:117.51%;"><img id="tZoi7VwBvACpxuPpDLW2Nh" name="Galaxy Watch 8 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tZoi7VwBvACpxuPpDLW2Nh.jpg" mos="" align="middle" fullscreen="" width="1108" height="1302" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Coaching-Tracking/dp/B0F7QD4HSD/ref=sr_1_1?th=1" target="_blank" rel="nofollow" data-dimension112="071822bc-3838-4c17-a9d8-33dd4f930030" data-action="Deal Block" data-label="Galaxy Watch 8 (41mm)" data-dimension48="Galaxy Watch 8 (41mm)" data-dimension25="$249">Galaxy Watch 8 (41mm): was $349 now $249</a></strong><br>Samsung's latest <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review">Galaxy Watch 8</a> smartwatch is on sale for a respectable 29% off during Cyber Monday, its biggest discount yet. With an updated 'cushion' style case, an ultra-bright AMOLED screen, and seriously impressive AI-powered wellness tools and insights, it's no wonder we chose the Galaxy Watch 8 as one of the <a href="https://www.tomsguide.com/best-picks/best-smartwatches-android#section-best-android-smartwatch-with-gemini">best smartwatch models</a> of the year. <a class="view-deal button" href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Coaching-Tracking/dp/B0F7QD4HSD/ref=sr_1_1?th=1" target="_blank" rel="nofollow" data-dimension112="071822bc-3838-4c17-a9d8-33dd4f930030" data-action="Deal Block" data-label="Galaxy Watch 8 (41mm)" data-dimension48="Galaxy Watch 8 (41mm)" data-dimension25="$249">View Deal</a></p></div><div class="product"><a data-dimension112="e0fab25c-018b-4dd8-bcea-70f808c4c39d" data-action="Deal Block" data-label="Galaxy Watch 8 Classic" data-dimension48="Galaxy Watch 8 Classic" data-dimension25="$399" href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Rotating-Coaching/dp/B0F7PS35R2/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1279px;"><p class="vanilla-image-block" style="padding-top:117.28%;"><img id="foy6D5439kfhX9etqvXcLk" name="Galaxy Watch 8 Classic deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/foy6D5439kfhX9etqvXcLk.jpg" mos="" align="middle" fullscreen="" width="1279" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Samsung brought back the fan-favorite 'Classic' edition of its flagship smartwatch for 2025. The Galaxy Watch 8 Classic boasts a useful and fidget-friendly clicky bezel for navigation and extra customizable buttons on the side of the case. That said, the guts are essentially the same as the standard Galaxy Watch 8. However, the Classic is much <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review#section-samsung-galaxy-watch-8-battery-life" data-dimension112="e0fab25c-018b-4dd8-bcea-70f808c4c39d" data-action="Deal Block" data-label="Galaxy Watch 8 Classic" data-dimension48="Galaxy Watch 8 Classic" data-dimension25="$399">longer-lasting</a>.<a class="view-deal button" href="https://www.amazon.com/Samsung-Bluetooth-Smartwatch-Rotating-Coaching/dp/B0F7PS35R2/" target="_blank" rel="nofollow" data-dimension112="e0fab25c-018b-4dd8-bcea-70f808c4c39d" data-action="Deal Block" data-label="Galaxy Watch 8 Classic" data-dimension48="Galaxy Watch 8 Classic" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="abcf1c18-399b-49ed-8205-4dc1db84b3c8" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XJdcnPAkGqaCLqcmrHCQib" name="Fitbit Charge 6.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XJdcnPAkGqaCLqcmrHCQib.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I realize that the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="abcf1c18-399b-49ed-8205-4dc1db84b3c8" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">Fitbit Charge 6</a> is neither new (it launched in 2023) nor technically a smartwatch. However, I felt compelled to include it in this list because 1. It remains the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness tracker</a> money can buy, and 2. It is rarely discounted this much. Extremely comfortable, with up to a week of battery and plenty of fitness tracking modes, the Charge 6 also sports a small but bright AMOLED screen and access to handy smart apps like Google Maps and Google Wallet. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="abcf1c18-399b-49ed-8205-4dc1db84b3c8" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><div data-name="Buying Guide Multimodel widget" data-widget-title="Today’s fitness tracker deals" data-widget-type="multimodelreview" data-model-name="Apple Watch 11,Apple Watch SE 3,Garmin Instinct 3,Garmin Venu 4,Samsung Galaxy Watch 8,Samsung Galaxy Watch 8 Classic,Google Pixel Watch 4" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I had a long, frank conversation with an AI 'fitness coach' — and it wasn't nearly as weird or awkward as I expected  ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If the idea of a 20-minute chat with an AI fitness coach makes you feel a little uneasy, you're not alone. This is why I initially shrugged when Google first mentioned its forthcoming Fitbit 'Coach' feature, powered by Gemini AI, during this summer's launch of the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a>.</p><p>In the past 12 months, nearly every smartwatch and smart ring maker has rushed to incorporate shiny new AI tools within their companion apps, supposedly with the goal of creating a more personalized and informative user experience. However, from my experience testing these new features so far, none really live up to the hype.</p><p>At best, AI-based wellness assistants are able to surface your holistic metrics when called upon and provide slightly better-than-common-sense answers to queries. Some, like Apple's <a href="https://www.tomsguide.com/wellness/fitness/i-ran-15-miles-with-the-apple-watchs-new-workout-buddy-heres-my-verdict">Workout Buddy</a> and Samsung's <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review#section-samsung-galaxy-watch-8-health-and-fitness-tracking">Running Coach</a>, can even create customized workout routines for basic activities like running.</p><h3 class="article-body__section" id="section-what-is-fitbit-coach"><span>What is 'Fitbit Coach'?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4031px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="kLNDdJnGXchhgXyCSUqfL" name="FitbitCoach-03" alt="Fitbit Coach; Google's new Gemini-powered AI wellness assistant" src="https://cdn.mos.cms.futurecdn.net/kLNDdJnGXchhgXyCSUqfL.jpg" mos="" align="middle" fullscreen="" width="4031" height="2267" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/wellness/fitness-trackers/google-says-new-fitbit-hardware-is-coming-in-2026">Fitbit Coach</a> aims to take things a step further with highly specific and adaptive training plans based on a user's goal, abilities, equipment, personal preferences, and current health trends. It's also a 24/7 chatbot, supposedly with the ability to answer genuinely complex questions. </p><p>Currently available to <a href="https://www.tomsguide.com/news/is-fitbit-premium-worth-it">Fitbit Premium</a> subscribers ($9.99 a month/$79.99 a year) as a not-fully-flushed-out preview, Google has lofty ambitions for Fitbit Coach. On the user end, the onboarding process starts with a long, personal chat with 'The Coach.' </p><p>Despite my hesitations, I fired up the Fitbit app on my Pixel phone and dove headfirst into the wild west of AI-powered fitness training. </p><p>Here are the five biggest things that surprised me about the Fibit Coach onboarding process. </p><h3 class="article-body__section" id="section-1-the-whole-process-was-surprisingly-conversational"><span>1. The whole process was surprisingly conversational</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4026px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xoveNjSvm7YNZugEYDypM" name="FitbitCoach-04" alt="Fitbit Coach; Google's new Gemini-powered AI wellness assistant" src="https://cdn.mos.cms.futurecdn.net/xoveNjSvm7YNZugEYDypM.jpg" mos="" align="middle" fullscreen="" width="4026" height="2265" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>When I first demoed Fitbit Coach, Google reps recommended that I complete the onboarding process via dictation using my standard conversational voice. The questions during the process are presented via a text chat, and indeed, you can type your answers in. However, I found pressing the small microphone and dictating my answers made everything feel more natural.</p><p>The Gemini-powered Coach responds via text with an upbeat and encouraging tone. The goal of the onboarding is for your Coach to get an understanding of your current health status and goals, and then parlay that into a customized weekly fitness plan. </p><p>The first thing the Coach asks is what kinds of workouts you currently enjoy. I was admittedly pretty rambly in my answer; however, the Coach was able to parse my key points without any issue, possibly better than a human might. </p><h3 class="article-body__section" id="section-2-i-spoke-to-the-coach-for-nearly-20-minutes"><span>2. I spoke to the Coach for nearly 20 minutes</span></h3><div><blockquote><p>I said that my primary goal is to prep my legs for extra stamina come snowboard season.</p></blockquote></div><p>Google says the onboarding process takes an average of fifteen minutes. Time must fly when you're talking about personal wellness, because I clocked my onboarding at just under 20 minutes. As noted above, I definitely rambled a bit in my answers and jumped back and forth between topics. None of this caused any hiccups with the Coach understanding my abilities and fitness habits, though.</p><p>After asking about your current workout routines and preferences, the Coach then inquires about your fitness goals. For this, I said that my primary goal was to prep my legs for extra stamina come snowboard season. I also expressed a desire to incorporate more short bursts of cardio into my work days, along with additional dumbbell-based workouts to tone my upper body.  </p><p>'No problemo,' said the Coach.</p><h3 class="article-body__section" id="section-3-goals-are-now-weekly-rather-than-daily"><span>3. Goals are now weekly, rather than daily</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3262px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uBLQSayvo4gFBgngHhux7b" name="Rings-3" alt="Apple Watch SE sitting on a red table with the owner's Activity Rings shown nearly closed" src="https://cdn.mos.cms.futurecdn.net/uBLQSayvo4gFBgngHhux7b.jpg" mos="" align="middle" fullscreen="" width="3262" height="1835" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Since the dawn of the fitness tracker, daily step count and physical activity goals have been the norm. That will no longer be the case for Fitbit and Pixel Watch users. Google is moving away from daily goals and instead placing an emphasis on weekly ones.</p><p>Rather than stressing about '<a href="https://www.tomsguide.com/features/i-closed-my-apple-watch-rings-for-an-entire-week-heres-what-i-learned">closing your Rings</a>' on a daily basis, as Apple Watch users are accustomed to, Fitbit/Pixel Watch owners will now be encouraged to look at their wellness through the lens of a rolling seven-day period.  </p><p>This change, which is already in place within the new Fitbit Premium preview, will ultimately make its way to all users, including non-Premium ones, with an app relaunch set for early 2026. </p><h3 class="article-body__section" id="section-4-my-coach-generated-workout-plan-is-well-varied"><span>4. My Coach-generated workout plan is well varied </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3932px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="KcL9eMtoMFKdow4DdRY8N" name="FitbitCoach-02" alt="Fitbit Coach; Google's new Gemini-powered AI wellness assistant" src="https://cdn.mos.cms.futurecdn.net/KcL9eMtoMFKdow4DdRY8N.jpg" mos="" align="middle" fullscreen="" width="3932" height="2212" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Once you complete your onboarding with the Coach — which ends with a question about any health conditions or concerns — it takes about 20 minutes for the Coach (Gemini) to generate your personal workout plan.</p><p>When mine was finally ready, I gave it a quick look over and was nothing short of impressed. As requested, the workouts are varied day-to-day, considerably.  On Wednesday, I was instructed to do a 'leg endurance builder' workout, which consists of a mix of Goblet Squats, Step-ups, and Forward Lunges. </p><p>Thursday is a 'quick cardio and upper body toning' day, with a thorough list of ten exercises to complete. On Friday, my focus is on quick, aerobic walking to help with stamina. Saturday is for glute and quad endurance. </p><h3 class="article-body__section" id="section-5-adjusting-workouts-is-as-simple-as-chatting-with-the-coach"><span>5. Adjusting workouts is as simple as chatting with the Coach</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3745px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="mitW9q8GJ7CfxoPRdc5ZUH" name="PixelWatch4-rev-02" alt="Close-up of the Google Pixel Watch 4 in black on a black strap" src="https://cdn.mos.cms.futurecdn.net/mitW9q8GJ7CfxoPRdc5ZUH.jpg" mos="" align="middle" fullscreen="" width="3745" height="2106" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>If I'm not feeling one of the suggested workouts or it's outside of my abilities, I can simply 'chat' with the Coach and ask for an alternative workout at any given time, or simply remove the workout from my routine with a few taps. </p><p>Also of note, several of the exercises recommended by the Coach are new to me. Fortunately, there are visual demonstrations with explainers for each. </p><p>While I've only begun scratching the surface of what the new Gemini AI-powered Fitbit Coach feature is capable of — this is my first week following the training plan — I'm already cautiously optimistic about how useful, and not-creepy-robot-like the whole experience is. </p><p>Stay tuned for a deeper dive into the Fitbit Coach preview. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">The best Fitbit for tracking your health: Expert tested and rated</a></li><li><a href="https://www.tomsguide.com/tech/the-future-of-wearable-wellness-tech-5-wild-predictions-for-2035-according-to-experts-and-industry-leaders">The future of wearable wellness tech: 5 wild predictions for 2035 according to experts and industry leaders</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-vs-google-pixel-watch-4-which-flagship-android-watch-wins">Samsung Galaxy Watch 8 vs Google Pixel Watch 4 — which flagship Android watch wins?</a></li></ul><div data-widget-type="merchantlink" data-model-name="Google Pixel Watch 4" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/i-spent-20-minutes-chatting-with-fitbits-new-ai-fitness-coach-5-things-that-surprised-me</link>
                                                                            <description>
                            <![CDATA[ I chatted with Fitbit's new Gemini-powered virtual fitness trainer for nearly 20 minutes, and it wasn't nearly as weird as I anticipated. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">pgekpkfMfDHNDUqB5MnXvT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AZ96hmo6jgBwYJFCBhwes6-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 14 Nov 2025 10:30:00 +0000</pubDate>                                                                                                                                <updated>Mon, 17 Nov 2025 23:36:01 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/AZ96hmo6jgBwYJFCBhwes6-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Charge 6 and Fitbit Coach]]></media:description>                                                            <media:text><![CDATA[Fitbit Charge 6 and Fitbit Coach]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Charge 6 and Fitbit Coach]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AZ96hmo6jgBwYJFCBhwes6-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If the idea of a 20-minute chat with an AI fitness coach makes you feel a little uneasy, you're not alone. This is why I initially shrugged when Google first mentioned its forthcoming Fitbit 'Coach' feature, powered by Gemini AI, during this summer's launch of the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a>.</p><p>In the past 12 months, nearly every smartwatch and smart ring maker has rushed to incorporate shiny new AI tools within their companion apps, supposedly with the goal of creating a more personalized and informative user experience. However, from my experience testing these new features so far, none really live up to the hype.</p><p>At best, AI-based wellness assistants are able to surface your holistic metrics when called upon and provide slightly better-than-common-sense answers to queries. Some, like Apple's <a href="https://www.tomsguide.com/wellness/fitness/i-ran-15-miles-with-the-apple-watchs-new-workout-buddy-heres-my-verdict">Workout Buddy</a> and Samsung's <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review#section-samsung-galaxy-watch-8-health-and-fitness-tracking">Running Coach</a>, can even create customized workout routines for basic activities like running.</p><h3 class="article-body__section" id="section-what-is-fitbit-coach"><span>What is 'Fitbit Coach'?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4031px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="kLNDdJnGXchhgXyCSUqfL" name="FitbitCoach-03" alt="Fitbit Coach; Google's new Gemini-powered AI wellness assistant" src="https://cdn.mos.cms.futurecdn.net/kLNDdJnGXchhgXyCSUqfL.jpg" mos="" align="middle" fullscreen="" width="4031" height="2267" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/wellness/fitness-trackers/google-says-new-fitbit-hardware-is-coming-in-2026">Fitbit Coach</a> aims to take things a step further with highly specific and adaptive training plans based on a user's goal, abilities, equipment, personal preferences, and current health trends. It's also a 24/7 chatbot, supposedly with the ability to answer genuinely complex questions. </p><p>Currently available to <a href="https://www.tomsguide.com/news/is-fitbit-premium-worth-it">Fitbit Premium</a> subscribers ($9.99 a month/$79.99 a year) as a not-fully-flushed-out preview, Google has lofty ambitions for Fitbit Coach. On the user end, the onboarding process starts with a long, personal chat with 'The Coach.' </p><p>Despite my hesitations, I fired up the Fitbit app on my Pixel phone and dove headfirst into the wild west of AI-powered fitness training. </p><p>Here are the five biggest things that surprised me about the Fibit Coach onboarding process. </p><h3 class="article-body__section" id="section-1-the-whole-process-was-surprisingly-conversational"><span>1. The whole process was surprisingly conversational</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4026px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xoveNjSvm7YNZugEYDypM" name="FitbitCoach-04" alt="Fitbit Coach; Google's new Gemini-powered AI wellness assistant" src="https://cdn.mos.cms.futurecdn.net/xoveNjSvm7YNZugEYDypM.jpg" mos="" align="middle" fullscreen="" width="4026" height="2265" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>When I first demoed Fitbit Coach, Google reps recommended that I complete the onboarding process via dictation using my standard conversational voice. The questions during the process are presented via a text chat, and indeed, you can type your answers in. However, I found pressing the small microphone and dictating my answers made everything feel more natural.</p><p>The Gemini-powered Coach responds via text with an upbeat and encouraging tone. The goal of the onboarding is for your Coach to get an understanding of your current health status and goals, and then parlay that into a customized weekly fitness plan. </p><p>The first thing the Coach asks is what kinds of workouts you currently enjoy. I was admittedly pretty rambly in my answer; however, the Coach was able to parse my key points without any issue, possibly better than a human might. </p><h3 class="article-body__section" id="section-2-i-spoke-to-the-coach-for-nearly-20-minutes"><span>2. I spoke to the Coach for nearly 20 minutes</span></h3><div><blockquote><p>I said that my primary goal is to prep my legs for extra stamina come snowboard season.</p></blockquote></div><p>Google says the onboarding process takes an average of fifteen minutes. Time must fly when you're talking about personal wellness, because I clocked my onboarding at just under 20 minutes. As noted above, I definitely rambled a bit in my answers and jumped back and forth between topics. None of this caused any hiccups with the Coach understanding my abilities and fitness habits, though.</p><p>After asking about your current workout routines and preferences, the Coach then inquires about your fitness goals. For this, I said that my primary goal was to prep my legs for extra stamina come snowboard season. I also expressed a desire to incorporate more short bursts of cardio into my work days, along with additional dumbbell-based workouts to tone my upper body.  </p><p>'No problemo,' said the Coach.</p><h3 class="article-body__section" id="section-3-goals-are-now-weekly-rather-than-daily"><span>3. Goals are now weekly, rather than daily</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3262px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uBLQSayvo4gFBgngHhux7b" name="Rings-3" alt="Apple Watch SE sitting on a red table with the owner's Activity Rings shown nearly closed" src="https://cdn.mos.cms.futurecdn.net/uBLQSayvo4gFBgngHhux7b.jpg" mos="" align="middle" fullscreen="" width="3262" height="1835" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Since the dawn of the fitness tracker, daily step count and physical activity goals have been the norm. That will no longer be the case for Fitbit and Pixel Watch users. Google is moving away from daily goals and instead placing an emphasis on weekly ones.</p><p>Rather than stressing about '<a href="https://www.tomsguide.com/features/i-closed-my-apple-watch-rings-for-an-entire-week-heres-what-i-learned">closing your Rings</a>' on a daily basis, as Apple Watch users are accustomed to, Fitbit/Pixel Watch owners will now be encouraged to look at their wellness through the lens of a rolling seven-day period.  </p><p>This change, which is already in place within the new Fitbit Premium preview, will ultimately make its way to all users, including non-Premium ones, with an app relaunch set for early 2026. </p><h3 class="article-body__section" id="section-4-my-coach-generated-workout-plan-is-well-varied"><span>4. My Coach-generated workout plan is well varied </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3932px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="KcL9eMtoMFKdow4DdRY8N" name="FitbitCoach-02" alt="Fitbit Coach; Google's new Gemini-powered AI wellness assistant" src="https://cdn.mos.cms.futurecdn.net/KcL9eMtoMFKdow4DdRY8N.jpg" mos="" align="middle" fullscreen="" width="3932" height="2212" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Once you complete your onboarding with the Coach — which ends with a question about any health conditions or concerns — it takes about 20 minutes for the Coach (Gemini) to generate your personal workout plan.</p><p>When mine was finally ready, I gave it a quick look over and was nothing short of impressed. As requested, the workouts are varied day-to-day, considerably.  On Wednesday, I was instructed to do a 'leg endurance builder' workout, which consists of a mix of Goblet Squats, Step-ups, and Forward Lunges. </p><p>Thursday is a 'quick cardio and upper body toning' day, with a thorough list of ten exercises to complete. On Friday, my focus is on quick, aerobic walking to help with stamina. Saturday is for glute and quad endurance. </p><h3 class="article-body__section" id="section-5-adjusting-workouts-is-as-simple-as-chatting-with-the-coach"><span>5. Adjusting workouts is as simple as chatting with the Coach</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3745px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="mitW9q8GJ7CfxoPRdc5ZUH" name="PixelWatch4-rev-02" alt="Close-up of the Google Pixel Watch 4 in black on a black strap" src="https://cdn.mos.cms.futurecdn.net/mitW9q8GJ7CfxoPRdc5ZUH.jpg" mos="" align="middle" fullscreen="" width="3745" height="2106" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>If I'm not feeling one of the suggested workouts or it's outside of my abilities, I can simply 'chat' with the Coach and ask for an alternative workout at any given time, or simply remove the workout from my routine with a few taps. </p><p>Also of note, several of the exercises recommended by the Coach are new to me. Fortunately, there are visual demonstrations with explainers for each. </p><p>While I've only begun scratching the surface of what the new Gemini AI-powered Fitbit Coach feature is capable of — this is my first week following the training plan — I'm already cautiously optimistic about how useful, and not-creepy-robot-like the whole experience is. </p><p>Stay tuned for a deeper dive into the Fitbit Coach preview. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">The best Fitbit for tracking your health: Expert tested and rated</a></li><li><a href="https://www.tomsguide.com/tech/the-future-of-wearable-wellness-tech-5-wild-predictions-for-2035-according-to-experts-and-industry-leaders">The future of wearable wellness tech: 5 wild predictions for 2035 according to experts and industry leaders</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-vs-google-pixel-watch-4-which-flagship-android-watch-wins">Samsung Galaxy Watch 8 vs Google Pixel Watch 4 — which flagship Android watch wins?</a></li></ul><div data-widget-type="merchantlink" data-model-name="Google Pixel Watch 4" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Quick! These awesome Fitbit deals are taking off before Black Friday with up to 40% off right now  ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We're still a little time away from <a href="https://www.tomsguide.com/black-friday-deals-and-sales">Black Friday</a>, but you don't need to wait to score discounts on the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbits</a>. I'm already seeing impressively slashed prices on popular Fitbit fitness trackers, but only while stocks last.</p><p>For example, the <a href="https://www.amazon.com/Fitbit-Smartwatch-Readiness-Exercise-Tracking/dp/B0B4N6B93J/" target="_blank" rel="nofollow">Fitbit Versa 4 just dropped to $119 at Amazon</a>, down from $200. That's 40% off a model that has 40+ exercise modes, sleep tracking, heart rate sensing and daily readiness scores. And with your purchase, you can access 6 months of Premium membership with additional features <strong>completely free. </strong>Find more details on these Fitbit deals below, and scoop them up while you have the chance.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.amazon.com/stores/page/D9FA17A5-0F54-4B3F-89D0-6B56027F8BCD" target="_blank" rel="nofollow"><strong>shop all Fitbit deals at Amazon</strong></a></li><li><strong>Fitbit Inspire 3: </strong><a href="https://www.amazon.com/Fitbit-Activity-Intensity-Tracking-Protectors/dp/B0BWPV5ZWW" target="_blank" rel="nofollow"><strong>was $129 now $89 @ Amazon</strong></a></li><li><strong>Fitbit Versa 4: </strong><a href="https://www.amazon.com/Fitbit-Smartwatch-Readiness-Exercise-Tracking/dp/B0B4N6B93J/" target="_blank" rel="nofollow"><strong>was $199 now $119 @ Amazon</strong></a></li><li><strong>Fitbit Charge 6: </strong><a href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><strong>was $159 now $128 @ Amazon</strong></a></li><li><strong>Fitbit Sense 2: </strong><a href="https://www.amazon.com/Fitbit-Advanced-Fitness-Smartwatch-Included/dp/B0B4MV1TGL/" target="_blank" rel="nofollow"><strong>was $249 now $190 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-best-early-black-friday-fitbit-deals"><span>Best early Black Friday Fitbit deals</span></h3><div class="product"><a data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Versa 4" data-dimension48="Versa 4" data-dimension25="$119" href="https://www.amazon.com/Fitbit-Smartwatch-Readiness-Exercise-Tracking/dp/B0B4N6B93J/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="mRGK8k6EXziB69dRLSAwZi" name="Versa 4.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mRGK8k6EXziB69dRLSAwZi.jpeg" mos="" align="middle" fullscreen="" width="2500" height="2500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With three bands to choose from, GPS, heart rate monitoring, activity tracking and Bluetooth connectivity, the <a href="https://www.tomsguide.com/reviews/fitbit-versa-4" data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Versa 4" data-dimension48="Versa 4" data-dimension25="$119">Versa 4</a> is a favorite for a reason. You can also access features like workout intensity maps, 40+ exercise modes, automated tracking, stress management and menstrual health tracking. Upon purchase, access 6 months of Premium membership, which provides advanced analytics and recovery.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Smartwatch-Readiness-Exercise-Tracking/dp/B0B4N6B93J/" target="_blank" rel="nofollow" data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Versa 4" data-dimension48="Versa 4" data-dimension25="$119">View Deal</a></p></div><div class="product"><a data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$190" href="https://www.amazon.com/Fitbit-Advanced-Fitness-Smartwatch-Included/dp/B0B4MV1TGL/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1410px;"><p class="vanilla-image-block" style="padding-top:106.38%;"><img id="rwUdywoFKdZAZDJXE28joK" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rwUdywoFKdZAZDJXE28joK.png" mos="" align="middle" fullscreen="" width="1410" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-sense-2" data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$190">Fitbit Sense 2</a> is the flagship smartwatch, initially launched in September 2022. Despite Google confirming that it will be the final model in the Sense line, the Fitbit Sense 2 remains a comfortable, accurate, long-lasting, and holistic feature-packed wearable well worth the money. Bonus? advanced heart features like the ECG app and atrial fibrillation assessment.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Advanced-Fitness-Smartwatch-Included/dp/B0B4MV1TGL/" target="_blank" rel="nofollow" data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$190">View Deal</a></p></div><div class="product"><a data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bLX6nP5rSbxiGe58RX5eK9" name="1710845702.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bLX6nP5rSbxiGe58RX5eK9.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128">Fitbit Charge 6</a> remains one of our favorites, thanks to its solid battery life, accurate health and fitness tracking tools, onboard GPS and quality-of-life features like Google Maps and NFC payments. Access a 6-month Premium membership when you purchase, which includes even more health tools to keep you occupied. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128">View Deal</a></p></div><div class="product"><a data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$89" href="https://www.amazon.com/Fitbit-Activity-Intensity-Tracking-Protectors/dp/B0BWPV5ZWW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1108px;"><p class="vanilla-image-block" style="padding-top:135.38%;"><img id="nsZi5DVvJJ6p46zQjxF9JB" name="fitbit inspire 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nsZi5DVvJJ6p46zQjxF9JB.jpg" mos="" align="middle" fullscreen="" width="1108" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3" data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$89">Fitbit Inspire 3</a> is super lightweight and comfortable, and offers basic workout and sleep tracking with dependable accuracy. It's minimalist but has great battery life, and this bundle comes with a mix of bands, a charging cable, a wall adapter, screen protectors and a cleaning cloth.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Activity-Intensity-Tracking-Protectors/dp/B0BWPV5ZWW" target="_blank" rel="nofollow" data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$89">View Deal</a></p></div><div data-model-name="Fitbit Charge 6,fitbit inspire 3,fitbit sense 2,Fitbit Versa 4" data-name="Buying Guide Multimodel widget" data-widget-title="Best deals today" data-widget-type="multimodelreview" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/quick-these-awesome-fitbit-deals-are-taking-off-before-black-friday-with-up-to-40-percent-off-right-now</link>
                                                                            <description>
                            <![CDATA[ These early Black Friday deals slash the price off popular Fitbit models for a limited time. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">No5Bs6ueNSTSZByXu49egn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/j45Jmi4RzuEPGD3n2DgMyA-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 13 Nov 2025 15:59:41 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ sam.hopes@futurenet.com (Sam Hopes) ]]></author>                    <dc:creator><![CDATA[ Sam Hopes ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/jZ88qJqvjWaCXXv3qvUQPA.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Sam Hopes is a level 3 qualified trainer, a level 2 Reiki practitioner and a fitness editor at Tom&#039;s Guide. She is also currently undertaking her Yoga For Athletes training course. Sam has written for various fitness brands and websites over the years and has experience across brands at Future, such as &lt;a href=&quot;https://www.livescience.com/author/sam-hopes&quot;&gt;&lt;u&gt;Live Science&lt;/u&gt;&lt;/a&gt;,&lt;a href=&quot;https://www.fitandwell.com/author/sam-hopes&quot;&gt; &lt;u&gt;Fit&amp;amp;Well&lt;/u&gt;&lt;/a&gt;,&lt;a href=&quot;https://www.coachweb.com/author/sam-hopes&quot;&gt; &lt;u&gt;Coach&lt;/u&gt;&lt;/a&gt;, and T3. &lt;/p&gt;&lt;p&gt;Having worked with fitness studios like F45 and Virgin Active and personal trained, Sam now primarily teaches outdoor bootcamps, bodyweight, calisthenics and kettlebells. She also coaches mobility and flexibility classes several times a week and believes that true strength comes from a holistic approach to training your body. &lt;/p&gt;&lt;p&gt;Sam has completed two mixed doubles Hyrox competitions in London and the Netherlands and finished her first doubles attempt in 1:11.&lt;/p&gt;&lt;p&gt;In her spare time, she enjoys CrossFit, hot yoga, and running and can be found perfecting her handstand walks and handstand push-ups in the gym whenever she has the chance to be upside down. At work, she can be found testing the latest in fitness technology and wearables, anything yoga and CrossFit-related and has a keen interest in nutrition, sleep and recovery.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/j45Jmi4RzuEPGD3n2DgMyA-1280-80.jpg">
                                                            <media:credit><![CDATA[Fitbit]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Charge 6 shown on man&#039;s wrist]]></media:description>                                                            <media:text><![CDATA[Fitbit Charge 6 shown on man&#039;s wrist]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Charge 6 shown on man&#039;s wrist]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/j45Jmi4RzuEPGD3n2DgMyA-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We're still a little time away from <a href="https://www.tomsguide.com/black-friday-deals-and-sales">Black Friday</a>, but you don't need to wait to score discounts on the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbits</a>. I'm already seeing impressively slashed prices on popular Fitbit fitness trackers, but only while stocks last.</p><p>For example, the <a href="https://www.amazon.com/Fitbit-Smartwatch-Readiness-Exercise-Tracking/dp/B0B4N6B93J/" target="_blank" rel="nofollow">Fitbit Versa 4 just dropped to $119 at Amazon</a>, down from $200. That's 40% off a model that has 40+ exercise modes, sleep tracking, heart rate sensing and daily readiness scores. And with your purchase, you can access 6 months of Premium membership with additional features <strong>completely free. </strong>Find more details on these Fitbit deals below, and scoop them up while you have the chance.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.amazon.com/stores/page/D9FA17A5-0F54-4B3F-89D0-6B56027F8BCD" target="_blank" rel="nofollow"><strong>shop all Fitbit deals at Amazon</strong></a></li><li><strong>Fitbit Inspire 3: </strong><a href="https://www.amazon.com/Fitbit-Activity-Intensity-Tracking-Protectors/dp/B0BWPV5ZWW" target="_blank" rel="nofollow"><strong>was $129 now $89 @ Amazon</strong></a></li><li><strong>Fitbit Versa 4: </strong><a href="https://www.amazon.com/Fitbit-Smartwatch-Readiness-Exercise-Tracking/dp/B0B4N6B93J/" target="_blank" rel="nofollow"><strong>was $199 now $119 @ Amazon</strong></a></li><li><strong>Fitbit Charge 6: </strong><a href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><strong>was $159 now $128 @ Amazon</strong></a></li><li><strong>Fitbit Sense 2: </strong><a href="https://www.amazon.com/Fitbit-Advanced-Fitness-Smartwatch-Included/dp/B0B4MV1TGL/" target="_blank" rel="nofollow"><strong>was $249 now $190 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-best-early-black-friday-fitbit-deals"><span>Best early Black Friday Fitbit deals</span></h3><div class="product"><a data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Versa 4" data-dimension48="Versa 4" data-dimension25="$119" href="https://www.amazon.com/Fitbit-Smartwatch-Readiness-Exercise-Tracking/dp/B0B4N6B93J/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="mRGK8k6EXziB69dRLSAwZi" name="Versa 4.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mRGK8k6EXziB69dRLSAwZi.jpeg" mos="" align="middle" fullscreen="" width="2500" height="2500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With three bands to choose from, GPS, heart rate monitoring, activity tracking and Bluetooth connectivity, the <a href="https://www.tomsguide.com/reviews/fitbit-versa-4" data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Versa 4" data-dimension48="Versa 4" data-dimension25="$119">Versa 4</a> is a favorite for a reason. You can also access features like workout intensity maps, 40+ exercise modes, automated tracking, stress management and menstrual health tracking. Upon purchase, access 6 months of Premium membership, which provides advanced analytics and recovery.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Smartwatch-Readiness-Exercise-Tracking/dp/B0B4N6B93J/" target="_blank" rel="nofollow" data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Versa 4" data-dimension48="Versa 4" data-dimension25="$119">View Deal</a></p></div><div class="product"><a data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$190" href="https://www.amazon.com/Fitbit-Advanced-Fitness-Smartwatch-Included/dp/B0B4MV1TGL/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1410px;"><p class="vanilla-image-block" style="padding-top:106.38%;"><img id="rwUdywoFKdZAZDJXE28joK" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rwUdywoFKdZAZDJXE28joK.png" mos="" align="middle" fullscreen="" width="1410" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-sense-2" data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$190">Fitbit Sense 2</a> is the flagship smartwatch, initially launched in September 2022. Despite Google confirming that it will be the final model in the Sense line, the Fitbit Sense 2 remains a comfortable, accurate, long-lasting, and holistic feature-packed wearable well worth the money. Bonus? advanced heart features like the ECG app and atrial fibrillation assessment.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Advanced-Fitness-Smartwatch-Included/dp/B0B4MV1TGL/" target="_blank" rel="nofollow" data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$190">View Deal</a></p></div><div class="product"><a data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bLX6nP5rSbxiGe58RX5eK9" name="1710845702.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bLX6nP5rSbxiGe58RX5eK9.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128">Fitbit Charge 6</a> remains one of our favorites, thanks to its solid battery life, accurate health and fitness tracking tools, onboard GPS and quality-of-life features like Google Maps and NFC payments. Access a 6-month Premium membership when you purchase, which includes even more health tools to keep you occupied. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M" target="_blank" rel="nofollow" data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$128">View Deal</a></p></div><div class="product"><a data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$89" href="https://www.amazon.com/Fitbit-Activity-Intensity-Tracking-Protectors/dp/B0BWPV5ZWW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1108px;"><p class="vanilla-image-block" style="padding-top:135.38%;"><img id="nsZi5DVvJJ6p46zQjxF9JB" name="fitbit inspire 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nsZi5DVvJJ6p46zQjxF9JB.jpg" mos="" align="middle" fullscreen="" width="1108" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3" data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$89">Fitbit Inspire 3</a> is super lightweight and comfortable, and offers basic workout and sleep tracking with dependable accuracy. It's minimalist but has great battery life, and this bundle comes with a mix of bands, a charging cable, a wall adapter, screen protectors and a cleaning cloth.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Activity-Intensity-Tracking-Protectors/dp/B0BWPV5ZWW" target="_blank" rel="nofollow" data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$89">View Deal</a></p></div><div data-model-name="Fitbit Charge 6,fitbit inspire 3,fitbit sense 2,Fitbit Versa 4" data-name="Buying Guide Multimodel widget" data-widget-title="Best deals today" data-widget-type="multimodelreview" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I review fitness trackers — 5 early Black Friday Fitbit deals I recommend shopping right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>You don't need to wait until <a href="https://www.tomsguide.com/live/news/ive-picked-the-best-early-black-friday-deals-november-2025">Black Friday</a> to score a seriously good deal on one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbits</a> or Fitbit alternatives. I review fitness trackers, and the best Fitbit deals are happening right now. </p><p>For example, my favorite fitness tracker in 2025, <a href="https://www.bestbuy.com/product/fitbit-charge-6-advanced-fitness-health-tracker-obsidian/J39TC3VHT6/sku/6559662" target="_blank" rel="nofollow">the Fitbit Charge 6, is just $99</a>, marked down from $159 (last Black Friday, it sold for $129). Looking for something a little less spendy? My favorite wallet-friendly Fitbit alternative is now even cheaper than ever: Pick up the <a href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G/ref=sr_1_3?th=1" target="_blank" rel="nofollow">Amazfit Band 7 for only $36</a> marked down from $49. </p><p>Find details on these Fitbit deals and more below. </p><h3 class="article-body__section" id="section-best-early-black-friday-fitbit-deals-quick-links"><span>Best early Black Friday Fitbit deals: Quick Links</span></h3><ul><li><strong>Amazfitband 7: </strong><a href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G/ref=sr_1_3?th=1" target="_blank" rel="nofollow"><strong>was $49 now $36 @ Amazon</strong></a></li><li><strong>Fitbit Inspire 3: </strong><a href="https://www.bestbuy.com/product/fitbit-inspire-3-health-fitness-tracker-midnight-zen-2022/J3GWJ6S29F/sku/6514030" target="_blank" rel="nofollow"><strong>was $99 now $69 @ Best Buy</strong></a></li><li><strong>Fitbit Charge 6: </strong><a href="https://www.bestbuy.com/product/fitbit-charge-6-advanced-fitness-health-tracker-obsidian/J39TC3VHT6/sku/6559662" target="_blank" rel="nofollow"><strong>was $159 now $99 @ Best Buy</strong></a></li><li><strong>Fitbit Sense 2: </strong><a href="https://www.walmart.com/ip/Fitbit-Sense-2-Advanced-Health-and-Fitness-Smartwatch-Shadow-Grey-Graphite-Aluminum/1124452787" target="_blank" rel="nofollow"><strong>was $249 now $179 @ Walmart</strong></a></li><li><strong>Google Pixel Watch 3: </strong><a href="https://www.bestbuy.com/product/google-pixel-watch-3-45mm-smartwatch-with-hazel-band-wi-fi-matte-hazel-2024/J39TC87J3P/sku/6588313" target="_blank" rel="nofollow"><strong>was $299 now $199 @ Best Buy</strong></a></li></ul><h3 class="article-body__section" id="section-best-early-black-friday-fitbit-deals"><span>Best early Black Friday Fitbit deals</span></h3><div class="product"><a data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Band 7" data-dimension48="Band 7" data-dimension25="$36" href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G/ref=sr_1_3?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:126.36%;"><img id="FvVeEggCMcJRToQwRTkfca" name="Amazfit Band 7 Fitness & Activity Tracker" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FvVeEggCMcJRToQwRTkfca.jpg" mos="" align="middle" fullscreen="" width="679" height="858" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-band-7-review" data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Band 7" data-dimension48="Band 7" data-dimension25="$36">Amazfit Band 7</a> is the only wearable on this list not made by Google, i.e., not technically a Fitbit. But that's okay, because the Band 7 is the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html#section-best-cheap-fitbit">best cheap Fitbit alternative in 2025</a>, boasting a generously-sized AMOLED screen, seriously long-lasting battery, support for loads of activity types, reliable sleep insights, and of course, a hard-to-resist pricetag.<a class="view-deal button" href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G/ref=sr_1_3?th=1" target="_blank" rel="nofollow" data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Band 7" data-dimension48="Band 7" data-dimension25="$36">View Deal</a></p></div><div class="product"><a data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$69" href="https://www.bestbuy.com/product/fitbit-inspire-3-health-fitness-tracker-midnight-zen-2022/J3GWJ6S29F/sku/6514030" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1108px;"><p class="vanilla-image-block" style="padding-top:135.38%;"><img id="nsZi5DVvJJ6p46zQjxF9JB" name="fitbit inspire 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nsZi5DVvJJ6p46zQjxF9JB.jpg" mos="" align="middle" fullscreen="" width="1108" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3" data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$69">Fitbit Inspire 3</a> is a little old (launched in 2022), but it's still a fitness tracker I recommend frequently to folks who hate wearing anything on their wrist. Lightweight and easily one of the comfiest fitness trackers available today, it offers basic workout tracking and sleep monitoring tools (with dependable accuracy), a bright (though small) display, excellent battery life, and... not much else. In short, this is the perfect tracker for minimalists. <a class="view-deal button" href="https://www.bestbuy.com/product/fitbit-inspire-3-health-fitness-tracker-midnight-zen-2022/J3GWJ6S29F/sku/6514030" target="_blank" rel="nofollow" data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.bestbuy.com/product/fitbit-charge-6-advanced-fitness-health-tracker-obsidian/J39TC3VHT6/sku/6559662" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bLX6nP5rSbxiGe58RX5eK9" name="1710845702.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bLX6nP5rSbxiGe58RX5eK9.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">Fitbit Charge 6</a> remains <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html#section-best-fitbit">the best Fitbit in 2025</a>, thanks to its discreet and easy-wearing disposition, solid battery life, accurate health and fitness tracking tools, onboard GPS, and support for quality-of-life features like Google Maps and NFC payments.<a class="view-deal button" href="https://www.bestbuy.com/product/fitbit-charge-6-advanced-fitness-health-tracker-obsidian/J39TC3VHT6/sku/6559662" target="_blank" rel="nofollow" data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$179" href="https://www.walmart.com/ip/Fitbit-Sense-2-Advanced-Health-and-Fitness-Smartwatch-Shadow-Grey-Graphite-Aluminum/1124452787" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1410px;"><p class="vanilla-image-block" style="padding-top:106.38%;"><img id="rwUdywoFKdZAZDJXE28joK" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rwUdywoFKdZAZDJXE28joK.png" mos="" align="middle" fullscreen="" width="1410" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-sense-2" data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$179">Fitbit Sense 2</a> is the flagship Fitbit-branded smartwatch, initially launched in September 2022. Despite its age and Google confirming that it will be the final model in the Sense line, the Fitbit Sense 2 remains a comfortable, accurate, long-lasting, and holistic feature-packed wearable, even in 2025.  <a class="view-deal button" href="https://www.walmart.com/ip/Fitbit-Sense-2-Advanced-Health-and-Fitness-Smartwatch-Shadow-Grey-Graphite-Aluminum/1124452787" target="_blank" rel="nofollow" data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$179">View Deal</a></p></div><div class="product"><a data-dimension112="a5f1b728-76d4-4ec5-8614-2a0c6af1a73c" data-action="Deal Block" data-label="Pixel Watch 3 (45mm)" data-dimension48="Pixel Watch 3 (45mm)" data-dimension25="$199" href="https://www.bestbuy.com/product/google-pixel-watch-3-45mm-smartwatch-with-hazel-band-wi-fi-matte-hazel-2024/J39TC87J3P/sku/6588313" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1492px;"><p class="vanilla-image-block" style="padding-top:91.69%;"><img id="J5JY6oNLHRKynnkrwYPPuY" name="Google Pixel Watch 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J5JY6oNLHRKynnkrwYPPuY.png" mos="" align="middle" fullscreen="" width="1492" height="1368" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/google-pixel-watch-3-45mm-smartwatch-with-hazel-band-wi-fi-matte-hazel-2024/J39TC87J3P/sku/6588313" target="_blank" rel="nofollow" data-dimension112="a5f1b728-76d4-4ec5-8614-2a0c6af1a73c" data-action="Deal Block" data-label="Pixel Watch 3 (45mm)" data-dimension48="Pixel Watch 3 (45mm)" data-dimension25="$199">Pixel Watch 3 (45mm): was $299 now $199</a></strong><br>Google recently replaced the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review">Pixel Watch 3</a> with the newer <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a>, but last year's model remains one of the <a href="https://www.tomsguide.com/best-picks/best-smartwatches-android">best smartwatches for Android</a>, especially when discounted by $100. Moreover, this deal is on the larger 45mm Pixel Watch 3, which is the longer-lasting of the two. As far as health and fitness-tracking tech, the Pixel Watch 3 boasts the best of Fitbit's features. <a class="view-deal button" href="https://www.bestbuy.com/product/google-pixel-watch-3-45mm-smartwatch-with-hazel-band-wi-fi-matte-hazel-2024/J39TC87J3P/sku/6588313" target="_blank" rel="nofollow" data-dimension112="a5f1b728-76d4-4ec5-8614-2a0c6af1a73c" data-action="Deal Block" data-label="Pixel Watch 3 (45mm)" data-dimension48="Pixel Watch 3 (45mm)" data-dimension25="$199">View Deal</a></p></div><div data-model-name="Fitbit Charge 6,fitbit inspire 3,fitbit sense 2" data-name="Buying Guide Multimodel widget" data-widget-title="multimodelWidgetTitle" data-widget-type="multimodelreview" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/forget-black-friday-the-best-fitbit-deals-are-happening-right-now-starting-at-just-usd36</link>
                                                                            <description>
                            <![CDATA[ I review fitness trackers, and these early Black Friday deals on the best Fitbit models are the real deal. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">MnfPNcd4xpSBW4hMXrTTsb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/j45Jmi4RzuEPGD3n2DgMyA-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 05 Nov 2025 11:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 06 Nov 2025 21:21:36 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/j45Jmi4RzuEPGD3n2DgMyA-1280-80.jpg">
                                                            <media:credit><![CDATA[Fitbit]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Charge 6 shown on man&#039;s wrist]]></media:description>                                                            <media:text><![CDATA[Fitbit Charge 6 shown on man&#039;s wrist]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Charge 6 shown on man&#039;s wrist]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/j45Jmi4RzuEPGD3n2DgMyA-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>You don't need to wait until <a href="https://www.tomsguide.com/live/news/ive-picked-the-best-early-black-friday-deals-november-2025">Black Friday</a> to score a seriously good deal on one of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbits</a> or Fitbit alternatives. I review fitness trackers, and the best Fitbit deals are happening right now. </p><p>For example, my favorite fitness tracker in 2025, <a href="https://www.bestbuy.com/product/fitbit-charge-6-advanced-fitness-health-tracker-obsidian/J39TC3VHT6/sku/6559662" target="_blank" rel="nofollow">the Fitbit Charge 6, is just $99</a>, marked down from $159 (last Black Friday, it sold for $129). Looking for something a little less spendy? My favorite wallet-friendly Fitbit alternative is now even cheaper than ever: Pick up the <a href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G/ref=sr_1_3?th=1" target="_blank" rel="nofollow">Amazfit Band 7 for only $36</a> marked down from $49. </p><p>Find details on these Fitbit deals and more below. </p><h3 class="article-body__section" id="section-best-early-black-friday-fitbit-deals-quick-links"><span>Best early Black Friday Fitbit deals: Quick Links</span></h3><ul><li><strong>Amazfitband 7: </strong><a href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G/ref=sr_1_3?th=1" target="_blank" rel="nofollow"><strong>was $49 now $36 @ Amazon</strong></a></li><li><strong>Fitbit Inspire 3: </strong><a href="https://www.bestbuy.com/product/fitbit-inspire-3-health-fitness-tracker-midnight-zen-2022/J3GWJ6S29F/sku/6514030" target="_blank" rel="nofollow"><strong>was $99 now $69 @ Best Buy</strong></a></li><li><strong>Fitbit Charge 6: </strong><a href="https://www.bestbuy.com/product/fitbit-charge-6-advanced-fitness-health-tracker-obsidian/J39TC3VHT6/sku/6559662" target="_blank" rel="nofollow"><strong>was $159 now $99 @ Best Buy</strong></a></li><li><strong>Fitbit Sense 2: </strong><a href="https://www.walmart.com/ip/Fitbit-Sense-2-Advanced-Health-and-Fitness-Smartwatch-Shadow-Grey-Graphite-Aluminum/1124452787" target="_blank" rel="nofollow"><strong>was $249 now $179 @ Walmart</strong></a></li><li><strong>Google Pixel Watch 3: </strong><a href="https://www.bestbuy.com/product/google-pixel-watch-3-45mm-smartwatch-with-hazel-band-wi-fi-matte-hazel-2024/J39TC87J3P/sku/6588313" target="_blank" rel="nofollow"><strong>was $299 now $199 @ Best Buy</strong></a></li></ul><h3 class="article-body__section" id="section-best-early-black-friday-fitbit-deals"><span>Best early Black Friday Fitbit deals</span></h3><div class="product"><a data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Band 7" data-dimension48="Band 7" data-dimension25="$36" href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G/ref=sr_1_3?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:126.36%;"><img id="FvVeEggCMcJRToQwRTkfca" name="Amazfit Band 7 Fitness & Activity Tracker" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FvVeEggCMcJRToQwRTkfca.jpg" mos="" align="middle" fullscreen="" width="679" height="858" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-band-7-review" data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Band 7" data-dimension48="Band 7" data-dimension25="$36">Amazfit Band 7</a> is the only wearable on this list not made by Google, i.e., not technically a Fitbit. But that's okay, because the Band 7 is the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html#section-best-cheap-fitbit">best cheap Fitbit alternative in 2025</a>, boasting a generously-sized AMOLED screen, seriously long-lasting battery, support for loads of activity types, reliable sleep insights, and of course, a hard-to-resist pricetag.<a class="view-deal button" href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G/ref=sr_1_3?th=1" target="_blank" rel="nofollow" data-dimension112="733e6928-9175-41de-a068-25f836e8e7a7" data-action="Deal Block" data-label="Band 7" data-dimension48="Band 7" data-dimension25="$36">View Deal</a></p></div><div class="product"><a data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$69" href="https://www.bestbuy.com/product/fitbit-inspire-3-health-fitness-tracker-midnight-zen-2022/J3GWJ6S29F/sku/6514030" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1108px;"><p class="vanilla-image-block" style="padding-top:135.38%;"><img id="nsZi5DVvJJ6p46zQjxF9JB" name="fitbit inspire 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nsZi5DVvJJ6p46zQjxF9JB.jpg" mos="" align="middle" fullscreen="" width="1108" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3" data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$69">Fitbit Inspire 3</a> is a little old (launched in 2022), but it's still a fitness tracker I recommend frequently to folks who hate wearing anything on their wrist. Lightweight and easily one of the comfiest fitness trackers available today, it offers basic workout tracking and sleep monitoring tools (with dependable accuracy), a bright (though small) display, excellent battery life, and... not much else. In short, this is the perfect tracker for minimalists. <a class="view-deal button" href="https://www.bestbuy.com/product/fitbit-inspire-3-health-fitness-tracker-midnight-zen-2022/J3GWJ6S29F/sku/6514030" target="_blank" rel="nofollow" data-dimension112="8cabf4be-6510-4355-935a-44b4bd81dcad" data-action="Deal Block" data-label="Inspire 3" data-dimension48="Inspire 3" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.bestbuy.com/product/fitbit-charge-6-advanced-fitness-health-tracker-obsidian/J39TC3VHT6/sku/6559662" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bLX6nP5rSbxiGe58RX5eK9" name="1710845702.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bLX6nP5rSbxiGe58RX5eK9.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6" data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">Fitbit Charge 6</a> remains <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html#section-best-fitbit">the best Fitbit in 2025</a>, thanks to its discreet and easy-wearing disposition, solid battery life, accurate health and fitness tracking tools, onboard GPS, and support for quality-of-life features like Google Maps and NFC payments.<a class="view-deal button" href="https://www.bestbuy.com/product/fitbit-charge-6-advanced-fitness-health-tracker-obsidian/J39TC3VHT6/sku/6559662" target="_blank" rel="nofollow" data-dimension112="fdd00682-afbf-4e1b-bc54-b3730ee2be8e" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$179" href="https://www.walmart.com/ip/Fitbit-Sense-2-Advanced-Health-and-Fitness-Smartwatch-Shadow-Grey-Graphite-Aluminum/1124452787" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1410px;"><p class="vanilla-image-block" style="padding-top:106.38%;"><img id="rwUdywoFKdZAZDJXE28joK" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rwUdywoFKdZAZDJXE28joK.png" mos="" align="middle" fullscreen="" width="1410" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/fitbit-sense-2" data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$179">Fitbit Sense 2</a> is the flagship Fitbit-branded smartwatch, initially launched in September 2022. Despite its age and Google confirming that it will be the final model in the Sense line, the Fitbit Sense 2 remains a comfortable, accurate, long-lasting, and holistic feature-packed wearable, even in 2025.  <a class="view-deal button" href="https://www.walmart.com/ip/Fitbit-Sense-2-Advanced-Health-and-Fitness-Smartwatch-Shadow-Grey-Graphite-Aluminum/1124452787" target="_blank" rel="nofollow" data-dimension112="d73fb9e5-f1a5-4782-a2c4-d30b11ddfe03" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$179">View Deal</a></p></div><div class="product"><a data-dimension112="a5f1b728-76d4-4ec5-8614-2a0c6af1a73c" data-action="Deal Block" data-label="Pixel Watch 3 (45mm)" data-dimension48="Pixel Watch 3 (45mm)" data-dimension25="$199" href="https://www.bestbuy.com/product/google-pixel-watch-3-45mm-smartwatch-with-hazel-band-wi-fi-matte-hazel-2024/J39TC87J3P/sku/6588313" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1492px;"><p class="vanilla-image-block" style="padding-top:91.69%;"><img id="J5JY6oNLHRKynnkrwYPPuY" name="Google Pixel Watch 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J5JY6oNLHRKynnkrwYPPuY.png" mos="" align="middle" fullscreen="" width="1492" height="1368" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/google-pixel-watch-3-45mm-smartwatch-with-hazel-band-wi-fi-matte-hazel-2024/J39TC87J3P/sku/6588313" target="_blank" rel="nofollow" data-dimension112="a5f1b728-76d4-4ec5-8614-2a0c6af1a73c" data-action="Deal Block" data-label="Pixel Watch 3 (45mm)" data-dimension48="Pixel Watch 3 (45mm)" data-dimension25="$199">Pixel Watch 3 (45mm): was $299 now $199</a></strong><br>Google recently replaced the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review">Pixel Watch 3</a> with the newer <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch 4</a>, but last year's model remains one of the <a href="https://www.tomsguide.com/best-picks/best-smartwatches-android">best smartwatches for Android</a>, especially when discounted by $100. Moreover, this deal is on the larger 45mm Pixel Watch 3, which is the longer-lasting of the two. As far as health and fitness-tracking tech, the Pixel Watch 3 boasts the best of Fitbit's features. <a class="view-deal button" href="https://www.bestbuy.com/product/google-pixel-watch-3-45mm-smartwatch-with-hazel-band-wi-fi-matte-hazel-2024/J39TC87J3P/sku/6588313" target="_blank" rel="nofollow" data-dimension112="a5f1b728-76d4-4ec5-8614-2a0c6af1a73c" data-action="Deal Block" data-label="Pixel Watch 3 (45mm)" data-dimension48="Pixel Watch 3 (45mm)" data-dimension25="$199">View Deal</a></p></div><div data-model-name="Fitbit Charge 6,fitbit inspire 3,fitbit sense 2" data-name="Buying Guide Multimodel widget" data-widget-title="multimodelWidgetTitle" data-widget-type="multimodelreview" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Maybe Fitbit isn't dead after all? Google says new hardware is coming in 2026 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Maybe the Fitbit brand isn’t dead after all? During a press preview of the revamped Fitbit app last week, Fitbit’s head of product, Andy Abramson, nonchalantly hinted at new Fitbit hardware launching in 2026.</p><p>This came as a bit of a surprise, given Google’s penchant over the past few years for slowly sucking the life out of the Fitbit brand. </p><p>Since acquiring Fitbit, Google has <a href="https://www.tomsguide.com/wellness/smartwatches/google-just-killed-off-fitbit-smartwatches-and-nobody-should-be-surprised">shuttered the Fitbit Sense and Versa</a> smartwatch lines, <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">ended support for Google Assistant</a> across the Fitbit ecosystem, nixed popular Fitbit community features like challenges, and <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbitcom-is-shutting-down-next-week-what-you-need-to-know">shuttered Fitbit.com</a>, all while harvesting the best Fitbit technology and metrics for the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch line</a>.</p><p>So, excuse me for thinking <a href="https://www.tomsguide.com/wellness/smartwatches/google-is-slowly-shuttering-fitbit-should-you-still-buy-one">Fitbit was as good as dead</a>. Here’s everything you need to know about potential new Fitbit models in 2026, along with details on the new Fitbit app. </p><h2 id="a-new-fitbit-model-is-long-overdue">A new Fitbit model is long overdue</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Tmm4eR7HkY3pHjiXBYCbKD" name="fitbit ace lte avatar customization 2.jpg" alt="Fitbit Ace LTE avatar" src="https://cdn.mos.cms.futurecdn.net/Tmm4eR7HkY3pHjiXBYCbKD.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Aside from the kid-centric <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-ace-lte">Fitbit Ace LTE</a> launched in 2024, we haven’t seen a new Fitbit model since the debut of the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> all the way back in October 2023. In the world of wearable tech, two years might as well be an eternity.</p><p>While the Fitbit Charge 6 remains my top pick as the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbit in 2025</a>, its age is starting to show; for example, the screen feels downright tiny by today's standards. The same can be said for the wallet-friendly <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>, which debuted in September 2022. </p><p>The question is, when Google says new Fitbit hardware is coming, does that mean an update to an existing Fitbit model, or an entirely new Fitbit form factor? My money is on the former. </p><h2 id="2026-fitbit-upgrade-predictions">2026 Fitbit upgrade predictions</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3500px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DoPYvNjBt4ygR6hHXQfTmY" name="Fitbit-Inspire3-set-up-8.jpg" alt="How to set up the Fitbit Inspire 3." src="https://cdn.mos.cms.futurecdn.net/DoPYvNjBt4ygR6hHXQfTmY.jpg" mos="" align="middle" fullscreen="" width="3500" height="1969" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Though new Fitbit models may be relegated to kid-friendly devices only, I’m hopeful that 2026 will bring us a proper replacement for the Fitbit Charge 6. What might a Fitbit Charge 7 offer? My best guess is a larger and brighter display, a better GPS, the addition of an altimeter for elevation tracking, improved battery life, and possibly new health sensors and safety features!</p><p>A Fitbit Inspire 4 will likely similarly offer a larger screen that’s easier to interact with and updated holistic features. That said, I doubt the Inspire series will gain a GPS, as that’s one of the biggest differentiators between it and the Charge series. </p><h2 id="refreshed-fitbit-app-with-ai-coaching">Refreshed Fitbit app with AI coaching</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3893px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QKSyBAJE5m3j2JEiiARwdN" name="FitbitSense2-Alexa" alt="Fitbit Sense 2 on a user's wrist with the Amazon Alexa app shown" src="https://cdn.mos.cms.futurecdn.net/QKSyBAJE5m3j2JEiiARwdN.jpg" mos="" align="middle" fullscreen="" width="3893" height="2190" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>In addition to new Fitbit hardware in 2026, Fitbit is also rolling out a completely overhauled Fitbit app, and you can take a preview of the new app for a spin starting on October 27. </p><p>Most notably, the new Fitbit app seamlessly integrates a Gemini-powered AI wellness coach into a more visually appealing platform with friendlier graphs, more intelligently organized data, and enhanced user customization. </p><p>While non-premium users will benefit from the aesthetic improvements, the AI coach is only for Premium users. However, it’s not just for hardcore athletes; rather, the feature is designed to get to know you and help you improve your physical fitness, no matter your skill level or workout goals. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KGyVMTsz22jQzFt2wrmtBR" name="TG_Fitbit-Versa-4_LIST.jpg" alt="Fitbit Versa 4" src="https://cdn.mos.cms.futurecdn.net/KGyVMTsz22jQzFt2wrmtBR.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>For now, the overhauled app preview is only available for U.S.-based Fitbit Premium subscribers using an Android device. iOS folks will need to wait until “later this year” to take the new personalized AI features for a spin.</p><p>It’s also worth noting that Premium users will ultimately have the choice to opt in or out of Google’s new AI coach feature. Those who choose to opt in will be presented with a five to ten-minute “onboarding chat” with the coach, where, using natural language, you share your current workout habits and goals, favorite physical activities, any injuries, gear, motivations, ect. </p><p>Once complete, your new Fitbit AI coach is supposed to help come up with workout plans that suit your proclivities, while providing advice, insights, and motivation along the way. </p><p>Stay tuned for a deeper dive into the new AI-powered Fitbit app, including takeaways from the onboarding chat and a verdict on its overall usefulness. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smart-rings/i-test-smart-rings-5-battery-maintenance-tips-to-avoid-catastrophe">I test smart rings — 5 battery maintenance tips to avoid catastrophe</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-the-suunto-vertical-2-and-it-beats-my-favorite-garmin-in-5-big-ways">I just went hands-on with the Suunto Vertical 2 — and it beats my favorite Garmin in 5 big ways</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/watchos-26-heres-how-to-enable-your-apple-watchs-sleep-score">Apple Watch finally gets a sleep score — here's how to unlock yours</a></li></ul><div data-widget-type="merchantlink" data-model-name="Fitbit Charge 6" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/google-says-new-fitbit-hardware-is-coming-in-2026</link>
                                                                            <description>
                            <![CDATA[ Google is rolling out an AI-powered Fitbit app with personalized coaching. Plus: new Fitbit devices for 2026, including (maybe) a Fitbit Charge 7. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zpTmqNTogWXv5jDWmC5zoK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AfagmsVBggYaP7Ri4jaNEU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 28 Oct 2025 03:20:55 +0000</pubDate>                                                                                                                                <updated>Tue, 28 Oct 2025 20:22:29 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/AfagmsVBggYaP7Ri4jaNEU-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Charge 6 vs. Charge 5]]></media:description>                                                            <media:text><![CDATA[Fitbit Charge 6 vs. Charge 5]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Charge 6 vs. Charge 5]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AfagmsVBggYaP7Ri4jaNEU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Maybe the Fitbit brand isn’t dead after all? During a press preview of the revamped Fitbit app last week, Fitbit’s head of product, Andy Abramson, nonchalantly hinted at new Fitbit hardware launching in 2026.</p><p>This came as a bit of a surprise, given Google’s penchant over the past few years for slowly sucking the life out of the Fitbit brand. </p><p>Since acquiring Fitbit, Google has <a href="https://www.tomsguide.com/wellness/smartwatches/google-just-killed-off-fitbit-smartwatches-and-nobody-should-be-surprised">shuttered the Fitbit Sense and Versa</a> smartwatch lines, <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">ended support for Google Assistant</a> across the Fitbit ecosystem, nixed popular Fitbit community features like challenges, and <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbitcom-is-shutting-down-next-week-what-you-need-to-know">shuttered Fitbit.com</a>, all while harvesting the best Fitbit technology and metrics for the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-google-pixel-watch-4-and-it-could-be-my-new-favorite-smartwatch-for-android">Pixel Watch line</a>.</p><p>So, excuse me for thinking <a href="https://www.tomsguide.com/wellness/smartwatches/google-is-slowly-shuttering-fitbit-should-you-still-buy-one">Fitbit was as good as dead</a>. Here’s everything you need to know about potential new Fitbit models in 2026, along with details on the new Fitbit app. </p><h2 id="a-new-fitbit-model-is-long-overdue">A new Fitbit model is long overdue</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Tmm4eR7HkY3pHjiXBYCbKD" name="fitbit ace lte avatar customization 2.jpg" alt="Fitbit Ace LTE avatar" src="https://cdn.mos.cms.futurecdn.net/Tmm4eR7HkY3pHjiXBYCbKD.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Aside from the kid-centric <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-ace-lte">Fitbit Ace LTE</a> launched in 2024, we haven’t seen a new Fitbit model since the debut of the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> all the way back in October 2023. In the world of wearable tech, two years might as well be an eternity.</p><p>While the Fitbit Charge 6 remains my top pick as the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbit in 2025</a>, its age is starting to show; for example, the screen feels downright tiny by today's standards. The same can be said for the wallet-friendly <a href="https://www.tomsguide.com/reviews/fitbit-inspire-3">Fitbit Inspire 3</a>, which debuted in September 2022. </p><p>The question is, when Google says new Fitbit hardware is coming, does that mean an update to an existing Fitbit model, or an entirely new Fitbit form factor? My money is on the former. </p><h2 id="2026-fitbit-upgrade-predictions">2026 Fitbit upgrade predictions</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3500px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DoPYvNjBt4ygR6hHXQfTmY" name="Fitbit-Inspire3-set-up-8.jpg" alt="How to set up the Fitbit Inspire 3." src="https://cdn.mos.cms.futurecdn.net/DoPYvNjBt4ygR6hHXQfTmY.jpg" mos="" align="middle" fullscreen="" width="3500" height="1969" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Though new Fitbit models may be relegated to kid-friendly devices only, I’m hopeful that 2026 will bring us a proper replacement for the Fitbit Charge 6. What might a Fitbit Charge 7 offer? My best guess is a larger and brighter display, a better GPS, the addition of an altimeter for elevation tracking, improved battery life, and possibly new health sensors and safety features!</p><p>A Fitbit Inspire 4 will likely similarly offer a larger screen that’s easier to interact with and updated holistic features. That said, I doubt the Inspire series will gain a GPS, as that’s one of the biggest differentiators between it and the Charge series. </p><h2 id="refreshed-fitbit-app-with-ai-coaching">Refreshed Fitbit app with AI coaching</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3893px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QKSyBAJE5m3j2JEiiARwdN" name="FitbitSense2-Alexa" alt="Fitbit Sense 2 on a user's wrist with the Amazon Alexa app shown" src="https://cdn.mos.cms.futurecdn.net/QKSyBAJE5m3j2JEiiARwdN.jpg" mos="" align="middle" fullscreen="" width="3893" height="2190" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>In addition to new Fitbit hardware in 2026, Fitbit is also rolling out a completely overhauled Fitbit app, and you can take a preview of the new app for a spin starting on October 27. </p><p>Most notably, the new Fitbit app seamlessly integrates a Gemini-powered AI wellness coach into a more visually appealing platform with friendlier graphs, more intelligently organized data, and enhanced user customization. </p><p>While non-premium users will benefit from the aesthetic improvements, the AI coach is only for Premium users. However, it’s not just for hardcore athletes; rather, the feature is designed to get to know you and help you improve your physical fitness, no matter your skill level or workout goals. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KGyVMTsz22jQzFt2wrmtBR" name="TG_Fitbit-Versa-4_LIST.jpg" alt="Fitbit Versa 4" src="https://cdn.mos.cms.futurecdn.net/KGyVMTsz22jQzFt2wrmtBR.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>For now, the overhauled app preview is only available for U.S.-based Fitbit Premium subscribers using an Android device. iOS folks will need to wait until “later this year” to take the new personalized AI features for a spin.</p><p>It’s also worth noting that Premium users will ultimately have the choice to opt in or out of Google’s new AI coach feature. Those who choose to opt in will be presented with a five to ten-minute “onboarding chat” with the coach, where, using natural language, you share your current workout habits and goals, favorite physical activities, any injuries, gear, motivations, ect. </p><p>Once complete, your new Fitbit AI coach is supposed to help come up with workout plans that suit your proclivities, while providing advice, insights, and motivation along the way. </p><p>Stay tuned for a deeper dive into the new AI-powered Fitbit app, including takeaways from the onboarding chat and a verdict on its overall usefulness. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smart-rings/i-test-smart-rings-5-battery-maintenance-tips-to-avoid-catastrophe">I test smart rings — 5 battery maintenance tips to avoid catastrophe</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-the-suunto-vertical-2-and-it-beats-my-favorite-garmin-in-5-big-ways">I just went hands-on with the Suunto Vertical 2 — and it beats my favorite Garmin in 5 big ways</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/watchos-26-heres-how-to-enable-your-apple-watchs-sleep-score">Apple Watch finally gets a sleep score — here's how to unlock yours</a></li></ul><div data-widget-type="merchantlink" data-model-name="Fitbit Charge 6" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Your Fitbit sleep score just got worse — here's why that's good news  ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Fitbit may be a brand that's far less at the forefront of people's minds <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">since Google started killing off certain Fitbit features</a> after acquiring the company for $2.1 billion in 2021.</p><p>But the fitness tracking company is far from dead. In fact, it just released a huge sleep tracking update that changes the way it scores your sleep.</p><p>And it turns out the changes are actually lowering user scores. It's by design, as the new changes are meant to be more accurate. In most cases, it appears that Fitbit was scoring too high previously, so the new metric is intended to level things out and bring the scores into a more accurate range.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ONRN2O"></div>                            </div>                            <script src="https://kwizly.com/embed/ONRN2O.js" async></script><p>But that doesn't mean users of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbits</a> are happy about it.</p><h2 id="what-s-happening-with-fitbit-s-sleep-tracking">What's happening with Fitbit's sleep tracking?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3976px;"><p class="vanilla-image-block" style="padding-top:56.49%;"><img id="7K462TB8CytXUpraxNqqM5" name="Fitbit sleep 1.JPG" alt="Sleep tracking on a Fitbit Charge 4" src="https://cdn.mos.cms.futurecdn.net/7K462TB8CytXUpraxNqqM5.jpg" mos="" align="middle" fullscreen="" width="3976" height="2246" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/samsung-galaxy-fit3-vs-fitbit-inspire-3-which-budget-fitness-tracker-wins">Samsung Galaxy Fit3 vs Fitbit Inspire 3: Which budget fitness tracker should you buy?</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tracked-skiing-with-a-usd99-smartwatch-heres-how-it-compares-to-my-usd450-garmin">I tracked skiing with a $99 smartwatch — here’s how it compares to my $450 Garmin</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-000-steps-with-the-amazfit-bip-5-vs-armitron-matrix-this-sub-usd100-smartwatch-wins">Under $100 smartwatch test: I walked 5,000 steps with the Amazfit Bip 5 vs Armitron Matrix — here’s the winner</a></li></ul><div data-widget-type="productname" data-model-name="Fitbit Ace 3" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/your-fitbit-sleep-score-just-got-worse-heres-why-thats-good-news</link>
                                                                            <description>
                            <![CDATA[ The new scores are supposed to be more accurate, but users aren't thrilled with their scores getting lower. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">TZ8cBkhTQxbQPPiXJ5QmtZ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/oRUgsepASWy9b5j7re65eM-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 05 Aug 2025 13:56:25 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dave.leclair@futurenet.com (Dave LeClair) ]]></author>                    <dc:creator><![CDATA[ Dave LeClair ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/fyx7qYdxPMTNBhdnMfNmaB.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Senior News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/oRUgsepASWy9b5j7re65eM-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a photo of the screen on the Fitbit Charge 6]]></media:description>                                                            <media:text><![CDATA[a photo of the screen on the Fitbit Charge 6]]></media:text>
                                <media:title type="plain"><![CDATA[a photo of the screen on the Fitbit Charge 6]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/oRUgsepASWy9b5j7re65eM-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Fitbit may be a brand that's far less at the forefront of people's minds <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">since Google started killing off certain Fitbit features</a> after acquiring the company for $2.1 billion in 2021.</p><p>But the fitness tracking company is far from dead. In fact, it just released a huge sleep tracking update that changes the way it scores your sleep.</p><p>And it turns out the changes are actually lowering user scores. It's by design, as the new changes are meant to be more accurate. In most cases, it appears that Fitbit was scoring too high previously, so the new metric is intended to level things out and bring the scores into a more accurate range.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ONRN2O"></div>                            </div>                            <script src="https://kwizly.com/embed/ONRN2O.js" async></script><p>But that doesn't mean users of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbits</a> are happy about it.</p><h2 id="what-s-happening-with-fitbit-s-sleep-tracking">What's happening with Fitbit's sleep tracking?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3976px;"><p class="vanilla-image-block" style="padding-top:56.49%;"><img id="7K462TB8CytXUpraxNqqM5" name="Fitbit sleep 1.JPG" alt="Sleep tracking on a Fitbit Charge 4" src="https://cdn.mos.cms.futurecdn.net/7K462TB8CytXUpraxNqqM5.jpg" mos="" align="middle" fullscreen="" width="3976" height="2246" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/samsung-galaxy-fit3-vs-fitbit-inspire-3-which-budget-fitness-tracker-wins">Samsung Galaxy Fit3 vs Fitbit Inspire 3: Which budget fitness tracker should you buy?</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tracked-skiing-with-a-usd99-smartwatch-heres-how-it-compares-to-my-usd450-garmin">I tracked skiing with a $99 smartwatch — here’s how it compares to my $450 Garmin</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-000-steps-with-the-amazfit-bip-5-vs-armitron-matrix-this-sub-usd100-smartwatch-wins">Under $100 smartwatch test: I walked 5,000 steps with the Amazfit Bip 5 vs Armitron Matrix — here’s the winner</a></li></ul><div data-widget-type="productname" data-model-name="Fitbit Ace 3" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Fitbit was down — live updates on the outage ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><p>Fitbit services were down for quite some time this morning, and the company acknowledged a <a href="https://status.fitbit.com/" target="_blank">"major outage"</a> that's currently listed as having "Functionality back to normal."</p><p>This comes following over 2,000 outage reports on <a href="https://downdetector.com/status/fitbit/" target="_blank">Down Detector</a>, and people claiming they are unable to access services on the app. Those reports have dropped precipitously, getting below 500, which is a clear indicator that the outage is over.</p><p>We covered the outage live to determine what went wrong and the steps taken to fix the problem.</p><h3 class="article-body__section" id="section-fitbit-was-down-live-updates-on-the-outage"><span>Fitbit was down — live updates on the outage</span></h3></div><div class="live-content"><time datetime="2025-07-17T13:27:53+00:00">July 17, 2025 – 9:27 AM</time><h2 id="that-s-a-big-spike">That's a big spike</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1481px;"><p class="vanilla-image-block" style="padding-top:43.75%;"><img id="qdyecbpfNi8FvLhDDVWNXQ" name="Down detector" alt="Down detector" src="https://cdn.mos.cms.futurecdn.net/qdyecbpfNi8FvLhDDVWNXQ.png" mos="" align="middle" fullscreen="" width="1481" height="648" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down detector)</span></figcaption></figure><p>The amount of reports started to grow at 12pm BST (7am ET), and has only been growing since.</p><p>The company acknowledges a major outage.</p></div><div class="live-content"><time datetime="2025-07-17T13:37:54+00:00">July 17, 2025 – 9:37 AM</time><h2 id="fitbit-status-page">Fitbit status page</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:40.70%;"><img id="YUZDjG3ALfaU3bbQwjpgDC" name="Screenshot 2025-07-17 at 9.37.30 AM" alt="Fitbit status" src="https://cdn.mos.cms.futurecdn.net/YUZDjG3ALfaU3bbQwjpgDC.png" mos="" align="middle" fullscreen="" width="2000" height="814" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Fitbit)</span></figcaption></figure><p>Fitbit posted on its <a href="https://status.fitbit.com/incidents/tAFb5PyMeD6MvuyweKMe" target="_blank">status page</a> that "We're experiencing a major outage."  At the moment, the company says an "Investigation in progress," so it's in the early phases. </p><p>Hopefully, that doesn't mean it'll take too long for it to be fixed so users can get their workouts going again.</p></div><div class="live-content"><time datetime="2025-07-17T13:44:00+00:00">July 17, 2025 – 9:44 AM</time><h2 id="a-small-drop-but-still-going">A small drop, but still going</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1548px;"><p class="vanilla-image-block" style="padding-top:41.34%;"><img id="FawDTiqtCy9BgyASi8Qeg3" name="Screenshot 2025-07-17 at 9.43.18 AM" alt="Down Detector" src="https://cdn.mos.cms.futurecdn.net/FawDTiqtCy9BgyASi8Qeg3.png" mos="" align="middle" fullscreen="" width="1548" height="640" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>We've seen a small drop in reports on Down Detector, indicating that fewer users are jumping on the service to say they're having issues. It doesn't necessarily mean the outage is over, as Fitbit hasn't said anything about a fix coming just yet.</p></div><div class="live-content"><time datetime="2025-07-17T13:54:12+00:00">July 17, 2025 – 9:54 AM</time><h2 id="no-progress-on-fitbit-s-end">No progress on Fitbit's end</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6000px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="cArqJTxRLG97vqoRrGCt8Z" name="Fitbit" alt="Fitbit" src="https://cdn.mos.cms.futurecdn.net/cArqJTxRLG97vqoRrGCt8Z.jpg" mos="" align="middle" fullscreen="" width="6000" height="4000" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Photo by Joshua Miranda)</span></figcaption></figure><p>It's still showing as investigating on the status page, so we'll have to wait until the company has any news to report.</p></div><div class="live-content"><time datetime="2025-07-17T14:04:20+00:00">July 17, 2025 – 10:04 AM</time><h2 id="users-trying-anything">Users trying anything</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1548px;"><p class="vanilla-image-block" style="padding-top:36.18%;"><img id="95NeMNXCZqbmQ9p4UKMZmj" name="Screenshot 2025-07-17 at 9.58.27 AM" alt="Down Detector" src="https://cdn.mos.cms.futurecdn.net/95NeMNXCZqbmQ9p4UKMZmj.png" mos="" align="middle" fullscreen="" width="1548" height="560" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>Users on Down Detector are reporting having tried a bunch of troubleshooting steps before realizing that Fitbit as a whole is down. </p><p>When something that usually works isn't working, it's always a good idea to see whether there's an outage hitting it before wasting a bunch of time with other steps. When there is an outage, it's out of your control anyway, so all you can do is sit back and wait.</p></div><div class="live-content"><time datetime="2025-07-17T14:17:50+00:00">July 17, 2025 – 10:17 AM</time><h2 id="mobile-app-and-web-api">Mobile App and Web API</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zWBWvFbBuPDyXGAerXZWL5" name="Fitbit Premium.jpg" alt="Apple Watch vs. Fitbit" src="https://cdn.mos.cms.futurecdn.net/zWBWvFbBuPDyXGAerXZWL5.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Fitbit)</span></figcaption></figure><p>Fitbit's status pages list the outage as officially affecting its Mobile App and Web API, which are two of the service's more critical aspects. The syncing issue some users experienced early this morning appears to have been resolved; however, without the mobile app and API, many Fitbit functions remain unusable.</p></div><div class="live-content"><time datetime="2025-07-17T14:27:21+00:00">July 17, 2025 – 10:27 AM</time><h2 id="a-big-decline-still-down-officially">A big decline, still down officially</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1548px;"><p class="vanilla-image-block" style="padding-top:37.60%;"><img id="W4wnvNjdYZsr4s4U5gD2c6" name="Screenshot 2025-07-17 at 10.24.47 AM" alt="Down Detector" src="https://cdn.mos.cms.futurecdn.net/W4wnvNjdYZsr4s4U5gD2c6.png" mos="" align="middle" fullscreen="" width="1548" height="582" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>We've seen reports drop to the 900 range on Down Detector, which is a massive decrease from the 2,200 at which it peaked. However, on Fitbit's status page, it still indicates an outage in progress, so it's difficult to say whether Fitbit is being cautious with its reporting that things are fixed or if users are simply not reporting issues as frequently.</p><p>Either way, keep your browser pointed right here, as we'll bring you any new information as it emerges. </p></div><div class="live-content"><time datetime="2025-07-17T14:40:53+00:00">July 17, 2025 – 10:40 AM</time><h2 id="fitbit-in-the-uk-seeing-a-similar-pattern">Fitbit in the UK seeing a similar pattern</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1548px;"><p class="vanilla-image-block" style="padding-top:37.60%;"><img id="vU4wBEWUuYAiXgSiUYLFv" name="Screenshot 2025-07-17 at 10.39.13 AM" alt="Down Detector UK" src="https://cdn.mos.cms.futurecdn.net/vU4wBEWUuYAiXgSiUYLFv.png" mos="" align="middle" fullscreen="" width="1548" height="582" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>The U.K., while experiencing a lower number of reports overall, is seeing a similar pattern to the U.S. It went up, stayed pretty steady and is now on the decline, as you can see from the image above.</p></div><div class="live-content"><time datetime="2025-07-17T14:48:19+00:00">July 17, 2025 – 10:48 AM</time><h2 id="reddit-users-still-having-problems">Reddit users still having problems</h2><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/fitbit/comments/1m24zu4/trouble_logging_in">Trouble Logging In</a><figcaption><cite> from <a href="https://www.reddit.com/r/fitbit">r/fitbit</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script></div><div class="live-content"><time datetime="2025-07-17T14:52:41+00:00">July 17, 2025 – 10:52 AM</time><h2 id="fitbit-says-it-s-back-to-normal">Fitbit says it's back to normal</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3443px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="oRUgsepASWy9b5j7re65eM" name="IMG_9298.jpg" alt="a photo of the screen on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/oRUgsepASWy9b5j7re65eM.jpg" mos="" align="middle" fullscreen="" width="3443" height="1936" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>According to the <a href="https://status.fitbit.com/incidents/tAFb5PyMeD6MvuyweKMe" target="_blank">Fitbit status page</a>, the outage is now listed as "Functionality back to normal." </p><p>That, plus the massive drop in Fitbit reports on Down Detector, leads us to believe that this outage is wrapping up, letting Fitbit users get back to using their <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">favorite fitness trackers</a> without issue.</p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/news/live/fitbit-outage-july-17-2025</link>
                                                                            <description>
                            <![CDATA[ Fitbit was down after a "major outage." Here's everything we know so far and live updates. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">eNq3Y6NaX47XNk4UiiBLPg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/LYgmUAogLrfdpYGgNsYafQ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 17 Jul 2025 13:34:15 +0000</pubDate>                                                                                                                                <updated>Thu, 17 Jul 2025 14:55:47 +0000</updated>
                                                                                                                                            <category><![CDATA[Internet]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/LYgmUAogLrfdpYGgNsYafQ-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[ smartphone on laptop keyboard showing Fitbit logo.]]></media:description>                                                            <media:text><![CDATA[ smartphone on laptop keyboard showing Fitbit logo.]]></media:text>
                                <media:title type="plain"><![CDATA[ smartphone on laptop keyboard showing Fitbit logo.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/LYgmUAogLrfdpYGgNsYafQ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><p>Fitbit services were down for quite some time this morning, and the company acknowledged a <a href="https://status.fitbit.com/" target="_blank">"major outage"</a> that's currently listed as having "Functionality back to normal."</p><p>This comes following over 2,000 outage reports on <a href="https://downdetector.com/status/fitbit/" target="_blank">Down Detector</a>, and people claiming they are unable to access services on the app. Those reports have dropped precipitously, getting below 500, which is a clear indicator that the outage is over.</p><p>We covered the outage live to determine what went wrong and the steps taken to fix the problem.</p><h3 class="article-body__section" id="section-fitbit-was-down-live-updates-on-the-outage"><span>Fitbit was down — live updates on the outage</span></h3></div><div class="live-content"><time datetime="2025-07-17T13:27:53+00:00">July 17, 2025 – 9:27 AM</time><h2 id="that-s-a-big-spike">That's a big spike</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1481px;"><p class="vanilla-image-block" style="padding-top:43.75%;"><img id="qdyecbpfNi8FvLhDDVWNXQ" name="Down detector" alt="Down detector" src="https://cdn.mos.cms.futurecdn.net/qdyecbpfNi8FvLhDDVWNXQ.png" mos="" align="middle" fullscreen="" width="1481" height="648" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down detector)</span></figcaption></figure><p>The amount of reports started to grow at 12pm BST (7am ET), and has only been growing since.</p><p>The company acknowledges a major outage.</p></div><div class="live-content"><time datetime="2025-07-17T13:37:54+00:00">July 17, 2025 – 9:37 AM</time><h2 id="fitbit-status-page">Fitbit status page</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:40.70%;"><img id="YUZDjG3ALfaU3bbQwjpgDC" name="Screenshot 2025-07-17 at 9.37.30 AM" alt="Fitbit status" src="https://cdn.mos.cms.futurecdn.net/YUZDjG3ALfaU3bbQwjpgDC.png" mos="" align="middle" fullscreen="" width="2000" height="814" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Fitbit)</span></figcaption></figure><p>Fitbit posted on its <a href="https://status.fitbit.com/incidents/tAFb5PyMeD6MvuyweKMe" target="_blank">status page</a> that "We're experiencing a major outage."  At the moment, the company says an "Investigation in progress," so it's in the early phases. </p><p>Hopefully, that doesn't mean it'll take too long for it to be fixed so users can get their workouts going again.</p></div><div class="live-content"><time datetime="2025-07-17T13:44:00+00:00">July 17, 2025 – 9:44 AM</time><h2 id="a-small-drop-but-still-going">A small drop, but still going</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1548px;"><p class="vanilla-image-block" style="padding-top:41.34%;"><img id="FawDTiqtCy9BgyASi8Qeg3" name="Screenshot 2025-07-17 at 9.43.18 AM" alt="Down Detector" src="https://cdn.mos.cms.futurecdn.net/FawDTiqtCy9BgyASi8Qeg3.png" mos="" align="middle" fullscreen="" width="1548" height="640" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>We've seen a small drop in reports on Down Detector, indicating that fewer users are jumping on the service to say they're having issues. It doesn't necessarily mean the outage is over, as Fitbit hasn't said anything about a fix coming just yet.</p></div><div class="live-content"><time datetime="2025-07-17T13:54:12+00:00">July 17, 2025 – 9:54 AM</time><h2 id="no-progress-on-fitbit-s-end">No progress on Fitbit's end</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6000px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="cArqJTxRLG97vqoRrGCt8Z" name="Fitbit" alt="Fitbit" src="https://cdn.mos.cms.futurecdn.net/cArqJTxRLG97vqoRrGCt8Z.jpg" mos="" align="middle" fullscreen="" width="6000" height="4000" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Photo by Joshua Miranda)</span></figcaption></figure><p>It's still showing as investigating on the status page, so we'll have to wait until the company has any news to report.</p></div><div class="live-content"><time datetime="2025-07-17T14:04:20+00:00">July 17, 2025 – 10:04 AM</time><h2 id="users-trying-anything">Users trying anything</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1548px;"><p class="vanilla-image-block" style="padding-top:36.18%;"><img id="95NeMNXCZqbmQ9p4UKMZmj" name="Screenshot 2025-07-17 at 9.58.27 AM" alt="Down Detector" src="https://cdn.mos.cms.futurecdn.net/95NeMNXCZqbmQ9p4UKMZmj.png" mos="" align="middle" fullscreen="" width="1548" height="560" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>Users on Down Detector are reporting having tried a bunch of troubleshooting steps before realizing that Fitbit as a whole is down. </p><p>When something that usually works isn't working, it's always a good idea to see whether there's an outage hitting it before wasting a bunch of time with other steps. When there is an outage, it's out of your control anyway, so all you can do is sit back and wait.</p></div><div class="live-content"><time datetime="2025-07-17T14:17:50+00:00">July 17, 2025 – 10:17 AM</time><h2 id="mobile-app-and-web-api">Mobile App and Web API</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zWBWvFbBuPDyXGAerXZWL5" name="Fitbit Premium.jpg" alt="Apple Watch vs. Fitbit" src="https://cdn.mos.cms.futurecdn.net/zWBWvFbBuPDyXGAerXZWL5.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Fitbit)</span></figcaption></figure><p>Fitbit's status pages list the outage as officially affecting its Mobile App and Web API, which are two of the service's more critical aspects. The syncing issue some users experienced early this morning appears to have been resolved; however, without the mobile app and API, many Fitbit functions remain unusable.</p></div><div class="live-content"><time datetime="2025-07-17T14:27:21+00:00">July 17, 2025 – 10:27 AM</time><h2 id="a-big-decline-still-down-officially">A big decline, still down officially</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1548px;"><p class="vanilla-image-block" style="padding-top:37.60%;"><img id="W4wnvNjdYZsr4s4U5gD2c6" name="Screenshot 2025-07-17 at 10.24.47 AM" alt="Down Detector" src="https://cdn.mos.cms.futurecdn.net/W4wnvNjdYZsr4s4U5gD2c6.png" mos="" align="middle" fullscreen="" width="1548" height="582" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>We've seen reports drop to the 900 range on Down Detector, which is a massive decrease from the 2,200 at which it peaked. However, on Fitbit's status page, it still indicates an outage in progress, so it's difficult to say whether Fitbit is being cautious with its reporting that things are fixed or if users are simply not reporting issues as frequently.</p><p>Either way, keep your browser pointed right here, as we'll bring you any new information as it emerges. </p></div><div class="live-content"><time datetime="2025-07-17T14:40:53+00:00">July 17, 2025 – 10:40 AM</time><h2 id="fitbit-in-the-uk-seeing-a-similar-pattern">Fitbit in the UK seeing a similar pattern</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1548px;"><p class="vanilla-image-block" style="padding-top:37.60%;"><img id="vU4wBEWUuYAiXgSiUYLFv" name="Screenshot 2025-07-17 at 10.39.13 AM" alt="Down Detector UK" src="https://cdn.mos.cms.futurecdn.net/vU4wBEWUuYAiXgSiUYLFv.png" mos="" align="middle" fullscreen="" width="1548" height="582" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>The U.K., while experiencing a lower number of reports overall, is seeing a similar pattern to the U.S. It went up, stayed pretty steady and is now on the decline, as you can see from the image above.</p></div><div class="live-content"><time datetime="2025-07-17T14:48:19+00:00">July 17, 2025 – 10:48 AM</time><h2 id="reddit-users-still-having-problems">Reddit users still having problems</h2><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/fitbit/comments/1m24zu4/trouble_logging_in">Trouble Logging In</a><figcaption><cite> from <a href="https://www.reddit.com/r/fitbit">r/fitbit</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script></div><div class="live-content"><time datetime="2025-07-17T14:52:41+00:00">July 17, 2025 – 10:52 AM</time><h2 id="fitbit-says-it-s-back-to-normal">Fitbit says it's back to normal</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3443px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="oRUgsepASWy9b5j7re65eM" name="IMG_9298.jpg" alt="a photo of the screen on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/oRUgsepASWy9b5j7re65eM.jpg" mos="" align="middle" fullscreen="" width="3443" height="1936" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>According to the <a href="https://status.fitbit.com/incidents/tAFb5PyMeD6MvuyweKMe" target="_blank">Fitbit status page</a>, the outage is now listed as "Functionality back to normal." </p><p>That, plus the massive drop in Fitbit reports on Down Detector, leads us to believe that this outage is wrapping up, letting Fitbit users get back to using their <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">favorite fitness trackers</a> without issue.</p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I review fitness trackers and my favorite Fitbit just crashed to its lowest ever price for Prime Day  ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I’ve tested dozens upon dozens of wellness wearables during my two years at Tom’s Guide, and despite having access to just about every fitness tracker and smartwatch under the sun, there’s one model that gets a lot more wrist time than the others. </p><p>No, it’s not the $799 <a href="https://www.tomsguide.com/reviews/apple-watch-ultra-2">Apple Watch Ultra 2</a>, nor is it the $400 <a href="https://www.tomsguide.com/Garmin-Instinct-3-review">Garmin Instinct 3</a>. Instead, my go-to tracker for bike rides, hikes, jogs, and swims is the humble <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>. It’s also not a coincidence that the model is our <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html#section-best-fitness-tracker-overall">best overall fitness tracker</a> pick of 2025. </p><div class="product"><a data-dimension112="bdd524da-b33d-49ab-9a60-559b6727f1cf" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M/ref=sr_1_3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:119.29%;"><img id="cT9DuD2RvghnQbp7ggZByi" name="FitbitCharge6-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cT9DuD2RvghnQbp7ggZByi.jpg" mos="" align="middle" fullscreen="" width="679" height="810" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This deal is on all three Charge 6 colors, including a silver case with a white band, a gold case with an orange band, and a black case with a black band. It also includes six months of Fitbit Premium on the house to sweeten the offer. Regardless of your wrist size, each option includes both a set of small and large bands. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="bdd524da-b33d-49ab-9a60-559b6727f1cf" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><p>Normally priced at $159, Amazon is selling the <a href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M/ref=sr_1_3">Charge 6 for just $99</a>, or 38% off. That’s the lowest price it's ever sold for; the last time it hit $99 was during last year’s holiday season. Translation: don't hesitate on this deal because it's not likely to last long.</p><p>Weighing less than six ounces, this diminutive wearable is anything but unwieldy. A small AMOLED touchscreen adorns the front, and a haptic feedback button on the side makes navigation a breeze.</p><p>The device offers roughly six days of battery, sports an onboard GPS for location tracking with no paired smartphone needed, and supports a wide range of physical activity types, from popular sports to more nuanced ones. For example, I’ve used the Charge 6 to keep tabs on kayaking and snowboarding excursions, as well as hikes and walks. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3443px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="oRUgsepASWy9b5j7re65eM" name="IMG_9298.jpg" alt="a photo of the screen on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/oRUgsepASWy9b5j7re65eM.jpg" mos="" align="middle" fullscreen="" width="3443" height="1936" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Fitbit Charge 6 is also a mighty accurate sleep tracker and heart rate monitor. However, it’s worth noting that some of the more advanced training features are locked behind <a href="https://www.tomsguide.com/news/is-fitbit-premium-worth-it">Fitbit’s Premium paywall</a>, which is $9.99 a month or $79.99 for the year. That said, this deal comes with a six-month free trial to the service. </p><p>In addition to health features, the Charge 6 supports a small but useful selection of Google apps, including Maps, Google Wallet and YouTube Music. </p><p>Ultimately, what I like most about the Charge 6 is the fact that I forget it’s even there most of the time. Unlike the multitude of clunkier options out there, the Charge 6 does its thing with impressive accuracy and without drawing much attention. </p><h2 id="shop-today-s-best-prime-day-deals">Shop today's best Prime Day deals</h2><ul><li><strong></strong><a href="https://www.amazon.com/deals" target="_blank" rel="nofollow"><strong>Shop all Amazon Prime Day Deals @ Amazon</strong></a><strong></strong></li><li><strong>Apple Series Watch 10: </strong><a href="http://amazon.com/Apple-Watch-Smartwatch-Aluminium-Always/dp/B0DGHHJ1PJ" target="_blank" rel="nofollow"><strong>lowest price ever</strong></a><strong></strong></li><li><strong>Carhartt: </strong><a href="http://amazon.com/stores/page/4F132A77-5E77-4A74-9EE5-B7D71CBBD8FF" target="_blank" rel="nofollow"><strong>deals from $9</strong></a><strong></strong></li><li><strong>Yeti coolers and tumblers: </strong><a href="http://amazon.com/stores/page/1E4D4A1D-181B-4581-8F59-B69FD597FEBD" target="_blank" rel="nofollow"><strong>up to 25% off</strong></a></li><li><strong>Columbia backpacks: </strong><a href="https://www.amazon.com/Columbia-Unisex-Triple-Canyon-Backpack/dp/B0CLWM7F7T?" target="_blank" rel="nofollow"><strong>take 25% off</strong></a></li><li><strong>Our favorite Bluetooth speakers: </strong><a href="https://www.amazon.com/dp/B01MTB55WH" target="_blank" rel="nofollow"><strong>from $29</strong></a></li><li><strong>Amazon devices: </strong><a href="https://www.amazon.com/events/devicedeals" target="_blank" rel="nofollow"><strong>starting at $14</strong></a><strong></strong></li><li><strong>Nintendo Switch games: </strong><a href="https://www.nintendo.com/us/store/products/enter-the-gungeon-switch/" target="_blank" rel="nofollow"><strong>deals from $3</strong></a><strong></strong></li><li><strong>PlayStation 5 games and accessories: </strong><a href="https://www.amazon.com/dp/B0D3PBB78P/ref=twister_B0D86H15H5?_encoding=UTF8&th=1" target="_blank" rel="nofollow"><strong>deals from $13</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-review-fitness-trackers-and-my-favorite-fitbit-is-close-to-its-lowest-ever-price-for-prime-day</link>
                                                                            <description>
                            <![CDATA[ The Fitbit Charge 6 — my favorite fitness tracker currently on the market — just dropped to 38% off, its best price ever. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">8SXnGHtqm4Qh7d2mLRRXEk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6h6BZRpPSQHcF5qsKeYv5-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 07 Jul 2025 23:35:52 +0000</pubDate>                                                                                                                                <updated>Wed, 09 Jul 2025 02:58:50 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/6h6BZRpPSQHcF5qsKeYv5-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Charge 6 on a user&#039;s wrist with a grey strap and purple flowers in the backgroun]]></media:description>                                                            <media:text><![CDATA[Fitbit Charge 6 on a user&#039;s wrist with a grey strap and purple flowers in the backgroun]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Charge 6 on a user&#039;s wrist with a grey strap and purple flowers in the backgroun]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6h6BZRpPSQHcF5qsKeYv5-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve tested dozens upon dozens of wellness wearables during my two years at Tom’s Guide, and despite having access to just about every fitness tracker and smartwatch under the sun, there’s one model that gets a lot more wrist time than the others. </p><p>No, it’s not the $799 <a href="https://www.tomsguide.com/reviews/apple-watch-ultra-2">Apple Watch Ultra 2</a>, nor is it the $400 <a href="https://www.tomsguide.com/Garmin-Instinct-3-review">Garmin Instinct 3</a>. Instead, my go-to tracker for bike rides, hikes, jogs, and swims is the humble <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>. It’s also not a coincidence that the model is our <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html#section-best-fitness-tracker-overall">best overall fitness tracker</a> pick of 2025. </p><div class="product"><a data-dimension112="bdd524da-b33d-49ab-9a60-559b6727f1cf" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M/ref=sr_1_3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:119.29%;"><img id="cT9DuD2RvghnQbp7ggZByi" name="FitbitCharge6-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cT9DuD2RvghnQbp7ggZByi.jpg" mos="" align="middle" fullscreen="" width="679" height="810" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This deal is on all three Charge 6 colors, including a silver case with a white band, a gold case with an orange band, and a black case with a black band. It also includes six months of Fitbit Premium on the house to sweeten the offer. Regardless of your wrist size, each option includes both a set of small and large bands. <a class="view-deal button" href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="bdd524da-b33d-49ab-9a60-559b6727f1cf" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$99">View Deal</a></p></div><p>Normally priced at $159, Amazon is selling the <a href="https://www.amazon.com/Fitbit-Exercise-Equipment-6-Months-Membership/dp/B0CC62ZG1M/ref=sr_1_3">Charge 6 for just $99</a>, or 38% off. That’s the lowest price it's ever sold for; the last time it hit $99 was during last year’s holiday season. Translation: don't hesitate on this deal because it's not likely to last long.</p><p>Weighing less than six ounces, this diminutive wearable is anything but unwieldy. A small AMOLED touchscreen adorns the front, and a haptic feedback button on the side makes navigation a breeze.</p><p>The device offers roughly six days of battery, sports an onboard GPS for location tracking with no paired smartphone needed, and supports a wide range of physical activity types, from popular sports to more nuanced ones. For example, I’ve used the Charge 6 to keep tabs on kayaking and snowboarding excursions, as well as hikes and walks. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3443px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="oRUgsepASWy9b5j7re65eM" name="IMG_9298.jpg" alt="a photo of the screen on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/oRUgsepASWy9b5j7re65eM.jpg" mos="" align="middle" fullscreen="" width="3443" height="1936" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Fitbit Charge 6 is also a mighty accurate sleep tracker and heart rate monitor. However, it’s worth noting that some of the more advanced training features are locked behind <a href="https://www.tomsguide.com/news/is-fitbit-premium-worth-it">Fitbit’s Premium paywall</a>, which is $9.99 a month or $79.99 for the year. That said, this deal comes with a six-month free trial to the service. </p><p>In addition to health features, the Charge 6 supports a small but useful selection of Google apps, including Maps, Google Wallet and YouTube Music. </p><p>Ultimately, what I like most about the Charge 6 is the fact that I forget it’s even there most of the time. Unlike the multitude of clunkier options out there, the Charge 6 does its thing with impressive accuracy and without drawing much attention. </p><h2 id="shop-today-s-best-prime-day-deals">Shop today's best Prime Day deals</h2><ul><li><strong></strong><a href="https://www.amazon.com/deals" target="_blank" rel="nofollow"><strong>Shop all Amazon Prime Day Deals @ Amazon</strong></a><strong></strong></li><li><strong>Apple Series Watch 10: </strong><a href="http://amazon.com/Apple-Watch-Smartwatch-Aluminium-Always/dp/B0DGHHJ1PJ" target="_blank" rel="nofollow"><strong>lowest price ever</strong></a><strong></strong></li><li><strong>Carhartt: </strong><a href="http://amazon.com/stores/page/4F132A77-5E77-4A74-9EE5-B7D71CBBD8FF" target="_blank" rel="nofollow"><strong>deals from $9</strong></a><strong></strong></li><li><strong>Yeti coolers and tumblers: </strong><a href="http://amazon.com/stores/page/1E4D4A1D-181B-4581-8F59-B69FD597FEBD" target="_blank" rel="nofollow"><strong>up to 25% off</strong></a></li><li><strong>Columbia backpacks: </strong><a href="https://www.amazon.com/Columbia-Unisex-Triple-Canyon-Backpack/dp/B0CLWM7F7T?" target="_blank" rel="nofollow"><strong>take 25% off</strong></a></li><li><strong>Our favorite Bluetooth speakers: </strong><a href="https://www.amazon.com/dp/B01MTB55WH" target="_blank" rel="nofollow"><strong>from $29</strong></a></li><li><strong>Amazon devices: </strong><a href="https://www.amazon.com/events/devicedeals" target="_blank" rel="nofollow"><strong>starting at $14</strong></a><strong></strong></li><li><strong>Nintendo Switch games: </strong><a href="https://www.nintendo.com/us/store/products/enter-the-gungeon-switch/" target="_blank" rel="nofollow"><strong>deals from $3</strong></a><strong></strong></li><li><strong>PlayStation 5 games and accessories: </strong><a href="https://www.amazon.com/dp/B0D3PBB78P/ref=twister_B0D86H15H5?_encoding=UTF8&th=1" target="_blank" rel="nofollow"><strong>deals from $13</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I walked 6,500 steps with the Fitbit Charge 6 vs Pixel Watch 3 — and I’m surprised by the winner ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Want the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbit</a> available today? Your choices come down to the Fitbit Charge 6 and Google Pixel Watch 3. Both devices are powered by Fitbit and produced by Google, but that's where the similarities end.</p><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> was announced in 2023 and remains the brand's flagship band-style fitness tracker. The <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review">Pixel Watch 3</a>, meanwhile, launched in 2024 and is Google's one and only smartwatch offering, though it comes in two sizes. </p><p>For this test, I pitted the smaller 41mm Pixel Watch 3 ($349) against the Fitbit Charge 6 ($159). With Google <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">winding down the Fitbit brand</a>, there's a good chance that the Charge 6 is the end of the road for perhaps the brand's most beloved wearable line.</p><p>So, is the Pixel Watch 3 a good replacement for the Charge 6, at least from a fitness tracking standpoint? There's only one way to find out. Let the test begin!</p><h3 class="article-body__section" id="section-fitbit-charge-6-vs-google-pixel-watch-3-walk-test"><span>Fitbit Charge 6 vs. Google Pixel Watch 3: Walk test</span></h3><div class="product"><a data-dimension112="fc9ae658-e120-446e-97c1-29682d280d4d" data-action="Deal Block" data-label="Pixel Watch 3" data-dimension48="Pixel Watch 3" data-dimension25="$299" href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D9138ZXM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:950px;"><p class="vanilla-image-block" style="padding-top:100.42%;"><img id="RAngNKAwiUsTSEwuZf6eCU" name="PixelWatch3-BG.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RAngNKAwiUsTSEwuZf6eCU.jpg" mos="" align="middle" fullscreen="" width="950" height="954" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Google Pixel Watch 3 is a full-featured smartwatch with all of Fitbit's best fitness tracking and wellness features built in. Though it's considerably more expensive than the Fitbit Charge 6, the Pixel Watch 3 has way more smart features, too. It also works with a gigantic range of third-party apps. The Charge 6 does not. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D9138ZXM" target="_blank" rel="nofollow" data-dimension112="fc9ae658-e120-446e-97c1-29682d280d4d" data-action="Deal Block" data-label="Pixel Watch 3" data-dimension48="Pixel Watch 3" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="b35a718f-c77a-462c-8568-e3d33a73e4f6" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$139" href="https://www.amazon.com/Fitbit-Fitness-Tracker-Premium-Membership/dp/B0CC644KMJ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XJdcnPAkGqaCLqcmrHCQib" name="Fitbit Charge 6.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XJdcnPAkGqaCLqcmrHCQib.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Charge 6 could be one of the last devices to bear the Fitbit name. Launched in 2023, this high-end tracker sports a small AMOLED touchscreen and boasts impressive fitness-tracking chops. It also has better battery life than its modern smartwatch cousin and is lighter on the wrist. Did I mention it's also about half the cost of the Pixel Watch? <a class="view-deal button" href="https://www.amazon.com/Fitbit-Fitness-Tracker-Premium-Membership/dp/B0CC644KMJ/" target="_blank" rel="nofollow" data-dimension112="b35a718f-c77a-462c-8568-e3d33a73e4f6" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$139">View Deal</a></p></div><p>If you've read my <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-6-500-steps-with-the-garmin-vivoactive-6-vs-samsung-galaxy-watch-7-and-the-winner-may-surprise-you">previous walk test articles</a>, you can probably go ahead and skip to the next section. For those new here, this is how these comparisons go down: With a smartwatch on either wrist, I begin tracking my walk. As a control, I manually count each step I take; <a href="https://www.tomsguide.com/reviews/bose-quietcomfort-headphones">my favorite Bose Quiet Comfort headphones</a> help drown out the distraction.</p><p>To help me keep track of the total, I click an old-school manual tally counter every hundred steps before starting my tally over again at one. In this case, I repeated that process 65 times before finding a nice quiet park bench to settle down on and record the data. </p><p>Oh, and as an extra control, I recorded the walk using Strava on my trusty <a href="https://www.tomsguide.com/reviews/iphone-12-mini">iPhone 12 Mini</a>. Check out the results below:</p><h3 class="article-body__section" id="section-fitbit-charge-6-vs-google-pixel-watch-3-walk-test-results"><span>Fitbit Charge 6 vs. Google Pixel Watch 3: Walk test results</span></h3><div ><table><caption>Fitbit Charge 6 vs. Google Pixel Watch 3:</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Charge 6</p></th><th  ><p>Google Pixel Watch 3</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Step count</p></td><td  ><p>6,546 steps</p></td><td  ><p>6,563 steps</p></td><td  ><p>6,500 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>3.01 miles</p></td><td  ><p>3.4 miles</p></td><td  ><p> 3.41 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Elevation gain</p></td><td  ><p>no data</p></td><td  ><p>325 feet</p></td><td  ><p>303 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace</p></td><td  ><p>22 mins, 21 secs per mile</p></td><td  ><p>19 mins, 48 secs per mile</p></td><td  ><p>18 mins, 20 secs per mile</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>114 bpm</p></td><td  ><p>114 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>164 bpm</p></td><td  ><p>164 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Calories burned</p></td><td  ><p>527 calories </p></td><td  ><p>529 calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Device battery usage</p></td><td  ><p>+ 1%</p></td><td  ><p>- 9%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>Well, well, well — look at which device was closer to my actual step count total by a whole 17 steps; it's the Fitbit Charge 6. For what it's worth, both devices beat Strava's tally of 6,558 steps. </p><p>Unfortunately for the small but mighty Charge 6, things get a little funky when we move on to distance data. Despite nailing my step count total with impressive accuracy, the device appears to have severely undercounted my distance covered by a whopping 0.4 miles... that's not an insignificant difference. </p><p>The Fitbit Charge 6 frustratingly also does not report elevation gain data, even though it technically could using the onboard GPS. And while I didn't intend for this walk to be hilly, living in Seattle, Washington, a few hundred feet of elevation gain is par for the course when cruising around town on foot. </p><p>The Pixel Watch 3 <em>does</em> report climb data, which looks perhaps a tad inflated for this walk — I tend to trust Strava as the gold standard here — but still accurate enough for my needs. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3125px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Snq8uyqybvqHdY3RRzEpvG" name="best-fitbit-02" alt="The Pixel Watch 3 on a black strap next to the Fitbit Charge 6 on an orange strap on a user's wrist with white flowers in the background" src="https://cdn.mos.cms.futurecdn.net/Snq8uyqybvqHdY3RRzEpvG.jpg" mos="" align="middle" fullscreen="" width="3125" height="1758" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Of course, had the Pixel Watch 3 undercounted my climb by 22 feet (compared to Strava), I might not be so forgiving. </p><p>Strava provides two pace metrics including an average moving pace — reported above — and an elapsed pace, which tends to be slower. In this case, my elapsed pace was 19 minutes and 15 seconds per mile, much closer to the Pixel Watch 3's metric. </p><p>Inflated pace data from the Fitbit Charge 6, meanwhile, makes sense given it measured a considerably shorter walk, distance-wise. </p><p>Nothing warms my heart more than two devices capturing similar heart rate data during these head-to-heads, and it doesn't get any more precise than this. The same goes for calories burned. </p><p>Finally, while the Pixel Watch 3 burned through 9% of its battery during my roughly one-hour-and-seven-minute walk, the Charge 6 somehow managed to gain 1% battery (from 98% when I left to 99% when I returned).  </p><h3 class="article-body__section" id="section-fitbit-charge-6-vs-google-pixel-watch-3-winner"><span>Fitbit Charge 6 vs. Google Pixel Watch 3: Winner</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3443px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="oRUgsepASWy9b5j7re65eM" name="IMG_9298.jpg" alt="a photo of the screen on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/oRUgsepASWy9b5j7re65eM.jpg" mos="" align="middle" fullscreen="" width="3443" height="1936" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In today's battle of the Fitbit-powered Google wearables, the underdog Charge 6 comes out on top. However, even though the Fitbit Charge 6 managed a closer step count total to my manual count, the Pixel Watch 3 proved more accurate across the board. </p><p>Still, I'm impressed that the older, more affordable wearable was able to keep up with the newer and higher-end Pixel Watch 3. Ultimately, the Charge 6 remains one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> for the money in 2025, especially if you like easy-wearing devices with great battery and onboard GPS so that you can leave your phone at home. </p><p>Which fitness trackers and/or smartwatches should I test head-to-head next? Let me know in the comments below. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-6-000-steps-with-the-apple-watch-10-vs-samsung-galaxy-watch-7-this-device-was-more-accurate">I walked 6,000 steps with the Apple Watch 10 vs Samsung Galaxy Watch 7 — this one was more accurate</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-biked-12-miles-with-the-apple-watch-10-vs-garmin-vivoactive-6-heres-the-winner">I biked 12 miles with the Apple Watch 10 vs Garmin Vivoactive 6 — here's the winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-test-smartwatches-for-a-living-and-these-are-my-5-favorite-models-when-i-go-hiking">I test smartwatches for a living — and these are my 5 favorite models when I go hiking</a></li></ul><div data-widget-type="merchantlink" data-model-name="Google Pixel Watch 3,Fitbit Charge 6" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/i-walked-6-500-steps-with-the-fitbit-charge-6-vs-pixel-watch-3-and-im-surprised-by-the-winner</link>
                                                                            <description>
                            <![CDATA[ This Fitbit Charge 6 versus Google Pixel Watch 3 face-off looks at which Google wearable tracks daily walking goals with better accuracy. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3gooaPqjNXtTDKPUpo6Ysf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/AxAC9ZUgB6AsvdEVhn2pmD-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 18 Jun 2025 09:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 19 Jun 2025 01:26:43 +0000</updated>
                                                                                                                                            <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/AxAC9ZUgB6AsvdEVhn2pmD-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Fitbit Charge 6 on an orange strap next to the Pixel Watch 3 on a black strap on a user&#039;s wrist with blue and pink flowers in the background]]></media:description>                                                            <media:text><![CDATA[The Fitbit Charge 6 on an orange strap next to the Pixel Watch 3 on a black strap on a user&#039;s wrist with blue and pink flowers in the background]]></media:text>
                                <media:title type="plain"><![CDATA[The Fitbit Charge 6 on an orange strap next to the Pixel Watch 3 on a black strap on a user&#039;s wrist with blue and pink flowers in the background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/AxAC9ZUgB6AsvdEVhn2pmD-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Want the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html">best Fitbit</a> available today? Your choices come down to the Fitbit Charge 6 and Google Pixel Watch 3. Both devices are powered by Fitbit and produced by Google, but that's where the similarities end.</p><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a> was announced in 2023 and remains the brand's flagship band-style fitness tracker. The <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review">Pixel Watch 3</a>, meanwhile, launched in 2024 and is Google's one and only smartwatch offering, though it comes in two sizes. </p><p>For this test, I pitted the smaller 41mm Pixel Watch 3 ($349) against the Fitbit Charge 6 ($159). With Google <a href="https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead">winding down the Fitbit brand</a>, there's a good chance that the Charge 6 is the end of the road for perhaps the brand's most beloved wearable line.</p><p>So, is the Pixel Watch 3 a good replacement for the Charge 6, at least from a fitness tracking standpoint? There's only one way to find out. Let the test begin!</p><h3 class="article-body__section" id="section-fitbit-charge-6-vs-google-pixel-watch-3-walk-test"><span>Fitbit Charge 6 vs. Google Pixel Watch 3: Walk test</span></h3><div class="product"><a data-dimension112="fc9ae658-e120-446e-97c1-29682d280d4d" data-action="Deal Block" data-label="Pixel Watch 3" data-dimension48="Pixel Watch 3" data-dimension25="$299" href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D9138ZXM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:950px;"><p class="vanilla-image-block" style="padding-top:100.42%;"><img id="RAngNKAwiUsTSEwuZf6eCU" name="PixelWatch3-BG.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RAngNKAwiUsTSEwuZf6eCU.jpg" mos="" align="middle" fullscreen="" width="950" height="954" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Google Pixel Watch 3 is a full-featured smartwatch with all of Fitbit's best fitness tracking and wellness features built in. Though it's considerably more expensive than the Fitbit Charge 6, the Pixel Watch 3 has way more smart features, too. It also works with a gigantic range of third-party apps. The Charge 6 does not. <a class="view-deal button" href="https://www.amazon.com/Google-Pixel-Watch-Latest-Model/dp/B0D9138ZXM" target="_blank" rel="nofollow" data-dimension112="fc9ae658-e120-446e-97c1-29682d280d4d" data-action="Deal Block" data-label="Pixel Watch 3" data-dimension48="Pixel Watch 3" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="b35a718f-c77a-462c-8568-e3d33a73e4f6" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$139" href="https://www.amazon.com/Fitbit-Fitness-Tracker-Premium-Membership/dp/B0CC644KMJ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XJdcnPAkGqaCLqcmrHCQib" name="Fitbit Charge 6.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XJdcnPAkGqaCLqcmrHCQib.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Charge 6 could be one of the last devices to bear the Fitbit name. Launched in 2023, this high-end tracker sports a small AMOLED touchscreen and boasts impressive fitness-tracking chops. It also has better battery life than its modern smartwatch cousin and is lighter on the wrist. Did I mention it's also about half the cost of the Pixel Watch? <a class="view-deal button" href="https://www.amazon.com/Fitbit-Fitness-Tracker-Premium-Membership/dp/B0CC644KMJ/" target="_blank" rel="nofollow" data-dimension112="b35a718f-c77a-462c-8568-e3d33a73e4f6" data-action="Deal Block" data-label="Charge 6" data-dimension48="Charge 6" data-dimension25="$139">View Deal</a></p></div><p>If you've read my <a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-6-500-steps-with-the-garmin-vivoactive-6-vs-samsung-galaxy-watch-7-and-the-winner-may-surprise-you">previous walk test articles</a>, you can probably go ahead and skip to the next section. For those new here, this is how these comparisons go down: With a smartwatch on either wrist, I begin tracking my walk. As a control, I manually count each step I take; <a href="https://www.tomsguide.com/reviews/bose-quietcomfort-headphones">my favorite Bose Quiet Comfort headphones</a> help drown out the distraction.</p><p>To help me keep track of the total, I click an old-school manual tally counter every hundred steps before starting my tally over again at one. In this case, I repeated that process 65 times before finding a nice quiet park bench to settle down on and record the data. </p><p>Oh, and as an extra control, I recorded the walk using Strava on my trusty <a href="https://www.tomsguide.com/reviews/iphone-12-mini">iPhone 12 Mini</a>. Check out the results below:</p><h3 class="article-body__section" id="section-fitbit-charge-6-vs-google-pixel-watch-3-walk-test-results"><span>Fitbit Charge 6 vs. Google Pixel Watch 3: Walk test results</span></h3><div ><table><caption>Fitbit Charge 6 vs. Google Pixel Watch 3:</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Charge 6</p></th><th  ><p>Google Pixel Watch 3</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Step count</p></td><td  ><p>6,546 steps</p></td><td  ><p>6,563 steps</p></td><td  ><p>6,500 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>3.01 miles</p></td><td  ><p>3.4 miles</p></td><td  ><p> 3.41 miles (Strava)</p></td></tr><tr><td class="firstcol " ><p>Elevation gain</p></td><td  ><p>no data</p></td><td  ><p>325 feet</p></td><td  ><p>303 feet (Strava)</p></td></tr><tr><td class="firstcol " ><p>Average pace</p></td><td  ><p>22 mins, 21 secs per mile</p></td><td  ><p>19 mins, 48 secs per mile</p></td><td  ><p>18 mins, 20 secs per mile</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>114 bpm</p></td><td  ><p>114 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>164 bpm</p></td><td  ><p>164 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Calories burned</p></td><td  ><p>527 calories </p></td><td  ><p>529 calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Device battery usage</p></td><td  ><p>+ 1%</p></td><td  ><p>- 9%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>Well, well, well — look at which device was closer to my actual step count total by a whole 17 steps; it's the Fitbit Charge 6. For what it's worth, both devices beat Strava's tally of 6,558 steps. </p><p>Unfortunately for the small but mighty Charge 6, things get a little funky when we move on to distance data. Despite nailing my step count total with impressive accuracy, the device appears to have severely undercounted my distance covered by a whopping 0.4 miles... that's not an insignificant difference. </p><p>The Fitbit Charge 6 frustratingly also does not report elevation gain data, even though it technically could using the onboard GPS. And while I didn't intend for this walk to be hilly, living in Seattle, Washington, a few hundred feet of elevation gain is par for the course when cruising around town on foot. </p><p>The Pixel Watch 3 <em>does</em> report climb data, which looks perhaps a tad inflated for this walk — I tend to trust Strava as the gold standard here — but still accurate enough for my needs. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3125px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="Snq8uyqybvqHdY3RRzEpvG" name="best-fitbit-02" alt="The Pixel Watch 3 on a black strap next to the Fitbit Charge 6 on an orange strap on a user's wrist with white flowers in the background" src="https://cdn.mos.cms.futurecdn.net/Snq8uyqybvqHdY3RRzEpvG.jpg" mos="" align="middle" fullscreen="" width="3125" height="1758" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Of course, had the Pixel Watch 3 undercounted my climb by 22 feet (compared to Strava), I might not be so forgiving. </p><p>Strava provides two pace metrics including an average moving pace — reported above — and an elapsed pace, which tends to be slower. In this case, my elapsed pace was 19 minutes and 15 seconds per mile, much closer to the Pixel Watch 3's metric. </p><p>Inflated pace data from the Fitbit Charge 6, meanwhile, makes sense given it measured a considerably shorter walk, distance-wise. </p><p>Nothing warms my heart more than two devices capturing similar heart rate data during these head-to-heads, and it doesn't get any more precise than this. The same goes for calories burned. </p><p>Finally, while the Pixel Watch 3 burned through 9% of its battery during my roughly one-hour-and-seven-minute walk, the Charge 6 somehow managed to gain 1% battery (from 98% when I left to 99% when I returned).  </p><h3 class="article-body__section" id="section-fitbit-charge-6-vs-google-pixel-watch-3-winner"><span>Fitbit Charge 6 vs. Google Pixel Watch 3: Winner</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3443px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="oRUgsepASWy9b5j7re65eM" name="IMG_9298.jpg" alt="a photo of the screen on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/oRUgsepASWy9b5j7re65eM.jpg" mos="" align="middle" fullscreen="" width="3443" height="1936" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>In today's battle of the Fitbit-powered Google wearables, the underdog Charge 6 comes out on top. However, even though the Fitbit Charge 6 managed a closer step count total to my manual count, the Pixel Watch 3 proved more accurate across the board. </p><p>Still, I'm impressed that the older, more affordable wearable was able to keep up with the newer and higher-end Pixel Watch 3. Ultimately, the Charge 6 remains one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> for the money in 2025, especially if you like easy-wearing devices with great battery and onboard GPS so that you can leave your phone at home. </p><p>Which fitness trackers and/or smartwatches should I test head-to-head next? Let me know in the comments below. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-6-000-steps-with-the-apple-watch-10-vs-samsung-galaxy-watch-7-this-device-was-more-accurate">I walked 6,000 steps with the Apple Watch 10 vs Samsung Galaxy Watch 7 — this one was more accurate</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-biked-12-miles-with-the-apple-watch-10-vs-garmin-vivoactive-6-heres-the-winner">I biked 12 miles with the Apple Watch 10 vs Garmin Vivoactive 6 — here's the winner</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/i-test-smartwatches-for-a-living-and-these-are-my-5-favorite-models-when-i-go-hiking">I test smartwatches for a living — and these are my 5 favorite models when I go hiking</a></li></ul><div data-widget-type="merchantlink" data-model-name="Google Pixel Watch 3,Fitbit Charge 6" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google just killed another Fitbit feature — and now I’m certain the brand is as good as dead  ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Do you hear that? Those three repeating base notes? Yup, that’s Queen’s "Another One Bites the Dust" playing at Google HQ as the brand kills off yet another Fitbit feature. </p><p>For those needing a refresher, <a href="https://www.tomsguide.com/news/google-acquires-fitbit-for-21-billion"><u>Google bought Fitbit in 2021</u></a> and ever since, has slowly chipped away at everything that makes Fitbit, well, Fitbit. While many of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html"><u>best Fitbit</u></a> features are now making their way into Google’s <a href="https://www.tomsguide.com/us/best-smartwatches,review-2156.html"><u>best smartwatch</u></a> models such as. the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review"><u>Pixel Watch 3</u></a>, the future of Fitbit has never been more in question. </p><p>First, in 2022, Google made all Fitbit users <a href="https://www.tomsguide.com/news/fitbit-accounts-are-shutting-down-what-you-need-to-know"><u>migrate to a Google account</u></a>. Then, in 2023, the <a href="https://www.tomsguide.com/news/google-is-stripping-away-the-things-that-make-fitbit-fitbit-and-its-a-huge-mistake"><u>community challenges vanished</u></a>. Next, in 2024, Google <a href="https://www.tomsguide.com/wellness/smartwatches/google-just-killed-off-fitbit-smartwatches-and-nobody-should-be-surprised"><u>shuttered the popular Versa and Sense</u></a> smartwatch lines. Now, in 2025, Google is killing off perfectly good features on existing devices —namely Google Assistant.</p><p>Let’s dive into what's happened.</p><h3 class="article-body__section" id="section-fitbit-support-for-google-assistant-bites-the-dust"><span>Fitbit support for Google Assistant bites the dust </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NVybeJKuaKZhMZH6vPQNVV" name="TG_Fitbit-Versa-4_LIST-2.jpg" alt="Fitbit Versa 4" src="https://cdn.mos.cms.futurecdn.net/NVybeJKuaKZhMZH6vPQNVV.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google first announced intentions to shutter the Google Voice Assistant feature on the Fitbit Versa and Sense smartwatch lines <a href="https://9to5google.com/2024/01/11/google-assistant-feature-removal/#:~:text=Voice%20control%20for%20activities%20will%20no%20longer%20be%20available%20on%20Fitbit%20Sense%20and%20Versa%203%20devices"><u>over a year ago</u></a>, and now appears to be making good on the promise. </p><p>While the 2024 announcement mentions the older <a href="https://www.tomsguide.com/reviews/fitbit-sense"><u>Fitbit Sense</u></a> and <a href="https://www.tomsguide.com/reviews/fitbit-versa-3"><u>Versa 3</u></a> models, recent revelations make it clear that current-generation <a href="https://www.tomsguide.com/reviews/fitbit-sense-2"><u>Fitbit Sense 2</u></a> and <a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><u>Versa 4</u></a> devices are also losing access. </p><p>A moderator post in the <a href="https://community.fitbit.com/t5/Sense/Google-Assistant-will-no-longer-be-available-on-Fitbit-Sense-and-Versa-3/td-p/5735504"><u>Fitbit Community forum</u></a> published on March 21, 2025, confirms this. </p><p>“Over the next few weeks we will be progressively phasing out Google Assistant on your Fitbit device. This change means that Google Assistant voice control for activities will soon no longer be available on your Fitbit device,” the Fitbit forum post says.</p><p>The same post notes that Amazon’s <a href="https://www.tomsguide.com/us/how-to-use-alexa,review-3488.html"><u>Alexa</u></a> voice assistant will remain available on the Versa 4 and Sense 2 in countries where it's supported (for now, at least). </p><h3 class="article-body__section" id="section-my-days-of-recommending-fitbit-are-probably-over"><span>My days of recommending Fitbit are probably over</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fAE6T7au6FFd7oZv6MgYXP" name="FitbitSense2-01.jpg" alt="The Fitbit Sense 2 on a blue rubber strap, shown on a user's wrist against a red background." src="https://cdn.mos.cms.futurecdn.net/fAE6T7au6FFd7oZv6MgYXP.jpg" mos="" align="middle" fullscreen="" width="4000" height="2250" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>This move by Google really grinds my gears, especially because both the Versa 4 and Sense 2 are actively being sold not just <a href="https://store.google.com/us/product/fitbit_sense_2?hl=en-US&pli=1"><u>via Google directly</u></a>, but also through major retailers like <a href="https://www.bestbuy.com/site/fitbit-sense-2-advanced-health-smartwatch-platinum/6514038.p?skuId=6514038&extStoreId=447&utm_source=feed"><u>Amazon and Best Buy</u></a>… for full price at that. </p><div><blockquote><p>Imagine buying a car only to have the dealer show up at your house a year later to turn off the backup camera because it’s ‘no longer supported.’</p></blockquote></div><p>Stripping out features that someone already paid for is a major no-no in my mind, and I suspect Fitbit owners everywhere will be more than a little miffed by this development. Imagine buying a car only to have the dealer show up at your house a year later to turn off the backup camera because it’s "no longer supported."</p><p>Indeed, when I fired up my Fitbit Sense 2 and checked for the Google Assistant app, it was gone. However, if the feature still appears on your Fitbit, you’ll almost certainly be greeted  with a pop-up when you try to open it saying something like, “Google Assistant on Fitbit watches is being turned down, this feature will stop working in the coming weeks.”</p><p>While this move by Google is disappointing, it’s also not terribly surprising. Unfortunately, the Fitbit Sense 2 <em>used</em> to be one of my favorite smartwatches thanks to its svelte design, bright screen, solid battery, simple interface and ample workout and wellness tools. But with one less smart feature on offer and the likelihood that more may be stripped away, it’s a device I’ll no longer be recommending. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2505px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rphC4UBNb7UF3dX2uCwfFm" name="Active-2-maps-B" alt="Close-up of the Amazfit Active 2 on a user's wrist with the maps display shown" src="https://cdn.mos.cms.futurecdn.net/rphC4UBNb7UF3dX2uCwfFm.jpg" mos="" align="middle" fullscreen="" width="2505" height="1409" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>So what should potential Fitbit Sense 2 or Versa 4 customers buy instead? The <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-the-garmin-vivoactive-6-and-it-has-almost-everything-i-want-in-a-smartwatch"><u>Garmin Vivoactive 6</u></a> is shaping up to be a great replacement for either. If having an onboard voice assistant is a must, the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tested-the-amazfit-active-2-7-things-you-should-know-about-my-favorite-smartwatch-under-usd100">$100 Amazfit Active 2</a> is also worth a look. </p><p>Of course, you could go with the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review"><u>Pixel Watch 3</u></a>, which has most of Fitbit’s best features. But then again, settling for a Pixel Watch is exactly what Google wants you to do. So, rather than playing into the brand's ultimate sacrifice-Fitbit-for-Pixel scheme, maybe just get that Garmin.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-just-tried-googles-newest-ai-video-generation-features-and-im-blown-away">You can now use Google's AI to make videos from text — and I'm already obsessed</a></li><li><a href="https://www.tomsguide.com/computing/search-engines/how-to-use-google-web-filter-bring-back-old-search">Bring back Google’s old-school search results with this one simple hack</a></li><li><a href="https://www.tomsguide.com/computing/mobile-apps/google-maps-just-got-a-huge-trip-planning-upgrade-and-it-involves-your-screenshots">Google Maps just got a huge trip-planning upgrade — and it involves your screenshots</a></li></ul><div data-widget-type="review" data-model-name="Garmin Vivoactive 6" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/google-just-killed-another-fitbit-feature-and-now-im-certain-the-brand-is-as-good-as-dead</link>
                                                                            <description>
                            <![CDATA[ Google just removed the Google Voice Assistant feature on these devices. Don’t worry, Amazon Alexa is still there… for now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">XYgnvAea4FjEZanVsfAuYo</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/v34YBAiTm5awfaZSDuBZgL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 16 Apr 2025 20:35:28 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/v34YBAiTm5awfaZSDuBZgL-1280-80.jpg">
                                                            <media:credit><![CDATA[null]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Sense 2 on a person&#039;s wrist]]></media:description>                                                            <media:text><![CDATA[Fitbit Sense 2 on a person&#039;s wrist]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Sense 2 on a person&#039;s wrist]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/v34YBAiTm5awfaZSDuBZgL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Do you hear that? Those three repeating base notes? Yup, that’s Queen’s "Another One Bites the Dust" playing at Google HQ as the brand kills off yet another Fitbit feature. </p><p>For those needing a refresher, <a href="https://www.tomsguide.com/news/google-acquires-fitbit-for-21-billion"><u>Google bought Fitbit in 2021</u></a> and ever since, has slowly chipped away at everything that makes Fitbit, well, Fitbit. While many of the <a href="https://www.tomsguide.com/us/best-fitbit,review-3203.html"><u>best Fitbit</u></a> features are now making their way into Google’s <a href="https://www.tomsguide.com/us/best-smartwatches,review-2156.html"><u>best smartwatch</u></a> models such as. the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review"><u>Pixel Watch 3</u></a>, the future of Fitbit has never been more in question. </p><p>First, in 2022, Google made all Fitbit users <a href="https://www.tomsguide.com/news/fitbit-accounts-are-shutting-down-what-you-need-to-know"><u>migrate to a Google account</u></a>. Then, in 2023, the <a href="https://www.tomsguide.com/news/google-is-stripping-away-the-things-that-make-fitbit-fitbit-and-its-a-huge-mistake"><u>community challenges vanished</u></a>. Next, in 2024, Google <a href="https://www.tomsguide.com/wellness/smartwatches/google-just-killed-off-fitbit-smartwatches-and-nobody-should-be-surprised"><u>shuttered the popular Versa and Sense</u></a> smartwatch lines. Now, in 2025, Google is killing off perfectly good features on existing devices —namely Google Assistant.</p><p>Let’s dive into what's happened.</p><h3 class="article-body__section" id="section-fitbit-support-for-google-assistant-bites-the-dust"><span>Fitbit support for Google Assistant bites the dust </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NVybeJKuaKZhMZH6vPQNVV" name="TG_Fitbit-Versa-4_LIST-2.jpg" alt="Fitbit Versa 4" src="https://cdn.mos.cms.futurecdn.net/NVybeJKuaKZhMZH6vPQNVV.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Google first announced intentions to shutter the Google Voice Assistant feature on the Fitbit Versa and Sense smartwatch lines <a href="https://9to5google.com/2024/01/11/google-assistant-feature-removal/#:~:text=Voice%20control%20for%20activities%20will%20no%20longer%20be%20available%20on%20Fitbit%20Sense%20and%20Versa%203%20devices"><u>over a year ago</u></a>, and now appears to be making good on the promise. </p><p>While the 2024 announcement mentions the older <a href="https://www.tomsguide.com/reviews/fitbit-sense"><u>Fitbit Sense</u></a> and <a href="https://www.tomsguide.com/reviews/fitbit-versa-3"><u>Versa 3</u></a> models, recent revelations make it clear that current-generation <a href="https://www.tomsguide.com/reviews/fitbit-sense-2"><u>Fitbit Sense 2</u></a> and <a href="https://www.tomsguide.com/reviews/fitbit-versa-4"><u>Versa 4</u></a> devices are also losing access. </p><p>A moderator post in the <a href="https://community.fitbit.com/t5/Sense/Google-Assistant-will-no-longer-be-available-on-Fitbit-Sense-and-Versa-3/td-p/5735504"><u>Fitbit Community forum</u></a> published on March 21, 2025, confirms this. </p><p>“Over the next few weeks we will be progressively phasing out Google Assistant on your Fitbit device. This change means that Google Assistant voice control for activities will soon no longer be available on your Fitbit device,” the Fitbit forum post says.</p><p>The same post notes that Amazon’s <a href="https://www.tomsguide.com/us/how-to-use-alexa,review-3488.html"><u>Alexa</u></a> voice assistant will remain available on the Versa 4 and Sense 2 in countries where it's supported (for now, at least). </p><h3 class="article-body__section" id="section-my-days-of-recommending-fitbit-are-probably-over"><span>My days of recommending Fitbit are probably over</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fAE6T7au6FFd7oZv6MgYXP" name="FitbitSense2-01.jpg" alt="The Fitbit Sense 2 on a blue rubber strap, shown on a user's wrist against a red background." src="https://cdn.mos.cms.futurecdn.net/fAE6T7au6FFd7oZv6MgYXP.jpg" mos="" align="middle" fullscreen="" width="4000" height="2250" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>This move by Google really grinds my gears, especially because both the Versa 4 and Sense 2 are actively being sold not just <a href="https://store.google.com/us/product/fitbit_sense_2?hl=en-US&pli=1"><u>via Google directly</u></a>, but also through major retailers like <a href="https://www.bestbuy.com/site/fitbit-sense-2-advanced-health-smartwatch-platinum/6514038.p?skuId=6514038&extStoreId=447&utm_source=feed"><u>Amazon and Best Buy</u></a>… for full price at that. </p><div><blockquote><p>Imagine buying a car only to have the dealer show up at your house a year later to turn off the backup camera because it’s ‘no longer supported.’</p></blockquote></div><p>Stripping out features that someone already paid for is a major no-no in my mind, and I suspect Fitbit owners everywhere will be more than a little miffed by this development. Imagine buying a car only to have the dealer show up at your house a year later to turn off the backup camera because it’s "no longer supported."</p><p>Indeed, when I fired up my Fitbit Sense 2 and checked for the Google Assistant app, it was gone. However, if the feature still appears on your Fitbit, you’ll almost certainly be greeted  with a pop-up when you try to open it saying something like, “Google Assistant on Fitbit watches is being turned down, this feature will stop working in the coming weeks.”</p><p>While this move by Google is disappointing, it’s also not terribly surprising. Unfortunately, the Fitbit Sense 2 <em>used</em> to be one of my favorite smartwatches thanks to its svelte design, bright screen, solid battery, simple interface and ample workout and wellness tools. But with one less smart feature on offer and the likelihood that more may be stripped away, it’s a device I’ll no longer be recommending. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2505px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rphC4UBNb7UF3dX2uCwfFm" name="Active-2-maps-B" alt="Close-up of the Amazfit Active 2 on a user's wrist with the maps display shown" src="https://cdn.mos.cms.futurecdn.net/rphC4UBNb7UF3dX2uCwfFm.jpg" mos="" align="middle" fullscreen="" width="2505" height="1409" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>So what should potential Fitbit Sense 2 or Versa 4 customers buy instead? The <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-the-garmin-vivoactive-6-and-it-has-almost-everything-i-want-in-a-smartwatch"><u>Garmin Vivoactive 6</u></a> is shaping up to be a great replacement for either. If having an onboard voice assistant is a must, the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tested-the-amazfit-active-2-7-things-you-should-know-about-my-favorite-smartwatch-under-usd100">$100 Amazfit Active 2</a> is also worth a look. </p><p>Of course, you could go with the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review"><u>Pixel Watch 3</u></a>, which has most of Fitbit’s best features. But then again, settling for a Pixel Watch is exactly what Google wants you to do. So, rather than playing into the brand's ultimate sacrifice-Fitbit-for-Pixel scheme, maybe just get that Garmin.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-just-tried-googles-newest-ai-video-generation-features-and-im-blown-away">You can now use Google's AI to make videos from text — and I'm already obsessed</a></li><li><a href="https://www.tomsguide.com/computing/search-engines/how-to-use-google-web-filter-bring-back-old-search">Bring back Google’s old-school search results with this one simple hack</a></li><li><a href="https://www.tomsguide.com/computing/mobile-apps/google-maps-just-got-a-huge-trip-planning-upgrade-and-it-involves-your-screenshots">Google Maps just got a huge trip-planning upgrade — and it involves your screenshots</a></li></ul><div data-widget-type="review" data-model-name="Garmin Vivoactive 6" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Fitbit just started testing its Personalized Sleep Schedule feature — here’s how to try it ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Fitbit’s experimental Personalized Sleep Schedule feature is now available to try through Fitbit Labs, and it’s designed to improve your sleep by tracking your energy levels throughout the day and suggesting bedtimes and wake times.</p><p>This is done by taking surveys throughout the day that gauge your energy levels and provide advice on how much sleep you need that night.</p><p>The launch of the new feature was spotted by <a href="https://9to5google.com/2025/03/17/fitbit-personalized-sleep-schedule-lab/" target="_blank">9to5Google</a> and if you have one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> made by Fitbit or Google, it’s well worth giving a try if you are eligible.</p><h2 id="how-to-try-personalized-sleep-schedule">How to try Personalized Sleep Schedule</h2><p>To be eligible to try the Personalized Sleep Schedule through Fitbit Labs you need to be using the Android version of the Fitbit app and based in the U.S. Here’s the full list of criteria you need to hit <a href="https://support.google.com/fitbit/answer/14566053?">from the Fitbit Help Center</a>.</p><ul><li>Use the Fitbit app on an Android phone.</li><li>Be located in the US and use the Fitbit app in English.</li><li>Be at least 18 years old.</li><li>Sign in to the Fitbit app using a Google Account.</li><li>Review and accept the lab-specific consent.</li><li>Make sure you have a sleep log for the day. If you didn’t sleep with one of the devices listed above, you can manually log your sleep in the Fitbit app.</li><li>Have an offer to join the Personalized Sleep Schedule lab on the You tab in the Fitbit App.</li></ul><p>If you hit all the requirements listed then hit the You tab in the Fitbit app, go to the Fitbit Labs section, click See All and then you should see and offer to Get a Personalized Sleep Schedule. If it’s not there then try checking again later in the day after shutting and reopening the app.</p><h2 id="how-does-personalized-sleep-schedule-work">How does Personalized Sleep Schedule work?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3500px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="fEhyHEHYfYL7TnGHsYcEKS" name="Fitbit-Charge6-set-up-20.jpg" alt="How to set up the Fitbit Charge 6." src="https://cdn.mos.cms.futurecdn.net/fEhyHEHYfYL7TnGHsYcEKS.jpg" mos="" align="middle" fullscreen="" width="3500" height="1969" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Once you’ve signed up you’ll be reminded to take surveys throughout the day. The first of these is the morning check-in, which is available up until 10 am. This is a two-minute survey that covers any factors that could impact the upcoming night’s sleep.</p><p>There are then three daytime surveys that are spread throughout the day that just have one question to rate your energy levels, which will feed into your sleep suggestions for that night.</p><p>The last survey is the evening bedtime check-in which has to be done before 11 pm. This is another two-minute survey about factors that could influence your sleep, and once you’ve taken it you’ll be given your Personalized Sleep Schedule for that night.</p><p>This is a suggested bedtime and wake time based on your sleep needs and sleep debt, which are calculated through the sleep you’ve logged through your tracker or in the app, and your responses to the surveys.</p><h2 id="how-could-personalized-sleep-schedule-improve-sleep">How could Personalized Sleep Schedule improve sleep?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NVybeJKuaKZhMZH6vPQNVV" name="TG_Fitbit-Versa-4_LIST-2.jpg" alt="Fitbit Versa 4" src="https://cdn.mos.cms.futurecdn.net/NVybeJKuaKZhMZH6vPQNVV.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Having a consistent sleep schedule is generally advised as one of the best ways to improve your sleep in general, as it can help keep your body in a natural sleep-wake cycle. </p><p>There are lots of other factors that go into good sleep though, and some might find it hard to actually stick to the recommendations from Fitbit. </p><p>My <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-8-review">Garmin Fenix 8</a> recommends a suggested sleep time to me each day through Garmin's Sleep Coach feature, and I found it more of an annoyance than a help when my child was six months old and waking a lot, for example.</p><p>However, checking in on your energy levels throughout the day and thinking about factors that might influence your sleep are both habits that can prove helpful in tracking things that do affect your sleep so you can adjust them in the future.</p><p>A suggested bedtime can also be useful in providing an extra nudge to get to bed in the evening when it’s all too tempting to watch one more episode of something or scroll social media instead of hitting the hay.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide:</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/rip-fitbit-5-alternatives-to-fitbits-best-trackers-and-smartwatches">RIP Fitbit? 5 alternatives to Fitbit’s best trackers and smartwatches</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/fitbit-is-exiting-the-cheap-smartwatch-race-and-this-brand-could-replace-it">Fitbit is exiting the cheap smartwatch race — and this brand could replace it</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-2-vs-garmin-instinct-3-which-rugged-smartwatch-wins">Garmin Instinct 3 vs. Apple Watch Ultra 2: Biggest differences to consider before you buy</a></li></ul><div data-model-name="Fitbit Sense 2,Fitbit Versa 4" data-widget-type="review" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/fitbit-just-starting-testing-its-personalized-sleep-schedule-feature-heres-how-to-try-it</link>
                                                                            <description>
                            <![CDATA[ Select Fitbit users can now access the new Personalized Sleep Schedule feature from Fitbit Labs, which provides suggested bedtimes and wake times to improve your sleep. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">L5EGswVGTuDruspWLytx6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/LsrLdFpqxkWKa8zfzPf9Fc-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 19 Mar 2025 12:51:26 +0000</pubDate>                                                                                                                                <updated>Wed, 19 Mar 2025 13:24:11 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nick Harris-Fry ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/J5Jjp49GUVjLZEbjEkTex.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Nick has been a journalist since 2012 and has spent most of that time writing about health and fitness for a variety of publications. Nick spent nine years working on the Coach magazine and website before moving to the fitness team at Tom’s Guide in 2024. Nick is a keen runner and also the founder of YouTube channel &lt;a href=&quot;https://www.youtube.com/channel/UCOBM9FasII4dKbyE_HKkbjw&quot;&gt;The Run Testers&lt;/a&gt;, which specialises in reviewing running shoes, watches, headphones and other gear.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Nick has covered all aspects of health and fitness throughout his career, interviewing experts and celebrities, trying fitness classes and running marathons, all in the name of providing readers with the information they need to get the most out of an active lifestyle.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Nick ran his first marathon in 2016 after six weeks of training for a magazine feature and subsequently became obsessed with the sport. He now has PBs of 2hr 27min for the marathon and 15min 30sec for 5K, and has run 13 marathons in total, as well as a 50-mile ultramarathon.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Nick runs 50-80 miles a week and races regularly with his club, which gives him a lot of opportunity to test out running gear: he has tested and reviewed hundreds of pairs of running shoes, as well as fitness trackers, running watches, sports headphones, treadmills, and all manner of other kit. Nick is also a qualified Run Leader in the UK.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Nick is an established expert in the health and fitness area and along with writing for several publications, including &lt;a href=&quot;https://www.livescience.com/author/nick-harris-fry&quot;&gt;Live Science&lt;/a&gt;, &lt;a href=&quot;https://www.expertreviews.co.uk/authors/nick-harris-fry&quot;&gt;Expert Reviews&lt;/a&gt;, &lt;a href=&quot;https://www.wareable.com/author/n.harris-fry&quot;&gt;Wareable&lt;/a&gt;, &lt;a href=&quot;https://www.coachweb.com/author/nick-harris-fry&quot;&gt;Coach&lt;/a&gt; and &lt;a href=&quot;https://www.getsweatgo.com/author/n.harrisfry&quot;&gt;Get Sweat Go&lt;/a&gt;, he has been quoted on &lt;a href=&quot;https://www.theguardian.com/thefilter/2024/oct/20/if-you-pay-more-than-4-youre-being-ripped-off-the-fair-price-for-14-everyday-items-from-cleaning-spray-to-olive-oil&quot;&gt;The Guardian&lt;/a&gt; and &lt;a href=&quot;https://www.independent.co.uk/life-style/health-and-families/london-marathon-2021-date-training-tips-summer-running-a9482486.html&quot;&gt;The Independent&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Nick graduated from the University of York in 2010 with a degree in Politics, Philosophy and Economics and worked in the NHS for three years, during which time he completed his NCTJ Diploma in Journalism at News Associates in London. Before starting on Coach and moving into health and fitness, Nick worked as a football journalist and lived in Kathmandu, Nepal for two years.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/LsrLdFpqxkWKa8zfzPf9Fc-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Versa 3]]></media:description>                                                            <media:text><![CDATA[Fitbit Versa 3]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Versa 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/LsrLdFpqxkWKa8zfzPf9Fc-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Fitbit’s experimental Personalized Sleep Schedule feature is now available to try through Fitbit Labs, and it’s designed to improve your sleep by tracking your energy levels throughout the day and suggesting bedtimes and wake times.</p><p>This is done by taking surveys throughout the day that gauge your energy levels and provide advice on how much sleep you need that night.</p><p>The launch of the new feature was spotted by <a href="https://9to5google.com/2025/03/17/fitbit-personalized-sleep-schedule-lab/" target="_blank">9to5Google</a> and if you have one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> made by Fitbit or Google, it’s well worth giving a try if you are eligible.</p><h2 id="how-to-try-personalized-sleep-schedule">How to try Personalized Sleep Schedule</h2><p>To be eligible to try the Personalized Sleep Schedule through Fitbit Labs you need to be using the Android version of the Fitbit app and based in the U.S. Here’s the full list of criteria you need to hit <a href="https://support.google.com/fitbit/answer/14566053?">from the Fitbit Help Center</a>.</p><ul><li>Use the Fitbit app on an Android phone.</li><li>Be located in the US and use the Fitbit app in English.</li><li>Be at least 18 years old.</li><li>Sign in to the Fitbit app using a Google Account.</li><li>Review and accept the lab-specific consent.</li><li>Make sure you have a sleep log for the day. If you didn’t sleep with one of the devices listed above, you can manually log your sleep in the Fitbit app.</li><li>Have an offer to join the Personalized Sleep Schedule lab on the You tab in the Fitbit App.</li></ul><p>If you hit all the requirements listed then hit the You tab in the Fitbit app, go to the Fitbit Labs section, click See All and then you should see and offer to Get a Personalized Sleep Schedule. If it’s not there then try checking again later in the day after shutting and reopening the app.</p><h2 id="how-does-personalized-sleep-schedule-work">How does Personalized Sleep Schedule work?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3500px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="fEhyHEHYfYL7TnGHsYcEKS" name="Fitbit-Charge6-set-up-20.jpg" alt="How to set up the Fitbit Charge 6." src="https://cdn.mos.cms.futurecdn.net/fEhyHEHYfYL7TnGHsYcEKS.jpg" mos="" align="middle" fullscreen="" width="3500" height="1969" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Once you’ve signed up you’ll be reminded to take surveys throughout the day. The first of these is the morning check-in, which is available up until 10 am. This is a two-minute survey that covers any factors that could impact the upcoming night’s sleep.</p><p>There are then three daytime surveys that are spread throughout the day that just have one question to rate your energy levels, which will feed into your sleep suggestions for that night.</p><p>The last survey is the evening bedtime check-in which has to be done before 11 pm. This is another two-minute survey about factors that could influence your sleep, and once you’ve taken it you’ll be given your Personalized Sleep Schedule for that night.</p><p>This is a suggested bedtime and wake time based on your sleep needs and sleep debt, which are calculated through the sleep you’ve logged through your tracker or in the app, and your responses to the surveys.</p><h2 id="how-could-personalized-sleep-schedule-improve-sleep">How could Personalized Sleep Schedule improve sleep?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NVybeJKuaKZhMZH6vPQNVV" name="TG_Fitbit-Versa-4_LIST-2.jpg" alt="Fitbit Versa 4" src="https://cdn.mos.cms.futurecdn.net/NVybeJKuaKZhMZH6vPQNVV.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Having a consistent sleep schedule is generally advised as one of the best ways to improve your sleep in general, as it can help keep your body in a natural sleep-wake cycle. </p><p>There are lots of other factors that go into good sleep though, and some might find it hard to actually stick to the recommendations from Fitbit. </p><p>My <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-8-review">Garmin Fenix 8</a> recommends a suggested sleep time to me each day through Garmin's Sleep Coach feature, and I found it more of an annoyance than a help when my child was six months old and waking a lot, for example.</p><p>However, checking in on your energy levels throughout the day and thinking about factors that might influence your sleep are both habits that can prove helpful in tracking things that do affect your sleep so you can adjust them in the future.</p><p>A suggested bedtime can also be useful in providing an extra nudge to get to bed in the evening when it’s all too tempting to watch one more episode of something or scroll social media instead of hitting the hay.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide:</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/rip-fitbit-5-alternatives-to-fitbits-best-trackers-and-smartwatches">RIP Fitbit? 5 alternatives to Fitbit’s best trackers and smartwatches</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/fitbit-is-exiting-the-cheap-smartwatch-race-and-this-brand-could-replace-it">Fitbit is exiting the cheap smartwatch race — and this brand could replace it</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-2-vs-garmin-instinct-3-which-rugged-smartwatch-wins">Garmin Instinct 3 vs. Apple Watch Ultra 2: Biggest differences to consider before you buy</a></li></ul><div data-model-name="Fitbit Sense 2,Fitbit Versa 4" data-widget-type="review" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I walked 6,000 steps with Fitbit Sense 2 vs Amazfit Active 2 — this one was more accurate ]]></title>
                                                                                                <dc:content><![CDATA[ <p>At $249, the Fitbit Sense 2 is admittedly more than twice the cost of the $99 Amazfit Active 2. But the former is getting up there in age, which means, you can easily find it on sale. </p><p>Price and case shape aside, the two devices share a lot of traits and features. Both the <a href="https://www.tomsguide.com/reviews/fitbit-sense-2">Fitbit Sense 2</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-the-amazfit-active-2-and-it-could-be-the-new-budget-smartwatch-to-beat">Amazfit Active 2</a> are sleek, reasonably lightweight wearables with bright and responsive touchscreens, onboard GPS, physical buttons and loads of wellness and fitness tracking tech. You also get a small smattering of smart features on either, along with support for both iPhones and Android handsets. </p><p>But which one is the more reliable fitness tracker? To find out, I tossed one on either wrist and set out for a walk around Seattle's Lake Washington, manually counting all my steps. Read on to find out the wearable that came closest to matching my actual step count total, along with analysis of other metrics like distance, elevation gain, heart rate, calories burned and battery used. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8ViwAQq6oDkqL3Wjwo74Pb" name="Sense2-v-Active2-01" alt="Scenic view of Lake Washington with two figures walking in the foreground in the shadows and boats, along with Mount Rainier visible in the background" src="https://cdn.mos.cms.futurecdn.net/8ViwAQq6oDkqL3Wjwo74Pb.jpg" mos="" align="middle" fullscreen="" width="3600" height="2025" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><h3 class="article-body__section" id="section-fitbit-sense-2-vs-amazfit-active-2-walk-test"><span>Fitbit Sense 2 vs. Amazfit Active 2: Walk test</span></h3><div class="product"><a data-dimension112="323dbb56-d0c0-4249-b194-926a7787fdb1" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$229" href="https://www.amazon.com/Fitbit-Advanced-Smartwatch-Graphite-Included/dp/B0B4N2T7GL/?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1410px;"><p class="vanilla-image-block" style="padding-top:106.38%;"><img id="rwUdywoFKdZAZDJXE28joK" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rwUdywoFKdZAZDJXE28joK.png" mos="" align="middle" fullscreen="" width="1410" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Sense 2 is Google's flagship Fitbit product loaded with top-notch health and fitness-tracking tech and just enough smart features to keep you connected, like support for Google Wallet, Google Maps and YouTube Music.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Advanced-Smartwatch-Graphite-Included/dp/B0B4N2T7GL/?th=1" target="_blank" rel="nofollow" data-dimension112="323dbb56-d0c0-4249-b194-926a7787fdb1" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$229">View Deal</a></p></div><div class="product"><a data-dimension112="1786cbf0-c024-494c-98ba-8ce20869d9e3" data-action="Deal Block" data-label="Active 2" data-dimension48="Active 2" data-dimension25="$99" href="https://www.amazon.com/Amazfit-Direction-Fitness-Resistant-Silicone/dp/B0DT3WZCZD?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1271px;"><p class="vanilla-image-block" style="padding-top:108.81%;"><img id="5rWhrDxAJo8MrqaLi7HfXZ" name="71mpuO4LqeL._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5rWhrDxAJo8MrqaLi7HfXZ.jpg" mos="" align="middle" fullscreen="" width="1271" height="1383" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Amazfit Active 2 offers a ton of features for just $99 including impressive fitness, health and sleep-tracking tools ordinarily found on much pricier models. It also boasts an all-metal case, AMOLED touchscreen, physical buttons and more than a week of battery. <a class="view-deal button" href="https://www.amazon.com/Amazfit-Direction-Fitness-Resistant-Silicone/dp/B0DT3WZCZD?th=1" target="_blank" rel="nofollow" data-dimension112="1786cbf0-c024-494c-98ba-8ce20869d9e3" data-action="Deal Block" data-label="Active 2" data-dimension48="Active 2" data-dimension25="$99">View Deal</a></p></div><p>For this walk test, I had the Amazfit Active 2 on my left wrist and the Fitbit Sense 2 on the right. For what it's worth, only the Fitbit app lets you specify whether you're wearing the watch on your dominant or non-dominant wrist. </p><p>As always, to keep track of steps, I counted each pace until I hit 100 before clicking my manual tally counter and starting over again at one. Another useful trick I use to stay on count: my left foot is always the odd count and my right the even. A pair of the best <a href="https://www.tomsguide.com/us/best-noise-cancelling-headphones,review-5566.html">noise-canceling headphones</a> also help me to concentrate. </p><p>As a control for distance, elevation gain and pace, I additionally logged my walk using <a href="https://www.tomsguide.com/reviews/strava-review">Strava</a> on my trusty <a href="https://www.tomsguide.com/reviews/iphone-12-mini">iPhone 12 mini</a> (as I always do for these comparisons). </p><p>With a little more than 3 miles and (apparently) the equivalent of 28 floors climbed, here's how the data from the Fitbit Sense 2 vs. Amazfit Active 2 compares. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jX3Nf9tVqiFXyQuYJtWRab" name="Sense2-v-Active2-04" alt="Close up of the Amazfit Active 2 smartwatch next to the Fitbit Sense 2 with each showing the total step count for the day" src="https://cdn.mos.cms.futurecdn.net/jX3Nf9tVqiFXyQuYJtWRab.jpg" mos="" align="middle" fullscreen="" width="3600" height="2025" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><h3 class="article-body__section" id="section-fitbit-sense-2-vs-amazfit-active-2-walk-test-results"><span>Fitbit Sense 2 vs. Amazfit Active 2: Walk test results</span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Sense 2</p></th><th  ><p>Amazfit Active 2</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>6,187 steps</p></td><td  ><p>6,116 steps</p></td><td  ><p>6,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>2.82 miles </p></td><td  ><p>3.16 miles</p></td><td  ><p>3.25 miles</p></td></tr><tr><td class="firstcol " ><p><strong>Elevation gain</strong></p></td><td  ><p>280 feet</p></td><td  ><p>368 feet</p></td><td  ><p>297 feet</p></td></tr><tr><td class="firstcol " ><p><strong>Pace (average)</strong></p></td><td  ><p>22 mins 11 secs per mile</p></td><td  ><p>19 mins 23 secs per mile</p></td><td  ><p>17 mins 55 secs per mile</p></td></tr><tr><td class="firstcol " ><p><strong>Heart rate (average) </strong></p></td><td  ><p>116 bpm</p></td><td  ><p>101 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Heart rate (max)</strong></p></td><td  ><p>164 bpm</p></td><td  ><p>136 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>492 calories</p></td><td  ><p>366 calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery depleted</strong></p></td><td  ><p>2%</p></td><td  ><p>0%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>I finished my walk with the sun shining brightly and scant a cloud in the sapphire blue sky. Both devices were within 200 paces of my actual step count, which is pretty good, but the Active 2 only overcounted by 117 while the Sense 2 added 187 steps to my count. Strava, meanwhile, beat both devices with a total step count of 6,046 </p><p>The Amazfit's distance data matches Strava nicely while the Fitbit appears to have undercalculated my total distance by roughly 0.43 miles, which is not insignificant. This result is also a bit strange given that the Fitbit also logged a higher step count. </p><p>The Fitbit Sense 2 doesn't provide an elevation gain metric for your workouts, but it will tell you how many "floors" you climbed for the day. I only wore the Sense 2 for this walk test, which, according to Google, was the equivalent of 28 climbed floors. Google calculates one floor as ten feet, by the way. </p><p>While the Sense 2's elevation gain lines up nicely with Strava's, the Amazfit Active 2 once again seemingly overcalculated my total elevation by a noticeable margin. I say "once again" because, versus the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-just-went-hands-on-with-the-samsung-galaxy-fit3-and-it-could-be-my-new-favorite-budget-fitness-tracker">Samsung Galaxy Fit3</a>, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-500-steps-with-samsung-galaxy-fit3-vs-amazfit-active-2-heres-the-winner">Active 2 logged 58 feet more</a> than the control. And against the Apple Watch SE (2022), the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-7-000-steps-with-apple-watch-se-vs-amazfit-active-2-heres-the-winner#section-apple-watch-se-vs-amazfit-active-2-walk-test-results">Active 2 overcounted by 165 feet</a> compared to the control. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hF354SkSGeEBauCKJq6bCb" name="Sense2-v-Active2-02" alt="View of an apartment building along Lake Washington called "The Lake" with blue skies behind it" src="https://cdn.mos.cms.futurecdn.net/hF354SkSGeEBauCKJq6bCb.jpg" mos="" align="middle" fullscreen="" width="3600" height="2025" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Pace data is all over the place. Strava tends to have a faster pace than most wearables because the app aggressively pauses tracking anytime you stop moving. However, these results are about as wide-ranging as I've encountered. I notably stopped twice during this walk test, each for roughly 90 seconds to snap photos of the scenic views. </p><p>Heart rate data between the Sense 2 and Active 2 also looks funky. However, I'm inclined to trust Google's measurements more than Amazfit's on this one. First, 116 bpm is much closer to my average heart rate from prior walk tests of similar distance and elevation gain; the same goes for 165 bpm as my maximum.  </p><p>Finally, the Active 2 depleted a little less battery than the Sense 2 over my hour (and change) walk but both wearables left me impressed given onboard GPS tends to be a major power-suck for any device. </p><h3 class="article-body__section" id="section-fitbit-sense-2-vs-amazfit-active-2-and-the-winner-is"><span>Fitbit Sense 2 vs. Amazfit Active 2: And the winner is...</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="S2orPnuH3ueoGNM2vocMLb" name="Sense2-v-Active2-07" alt="Close up of the Amazfit Active 2 smartwatch next to the Fitbit Sense 2 with each showing the total step count for the day" src="https://cdn.mos.cms.futurecdn.net/S2orPnuH3ueoGNM2vocMLb.jpg" mos="" align="middle" fullscreen="" width="3600" height="2025" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When comparing step count tracking accuracy between the Fitbit Sense 2 versus Amazfit Active 2, Amazfit beats Google, for this test at least. However, there are caveats. The Active 2's elevation data is way off from our control for the third test in a row, while the heart rate data is oddly low, something I also noted in the device's <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-500-steps-with-samsung-galaxy-fit3-vs-amazfit-active-2-heres-the-winner">face-off with the Galaxy Fit3</a>.</p><p>Both devices logged step counts higher than my actual total but still within a reasonable margin of error. However, the Sense 2 churned out strangely low distance and weirdly slow pace metrics, even if its elevation gain and heart rate data appear to be right on the money. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/samsung-galaxy-fit3-vs-fitbit-inspire-3-which-budget-fitness-tracker-wins">Samsung Galaxy Fit3 vs Fitbit Inspire 3: Which budget fitness tracker should you buy?</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tracked-skiing-with-a-usd99-smartwatch-heres-how-it-compares-to-my-usd450-garmin">I tracked skiing with a $99 smartwatch — here’s how it compares to my $450 Garmin</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-000-steps-with-the-amazfit-bip-5-vs-armitron-matrix-this-sub-usd100-smartwatch-wins">Under $100 smartwatch test: I walked 5,000 steps with the Amazfit Bip 5 vs Armitron Matrix — here’s the winner</a></li></ul><div data-widget-type="review" data-model-name="Sense 2" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-walked-6-000-steps-with-fitbit-sense-2-vs-amazfit-active-2-heres-the-winner</link>
                                                                            <description>
                            <![CDATA[ Which is the more accurate fitness tracking brand — Fitbit vs Amazfit? I pitted the Sense 2 vs Active 2 to find out. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LTEmbwNHvaQhy2DYCajmk4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/S2orPnuH3ueoGNM2vocMLb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 28 Feb 2025 10:30:20 +0000</pubDate>                                                                                                                                <updated>Fri, 28 Feb 2025 15:54:21 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/S2orPnuH3ueoGNM2vocMLb-1280-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close up of the Amazfit Active 2 smartwatch next to the Fitbit Sense 2 with each showing the total step count for the day]]></media:description>                                                            <media:text><![CDATA[Close up of the Amazfit Active 2 smartwatch next to the Fitbit Sense 2 with each showing the total step count for the day]]></media:text>
                                <media:title type="plain"><![CDATA[Close up of the Amazfit Active 2 smartwatch next to the Fitbit Sense 2 with each showing the total step count for the day]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/S2orPnuH3ueoGNM2vocMLb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>At $249, the Fitbit Sense 2 is admittedly more than twice the cost of the $99 Amazfit Active 2. But the former is getting up there in age, which means, you can easily find it on sale. </p><p>Price and case shape aside, the two devices share a lot of traits and features. Both the <a href="https://www.tomsguide.com/reviews/fitbit-sense-2">Fitbit Sense 2</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-the-amazfit-active-2-and-it-could-be-the-new-budget-smartwatch-to-beat">Amazfit Active 2</a> are sleek, reasonably lightweight wearables with bright and responsive touchscreens, onboard GPS, physical buttons and loads of wellness and fitness tracking tech. You also get a small smattering of smart features on either, along with support for both iPhones and Android handsets. </p><p>But which one is the more reliable fitness tracker? To find out, I tossed one on either wrist and set out for a walk around Seattle's Lake Washington, manually counting all my steps. Read on to find out the wearable that came closest to matching my actual step count total, along with analysis of other metrics like distance, elevation gain, heart rate, calories burned and battery used. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8ViwAQq6oDkqL3Wjwo74Pb" name="Sense2-v-Active2-01" alt="Scenic view of Lake Washington with two figures walking in the foreground in the shadows and boats, along with Mount Rainier visible in the background" src="https://cdn.mos.cms.futurecdn.net/8ViwAQq6oDkqL3Wjwo74Pb.jpg" mos="" align="middle" fullscreen="" width="3600" height="2025" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><h3 class="article-body__section" id="section-fitbit-sense-2-vs-amazfit-active-2-walk-test"><span>Fitbit Sense 2 vs. Amazfit Active 2: Walk test</span></h3><div class="product"><a data-dimension112="323dbb56-d0c0-4249-b194-926a7787fdb1" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$229" href="https://www.amazon.com/Fitbit-Advanced-Smartwatch-Graphite-Included/dp/B0B4N2T7GL/?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1410px;"><p class="vanilla-image-block" style="padding-top:106.38%;"><img id="rwUdywoFKdZAZDJXE28joK" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rwUdywoFKdZAZDJXE28joK.png" mos="" align="middle" fullscreen="" width="1410" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Sense 2 is Google's flagship Fitbit product loaded with top-notch health and fitness-tracking tech and just enough smart features to keep you connected, like support for Google Wallet, Google Maps and YouTube Music.<a class="view-deal button" href="https://www.amazon.com/Fitbit-Advanced-Smartwatch-Graphite-Included/dp/B0B4N2T7GL/?th=1" target="_blank" rel="nofollow" data-dimension112="323dbb56-d0c0-4249-b194-926a7787fdb1" data-action="Deal Block" data-label="Sense 2" data-dimension48="Sense 2" data-dimension25="$229">View Deal</a></p></div><div class="product"><a data-dimension112="1786cbf0-c024-494c-98ba-8ce20869d9e3" data-action="Deal Block" data-label="Active 2" data-dimension48="Active 2" data-dimension25="$99" href="https://www.amazon.com/Amazfit-Direction-Fitness-Resistant-Silicone/dp/B0DT3WZCZD?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1271px;"><p class="vanilla-image-block" style="padding-top:108.81%;"><img id="5rWhrDxAJo8MrqaLi7HfXZ" name="71mpuO4LqeL._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5rWhrDxAJo8MrqaLi7HfXZ.jpg" mos="" align="middle" fullscreen="" width="1271" height="1383" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Amazfit Active 2 offers a ton of features for just $99 including impressive fitness, health and sleep-tracking tools ordinarily found on much pricier models. It also boasts an all-metal case, AMOLED touchscreen, physical buttons and more than a week of battery. <a class="view-deal button" href="https://www.amazon.com/Amazfit-Direction-Fitness-Resistant-Silicone/dp/B0DT3WZCZD?th=1" target="_blank" rel="nofollow" data-dimension112="1786cbf0-c024-494c-98ba-8ce20869d9e3" data-action="Deal Block" data-label="Active 2" data-dimension48="Active 2" data-dimension25="$99">View Deal</a></p></div><p>For this walk test, I had the Amazfit Active 2 on my left wrist and the Fitbit Sense 2 on the right. For what it's worth, only the Fitbit app lets you specify whether you're wearing the watch on your dominant or non-dominant wrist. </p><p>As always, to keep track of steps, I counted each pace until I hit 100 before clicking my manual tally counter and starting over again at one. Another useful trick I use to stay on count: my left foot is always the odd count and my right the even. A pair of the best <a href="https://www.tomsguide.com/us/best-noise-cancelling-headphones,review-5566.html">noise-canceling headphones</a> also help me to concentrate. </p><p>As a control for distance, elevation gain and pace, I additionally logged my walk using <a href="https://www.tomsguide.com/reviews/strava-review">Strava</a> on my trusty <a href="https://www.tomsguide.com/reviews/iphone-12-mini">iPhone 12 mini</a> (as I always do for these comparisons). </p><p>With a little more than 3 miles and (apparently) the equivalent of 28 floors climbed, here's how the data from the Fitbit Sense 2 vs. Amazfit Active 2 compares. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jX3Nf9tVqiFXyQuYJtWRab" name="Sense2-v-Active2-04" alt="Close up of the Amazfit Active 2 smartwatch next to the Fitbit Sense 2 with each showing the total step count for the day" src="https://cdn.mos.cms.futurecdn.net/jX3Nf9tVqiFXyQuYJtWRab.jpg" mos="" align="middle" fullscreen="" width="3600" height="2025" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><h3 class="article-body__section" id="section-fitbit-sense-2-vs-amazfit-active-2-walk-test-results"><span>Fitbit Sense 2 vs. Amazfit Active 2: Walk test results</span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Sense 2</p></th><th  ><p>Amazfit Active 2</p></th><th  ><p>Control</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>6,187 steps</p></td><td  ><p>6,116 steps</p></td><td  ><p>6,000 steps (manual count)</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p>2.82 miles </p></td><td  ><p>3.16 miles</p></td><td  ><p>3.25 miles</p></td></tr><tr><td class="firstcol " ><p><strong>Elevation gain</strong></p></td><td  ><p>280 feet</p></td><td  ><p>368 feet</p></td><td  ><p>297 feet</p></td></tr><tr><td class="firstcol " ><p><strong>Pace (average)</strong></p></td><td  ><p>22 mins 11 secs per mile</p></td><td  ><p>19 mins 23 secs per mile</p></td><td  ><p>17 mins 55 secs per mile</p></td></tr><tr><td class="firstcol " ><p><strong>Heart rate (average) </strong></p></td><td  ><p>116 bpm</p></td><td  ><p>101 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Heart rate (max)</strong></p></td><td  ><p>164 bpm</p></td><td  ><p>136 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>492 calories</p></td><td  ><p>366 calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery depleted</strong></p></td><td  ><p>2%</p></td><td  ><p>0%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>I finished my walk with the sun shining brightly and scant a cloud in the sapphire blue sky. Both devices were within 200 paces of my actual step count, which is pretty good, but the Active 2 only overcounted by 117 while the Sense 2 added 187 steps to my count. Strava, meanwhile, beat both devices with a total step count of 6,046 </p><p>The Amazfit's distance data matches Strava nicely while the Fitbit appears to have undercalculated my total distance by roughly 0.43 miles, which is not insignificant. This result is also a bit strange given that the Fitbit also logged a higher step count. </p><p>The Fitbit Sense 2 doesn't provide an elevation gain metric for your workouts, but it will tell you how many "floors" you climbed for the day. I only wore the Sense 2 for this walk test, which, according to Google, was the equivalent of 28 climbed floors. Google calculates one floor as ten feet, by the way. </p><p>While the Sense 2's elevation gain lines up nicely with Strava's, the Amazfit Active 2 once again seemingly overcalculated my total elevation by a noticeable margin. I say "once again" because, versus the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-just-went-hands-on-with-the-samsung-galaxy-fit3-and-it-could-be-my-new-favorite-budget-fitness-tracker">Samsung Galaxy Fit3</a>, the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-500-steps-with-samsung-galaxy-fit3-vs-amazfit-active-2-heres-the-winner">Active 2 logged 58 feet more</a> than the control. And against the Apple Watch SE (2022), the <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-7-000-steps-with-apple-watch-se-vs-amazfit-active-2-heres-the-winner#section-apple-watch-se-vs-amazfit-active-2-walk-test-results">Active 2 overcounted by 165 feet</a> compared to the control. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hF354SkSGeEBauCKJq6bCb" name="Sense2-v-Active2-02" alt="View of an apartment building along Lake Washington called "The Lake" with blue skies behind it" src="https://cdn.mos.cms.futurecdn.net/hF354SkSGeEBauCKJq6bCb.jpg" mos="" align="middle" fullscreen="" width="3600" height="2025" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Pace data is all over the place. Strava tends to have a faster pace than most wearables because the app aggressively pauses tracking anytime you stop moving. However, these results are about as wide-ranging as I've encountered. I notably stopped twice during this walk test, each for roughly 90 seconds to snap photos of the scenic views. </p><p>Heart rate data between the Sense 2 and Active 2 also looks funky. However, I'm inclined to trust Google's measurements more than Amazfit's on this one. First, 116 bpm is much closer to my average heart rate from prior walk tests of similar distance and elevation gain; the same goes for 165 bpm as my maximum.  </p><p>Finally, the Active 2 depleted a little less battery than the Sense 2 over my hour (and change) walk but both wearables left me impressed given onboard GPS tends to be a major power-suck for any device. </p><h3 class="article-body__section" id="section-fitbit-sense-2-vs-amazfit-active-2-and-the-winner-is"><span>Fitbit Sense 2 vs. Amazfit Active 2: And the winner is...</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="S2orPnuH3ueoGNM2vocMLb" name="Sense2-v-Active2-07" alt="Close up of the Amazfit Active 2 smartwatch next to the Fitbit Sense 2 with each showing the total step count for the day" src="https://cdn.mos.cms.futurecdn.net/S2orPnuH3ueoGNM2vocMLb.jpg" mos="" align="middle" fullscreen="" width="3600" height="2025" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>When comparing step count tracking accuracy between the Fitbit Sense 2 versus Amazfit Active 2, Amazfit beats Google, for this test at least. However, there are caveats. The Active 2's elevation data is way off from our control for the third test in a row, while the heart rate data is oddly low, something I also noted in the device's <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-500-steps-with-samsung-galaxy-fit3-vs-amazfit-active-2-heres-the-winner">face-off with the Galaxy Fit3</a>.</p><p>Both devices logged step counts higher than my actual total but still within a reasonable margin of error. However, the Sense 2 churned out strangely low distance and weirdly slow pace metrics, even if its elevation gain and heart rate data appear to be right on the money. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/samsung-galaxy-fit3-vs-fitbit-inspire-3-which-budget-fitness-tracker-wins">Samsung Galaxy Fit3 vs Fitbit Inspire 3: Which budget fitness tracker should you buy?</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tracked-skiing-with-a-usd99-smartwatch-heres-how-it-compares-to-my-usd450-garmin">I tracked skiing with a $99 smartwatch — here’s how it compares to my $450 Garmin</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-walked-5-000-steps-with-the-amazfit-bip-5-vs-armitron-matrix-this-sub-usd100-smartwatch-wins">Under $100 smartwatch test: I walked 5,000 steps with the Amazfit Bip 5 vs Armitron Matrix — here’s the winner</a></li></ul><div data-widget-type="review" data-model-name="Sense 2" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Google's overheating safety update for Fitbit is tanking battery life ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Exactly a month ago, <a href="https://www.tomsguide.com/wellness/smartwatches/these-fitbit-models-are-overheating-see-if-yours-is-on-the-list-to-get-usd50-from-google">Google pushed out a mandatory update</a> to certain <a href="https://www.tomsguide.com/reviews/fitbit-sense">Fitbit Sense</a> and <a href="https://www.tomsguide.com/reviews/fitbit-versa-3">Fitbit Versa 3</a> smartwatches it had detected were at risk of overheating. Owners of devices that received the update were eligible to receive $50 from Google as compensation, which sounded like a good resolution to impacted Fitbit fans.</p><p>But it turns out it may not have been such a great deal after all. The Fitbit forum and subreddit have been peppered with posts from owners of the smartwatches who have seen the update decimate their battery life, in some cases making the wearables all but useless.</p><p>“Before doing the update my battery would last about 5 -6 days,” wrote one user on the <a href="https://community.fitbit.com/t5/Other-Versa-Smartwatches/Versa-3-Battery-issues-after-firmware-update/td-p/5718530" target="_blank">official forums</a>. “Now since doing the update it lasts less than a day. That's with everything turned off too (eg. Notifications, snore detection, vibrations etc).”</p><p>This triggered a host of similar horror stories in the replies. One reported receiving a low battery warning just hours after charging to 100%, while another stated their device’s run time had dropped to 17% in less than 24 hours. </p><p>“I can't be charging it every day, and it's unacceptable to say a forced firmware update, due to a battery defect with their product, should be able to have this affect [sic.],” the user added </p><p>“I had to charge mine twice in one day and it cannot even make it through the night now. It is unusable,” responded another.</p><p>It’s a similar story on <a href="https://www.reddit.com/r/fitbit/comments/1ip7m4u/fitbit_sense_battery_suddenly_very_poor_dies_in/" target="_blank">Reddit</a> with less than 24 hours being the norm. “Drains from 85% to 35% in 3hres”, wrote one owner.</p><p>“I went from getting 3 days to barely 24 hours after the update,” writes another. “It's insane to me that a company's response to a battery recall can be to make the product basically unusable. </p><p>“Imagine if a car company could make a car's max speed 15mph in response to an airbag recall.”</p><h2 id="an-extreme-drop">An extreme drop</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8WJPgMSA2bkpYb6LsJSzYe" name="TG-Fitbit-Sense-1.jpg" alt="Fitbit Sense review" src="https://cdn.mos.cms.futurecdn.net/8WJPgMSA2bkpYb6LsJSzYe.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>To be clear, the <a href="https://support.google.com/fitbit/answer/15763108" target="_blank">support page</a> for the firmware update does mention that battery life will be impacted.</p><p>“The update will improve the stability of the device's battery performance and reduce the risk of the battery overheating,” the text reads. “As a result, the battery will last for shorter periods between charges and you may need to charge your device more frequently.”</p><p>But given the extreme drops in battery life that impacted users are experiencing, it feels safe to assume that Google wasn’t expecting this big a drop when the update rolled out. A change from five to six days to one is a drop of over 80%, and the tone of the above text doesn’t indicate anything near that drastic.</p><p>We have reached out to Google to ask about the widely reported battery issues, and will update the piece if and when we hear back. </p><p>In the meantime, however, there is an early sign that the company is beginning to take the problem seriously. While the first moderator reply on the <a href="https://community.fitbit.com/t5/Other-Versa-Smartwatches/Versa-3-Battery-issues-after-firmware-update/td-p/5718530" target="_blank">community thread</a> at the start of the month just reiterates the official line that the firmware update could affect battery life, a second post yesterday from the same account encourages users to contact customer support.</p><div data-widget-type="merchantlink" data-model-name="Sense 2" class="hawk-root"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/googles-overheating-safety-update-for-fitbit-is-tanking-battery-life</link>
                                                                            <description>
                            <![CDATA[ A drop of over 80% in some cases. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aka6yfkkiGAXjwhAdtbHsC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/dYc6FEEeKr8i4psBwAcGp8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 22 Feb 2025 13:38:46 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alan Martin  ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xMmhmPSssqZHHFWveDgSs7.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/dYc6FEEeKr8i4psBwAcGp8-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fitbit Versa 3 review]]></media:description>                                                            <media:text><![CDATA[Fitbit Versa 3 review]]></media:text>
                                <media:title type="plain"><![CDATA[Fitbit Versa 3 review]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/dYc6FEEeKr8i4psBwAcGp8-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Exactly a month ago, <a href="https://www.tomsguide.com/wellness/smartwatches/these-fitbit-models-are-overheating-see-if-yours-is-on-the-list-to-get-usd50-from-google">Google pushed out a mandatory update</a> to certain <a href="https://www.tomsguide.com/reviews/fitbit-sense">Fitbit Sense</a> and <a href="https://www.tomsguide.com/reviews/fitbit-versa-3">Fitbit Versa 3</a> smartwatches it had detected were at risk of overheating. Owners of devices that received the update were eligible to receive $50 from Google as compensation, which sounded like a good resolution to impacted Fitbit fans.</p><p>But it turns out it may not have been such a great deal after all. The Fitbit forum and subreddit have been peppered with posts from owners of the smartwatches who have seen the update decimate their battery life, in some cases making the wearables all but useless.</p><p>“Before doing the update my battery would last about 5 -6 days,” wrote one user on the <a href="https://community.fitbit.com/t5/Other-Versa-Smartwatches/Versa-3-Battery-issues-after-firmware-update/td-p/5718530" target="_blank">official forums</a>. “Now since doing the update it lasts less than a day. That's with everything turned off too (eg. Notifications, snore detection, vibrations etc).”</p><p>This triggered a host of similar horror stories in the replies. One reported receiving a low battery warning just hours after charging to 100%, while another stated their device’s run time had dropped to 17% in less than 24 hours. </p><p>“I can't be charging it every day, and it's unacceptable to say a forced firmware update, due to a battery defect with their product, should be able to have this affect [sic.],” the user added </p><p>“I had to charge mine twice in one day and it cannot even make it through the night now. It is unusable,” responded another.</p><p>It’s a similar story on <a href="https://www.reddit.com/r/fitbit/comments/1ip7m4u/fitbit_sense_battery_suddenly_very_poor_dies_in/" target="_blank">Reddit</a> with less than 24 hours being the norm. “Drains from 85% to 35% in 3hres”, wrote one owner.</p><p>“I went from getting 3 days to barely 24 hours after the update,” writes another. “It's insane to me that a company's response to a battery recall can be to make the product basically unusable. </p><p>“Imagine if a car company could make a car's max speed 15mph in response to an airbag recall.”</p><h2 id="an-extreme-drop">An extreme drop</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8WJPgMSA2bkpYb6LsJSzYe" name="TG-Fitbit-Sense-1.jpg" alt="Fitbit Sense review" src="https://cdn.mos.cms.futurecdn.net/8WJPgMSA2bkpYb6LsJSzYe.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>To be clear, the <a href="https://support.google.com/fitbit/answer/15763108" target="_blank">support page</a> for the firmware update does mention that battery life will be impacted.</p><p>“The update will improve the stability of the device's battery performance and reduce the risk of the battery overheating,” the text reads. “As a result, the battery will last for shorter periods between charges and you may need to charge your device more frequently.”</p><p>But given the extreme drops in battery life that impacted users are experiencing, it feels safe to assume that Google wasn’t expecting this big a drop when the update rolled out. A change from five to six days to one is a drop of over 80%, and the tone of the above text doesn’t indicate anything near that drastic.</p><p>We have reached out to Google to ask about the widely reported battery issues, and will update the piece if and when we hear back. </p><p>In the meantime, however, there is an early sign that the company is beginning to take the problem seriously. While the first moderator reply on the <a href="https://community.fitbit.com/t5/Other-Versa-Smartwatches/Versa-3-Battery-issues-after-firmware-update/td-p/5718530" target="_blank">community thread</a> at the start of the month just reiterates the official line that the firmware update could affect battery life, a second post yesterday from the same account encourages users to contact customer support.</p><div data-widget-type="merchantlink" data-model-name="Sense 2" class="hawk-root"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>