<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://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/wellness" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Wellness ]]></title>
                <link>https://www.tomsguide.com/wellness</link>
        <description><![CDATA[ All the latest wellness content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Wed, 28 Oct 2026 11:54:25 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ 25 best fall running shoe deals: Get up to 50% off New Balance, Nike and Hoka ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Want to stay active through the fall season? A bunch of brands are offering <a href="https://www.amazon.com/Womens-Running-Shoes/b/ref=dp_bc_5?ie=UTF8&node=679360011" target="_blank" rel="nofollow">fall running shoe deals, including Asics, New Balance, Brooks and more</a>.</p><p>I've searched everywhere to find the biggest discounts on the most popular shoes, so I've done all the hard work for you. Keep scrolling to check out the best running shoe deals! Whether you're looking for a comfortable max cushioned pair or want a lightweight shoe to set PRs in, there's something for everybody.</p><p><strong>Note: </strong>prices vary depending on the size and color you choose; search the different color options available in your size to find the best deals.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links </span></h3><ul><li><strong>New Balance: </strong><a href="https://www.amazon.com/stores/page/855D4CDF-ADB7-4BE8-9E26-A085D029E4B5?" target="_blank" rel="nofollow"><strong>up to 50% off</strong></a></li><li><strong>Asics: </strong><a href="https://www.amazon.com/stores/page/848769B1-4C68-4CA5-B2E7-A4480A3FBF59" target="_blank" rel="nofollow"><strong>deals from $54</strong></a></li><li><strong>Adidas: </strong><a href="https://www.amazon.com/stores/adidas/page/5E398A61-45C7-46F9-A6C6-5B4797CC5063?" target="_blank" rel="nofollow"><strong>deals from $39</strong></a></li><li><strong>Brooks: </strong><a href="https://www.amazon.com/stores/Brooks/page/B6834DFA-396F-4E38-98F6-3D2739393271?" target="_blank" rel="nofollow"><strong>up to 40% off</strong></a></li><li><strong>Hoka: </strong><a href="https://www.hoka.com/en/us/sale/" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li><li><strong>Nike: </strong><a href="https://www.amazon.com/stores/page/E9C7C6A6-9A88-4959-A67F-4D44FC67320F" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li></ul><h3 class="article-body__section" id="section-best-new-balance-deals"><span>Best New Balance Deals</span></h3><div class="product"><a data-dimension112="c2df5748-d2c0-11f1-abac-87b33ee2717a" data-action="Deal Block" data-label="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension48="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension25="$108" href="https://www.amazon.com/New-Balance-FuelCell-Running-Afterglow/dp/B0F4LLKZCH" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:880px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="zMXtGm9YKG3arrNYXpTBH" name="New Balance Rebel v5 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zMXtGm9YKG3arrNYXpTBH-1920-80.jpg" mos="" align="middle" fullscreen="" width="880" height="880" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-FuelCell-Running-Afterglow/dp/B0F4LLKZCH" target="_blank" rel="nofollow" data-dimension112="c2df5748-d2c0-11f1-abac-87b33ee2717a" data-action="Deal Block" data-label="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension48="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension25="$108">FuelCell Rebel v5 Running Shoes (Women's): was $144 now $108</a></strong><br>The lightweight <a href="https://www.tomsguide.com/wellness/running/new-balance-rebel-v5-review">New Balance FuelCell Rebel v5</a> is a comfortable and speedy daily trainer that's perfect for those who don't love the feel of max-cushioned shoes, as it has a more grounded feel.<a class="view-deal button" href="https://www.amazon.com/New-Balance-FuelCell-Running-Afterglow/dp/B0F4LLKZCH" target="_blank" rel="nofollow" data-dimension112="c2df5748-d2c0-11f1-abac-87b33ee2717a" data-action="Deal Block" data-label="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension48="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension25="$108">View Deal</a></p></div><div class="product"><a data-dimension112="c2df57ac-d2c0-11f1-9922-b5bc8ba20a25" data-action="Deal Block" data-label="Fresh Foam X Hierro v9 (Women's)" data-dimension48="Fresh Foam X Hierro v9 (Women's)" data-dimension25="$123" href="https://www.amazon.com/New-Balance-Womens-Running-Afterglow/dp/B0F4LHFJZH" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:825px;"><p class="vanilla-image-block" style="padding-top:60.00%;"><img id="rKNw53FMMtAELn6kVTTGxk" name="New Balance Fresh Foam X Hierro v9" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rKNw53FMMtAELn6kVTTGxk-1920-80.png" mos="" align="middle" fullscreen="" width="825" height="495" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-Womens-Running-Afterglow/dp/B0F4LHFJZH" target="_blank" rel="nofollow" data-dimension112="c2df57ac-d2c0-11f1-9922-b5bc8ba20a25" data-action="Deal Block" data-label="Fresh Foam X Hierro v9 (Women's)" data-dimension48="Fresh Foam X Hierro v9 (Women's)" data-dimension25="$123">Fresh Foam X Hierro v9 (Women's): was $159 now $123</a></strong><br>The <a href="https://www.tomsguide.com/wellness/running/new-balance-fresh-foam-x-hierro-v9-review">New Balance Fresh Foam X Hierro v9</a> is a comfortable trail-running and hiking shoe that’s great for active trips. Despite its plush feel, it's still nice and stable with solid grip. You probably won't set your fastest times in this shoe, but it feels great to run in.<a class="view-deal button" href="https://www.amazon.com/New-Balance-Womens-Running-Afterglow/dp/B0F4LHFJZH" target="_blank" rel="nofollow" data-dimension112="c2df57ac-d2c0-11f1-9922-b5bc8ba20a25" data-action="Deal Block" data-label="Fresh Foam X Hierro v9 (Women's)" data-dimension48="Fresh Foam X Hierro v9 (Women's)" data-dimension25="$123">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5810-d2c0-11f1-b235-7d0176f3f2d7" data-action="Deal Block" data-label="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension48="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension25="$144" href="https://www.amazon.com/New-Balance-Running-Metallic-Inkwell/dp/B0CLB6X87W" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:880px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XwbzzRSwcghwdApXRMQfb5" name="New Balance 1080v14 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XwbzzRSwcghwdApXRMQfb5-1920-80.jpg" mos="" align="middle" fullscreen="" width="880" height="880" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-Running-Metallic-Inkwell/dp/B0CLB6X87W" target="_blank" rel="nofollow" data-dimension112="c2df5810-d2c0-11f1-b235-7d0176f3f2d7" data-action="Deal Block" data-label="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension48="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension25="$144">Fresh Foam X 1080v14 Running Shoe (Men's): was $164 now $144</a></strong><br>We gave this shoe a 4-star rating in our <a href="https://www.tomsguide.com/wellness/running/new-balance-fresh-foam-x-1080v14-review">New Balance Fresh Foam X 1080v14 review</a>, saying that this is a cushioned daily trainer that offers a great balance of comfort and weight.<a class="view-deal button" href="https://www.amazon.com/New-Balance-Running-Metallic-Inkwell/dp/B0CLB6X87W" target="_blank" rel="nofollow" data-dimension112="c2df5810-d2c0-11f1-b235-7d0176f3f2d7" data-action="Deal Block" data-label="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension48="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension25="$144">View Deal</a></p></div><div class="product"><a data-dimension112="c2df58a6-d2c0-11f1-ae3f-e5f6a5a0b16d" data-action="Deal Block" data-label="FuelCell Supercomp Elite V5 (Women's)" data-dimension48="FuelCell Supercomp Elite V5 (Women's)" data-dimension25="$145" href="https://www.amazon.com/New-Balance-FuelCell-SuperComp-Tangerine/dp/B0F4LZ7VDR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1267px;"><p class="vanilla-image-block" style="padding-top:54.85%;"><img id="BXfy6JhfauCEwEyTDyxFe3" name="FuelCell Supercomp Elite V5 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BXfy6JhfauCEwEyTDyxFe3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1267" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-FuelCell-SuperComp-Tangerine/dp/B0F4LZ7VDR" target="_blank" rel="nofollow" data-dimension112="c2df58a6-d2c0-11f1-ae3f-e5f6a5a0b16d" data-action="Deal Block" data-label="FuelCell Supercomp Elite V5 (Women's)" data-dimension48="FuelCell Supercomp Elite V5 (Women's)" data-dimension25="$145">FuelCell Supercomp Elite V5 (Women's): was $264 now $145</a></strong><br>Our Fitness Editor, Jane McGuire, ran her fastest marathon in the Supercomp Elite V5 — and our Senior Fitness Writer, Nick Harris-Fry loved their lightweight, propulsive design in his <a href="https://www.tomsguide.com/wellness/running/new-balance-sc-elite-v5-review">New Balance FuelCell Supercomp Elite V5 review</a>. Don't sleep on this saving!<a class="view-deal button" href="https://www.amazon.com/New-Balance-FuelCell-SuperComp-Tangerine/dp/B0F4LZ7VDR" target="_blank" rel="nofollow" data-dimension112="c2df58a6-d2c0-11f1-ae3f-e5f6a5a0b16d" data-action="Deal Block" data-label="FuelCell Supercomp Elite V5 (Women's)" data-dimension48="FuelCell Supercomp Elite V5 (Women's)" data-dimension25="$145">View Deal</a></p></div><h3 class="article-body__section" id="section-best-asics-deals"><span>Best Asics Deals</span></h3><div class="product"><a data-dimension112="c2df59a0-d2c0-11f1-9c7c-dbde66422e87" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47" href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:48.88%;"><img id="Woj2dkTQp2a9nuWs5nFuDg" name="Gel-Pulse 16 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Woj2dkTQp2a9nuWs5nFuDg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="565" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow" data-dimension112="c2df59a0-d2c0-11f1-9c7c-dbde66422e87" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47">Gel-Pulse 16 (Women's): was $100 now $47</a></strong><br>This is one of the cheapest Asics running shoe deals you'll find, so this shoe is definitely worth a purchase. However, stock is limited, so act fast! It's regarded as a comfy and versatile sneaker that suits neutral runners in particular.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow" data-dimension112="c2df59a0-d2c0-11f1-9c7c-dbde66422e87" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5a0e-d2c0-11f1-bdc9-95741a9ee26f" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69" href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1160px;"><p class="vanilla-image-block" style="padding-top:46.29%;"><img id="iHsvdtLnzyeWEyCZV8HBYe" name="Gel-Kayano 30 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iHsvdtLnzyeWEyCZV8HBYe-1920-80.jpg" mos="" align="middle" fullscreen="" width="1160" height="537" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow" data-dimension112="c2df5a0e-d2c0-11f1-bdc9-95741a9ee26f" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69">Gel-Kayano 30 (Women's): was $160 now $69</a></strong><br>The Gel Kayano 30 running shoes are an older model, but they're amazingly cheap with 56% off. They're designed to provide advanced stability and soft cushioning for neutral runners and overpronators alike. Our Deals Editor-in-Chief, Louis Ramirez, wrote: "I've been using these shoes for almost two years now. (I loved them so much I bought a second pair months after buying my first pair). I find that they're great for casual runs on the treadmill, HIIT sessions, and long distance running outdoors."<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow" data-dimension112="c2df5a0e-d2c0-11f1-bdc9-95741a9ee26f" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5a72-d2c0-11f1-94eb-63c8e0f41529" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67" href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" 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="wMYSVC2325TPeXMt7TJ9t3" name="Asics Novablast 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wMYSVC2325TPeXMt7TJ9t3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" target="_blank" rel="nofollow" data-dimension112="c2df5a72-d2c0-11f1-94eb-63c8e0f41529" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67">Women's Novablast 4: was $140 now $67</a></strong><br>Old but gold. While the Novablast 6 is now available, the Novablast 4 is beloved by the Tom's Guide team — especially our Fitness Editor Jane McGuire, who wrote: "I've run over 100 miles in this shoe, and it's still one I reach for when I'm heading out for a long run."<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" target="_blank" rel="nofollow" data-dimension112="c2df5a72-d2c0-11f1-94eb-63c8e0f41529" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5acc-d2c0-11f1-9c7a-17ad5fda44b4" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$81" href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1528px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="rD9sdYvxaqtEV2BgyMfTx" name="Sonicblast" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rD9sdYvxaqtEV2BgyMfTx-1920-80.jpg" mos="" align="middle" fullscreen="" width="1528" height="1146" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow" data-dimension112="c2df5acc-d2c0-11f1-9c7a-17ad5fda44b4" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$81">Sonicblast Road Running Shoes (Men's): was $180 now $81</a></strong><br>Suited for both fast runs and everyday training, the Asics Sonicblast are super lightweight and propulsive. There's an Astroplate mechanism to help you shoot forward, as well as FF Blast Max and FF Turbo cushioning for a bouncy feel underfoot.<a class="view-deal button" href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow" data-dimension112="c2df5acc-d2c0-11f1-9c7a-17ad5fda44b4" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$81">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5b30-d2c0-11f1-9150-d3d7297169c5" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129" href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1166px;"><p class="vanilla-image-block" style="padding-top:48.80%;"><img id="4pk4xESon4iEcQDmd7TqZF" name="Novablast 5 (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4pk4xESon4iEcQDmd7TqZF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1166" height="569" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow" data-dimension112="c2df5b30-d2c0-11f1-9150-d3d7297169c5" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129">Novablast 5 (Men's): was $160 now $129</a></strong><br>We voted the Asics Novablast 6 as the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> you can buy right now, but before that, the <a href="https://www.tomsguide.com/wellness/running/asics-novablast-5-review">Asics Novablast 5</a> had the top spot. They quickly stood out for their balance of comfort, support and fun, making them a pair of shoes you will actually look forward to running in. They're lightweight, durable and have a soft, springy feel underfoot that helps absorb impact while keeping runs enjoyable.<a class="view-deal button" href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow" data-dimension112="c2df5b30-d2c0-11f1-9150-d3d7297169c5" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129">View Deal</a></p></div><h3 class="article-body__section" id="section-best-nike-deals"><span>Best Nike Deals</span></h3><div class="product"><a data-dimension112="c2df5bee-d2c0-11f1-aff0-45b8bc229328" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82" href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="uxG2rhW9L4NBaWbeVEreNS" name="Nike Pegasus 42" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uxG2rhW9L4NBaWbeVEreNS-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow" data-dimension112="c2df5bee-d2c0-11f1-aff0-45b8bc229328" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82">Pegasus 42 (Men's): was $145 now $82</a></strong><br>Earning a 3.5-star rating in our <a href="https://www.tomsguide.com/wellness/running/nike-pegasus-42-review">Nike Pegasus 42 review</a>, we currently rank this as one of the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> you can buy in terms of value. Compared to the Pegasus 41 (which was already great,) the 42 feels even smoother and more energetic underfoot. It's a great shoe for just about anybody.<a class="view-deal button" href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow" data-dimension112="c2df5bee-d2c0-11f1-aff0-45b8bc229328" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5c52-d2c0-11f1-a82a-ad821506e16a" data-action="Deal Block" data-label="Vomero 18 Running Shoes (Women's)" data-dimension48="Vomero 18 Running Shoes (Women's)" data-dimension25="$116" href="https://www.amazon.com/dp/B0FRNJB2NY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:44.46%;"><img id="on8DUvsokY6RbJszwfXseQ" name="Vomero" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/on8DUvsokY6RbJszwfXseQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="309" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FRNJB2NY" target="_blank" rel="nofollow" data-dimension112="c2df5c52-d2c0-11f1-a82a-ad821506e16a" data-action="Deal Block" data-label="Vomero 18 Running Shoes (Women's)" data-dimension48="Vomero 18 Running Shoes (Women's)" data-dimension25="$116">Vomero 18 Running Shoes (Women's): was $155 now $116</a></strong><br>The <a href="https://www.tomsguide.com/wellness/running/nike-vomero-18-review">Nike Vomero 18</a> is a max-cushioned cruiser that's ideal for protecting the body on long and easy runs. It's plush, comfortable and stable. The shoe is pretty heavy, but if you're looking for plush, sink-in comfort, this one ticks that box. <a class="view-deal button" href="https://www.amazon.com/dp/B0FRNJB2NY" target="_blank" rel="nofollow" data-dimension112="c2df5c52-d2c0-11f1-a82a-ad821506e16a" data-action="Deal Block" data-label="Vomero 18 Running Shoes (Women's)" data-dimension48="Vomero 18 Running Shoes (Women's)" data-dimension25="$116">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5cb6-d2c0-11f1-9f82-455a1192f058" data-action="Deal Block" data-label="Vomero Plus (Men's)" data-dimension48="Vomero Plus (Men's)" data-dimension25="$152" href="https://www.nike.com/t/vomero-plus-mens-road-running-shoes-5npsVBwT/HV8150-111" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="ee4dBpGa8AkgSBMVwAnYhb" name="Vomero Plus (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ee4dBpGa8AkgSBMVwAnYhb-1920-80.jpg" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/vomero-plus-mens-road-running-shoes-5npsVBwT/HV8150-111" target="_blank" rel="nofollow" data-dimension112="c2df5cb6-d2c0-11f1-9f82-455a1192f058" data-action="Deal Block" data-label="Vomero Plus (Men's)" data-dimension48="Vomero Plus (Men's)" data-dimension25="$152">Vomero Plus (Men's): was $180 now $152</a></strong><br>The <a href="https://www.tomsguide.com/wellness/running/i-ran-50-miles-in-the-nike-vomero-plus-and-its-my-new-favorite-running-shoe">Nike Vomero Plus</a> offers an unrivalled level of bounce and fun thanks to its springy ZoomX midsole. It makes easy and long runs all the more enjoyable in particular. The biggest drawback is the fact it costs $180 at full price, but that’s no longer a problem because the Vomero Plus is reduced right now.<a class="view-deal button" href="https://www.nike.com/t/vomero-plus-mens-road-running-shoes-5npsVBwT/HV8150-111" target="_blank" rel="nofollow" data-dimension112="c2df5cb6-d2c0-11f1-9f82-455a1192f058" data-action="Deal Block" data-label="Vomero Plus (Men's)" data-dimension48="Vomero Plus (Men's)" data-dimension25="$152">View Deal</a></p></div><h3 class="article-body__section" id="section-best-hoka-deals"><span>Best Hoka Deals</span></h3><div class="product"><a data-dimension112="c2df5d74-d2c0-11f1-8d42-c9caeb93b15c" data-action="Deal Block" data-label="Arahi 8 (Women's)" data-dimension48="Arahi 8 (Women's)" data-dimension25="$120" href="https://www.hoka.com/en/us/womens-everyday-running-shoes/arahi-8/1168691.html?dwvar_1168691_color=FSTS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1932px;"><p class="vanilla-image-block" style="padding-top:81.11%;"><img id="EUf3iisgBNqSoAfRcsnYMU" name="Arahi 8" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EUf3iisgBNqSoAfRcsnYMU-1920-80.jpg" mos="" align="middle" fullscreen="" width="1932" height="1567" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.hoka.com/en/us/womens-everyday-running-shoes/arahi-8/1168691.html?dwvar_1168691_color=FSTS" target="_blank" rel="nofollow" data-dimension112="c2df5d74-d2c0-11f1-8d42-c9caeb93b15c" data-action="Deal Block" data-label="Arahi 8 (Women's)" data-dimension48="Arahi 8 (Women's)" data-dimension25="$120">Arahi 8 (Women's): was $150 now $120</a></strong><br>The Arahi 8 is the stable counterpart to the Clifton 10, offering extra support for runners who overpronate along with Hoka's familiar smooth, cushioned ride. It'd great for neutral runners, and the newer Arahi 9 is very similar in all respects, so the older model is definitely better value in the sale.<a class="view-deal button" href="https://www.hoka.com/en/us/womens-everyday-running-shoes/arahi-8/1168691.html?dwvar_1168691_color=FSTS" target="_blank" rel="nofollow" data-dimension112="c2df5d74-d2c0-11f1-8d42-c9caeb93b15c" data-action="Deal Block" data-label="Arahi 8 (Women's)" data-dimension48="Arahi 8 (Women's)" data-dimension25="$120">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5dd8-d2c0-11f1-9f4e-1192ecbad4b4" data-action="Deal Block" data-label="Clifton 10 (Men's)" data-dimension48="Clifton 10 (Men's)" data-dimension25="$124" href="https://www.hoka.com/en/us/mens-everyday-running-gear/clifton-10/1162030.html?dwvar_1162030_color=WKY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1932px;"><p class="vanilla-image-block" style="padding-top:81.11%;"><img id="pTkmatx4tcURfCFTcWdCu9" name="Clifton 10" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTkmatx4tcURfCFTcWdCu9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1932" height="1567" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.hoka.com/en/us/mens-everyday-running-gear/clifton-10/1162030.html?dwvar_1162030_color=WKY" target="_blank" rel="nofollow" data-dimension112="c2df5dd8-d2c0-11f1-9f4e-1192ecbad4b4" data-action="Deal Block" data-label="Clifton 10 (Men's)" data-dimension48="Clifton 10 (Men's)" data-dimension25="$124">Clifton 10 (Men's): was $155 now $124</a></strong><br>The Clifton is the most popular Hoka running shoe for a reason. It’s the perfect place to start with the brand, offering a smooth, comfortable ride that will suit runners of all levels well. It also offers better value than Hoka's rivals, like the Bondi 9.<a class="view-deal button" href="https://www.hoka.com/en/us/mens-everyday-running-gear/clifton-10/1162030.html?dwvar_1162030_color=WKY" target="_blank" rel="nofollow" data-dimension112="c2df5dd8-d2c0-11f1-9f4e-1192ecbad4b4" data-action="Deal Block" data-label="Clifton 10 (Men's)" data-dimension48="Clifton 10 (Men's)" data-dimension25="$124">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5e32-d2c0-11f1-ab60-7707c7d9918d" data-action="Deal Block" data-label="Clifton 9 GTX (Women's)" data-dimension48="Clifton 9 GTX (Women's)" data-dimension25="$132" href="https://www.hoka.com/en/us/womens-everyday-running-shoes/clifton-9-gtx/1141490.html?dwvar_1141490_color=BNDR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1932px;"><p class="vanilla-image-block" style="padding-top:81.11%;"><img id="RRxC8fKVUmNBdxEfjnVQFf" name="Clifton 9 GTX (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RRxC8fKVUmNBdxEfjnVQFf-1920-80.webp" mos="" align="middle" fullscreen="" width="1932" height="1567" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.hoka.com/en/us/womens-everyday-running-shoes/clifton-9-gtx/1141490.html?dwvar_1141490_color=BNDR" target="_blank" rel="nofollow" data-dimension112="c2df5e32-d2c0-11f1-ab60-7707c7d9918d" data-action="Deal Block" data-label="Clifton 9 GTX (Women's)" data-dimension48="Clifton 9 GTX (Women's)" data-dimension25="$132">Clifton 9 GTX (Women's): was $165 now $132</a></strong><br>The <a href="https://www.tomsguide.com/reviews/hoka-clifton-9">Hoka Clifton 9</a> is a cushioned, everyday running shoe that’ll work well for beginners and more experienced runners alike. It’s not the fanciest or the fastest shoe around, but it’s reliably comfortable, whether you’re training for a marathon or using this shoe for your walking workouts. The GTX version adds weatherproofing, so you'll get more out of your walks and runs, rain or shine.<a class="view-deal button" href="https://www.hoka.com/en/us/womens-everyday-running-shoes/clifton-9-gtx/1141490.html?dwvar_1141490_color=BNDR" target="_blank" rel="nofollow" data-dimension112="c2df5e32-d2c0-11f1-ab60-7707c7d9918d" data-action="Deal Block" data-label="Clifton 9 GTX (Women's)" data-dimension48="Clifton 9 GTX (Women's)" data-dimension25="$132">View Deal</a></p></div><h3 class="article-body__section" id="section-best-brooks-deals"><span>Best Brooks Deals</span></h3><div class="product"><a data-dimension112="c2df5ef0-d2c0-11f1-9329-334fc9bf762d" data-action="Deal Block" data-label="Hyperion" data-dimension48="Hyperion" data-dimension25="$72" href="https://www.amazon.com/Brooks-Mens-Hyperion-Neutral-Running/dp/B0BMT316TB?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1035px;"><p class="vanilla-image-block" style="padding-top:67.15%;"><img id="crYpUdxjpNUYpBCknBJzHX" name="Brooks Hyperion" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/crYpUdxjpNUYpBCknBJzHX-1920-80.jpg" mos="" align="middle" fullscreen="" width="1035" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Brooks-Mens-Hyperion-Neutral-Running/dp/B0BMT316TB?" target="_blank" rel="nofollow" data-dimension112="c2df5ef0-d2c0-11f1-9329-334fc9bf762d" data-action="Deal Block" data-label="Hyperion" data-dimension48="Hyperion" data-dimension25="$72">Hyperion: was $140 now $72</a></strong><br>With prices starting from $72, this is one of the more affordable Brooks shoes you'll find. They're designed to be lightweight, speedy and to help you navigate transitions with ease.<a class="view-deal button" href="https://www.amazon.com/Brooks-Mens-Hyperion-Neutral-Running/dp/B0BMT316TB?" target="_blank" rel="nofollow" data-dimension112="c2df5ef0-d2c0-11f1-9329-334fc9bf762d" data-action="Deal Block" data-label="Hyperion" data-dimension48="Hyperion" data-dimension25="$72">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5f54-d2c0-11f1-aeb0-e710137431e9" data-action="Deal Block" data-label="Hyperion Max 3 (Men's)" data-dimension48="Hyperion Max 3 (Men's)" data-dimension25="$108" href="https://www.amazon.com/dp/B0DM3MTXGK?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:840px;"><p class="vanilla-image-block" style="padding-top:68.45%;"><img id="bf7gzstL3kTG3roVNuaN4L" name="Brooks Hyperion Max" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bf7gzstL3kTG3roVNuaN4L-1920-80.png" mos="" align="middle" fullscreen="" width="840" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0DM3MTXGK?" target="_blank" rel="nofollow" data-dimension112="c2df5f54-d2c0-11f1-aeb0-e710137431e9" data-action="Deal Block" data-label="Hyperion Max 3 (Men's)" data-dimension48="Hyperion Max 3 (Men's)" data-dimension25="$108">Hyperion Max 3 (Men's): was $199 now $108</a></strong><br>The Brooks Hyperion Max 3 is a plated training shoe with a mega-stack of cushioning in its midsole, the top layer of which is made from a particularly springy PEBA material. It's a speedier option than shoes like the Glycerin and Ghost, and still comfortable for easy runs as well.<a class="view-deal button" href="https://www.amazon.com/dp/B0DM3MTXGK?" target="_blank" rel="nofollow" data-dimension112="c2df5f54-d2c0-11f1-aeb0-e710137431e9" data-action="Deal Block" data-label="Hyperion Max 3 (Men's)" data-dimension48="Hyperion Max 3 (Men's)" data-dimension25="$108">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5fcc-d2c0-11f1-9639-7d5af08a33f8" data-action="Deal Block" data-label="Ghost Max 3 (Men's)" data-dimension48="Ghost Max 3 (Men's)" data-dimension25="$109" href="https://www.amazon.com/dp/B0DM3R7VD1?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:890px;"><p class="vanilla-image-block" style="padding-top:64.61%;"><img id="mL6eZbPdx2NmSyzvQSMAcc" name="Brooks Ghost Max 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mL6eZbPdx2NmSyzvQSMAcc-1920-80.png" mos="" align="middle" fullscreen="" width="890" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0DM3R7VD1?" target="_blank" rel="nofollow" data-dimension112="c2df5fcc-d2c0-11f1-9639-7d5af08a33f8" data-action="Deal Block" data-label="Ghost Max 3 (Men's)" data-dimension48="Ghost Max 3 (Men's)" data-dimension25="$109">Ghost Max 3 (Men's): was $159 now $109</a></strong><br>The Ghost Max 3 is a more cushioned and rockered alternative to the Ghost 17. The Ghost Max 4 has just come out, meaning the Ghost Max 3 is reduced by $50, with plenty of colors and sizes included in the sale.<a class="view-deal button" href="https://www.amazon.com/dp/B0DM3R7VD1?" target="_blank" rel="nofollow" data-dimension112="c2df5fcc-d2c0-11f1-9639-7d5af08a33f8" data-action="Deal Block" data-label="Ghost Max 3 (Men's)" data-dimension48="Ghost Max 3 (Men's)" data-dimension25="$109">View Deal</a></p></div><div class="product"><a data-dimension112="c2df60a8-d2c0-11f1-8324-df0cbc45e6cc" data-action="Deal Block" data-label="Glycerin Max (Women's)" data-dimension48="Glycerin Max (Women's)" data-dimension25="$149" href="https://www.amazon.com/Brooks-Womens-Glycerin-Peacoat-Ribbon/dp/B0D3B6HXJ7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:926px;"><p class="vanilla-image-block" style="padding-top:62.10%;"><img id="Y98AvyBg8eBD4Re2iRNXC6" name="Brooks Gycerin Max" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Y98AvyBg8eBD4Re2iRNXC6-1920-80.png" mos="" align="middle" fullscreen="" width="926" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Brooks-Womens-Glycerin-Peacoat-Ribbon/dp/B0D3B6HXJ7" target="_blank" rel="nofollow" data-dimension112="c2df60a8-d2c0-11f1-8324-df0cbc45e6cc" data-action="Deal Block" data-label="Glycerin Max (Women's)" data-dimension48="Glycerin Max (Women's)" data-dimension25="$149">Glycerin Max (Women's): was $199 now $149</a></strong><br>The original Glycerin Max is not just $50 cheaper than the Glycerin Max 2 thanks to this deal, but it's arguably better than the latest model because it's a bit lighter. This is the most cushioned model in the Brooks' line-up, and perfect for anyone who loves a comfortable running shoe.<a class="view-deal button" href="https://www.amazon.com/Brooks-Womens-Glycerin-Peacoat-Ribbon/dp/B0D3B6HXJ7" target="_blank" rel="nofollow" data-dimension112="c2df60a8-d2c0-11f1-8324-df0cbc45e6cc" data-action="Deal Block" data-label="Glycerin Max (Women's)" data-dimension48="Glycerin Max (Women's)" data-dimension25="$149">View Deal</a></p></div><div class="product"><a data-dimension112="c2df6120-d2c0-11f1-a95b-63a369414996" data-action="Deal Block" data-label="Hyperion Elite 5" data-dimension48="Hyperion Elite 5" data-dimension25="$149" href="https://www.amazon.com/dp/B0F4NG15WR?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:980px;"><p class="vanilla-image-block" style="padding-top:58.67%;"><img id="ZsxwPp8UrjYaq3Tu7V3wud" name="Brooks Hyperion Elite 5" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZsxwPp8UrjYaq3Tu7V3wud-1920-80.png" mos="" align="middle" fullscreen="" width="980" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>When it comes to running fast, carbon plate racers are the shoe to go for, but they're normally prohibitively expensive. Thanks to this $75 saving the Brooks Hyperion Elite 5 is under $200 in the Amazon sale. It's still not exactly cheap, but if you have PRs in mind, it will help get you there with its lightweight, propulsive design.<a class="view-deal button" href="https://www.amazon.com/dp/B0F4NG15WR?" target="_blank" rel="nofollow" data-dimension112="c2df6120-d2c0-11f1-a95b-63a369414996" data-action="Deal Block" data-label="Hyperion Elite 5" data-dimension48="Hyperion Elite 5" data-dimension25="$149">View Deal</a></p></div><h3 class="article-body__section" id="section-best-saucony-deals"><span>Best Saucony Deals</span></h3><div class="product"><a data-dimension112="c2df61e8-d2c0-11f1-9967-bb277f443bb4" data-action="Deal Block" data-label="Cohesion 14 Shoes (Women's)" data-dimension48="Cohesion 14 Shoes (Women's)" data-dimension25="$50" href="https://www.amazon.com/dp/B08CGR4YKG?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:58.99%;"><img id="pdjLV6pX6UWTGkcfsqaSE3" name="Cohesion 14 Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pdjLV6pX6UWTGkcfsqaSE3-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="410" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B08CGR4YKG?" target="_blank" rel="nofollow" data-dimension112="c2df61e8-d2c0-11f1-9967-bb277f443bb4" data-action="Deal Block" data-label="Cohesion 14 Shoes (Women's)" data-dimension48="Cohesion 14 Shoes (Women's)" data-dimension25="$50">Cohesion 14 Shoes (Women's): was $80 now $50</a></strong><br>The Saucony Cohesion 14 were already budget-friendly at $80, but now you can get a pair for even less. Shoppers on Amazon love these shoes for their comfortable and supportive design, earning these a 4.1-star rating.<a class="view-deal button" href="https://www.amazon.com/dp/B08CGR4YKG?" target="_blank" rel="nofollow" data-dimension112="c2df61e8-d2c0-11f1-9967-bb277f443bb4" data-action="Deal Block" data-label="Cohesion 14 Shoes (Women's)" data-dimension48="Cohesion 14 Shoes (Women's)" data-dimension25="$50">View Deal</a></p></div><div class="product"><a data-dimension112="c2df624c-d2c0-11f1-b2ec-11e535a9e1c3" data-action="Deal Block" data-label="Tide 2 Trainer (Men's)" data-dimension48="Tide 2 Trainer (Men's)" data-dimension25="$56" href="https://www.amazon.com/dp/B0D31XXWHZ?" 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="gPCzUDufYEii6Von4ywQm" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gPCzUDufYEii6Von4ywQm-1920-80.png" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0D31XXWHZ?" target="_blank" rel="nofollow" data-dimension112="c2df624c-d2c0-11f1-b2ec-11e535a9e1c3" data-action="Deal Block" data-label="Tide 2 Trainer (Men's)" data-dimension48="Tide 2 Trainer (Men's)" data-dimension25="$56">Tide 2 Trainer (Men's): was $100 now $56</a></strong><br>The Tide 2 is all about comfort for your everyday. It has soft, springy foam to make every step feel cushioned, a flexible plate to give you a little bounce and move with ease, <em>and</em> a breathable mesh upper to keep your feet cool. Basically, it’s perfect for walking, running errands, or just being on your feet all day without feeling sore.<a class="view-deal button" href="https://www.amazon.com/dp/B0D31XXWHZ?" target="_blank" rel="nofollow" data-dimension112="c2df624c-d2c0-11f1-b2ec-11e535a9e1c3" data-action="Deal Block" data-label="Tide 2 Trainer (Men's)" data-dimension48="Tide 2 Trainer (Men's)" data-dimension25="$56">View Deal</a></p></div><div class="product star-deal"><a data-dimension112="c2df62b0-d2c0-11f1-b672-abfae88a3776" data-action="Star Deal Block" data-label="Hurricane 24 (Men's)" data-dimension48="Hurricane 24 (Men's)" data-dimension25="$70" href="https://www.amazon.com/Saucony-Hurricane-Sneaker-Black-Shadow/dp/B0D31XQL4H" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1498px;"><p class="vanilla-image-block" style="padding-top:46.40%;"><img id="vxf7UD5T2Am7guVzFoFcZ4" name="Saucony Hurricane 24 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1498" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Saucony-Hurricane-Sneaker-Black-Shadow/dp/B0D31XQL4H" target="_blank" rel="nofollow" data-dimension112="c2df62b0-d2c0-11f1-b672-abfae88a3776" data-action="Star Deal Block" data-label="Hurricane 24 (Men's)" data-dimension48="Hurricane 24 (Men's)" data-dimension25="$70">Hurricane 24 (Men's): was $80 now $70</a></strong><br>Running with the <a href="https://www.tomsguide.com/wellness/running/saucony-hurricane-24-review">Saucony Hurricane 24 </a>is like running on clouds. They use PWRRUN+ foam, which cushions your feet while still feeling springy. With a wide base and rocker design, it offers a stable and comfortable ride for longer or easy runs. The breathable mesh upper fits securely without being tight. The Hurricane 25 have replaced these shoes, but the 24 are the real bargain. <a class="view-deal button" href="https://www.amazon.com/Saucony-Hurricane-Sneaker-Black-Shadow/dp/B0D31XQL4H" target="_blank" rel="nofollow" data-dimension112="c2df62b0-d2c0-11f1-b672-abfae88a3776" data-action="Star Deal Block" data-label="Hurricane 24 (Men's)" data-dimension48="Hurricane 24 (Men's)" data-dimension25="$70">View Deal</a></p></div><div class="product"><a data-dimension112="c2df630a-d2c0-11f1-a069-8de46a5c3eea" data-action="Deal Block" data-label="Ride 18 (Men's)" data-dimension48="Ride 18 (Men's)" data-dimension25="$79" href="https://www.amazon.com/Saucony-Mens-Sneaker-BLACK-WHITE/dp/B0D31WZWT8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1542px;"><p class="vanilla-image-block" style="padding-top:45.07%;"><img id="NmXRUrbSqDWhK8xTzQF7bf" name="Ride 18 (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NmXRUrbSqDWhK8xTzQF7bf-1920-80.jpg" mos="" align="middle" fullscreen="" width="1542" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Saucony-Mens-Sneaker-BLACK-WHITE/dp/B0D31WZWT8" target="_blank" rel="nofollow" data-dimension112="c2df630a-d2c0-11f1-a069-8de46a5c3eea" data-action="Deal Block" data-label="Ride 18 (Men's)" data-dimension48="Ride 18 (Men's)" data-dimension25="$79">Ride 18 (Men's): was $145 now $79</a></strong><br>Comfort and support matter, and the <a href="https://www.tomsguide.com/wellness/fitness/i-ran-45-miles-in-the-saucony-ride-18-heres-my-verdict">Saucony Ride 18</a> delivers both. The soft, bouncy PWRRUN Plus foam feels light underfoot, helping to take the pressure off your joints as you build confidence. The stretchy mesh upper moves with your foot while the padded heel reduces rubbing that can cut runs short. Whether you’re lacing up for your first 5K or logging serious mileage, this shoe is a reliable all-rounder.<a class="view-deal button" href="https://www.amazon.com/Saucony-Mens-Sneaker-BLACK-WHITE/dp/B0D31WZWT8" target="_blank" rel="nofollow" data-dimension112="c2df630a-d2c0-11f1-a069-8de46a5c3eea" data-action="Deal Block" data-label="Ride 18 (Men's)" data-dimension48="Ride 18 (Men's)" data-dimension25="$79">View Deal</a></p></div><div class="product"><a data-dimension112="c2df636e-d2c0-11f1-a01a-f354a1da8b48" data-action="Deal Block" data-label="Triumph 23" data-dimension48="Triumph 23" data-dimension25="$89" href="https://www.amazon.com/Saucony-Triumph-Sneaker-Black-White/dp/B0DJWN776G" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="99qpJaU9RKTQSkGAmdZPrJ" name="saucony-mens-triumph-23-sneaker-whiteazu-4c83ebb7-41ff-452b-aa7e-9fe244156c64.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/99qpJaU9RKTQSkGAmdZPrJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Saucony Triumph 23 has a couple of key features to recommend it. One is that it's very comfortable and protective, and the other is its durability. That said, it's now discounted by 48%. It's also a lot cheaper than the <a href="https://www.tomsguide.com/wellness/running/i-ran-40-miles-in-the-saucony-triumph-24-and-its-a-return-to-form-for-the-popular-cushioned-running-shoe" data-dimension112="c2df636e-d2c0-11f1-a01a-f354a1da8b48" data-action="Deal Block" data-label="Triumph 23" data-dimension48="Triumph 23" data-dimension25="$89">Triumph 24</a>.<a class="view-deal button" href="https://www.amazon.com/Saucony-Triumph-Sneaker-Black-White/dp/B0DJWN776G" target="_blank" rel="nofollow" data-dimension112="c2df636e-d2c0-11f1-a01a-f354a1da8b48" data-action="Deal Block" data-label="Triumph 23" data-dimension48="Triumph 23" data-dimension25="$89">View Deal</a></p></div><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop More Deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Sneakers%2C+running+shoes%2C+sandals&brands=Hoka%2CSkechers%2CAsics&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=light_blue" 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-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      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-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      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-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .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">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \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.parentElement.querySelector('.tg-df-carousel-roundels').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-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \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>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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>    \x3C/div>    \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">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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>        \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';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    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')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        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';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        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.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    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 cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             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');                    url.searchParams.append('rows', this.getRowsLimit().toString());          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 = this.getRowsLimit();          // 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, idx) => {              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}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${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);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } 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 = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \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;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    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.getRowsLimit();                 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/running/25-best-fall-running-shoe-deals-get-up-to-50-percent-off-new-balance-nike-and-hoka</link>
                                                                            <description>
                            <![CDATA[ From Brooks to Saucony, these are the best running shoe deals you can shop right now from major brands. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">fBNnZM7FCDMw3ukuqQXpgc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4uC9Qfgqx7zRMJSQ2qkZ7F-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 28 Oct 2026 11:54:25 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Running]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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/4uC9Qfgqx7zRMJSQ2qkZ7F-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Hoka Clifton 10 sneaker held in hand]]></media:description>                                                            <media:text><![CDATA[Hoka Clifton 10 sneaker held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Hoka Clifton 10 sneaker held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4uC9Qfgqx7zRMJSQ2qkZ7F-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Want to stay active through the fall season? A bunch of brands are offering <a href="https://www.amazon.com/Womens-Running-Shoes/b/ref=dp_bc_5?ie=UTF8&node=679360011" target="_blank" rel="nofollow">fall running shoe deals, including Asics, New Balance, Brooks and more</a>.</p><p>I've searched everywhere to find the biggest discounts on the most popular shoes, so I've done all the hard work for you. Keep scrolling to check out the best running shoe deals! Whether you're looking for a comfortable max cushioned pair or want a lightweight shoe to set PRs in, there's something for everybody.</p><p><strong>Note: </strong>prices vary depending on the size and color you choose; search the different color options available in your size to find the best deals.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links </span></h3><ul><li><strong>New Balance: </strong><a href="https://www.amazon.com/stores/page/855D4CDF-ADB7-4BE8-9E26-A085D029E4B5?" target="_blank" rel="nofollow"><strong>up to 50% off</strong></a></li><li><strong>Asics: </strong><a href="https://www.amazon.com/stores/page/848769B1-4C68-4CA5-B2E7-A4480A3FBF59" target="_blank" rel="nofollow"><strong>deals from $54</strong></a></li><li><strong>Adidas: </strong><a href="https://www.amazon.com/stores/adidas/page/5E398A61-45C7-46F9-A6C6-5B4797CC5063?" target="_blank" rel="nofollow"><strong>deals from $39</strong></a></li><li><strong>Brooks: </strong><a href="https://www.amazon.com/stores/Brooks/page/B6834DFA-396F-4E38-98F6-3D2739393271?" target="_blank" rel="nofollow"><strong>up to 40% off</strong></a></li><li><strong>Hoka: </strong><a href="https://www.hoka.com/en/us/sale/" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li><li><strong>Nike: </strong><a href="https://www.amazon.com/stores/page/E9C7C6A6-9A88-4959-A67F-4D44FC67320F" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li></ul><h3 class="article-body__section" id="section-best-new-balance-deals"><span>Best New Balance Deals</span></h3><div class="product"><a data-dimension112="c2df5748-d2c0-11f1-abac-87b33ee2717a" data-action="Deal Block" data-label="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension48="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension25="$108" href="https://www.amazon.com/New-Balance-FuelCell-Running-Afterglow/dp/B0F4LLKZCH" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:880px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="zMXtGm9YKG3arrNYXpTBH" name="New Balance Rebel v5 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zMXtGm9YKG3arrNYXpTBH-1920-80.jpg" mos="" align="middle" fullscreen="" width="880" height="880" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-FuelCell-Running-Afterglow/dp/B0F4LLKZCH" target="_blank" rel="nofollow" data-dimension112="c2df5748-d2c0-11f1-abac-87b33ee2717a" data-action="Deal Block" data-label="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension48="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension25="$108">FuelCell Rebel v5 Running Shoes (Women's): was $144 now $108</a></strong><br>The lightweight <a href="https://www.tomsguide.com/wellness/running/new-balance-rebel-v5-review">New Balance FuelCell Rebel v5</a> is a comfortable and speedy daily trainer that's perfect for those who don't love the feel of max-cushioned shoes, as it has a more grounded feel.<a class="view-deal button" href="https://www.amazon.com/New-Balance-FuelCell-Running-Afterglow/dp/B0F4LLKZCH" target="_blank" rel="nofollow" data-dimension112="c2df5748-d2c0-11f1-abac-87b33ee2717a" data-action="Deal Block" data-label="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension48="FuelCell Rebel v5 Running Shoes (Women's)" data-dimension25="$108">View Deal</a></p></div><div class="product"><a data-dimension112="c2df57ac-d2c0-11f1-9922-b5bc8ba20a25" data-action="Deal Block" data-label="Fresh Foam X Hierro v9 (Women's)" data-dimension48="Fresh Foam X Hierro v9 (Women's)" data-dimension25="$123" href="https://www.amazon.com/New-Balance-Womens-Running-Afterglow/dp/B0F4LHFJZH" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:825px;"><p class="vanilla-image-block" style="padding-top:60.00%;"><img id="rKNw53FMMtAELn6kVTTGxk" name="New Balance Fresh Foam X Hierro v9" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rKNw53FMMtAELn6kVTTGxk-1920-80.png" mos="" align="middle" fullscreen="" width="825" height="495" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-Womens-Running-Afterglow/dp/B0F4LHFJZH" target="_blank" rel="nofollow" data-dimension112="c2df57ac-d2c0-11f1-9922-b5bc8ba20a25" data-action="Deal Block" data-label="Fresh Foam X Hierro v9 (Women's)" data-dimension48="Fresh Foam X Hierro v9 (Women's)" data-dimension25="$123">Fresh Foam X Hierro v9 (Women's): was $159 now $123</a></strong><br>The <a href="https://www.tomsguide.com/wellness/running/new-balance-fresh-foam-x-hierro-v9-review">New Balance Fresh Foam X Hierro v9</a> is a comfortable trail-running and hiking shoe that’s great for active trips. Despite its plush feel, it's still nice and stable with solid grip. You probably won't set your fastest times in this shoe, but it feels great to run in.<a class="view-deal button" href="https://www.amazon.com/New-Balance-Womens-Running-Afterglow/dp/B0F4LHFJZH" target="_blank" rel="nofollow" data-dimension112="c2df57ac-d2c0-11f1-9922-b5bc8ba20a25" data-action="Deal Block" data-label="Fresh Foam X Hierro v9 (Women's)" data-dimension48="Fresh Foam X Hierro v9 (Women's)" data-dimension25="$123">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5810-d2c0-11f1-b235-7d0176f3f2d7" data-action="Deal Block" data-label="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension48="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension25="$144" href="https://www.amazon.com/New-Balance-Running-Metallic-Inkwell/dp/B0CLB6X87W" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:880px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="XwbzzRSwcghwdApXRMQfb5" name="New Balance 1080v14 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XwbzzRSwcghwdApXRMQfb5-1920-80.jpg" mos="" align="middle" fullscreen="" width="880" height="880" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-Running-Metallic-Inkwell/dp/B0CLB6X87W" target="_blank" rel="nofollow" data-dimension112="c2df5810-d2c0-11f1-b235-7d0176f3f2d7" data-action="Deal Block" data-label="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension48="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension25="$144">Fresh Foam X 1080v14 Running Shoe (Men's): was $164 now $144</a></strong><br>We gave this shoe a 4-star rating in our <a href="https://www.tomsguide.com/wellness/running/new-balance-fresh-foam-x-1080v14-review">New Balance Fresh Foam X 1080v14 review</a>, saying that this is a cushioned daily trainer that offers a great balance of comfort and weight.<a class="view-deal button" href="https://www.amazon.com/New-Balance-Running-Metallic-Inkwell/dp/B0CLB6X87W" target="_blank" rel="nofollow" data-dimension112="c2df5810-d2c0-11f1-b235-7d0176f3f2d7" data-action="Deal Block" data-label="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension48="Fresh Foam X 1080v14 Running Shoe (Men's)" data-dimension25="$144">View Deal</a></p></div><div class="product"><a data-dimension112="c2df58a6-d2c0-11f1-ae3f-e5f6a5a0b16d" data-action="Deal Block" data-label="FuelCell Supercomp Elite V5 (Women's)" data-dimension48="FuelCell Supercomp Elite V5 (Women's)" data-dimension25="$145" href="https://www.amazon.com/New-Balance-FuelCell-SuperComp-Tangerine/dp/B0F4LZ7VDR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1267px;"><p class="vanilla-image-block" style="padding-top:54.85%;"><img id="BXfy6JhfauCEwEyTDyxFe3" name="FuelCell Supercomp Elite V5 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BXfy6JhfauCEwEyTDyxFe3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1267" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-FuelCell-SuperComp-Tangerine/dp/B0F4LZ7VDR" target="_blank" rel="nofollow" data-dimension112="c2df58a6-d2c0-11f1-ae3f-e5f6a5a0b16d" data-action="Deal Block" data-label="FuelCell Supercomp Elite V5 (Women's)" data-dimension48="FuelCell Supercomp Elite V5 (Women's)" data-dimension25="$145">FuelCell Supercomp Elite V5 (Women's): was $264 now $145</a></strong><br>Our Fitness Editor, Jane McGuire, ran her fastest marathon in the Supercomp Elite V5 — and our Senior Fitness Writer, Nick Harris-Fry loved their lightweight, propulsive design in his <a href="https://www.tomsguide.com/wellness/running/new-balance-sc-elite-v5-review">New Balance FuelCell Supercomp Elite V5 review</a>. Don't sleep on this saving!<a class="view-deal button" href="https://www.amazon.com/New-Balance-FuelCell-SuperComp-Tangerine/dp/B0F4LZ7VDR" target="_blank" rel="nofollow" data-dimension112="c2df58a6-d2c0-11f1-ae3f-e5f6a5a0b16d" data-action="Deal Block" data-label="FuelCell Supercomp Elite V5 (Women's)" data-dimension48="FuelCell Supercomp Elite V5 (Women's)" data-dimension25="$145">View Deal</a></p></div><h3 class="article-body__section" id="section-best-asics-deals"><span>Best Asics Deals</span></h3><div class="product"><a data-dimension112="c2df59a0-d2c0-11f1-9c7c-dbde66422e87" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47" href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:48.88%;"><img id="Woj2dkTQp2a9nuWs5nFuDg" name="Gel-Pulse 16 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Woj2dkTQp2a9nuWs5nFuDg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="565" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow" data-dimension112="c2df59a0-d2c0-11f1-9c7c-dbde66422e87" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47">Gel-Pulse 16 (Women's): was $100 now $47</a></strong><br>This is one of the cheapest Asics running shoe deals you'll find, so this shoe is definitely worth a purchase. However, stock is limited, so act fast! It's regarded as a comfy and versatile sneaker that suits neutral runners in particular.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow" data-dimension112="c2df59a0-d2c0-11f1-9c7c-dbde66422e87" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5a0e-d2c0-11f1-bdc9-95741a9ee26f" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69" href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1160px;"><p class="vanilla-image-block" style="padding-top:46.29%;"><img id="iHsvdtLnzyeWEyCZV8HBYe" name="Gel-Kayano 30 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iHsvdtLnzyeWEyCZV8HBYe-1920-80.jpg" mos="" align="middle" fullscreen="" width="1160" height="537" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow" data-dimension112="c2df5a0e-d2c0-11f1-bdc9-95741a9ee26f" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69">Gel-Kayano 30 (Women's): was $160 now $69</a></strong><br>The Gel Kayano 30 running shoes are an older model, but they're amazingly cheap with 56% off. They're designed to provide advanced stability and soft cushioning for neutral runners and overpronators alike. Our Deals Editor-in-Chief, Louis Ramirez, wrote: "I've been using these shoes for almost two years now. (I loved them so much I bought a second pair months after buying my first pair). I find that they're great for casual runs on the treadmill, HIIT sessions, and long distance running outdoors."<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow" data-dimension112="c2df5a0e-d2c0-11f1-bdc9-95741a9ee26f" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5a72-d2c0-11f1-94eb-63c8e0f41529" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67" href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" 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="wMYSVC2325TPeXMt7TJ9t3" name="Asics Novablast 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wMYSVC2325TPeXMt7TJ9t3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" target="_blank" rel="nofollow" data-dimension112="c2df5a72-d2c0-11f1-94eb-63c8e0f41529" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67">Women's Novablast 4: was $140 now $67</a></strong><br>Old but gold. While the Novablast 6 is now available, the Novablast 4 is beloved by the Tom's Guide team — especially our Fitness Editor Jane McGuire, who wrote: "I've run over 100 miles in this shoe, and it's still one I reach for when I'm heading out for a long run."<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" target="_blank" rel="nofollow" data-dimension112="c2df5a72-d2c0-11f1-94eb-63c8e0f41529" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5acc-d2c0-11f1-9c7a-17ad5fda44b4" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$81" href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1528px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="rD9sdYvxaqtEV2BgyMfTx" name="Sonicblast" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rD9sdYvxaqtEV2BgyMfTx-1920-80.jpg" mos="" align="middle" fullscreen="" width="1528" height="1146" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow" data-dimension112="c2df5acc-d2c0-11f1-9c7a-17ad5fda44b4" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$81">Sonicblast Road Running Shoes (Men's): was $180 now $81</a></strong><br>Suited for both fast runs and everyday training, the Asics Sonicblast are super lightweight and propulsive. There's an Astroplate mechanism to help you shoot forward, as well as FF Blast Max and FF Turbo cushioning for a bouncy feel underfoot.<a class="view-deal button" href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow" data-dimension112="c2df5acc-d2c0-11f1-9c7a-17ad5fda44b4" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$81">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5b30-d2c0-11f1-9150-d3d7297169c5" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129" href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1166px;"><p class="vanilla-image-block" style="padding-top:48.80%;"><img id="4pk4xESon4iEcQDmd7TqZF" name="Novablast 5 (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4pk4xESon4iEcQDmd7TqZF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1166" height="569" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow" data-dimension112="c2df5b30-d2c0-11f1-9150-d3d7297169c5" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129">Novablast 5 (Men's): was $160 now $129</a></strong><br>We voted the Asics Novablast 6 as the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> you can buy right now, but before that, the <a href="https://www.tomsguide.com/wellness/running/asics-novablast-5-review">Asics Novablast 5</a> had the top spot. They quickly stood out for their balance of comfort, support and fun, making them a pair of shoes you will actually look forward to running in. They're lightweight, durable and have a soft, springy feel underfoot that helps absorb impact while keeping runs enjoyable.<a class="view-deal button" href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow" data-dimension112="c2df5b30-d2c0-11f1-9150-d3d7297169c5" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129">View Deal</a></p></div><h3 class="article-body__section" id="section-best-nike-deals"><span>Best Nike Deals</span></h3><div class="product"><a data-dimension112="c2df5bee-d2c0-11f1-aff0-45b8bc229328" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82" href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="uxG2rhW9L4NBaWbeVEreNS" name="Nike Pegasus 42" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uxG2rhW9L4NBaWbeVEreNS-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow" data-dimension112="c2df5bee-d2c0-11f1-aff0-45b8bc229328" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82">Pegasus 42 (Men's): was $145 now $82</a></strong><br>Earning a 3.5-star rating in our <a href="https://www.tomsguide.com/wellness/running/nike-pegasus-42-review">Nike Pegasus 42 review</a>, we currently rank this as one of the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> you can buy in terms of value. Compared to the Pegasus 41 (which was already great,) the 42 feels even smoother and more energetic underfoot. It's a great shoe for just about anybody.<a class="view-deal button" href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow" data-dimension112="c2df5bee-d2c0-11f1-aff0-45b8bc229328" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5c52-d2c0-11f1-a82a-ad821506e16a" data-action="Deal Block" data-label="Vomero 18 Running Shoes (Women's)" data-dimension48="Vomero 18 Running Shoes (Women's)" data-dimension25="$116" href="https://www.amazon.com/dp/B0FRNJB2NY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:44.46%;"><img id="on8DUvsokY6RbJszwfXseQ" name="Vomero" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/on8DUvsokY6RbJszwfXseQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="309" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FRNJB2NY" target="_blank" rel="nofollow" data-dimension112="c2df5c52-d2c0-11f1-a82a-ad821506e16a" data-action="Deal Block" data-label="Vomero 18 Running Shoes (Women's)" data-dimension48="Vomero 18 Running Shoes (Women's)" data-dimension25="$116">Vomero 18 Running Shoes (Women's): was $155 now $116</a></strong><br>The <a href="https://www.tomsguide.com/wellness/running/nike-vomero-18-review">Nike Vomero 18</a> is a max-cushioned cruiser that's ideal for protecting the body on long and easy runs. It's plush, comfortable and stable. The shoe is pretty heavy, but if you're looking for plush, sink-in comfort, this one ticks that box. <a class="view-deal button" href="https://www.amazon.com/dp/B0FRNJB2NY" target="_blank" rel="nofollow" data-dimension112="c2df5c52-d2c0-11f1-a82a-ad821506e16a" data-action="Deal Block" data-label="Vomero 18 Running Shoes (Women's)" data-dimension48="Vomero 18 Running Shoes (Women's)" data-dimension25="$116">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5cb6-d2c0-11f1-9f82-455a1192f058" data-action="Deal Block" data-label="Vomero Plus (Men's)" data-dimension48="Vomero Plus (Men's)" data-dimension25="$152" href="https://www.nike.com/t/vomero-plus-mens-road-running-shoes-5npsVBwT/HV8150-111" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="ee4dBpGa8AkgSBMVwAnYhb" name="Vomero Plus (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ee4dBpGa8AkgSBMVwAnYhb-1920-80.jpg" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/vomero-plus-mens-road-running-shoes-5npsVBwT/HV8150-111" target="_blank" rel="nofollow" data-dimension112="c2df5cb6-d2c0-11f1-9f82-455a1192f058" data-action="Deal Block" data-label="Vomero Plus (Men's)" data-dimension48="Vomero Plus (Men's)" data-dimension25="$152">Vomero Plus (Men's): was $180 now $152</a></strong><br>The <a href="https://www.tomsguide.com/wellness/running/i-ran-50-miles-in-the-nike-vomero-plus-and-its-my-new-favorite-running-shoe">Nike Vomero Plus</a> offers an unrivalled level of bounce and fun thanks to its springy ZoomX midsole. It makes easy and long runs all the more enjoyable in particular. The biggest drawback is the fact it costs $180 at full price, but that’s no longer a problem because the Vomero Plus is reduced right now.<a class="view-deal button" href="https://www.nike.com/t/vomero-plus-mens-road-running-shoes-5npsVBwT/HV8150-111" target="_blank" rel="nofollow" data-dimension112="c2df5cb6-d2c0-11f1-9f82-455a1192f058" data-action="Deal Block" data-label="Vomero Plus (Men's)" data-dimension48="Vomero Plus (Men's)" data-dimension25="$152">View Deal</a></p></div><h3 class="article-body__section" id="section-best-hoka-deals"><span>Best Hoka Deals</span></h3><div class="product"><a data-dimension112="c2df5d74-d2c0-11f1-8d42-c9caeb93b15c" data-action="Deal Block" data-label="Arahi 8 (Women's)" data-dimension48="Arahi 8 (Women's)" data-dimension25="$120" href="https://www.hoka.com/en/us/womens-everyday-running-shoes/arahi-8/1168691.html?dwvar_1168691_color=FSTS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1932px;"><p class="vanilla-image-block" style="padding-top:81.11%;"><img id="EUf3iisgBNqSoAfRcsnYMU" name="Arahi 8" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EUf3iisgBNqSoAfRcsnYMU-1920-80.jpg" mos="" align="middle" fullscreen="" width="1932" height="1567" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.hoka.com/en/us/womens-everyday-running-shoes/arahi-8/1168691.html?dwvar_1168691_color=FSTS" target="_blank" rel="nofollow" data-dimension112="c2df5d74-d2c0-11f1-8d42-c9caeb93b15c" data-action="Deal Block" data-label="Arahi 8 (Women's)" data-dimension48="Arahi 8 (Women's)" data-dimension25="$120">Arahi 8 (Women's): was $150 now $120</a></strong><br>The Arahi 8 is the stable counterpart to the Clifton 10, offering extra support for runners who overpronate along with Hoka's familiar smooth, cushioned ride. It'd great for neutral runners, and the newer Arahi 9 is very similar in all respects, so the older model is definitely better value in the sale.<a class="view-deal button" href="https://www.hoka.com/en/us/womens-everyday-running-shoes/arahi-8/1168691.html?dwvar_1168691_color=FSTS" target="_blank" rel="nofollow" data-dimension112="c2df5d74-d2c0-11f1-8d42-c9caeb93b15c" data-action="Deal Block" data-label="Arahi 8 (Women's)" data-dimension48="Arahi 8 (Women's)" data-dimension25="$120">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5dd8-d2c0-11f1-9f4e-1192ecbad4b4" data-action="Deal Block" data-label="Clifton 10 (Men's)" data-dimension48="Clifton 10 (Men's)" data-dimension25="$124" href="https://www.hoka.com/en/us/mens-everyday-running-gear/clifton-10/1162030.html?dwvar_1162030_color=WKY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1932px;"><p class="vanilla-image-block" style="padding-top:81.11%;"><img id="pTkmatx4tcURfCFTcWdCu9" name="Clifton 10" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTkmatx4tcURfCFTcWdCu9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1932" height="1567" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.hoka.com/en/us/mens-everyday-running-gear/clifton-10/1162030.html?dwvar_1162030_color=WKY" target="_blank" rel="nofollow" data-dimension112="c2df5dd8-d2c0-11f1-9f4e-1192ecbad4b4" data-action="Deal Block" data-label="Clifton 10 (Men's)" data-dimension48="Clifton 10 (Men's)" data-dimension25="$124">Clifton 10 (Men's): was $155 now $124</a></strong><br>The Clifton is the most popular Hoka running shoe for a reason. It’s the perfect place to start with the brand, offering a smooth, comfortable ride that will suit runners of all levels well. It also offers better value than Hoka's rivals, like the Bondi 9.<a class="view-deal button" href="https://www.hoka.com/en/us/mens-everyday-running-gear/clifton-10/1162030.html?dwvar_1162030_color=WKY" target="_blank" rel="nofollow" data-dimension112="c2df5dd8-d2c0-11f1-9f4e-1192ecbad4b4" data-action="Deal Block" data-label="Clifton 10 (Men's)" data-dimension48="Clifton 10 (Men's)" data-dimension25="$124">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5e32-d2c0-11f1-ab60-7707c7d9918d" data-action="Deal Block" data-label="Clifton 9 GTX (Women's)" data-dimension48="Clifton 9 GTX (Women's)" data-dimension25="$132" href="https://www.hoka.com/en/us/womens-everyday-running-shoes/clifton-9-gtx/1141490.html?dwvar_1141490_color=BNDR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1932px;"><p class="vanilla-image-block" style="padding-top:81.11%;"><img id="RRxC8fKVUmNBdxEfjnVQFf" name="Clifton 9 GTX (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RRxC8fKVUmNBdxEfjnVQFf-1920-80.webp" mos="" align="middle" fullscreen="" width="1932" height="1567" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.hoka.com/en/us/womens-everyday-running-shoes/clifton-9-gtx/1141490.html?dwvar_1141490_color=BNDR" target="_blank" rel="nofollow" data-dimension112="c2df5e32-d2c0-11f1-ab60-7707c7d9918d" data-action="Deal Block" data-label="Clifton 9 GTX (Women's)" data-dimension48="Clifton 9 GTX (Women's)" data-dimension25="$132">Clifton 9 GTX (Women's): was $165 now $132</a></strong><br>The <a href="https://www.tomsguide.com/reviews/hoka-clifton-9">Hoka Clifton 9</a> is a cushioned, everyday running shoe that’ll work well for beginners and more experienced runners alike. It’s not the fanciest or the fastest shoe around, but it’s reliably comfortable, whether you’re training for a marathon or using this shoe for your walking workouts. The GTX version adds weatherproofing, so you'll get more out of your walks and runs, rain or shine.<a class="view-deal button" href="https://www.hoka.com/en/us/womens-everyday-running-shoes/clifton-9-gtx/1141490.html?dwvar_1141490_color=BNDR" target="_blank" rel="nofollow" data-dimension112="c2df5e32-d2c0-11f1-ab60-7707c7d9918d" data-action="Deal Block" data-label="Clifton 9 GTX (Women's)" data-dimension48="Clifton 9 GTX (Women's)" data-dimension25="$132">View Deal</a></p></div><h3 class="article-body__section" id="section-best-brooks-deals"><span>Best Brooks Deals</span></h3><div class="product"><a data-dimension112="c2df5ef0-d2c0-11f1-9329-334fc9bf762d" data-action="Deal Block" data-label="Hyperion" data-dimension48="Hyperion" data-dimension25="$72" href="https://www.amazon.com/Brooks-Mens-Hyperion-Neutral-Running/dp/B0BMT316TB?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1035px;"><p class="vanilla-image-block" style="padding-top:67.15%;"><img id="crYpUdxjpNUYpBCknBJzHX" name="Brooks Hyperion" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/crYpUdxjpNUYpBCknBJzHX-1920-80.jpg" mos="" align="middle" fullscreen="" width="1035" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Brooks-Mens-Hyperion-Neutral-Running/dp/B0BMT316TB?" target="_blank" rel="nofollow" data-dimension112="c2df5ef0-d2c0-11f1-9329-334fc9bf762d" data-action="Deal Block" data-label="Hyperion" data-dimension48="Hyperion" data-dimension25="$72">Hyperion: was $140 now $72</a></strong><br>With prices starting from $72, this is one of the more affordable Brooks shoes you'll find. They're designed to be lightweight, speedy and to help you navigate transitions with ease.<a class="view-deal button" href="https://www.amazon.com/Brooks-Mens-Hyperion-Neutral-Running/dp/B0BMT316TB?" target="_blank" rel="nofollow" data-dimension112="c2df5ef0-d2c0-11f1-9329-334fc9bf762d" data-action="Deal Block" data-label="Hyperion" data-dimension48="Hyperion" data-dimension25="$72">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5f54-d2c0-11f1-aeb0-e710137431e9" data-action="Deal Block" data-label="Hyperion Max 3 (Men's)" data-dimension48="Hyperion Max 3 (Men's)" data-dimension25="$108" href="https://www.amazon.com/dp/B0DM3MTXGK?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:840px;"><p class="vanilla-image-block" style="padding-top:68.45%;"><img id="bf7gzstL3kTG3roVNuaN4L" name="Brooks Hyperion Max" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bf7gzstL3kTG3roVNuaN4L-1920-80.png" mos="" align="middle" fullscreen="" width="840" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0DM3MTXGK?" target="_blank" rel="nofollow" data-dimension112="c2df5f54-d2c0-11f1-aeb0-e710137431e9" data-action="Deal Block" data-label="Hyperion Max 3 (Men's)" data-dimension48="Hyperion Max 3 (Men's)" data-dimension25="$108">Hyperion Max 3 (Men's): was $199 now $108</a></strong><br>The Brooks Hyperion Max 3 is a plated training shoe with a mega-stack of cushioning in its midsole, the top layer of which is made from a particularly springy PEBA material. It's a speedier option than shoes like the Glycerin and Ghost, and still comfortable for easy runs as well.<a class="view-deal button" href="https://www.amazon.com/dp/B0DM3MTXGK?" target="_blank" rel="nofollow" data-dimension112="c2df5f54-d2c0-11f1-aeb0-e710137431e9" data-action="Deal Block" data-label="Hyperion Max 3 (Men's)" data-dimension48="Hyperion Max 3 (Men's)" data-dimension25="$108">View Deal</a></p></div><div class="product"><a data-dimension112="c2df5fcc-d2c0-11f1-9639-7d5af08a33f8" data-action="Deal Block" data-label="Ghost Max 3 (Men's)" data-dimension48="Ghost Max 3 (Men's)" data-dimension25="$109" href="https://www.amazon.com/dp/B0DM3R7VD1?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:890px;"><p class="vanilla-image-block" style="padding-top:64.61%;"><img id="mL6eZbPdx2NmSyzvQSMAcc" name="Brooks Ghost Max 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mL6eZbPdx2NmSyzvQSMAcc-1920-80.png" mos="" align="middle" fullscreen="" width="890" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0DM3R7VD1?" target="_blank" rel="nofollow" data-dimension112="c2df5fcc-d2c0-11f1-9639-7d5af08a33f8" data-action="Deal Block" data-label="Ghost Max 3 (Men's)" data-dimension48="Ghost Max 3 (Men's)" data-dimension25="$109">Ghost Max 3 (Men's): was $159 now $109</a></strong><br>The Ghost Max 3 is a more cushioned and rockered alternative to the Ghost 17. The Ghost Max 4 has just come out, meaning the Ghost Max 3 is reduced by $50, with plenty of colors and sizes included in the sale.<a class="view-deal button" href="https://www.amazon.com/dp/B0DM3R7VD1?" target="_blank" rel="nofollow" data-dimension112="c2df5fcc-d2c0-11f1-9639-7d5af08a33f8" data-action="Deal Block" data-label="Ghost Max 3 (Men's)" data-dimension48="Ghost Max 3 (Men's)" data-dimension25="$109">View Deal</a></p></div><div class="product"><a data-dimension112="c2df60a8-d2c0-11f1-8324-df0cbc45e6cc" data-action="Deal Block" data-label="Glycerin Max (Women's)" data-dimension48="Glycerin Max (Women's)" data-dimension25="$149" href="https://www.amazon.com/Brooks-Womens-Glycerin-Peacoat-Ribbon/dp/B0D3B6HXJ7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:926px;"><p class="vanilla-image-block" style="padding-top:62.10%;"><img id="Y98AvyBg8eBD4Re2iRNXC6" name="Brooks Gycerin Max" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Y98AvyBg8eBD4Re2iRNXC6-1920-80.png" mos="" align="middle" fullscreen="" width="926" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Brooks-Womens-Glycerin-Peacoat-Ribbon/dp/B0D3B6HXJ7" target="_blank" rel="nofollow" data-dimension112="c2df60a8-d2c0-11f1-8324-df0cbc45e6cc" data-action="Deal Block" data-label="Glycerin Max (Women's)" data-dimension48="Glycerin Max (Women's)" data-dimension25="$149">Glycerin Max (Women's): was $199 now $149</a></strong><br>The original Glycerin Max is not just $50 cheaper than the Glycerin Max 2 thanks to this deal, but it's arguably better than the latest model because it's a bit lighter. This is the most cushioned model in the Brooks' line-up, and perfect for anyone who loves a comfortable running shoe.<a class="view-deal button" href="https://www.amazon.com/Brooks-Womens-Glycerin-Peacoat-Ribbon/dp/B0D3B6HXJ7" target="_blank" rel="nofollow" data-dimension112="c2df60a8-d2c0-11f1-8324-df0cbc45e6cc" data-action="Deal Block" data-label="Glycerin Max (Women's)" data-dimension48="Glycerin Max (Women's)" data-dimension25="$149">View Deal</a></p></div><div class="product"><a data-dimension112="c2df6120-d2c0-11f1-a95b-63a369414996" data-action="Deal Block" data-label="Hyperion Elite 5" data-dimension48="Hyperion Elite 5" data-dimension25="$149" href="https://www.amazon.com/dp/B0F4NG15WR?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:980px;"><p class="vanilla-image-block" style="padding-top:58.67%;"><img id="ZsxwPp8UrjYaq3Tu7V3wud" name="Brooks Hyperion Elite 5" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZsxwPp8UrjYaq3Tu7V3wud-1920-80.png" mos="" align="middle" fullscreen="" width="980" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>When it comes to running fast, carbon plate racers are the shoe to go for, but they're normally prohibitively expensive. Thanks to this $75 saving the Brooks Hyperion Elite 5 is under $200 in the Amazon sale. It's still not exactly cheap, but if you have PRs in mind, it will help get you there with its lightweight, propulsive design.<a class="view-deal button" href="https://www.amazon.com/dp/B0F4NG15WR?" target="_blank" rel="nofollow" data-dimension112="c2df6120-d2c0-11f1-a95b-63a369414996" data-action="Deal Block" data-label="Hyperion Elite 5" data-dimension48="Hyperion Elite 5" data-dimension25="$149">View Deal</a></p></div><h3 class="article-body__section" id="section-best-saucony-deals"><span>Best Saucony Deals</span></h3><div class="product"><a data-dimension112="c2df61e8-d2c0-11f1-9967-bb277f443bb4" data-action="Deal Block" data-label="Cohesion 14 Shoes (Women's)" data-dimension48="Cohesion 14 Shoes (Women's)" data-dimension25="$50" href="https://www.amazon.com/dp/B08CGR4YKG?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:58.99%;"><img id="pdjLV6pX6UWTGkcfsqaSE3" name="Cohesion 14 Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pdjLV6pX6UWTGkcfsqaSE3-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="410" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B08CGR4YKG?" target="_blank" rel="nofollow" data-dimension112="c2df61e8-d2c0-11f1-9967-bb277f443bb4" data-action="Deal Block" data-label="Cohesion 14 Shoes (Women's)" data-dimension48="Cohesion 14 Shoes (Women's)" data-dimension25="$50">Cohesion 14 Shoes (Women's): was $80 now $50</a></strong><br>The Saucony Cohesion 14 were already budget-friendly at $80, but now you can get a pair for even less. Shoppers on Amazon love these shoes for their comfortable and supportive design, earning these a 4.1-star rating.<a class="view-deal button" href="https://www.amazon.com/dp/B08CGR4YKG?" target="_blank" rel="nofollow" data-dimension112="c2df61e8-d2c0-11f1-9967-bb277f443bb4" data-action="Deal Block" data-label="Cohesion 14 Shoes (Women's)" data-dimension48="Cohesion 14 Shoes (Women's)" data-dimension25="$50">View Deal</a></p></div><div class="product"><a data-dimension112="c2df624c-d2c0-11f1-b2ec-11e535a9e1c3" data-action="Deal Block" data-label="Tide 2 Trainer (Men's)" data-dimension48="Tide 2 Trainer (Men's)" data-dimension25="$56" href="https://www.amazon.com/dp/B0D31XXWHZ?" 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="gPCzUDufYEii6Von4ywQm" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gPCzUDufYEii6Von4ywQm-1920-80.png" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0D31XXWHZ?" target="_blank" rel="nofollow" data-dimension112="c2df624c-d2c0-11f1-b2ec-11e535a9e1c3" data-action="Deal Block" data-label="Tide 2 Trainer (Men's)" data-dimension48="Tide 2 Trainer (Men's)" data-dimension25="$56">Tide 2 Trainer (Men's): was $100 now $56</a></strong><br>The Tide 2 is all about comfort for your everyday. It has soft, springy foam to make every step feel cushioned, a flexible plate to give you a little bounce and move with ease, <em>and</em> a breathable mesh upper to keep your feet cool. Basically, it’s perfect for walking, running errands, or just being on your feet all day without feeling sore.<a class="view-deal button" href="https://www.amazon.com/dp/B0D31XXWHZ?" target="_blank" rel="nofollow" data-dimension112="c2df624c-d2c0-11f1-b2ec-11e535a9e1c3" data-action="Deal Block" data-label="Tide 2 Trainer (Men's)" data-dimension48="Tide 2 Trainer (Men's)" data-dimension25="$56">View Deal</a></p></div><div class="product star-deal"><a data-dimension112="c2df62b0-d2c0-11f1-b672-abfae88a3776" data-action="Star Deal Block" data-label="Hurricane 24 (Men's)" data-dimension48="Hurricane 24 (Men's)" data-dimension25="$70" href="https://www.amazon.com/Saucony-Hurricane-Sneaker-Black-Shadow/dp/B0D31XQL4H" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1498px;"><p class="vanilla-image-block" style="padding-top:46.40%;"><img id="vxf7UD5T2Am7guVzFoFcZ4" name="Saucony Hurricane 24 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1498" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Saucony-Hurricane-Sneaker-Black-Shadow/dp/B0D31XQL4H" target="_blank" rel="nofollow" data-dimension112="c2df62b0-d2c0-11f1-b672-abfae88a3776" data-action="Star Deal Block" data-label="Hurricane 24 (Men's)" data-dimension48="Hurricane 24 (Men's)" data-dimension25="$70">Hurricane 24 (Men's): was $80 now $70</a></strong><br>Running with the <a href="https://www.tomsguide.com/wellness/running/saucony-hurricane-24-review">Saucony Hurricane 24 </a>is like running on clouds. They use PWRRUN+ foam, which cushions your feet while still feeling springy. With a wide base and rocker design, it offers a stable and comfortable ride for longer or easy runs. The breathable mesh upper fits securely without being tight. The Hurricane 25 have replaced these shoes, but the 24 are the real bargain. <a class="view-deal button" href="https://www.amazon.com/Saucony-Hurricane-Sneaker-Black-Shadow/dp/B0D31XQL4H" target="_blank" rel="nofollow" data-dimension112="c2df62b0-d2c0-11f1-b672-abfae88a3776" data-action="Star Deal Block" data-label="Hurricane 24 (Men's)" data-dimension48="Hurricane 24 (Men's)" data-dimension25="$70">View Deal</a></p></div><div class="product"><a data-dimension112="c2df630a-d2c0-11f1-a069-8de46a5c3eea" data-action="Deal Block" data-label="Ride 18 (Men's)" data-dimension48="Ride 18 (Men's)" data-dimension25="$79" href="https://www.amazon.com/Saucony-Mens-Sneaker-BLACK-WHITE/dp/B0D31WZWT8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1542px;"><p class="vanilla-image-block" style="padding-top:45.07%;"><img id="NmXRUrbSqDWhK8xTzQF7bf" name="Ride 18 (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NmXRUrbSqDWhK8xTzQF7bf-1920-80.jpg" mos="" align="middle" fullscreen="" width="1542" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Saucony-Mens-Sneaker-BLACK-WHITE/dp/B0D31WZWT8" target="_blank" rel="nofollow" data-dimension112="c2df630a-d2c0-11f1-a069-8de46a5c3eea" data-action="Deal Block" data-label="Ride 18 (Men's)" data-dimension48="Ride 18 (Men's)" data-dimension25="$79">Ride 18 (Men's): was $145 now $79</a></strong><br>Comfort and support matter, and the <a href="https://www.tomsguide.com/wellness/fitness/i-ran-45-miles-in-the-saucony-ride-18-heres-my-verdict">Saucony Ride 18</a> delivers both. The soft, bouncy PWRRUN Plus foam feels light underfoot, helping to take the pressure off your joints as you build confidence. The stretchy mesh upper moves with your foot while the padded heel reduces rubbing that can cut runs short. Whether you’re lacing up for your first 5K or logging serious mileage, this shoe is a reliable all-rounder.<a class="view-deal button" href="https://www.amazon.com/Saucony-Mens-Sneaker-BLACK-WHITE/dp/B0D31WZWT8" target="_blank" rel="nofollow" data-dimension112="c2df630a-d2c0-11f1-a069-8de46a5c3eea" data-action="Deal Block" data-label="Ride 18 (Men's)" data-dimension48="Ride 18 (Men's)" data-dimension25="$79">View Deal</a></p></div><div class="product"><a data-dimension112="c2df636e-d2c0-11f1-a01a-f354a1da8b48" data-action="Deal Block" data-label="Triumph 23" data-dimension48="Triumph 23" data-dimension25="$89" href="https://www.amazon.com/Saucony-Triumph-Sneaker-Black-White/dp/B0DJWN776G" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="99qpJaU9RKTQSkGAmdZPrJ" name="saucony-mens-triumph-23-sneaker-whiteazu-4c83ebb7-41ff-452b-aa7e-9fe244156c64.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/99qpJaU9RKTQSkGAmdZPrJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Saucony Triumph 23 has a couple of key features to recommend it. One is that it's very comfortable and protective, and the other is its durability. That said, it's now discounted by 48%. It's also a lot cheaper than the <a href="https://www.tomsguide.com/wellness/running/i-ran-40-miles-in-the-saucony-triumph-24-and-its-a-return-to-form-for-the-popular-cushioned-running-shoe" data-dimension112="c2df636e-d2c0-11f1-a01a-f354a1da8b48" data-action="Deal Block" data-label="Triumph 23" data-dimension48="Triumph 23" data-dimension25="$89">Triumph 24</a>.<a class="view-deal button" href="https://www.amazon.com/Saucony-Triumph-Sneaker-Black-White/dp/B0DJWN776G" target="_blank" rel="nofollow" data-dimension112="c2df636e-d2c0-11f1-a01a-f354a1da8b48" data-action="Deal Block" data-label="Triumph 23" data-dimension48="Triumph 23" data-dimension25="$89">View Deal</a></p></div><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop More Deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Sneakers%2C+running+shoes%2C+sandals&brands=Hoka%2CSkechers%2CAsics&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=light_blue" 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-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      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-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      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-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .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">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \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.parentElement.querySelector('.tg-df-carousel-roundels').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-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \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>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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>    \x3C/div>    \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">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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>        \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';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    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')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        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';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        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.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    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 cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             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');                    url.searchParams.append('rows', this.getRowsLimit().toString());          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 = this.getRowsLimit();          // 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, idx) => {              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}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${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);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } 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 = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \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;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    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.getRowsLimit();                 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[ Can rucking replace running for cardio? A strength coach and running expert weigh in ]]></title>
                                                                                                <dc:content><![CDATA[ <p>You've probably noticed there's a lot of debate about whether you need to run to improve cardio, or whether other activities like walking or hiking could replace it.</p><p>I'm a personal trainer who walks and runs for different reasons: I walk to ease stress, exercise (myself and my dog) and contribute toward my overall activity levels (known as <a href="https://www.tomsguide.com/features/non-exercise-activity-thermogenesis-why-neat-could-help-you-burn-more-calories">NEAT</a>), while I run to strengthen my heart and lungs and feel good.</p><p>But with the rise in rucking popularity, which involves walking with a weighted vest, I wanted to speak with those in the know to see if it could replace running for cardio. Below, a strength coach and running expert weigh in. </p><p>So, which is the cardio-building prize? Here's your final answer. </p><h3 class="article-body__section" id="section-benefits-of-rucking"><span>Benefits of rucking </span></h3><p>"<a href="https://www.tomsguide.com/wellness/fitness/forget-10-000-steps-i-tried-rucking-instead-of-regular-walking-for-one-week-and-its-a-game-changer">Rucking</a> offers several benefits, including improved cardiovascular fitness and muscular endurance, and increased functional capacity," says <a href="https://www.instagram.com/rebeccakennedynyc/" target="_blank" rel="nofollow">Rebecca Kennedy</a>, a strength coach and Peloton instructor. "It supports postural strength and endurance and provides a low-impact form of conditioning with adjustable intensity. Finally, it’s accessible and enjoyable."</p><p>"Rucking is certainly lower impact, with less ground-reaction forces, although foot injuries have been reported anecdotally," says running expert and coach <a href="https://www.instagram.com/performance_physique/" target="_blank" rel="nofollow">Arj</a><a href="https://www.instagram.com/performance_physique/" target="_blank">Thiruchelvam.</a> "There are certainly benefits to strength and posture and, in a calorie-controlled diet, this would help support fat loss.</p><p>"Running naturally poses a high injury rate amongst beginners and those with very high volumes or who are deconditioned," he adds. </p><h3 class="article-body__section" id="section-benefits-of-running"><span>Benefits of running </span></h3><p>"Running has been shown in a meta-analysis (Pedisic et al., 2020) to lead to substantial health and longevity benefits in addition to lower risk of all-cause mortality, starting with just one dose per week. It’s incredibly efficient at improving <a href="https://www.tomsguide.com/wellness/fitness/how-to-measure-your-vo2-max">VO2 Max</a> and also supporting bone health," Thiruchelvam tells us.</p><p>"Running is beneficial for your mental and metabolic health, muscular endurance, cardiovascular fitness, bone health, as well as joint and connective tissue capacity," adds Kennedy. "It’s also time-efficient and supports running-specific performance."</p><h3 class="article-body__section" id="section-can-rucking-replace-running-for-cardio"><span>Can rucking replace running for cardio?</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="HpYX5fj4EVBPLEFmZk253j" name="shutterstock_1432512671 (1) weighted walk" alt="Male running along a beach wearing a weighted vest" src="https://cdn.mos.cms.futurecdn.net/HpYX5fj4EVBPLEFmZk253j-1920-80.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: Shutterstock)</span></figcaption></figure><p>"It can, but<strong> it depends on your goal and what you're trying to achieve,</strong>" explains Kennedy. "First, I think it’s important to recognize that running is not a requirement for good cardiovascular health or overall fitness. Rather than asking a binary question (whether rucking can replace running), I'd encourage people to ask what they're hoping to accomplish through exercise. </p><p>"<strong>Both running and rucking can improve cardiovascular health, aerobic endurance, metabolic health and muscular conditioning</strong>, but they challenge the body differently. Running generally allows you to reach higher cardiovascular intensities and provides repetitive high impact, which can be super helpful in developing bone strength, joint and tendon capacity, and the ability to absorb and produce force. </p><p>"Rucking increases physical demands of walking by adding an external resistance. Rucking challenges our cardiovascular system, muscular endurance and postural muscles and ability to carry load without the repetitive high impact that running does."</p><p>On that note, Kennedy explains you don't get identical adaptations, and "<strong>one is not inherently better than the other</strong>." If you don't enjoy running, you can still do plyometrics, HIIT, jumping rope, or other sports like boxing or dancing to achieve the same types of fitness without running.</p><p>"We simply want to train our bodies to be capable, adaptable and resilient across a variety of physical demands. That being said, I think it's important to acknowledge both preferences, enjoyability, barrier to entry and current fitness level as guides," she adds.</p><div><blockquote><p>Both running and rucking can improve cardiovascular health, aerobic endurance, metabolic health and muscular conditioning, but they challenge the body differently. </p><p>Rebecca Kennedy, strength coach</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:2121px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x6mfiVj98Bk9RZNUnhVqJV" name="running cap.jpg" alt="woman running with a cap on" src="https://cdn.mos.cms.futurecdn.net/x6mfiVj98Bk9RZNUnhVqJV-1920-80.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/jacoblund)</span></figcaption></figure><p>"Rucking can help people develop or maintain an aerobic base; that’s the lower-intensity, zone 1- zone 2 exercise," adds Thiruchelvam. "However, it certainly doesn’t help develop the higher intensity zones and associated muscular benefits that exist as a result of that faster-paced effort.</p><p>"The speed at which you perform the activity has a greater impact on physiological changes, and therefore, although rucking can elevate your heart rate, it cannot replicate the effect of running. In particular, heart rate can continue rising while oxygen levels off."</p><h3 class="article-body__section" id="section-contraindications"><span>Contraindications</span></h3><p>Thiruchelvam tells us that "<strong>running naturally poses a high injury rate amongst beginners</strong> and those with very high volumes or who are deconditioned... It’s also plausible to consider that the weight of the backpack may alter walking gait and mechanics."</p><p>He adds, "The <strong>contraindications to rucking revolve around current health and injuries of the spine, lower limbs, heart health and blood pressure</strong>, as usual. In addition to that, osteoporosis, surgeries, hernias and impaired balance are all serious considerations that need advice from a doctor."</p><p>"Rucking places additional load on your spine and can cause postural fatigue if the load is carried too long or is too heavy too soon," adds Kennedy. "It also may not be suitable for those seeking higher-impact or higher-intensity workouts. Finally, it’s not a replacement for strength training.</p><p>"<strong>My preference is to use a weighted vest over a backpack</strong> because the weight is distributed more evenly and it sits closer to your body, reducing any potential neck strain. If you don't have a vest and want to start, a backpack can work. Just make sure it’s snug, and the straps are pulled down so it isn't sagging in the back and the weight is distributed more evenly."</p><p>Kennedy adds, "<strong>While running has many benefits, it’s not the best for those who don’t enjoy it.</strong> Other things to consider are the repetitive impact and overuse; the higher recovery demands and barrier to entry; adaptation to running can take time; and finally individual limitations...if you have injuries, osteopenia, osteoporosis, or sarcopenia."</p><div><blockquote><p>Rucking places additional load on your spine and can cause postural fatigue if the load is carried too long or is too heavy too soon. It also may not be suitable for those seeking higher-impact or higher-intensity workouts.</p><p>Rebecca Kennedy.</p></blockquote></div><h3 class="article-body__section" id="section-how-to-choose-between-them"><span>How to choose between them</span></h3><p>"You may wish to incorporate rucking into your routine on easy days for more aerobic development or if you’re overweight or deconditioned and find running not yet realistic," recommends Thiruchelvam. "Running should be the priority if you want to run fast, for VO2 Max improvement, or if you have an upcoming race."</p><div><blockquote><p>You may wish to incorporate rucking into your routine on easy days for more aerobic development or if you’re overweight or deconditioned and find running not yet realistic.</p><p>Arj Thiruchelvam, running coach</p></blockquote></div><p>Kennedy suggests considering rucking if you don't enjoy running, want to reduce impact, and want to build postural strength and muscular endurance. You might also include rucking if you want to improve cardiovascular health and increase your load-carrying capabilities. Plus, it's an accessible way to increase the demands of your regular walks.</p><p>"Ultimately, both are valuable tools," she explains. "Personally, I enjoy the way I feel before, during and after a weighted vest walk. I love walking and think the weighted vest is a wonderful addition to my walks. </p><p>"You can be exceptionally fit without running. But being fit in one capacity doesn't automatically mean you're prepared for every physical demand. The goal should be to have a routine that trains you to be strong, capable, adaptable and resilient. Rucking and/or running should not be the only type of workout we do."</p><h3 class="article-body__section" id="section-verdict"><span>Verdict</span></h3><p>So, there you have it. You could replace your runs with rucks, and there are plenty of benefits, plus some drawbacks, for both. However, the demands aren't the same, and the outcomes aren't identical, which means you might need to add more variety into your routine to achieve various fitness goals. </p><p>Just remember that your body and any health conditions or injuries matter, so consider the benefits and downsides of both before deciding which benefit you most.</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><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="vGnNDN" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.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/face-off/high-reps-vs-heavy-weights-which-is-better-for-building-muscle">High reps vs heavy weights</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/forget-running-or-jeffing-neuroscientist-andrew-huberman-says-this-is-the-secret-to-longevity-and-hitting-150-minutes-of-cardio-per-week">Forget running or 'Jeffing' — neuroscientist says this is the secret to longevity and hitting 150 minutes of cardio per week</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/forget-running-and-swimming-study-finds-this-sport-adds-10-years-to-your-life">Forget running and swimming — study finds this sport adds 10 years to your life</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/can-rucking-replace-running-for-cardio-a-strength-coach-and-running-expert-weigh-in</link>
                                                                            <description>
                            <![CDATA[ I asked a strength coach and running expert whether rucking can replace cardio — here’s the truth. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NmEzcUDpPC99HaEVdASKwm</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/GkxyW8YTSvfDTWFXfWsuwW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 28 Oct 2026 09:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></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-320-70.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;Live Science&lt;/a&gt;,&lt;a href=&quot;https://www.fitandwell.com/author/sam-hopes&quot;&gt; Fit&amp;amp;Well&lt;/a&gt;,&lt;a href=&quot;https://www.coachweb.com/author/sam-hopes&quot;&gt; Coach&lt;/a&gt;, and T3. &lt;/p&gt;&lt;p&gt;Having worked with fitness studios like F45 and Virgin Active and trained both group and 1:1, Sam now primarily teaches outdoor bootcamps, bodyweight, 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, Pilates 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, mindfulness, 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/GkxyW8YTSvfDTWFXfWsuwW-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock and Getty]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Woman rucking on left, woman running outdoors on right]]></media:description>                                                            <media:text><![CDATA[Woman rucking on left, woman running outdoors on right]]></media:text>
                                <media:title type="plain"><![CDATA[Woman rucking on left, woman running outdoors on right]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/GkxyW8YTSvfDTWFXfWsuwW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>You've probably noticed there's a lot of debate about whether you need to run to improve cardio, or whether other activities like walking or hiking could replace it.</p><p>I'm a personal trainer who walks and runs for different reasons: I walk to ease stress, exercise (myself and my dog) and contribute toward my overall activity levels (known as <a href="https://www.tomsguide.com/features/non-exercise-activity-thermogenesis-why-neat-could-help-you-burn-more-calories">NEAT</a>), while I run to strengthen my heart and lungs and feel good.</p><p>But with the rise in rucking popularity, which involves walking with a weighted vest, I wanted to speak with those in the know to see if it could replace running for cardio. Below, a strength coach and running expert weigh in. </p><p>So, which is the cardio-building prize? Here's your final answer. </p><h3 class="article-body__section" id="section-benefits-of-rucking"><span>Benefits of rucking </span></h3><p>"<a href="https://www.tomsguide.com/wellness/fitness/forget-10-000-steps-i-tried-rucking-instead-of-regular-walking-for-one-week-and-its-a-game-changer">Rucking</a> offers several benefits, including improved cardiovascular fitness and muscular endurance, and increased functional capacity," says <a href="https://www.instagram.com/rebeccakennedynyc/" target="_blank" rel="nofollow">Rebecca Kennedy</a>, a strength coach and Peloton instructor. "It supports postural strength and endurance and provides a low-impact form of conditioning with adjustable intensity. Finally, it’s accessible and enjoyable."</p><p>"Rucking is certainly lower impact, with less ground-reaction forces, although foot injuries have been reported anecdotally," says running expert and coach <a href="https://www.instagram.com/performance_physique/" target="_blank" rel="nofollow">Arj</a><a href="https://www.instagram.com/performance_physique/" target="_blank">Thiruchelvam.</a> "There are certainly benefits to strength and posture and, in a calorie-controlled diet, this would help support fat loss.</p><p>"Running naturally poses a high injury rate amongst beginners and those with very high volumes or who are deconditioned," he adds. </p><h3 class="article-body__section" id="section-benefits-of-running"><span>Benefits of running </span></h3><p>"Running has been shown in a meta-analysis (Pedisic et al., 2020) to lead to substantial health and longevity benefits in addition to lower risk of all-cause mortality, starting with just one dose per week. It’s incredibly efficient at improving <a href="https://www.tomsguide.com/wellness/fitness/how-to-measure-your-vo2-max">VO2 Max</a> and also supporting bone health," Thiruchelvam tells us.</p><p>"Running is beneficial for your mental and metabolic health, muscular endurance, cardiovascular fitness, bone health, as well as joint and connective tissue capacity," adds Kennedy. "It’s also time-efficient and supports running-specific performance."</p><h3 class="article-body__section" id="section-can-rucking-replace-running-for-cardio"><span>Can rucking replace running for cardio?</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="HpYX5fj4EVBPLEFmZk253j" name="shutterstock_1432512671 (1) weighted walk" alt="Male running along a beach wearing a weighted vest" src="https://cdn.mos.cms.futurecdn.net/HpYX5fj4EVBPLEFmZk253j-1920-80.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: Shutterstock)</span></figcaption></figure><p>"It can, but<strong> it depends on your goal and what you're trying to achieve,</strong>" explains Kennedy. "First, I think it’s important to recognize that running is not a requirement for good cardiovascular health or overall fitness. Rather than asking a binary question (whether rucking can replace running), I'd encourage people to ask what they're hoping to accomplish through exercise. </p><p>"<strong>Both running and rucking can improve cardiovascular health, aerobic endurance, metabolic health and muscular conditioning</strong>, but they challenge the body differently. Running generally allows you to reach higher cardiovascular intensities and provides repetitive high impact, which can be super helpful in developing bone strength, joint and tendon capacity, and the ability to absorb and produce force. </p><p>"Rucking increases physical demands of walking by adding an external resistance. Rucking challenges our cardiovascular system, muscular endurance and postural muscles and ability to carry load without the repetitive high impact that running does."</p><p>On that note, Kennedy explains you don't get identical adaptations, and "<strong>one is not inherently better than the other</strong>." If you don't enjoy running, you can still do plyometrics, HIIT, jumping rope, or other sports like boxing or dancing to achieve the same types of fitness without running.</p><p>"We simply want to train our bodies to be capable, adaptable and resilient across a variety of physical demands. That being said, I think it's important to acknowledge both preferences, enjoyability, barrier to entry and current fitness level as guides," she adds.</p><div><blockquote><p>Both running and rucking can improve cardiovascular health, aerobic endurance, metabolic health and muscular conditioning, but they challenge the body differently. </p><p>Rebecca Kennedy, strength coach</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:2121px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x6mfiVj98Bk9RZNUnhVqJV" name="running cap.jpg" alt="woman running with a cap on" src="https://cdn.mos.cms.futurecdn.net/x6mfiVj98Bk9RZNUnhVqJV-1920-80.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/jacoblund)</span></figcaption></figure><p>"Rucking can help people develop or maintain an aerobic base; that’s the lower-intensity, zone 1- zone 2 exercise," adds Thiruchelvam. "However, it certainly doesn’t help develop the higher intensity zones and associated muscular benefits that exist as a result of that faster-paced effort.</p><p>"The speed at which you perform the activity has a greater impact on physiological changes, and therefore, although rucking can elevate your heart rate, it cannot replicate the effect of running. In particular, heart rate can continue rising while oxygen levels off."</p><h3 class="article-body__section" id="section-contraindications"><span>Contraindications</span></h3><p>Thiruchelvam tells us that "<strong>running naturally poses a high injury rate amongst beginners</strong> and those with very high volumes or who are deconditioned... It’s also plausible to consider that the weight of the backpack may alter walking gait and mechanics."</p><p>He adds, "The <strong>contraindications to rucking revolve around current health and injuries of the spine, lower limbs, heart health and blood pressure</strong>, as usual. In addition to that, osteoporosis, surgeries, hernias and impaired balance are all serious considerations that need advice from a doctor."</p><p>"Rucking places additional load on your spine and can cause postural fatigue if the load is carried too long or is too heavy too soon," adds Kennedy. "It also may not be suitable for those seeking higher-impact or higher-intensity workouts. Finally, it’s not a replacement for strength training.</p><p>"<strong>My preference is to use a weighted vest over a backpack</strong> because the weight is distributed more evenly and it sits closer to your body, reducing any potential neck strain. If you don't have a vest and want to start, a backpack can work. Just make sure it’s snug, and the straps are pulled down so it isn't sagging in the back and the weight is distributed more evenly."</p><p>Kennedy adds, "<strong>While running has many benefits, it’s not the best for those who don’t enjoy it.</strong> Other things to consider are the repetitive impact and overuse; the higher recovery demands and barrier to entry; adaptation to running can take time; and finally individual limitations...if you have injuries, osteopenia, osteoporosis, or sarcopenia."</p><div><blockquote><p>Rucking places additional load on your spine and can cause postural fatigue if the load is carried too long or is too heavy too soon. It also may not be suitable for those seeking higher-impact or higher-intensity workouts.</p><p>Rebecca Kennedy.</p></blockquote></div><h3 class="article-body__section" id="section-how-to-choose-between-them"><span>How to choose between them</span></h3><p>"You may wish to incorporate rucking into your routine on easy days for more aerobic development or if you’re overweight or deconditioned and find running not yet realistic," recommends Thiruchelvam. "Running should be the priority if you want to run fast, for VO2 Max improvement, or if you have an upcoming race."</p><div><blockquote><p>You may wish to incorporate rucking into your routine on easy days for more aerobic development or if you’re overweight or deconditioned and find running not yet realistic.</p><p>Arj Thiruchelvam, running coach</p></blockquote></div><p>Kennedy suggests considering rucking if you don't enjoy running, want to reduce impact, and want to build postural strength and muscular endurance. You might also include rucking if you want to improve cardiovascular health and increase your load-carrying capabilities. Plus, it's an accessible way to increase the demands of your regular walks.</p><p>"Ultimately, both are valuable tools," she explains. "Personally, I enjoy the way I feel before, during and after a weighted vest walk. I love walking and think the weighted vest is a wonderful addition to my walks. </p><p>"You can be exceptionally fit without running. But being fit in one capacity doesn't automatically mean you're prepared for every physical demand. The goal should be to have a routine that trains you to be strong, capable, adaptable and resilient. Rucking and/or running should not be the only type of workout we do."</p><h3 class="article-body__section" id="section-verdict"><span>Verdict</span></h3><p>So, there you have it. You could replace your runs with rucks, and there are plenty of benefits, plus some drawbacks, for both. However, the demands aren't the same, and the outcomes aren't identical, which means you might need to add more variety into your routine to achieve various fitness goals. </p><p>Just remember that your body and any health conditions or injuries matter, so consider the benefits and downsides of both before deciding which benefit you most.</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><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="vGnNDN" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.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/face-off/high-reps-vs-heavy-weights-which-is-better-for-building-muscle">High reps vs heavy weights</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/forget-running-or-jeffing-neuroscientist-andrew-huberman-says-this-is-the-secret-to-longevity-and-hitting-150-minutes-of-cardio-per-week">Forget running or 'Jeffing' — neuroscientist says this is the secret to longevity and hitting 150 minutes of cardio per week</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/forget-running-and-swimming-study-finds-this-sport-adds-10-years-to-your-life">Forget running and swimming — study finds this sport adds 10 years to your life</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I wore the Apple Watch Ultra 4 and the Garmin Fenix 9 Pro for a marathon, and this watch won by miles ]]></title>
                                                                                                <dc:content><![CDATA[ <p>This weekend I ran my 7th marathon in Frankfurt, Germany, and, while worrying about the pouring rain and strong gusts of wind, I made things even more interesting by putting the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-review">Apple Watch Ultra 4</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-9-pro-review-a-titanium-titan-for-your-biggest-adventures">Garmin Fenix 9 Pro </a>head-to-head. </p><p>The Apple Watch Ultra 4 is Apple’s newest rugged sports watch, with a new heart rate monitor and a readiness score, helping you work out when to push yourself and when to recover. The Fenix 9 Pro, on the other hand, is Garmin’s most advanced sports watch yet. Both came out this year, and both offer all the sports modes and stats you need to track workouts, plus comprehensive daily activity and sleep tracking.</p><p>We’ve put all the features head-to-head in our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-vs-garmin-fenix-9-pro-price-specs-and-features-compared"><u>Apple Watch Ultra 4 vs Garmin Fenix 9 Pro face-off</u></a> here, but read on to see which came out on top on race day.</p>        <div class="featured_product_block featured_block_versus" data-id="3e4ad7de-d20a-11f1-ace5-a92b26c4c5f2">            <a href="https://www.amazon.com/Apple-Cellular-Smartwatch-Titanium-Translucent/dp/B0HJB6C34Y" data-model-name="Apple Watch Ultra 4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:116.82%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/3QNyVwJjTkPvUobMUxkZE.jpg" alt="Apple Watch Ultra 4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Apple</div>                    <div class="featured__title">Watch Ultra 4</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>The Apple Watch Ultra 4 is Apple's latest rugged adventure watch, with a new heart rate sensor and a daily Readiness score. </p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="45f182f0-d2ee-11f1-a829-7105705f202b">            <a href="https://www.amazon.com/Garmin-inReach%C2%AE-Multisport-Smartwatch-Connectivity/dp/B0HGFXSZHB/ref=sr_1_1_sspa" data-model-name="Garmin Fenix 9 Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:93.57%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/uMbDHd9zWgiLGEMMyeUJjM.png" alt="Garmin Fenix 9 Pro 43mm"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Garmin</div>                    <div class="featured__title">Fenix 9 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>There are a lot of models to pick from the Garmin Fenix 9 line-up, but the 43mm Fenix 9 Pro with inReach is the one I've tested and offers unbelievable battery life, along with an all-titanium case and LTE and satellite connectivity.</p></p>                </div>                            </div>        </div><h2 id="i-wore-the-apple-watch-ultra-4-and-the-garmin-fenix-9-pro-for-a-marathon-here-s-what-happened">I wore the Apple Watch Ultra 4 and the Garmin Fenix 9 Pro for a marathon: Here’s what happened </h2><p>Like most European marathons, the Frankfurt Marathon had a marker every kilometer, so for this test, I switched both watches from miles to kilometers. I manually lapped each watch every 5km, so I could be sure I was on pace, and when I finished running, I downloaded the data to see which watch was more accurate. </p><p>The GPS is notoriously unreliable in Frankfurt itself, especially around the business district, as, like most built-up cities, you’ve got buildings and skyscrapers to navigate. Chuck in crowds of people and 18,000 other runners, and things are never going to be 100% accurate, but I found immediately that the Garmin Fenix 9 Pro was far better at not letting these GPS dead zones give me inaccurate pace data. </p><p>You’ll never run 26.2 miles, or 42.19 kilometers on race day unless you’re perfectly sticking to the blue line, which it’s near impossible to do as you weave around other runners. My Garmin Fenix 9 Pro recorded the run as 42.76km, or 26.5 miles. The Apple Watch Ultra 4, on the other hand, recorded the run as 43.33km, or 26.9 miles. I found the Apple Watch Ultra 4 was about half a kilometer ahead of my Garmin throughout the race. </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="Yy9UD7RYyjjGqyys8WwBHn" name="IMG_1207" alt="Apple Watch Ultra 4 and Garmin Fenix 9 Pro" src="https://cdn.mos.cms.futurecdn.net/Yy9UD7RYyjjGqyys8WwBHn-1920-80.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>When it comes to my pacing, my bib, which recorded my pace at every kilometer marker, recorded my average pace as 4:52 min/km. The Garmin Fenix 9 Pro recorded an average pace of 4:48 km, and the Apple Watch Ultra 4 recorded 4:44 km. Of course, this accounts for the fact that the Apple Watch Ultra 4 recorded the longest run. </p><p>The main difference between the Apple Watch Ultra 3 and Apple Watch Ultra 4 is that the newer watch has Apple’s latest continuous heart rate monitor, which Apple says is the most accurate of any wearable device. During the run, the Apple Watch Ultra 4 recorded my average heart rate as 172 beats per minute, which is exactly the same as the Garmin Fenix 9 Pro. While I didn’t wear a chest strap, as there’s only so much tech a girl can wear on race day, I did have my Oura Ring 5 on my finger, which recorded my average heart rate as 179 beats per minute. </p><p>While both watches are more than capable of recording all of your training runs, as well as your recovery, on race day itself, the Garmin Fenix 9 Pro came out on top in terms of GPS accuracy. I also found it easier to use in the pouring rain, thanks to the extra buttons. Of course, this isn’t to say that the Apple Watch Ultra 4 is inaccurate, but on this particular wet Sunday morning, Garmin was the winner. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2xlX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2xlX.js" async></script><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-first-impressions-5-reasons-to-buy-and-2-reasons-to-skip-apples-new-rugged-model">Apple Watch Ultra 4 first impressions: 5 reasons to buy and 2 reasons to skip Apple’s new rugged model</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-vs-garmin-fenix-9-pro-price-specs-and-features-compared">Apple Watch Ultra 4 vs Garmin Fenix 9 Pro: price, specs and features compared</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/heres-my-favorite-watchos-27-upgrade-and-its-one-nobody-is-really-talking-about">Here’s my favorite watchOS 27 upgrade — and it’s one nobody is really talking about</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/i-wore-the-apple-watch-ultra-4-and-the-garmin-fenix-9-pro-for-a-marathon-and-one-watch-won-by-miles</link>
                                                                            <description>
                            <![CDATA[ Our Fitness Editor put the Apple Watch Ultra 4 and Garmin Fenix 9 Pro to the test ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nzQqAUAKUNRdUd8KQGxp6D</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/m59Bv6tL6SZTCXa5dPivhf-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 28 Oct 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Wed, 28 Oct 2026 17:29:33 +0000</updated>
                                                                                                                                            <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Wellness]]></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-320-70.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/m59Bv6tL6SZTCXa5dPivhf-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Watch Ultra 4 and Garmin Fenix 9 Pro/Jane McGuire]]></media:description>                                                            <media:text><![CDATA[Apple Watch Ultra 4 and Garmin Fenix 9 Pro/Jane McGuire]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Watch Ultra 4 and Garmin Fenix 9 Pro/Jane McGuire]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/m59Bv6tL6SZTCXa5dPivhf-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This weekend I ran my 7th marathon in Frankfurt, Germany, and, while worrying about the pouring rain and strong gusts of wind, I made things even more interesting by putting the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-review">Apple Watch Ultra 4</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-9-pro-review-a-titanium-titan-for-your-biggest-adventures">Garmin Fenix 9 Pro </a>head-to-head. </p><p>The Apple Watch Ultra 4 is Apple’s newest rugged sports watch, with a new heart rate monitor and a readiness score, helping you work out when to push yourself and when to recover. The Fenix 9 Pro, on the other hand, is Garmin’s most advanced sports watch yet. Both came out this year, and both offer all the sports modes and stats you need to track workouts, plus comprehensive daily activity and sleep tracking.</p><p>We’ve put all the features head-to-head in our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-vs-garmin-fenix-9-pro-price-specs-and-features-compared"><u>Apple Watch Ultra 4 vs Garmin Fenix 9 Pro face-off</u></a> here, but read on to see which came out on top on race day.</p>        <div class="featured_product_block featured_block_versus" data-id="3e4ad7de-d20a-11f1-ace5-a92b26c4c5f2">            <a href="https://www.amazon.com/Apple-Cellular-Smartwatch-Titanium-Translucent/dp/B0HJB6C34Y" data-model-name="Apple Watch Ultra 4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:116.82%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/3QNyVwJjTkPvUobMUxkZE.jpg" alt="Apple Watch Ultra 4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Apple</div>                    <div class="featured__title">Watch Ultra 4</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>The Apple Watch Ultra 4 is Apple's latest rugged adventure watch, with a new heart rate sensor and a daily Readiness score. </p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="45f182f0-d2ee-11f1-a829-7105705f202b">            <a href="https://www.amazon.com/Garmin-inReach%C2%AE-Multisport-Smartwatch-Connectivity/dp/B0HGFXSZHB/ref=sr_1_1_sspa" data-model-name="Garmin Fenix 9 Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:93.57%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/uMbDHd9zWgiLGEMMyeUJjM.png" alt="Garmin Fenix 9 Pro 43mm"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Garmin</div>                    <div class="featured__title">Fenix 9 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>There are a lot of models to pick from the Garmin Fenix 9 line-up, but the 43mm Fenix 9 Pro with inReach is the one I've tested and offers unbelievable battery life, along with an all-titanium case and LTE and satellite connectivity.</p></p>                </div>                            </div>        </div><h2 id="i-wore-the-apple-watch-ultra-4-and-the-garmin-fenix-9-pro-for-a-marathon-here-s-what-happened">I wore the Apple Watch Ultra 4 and the Garmin Fenix 9 Pro for a marathon: Here’s what happened </h2><p>Like most European marathons, the Frankfurt Marathon had a marker every kilometer, so for this test, I switched both watches from miles to kilometers. I manually lapped each watch every 5km, so I could be sure I was on pace, and when I finished running, I downloaded the data to see which watch was more accurate. </p><p>The GPS is notoriously unreliable in Frankfurt itself, especially around the business district, as, like most built-up cities, you’ve got buildings and skyscrapers to navigate. Chuck in crowds of people and 18,000 other runners, and things are never going to be 100% accurate, but I found immediately that the Garmin Fenix 9 Pro was far better at not letting these GPS dead zones give me inaccurate pace data. </p><p>You’ll never run 26.2 miles, or 42.19 kilometers on race day unless you’re perfectly sticking to the blue line, which it’s near impossible to do as you weave around other runners. My Garmin Fenix 9 Pro recorded the run as 42.76km, or 26.5 miles. The Apple Watch Ultra 4, on the other hand, recorded the run as 43.33km, or 26.9 miles. I found the Apple Watch Ultra 4 was about half a kilometer ahead of my Garmin throughout the race. </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="Yy9UD7RYyjjGqyys8WwBHn" name="IMG_1207" alt="Apple Watch Ultra 4 and Garmin Fenix 9 Pro" src="https://cdn.mos.cms.futurecdn.net/Yy9UD7RYyjjGqyys8WwBHn-1920-80.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>When it comes to my pacing, my bib, which recorded my pace at every kilometer marker, recorded my average pace as 4:52 min/km. The Garmin Fenix 9 Pro recorded an average pace of 4:48 km, and the Apple Watch Ultra 4 recorded 4:44 km. Of course, this accounts for the fact that the Apple Watch Ultra 4 recorded the longest run. </p><p>The main difference between the Apple Watch Ultra 3 and Apple Watch Ultra 4 is that the newer watch has Apple’s latest continuous heart rate monitor, which Apple says is the most accurate of any wearable device. During the run, the Apple Watch Ultra 4 recorded my average heart rate as 172 beats per minute, which is exactly the same as the Garmin Fenix 9 Pro. While I didn’t wear a chest strap, as there’s only so much tech a girl can wear on race day, I did have my Oura Ring 5 on my finger, which recorded my average heart rate as 179 beats per minute. </p><p>While both watches are more than capable of recording all of your training runs, as well as your recovery, on race day itself, the Garmin Fenix 9 Pro came out on top in terms of GPS accuracy. I also found it easier to use in the pouring rain, thanks to the extra buttons. Of course, this isn’t to say that the Apple Watch Ultra 4 is inaccurate, but on this particular wet Sunday morning, Garmin was the winner. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2xlX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2xlX.js" async></script><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-first-impressions-5-reasons-to-buy-and-2-reasons-to-skip-apples-new-rugged-model">Apple Watch Ultra 4 first impressions: 5 reasons to buy and 2 reasons to skip Apple’s new rugged model</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-vs-garmin-fenix-9-pro-price-specs-and-features-compared">Apple Watch Ultra 4 vs Garmin Fenix 9 Pro: price, specs and features compared</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/heres-my-favorite-watchos-27-upgrade-and-its-one-nobody-is-really-talking-about">Here’s my favorite watchOS 27 upgrade — and it’s one nobody is really talking about</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 reasons why I’m glad Google didn’t give the Fitbit Edge NFC ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I just reviewed the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people">Fitbit Edge</a>, Google's long-awaited follow-up to 2023's Fitbit Charge 6, and it's better than its predecessor in nearly every single way, making it one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026.</p><p>However, some folks seem particularly irked by Google's decision to nix the NFC antenna — found in the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-vs-fitbit-charge-6-which-google-fitness-tracker-wins">Charge 6</a> and used for contactless payments — from the Fitbit Edge. This is a criticism I don't agree with.</p><p>With that in mind, here are the three biggest reasons I'm genuinely glad Google didn't give the new Fitbit Edge NFC. </p><div class="product"><a data-dimension112="19667754-d24e-11f1-bf5a-c785ff483ea3" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179" href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" 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="DRT3ZxaNQFpy6ohGGDyquC" name="FitbitEdge" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DRT3ZxaNQFpy6ohGGDyquC-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="810" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Edge replaces the three-year-old Fitbit Charge 6, claiming the crown as one of the most well-rounded fitness tracking wearables on the market today, with just the right amount of features for most people. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" target="_blank" rel="nofollow" data-dimension112="19667754-d24e-11f1-bf5a-c785ff483ea3" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179">View Deal</a></p></div><h3 class="article-body__section" id="section-1-google-gave-the-edge-an-altimeter-instead"><span>1. Google gave the Edge an altimeter instead</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vf5UBBimGKRzcfEMhkGTpC" name="FitbitEdge-rev-09" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/vf5UBBimGKRzcfEMhkGTpC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The main reason I'm glad Google nixed the NFC antenna on the Fitbit Edge is that the tech giant replaced it with something far more useful: a barometric altimeter for tracking elevation during outdoor workouts.</p><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6 </a>lacks this piece of tech, and as a result, it doesn't provide climb data, even for activities like bike rides and hikes.</p><p>More importantly, the Fitbit Edge has already proven to be an extremely reliable fitness tracker for logging uphill efforts based on test results from my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people#section-fitbit-edge-fitness-tracking-4-5-5">Fitbit Edge review</a> and an even more recent head-to-head comparison <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-6-000-steps-with-the-fitbit-edge-vs-apple-watch-12-and-im-shocked-by-the-results">versus the Apple Watch 12</a> (which the Edge won). </p><h3 class="article-body__section" id="section-2-less-than-1-of-fitbit-charge-6-users-used-nfc"><span>2. Less than 1% of Fitbit Charge 6 users used NFC</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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3443" height="1936" 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>Another reason I don't miss NFC on the Fitbit Edge — as recently confirmed via an email from Google — is the fact that less than 1% of Fitbit Charge 6 owners <em>actually</em> use NFC for contactless payments. So, for the Fitbit Edge, the brand instead "prioritized other top features such as adding an altimeter and requested improvements," according to that same email.  </p><p>As noted in the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people#section-fitbit-edge-review-verdict">Fitbit Edge conclusion</a> of my review — written before receiving Google's note about Fitbit Charge 6 NFC usage — I suspected that most folks would rather have accurate elevation data for outdoor workouts than the ability to pay for their coffee from the wrist. And Google's note only confirms that hunch. </p><h3 class="article-body__section" id="section-3-the-lack-of-nfc-keeps-the-cost-of-the-edge-down"><span>3. The lack of NFC keeps the cost of the Edge down</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aojg8RkvnJKWrCRSRfR8nJ" name="FitbitEdge-rev-02" alt="Close-up of the Fitbit Edge on a user's wrist" src="https://cdn.mos.cms.futurecdn.net/aojg8RkvnJKWrCRSRfR8nJ-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Finally, why pay more for features you're unlikely to use? After all, the <a href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" target="_blank" rel="nofollow">$179 Fitbit Edge</a> costs roughly the same as its three-year-old $159 predecessor when you account for inflation. Not only might adding NFC potentially increase the device's launch price, but it could also result in a larger case size, two things that would definitely detract from the Edge's overall appeal.</p><p>What are your thoughts on the Fitbit Edge? Do you agree with me that Google was wise to swap the NFC antenna for an altimeter? And which Google wearable would you be most likely to rock in 2026 and beyond? Let me know in the poll below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2nMX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2nMX.js" async></script><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-6-000-steps-with-the-fitbit-edge-vs-apple-watch-12-and-im-shocked-by-the-results"><strong>I walked 6,000 steps with the Fitbit Edge vs Apple Watch 12 — and I'm shocked by the results</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/3-reasons-why-the-new-fitbit-edge-beats-the-fitbit-charge-6-and-1-reason-it-doesnt"><strong>3 reasons why the new Fitbit Edge beats the Fitbit Charge 6 — and 1 reason it doesn’t</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/google-fitbit-edge-vs-fitbit-air-which-should-you-choose"><strong>Google Fitbit Edge vs Fitbit Air: Which should you choose?</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/3-reasons-why-im-glad-google-didnt-give-the-fitbit-edge-nfc</link>
                                                                            <description>
                            <![CDATA[ The new Fitbit Edge fitness tracker lacks NFC for contactless payments, a feature found in its three-year-old predecessor. Here's why that's actually a good thing. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FhkRYXdeiGWyCCG5kUgfX6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Hzzx3SFfMkmhMJhnHgrwmC-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 28 Oct 2026 04:15:00 +0000</pubDate>                                                                                                                                <updated>Wed, 28 Oct 2026 04:22:27 +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-320-70.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/Hzzx3SFfMkmhMJhnHgrwmC-1920-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Google Fitbit Edge fitness tracker]]></media:description>                                                            <media:text><![CDATA[Close-up of the Google Fitbit Edge fitness tracker]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Google Fitbit Edge fitness tracker]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Hzzx3SFfMkmhMJhnHgrwmC-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I just reviewed the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people">Fitbit Edge</a>, Google's long-awaited follow-up to 2023's Fitbit Charge 6, and it's better than its predecessor in nearly every single way, making it one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> in 2026.</p><p>However, some folks seem particularly irked by Google's decision to nix the NFC antenna — found in the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-vs-fitbit-charge-6-which-google-fitness-tracker-wins">Charge 6</a> and used for contactless payments — from the Fitbit Edge. This is a criticism I don't agree with.</p><p>With that in mind, here are the three biggest reasons I'm genuinely glad Google didn't give the new Fitbit Edge NFC. </p><div class="product"><a data-dimension112="19667754-d24e-11f1-bf5a-c785ff483ea3" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179" href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" 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="DRT3ZxaNQFpy6ohGGDyquC" name="FitbitEdge" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DRT3ZxaNQFpy6ohGGDyquC-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="810" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Edge replaces the three-year-old Fitbit Charge 6, claiming the crown as one of the most well-rounded fitness tracking wearables on the market today, with just the right amount of features for most people. <a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" target="_blank" rel="nofollow" data-dimension112="19667754-d24e-11f1-bf5a-c785ff483ea3" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179">View Deal</a></p></div><h3 class="article-body__section" id="section-1-google-gave-the-edge-an-altimeter-instead"><span>1. Google gave the Edge an altimeter instead</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vf5UBBimGKRzcfEMhkGTpC" name="FitbitEdge-rev-09" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/vf5UBBimGKRzcfEMhkGTpC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The main reason I'm glad Google nixed the NFC antenna on the Fitbit Edge is that the tech giant replaced it with something far more useful: a barometric altimeter for tracking elevation during outdoor workouts.</p><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6 </a>lacks this piece of tech, and as a result, it doesn't provide climb data, even for activities like bike rides and hikes.</p><p>More importantly, the Fitbit Edge has already proven to be an extremely reliable fitness tracker for logging uphill efforts based on test results from my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people#section-fitbit-edge-fitness-tracking-4-5-5">Fitbit Edge review</a> and an even more recent head-to-head comparison <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-6-000-steps-with-the-fitbit-edge-vs-apple-watch-12-and-im-shocked-by-the-results">versus the Apple Watch 12</a> (which the Edge won). </p><h3 class="article-body__section" id="section-2-less-than-1-of-fitbit-charge-6-users-used-nfc"><span>2. Less than 1% of Fitbit Charge 6 users used NFC</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-1920-80.jpg" mos="" align="middle" fullscreen="" width="3443" height="1936" 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>Another reason I don't miss NFC on the Fitbit Edge — as recently confirmed via an email from Google — is the fact that less than 1% of Fitbit Charge 6 owners <em>actually</em> use NFC for contactless payments. So, for the Fitbit Edge, the brand instead "prioritized other top features such as adding an altimeter and requested improvements," according to that same email.  </p><p>As noted in the <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people#section-fitbit-edge-review-verdict">Fitbit Edge conclusion</a> of my review — written before receiving Google's note about Fitbit Charge 6 NFC usage — I suspected that most folks would rather have accurate elevation data for outdoor workouts than the ability to pay for their coffee from the wrist. And Google's note only confirms that hunch. </p><h3 class="article-body__section" id="section-3-the-lack-of-nfc-keeps-the-cost-of-the-edge-down"><span>3. The lack of NFC keeps the cost of the Edge down</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aojg8RkvnJKWrCRSRfR8nJ" name="FitbitEdge-rev-02" alt="Close-up of the Fitbit Edge on a user's wrist" src="https://cdn.mos.cms.futurecdn.net/aojg8RkvnJKWrCRSRfR8nJ-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Finally, why pay more for features you're unlikely to use? After all, the <a href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" target="_blank" rel="nofollow">$179 Fitbit Edge</a> costs roughly the same as its three-year-old $159 predecessor when you account for inflation. Not only might adding NFC potentially increase the device's launch price, but it could also result in a larger case size, two things that would definitely detract from the Edge's overall appeal.</p><p>What are your thoughts on the Fitbit Edge? Do you agree with me that Google was wise to swap the NFC antenna for an altimeter? And which Google wearable would you be most likely to rock in 2026 and beyond? Let me know in the poll below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2nMX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2nMX.js" async></script><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-6-000-steps-with-the-fitbit-edge-vs-apple-watch-12-and-im-shocked-by-the-results"><strong>I walked 6,000 steps with the Fitbit Edge vs Apple Watch 12 — and I'm shocked by the results</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/3-reasons-why-the-new-fitbit-edge-beats-the-fitbit-charge-6-and-1-reason-it-doesnt"><strong>3 reasons why the new Fitbit Edge beats the Fitbit Charge 6 — and 1 reason it doesn’t</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/google-fitbit-edge-vs-fitbit-air-which-should-you-choose"><strong>Google Fitbit Edge vs Fitbit Air: Which should you choose?</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon drops a better than Black Friday deal on the most supportive memory foam mattress I've ever tested — now $330 in a queen ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Black Friday is still a month away but that doesn't mean you have to wait to snap up a quality mattress at a low cost. I tested the <a href="https://www.amazon.com/EGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified/dp/B0C6TCDKB6/ref=sr_1_6" target="_blank"><strong>EGOHOME Black 12" Mattress, now down to $329.99 (was $559) in a queen at Amazon</strong></a>, and this budget-friendly memory foam mattress proved to me that you don't need to splurge for support and comfort.  </p><p>In fact, the EGOHOME Black 12" Mattress impressed me so much that it's vying for a place in our guide to the <a href="https://www.tomsguide.com/best-picks/best-mattresses">best mattresses</a> of 2026. A body-contouring feel and medium-firm support mean it's a great choice for most sleep positions — and in this new deal, it's perfect for a lot of budgets. </p><p>But I can't guarantee the discount will be around for long, as it may shoot back up to its typical sale price of $369.99. My advice? Snap up this great <a href="https://www.tomsguide.com/news/best-cheap-mattress-deals-and-sales">mattress deal</a> before it's too late. </p><div class="product"><a data-dimension112="39879dd4-d202-11f1-b1ab-9f22392d034c" data-action="Deal Block" data-label="Black 12" Memory Foam Mattress (twin)" data-dimension48="Black 12" Memory Foam Mattress (twin)" data-dimension25="$251.99" href="https://www.amazon.com/EGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified/dp/B0C6TCDKB6/ref=sr_1_6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="hMUemtAejNETLVYxNrktzm" name="EGOHOME 12 Memory foam mattress deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/EGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified/dp/B0C6TCDKB6/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="39879dd4-d202-11f1-b1ab-9f22392d034c" data-action="Deal Block" data-label='Black 12" Memory Foam Mattress (twin)' data-dimension48='Black 12" Memory Foam Mattress (twin)' data-dimension25="$251.99">Black 12" Memory Foam Mattress (twin): was $359 now $251.99</a></strong><br>This EGOHOME 12" Memory Foam Mattress is down to $329.99 for a queen (was $599) at Amazon, which is better than the $333 price tag the same model dropped to during last year's <a href="https://www.tomsguide.com/deals/black-friday-best-mattress-deals-uk">Black Friday mattress sales</a>. Meanwhile, over at EGOHOME, a queen is $341.10 with code <strong>SLEEP2026</strong>. While this is pricier, you'll get a 100-night sleep trial, free shipping, and a 10-year warranty — perks which aren't guaranteed when shopping from a third party retailer like Amazon. </p><p><a href="https://www.tomsguide.com/mattresses/egohome-black-12-memory-foam-mattress-mattress-review"><strong>Our EGOHOME 12" Black Memory Foam mattress review</strong></a><strong>: ★★★★</strong><br><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FEGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified%2Fdp%2FB0C6TCSNC2%2F%3Fth%3D1%26tag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-gb-1307223055079156796-20" target="_blank"><strong>User score</strong></a><strong>:</strong> <strong>★★★★½ </strong>(1,500+ reviews)<a class="view-deal button" href="https://www.amazon.com/EGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified/dp/B0C6TCDKB6/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="39879dd4-d202-11f1-b1ab-9f22392d034c" data-action="Deal Block" data-label="Black 12" Memory Foam Mattress (twin)" data-dimension48="Black 12" Memory Foam Mattress (twin)" data-dimension25="$251.99">View Deal</a></p></div><div data-model-name="EGOHOME Black 12" Mattress" data-rows="4" data-merchant="EGOHOME Mattress" data-label-text-bed-size="Twin,Full,Queen,King" data-distinct-label="bed_size" data-widget-type="review"></div><h2 id="why-i-39-d-buy-the-egohome-black-12-quot-mattress">Why I'd buy the EGOHOME Black 12" Mattress </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:720px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="R7LtnbA4mJp7FHc6AgEQ9m" name="EGOHOME Black 12" Mattress" alt="A large weight perched on the edge of the EGOHOME Black 12" Mattress to test how sturdy the edges are." src="https://cdn.mos.cms.futurecdn.net/R7LtnbA4mJp7FHc6AgEQ9m-1920-80.jpg" mos="" align="middle" fullscreen="" width="720" height="405" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The EGOHOME memory foam mattress has supportive edges for sleeping and sitting  </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There are plenty of reasons to buy the EGOHOME Black 12" Memory Foam Mattress. But let's start with why you should shop right now: that price. This sale means that the EGOHOME Black 12" Mattress, already one of the <a href="https://www.tomsguide.com/best-picks/best-budget-mattress">best cheap mattresses </a>you can buy, is even cheaper than usual.</p><p>Last Black Friday, the brand dropped a queen size to $333. So this $329.99 queen-sized deal is even better than the biggest sale of 2025. And I predict that over the next few weeks the price will shoot back up to $369.99 (the usual sale price). Act fast if you want a mattress bargain this October. </p><p>The only downside to purchasing from Amazon is that the brand benefits, such as the 10-year warranty and the 100-night <a href="https://www.tomsguide.com/news/mattress-trials-how-do-they-work">sleep trial</a> that EGOHOME offers, aren't always guaranteed. If this is a dealbreaker, I suggest you pay a little more and <a href="https://egohome.com/products/ego-black-mattress-with-graphene-technology-12-inch" target="_blank"><strong>buy the Black 12" Memory Foam Mattress for $341.10 in a queen at EGOHOME</strong></a> with code <strong>SLEEP2026</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:720px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WQaJonHAZhEK2DxRJggb5A" name="The Anti-heat Graphene Cover of the EGOHOME Black 12" Mattress" alt="The Anti-heat Graphene Cover of the EGOHOME Black 12" Mattress" src="https://cdn.mos.cms.futurecdn.net/WQaJonHAZhEK2DxRJggb5A-1920-80.jpg" mos="" align="middle" fullscreen="" width="720" height="405" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: EGOHOME)</span></figcaption></figure><p>As for why you should buy this mattress for your sleep, the EGOHOME Black 12" Memory Foam is one of the<a href="https://www.tomsguide.com/best-picks/best-memory-foam-mattress"> best memory foam mattresses</a> thanks to its balance of medium-firm support and body-contouring comfort. </p><p>During my time as lead tester for our <a href="https://www.tomsguide.com/mattresses/egohome-black-12-memory-foam-mattress-mattress-review"><strong>EGOHOME 12" Black Memory Foam mattress review</strong></a>, I found the mattress to be comfortable in all sleep positions (back, stomach, and side). </p><p>It also exhibited amazing <a href="https://www.tomsguide.com/wellness/mattresses/edge-support">edge support</a>. It's sturdy right up to the sides for sleeping, sitting, and getting in and out of bed. The only downside is that it doesn't have the best <a href="https://www.tomsguide.com/wellness/mattresses/temperature-regulation">temperature regulation</a>, despite the graphene-infused cover. You'll need breathable sheets to avoid sweaty nights.</p><h2 id="want-a-budget-bed-with-more-cooling">Want a budget bed with more cooling?</h2><p>As I mentioned above, the EGOHOME is a great budget pick for support, but I would stay clear if you want one of the <a href="https://www.tomsguide.com/best-picks/best-cooling-mattress">best cooling mattresses</a>. Instead, check out this deal...</p><div class="product"><a data-dimension112="3987a464-d202-11f1-bb40-5b750e085404" data-action="Deal Block" data-label="CoolNest Memory Foam Mattress (queen)" data-dimension48="CoolNest Memory Foam Mattress (queen)" data-dimension25="$339.99" href="https://www.walmart.com/ip/Sweetnight-CoolSleeper-Memory-Foam-Queen-Size-Mattress-13-inch-Cooling-Mattresses-in-a-Box-Scientific-Support-Medium-Firm-Grey/19337708980" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1654px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="zKW9FeppDhjzCD4TZco8HM" name="CoolNest" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zKW9FeppDhjzCD4TZco8HM-1920-80.jpg" mos="" align="middle" fullscreen="" width="1654" height="1654" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/Sweetnight-CoolSleeper-Memory-Foam-Queen-Size-Mattress-13-inch-Cooling-Mattresses-in-a-Box-Scientific-Support-Medium-Firm-Grey/19337708980" target="_blank" rel="nofollow" data-dimension112="3987a464-d202-11f1-bb40-5b750e085404" data-action="Deal Block" data-label="CoolNest Memory Foam Mattress (queen)" data-dimension48="CoolNest Memory Foam Mattress (queen)" data-dimension25="$339.99">CoolNest Memory Foam Mattress (queen): was $636.99 now $339.99</a></strong><br>The <a href="https://www.tomsguide.com/mattresses/sweetnight-coolnest-memory-foam-mattress-review">SweetNight CoolNest Memory Foam Mattress</a> is one of the most cooling budget beds we've ever tested thanks to its <a href="https://www.tomsguide.com/wellness/sleep/what-is-pcm-and-why-is-it-important-in-a-cooling-mattress">PCM</a>-infused design and cool-to-the-touch cover. Right now, <a href="https://www.tomsguide.com/mattresses/act-fast-my-favorite-budget-cooling-mattress-is-under-usd340-for-a-queen-in-walmarts-flash-sale">Walmart is running a flash deal on the SweetNight CoolNest mattress</a>, reducing a queen to $339.99 and king to $368.99. A queen is $60 cheaper in Walmart's deal than it is when buying directly from SweetNight, but buying directly from the brand does guarantee its 100-night sleep trial and 10-year warranty. <a class="view-deal button" href="https://www.walmart.com/ip/Sweetnight-CoolSleeper-Memory-Foam-Queen-Size-Mattress-13-inch-Cooling-Mattresses-in-a-Box-Scientific-Support-Medium-Firm-Grey/19337708980" target="_blank" rel="nofollow" data-dimension112="3987a464-d202-11f1-bb40-5b750e085404" data-action="Deal Block" data-label="CoolNest Memory Foam Mattress (queen)" data-dimension48="CoolNest Memory Foam Mattress (queen)" data-dimension25="$339.99">View Deal</a></p></div><div data-model-name="SweetNight CoolNest Memory Foam Mattress" data-rows="4" data-label-text-bed-size="Full,Queen,King" data-distinct-label="bed_size" data-widget-type="productname"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/mattresses/amazon-drops-a-better-than-black-friday-deal-on-the-most-supportive-memory-foam-mattress-ive-ever-tested-now-usd330-in-a-queen</link>
                                                                            <description>
                            <![CDATA[ I slept on the EGOHOME Black 12" Memory Foam for almost a year, and this is hands-down the best mattress deal you're going to find before the Black Friday sales ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">iF6LSN87H2uYNwCXgYAbFC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/3b8uj7aMwXcMnxJQhueSvY-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Oct 2026 15:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Mattresses]]></category>
                                                    <category><![CDATA[Sleep]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Frances Daniels ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/gwtHaY4CfWtqYQH6EuKPGE-320-70.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/3b8uj7aMwXcMnxJQhueSvY-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The EGOHOME Black 12&quot; Mattress in a Tom&#039;s Guide tester&#039;s bedroom. In the top right foreground, there is a price drop deals badge. ]]></media:description>                                                            <media:text><![CDATA[The EGOHOME Black 12&quot; Mattress in a Tom&#039;s Guide tester&#039;s bedroom. In the top right foreground, there is a price drop deals badge. ]]></media:text>
                                <media:title type="plain"><![CDATA[The EGOHOME Black 12&quot; Mattress in a Tom&#039;s Guide tester&#039;s bedroom. In the top right foreground, there is a price drop deals badge. ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/3b8uj7aMwXcMnxJQhueSvY-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Black Friday is still a month away but that doesn't mean you have to wait to snap up a quality mattress at a low cost. I tested the <a href="https://www.amazon.com/EGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified/dp/B0C6TCDKB6/ref=sr_1_6" target="_blank"><strong>EGOHOME Black 12" Mattress, now down to $329.99 (was $559) in a queen at Amazon</strong></a>, and this budget-friendly memory foam mattress proved to me that you don't need to splurge for support and comfort.  </p><p>In fact, the EGOHOME Black 12" Mattress impressed me so much that it's vying for a place in our guide to the <a href="https://www.tomsguide.com/best-picks/best-mattresses">best mattresses</a> of 2026. A body-contouring feel and medium-firm support mean it's a great choice for most sleep positions — and in this new deal, it's perfect for a lot of budgets. </p><p>But I can't guarantee the discount will be around for long, as it may shoot back up to its typical sale price of $369.99. My advice? Snap up this great <a href="https://www.tomsguide.com/news/best-cheap-mattress-deals-and-sales">mattress deal</a> before it's too late. </p><div class="product"><a data-dimension112="39879dd4-d202-11f1-b1ab-9f22392d034c" data-action="Deal Block" data-label="Black 12" Memory Foam Mattress (twin)" data-dimension48="Black 12" Memory Foam Mattress (twin)" data-dimension25="$251.99" href="https://www.amazon.com/EGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified/dp/B0C6TCDKB6/ref=sr_1_6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="hMUemtAejNETLVYxNrktzm" name="EGOHOME 12 Memory foam mattress deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/EGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified/dp/B0C6TCDKB6/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="39879dd4-d202-11f1-b1ab-9f22392d034c" data-action="Deal Block" data-label='Black 12" Memory Foam Mattress (twin)' data-dimension48='Black 12" Memory Foam Mattress (twin)' data-dimension25="$251.99">Black 12" Memory Foam Mattress (twin): was $359 now $251.99</a></strong><br>This EGOHOME 12" Memory Foam Mattress is down to $329.99 for a queen (was $599) at Amazon, which is better than the $333 price tag the same model dropped to during last year's <a href="https://www.tomsguide.com/deals/black-friday-best-mattress-deals-uk">Black Friday mattress sales</a>. Meanwhile, over at EGOHOME, a queen is $341.10 with code <strong>SLEEP2026</strong>. While this is pricier, you'll get a 100-night sleep trial, free shipping, and a 10-year warranty — perks which aren't guaranteed when shopping from a third party retailer like Amazon. </p><p><a href="https://www.tomsguide.com/mattresses/egohome-black-12-memory-foam-mattress-mattress-review"><strong>Our EGOHOME 12" Black Memory Foam mattress review</strong></a><strong>: ★★★★</strong><br><a href="https://target.georiot.com/Proxy.ashx?tsid=45724&GR_URL=https%3A%2F%2Famazon.com%2FEGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified%2Fdp%2FB0C6TCSNC2%2F%3Fth%3D1%26tag%3Dftr-tomsguide-us-20%26ascsubtag%3Dtomsguide-gb-1307223055079156796-20" target="_blank"><strong>User score</strong></a><strong>:</strong> <strong>★★★★½ </strong>(1,500+ reviews)<a class="view-deal button" href="https://www.amazon.com/EGOHOME-Mattress-Therapeutic-CertiPUR-US-Certified/dp/B0C6TCDKB6/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="39879dd4-d202-11f1-b1ab-9f22392d034c" data-action="Deal Block" data-label="Black 12" Memory Foam Mattress (twin)" data-dimension48="Black 12" Memory Foam Mattress (twin)" data-dimension25="$251.99">View Deal</a></p></div><div data-model-name="EGOHOME Black 12" Mattress" data-rows="4" data-merchant="EGOHOME Mattress" data-label-text-bed-size="Twin,Full,Queen,King" data-distinct-label="bed_size" data-widget-type="review"></div><h2 id="why-i-39-d-buy-the-egohome-black-12-quot-mattress">Why I'd buy the EGOHOME Black 12" Mattress </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:720px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="R7LtnbA4mJp7FHc6AgEQ9m" name="EGOHOME Black 12" Mattress" alt="A large weight perched on the edge of the EGOHOME Black 12" Mattress to test how sturdy the edges are." src="https://cdn.mos.cms.futurecdn.net/R7LtnbA4mJp7FHc6AgEQ9m-1920-80.jpg" mos="" align="middle" fullscreen="" width="720" height="405" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The EGOHOME memory foam mattress has supportive edges for sleeping and sitting  </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There are plenty of reasons to buy the EGOHOME Black 12" Memory Foam Mattress. But let's start with why you should shop right now: that price. This sale means that the EGOHOME Black 12" Mattress, already one of the <a href="https://www.tomsguide.com/best-picks/best-budget-mattress">best cheap mattresses </a>you can buy, is even cheaper than usual.</p><p>Last Black Friday, the brand dropped a queen size to $333. So this $329.99 queen-sized deal is even better than the biggest sale of 2025. And I predict that over the next few weeks the price will shoot back up to $369.99 (the usual sale price). Act fast if you want a mattress bargain this October. </p><p>The only downside to purchasing from Amazon is that the brand benefits, such as the 10-year warranty and the 100-night <a href="https://www.tomsguide.com/news/mattress-trials-how-do-they-work">sleep trial</a> that EGOHOME offers, aren't always guaranteed. If this is a dealbreaker, I suggest you pay a little more and <a href="https://egohome.com/products/ego-black-mattress-with-graphene-technology-12-inch" target="_blank"><strong>buy the Black 12" Memory Foam Mattress for $341.10 in a queen at EGOHOME</strong></a> with code <strong>SLEEP2026</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:720px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WQaJonHAZhEK2DxRJggb5A" name="The Anti-heat Graphene Cover of the EGOHOME Black 12" Mattress" alt="The Anti-heat Graphene Cover of the EGOHOME Black 12" Mattress" src="https://cdn.mos.cms.futurecdn.net/WQaJonHAZhEK2DxRJggb5A-1920-80.jpg" mos="" align="middle" fullscreen="" width="720" height="405" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: EGOHOME)</span></figcaption></figure><p>As for why you should buy this mattress for your sleep, the EGOHOME Black 12" Memory Foam is one of the<a href="https://www.tomsguide.com/best-picks/best-memory-foam-mattress"> best memory foam mattresses</a> thanks to its balance of medium-firm support and body-contouring comfort. </p><p>During my time as lead tester for our <a href="https://www.tomsguide.com/mattresses/egohome-black-12-memory-foam-mattress-mattress-review"><strong>EGOHOME 12" Black Memory Foam mattress review</strong></a>, I found the mattress to be comfortable in all sleep positions (back, stomach, and side). </p><p>It also exhibited amazing <a href="https://www.tomsguide.com/wellness/mattresses/edge-support">edge support</a>. It's sturdy right up to the sides for sleeping, sitting, and getting in and out of bed. The only downside is that it doesn't have the best <a href="https://www.tomsguide.com/wellness/mattresses/temperature-regulation">temperature regulation</a>, despite the graphene-infused cover. You'll need breathable sheets to avoid sweaty nights.</p><h2 id="want-a-budget-bed-with-more-cooling">Want a budget bed with more cooling?</h2><p>As I mentioned above, the EGOHOME is a great budget pick for support, but I would stay clear if you want one of the <a href="https://www.tomsguide.com/best-picks/best-cooling-mattress">best cooling mattresses</a>. Instead, check out this deal...</p><div class="product"><a data-dimension112="3987a464-d202-11f1-bb40-5b750e085404" data-action="Deal Block" data-label="CoolNest Memory Foam Mattress (queen)" data-dimension48="CoolNest Memory Foam Mattress (queen)" data-dimension25="$339.99" href="https://www.walmart.com/ip/Sweetnight-CoolSleeper-Memory-Foam-Queen-Size-Mattress-13-inch-Cooling-Mattresses-in-a-Box-Scientific-Support-Medium-Firm-Grey/19337708980" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1654px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="zKW9FeppDhjzCD4TZco8HM" name="CoolNest" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zKW9FeppDhjzCD4TZco8HM-1920-80.jpg" mos="" align="middle" fullscreen="" width="1654" height="1654" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/Sweetnight-CoolSleeper-Memory-Foam-Queen-Size-Mattress-13-inch-Cooling-Mattresses-in-a-Box-Scientific-Support-Medium-Firm-Grey/19337708980" target="_blank" rel="nofollow" data-dimension112="3987a464-d202-11f1-bb40-5b750e085404" data-action="Deal Block" data-label="CoolNest Memory Foam Mattress (queen)" data-dimension48="CoolNest Memory Foam Mattress (queen)" data-dimension25="$339.99">CoolNest Memory Foam Mattress (queen): was $636.99 now $339.99</a></strong><br>The <a href="https://www.tomsguide.com/mattresses/sweetnight-coolnest-memory-foam-mattress-review">SweetNight CoolNest Memory Foam Mattress</a> is one of the most cooling budget beds we've ever tested thanks to its <a href="https://www.tomsguide.com/wellness/sleep/what-is-pcm-and-why-is-it-important-in-a-cooling-mattress">PCM</a>-infused design and cool-to-the-touch cover. Right now, <a href="https://www.tomsguide.com/mattresses/act-fast-my-favorite-budget-cooling-mattress-is-under-usd340-for-a-queen-in-walmarts-flash-sale">Walmart is running a flash deal on the SweetNight CoolNest mattress</a>, reducing a queen to $339.99 and king to $368.99. A queen is $60 cheaper in Walmart's deal than it is when buying directly from SweetNight, but buying directly from the brand does guarantee its 100-night sleep trial and 10-year warranty. <a class="view-deal button" href="https://www.walmart.com/ip/Sweetnight-CoolSleeper-Memory-Foam-Queen-Size-Mattress-13-inch-Cooling-Mattresses-in-a-Box-Scientific-Support-Medium-Firm-Grey/19337708980" target="_blank" rel="nofollow" data-dimension112="3987a464-d202-11f1-bb40-5b750e085404" data-action="Deal Block" data-label="CoolNest Memory Foam Mattress (queen)" data-dimension48="CoolNest Memory Foam Mattress (queen)" data-dimension25="$339.99">View Deal</a></p></div><div data-model-name="SweetNight CoolNest Memory Foam Mattress" data-rows="4" data-label-text-bed-size="Full,Queen,King" data-distinct-label="bed_size" data-widget-type="productname"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The North Face is up to 50% off at Amazon, REI and more — shop these 11 deals for fall ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Ready to refresh your wardrobe for the cooler months ahead? The North Face has you covered with versatile styles designed for everything from crisp fall days to the coldest winter weather. While the brand tends to be a bit pricey, several retailers are currently offering discounts on some of its most popular styles. </p><p>In fact, Amazon, REI and the official North Face site are <a href="https://www.thenorthface.com/en-us/c/sale-829803" target="_blank" rel="nofollow">knocking up to 50% off select styles</a>. Whether you're planning to hit the trails, explore the great outdoors or brave a rainstorm, The North Face has the perfect pieces to keep you comfortable as temperatures start to drop. </p><p>To take advantage of these incredible deals, keep on reading for all my favorite picks from The North Face sale. </p><h2 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h2><ul><li><strong></strong><a href="https://www.thenorthface.com/en-us/c/sale-829803" target="_blank" rel="nofollow"><strong>shop all The North Face deals</strong></a></li><li><strong></strong><a href="https://www.rei.com/b/the-north-face/f/scd-deals?" target="_blank" rel="nofollow"><strong>shop all The North Face deals at REI</strong></a></li><li><a href="https://www.amazon.com/stores/THENORTHFACE/page/4CB8EA89-2A36-48BC-A2C2-E23C816F9339" target="_blank" rel="nofollow"><strong>shop all The North Face deals at Amazon</strong></a></li><li><strong>The North Face Sunriser Hoodie (Men's): </strong><a href="https://www.thenorthface.com/en-us/p/mens/mens-tops/mens-active-tops-224210/mens-lightrange-sunriser-hoodie-NF0A8BN8?color=BQ1" target="_blank" rel="nofollow"><strong>was $80 now $56</strong></a></li><li><strong>The North Face Jester Everyday Laptop Backpack: </strong><a href="https://www.amazon.com/North-Face-Womens-Everyday-Backpack/dp/B0CNB261KH?" target="_blank" rel="nofollow"><strong>was $75 now $59</strong></a></li><li><strong>The North Face Osito Lux Jacket (Women's): </strong><a href="https://www.rei.com/product/250475/the-north-face-osito-lux-jacket-womens" target="_blank" rel="nofollow"><strong>was $130 now $65</strong></a></li><li><strong>The North Face Antora Jacket (Women's): </strong><a href="https://www.amazon.com/dp/B0F97WG8SQ?" target="_blank" rel="nofollow"><strong>was $130 now $91</strong></a></li><li><strong>The North Face Aconcagua 3 Jacket (Men's): </strong><a href="https://www.amazon.com/dp/B0F1WYVHWW?" target="_blank" rel="nofollow"><strong>was $200 now $135</strong></a></li></ul><h2 class="article-body__section" id="section-the-north-face-apparel-deals"><span>The North Face Apparel Deals</span></h2><div class="product"><a data-dimension112="fcbd0e92-d216-11f1-b272-33d8352bb2bb" data-action="Deal Block" data-label="Dock Worker Recycled Beanie" data-dimension48="Dock Worker Recycled Beanie" data-dimension25="$27" href="https://www.amazon.com/NORTH-FACE-Worker-Recycled-Beanie/dp/B0BGY9SS51" 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:95.29%;"><img id="LtEEx8hgM2qRA4YM6Ydh4C" name="Dock Worker Recycled Beanie" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LtEEx8hgM2qRA4YM6Ydh4C-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="647" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Right now this Dock Worker Recycled Beanie from The North Face is on sale starting from $27. It's super stylish thanks to its range of muted color options and The North Face logo patch. Plus, its deep fit maximizes warmth.<a class="view-deal button" href="https://www.amazon.com/NORTH-FACE-Worker-Recycled-Beanie/dp/B0BGY9SS51" target="_blank" rel="nofollow" data-dimension112="fcbd0e92-d216-11f1-b272-33d8352bb2bb" data-action="Deal Block" data-label="Dock Worker Recycled Beanie" data-dimension48="Dock Worker Recycled Beanie" data-dimension25="$27">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd0f00-d216-11f1-a965-bd9bde873bdf" data-action="Deal Block" data-label="Jester Daypack" data-dimension48="Jester Daypack" data-dimension25="$44" href="https://www.rei.com/product/165715/the-north-face-jester-daypack" 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:100.00%;"><img id="jFFtPWzRmj9f42irAm3fsS" name="north face deals" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jFFtPWzRmj9f42irAm3fsS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/165715/the-north-face-jester-daypack" target="_blank" rel="nofollow" data-dimension112="fcbd0f00-d216-11f1-a965-bd9bde873bdf" data-action="Deal Block" data-label="Jester Daypack" data-dimension48="Jester Daypack" data-dimension25="$44">Jester Daypack: was $75 now $44</a></strong><br>This backpack features tons of compartments — including a laptop sleeve — and can even stand up on its own. Its padded shoulder straps offer comfort and it also has two grab handles on top making it convenient to open and provide a balanced carry. It’s also endorsed by the American Chiropractic Association thanks to its comfortable FlexVent suspension system.<a class="view-deal button" href="https://www.rei.com/product/165715/the-north-face-jester-daypack" target="_blank" rel="nofollow" data-dimension112="fcbd0f00-d216-11f1-a965-bd9bde873bdf" data-action="Deal Block" data-label="Jester Daypack" data-dimension48="Jester Daypack" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd0f6e-d216-11f1-b195-b36487b322c8" data-action="Deal Block" data-label="Sunriser Hoodie (Men's)" data-dimension48="Sunriser Hoodie (Men's)" data-dimension25="$56" href="https://www.thenorthface.com/en-us/p/mens/mens-tops/mens-active-tops-224210/mens-sunriser-hoodie-NF0A8BN8?color=2EL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:688px;"><p class="vanilla-image-block" style="padding-top:116.28%;"><img id="3JpsW9Lw9CUbH56rbBPUh4" name="sunriser hoodie" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3JpsW9Lw9CUbH56rbBPUh4-1920-80.jpg" mos="" align="middle" fullscreen="" width="688" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.thenorthface.com/en-us/p/mens/mens-tops/mens-active-tops-224210/mens-sunriser-hoodie-NF0A8BN8?color=2EL" target="_blank" rel="nofollow" data-dimension112="fcbd0f6e-d216-11f1-b195-b36487b322c8" data-action="Deal Block" data-label="Sunriser Hoodie (Men's)" data-dimension48="Sunriser Hoodie (Men's)" data-dimension25="$56">Sunriser Hoodie (Men's): was $80 now $56</a></strong><br>This attractive hoodie has more going for it than just looks, thanks to The North Face’s Lightrange finish, which provides UPF protection, anti-odor technology, and moisture-wicking properties. It also has reflective elements on the chest and back, making it a great pick for evening runners.<a class="view-deal button" href="https://www.thenorthface.com/en-us/p/mens/mens-tops/mens-active-tops-224210/mens-sunriser-hoodie-NF0A8BN8?color=2EL" target="_blank" rel="nofollow" data-dimension112="fcbd0f6e-d216-11f1-b195-b36487b322c8" data-action="Deal Block" data-label="Sunriser Hoodie (Men's)" data-dimension48="Sunriser Hoodie (Men's)" data-dimension25="$56">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd0fdc-d216-11f1-ab39-3f5c93417ad0" data-action="Deal Block" data-label="Jester Everyday Laptop Backpack" data-dimension48="Jester Everyday Laptop Backpack" data-dimension25="$59" href="https://www.amazon.com/North-Face-Womens-Everyday-Backpack/dp/B0CNB261KH?" 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:116.35%;"><img id="JiduFGLLchFPwftiHi7DLN" name="" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JiduFGLLchFPwftiHi7DLN-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="790" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/North-Face-Womens-Everyday-Backpack/dp/B0CNB261KH?" target="_blank" rel="nofollow" data-dimension112="fcbd0fdc-d216-11f1-ab39-3f5c93417ad0" data-action="Deal Block" data-label="Jester Everyday Laptop Backpack" data-dimension48="Jester Everyday Laptop Backpack" data-dimension25="$59">Jester Everyday Laptop Backpack: was $90 now $59</a></strong><br>The North Face Jester backpack is the ideal campus backpack. It has a 30 liter capacity, a padded 15-inch laptop sleeve, and a front organization pocket with mesh water bottle holders. <a class="view-deal button" href="https://www.amazon.com/North-Face-Womens-Everyday-Backpack/dp/B0CNB261KH?" target="_blank" rel="nofollow" data-dimension112="fcbd0fdc-d216-11f1-ab39-3f5c93417ad0" data-action="Deal Block" data-label="Jester Everyday Laptop Backpack" data-dimension48="Jester Everyday Laptop Backpack" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd104a-d216-11f1-a908-2d7a86d54645" data-action="Deal Block" data-label="DotKnit Thermal ¼-Zip (Women's)" data-dimension48="DotKnit Thermal ¼-Zip (Women's)" data-dimension25="$64" href="https://www.rei.com/product/254013/the-north-face-dotknit-thermal-quarter-zip-pullover-womens?color=MIDNIGHT%2520PETROL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:576px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="JkvuGYs7dyyBgbeoS9VyUF" name="The North Face dotknot" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JkvuGYs7dyyBgbeoS9VyUF-1920-80.jpg" mos="" align="middle" fullscreen="" width="576" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/254013/the-north-face-dotknit-thermal-quarter-zip-pullover-womens?color=MIDNIGHT%2520PETROL" target="_blank" rel="nofollow" data-dimension112="fcbd104a-d216-11f1-a908-2d7a86d54645" data-action="Deal Block" data-label="DotKnit Thermal ¼-Zip (Women's)" data-dimension48="DotKnit Thermal ¼-Zip (Women's)" data-dimension25="$64">DotKnit Thermal ¼-Zip (Women's): was $90 now $64</a></strong><br>If you're a runner, you need this ¼-zip for the colder months. Not only does it help regulate body temperature with its innovative insulating fabric, it also actively moves moisture away from the body.<a class="view-deal button" href="https://www.rei.com/product/254013/the-north-face-dotknit-thermal-quarter-zip-pullover-womens?color=MIDNIGHT%2520PETROL" target="_blank" rel="nofollow" data-dimension112="fcbd104a-d216-11f1-a908-2d7a86d54645" data-action="Deal Block" data-label="DotKnit Thermal ¼-Zip (Women's)" data-dimension48="DotKnit Thermal ¼-Zip (Women's)" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd10b8-d216-11f1-b523-4bdef0e8ca60" data-action="Deal Block" data-label="Osito Lux Jacket (Women's)" data-dimension48="Osito Lux Jacket (Women's)" data-dimension25="$65" href="https://www.rei.com/product/250475/the-north-face-osito-lux-jacket-womens" 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="MZdvPZM2QPb9UsJtviZ5GJ" name="Osito Lux Jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/MZdvPZM2QPb9UsJtviZ5GJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1290" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/250475/the-north-face-osito-lux-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd10b8-d216-11f1-b523-4bdef0e8ca60" data-action="Deal Block" data-label="Osito Lux Jacket (Women's)" data-dimension48="Osito Lux Jacket (Women's)" data-dimension25="$65">Osito Lux Jacket (Women's): was $130 now $65</a></strong><br>The super soft Osito Jacket is made with a supersoft high-pile fleece and provides instant, lightweight warmth. It has a rib-knit collar, hem and cuffs for better warmth retention in chilly weather.<a class="view-deal button" href="https://www.rei.com/product/250475/the-north-face-osito-lux-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd10b8-d216-11f1-b523-4bdef0e8ca60" data-action="Deal Block" data-label="Osito Lux Jacket (Women's)" data-dimension48="Osito Lux Jacket (Women's)" data-dimension25="$65">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd1180-d216-11f1-8860-8be4a04140ad" data-action="Deal Block" data-label="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension48="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension25="$74" href="https://www.rei.com/product/C00697/the-north-face-yumiori-off-peak-full-zip-jacket-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="vamU4Ky2CB4QQda8nfrvm4" name="the north face yumiori jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vamU4Ky2CB4QQda8nfrvm4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C00697/the-north-face-yumiori-off-peak-full-zip-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd1180-d216-11f1-8860-8be4a04140ad" data-action="Deal Block" data-label="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension48="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension25="$74">Yumiori Off Peak Full-Zip Jacket - Women's: was $150 now $74</a></strong><br>The North Face's Yumiori fleece is a perfect hiking-slash-everyday fleece. Smartphones fit snugly into the chest pocket, one zipper even doubles as a hair tie, and it's finished with durable water repellent.<a class="view-deal button" href="https://www.rei.com/product/C00697/the-north-face-yumiori-off-peak-full-zip-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd1180-d216-11f1-8860-8be4a04140ad" data-action="Deal Block" data-label="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension48="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension25="$74">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd1248-d216-11f1-8850-a78ea49d6b96" data-action="Deal Block" data-label="Kikash Wind Jacket (Women's)" data-dimension48="Kikash Wind Jacket (Women's)" data-dimension25="$75" href="https://www.rei.com/product/254048/the-north-face-kikash-wind-jacket-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="euVM6xCmm2F8CfG6fPp57T" name="Kikash jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/euVM6xCmm2F8CfG6fPp57T-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/254048/the-north-face-kikash-wind-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd1248-d216-11f1-8850-a78ea49d6b96" data-action="Deal Block" data-label="Kikash Wind Jacket (Women's)" data-dimension48="Kikash Wind Jacket (Women's)" data-dimension25="$75">Kikash Wind Jacket (Women's): was $150 now $75</a></strong><br>The Kikash Wind Jacket is built for those days when the wind won't quit. The durable nylon fabric shrugs off mountain gusts while keeping you mobile, and reflective details add crucial visibility for early starts or late finishes. The secure zip pockets and snug elastic hem make it a reliable companion for unpredictable conditions.<a class="view-deal button" href="https://www.rei.com/product/254048/the-north-face-kikash-wind-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd1248-d216-11f1-8850-a78ea49d6b96" data-action="Deal Block" data-label="Kikash Wind Jacket (Women's)" data-dimension48="Kikash Wind Jacket (Women's)" data-dimension25="$75">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd13d8-d216-11f1-a8bb-b763a0088eca" data-action="Deal Block" data-label="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension48="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension25="$80" href="https://www.amazon.com/dp/B0FX8Z9VH4?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:662px;"><p class="vanilla-image-block" style="padding-top:226.59%;"><img id="4xm4Hfhke6ZnYYKS66BiEd" name="TNF Performance Fleece 1/4 Zip Jacket (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4xm4Hfhke6ZnYYKS66BiEd-1920-80.jpg" mos="" align="middle" fullscreen="" width="662" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FX8Z9VH4?" target="_blank" rel="nofollow" data-dimension112="fcbd13d8-d216-11f1-a8bb-b763a0088eca" data-action="Deal Block" data-label="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension48="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension25="$80">TNF Performance Fleece 1/4 Zip Jacket (Women's): was $90 now $80</a></strong><br>It's hard to say no to this cozy fleece. It's made of soft polyester fleece, with an athletic look and lightweight feel. Make sure to grab one to layer up when temperatures drop on crisp fall days.<a class="view-deal button" href="https://www.amazon.com/dp/B0FX8Z9VH4?" target="_blank" rel="nofollow" data-dimension112="fcbd13d8-d216-11f1-a8bb-b763a0088eca" data-action="Deal Block" data-label="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension48="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension25="$80">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd1446-d216-11f1-8253-5325d17d1fdd" data-action="Deal Block" data-label="Antora Jacket (Women's)" data-dimension48="Antora Jacket (Women's)" data-dimension25="$91" href="https://www.amazon.com/North-Face-Waterproof-Windproof-Adjustable/dp/B0F97WG8SQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:731px;"><p class="vanilla-image-block" style="padding-top:205.20%;"><img id="bN5BuTC38YdrnSkcwmxwpg" name="Antora Jacket (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bN5BuTC38YdrnSkcwmxwpg-1920-80.jpg" mos="" align="middle" fullscreen="" width="731" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/North-Face-Waterproof-Windproof-Adjustable/dp/B0F97WG8SQ" target="_blank" rel="nofollow" data-dimension112="fcbd1446-d216-11f1-8253-5325d17d1fdd" data-action="Deal Block" data-label="Antora Jacket (Women's)" data-dimension48="Antora Jacket (Women's)" data-dimension25="$91">Antora Jacket (Women's): was $130 now $91</a></strong><br>$91 is a great deal for this lightweight, weather-resistant shell. A core piece of outerwear no one should leave home without, the Antora Jacket boasts impressive rain-repellent capabilities. A drawstring-adjustable hood provides extra H2O protection, while a storm flap protects the main zipper from seepage during downpours. More importantly, as far as rain shells go, few can match the style factor of the Antora. <a class="view-deal button" href="https://www.amazon.com/North-Face-Waterproof-Windproof-Adjustable/dp/B0F97WG8SQ" target="_blank" rel="nofollow" data-dimension112="fcbd1446-d216-11f1-8253-5325d17d1fdd" data-action="Deal Block" data-label="Antora Jacket (Women's)" data-dimension48="Antora Jacket (Women's)" data-dimension25="$91">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd14b4-d216-11f1-b60b-737447380189" data-action="Deal Block" data-label="Aconcagua 3 Jacket (Men's)" data-dimension48="Aconcagua 3 Jacket (Men's)" data-dimension25="$135" href="https://www.amazon.com/dp/B0F1WYVHWW?" 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:187.78%;"><img id="jLN4YbW223nKsxQxPVPWZR" name="TNF jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jLN4YbW223nKsxQxPVPWZR-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="1275" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0F1WYVHWW?" target="_blank" rel="nofollow" data-dimension112="fcbd14b4-d216-11f1-b60b-737447380189" data-action="Deal Block" data-label="Aconcagua 3 Jacket (Men's)" data-dimension48="Aconcagua 3 Jacket (Men's)" data-dimension25="$135">Aconcagua 3 Jacket (Men's): was $200 now $135</a></strong><br>This lightweight puffer blends recycled down with synthetic insulation for maximum warmth and weather resistance in a tidy, easy-to-stow package. Zonal sheet insulation and a water-repellant finish round out the feature set.<a class="view-deal button" href="https://www.amazon.com/dp/B0F1WYVHWW?" target="_blank" rel="nofollow" data-dimension112="fcbd14b4-d216-11f1-b60b-737447380189" data-action="Deal Block" data-label="Aconcagua 3 Jacket (Men's)" data-dimension48="Aconcagua 3 Jacket (Men's)" data-dimension25="$135">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/the-north-face-is-up-to-50-percent-off-at-amazon-rei-and-more-shop-these-11-deals-for-fall</link>
                                                                            <description>
                            <![CDATA[ North Face is hosting a huge sale with up to 50% off. Score deals on jackets, fleeces and backpacks. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">HJNDMudK9EKEAdsifxTGyn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/uZdJ8sgZfkjBcSHtWd5MyS-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Oct 2026 15:14:50 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Olivia Halevy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/YAg7Fmh9dGKbg3hULBMWiU-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Olivia is a Deals Writer at Tom’s Guide. She loves all things lifestyle, shopping and sourcing the best deals from some of the top brands, retailers and websites around. From fashion and beauty to smart home and tech, she has an eye for finding practical, stylish, and reasonably-priced items that help make life simpler (and a little more aesthetically-pleasing).&amp;nbsp;Olivia has over five years of experience writing lifestyle, commerce, and branded content for &lt;a href=&quot;http://patch.com/&quot;&gt;Patch.com&lt;/a&gt;. She&#039;s covered major shopping holidays like Amazon Prime Day, Black Friday and Cyber Monday. In her free time, she enjoys trying out new exercise classes, binge-watching the latest viral TV shows, cooking, spending time with family and taking long walks with her dog, Gus.&amp;nbsp;&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/uZdJ8sgZfkjBcSHtWd5MyS-1920-80.jpg">
                                                            <media:credit><![CDATA[The North Face / edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The North Face]]></media:description>                                                            <media:text><![CDATA[The North Face]]></media:text>
                                <media:title type="plain"><![CDATA[The North Face]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/uZdJ8sgZfkjBcSHtWd5MyS-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Ready to refresh your wardrobe for the cooler months ahead? The North Face has you covered with versatile styles designed for everything from crisp fall days to the coldest winter weather. While the brand tends to be a bit pricey, several retailers are currently offering discounts on some of its most popular styles. </p><p>In fact, Amazon, REI and the official North Face site are <a href="https://www.thenorthface.com/en-us/c/sale-829803" target="_blank" rel="nofollow">knocking up to 50% off select styles</a>. Whether you're planning to hit the trails, explore the great outdoors or brave a rainstorm, The North Face has the perfect pieces to keep you comfortable as temperatures start to drop. </p><p>To take advantage of these incredible deals, keep on reading for all my favorite picks from The North Face sale. </p><h2 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h2><ul><li><strong></strong><a href="https://www.thenorthface.com/en-us/c/sale-829803" target="_blank" rel="nofollow"><strong>shop all The North Face deals</strong></a></li><li><strong></strong><a href="https://www.rei.com/b/the-north-face/f/scd-deals?" target="_blank" rel="nofollow"><strong>shop all The North Face deals at REI</strong></a></li><li><a href="https://www.amazon.com/stores/THENORTHFACE/page/4CB8EA89-2A36-48BC-A2C2-E23C816F9339" target="_blank" rel="nofollow"><strong>shop all The North Face deals at Amazon</strong></a></li><li><strong>The North Face Sunriser Hoodie (Men's): </strong><a href="https://www.thenorthface.com/en-us/p/mens/mens-tops/mens-active-tops-224210/mens-lightrange-sunriser-hoodie-NF0A8BN8?color=BQ1" target="_blank" rel="nofollow"><strong>was $80 now $56</strong></a></li><li><strong>The North Face Jester Everyday Laptop Backpack: </strong><a href="https://www.amazon.com/North-Face-Womens-Everyday-Backpack/dp/B0CNB261KH?" target="_blank" rel="nofollow"><strong>was $75 now $59</strong></a></li><li><strong>The North Face Osito Lux Jacket (Women's): </strong><a href="https://www.rei.com/product/250475/the-north-face-osito-lux-jacket-womens" target="_blank" rel="nofollow"><strong>was $130 now $65</strong></a></li><li><strong>The North Face Antora Jacket (Women's): </strong><a href="https://www.amazon.com/dp/B0F97WG8SQ?" target="_blank" rel="nofollow"><strong>was $130 now $91</strong></a></li><li><strong>The North Face Aconcagua 3 Jacket (Men's): </strong><a href="https://www.amazon.com/dp/B0F1WYVHWW?" target="_blank" rel="nofollow"><strong>was $200 now $135</strong></a></li></ul><h2 class="article-body__section" id="section-the-north-face-apparel-deals"><span>The North Face Apparel Deals</span></h2><div class="product"><a data-dimension112="fcbd0e92-d216-11f1-b272-33d8352bb2bb" data-action="Deal Block" data-label="Dock Worker Recycled Beanie" data-dimension48="Dock Worker Recycled Beanie" data-dimension25="$27" href="https://www.amazon.com/NORTH-FACE-Worker-Recycled-Beanie/dp/B0BGY9SS51" 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:95.29%;"><img id="LtEEx8hgM2qRA4YM6Ydh4C" name="Dock Worker Recycled Beanie" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LtEEx8hgM2qRA4YM6Ydh4C-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="647" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Right now this Dock Worker Recycled Beanie from The North Face is on sale starting from $27. It's super stylish thanks to its range of muted color options and The North Face logo patch. Plus, its deep fit maximizes warmth.<a class="view-deal button" href="https://www.amazon.com/NORTH-FACE-Worker-Recycled-Beanie/dp/B0BGY9SS51" target="_blank" rel="nofollow" data-dimension112="fcbd0e92-d216-11f1-b272-33d8352bb2bb" data-action="Deal Block" data-label="Dock Worker Recycled Beanie" data-dimension48="Dock Worker Recycled Beanie" data-dimension25="$27">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd0f00-d216-11f1-a965-bd9bde873bdf" data-action="Deal Block" data-label="Jester Daypack" data-dimension48="Jester Daypack" data-dimension25="$44" href="https://www.rei.com/product/165715/the-north-face-jester-daypack" 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:100.00%;"><img id="jFFtPWzRmj9f42irAm3fsS" name="north face deals" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jFFtPWzRmj9f42irAm3fsS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/165715/the-north-face-jester-daypack" target="_blank" rel="nofollow" data-dimension112="fcbd0f00-d216-11f1-a965-bd9bde873bdf" data-action="Deal Block" data-label="Jester Daypack" data-dimension48="Jester Daypack" data-dimension25="$44">Jester Daypack: was $75 now $44</a></strong><br>This backpack features tons of compartments — including a laptop sleeve — and can even stand up on its own. Its padded shoulder straps offer comfort and it also has two grab handles on top making it convenient to open and provide a balanced carry. It’s also endorsed by the American Chiropractic Association thanks to its comfortable FlexVent suspension system.<a class="view-deal button" href="https://www.rei.com/product/165715/the-north-face-jester-daypack" target="_blank" rel="nofollow" data-dimension112="fcbd0f00-d216-11f1-a965-bd9bde873bdf" data-action="Deal Block" data-label="Jester Daypack" data-dimension48="Jester Daypack" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd0f6e-d216-11f1-b195-b36487b322c8" data-action="Deal Block" data-label="Sunriser Hoodie (Men's)" data-dimension48="Sunriser Hoodie (Men's)" data-dimension25="$56" href="https://www.thenorthface.com/en-us/p/mens/mens-tops/mens-active-tops-224210/mens-sunriser-hoodie-NF0A8BN8?color=2EL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:688px;"><p class="vanilla-image-block" style="padding-top:116.28%;"><img id="3JpsW9Lw9CUbH56rbBPUh4" name="sunriser hoodie" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3JpsW9Lw9CUbH56rbBPUh4-1920-80.jpg" mos="" align="middle" fullscreen="" width="688" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.thenorthface.com/en-us/p/mens/mens-tops/mens-active-tops-224210/mens-sunriser-hoodie-NF0A8BN8?color=2EL" target="_blank" rel="nofollow" data-dimension112="fcbd0f6e-d216-11f1-b195-b36487b322c8" data-action="Deal Block" data-label="Sunriser Hoodie (Men's)" data-dimension48="Sunriser Hoodie (Men's)" data-dimension25="$56">Sunriser Hoodie (Men's): was $80 now $56</a></strong><br>This attractive hoodie has more going for it than just looks, thanks to The North Face’s Lightrange finish, which provides UPF protection, anti-odor technology, and moisture-wicking properties. It also has reflective elements on the chest and back, making it a great pick for evening runners.<a class="view-deal button" href="https://www.thenorthface.com/en-us/p/mens/mens-tops/mens-active-tops-224210/mens-sunriser-hoodie-NF0A8BN8?color=2EL" target="_blank" rel="nofollow" data-dimension112="fcbd0f6e-d216-11f1-b195-b36487b322c8" data-action="Deal Block" data-label="Sunriser Hoodie (Men's)" data-dimension48="Sunriser Hoodie (Men's)" data-dimension25="$56">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd0fdc-d216-11f1-ab39-3f5c93417ad0" data-action="Deal Block" data-label="Jester Everyday Laptop Backpack" data-dimension48="Jester Everyday Laptop Backpack" data-dimension25="$59" href="https://www.amazon.com/North-Face-Womens-Everyday-Backpack/dp/B0CNB261KH?" 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:116.35%;"><img id="JiduFGLLchFPwftiHi7DLN" name="" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JiduFGLLchFPwftiHi7DLN-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="790" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/North-Face-Womens-Everyday-Backpack/dp/B0CNB261KH?" target="_blank" rel="nofollow" data-dimension112="fcbd0fdc-d216-11f1-ab39-3f5c93417ad0" data-action="Deal Block" data-label="Jester Everyday Laptop Backpack" data-dimension48="Jester Everyday Laptop Backpack" data-dimension25="$59">Jester Everyday Laptop Backpack: was $90 now $59</a></strong><br>The North Face Jester backpack is the ideal campus backpack. It has a 30 liter capacity, a padded 15-inch laptop sleeve, and a front organization pocket with mesh water bottle holders. <a class="view-deal button" href="https://www.amazon.com/North-Face-Womens-Everyday-Backpack/dp/B0CNB261KH?" target="_blank" rel="nofollow" data-dimension112="fcbd0fdc-d216-11f1-ab39-3f5c93417ad0" data-action="Deal Block" data-label="Jester Everyday Laptop Backpack" data-dimension48="Jester Everyday Laptop Backpack" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd104a-d216-11f1-a908-2d7a86d54645" data-action="Deal Block" data-label="DotKnit Thermal ¼-Zip (Women's)" data-dimension48="DotKnit Thermal ¼-Zip (Women's)" data-dimension25="$64" href="https://www.rei.com/product/254013/the-north-face-dotknit-thermal-quarter-zip-pullover-womens?color=MIDNIGHT%2520PETROL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:576px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="JkvuGYs7dyyBgbeoS9VyUF" name="The North Face dotknot" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JkvuGYs7dyyBgbeoS9VyUF-1920-80.jpg" mos="" align="middle" fullscreen="" width="576" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/254013/the-north-face-dotknit-thermal-quarter-zip-pullover-womens?color=MIDNIGHT%2520PETROL" target="_blank" rel="nofollow" data-dimension112="fcbd104a-d216-11f1-a908-2d7a86d54645" data-action="Deal Block" data-label="DotKnit Thermal ¼-Zip (Women's)" data-dimension48="DotKnit Thermal ¼-Zip (Women's)" data-dimension25="$64">DotKnit Thermal ¼-Zip (Women's): was $90 now $64</a></strong><br>If you're a runner, you need this ¼-zip for the colder months. Not only does it help regulate body temperature with its innovative insulating fabric, it also actively moves moisture away from the body.<a class="view-deal button" href="https://www.rei.com/product/254013/the-north-face-dotknit-thermal-quarter-zip-pullover-womens?color=MIDNIGHT%2520PETROL" target="_blank" rel="nofollow" data-dimension112="fcbd104a-d216-11f1-a908-2d7a86d54645" data-action="Deal Block" data-label="DotKnit Thermal ¼-Zip (Women's)" data-dimension48="DotKnit Thermal ¼-Zip (Women's)" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd10b8-d216-11f1-b523-4bdef0e8ca60" data-action="Deal Block" data-label="Osito Lux Jacket (Women's)" data-dimension48="Osito Lux Jacket (Women's)" data-dimension25="$65" href="https://www.rei.com/product/250475/the-north-face-osito-lux-jacket-womens" 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="MZdvPZM2QPb9UsJtviZ5GJ" name="Osito Lux Jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/MZdvPZM2QPb9UsJtviZ5GJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1290" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/250475/the-north-face-osito-lux-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd10b8-d216-11f1-b523-4bdef0e8ca60" data-action="Deal Block" data-label="Osito Lux Jacket (Women's)" data-dimension48="Osito Lux Jacket (Women's)" data-dimension25="$65">Osito Lux Jacket (Women's): was $130 now $65</a></strong><br>The super soft Osito Jacket is made with a supersoft high-pile fleece and provides instant, lightweight warmth. It has a rib-knit collar, hem and cuffs for better warmth retention in chilly weather.<a class="view-deal button" href="https://www.rei.com/product/250475/the-north-face-osito-lux-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd10b8-d216-11f1-b523-4bdef0e8ca60" data-action="Deal Block" data-label="Osito Lux Jacket (Women's)" data-dimension48="Osito Lux Jacket (Women's)" data-dimension25="$65">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd1180-d216-11f1-8860-8be4a04140ad" data-action="Deal Block" data-label="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension48="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension25="$74" href="https://www.rei.com/product/C00697/the-north-face-yumiori-off-peak-full-zip-jacket-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="vamU4Ky2CB4QQda8nfrvm4" name="the north face yumiori jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vamU4Ky2CB4QQda8nfrvm4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C00697/the-north-face-yumiori-off-peak-full-zip-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd1180-d216-11f1-8860-8be4a04140ad" data-action="Deal Block" data-label="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension48="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension25="$74">Yumiori Off Peak Full-Zip Jacket - Women's: was $150 now $74</a></strong><br>The North Face's Yumiori fleece is a perfect hiking-slash-everyday fleece. Smartphones fit snugly into the chest pocket, one zipper even doubles as a hair tie, and it's finished with durable water repellent.<a class="view-deal button" href="https://www.rei.com/product/C00697/the-north-face-yumiori-off-peak-full-zip-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd1180-d216-11f1-8860-8be4a04140ad" data-action="Deal Block" data-label="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension48="Yumiori Off Peak Full-Zip Jacket - Women's" data-dimension25="$74">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd1248-d216-11f1-8850-a78ea49d6b96" data-action="Deal Block" data-label="Kikash Wind Jacket (Women's)" data-dimension48="Kikash Wind Jacket (Women's)" data-dimension25="$75" href="https://www.rei.com/product/254048/the-north-face-kikash-wind-jacket-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="euVM6xCmm2F8CfG6fPp57T" name="Kikash jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/euVM6xCmm2F8CfG6fPp57T-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/254048/the-north-face-kikash-wind-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd1248-d216-11f1-8850-a78ea49d6b96" data-action="Deal Block" data-label="Kikash Wind Jacket (Women's)" data-dimension48="Kikash Wind Jacket (Women's)" data-dimension25="$75">Kikash Wind Jacket (Women's): was $150 now $75</a></strong><br>The Kikash Wind Jacket is built for those days when the wind won't quit. The durable nylon fabric shrugs off mountain gusts while keeping you mobile, and reflective details add crucial visibility for early starts or late finishes. The secure zip pockets and snug elastic hem make it a reliable companion for unpredictable conditions.<a class="view-deal button" href="https://www.rei.com/product/254048/the-north-face-kikash-wind-jacket-womens" target="_blank" rel="nofollow" data-dimension112="fcbd1248-d216-11f1-8850-a78ea49d6b96" data-action="Deal Block" data-label="Kikash Wind Jacket (Women's)" data-dimension48="Kikash Wind Jacket (Women's)" data-dimension25="$75">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd13d8-d216-11f1-a8bb-b763a0088eca" data-action="Deal Block" data-label="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension48="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension25="$80" href="https://www.amazon.com/dp/B0FX8Z9VH4?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:662px;"><p class="vanilla-image-block" style="padding-top:226.59%;"><img id="4xm4Hfhke6ZnYYKS66BiEd" name="TNF Performance Fleece 1/4 Zip Jacket (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4xm4Hfhke6ZnYYKS66BiEd-1920-80.jpg" mos="" align="middle" fullscreen="" width="662" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0FX8Z9VH4?" target="_blank" rel="nofollow" data-dimension112="fcbd13d8-d216-11f1-a8bb-b763a0088eca" data-action="Deal Block" data-label="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension48="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension25="$80">TNF Performance Fleece 1/4 Zip Jacket (Women's): was $90 now $80</a></strong><br>It's hard to say no to this cozy fleece. It's made of soft polyester fleece, with an athletic look and lightweight feel. Make sure to grab one to layer up when temperatures drop on crisp fall days.<a class="view-deal button" href="https://www.amazon.com/dp/B0FX8Z9VH4?" target="_blank" rel="nofollow" data-dimension112="fcbd13d8-d216-11f1-a8bb-b763a0088eca" data-action="Deal Block" data-label="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension48="TNF Performance Fleece 1/4 Zip Jacket (Women's)" data-dimension25="$80">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd1446-d216-11f1-8253-5325d17d1fdd" data-action="Deal Block" data-label="Antora Jacket (Women's)" data-dimension48="Antora Jacket (Women's)" data-dimension25="$91" href="https://www.amazon.com/North-Face-Waterproof-Windproof-Adjustable/dp/B0F97WG8SQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:731px;"><p class="vanilla-image-block" style="padding-top:205.20%;"><img id="bN5BuTC38YdrnSkcwmxwpg" name="Antora Jacket (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bN5BuTC38YdrnSkcwmxwpg-1920-80.jpg" mos="" align="middle" fullscreen="" width="731" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/North-Face-Waterproof-Windproof-Adjustable/dp/B0F97WG8SQ" target="_blank" rel="nofollow" data-dimension112="fcbd1446-d216-11f1-8253-5325d17d1fdd" data-action="Deal Block" data-label="Antora Jacket (Women's)" data-dimension48="Antora Jacket (Women's)" data-dimension25="$91">Antora Jacket (Women's): was $130 now $91</a></strong><br>$91 is a great deal for this lightweight, weather-resistant shell. A core piece of outerwear no one should leave home without, the Antora Jacket boasts impressive rain-repellent capabilities. A drawstring-adjustable hood provides extra H2O protection, while a storm flap protects the main zipper from seepage during downpours. More importantly, as far as rain shells go, few can match the style factor of the Antora. <a class="view-deal button" href="https://www.amazon.com/North-Face-Waterproof-Windproof-Adjustable/dp/B0F97WG8SQ" target="_blank" rel="nofollow" data-dimension112="fcbd1446-d216-11f1-8253-5325d17d1fdd" data-action="Deal Block" data-label="Antora Jacket (Women's)" data-dimension48="Antora Jacket (Women's)" data-dimension25="$91">View Deal</a></p></div><div class="product"><a data-dimension112="fcbd14b4-d216-11f1-b60b-737447380189" data-action="Deal Block" data-label="Aconcagua 3 Jacket (Men's)" data-dimension48="Aconcagua 3 Jacket (Men's)" data-dimension25="$135" href="https://www.amazon.com/dp/B0F1WYVHWW?" 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:187.78%;"><img id="jLN4YbW223nKsxQxPVPWZR" name="TNF jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jLN4YbW223nKsxQxPVPWZR-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="1275" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0F1WYVHWW?" target="_blank" rel="nofollow" data-dimension112="fcbd14b4-d216-11f1-b60b-737447380189" data-action="Deal Block" data-label="Aconcagua 3 Jacket (Men's)" data-dimension48="Aconcagua 3 Jacket (Men's)" data-dimension25="$135">Aconcagua 3 Jacket (Men's): was $200 now $135</a></strong><br>This lightweight puffer blends recycled down with synthetic insulation for maximum warmth and weather resistance in a tidy, easy-to-stow package. Zonal sheet insulation and a water-repellant finish round out the feature set.<a class="view-deal button" href="https://www.amazon.com/dp/B0F1WYVHWW?" target="_blank" rel="nofollow" data-dimension112="fcbd14b4-d216-11f1-b60b-737447380189" data-action="Deal Block" data-label="Aconcagua 3 Jacket (Men's)" data-dimension48="Aconcagua 3 Jacket (Men's)" data-dimension25="$135">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Asics running shoes are up to 56% off — 17 best deals to set PRs this fall ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Asics running shoes are some of the most popular on the market — and some of the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> we've tested, too. If you're hoping to improve your PRs this fall, make sure to check out these Asics running shoe deals at Amazon.</p><p>My favorite deal right now is the <a href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Cobalt/dp/B0F63X6TCG/" target="_blank" rel="nofollow">Asics Novablast 5 on sale from $129</a>. It's a previous winner on our list of the best running shoes, and it's still a great buy today because of its comfortable, smooth feel.</p><p><strong>Note: </strong>Prices can vary depending on the size and color you choose — check out any different color options in your size to find the best deals.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links </span></h3><ul><li><a href="https://www.amazon.com/stores/ASICS/page/3D51EC88-4320-4F70-8CAF-9E7C77D723E2" target="_blank" rel="nofollow"><strong>shop all Asics deals on Amazon</strong></a></li><li><strong>Asics Gel-Pulse 16 (Women's): </strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow"><strong>was $100 now from $47</strong></a></li><li><strong>Asics Gel-Kayano 30 (Women's): </strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow"><strong>was $160 now from $69</strong></a></li><li><strong>Asics Versablast 4 Running Shoes (Women's): </strong><a href="https://www.amazon.com/ASICS-Womens-VERSABLAST-Running-Shoes/dp/B0F5CSWHS6" target="_blank" rel="nofollow"><strong>was $80 now from $69</strong></a></li><li><strong>Asics Glideride Max (Men's): </strong><a href="https://www.amazon.com/ASICS-GLIDERIDE-Running-Monument-Vanilla/dp/B0CT9HG8TB" target="_blank" rel="nofollow"><strong>was $170 now from $80</strong></a></li><li><strong>Asics Sonicblast (Men's): </strong><a href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow"><strong>was $180 now from $94</strong></a></li><li><strong>Asics Novablast 5 (Men's): </strong><a href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow"><strong>was $160 now from $129</strong></a></li><li><strong>Asics Gel-Nimbus 28 Running Shoes (Women's): </strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Nimbus%C2%AE-Mineral-Medium/dp/B0FFH17JS8" target="_blank" rel="nofollow"><strong>was $169 now $147</strong></a></li><li><strong>Asics Superblast 2 (Unisex): </strong><a href="https://www.amazon.com/ASICS-Unisex-SUPERBLAST-EKIDEN-Running/dp/B0FFKVZV1D" target="_blank" rel="nofollow"><strong>was $199 now $149</strong></a></li></ul><h3 class="article-body__section" id="section-asics-shoes"><span>Asics Shoes</span></h3><div class="product"><a data-dimension112="a0202538-d1f4-11f1-9cb8-b593bf1a3183" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47" href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:48.88%;"><img id="Woj2dkTQp2a9nuWs5nFuDg" name="Gel-Pulse 16 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Woj2dkTQp2a9nuWs5nFuDg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="565" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow" data-dimension112="a0202538-d1f4-11f1-9cb8-b593bf1a3183" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47">Gel-Pulse 16 (Women's): was $100 now $47</a></strong><br>This is one of the cheapest Asics running shoe deals you'll find, so this shoe is definitely worth a purchase. However, stock is limited, so act fast! It's regarded as a comfy and versatile sneaker that suits neutral runners in particular.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow" data-dimension112="a0202538-d1f4-11f1-9cb8-b593bf1a3183" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47">View Deal</a></p></div><div class="product"><a data-dimension112="a02025e2-d1f4-11f1-a79a-cb46f224f8bf" data-action="Deal Block" data-label="Gel-Venture 9 Running Shoes (Men's)" data-dimension48="Gel-Venture 9 Running Shoes (Men's)" data-dimension25="$59" href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Sheet/dp/B0B47YVK12" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1157px;"><p class="vanilla-image-block" style="padding-top:45.55%;"><img id="FGGxuYvWwdm7YU6PMbr6B9" name="Gel-Venture 9 Running Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FGGxuYvWwdm7YU6PMbr6B9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1157" height="527" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Sheet/dp/B0B47YVK12" target="_blank" rel="nofollow" data-dimension112="a02025e2-d1f4-11f1-a79a-cb46f224f8bf" data-action="Deal Block" data-label="Gel-Venture 9 Running Shoes (Men's)" data-dimension48="Gel-Venture 9 Running Shoes (Men's)" data-dimension25="$59">Gel-Venture 9 Running Shoes (Men's): was $80 now $59</a></strong><br>Score the Asics Gel Venture 9 Running Shoes on sale from $59 at Amazon. These shoes are excellent for trail runs, with a traction pattern designed to support you on outdoor terrain. They also feature Rearfoot GEL to absorb impact and super-soft AMPLIFOAM cushioning.<a class="view-deal button" href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Sheet/dp/B0B47YVK12" target="_blank" rel="nofollow" data-dimension112="a02025e2-d1f4-11f1-a79a-cb46f224f8bf" data-action="Deal Block" data-label="Gel-Venture 9 Running Shoes (Men's)" data-dimension48="Gel-Venture 9 Running Shoes (Men's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="a02026b4-d1f4-11f1-bdf6-134aa1c2f7f4" data-action="Deal Block" data-label="Upcourt 6 Volleyball Shoes (Women's)" data-dimension48="Upcourt 6 Volleyball Shoes (Women's)" data-dimension25="$64" href="https://www.amazon.com/ASICS-Womens-Upcourt-Volleyball-Shoes/dp/B0GXCKGNNZ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1164px;"><p class="vanilla-image-block" style="padding-top:43.47%;"><img id="GzQK5bL8yXHCDELcBXQfqK" name="Upcourt 6 Volleyball Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GzQK5bL8yXHCDELcBXQfqK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1164" height="506" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Upcourt-Volleyball-Shoes/dp/B0GXCKGNNZ" target="_blank" rel="nofollow" data-dimension112="a02026b4-d1f4-11f1-bdf6-134aa1c2f7f4" data-action="Deal Block" data-label="Upcourt 6 Volleyball Shoes (Women's)" data-dimension48="Upcourt 6 Volleyball Shoes (Women's)" data-dimension25="$64">Upcourt 6 Volleyball Shoes (Women's): was $75 now $64</a></strong><br>Put your best foot forward on the volleyball court with the Asics Upcourt 6. These have a lightweight and flexible design, paired with soft and breathable mesh paneling across the upper. <a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Upcourt-Volleyball-Shoes/dp/B0GXCKGNNZ" target="_blank" rel="nofollow" data-dimension112="a02026b4-d1f4-11f1-bdf6-134aa1c2f7f4" data-action="Deal Block" data-label="Upcourt 6 Volleyball Shoes (Women's)" data-dimension48="Upcourt 6 Volleyball Shoes (Women's)" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="a020279a-d1f4-11f1-947a-b3fde5bcce92" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67" href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" 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="wMYSVC2325TPeXMt7TJ9t3" name="Asics Novablast 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wMYSVC2325TPeXMt7TJ9t3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" target="_blank" rel="nofollow" data-dimension112="a020279a-d1f4-11f1-947a-b3fde5bcce92" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67">Women's Novablast 4: was $140 now $67</a></strong><br>Old but gold. While the Novablast 6 is now available, the Novablast 4 is beloved by the Tom's Guide team — especially our Fitness Editor Jane McGuire, who wrote: "I've run over 100 miles in this shoe, and it's still one I reach for when I'm heading out for a long run."<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" target="_blank" rel="nofollow" data-dimension112="a020279a-d1f4-11f1-947a-b3fde5bcce92" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67">View Deal</a></p></div><div class="product"><a data-dimension112="a0202876-d1f4-11f1-b807-b516cc2e03a1" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69" href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1160px;"><p class="vanilla-image-block" style="padding-top:46.29%;"><img id="iHsvdtLnzyeWEyCZV8HBYe" name="Gel-Kayano 30 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iHsvdtLnzyeWEyCZV8HBYe-1920-80.jpg" mos="" align="middle" fullscreen="" width="1160" height="537" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow" data-dimension112="a0202876-d1f4-11f1-b807-b516cc2e03a1" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69">Gel-Kayano 30 (Women's): was $160 now $69</a></strong><br>The Gel Kayano 30 running shoes are an older model, but they're amazingly cheap with 56% off. They're designed to provide advanced stability and soft cushioning for neutral runners and overpronators alike. Our Deals Editor-in-Chief, Louis Ramirez, wrote: "I've been using these shoes for almost two years now. (I loved them so much I bought a second pair months after buying my first pair). I find that they're great for casual runs on the treadmill, HIIT sessions, and long distance running outdoors."<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow" data-dimension112="a0202876-d1f4-11f1-b807-b516cc2e03a1" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="a0202952-d1f4-11f1-ac11-659affe7682f" data-action="Deal Block" data-label="Versablast 4 Running Shoes (Women's)" data-dimension48="Versablast 4 Running Shoes (Women's)" data-dimension25="$69" href="https://www.amazon.com/ASICS-Womens-VERSABLAST-Running-Shoes/dp/B0F5CSWHS6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:46.97%;"><img id="aXzwegkSgySzw9j2Pjj42L" name="Versablast 4 Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aXzwegkSgySzw9j2Pjj42L-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="543" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-VERSABLAST-Running-Shoes/dp/B0F5CSWHS6" target="_blank" rel="nofollow" data-dimension112="a0202952-d1f4-11f1-ac11-659affe7682f" data-action="Deal Block" data-label="Versablast 4 Running Shoes (Women's)" data-dimension48="Versablast 4 Running Shoes (Women's)" data-dimension25="$69">Versablast 4 Running Shoes (Women's): was $80 now $69</a></strong><br>Packed with Amplifoam+ cushioning, the Asics Versablast 4 are built to be both soft and responsive — and are now a steal with this discount. The Cream/Hazy Lilac colorway is gorgeous, too.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-VERSABLAST-Running-Shoes/dp/B0F5CSWHS6" target="_blank" rel="nofollow" data-dimension112="a0202952-d1f4-11f1-ac11-659affe7682f" data-action="Deal Block" data-label="Versablast 4 Running Shoes (Women's)" data-dimension48="Versablast 4 Running Shoes (Women's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="a0202a10-d1f4-11f1-b27a-1f9e9608d731" data-action="Deal Block" data-label="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension48="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension25="$69" href="https://www.amazon.com/ASICS-Gel-Contend-Running-Shoes-Black/dp/B0GGCWVYC7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:45.42%;"><img id="yyx3Rc6DdUotj8NTEwFwLa" name="Gel-Contend 10 Road Running Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yyx3Rc6DdUotj8NTEwFwLa-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="525" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Gel-Contend-Running-Shoes-Black/dp/B0GGCWVYC7" target="_blank" rel="nofollow" data-dimension112="a0202a10-d1f4-11f1-b27a-1f9e9608d731" data-action="Deal Block" data-label="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension48="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension25="$69">Gel-Contend 10 Road Running Shoes (Men's): was $80 now $69</a></strong><br>The 10th iteration of Asics' budget-friendly road running shoes have dropped in price! They feature Amplifoam+ cushioning to support your runs and have a lightweight and breathable mesh upper.<a class="view-deal button" href="https://www.amazon.com/ASICS-Gel-Contend-Running-Shoes-Black/dp/B0GGCWVYC7" target="_blank" rel="nofollow" data-dimension112="a0202a10-d1f4-11f1-b27a-1f9e9608d731" data-action="Deal Block" data-label="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension48="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="a0202a74-d1f4-11f1-b2f8-7183f742df15" data-action="Deal Block" data-label="Gel-Excite 11 (Women's)" data-dimension48="Gel-Excite 11 (Women's)" data-dimension25="$74" href="https://www.amazon.com/ASICS-Womens-Gel-Excite-Running-MORGANITE/dp/B0F64HHL33/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1163px;"><p class="vanilla-image-block" style="padding-top:58.73%;"><img id="ApA8TRKTowTCiYpEXd3LDK" name="gel excite" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ApA8TRKTowTCiYpEXd3LDK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1163" height="683" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Excite-Running-MORGANITE/dp/B0F64HHL33/" target="_blank" rel="nofollow" data-dimension112="a0202a74-d1f4-11f1-b2f8-7183f742df15" data-action="Deal Block" data-label="Gel-Excite 11 (Women's)" data-dimension48="Gel-Excite 11 (Women's)" data-dimension25="$74">Gel-Excite 11 (Women's): was $90 now $74</a></strong><br>The Gel-Excite 11 are now on sale for a discount, bringing their price under $75. Designed for running and fitness, it brings a higher stack and a super soft and comfortable feel underfoot. The reflective details are also handy if you're working out in low light.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Excite-Running-MORGANITE/dp/B0F64HHL33/" target="_blank" rel="nofollow" data-dimension112="a0202a74-d1f4-11f1-b2f8-7183f742df15" data-action="Deal Block" data-label="Gel-Excite 11 (Women's)" data-dimension48="Gel-Excite 11 (Women's)" data-dimension25="$74">View Deal</a></p></div><div class="product"><a data-dimension112="a0202ad8-d1f4-11f1-8e40-9fd6e825c988" data-action="Deal Block" data-label="GT-1000 14 Running Shoes (Women's)" data-dimension48="GT-1000 14 Running Shoes (Women's)" data-dimension25="$79" href="https://www.amazon.com/ASICS-Womens-GT-1000-Running-Shoes/dp/B0F5YXB9D6/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:49.57%;"><img id="ep5SNjswGLfrwX5LzXTK85" name="GT-1000 14 Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ep5SNjswGLfrwX5LzXTK85-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="573" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-GT-1000-Running-Shoes/dp/B0F5YXB9D6/" target="_blank" rel="nofollow" data-dimension112="a0202ad8-d1f4-11f1-8e40-9fd6e825c988" data-action="Deal Block" data-label="GT-1000 14 Running Shoes (Women's)" data-dimension48="GT-1000 14 Running Shoes (Women's)" data-dimension25="$79">GT-1000 14 Running Shoes (Women's): was $110 now $79</a></strong><br>Asics' affordable series of GT-1000 running shoes are even better with a discount. The 14th iteration of the shoe features a 3D guidance system built in to keep you stable on your feet as you run! <a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-GT-1000-Running-Shoes/dp/B0F5YXB9D6/" target="_blank" rel="nofollow" data-dimension112="a0202ad8-d1f4-11f1-8e40-9fd6e825c988" data-action="Deal Block" data-label="GT-1000 14 Running Shoes (Women's)" data-dimension48="GT-1000 14 Running Shoes (Women's)" data-dimension25="$79">View Deal</a></p></div><div class="product"><a data-dimension112="a0202b3c-d1f4-11f1-a461-b7fff4f10045" data-action="Deal Block" data-label="Glideride Max (Men's)" data-dimension48="Glideride Max (Men's)" data-dimension25="$89" href="https://www.amazon.com/ASICS-GLIDERIDE-Running-Monument-Vanilla/dp/B0CT9HG8TB" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1157px;"><p class="vanilla-image-block" style="padding-top:50.91%;"><img id="ur2nzvnBf49fo9rfEakkpK" name="Glideride Max (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ur2nzvnBf49fo9rfEakkpK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1157" height="589" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-GLIDERIDE-Running-Monument-Vanilla/dp/B0CT9HG8TB" target="_blank" rel="nofollow" data-dimension112="a0202b3c-d1f4-11f1-a461-b7fff4f10045" data-action="Deal Block" data-label="Glideride Max (Men's)" data-dimension48="Glideride Max (Men's)" data-dimension25="$89">Glideride Max (Men's): was $170 now $89</a></strong><br>At 48% off, the Asics Glideride are a steal. These come with GuideSole tech to help you save energy, keeping you going for longer. You also get FF Blast Max cushioning for a lightweight, soft feel.<a class="view-deal button" href="https://www.amazon.com/ASICS-GLIDERIDE-Running-Monument-Vanilla/dp/B0CT9HG8TB" target="_blank" rel="nofollow" data-dimension112="a0202b3c-d1f4-11f1-a461-b7fff4f10045" data-action="Deal Block" data-label="Glideride Max (Men's)" data-dimension48="Glideride Max (Men's)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="a0202ba0-d1f4-11f1-94e7-f3067fc0bb7e" data-action="Deal Block" data-label="Gel-Cumulus 27 (Women's)" data-dimension48="Gel-Cumulus 27 (Women's)" data-dimension25="$89" href="https://www.amazon.com/ASICS-Womens-Gel-Cumulus-Running-Shoes/dp/B0D3XQD6XB" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1146px;"><p class="vanilla-image-block" style="padding-top:75.04%;"><img id="vX8LzAvqyUKUxX8CnAhi9b" name="Gel-Cumulus 27 Running Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vX8LzAvqyUKUxX8CnAhi9b-1920-80.webp" mos="" align="middle" fullscreen="" width="1146" height="860" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Cumulus-Running-Shoes/dp/B0D3XQD6XB" target="_blank" rel="nofollow" data-dimension112="a0202ba0-d1f4-11f1-94e7-f3067fc0bb7e" data-action="Deal Block" data-label="Gel-Cumulus 27 (Women's)" data-dimension48="Gel-Cumulus 27 (Women's)" data-dimension25="$89">Gel-Cumulus 27 (Women's): was $140 now $89</a></strong><br>The Asics Gel-Cumulus 27 often gets overlooked because of the popularity of the Novablast and Gel-Nimbus lines, but it's usually available for less than those shoes, and it's a comfortable, fairly lightweight daily trainer in its own right. We've tested the newer Gel-Cumulus 28 model, and it's not a major update on the 27, so this deal on the older shoe is much better value.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Cumulus-Running-Shoes/dp/B0D3XQD6XB" target="_blank" rel="nofollow" data-dimension112="a0202ba0-d1f4-11f1-94e7-f3067fc0bb7e" data-action="Deal Block" data-label="Gel-Cumulus 27 (Women's)" data-dimension48="Gel-Cumulus 27 (Women's)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="a0202bfa-d1f4-11f1-914a-99923e4e1c22" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$94" href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1528px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="rD9sdYvxaqtEV2BgyMfTx" name="Sonicblast" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rD9sdYvxaqtEV2BgyMfTx-1920-80.jpg" mos="" align="middle" fullscreen="" width="1528" height="1146" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow" data-dimension112="a0202bfa-d1f4-11f1-914a-99923e4e1c22" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$94">Sonicblast Road Running Shoes (Men's): was $180 now $94</a></strong><br>Suited for both fast runs and everyday training, the Asics Sonicblast are super lightweight and propulsive. There's an Astroplate mechanism to help you shoot forward, as well as FF Blast Max and FF Turbo cushioning for a bouncy feel underfoot.<a class="view-deal button" href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow" data-dimension112="a0202bfa-d1f4-11f1-914a-99923e4e1c22" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$94">View Deal</a></p></div><div class="product"><a data-dimension112="a0202c5e-d1f4-11f1-9225-994cdda92eb4" data-action="Deal Block" data-label="Gel-K1011 Sneakers (Men's)" data-dimension48="Gel-K1011 Sneakers (Men's)" data-dimension25="$99" href="https://www.amazon.com/ASICS-Unisex-GEL-K1011-Sportstyle-Shoes/dp/B0GZWDQHQH" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:48.88%;"><img id="BuedRkRo9MvaiVx2pUuCR6" name="Gel-K1011 Sneakers (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BuedRkRo9MvaiVx2pUuCR6-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="565" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Unisex-GEL-K1011-Sportstyle-Shoes/dp/B0GZWDQHQH" target="_blank" rel="nofollow" data-dimension112="a0202c5e-d1f4-11f1-9225-994cdda92eb4" data-action="Deal Block" data-label="Gel-K1011 Sneakers (Men's)" data-dimension48="Gel-K1011 Sneakers (Men's)" data-dimension25="$99">Gel-K1011 Sneakers (Men's): was $140 now $99</a></strong><br>An iconic design and reliable comfort, what more could you want from a pair of sneakers? It takes cues from some of Asics' best shoes, with Gel-Kayano-inspired panels on the upper and the same midsole tooling system as the Gel-Cumulus 17.<a class="view-deal button" href="https://www.amazon.com/ASICS-Unisex-GEL-K1011-Sportstyle-Shoes/dp/B0GZWDQHQH" target="_blank" rel="nofollow" data-dimension112="a0202c5e-d1f4-11f1-9225-994cdda92eb4" data-action="Deal Block" data-label="Gel-K1011 Sneakers (Men's)" data-dimension48="Gel-K1011 Sneakers (Men's)" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="a0202cc2-d1f4-11f1-acaa-ad86d472601b" data-action="Deal Block" data-label="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension48="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension25="$99" href="https://www.amazon.com/ASICS-Trail-Running-Shoes-Aurora/dp/B0F643LGDW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1146px;"><p class="vanilla-image-block" style="padding-top:75.04%;"><img id="QxFrVRALdPPJaEfNpoi4mP" name="Asics Fuji Lite 6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QxFrVRALdPPJaEfNpoi4mP-1920-80.png" mos="" align="middle" fullscreen="" width="1146" height="860" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Trail-Running-Shoes-Aurora/dp/B0F643LGDW" target="_blank" rel="nofollow" data-dimension112="a0202cc2-d1f4-11f1-acaa-ad86d472601b" data-action="Deal Block" data-label="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension48="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension25="$99">Fuji Lite 6 Trail Running Shoes (Men's): was $130 now $99</a></strong><br>The Fuji Lite 6 is a lightweight trail-running shoe that offers reliable grip and a speedy, responsive ride for your off-road runs. It's also <a href="https://www.asics.com/us/en-us/fuji-lite-6/p/ANA_1011C086-600.html" target="_blank" rel="nofollow">on sale at Asics</a>. For $99, it's a steal.<a class="view-deal button" href="https://www.amazon.com/ASICS-Trail-Running-Shoes-Aurora/dp/B0F643LGDW" target="_blank" rel="nofollow" data-dimension112="a0202cc2-d1f4-11f1-acaa-ad86d472601b" data-action="Deal Block" data-label="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension48="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="a0202d26-d1f4-11f1-bc55-0b91dfbb0b83" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129" href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1166px;"><p class="vanilla-image-block" style="padding-top:48.80%;"><img id="4pk4xESon4iEcQDmd7TqZF" name="Novablast 5 (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4pk4xESon4iEcQDmd7TqZF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1166" height="569" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow" data-dimension112="a0202d26-d1f4-11f1-bc55-0b91dfbb0b83" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129">Novablast 5 (Men's): was $160 now $129</a></strong><br>We voted the Asics Novablast 6 as the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> you can buy right now, but before that, the <a href="https://www.tomsguide.com/wellness/running/asics-novablast-5-review">Asics Novablast 5</a> had the top spot. They quickly stood out for their balance of comfort, support and fun, making them a pair of shoes you will actually look forward to running in. They're lightweight, durable and have a soft, springy feel underfoot that helps absorb impact while keeping runs enjoyable.<a class="view-deal button" href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow" data-dimension112="a0202d26-d1f4-11f1-bc55-0b91dfbb0b83" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129">View Deal</a></p></div><div class="product"><a data-dimension112="a0202d9e-d1f4-11f1-abe6-29e36dbd375e" data-action="Deal Block" data-label="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension48="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension25="$147" href="https://www.amazon.com/ASICS-Womens-Gel-Nimbus%C2%AE-Mineral-Medium/dp/B0FFH17JS8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1155px;"><p class="vanilla-image-block" style="padding-top:51.77%;"><img id="X9qqNMWyXyfKdx37i3V59b" name="Gel-Nimbus 28 Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/X9qqNMWyXyfKdx37i3V59b-1920-80.jpg" mos="" align="middle" fullscreen="" width="1155" height="598" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Nimbus%C2%AE-Mineral-Medium/dp/B0FFH17JS8" target="_blank" rel="nofollow" data-dimension112="a0202d9e-d1f4-11f1-abe6-29e36dbd375e" data-action="Deal Block" data-label="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension48="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension25="$147">Gel-Nimbus 28 Running Shoes (Women's): was $169 now $147</a></strong><br>If you love the style of the Gel-Nimbus running shoes and want the latest in the line, the Gel-Nimbus 28 have a small but significant 13% discount. They deliver a lightweight upper with plush cushioning and PureGel tech to propel you forwards.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Nimbus%C2%AE-Mineral-Medium/dp/B0FFH17JS8" target="_blank" rel="nofollow" data-dimension112="a0202d9e-d1f4-11f1-abe6-29e36dbd375e" data-action="Deal Block" data-label="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension48="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension25="$147">View Deal</a></p></div><div class="product"><a data-dimension112="a0202e0c-d1f4-11f1-b5ca-df3bb42b8d24" data-action="Deal Block" data-label="Superblast 2 (Unisex)" data-dimension48="Superblast 2 (Unisex)" data-dimension25="$149" href="https://www.amazon.com/ASICS-Unisex-SUPERBLAST-EKIDEN-Running/dp/B0FFLKC1J7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1146px;"><p class="vanilla-image-block" style="padding-top:75.04%;"><img id="6Ag4kfoS5FeA9rMnnhtmCF" name="Superblast 2 Ekiden (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6Ag4kfoS5FeA9rMnnhtmCF-1920-80.webp" mos="" align="middle" fullscreen="" width="1146" height="860" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Unisex-SUPERBLAST-EKIDEN-Running/dp/B0FFLKC1J7" target="_blank" rel="nofollow" data-dimension112="a0202e0c-d1f4-11f1-b5ca-df3bb42b8d24" data-action="Deal Block" data-label="Superblast 2 (Unisex)" data-dimension48="Superblast 2 (Unisex)" data-dimension25="$149">Superblast 2 (Unisex): was $200 now $149</a></strong><br>In our <a href="https://www.tomsguide.com/wellness/running/i-ran-35-miles-in-the-asics-superblast-2-and-its-one-of-the-best-new-shoes-of-2024">Asics Superblast 2 review</a> we said they were one of the best shoes of the year they released. There are newer shoes on the market, but now, you can get them for 25% off. Our testers thought the Superblast 2 was amazing for long runs, and found it to be lightweight and versatile.<a class="view-deal button" href="https://www.amazon.com/ASICS-Unisex-SUPERBLAST-EKIDEN-Running/dp/B0FFLKC1J7" target="_blank" rel="nofollow" data-dimension112="a0202e0c-d1f4-11f1-b5ca-df3bb42b8d24" data-action="Deal Block" data-label="Superblast 2 (Unisex)" data-dimension48="Superblast 2 (Unisex)" data-dimension25="$149">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Running&view_mode=savings_squad&widget_title=Shop+More+Running+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 getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      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%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      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-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .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 {      width: 100%;      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;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .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);    }    .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;    }    /*       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: 120px;      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: 16px 16px 8px;      }            .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-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .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;      }      /* 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;        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;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .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: 14px;      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-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      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-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .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;    }    .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;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .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::-webkit-scrollbar {      display: none;    }    .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;      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 {    }    .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.40);        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: #1f69ff; 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: #0056e0; 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; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \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">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \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>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \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>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \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 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/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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>        \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();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          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();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    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);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             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 (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    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 (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = 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') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // 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) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              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 !== 'date_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 handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          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');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          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');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    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;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   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;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = 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 });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          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;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               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 = 'date_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')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        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';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        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 fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&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=${siteParam}&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 && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&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 seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.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) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          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();                }                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;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                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 || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[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) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    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');                    url.searchParams.append('rows', this.getRowsLimit().toString());          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 = this.getRowsLimit();          // 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 : 'date_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}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_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, idx) => {              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}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${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);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } 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)}${_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 = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \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 = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \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 = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \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 tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_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>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}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_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 ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_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) {            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;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // 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');            }            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);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } 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/running/asics-running-shoes-are-up-to-56-percent-off-17-best-deals-to-set-prs-this-fall</link>
                                                                            <description>
                            <![CDATA[ Don't miss your chance to get 50% off or more on Asics running shoes! Some of the best pairs we've tested are dropping in price. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NiVfeV4w2NAteCPmj6hAWW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/X9uTEjvQTcK8rRPWsELtu3-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Oct 2026 11:41:02 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Running]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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/X9uTEjvQTcK8rRPWsELtu3-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Asics Novablast 5 running shoes]]></media:description>                                                            <media:text><![CDATA[Asics Novablast 5 running shoes]]></media:text>
                                <media:title type="plain"><![CDATA[Asics Novablast 5 running shoes]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/X9uTEjvQTcK8rRPWsELtu3-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Asics running shoes are some of the most popular on the market — and some of the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> we've tested, too. If you're hoping to improve your PRs this fall, make sure to check out these Asics running shoe deals at Amazon.</p><p>My favorite deal right now is the <a href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Cobalt/dp/B0F63X6TCG/" target="_blank" rel="nofollow">Asics Novablast 5 on sale from $129</a>. It's a previous winner on our list of the best running shoes, and it's still a great buy today because of its comfortable, smooth feel.</p><p><strong>Note: </strong>Prices can vary depending on the size and color you choose — check out any different color options in your size to find the best deals.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links </span></h3><ul><li><a href="https://www.amazon.com/stores/ASICS/page/3D51EC88-4320-4F70-8CAF-9E7C77D723E2" target="_blank" rel="nofollow"><strong>shop all Asics deals on Amazon</strong></a></li><li><strong>Asics Gel-Pulse 16 (Women's): </strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow"><strong>was $100 now from $47</strong></a></li><li><strong>Asics Gel-Kayano 30 (Women's): </strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow"><strong>was $160 now from $69</strong></a></li><li><strong>Asics Versablast 4 Running Shoes (Women's): </strong><a href="https://www.amazon.com/ASICS-Womens-VERSABLAST-Running-Shoes/dp/B0F5CSWHS6" target="_blank" rel="nofollow"><strong>was $80 now from $69</strong></a></li><li><strong>Asics Glideride Max (Men's): </strong><a href="https://www.amazon.com/ASICS-GLIDERIDE-Running-Monument-Vanilla/dp/B0CT9HG8TB" target="_blank" rel="nofollow"><strong>was $170 now from $80</strong></a></li><li><strong>Asics Sonicblast (Men's): </strong><a href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow"><strong>was $180 now from $94</strong></a></li><li><strong>Asics Novablast 5 (Men's): </strong><a href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow"><strong>was $160 now from $129</strong></a></li><li><strong>Asics Gel-Nimbus 28 Running Shoes (Women's): </strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Nimbus%C2%AE-Mineral-Medium/dp/B0FFH17JS8" target="_blank" rel="nofollow"><strong>was $169 now $147</strong></a></li><li><strong>Asics Superblast 2 (Unisex): </strong><a href="https://www.amazon.com/ASICS-Unisex-SUPERBLAST-EKIDEN-Running/dp/B0FFKVZV1D" target="_blank" rel="nofollow"><strong>was $199 now $149</strong></a></li></ul><h3 class="article-body__section" id="section-asics-shoes"><span>Asics Shoes</span></h3><div class="product"><a data-dimension112="a0202538-d1f4-11f1-9cb8-b593bf1a3183" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47" href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:48.88%;"><img id="Woj2dkTQp2a9nuWs5nFuDg" name="Gel-Pulse 16 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Woj2dkTQp2a9nuWs5nFuDg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="565" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow" data-dimension112="a0202538-d1f4-11f1-9cb8-b593bf1a3183" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47">Gel-Pulse 16 (Women's): was $100 now $47</a></strong><br>This is one of the cheapest Asics running shoe deals you'll find, so this shoe is definitely worth a purchase. However, stock is limited, so act fast! It's regarded as a comfy and versatile sneaker that suits neutral runners in particular.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-Midnight/dp/B0F63XHPW5" target="_blank" rel="nofollow" data-dimension112="a0202538-d1f4-11f1-9cb8-b593bf1a3183" data-action="Deal Block" data-label="Gel-Pulse 16 (Women's)" data-dimension48="Gel-Pulse 16 (Women's)" data-dimension25="$47">View Deal</a></p></div><div class="product"><a data-dimension112="a02025e2-d1f4-11f1-a79a-cb46f224f8bf" data-action="Deal Block" data-label="Gel-Venture 9 Running Shoes (Men's)" data-dimension48="Gel-Venture 9 Running Shoes (Men's)" data-dimension25="$59" href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Sheet/dp/B0B47YVK12" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1157px;"><p class="vanilla-image-block" style="padding-top:45.55%;"><img id="FGGxuYvWwdm7YU6PMbr6B9" name="Gel-Venture 9 Running Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FGGxuYvWwdm7YU6PMbr6B9-1920-80.jpg" mos="" align="middle" fullscreen="" width="1157" height="527" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Sheet/dp/B0B47YVK12" target="_blank" rel="nofollow" data-dimension112="a02025e2-d1f4-11f1-a79a-cb46f224f8bf" data-action="Deal Block" data-label="Gel-Venture 9 Running Shoes (Men's)" data-dimension48="Gel-Venture 9 Running Shoes (Men's)" data-dimension25="$59">Gel-Venture 9 Running Shoes (Men's): was $80 now $59</a></strong><br>Score the Asics Gel Venture 9 Running Shoes on sale from $59 at Amazon. These shoes are excellent for trail runs, with a traction pattern designed to support you on outdoor terrain. They also feature Rearfoot GEL to absorb impact and super-soft AMPLIFOAM cushioning.<a class="view-deal button" href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Sheet/dp/B0B47YVK12" target="_blank" rel="nofollow" data-dimension112="a02025e2-d1f4-11f1-a79a-cb46f224f8bf" data-action="Deal Block" data-label="Gel-Venture 9 Running Shoes (Men's)" data-dimension48="Gel-Venture 9 Running Shoes (Men's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="a02026b4-d1f4-11f1-bdf6-134aa1c2f7f4" data-action="Deal Block" data-label="Upcourt 6 Volleyball Shoes (Women's)" data-dimension48="Upcourt 6 Volleyball Shoes (Women's)" data-dimension25="$64" href="https://www.amazon.com/ASICS-Womens-Upcourt-Volleyball-Shoes/dp/B0GXCKGNNZ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1164px;"><p class="vanilla-image-block" style="padding-top:43.47%;"><img id="GzQK5bL8yXHCDELcBXQfqK" name="Upcourt 6 Volleyball Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GzQK5bL8yXHCDELcBXQfqK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1164" height="506" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Upcourt-Volleyball-Shoes/dp/B0GXCKGNNZ" target="_blank" rel="nofollow" data-dimension112="a02026b4-d1f4-11f1-bdf6-134aa1c2f7f4" data-action="Deal Block" data-label="Upcourt 6 Volleyball Shoes (Women's)" data-dimension48="Upcourt 6 Volleyball Shoes (Women's)" data-dimension25="$64">Upcourt 6 Volleyball Shoes (Women's): was $75 now $64</a></strong><br>Put your best foot forward on the volleyball court with the Asics Upcourt 6. These have a lightweight and flexible design, paired with soft and breathable mesh paneling across the upper. <a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Upcourt-Volleyball-Shoes/dp/B0GXCKGNNZ" target="_blank" rel="nofollow" data-dimension112="a02026b4-d1f4-11f1-bdf6-134aa1c2f7f4" data-action="Deal Block" data-label="Upcourt 6 Volleyball Shoes (Women's)" data-dimension48="Upcourt 6 Volleyball Shoes (Women's)" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="a020279a-d1f4-11f1-947a-b3fde5bcce92" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67" href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" 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="wMYSVC2325TPeXMt7TJ9t3" name="Asics Novablast 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wMYSVC2325TPeXMt7TJ9t3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" target="_blank" rel="nofollow" data-dimension112="a020279a-d1f4-11f1-947a-b3fde5bcce92" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67">Women's Novablast 4: was $140 now $67</a></strong><br>Old but gold. While the Novablast 6 is now available, the Novablast 4 is beloved by the Tom's Guide team — especially our Fitness Editor Jane McGuire, who wrote: "I've run over 100 miles in this shoe, and it's still one I reach for when I'm heading out for a long run."<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-NOVABLAST-Running-Expanse/dp/B0CFP3J6RB" target="_blank" rel="nofollow" data-dimension112="a020279a-d1f4-11f1-947a-b3fde5bcce92" data-action="Deal Block" data-label="Women's Novablast 4" data-dimension48="Women's Novablast 4" data-dimension25="$67">View Deal</a></p></div><div class="product"><a data-dimension112="a0202876-d1f4-11f1-b807-b516cc2e03a1" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69" href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1160px;"><p class="vanilla-image-block" style="padding-top:46.29%;"><img id="iHsvdtLnzyeWEyCZV8HBYe" name="Gel-Kayano 30 (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iHsvdtLnzyeWEyCZV8HBYe-1920-80.jpg" mos="" align="middle" fullscreen="" width="1160" height="537" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow" data-dimension112="a0202876-d1f4-11f1-b807-b516cc2e03a1" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69">Gel-Kayano 30 (Women's): was $160 now $69</a></strong><br>The Gel Kayano 30 running shoes are an older model, but they're amazingly cheap with 56% off. They're designed to provide advanced stability and soft cushioning for neutral runners and overpronators alike. Our Deals Editor-in-Chief, Louis Ramirez, wrote: "I've been using these shoes for almost two years now. (I loved them so much I bought a second pair months after buying my first pair). I find that they're great for casual runs on the treadmill, HIIT sessions, and long distance running outdoors."<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Kayano-Running-Shoes/dp/B0BY3PYZ2D" target="_blank" rel="nofollow" data-dimension112="a0202876-d1f4-11f1-b807-b516cc2e03a1" data-action="Deal Block" data-label="Gel-Kayano 30 (Women's)" data-dimension48="Gel-Kayano 30 (Women's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="a0202952-d1f4-11f1-ac11-659affe7682f" data-action="Deal Block" data-label="Versablast 4 Running Shoes (Women's)" data-dimension48="Versablast 4 Running Shoes (Women's)" data-dimension25="$69" href="https://www.amazon.com/ASICS-Womens-VERSABLAST-Running-Shoes/dp/B0F5CSWHS6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:46.97%;"><img id="aXzwegkSgySzw9j2Pjj42L" name="Versablast 4 Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aXzwegkSgySzw9j2Pjj42L-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="543" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-VERSABLAST-Running-Shoes/dp/B0F5CSWHS6" target="_blank" rel="nofollow" data-dimension112="a0202952-d1f4-11f1-ac11-659affe7682f" data-action="Deal Block" data-label="Versablast 4 Running Shoes (Women's)" data-dimension48="Versablast 4 Running Shoes (Women's)" data-dimension25="$69">Versablast 4 Running Shoes (Women's): was $80 now $69</a></strong><br>Packed with Amplifoam+ cushioning, the Asics Versablast 4 are built to be both soft and responsive — and are now a steal with this discount. The Cream/Hazy Lilac colorway is gorgeous, too.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-VERSABLAST-Running-Shoes/dp/B0F5CSWHS6" target="_blank" rel="nofollow" data-dimension112="a0202952-d1f4-11f1-ac11-659affe7682f" data-action="Deal Block" data-label="Versablast 4 Running Shoes (Women's)" data-dimension48="Versablast 4 Running Shoes (Women's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="a0202a10-d1f4-11f1-b27a-1f9e9608d731" data-action="Deal Block" data-label="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension48="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension25="$69" href="https://www.amazon.com/ASICS-Gel-Contend-Running-Shoes-Black/dp/B0GGCWVYC7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:45.42%;"><img id="yyx3Rc6DdUotj8NTEwFwLa" name="Gel-Contend 10 Road Running Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yyx3Rc6DdUotj8NTEwFwLa-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="525" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Gel-Contend-Running-Shoes-Black/dp/B0GGCWVYC7" target="_blank" rel="nofollow" data-dimension112="a0202a10-d1f4-11f1-b27a-1f9e9608d731" data-action="Deal Block" data-label="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension48="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension25="$69">Gel-Contend 10 Road Running Shoes (Men's): was $80 now $69</a></strong><br>The 10th iteration of Asics' budget-friendly road running shoes have dropped in price! They feature Amplifoam+ cushioning to support your runs and have a lightweight and breathable mesh upper.<a class="view-deal button" href="https://www.amazon.com/ASICS-Gel-Contend-Running-Shoes-Black/dp/B0GGCWVYC7" target="_blank" rel="nofollow" data-dimension112="a0202a10-d1f4-11f1-b27a-1f9e9608d731" data-action="Deal Block" data-label="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension48="Gel-Contend 10 Road Running Shoes (Men's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="a0202a74-d1f4-11f1-b2f8-7183f742df15" data-action="Deal Block" data-label="Gel-Excite 11 (Women's)" data-dimension48="Gel-Excite 11 (Women's)" data-dimension25="$74" href="https://www.amazon.com/ASICS-Womens-Gel-Excite-Running-MORGANITE/dp/B0F64HHL33/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1163px;"><p class="vanilla-image-block" style="padding-top:58.73%;"><img id="ApA8TRKTowTCiYpEXd3LDK" name="gel excite" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ApA8TRKTowTCiYpEXd3LDK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1163" height="683" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Excite-Running-MORGANITE/dp/B0F64HHL33/" target="_blank" rel="nofollow" data-dimension112="a0202a74-d1f4-11f1-b2f8-7183f742df15" data-action="Deal Block" data-label="Gel-Excite 11 (Women's)" data-dimension48="Gel-Excite 11 (Women's)" data-dimension25="$74">Gel-Excite 11 (Women's): was $90 now $74</a></strong><br>The Gel-Excite 11 are now on sale for a discount, bringing their price under $75. Designed for running and fitness, it brings a higher stack and a super soft and comfortable feel underfoot. The reflective details are also handy if you're working out in low light.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Excite-Running-MORGANITE/dp/B0F64HHL33/" target="_blank" rel="nofollow" data-dimension112="a0202a74-d1f4-11f1-b2f8-7183f742df15" data-action="Deal Block" data-label="Gel-Excite 11 (Women's)" data-dimension48="Gel-Excite 11 (Women's)" data-dimension25="$74">View Deal</a></p></div><div class="product"><a data-dimension112="a0202ad8-d1f4-11f1-8e40-9fd6e825c988" data-action="Deal Block" data-label="GT-1000 14 Running Shoes (Women's)" data-dimension48="GT-1000 14 Running Shoes (Women's)" data-dimension25="$79" href="https://www.amazon.com/ASICS-Womens-GT-1000-Running-Shoes/dp/B0F5YXB9D6/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:49.57%;"><img id="ep5SNjswGLfrwX5LzXTK85" name="GT-1000 14 Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ep5SNjswGLfrwX5LzXTK85-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="573" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-GT-1000-Running-Shoes/dp/B0F5YXB9D6/" target="_blank" rel="nofollow" data-dimension112="a0202ad8-d1f4-11f1-8e40-9fd6e825c988" data-action="Deal Block" data-label="GT-1000 14 Running Shoes (Women's)" data-dimension48="GT-1000 14 Running Shoes (Women's)" data-dimension25="$79">GT-1000 14 Running Shoes (Women's): was $110 now $79</a></strong><br>Asics' affordable series of GT-1000 running shoes are even better with a discount. The 14th iteration of the shoe features a 3D guidance system built in to keep you stable on your feet as you run! <a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-GT-1000-Running-Shoes/dp/B0F5YXB9D6/" target="_blank" rel="nofollow" data-dimension112="a0202ad8-d1f4-11f1-8e40-9fd6e825c988" data-action="Deal Block" data-label="GT-1000 14 Running Shoes (Women's)" data-dimension48="GT-1000 14 Running Shoes (Women's)" data-dimension25="$79">View Deal</a></p></div><div class="product"><a data-dimension112="a0202b3c-d1f4-11f1-a461-b7fff4f10045" data-action="Deal Block" data-label="Glideride Max (Men's)" data-dimension48="Glideride Max (Men's)" data-dimension25="$89" href="https://www.amazon.com/ASICS-GLIDERIDE-Running-Monument-Vanilla/dp/B0CT9HG8TB" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1157px;"><p class="vanilla-image-block" style="padding-top:50.91%;"><img id="ur2nzvnBf49fo9rfEakkpK" name="Glideride Max (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ur2nzvnBf49fo9rfEakkpK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1157" height="589" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-GLIDERIDE-Running-Monument-Vanilla/dp/B0CT9HG8TB" target="_blank" rel="nofollow" data-dimension112="a0202b3c-d1f4-11f1-a461-b7fff4f10045" data-action="Deal Block" data-label="Glideride Max (Men's)" data-dimension48="Glideride Max (Men's)" data-dimension25="$89">Glideride Max (Men's): was $170 now $89</a></strong><br>At 48% off, the Asics Glideride are a steal. These come with GuideSole tech to help you save energy, keeping you going for longer. You also get FF Blast Max cushioning for a lightweight, soft feel.<a class="view-deal button" href="https://www.amazon.com/ASICS-GLIDERIDE-Running-Monument-Vanilla/dp/B0CT9HG8TB" target="_blank" rel="nofollow" data-dimension112="a0202b3c-d1f4-11f1-a461-b7fff4f10045" data-action="Deal Block" data-label="Glideride Max (Men's)" data-dimension48="Glideride Max (Men's)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="a0202ba0-d1f4-11f1-94e7-f3067fc0bb7e" data-action="Deal Block" data-label="Gel-Cumulus 27 (Women's)" data-dimension48="Gel-Cumulus 27 (Women's)" data-dimension25="$89" href="https://www.amazon.com/ASICS-Womens-Gel-Cumulus-Running-Shoes/dp/B0D3XQD6XB" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1146px;"><p class="vanilla-image-block" style="padding-top:75.04%;"><img id="vX8LzAvqyUKUxX8CnAhi9b" name="Gel-Cumulus 27 Running Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vX8LzAvqyUKUxX8CnAhi9b-1920-80.webp" mos="" align="middle" fullscreen="" width="1146" height="860" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Cumulus-Running-Shoes/dp/B0D3XQD6XB" target="_blank" rel="nofollow" data-dimension112="a0202ba0-d1f4-11f1-94e7-f3067fc0bb7e" data-action="Deal Block" data-label="Gel-Cumulus 27 (Women's)" data-dimension48="Gel-Cumulus 27 (Women's)" data-dimension25="$89">Gel-Cumulus 27 (Women's): was $140 now $89</a></strong><br>The Asics Gel-Cumulus 27 often gets overlooked because of the popularity of the Novablast and Gel-Nimbus lines, but it's usually available for less than those shoes, and it's a comfortable, fairly lightweight daily trainer in its own right. We've tested the newer Gel-Cumulus 28 model, and it's not a major update on the 27, so this deal on the older shoe is much better value.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Cumulus-Running-Shoes/dp/B0D3XQD6XB" target="_blank" rel="nofollow" data-dimension112="a0202ba0-d1f4-11f1-94e7-f3067fc0bb7e" data-action="Deal Block" data-label="Gel-Cumulus 27 (Women's)" data-dimension48="Gel-Cumulus 27 (Women's)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="a0202bfa-d1f4-11f1-914a-99923e4e1c22" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$94" href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1528px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="rD9sdYvxaqtEV2BgyMfTx" name="Sonicblast" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rD9sdYvxaqtEV2BgyMfTx-1920-80.jpg" mos="" align="middle" fullscreen="" width="1528" height="1146" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow" data-dimension112="a0202bfa-d1f4-11f1-914a-99923e4e1c22" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$94">Sonicblast Road Running Shoes (Men's): was $180 now $94</a></strong><br>Suited for both fast runs and everyday training, the Asics Sonicblast are super lightweight and propulsive. There's an Astroplate mechanism to help you shoot forward, as well as FF Blast Max and FF Turbo cushioning for a bouncy feel underfoot.<a class="view-deal button" href="https://www.amazon.com/Asics-SONICBLAST-Running-Winter-Stillwater/dp/B0DPLQ32YV" target="_blank" rel="nofollow" data-dimension112="a0202bfa-d1f4-11f1-914a-99923e4e1c22" data-action="Deal Block" data-label="Sonicblast Road Running Shoes (Men's)" data-dimension48="Sonicblast Road Running Shoes (Men's)" data-dimension25="$94">View Deal</a></p></div><div class="product"><a data-dimension112="a0202c5e-d1f4-11f1-9225-994cdda92eb4" data-action="Deal Block" data-label="Gel-K1011 Sneakers (Men's)" data-dimension48="Gel-K1011 Sneakers (Men's)" data-dimension25="$99" href="https://www.amazon.com/ASICS-Unisex-GEL-K1011-Sportstyle-Shoes/dp/B0GZWDQHQH" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1156px;"><p class="vanilla-image-block" style="padding-top:48.88%;"><img id="BuedRkRo9MvaiVx2pUuCR6" name="Gel-K1011 Sneakers (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BuedRkRo9MvaiVx2pUuCR6-1920-80.jpg" mos="" align="middle" fullscreen="" width="1156" height="565" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Unisex-GEL-K1011-Sportstyle-Shoes/dp/B0GZWDQHQH" target="_blank" rel="nofollow" data-dimension112="a0202c5e-d1f4-11f1-9225-994cdda92eb4" data-action="Deal Block" data-label="Gel-K1011 Sneakers (Men's)" data-dimension48="Gel-K1011 Sneakers (Men's)" data-dimension25="$99">Gel-K1011 Sneakers (Men's): was $140 now $99</a></strong><br>An iconic design and reliable comfort, what more could you want from a pair of sneakers? It takes cues from some of Asics' best shoes, with Gel-Kayano-inspired panels on the upper and the same midsole tooling system as the Gel-Cumulus 17.<a class="view-deal button" href="https://www.amazon.com/ASICS-Unisex-GEL-K1011-Sportstyle-Shoes/dp/B0GZWDQHQH" target="_blank" rel="nofollow" data-dimension112="a0202c5e-d1f4-11f1-9225-994cdda92eb4" data-action="Deal Block" data-label="Gel-K1011 Sneakers (Men's)" data-dimension48="Gel-K1011 Sneakers (Men's)" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="a0202cc2-d1f4-11f1-acaa-ad86d472601b" data-action="Deal Block" data-label="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension48="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension25="$99" href="https://www.amazon.com/ASICS-Trail-Running-Shoes-Aurora/dp/B0F643LGDW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1146px;"><p class="vanilla-image-block" style="padding-top:75.04%;"><img id="QxFrVRALdPPJaEfNpoi4mP" name="Asics Fuji Lite 6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QxFrVRALdPPJaEfNpoi4mP-1920-80.png" mos="" align="middle" fullscreen="" width="1146" height="860" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Trail-Running-Shoes-Aurora/dp/B0F643LGDW" target="_blank" rel="nofollow" data-dimension112="a0202cc2-d1f4-11f1-acaa-ad86d472601b" data-action="Deal Block" data-label="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension48="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension25="$99">Fuji Lite 6 Trail Running Shoes (Men's): was $130 now $99</a></strong><br>The Fuji Lite 6 is a lightweight trail-running shoe that offers reliable grip and a speedy, responsive ride for your off-road runs. It's also <a href="https://www.asics.com/us/en-us/fuji-lite-6/p/ANA_1011C086-600.html" target="_blank" rel="nofollow">on sale at Asics</a>. For $99, it's a steal.<a class="view-deal button" href="https://www.amazon.com/ASICS-Trail-Running-Shoes-Aurora/dp/B0F643LGDW" target="_blank" rel="nofollow" data-dimension112="a0202cc2-d1f4-11f1-acaa-ad86d472601b" data-action="Deal Block" data-label="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension48="Fuji Lite 6 Trail Running Shoes (Men's)" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="a0202d26-d1f4-11f1-bc55-0b91dfbb0b83" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129" href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1166px;"><p class="vanilla-image-block" style="padding-top:48.80%;"><img id="4pk4xESon4iEcQDmd7TqZF" name="Novablast 5 (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4pk4xESon4iEcQDmd7TqZF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1166" height="569" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow" data-dimension112="a0202d26-d1f4-11f1-bc55-0b91dfbb0b83" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129">Novablast 5 (Men's): was $160 now $129</a></strong><br>We voted the Asics Novablast 6 as the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> you can buy right now, but before that, the <a href="https://www.tomsguide.com/wellness/running/asics-novablast-5-review">Asics Novablast 5</a> had the top spot. They quickly stood out for their balance of comfort, support and fun, making them a pair of shoes you will actually look forward to running in. They're lightweight, durable and have a soft, springy feel underfoot that helps absorb impact while keeping runs enjoyable.<a class="view-deal button" href="https://www.amazon.com/ASICS-NOVABLAST-Running-Shoes-Aurora/dp/B0FWYJD4VC" target="_blank" rel="nofollow" data-dimension112="a0202d26-d1f4-11f1-bc55-0b91dfbb0b83" data-action="Deal Block" data-label="Novablast 5 (Men's)" data-dimension48="Novablast 5 (Men's)" data-dimension25="$129">View Deal</a></p></div><div class="product"><a data-dimension112="a0202d9e-d1f4-11f1-abe6-29e36dbd375e" data-action="Deal Block" data-label="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension48="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension25="$147" href="https://www.amazon.com/ASICS-Womens-Gel-Nimbus%C2%AE-Mineral-Medium/dp/B0FFH17JS8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1155px;"><p class="vanilla-image-block" style="padding-top:51.77%;"><img id="X9qqNMWyXyfKdx37i3V59b" name="Gel-Nimbus 28 Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/X9qqNMWyXyfKdx37i3V59b-1920-80.jpg" mos="" align="middle" fullscreen="" width="1155" height="598" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Gel-Nimbus%C2%AE-Mineral-Medium/dp/B0FFH17JS8" target="_blank" rel="nofollow" data-dimension112="a0202d9e-d1f4-11f1-abe6-29e36dbd375e" data-action="Deal Block" data-label="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension48="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension25="$147">Gel-Nimbus 28 Running Shoes (Women's): was $169 now $147</a></strong><br>If you love the style of the Gel-Nimbus running shoes and want the latest in the line, the Gel-Nimbus 28 have a small but significant 13% discount. They deliver a lightweight upper with plush cushioning and PureGel tech to propel you forwards.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Gel-Nimbus%C2%AE-Mineral-Medium/dp/B0FFH17JS8" target="_blank" rel="nofollow" data-dimension112="a0202d9e-d1f4-11f1-abe6-29e36dbd375e" data-action="Deal Block" data-label="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension48="Gel-Nimbus 28 Running Shoes (Women's)" data-dimension25="$147">View Deal</a></p></div><div class="product"><a data-dimension112="a0202e0c-d1f4-11f1-b5ca-df3bb42b8d24" data-action="Deal Block" data-label="Superblast 2 (Unisex)" data-dimension48="Superblast 2 (Unisex)" data-dimension25="$149" href="https://www.amazon.com/ASICS-Unisex-SUPERBLAST-EKIDEN-Running/dp/B0FFLKC1J7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1146px;"><p class="vanilla-image-block" style="padding-top:75.04%;"><img id="6Ag4kfoS5FeA9rMnnhtmCF" name="Superblast 2 Ekiden (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6Ag4kfoS5FeA9rMnnhtmCF-1920-80.webp" mos="" align="middle" fullscreen="" width="1146" height="860" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Unisex-SUPERBLAST-EKIDEN-Running/dp/B0FFLKC1J7" target="_blank" rel="nofollow" data-dimension112="a0202e0c-d1f4-11f1-b5ca-df3bb42b8d24" data-action="Deal Block" data-label="Superblast 2 (Unisex)" data-dimension48="Superblast 2 (Unisex)" data-dimension25="$149">Superblast 2 (Unisex): was $200 now $149</a></strong><br>In our <a href="https://www.tomsguide.com/wellness/running/i-ran-35-miles-in-the-asics-superblast-2-and-its-one-of-the-best-new-shoes-of-2024">Asics Superblast 2 review</a> we said they were one of the best shoes of the year they released. There are newer shoes on the market, but now, you can get them for 25% off. Our testers thought the Superblast 2 was amazing for long runs, and found it to be lightweight and versatile.<a class="view-deal button" href="https://www.amazon.com/ASICS-Unisex-SUPERBLAST-EKIDEN-Running/dp/B0FFLKC1J7" target="_blank" rel="nofollow" data-dimension112="a0202e0c-d1f4-11f1-b5ca-df3bb42b8d24" data-action="Deal Block" data-label="Superblast 2 (Unisex)" data-dimension48="Superblast 2 (Unisex)" data-dimension25="$149">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Running&view_mode=savings_squad&widget_title=Shop+More+Running+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 getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      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%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      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-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .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 {      width: 100%;      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;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .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);    }    .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;    }    /*       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: 120px;      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: 16px 16px 8px;      }            .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-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .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;      }      /* 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;        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;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .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: 14px;      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-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      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-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .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;    }    .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;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .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::-webkit-scrollbar {      display: none;    }    .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;      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 {    }    .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.40);        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: #1f69ff; 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: #0056e0; 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; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \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">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \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>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \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>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \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 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/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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>        \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();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          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();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    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);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             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 (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    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 (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = 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') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // 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) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              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 !== 'date_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 handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          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');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          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');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    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;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   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;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = 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 });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          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;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               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 = 'date_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')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        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';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        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 fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&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=${siteParam}&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 && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&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 seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.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) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          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();                }                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;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                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 || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[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) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    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');                    url.searchParams.append('rows', this.getRowsLimit().toString());          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 = this.getRowsLimit();          // 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 : 'date_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}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_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, idx) => {              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}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${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);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } 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)}${_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 = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \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 = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \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 = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \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 tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_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>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}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_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 ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_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) {            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;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // 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');            }            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);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } 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[ Feeling exhausted after the clocks went back? 5 fast ways to reset your circadian rhythm today ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Has the time change this weekend knocked you for six? It's a common feeling, say sleep experts. </p><div  class="fancy-box"><div class="fancy_box-title">Struggling to wake up in the morning?</div><div class="fancy_box_body"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' ><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Zqdw63TtsLDE2TeDqRFvYW" name="Hatch Sleep Clock sleep" caption="" alt="On the left is a close up of the Hatch Sleep Clock set to sunrise mode. On the right is tester Ruth Jones sleeping" src="https://cdn.mos.cms.futurecdn.net/Zqdw63TtsLDE2TeDqRFvYW-1920-80.jpg" mos="" link="" align="" fullscreen="" width="" height="" attribution="" endorsement="" class="pinterest-pin-exclude"></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p class="fancy-box__body-text">The <a data-analytics-id="inline-link" href="https://www.tomsguide.com/wellness/sleep/best-sunrise-alarm-clocks">best sunrise alarm clocks</a> can be a game changer in your morning routine at this time of year, helping you wake up with tons of energy</p></div></div><p>You may have thought that extra hour in bed could help you pay back some of your <a href="https://www.tomsguide.com/news/what-is-sleep-debt-and-can-it-ever-really-be-paid-back">sleep debt</a>, but unfortunately, it's not that simple. Instead the clock change can throw off your circadian rhythm, making it harder to fall asleep and wake up on time for several days. </p><p>"While feeling exhausted after gaining an hour may seem paradoxical, it can happen when the body clock has not yet adjusted, causing some people to wake earlier than intended or experience disrupted sleep," explains board-certified physician Dr. Hanul Bhandari, who specialises in neurology and sleep medicine  </p><p>Following the transition from British Summer Time (BST) to Greenwich Mean Time (GMT) this weekend, I've caught up with Dr. Bhandari and board-certified physician Dr. Robert Thompson to find out how we can minimise the impact the time change has on our sleep.</p><h2 id="what-is-my-circadian-rhythm">What is my circadian rhythm? </h2><p>In a nutshell, your <a href="https://www.tomsguide.com/wellness/sleep/how-to-fix-circadian-rhythm">circadian rhythm</a> is your 24-hour internal body clock that manages <a href="https://www.tomsguide.com/wellness/sleep/sleep-hormones">hormones</a> in your sleep/wake cycle. That means it controls when your body releases melatonin, making you feel sleepy, and when it releases cortisol that makes you feel alert. </p><p>The circadian rhythm is largely influenced by light and temperature cues. Alongside sleep, it plays a key role in regulating mood, energy levels, and metabolism. </p><p>Therefore, keeping your body clock aligned by sleeping and eating at roughly the same time each day and night helps keep your mood and energy levels as stable as they can be. </p><h2 class="article-body__section" id="section-5-ways-to-reset-your-circadian-rhythm"><span>5 ways to reset your circadian rhythm</span></h2><p>On the surface, an extra hour in bed sounds like a great deal. However, a clock change and shorter days means your circadian rhythm is likely out of sync. Here’s how to get it back on track…</p><h2 id="1-wake-up-at-the-same-time-every-day">1. Wake up at the same time every day </h2><p>The clocks have just changed, so your body is likely feeling a bit confused. The best way to help it get back on the straight and narrow is by <a href="https://www.tomsguide.com/wellness/sleep/i-asked-the-experts-whats-the-number-one-rule-of-good-sleep-hygiene-and-they-all-said-the-same-thing">going to bed and waking up at roughly the same time every day</a> – that includes on weekends (sorry, party animals) and after a poor night's sleep (resist the urge to crash before you've eaten dinner). </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bXTa6uznnwqoiu9VHxNWWP" name="REM sleep checking" alt="The main image shows a woman sitting up in bed and stretching her arms above her head. In the bottom left is a close up of a phone showing sleep tracking data" src="https://cdn.mos.cms.futurecdn.net/bXTa6uznnwqoiu9VHxNWWP-1920-80.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>This anchors your circadian rhythm, meaning your body gets used to waking up on time and falling asleep easily when you get into bed. Essentially, your sleep and wake hormones work in consistent harmony when you stick to a <a href="https://www.tomsguide.com/wellness/sleep/science-says-regular-good-quality-sleep-can-add-up-to-four-years-to-your-life-these-are-the-hacks-i-swear-by-to-fall-asleep-at-the-same-time-every-night">regular sleep schedule</a>. </p><p>"Predictable cues help your circadian system adapt with less friction," summarises Dr. Thompson. </p><h2 id="2-shift-your-bedtime-in-15-minute-increments">2. Shift your bedtime in 15 minute increments </h2><p>"You can’t make up for chronic sleep deficiency in one night, but you can kick-start a change to your routine," says Dr. Bhandari. </p><p>If a regular sleep schedule is the goal, you need to establish one that suits your lifestyle and biology. </p><p>The <a href="https://www.tomsguide.com/wellness/sleep/i-tried-the-7-1-sleep-rule-doctors-rate-as-the-best-way-to-stop-3-a-m-wake-ups-heres-why-it-works">7:1 sleep rule</a> can help you get there. This rule is based on the concept that getting seven hours of sleep per night and going to bed within the same one-hour window are the keys to healthy sleep.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WfD76UjCcsnyBMsMr5hXtS" name="60 minute bedtime routine" alt="On the left, a woman prepares to get into bed at night. On the right, a woman wakes up feeling refreshed and stretches wide" src="https://cdn.mos.cms.futurecdn.net/WfD76UjCcsnyBMsMr5hXtS-1920-80.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>So, if you know you need to be up in time for work at 6am, your strict bedtime should be 11 AM at the latest. If your bedtime is wildly out of whack after the time jump, move it in 15 minute increments, starting tonight. 15 minute shifts are best, says Dr. Bhandri, because while "the clock changes immediately," your "internal clock takes time to adjust." </p><h2 id="3-get-plenty-of-morning-sunlight">3. Get plenty of morning sunlight </h2><p>People are always surprised to hear that the holy grail of great sleep isn't what you do in the evening, but more to do with what you do in the morning to anchor your circadian rhythm.  </p><p>The clocks going back means that, depending on exactly when you wake up, mornings should be lighter for the majority of us – albeit temporarily. Capitalising on this <a href="https://www.tomsguide.com/wellness/sleep/better-sleep-starts-with-morning-sunlight-new-study-suggests">morning light</a> by drawing back the curtains as soon as you wake up, or heading outside for a morning walk within the first hour of waking, triggers the production of key get-up-and-go hormones, AKA serotonin and cortisol, boosting energy in the morning and improving sleep at night.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8AATdVPop8qGeGiDztrUFV" name="Sleeping better and waking with more energy" alt="A woman with long dark hair sits up in bed with her arms stretched in the air as sunlight streams in through her open curtains" src="https://cdn.mos.cms.futurecdn.net/8AATdVPop8qGeGiDztrUFV-1920-80.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: Getty Images)</span></figcaption></figure><p>A <a href="https://journals.sagepub.com/doi/10.1177/13591053241262643" target="_blank">2024 study</a> examined the effect sunlight exposure has on sleep. Participants were exposed to sunlight at different times of day and for different durations, and the research concludes those who got sunlight in the morning recorded better sleep efficiency – falling asleep fast after getting into bed – as well as fewer nighttime awakenings than those who got sunlight later in the day.</p><p>Dr. Bhandari explains, "The effect of morning light is that it advances the clock, while evening and night light delays the clock." This means that even on cloudy days, the morning light kick starts your energy levels, while bright light in the evening can keep you alert when you want to fall asleep. </p><h2 id="4-eat-meals-at-the-same-time-every-day">4. Eat meals at the same time every day</h2><p>What does your diet have to do with you sleep? Quite a lot, actually.  </p><p>What and when you eat directly influences your hormone levels, digestion and body temperature, and therefore your internal body clock. </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:2119px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CMPeMuZ9RHUGSsyaMh6Wti" name="Eating veggies" alt="A person holding a bowl of salad" src="https://cdn.mos.cms.futurecdn.net/CMPeMuZ9RHUGSsyaMh6Wti-1920-80.jpg" mos="" align="middle" fullscreen="" width="2119" height="1192" 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>So, eating balanced meals at regular times – in accordance with the time shift and making sure to leave at least three hours between your last meal and bedtime – will help reset your circadian rhythm. If you don’t adjust your mealtimes to your new time zone, you run the risk of blood sugar fluctuations <a href="https://www.tomsguide.com/wellness/sleep-problems/experts-share-7-major-sleep-hygiene-mistakes-that-cause-3-a-m-wake-ups-and-insomnia-and-how-to-fix-them">waking you up at 3AM</a>.</p><p>It's also worth noting that it is important to avoid stimulants like caffeine and spicy food too close to bedtime. </p><h2 id="5-limit-bright-lights-at-night">5. Limit bright lights at night </h2><p>While that bright light in the morning is a blessing for your sleep, in the evening it's not so helpful. </p><p>Naturally, the evenings will be darker after the time change, so any light you get in the evenings is likely to be artificial. That's the sleep doctor's worst nightmare, as this light keeps your brain active while you should be winding down for bed. </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rVMJFzox7vq8EpLFmiDXBQ" name="TG_Sleep_280426_ps0153" alt="A woman sits up in bed reading a book in dim lighting" src="https://cdn.mos.cms.futurecdn.net/rVMJFzox7vq8EpLFmiDXBQ-1920-80.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>Of course you still need some light in the evenings. It is recommended you use red light lamps (<a href="https://www.amazon.co.uk/Therapy-Wavelength-Control-Bedroom-Nursery/dp/B0GXVX7GQ7" target="_blank">like this £13.99 lamp at Amazon</a>) for the best sleep outcomes, as this type of light encourages melatonin production rather than tricking your mind into thinking it is daytime. Dim lights with amber hues are also ideal for creating a cosy atmosphere without a harsh glare. </p><p>"Make the bedroom a screen-free zone and switch off gadgets at least an hour before bed," advises Dr. Bhandari. In place of screens, he says you should establish a "calming wind-down routine," perhaps involving some <a href="https://www.tomsguide.com/wellness/sleep/reduce-your-stress-before-bed-by-68-percent-with-this-easy-6-minute-nighttime-routine">reading</a>, <a href="https://www.tomsguide.com/wellness/sleep/best-before-bed-stretches">stretching</a>, or <a href="https://www.tomsguide.com/wellness/sleep/sleep-meditation">meditating</a>. </p><h2 class="article-body__section" id="section-5-signs-your-circadian-rhythm-is-misaligned"><span>5 signs your circadian rhythm is misaligned </span></h2><p>By now you know a well regulated circadian rhythm can do wonders for your ability to fall asleep fast, sleep soundly through the night, and wake up with energy, but how can you tell if yours needs a little fine tuning? </p><p>Keep an eye out for these signs. </p><ul><li><strong>You find it hard to fall asleep:</strong> Having trouble dropping off usually means your body hasn't produced enough melatonin for you to feel sleepy.</li><li><strong>Waking up is a struggle: </strong>On the flip side, struggling to wake up means there's too much melatonin present in the morning. But<strong> </strong>"exposure to light in the morning" can fight off that sleepiness, helping to "synchronise the clock," says Dr. Thompson.</li><li><strong>Your energy dips during the day: </strong>"Your circadian rhythm is an internal timing system that helps regulate when you are most alert and when you are most tired," says Dr. Bhandari. Crashes in energy may indicate your body clock is not running efficiently.</li><li><strong>Your appetite is erratic: </strong>Your circadian rhythm directly controls hunger hormones (ghrelin and leptin) as well as sleep ones. When it is synchronised, you should feel hungry at same time each day.</li><li><strong>You rarely go to bed or wake up at the same time:  </strong>"Circadian misalignment can contribute to sleep disturbance or daytime sleepiness," explains Dr. Thompson. This can get in the way of a regular sleep routine as you're awake through the night and tempted to nap during the day.</li></ul><div data-widget-type="multimodelreview" data-model-name="Hatch Sleep Clock,Hatch Restore 3,Dreamegg Sunrise 1,Philips SmartSleep Sleep and Wake-up Light,BIB_WJ Smart Sunrise Alarm Clock" data-widget-title="Today's best sunrise alarm clock deals"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep/feeling-exhausted-after-the-clocks-went-back-5-fast-ways-to-reset-your-circadian-rhythm-today</link>
                                                                            <description>
                            <![CDATA[ An extra hour in bed sounds great, but experts say it may actually be bad for your sleep routine and energy levels. Here's how to stay on track... ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KdvxpP4qPrTWawFEy7HASo</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/T8rHTbtX8phDTuXBcEh4sb-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Oct 2026 10:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sleep]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Eve Davies ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/MyvW9VLArpyJoqfRp3GDDb-320-70.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/T8rHTbtX8phDTuXBcEh4sb-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A woman lies in bed in the dark looking at an alarm clock she holds in her hand, showing the time is 3 a.m. ]]></media:description>                                                            <media:text><![CDATA[A woman lies in bed in the dark looking at an alarm clock she holds in her hand, showing the time is 3 a.m. ]]></media:text>
                                <media:title type="plain"><![CDATA[A woman lies in bed in the dark looking at an alarm clock she holds in her hand, showing the time is 3 a.m. ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/T8rHTbtX8phDTuXBcEh4sb-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Has the time change this weekend knocked you for six? It's a common feeling, say sleep experts. </p><div  class="fancy-box"><div class="fancy_box-title">Struggling to wake up in the morning?</div><div class="fancy_box_body"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' ><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Zqdw63TtsLDE2TeDqRFvYW" name="Hatch Sleep Clock sleep" caption="" alt="On the left is a close up of the Hatch Sleep Clock set to sunrise mode. On the right is tester Ruth Jones sleeping" src="https://cdn.mos.cms.futurecdn.net/Zqdw63TtsLDE2TeDqRFvYW-1920-80.jpg" mos="" link="" align="" fullscreen="" width="" height="" attribution="" endorsement="" class="pinterest-pin-exclude"></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p class="fancy-box__body-text">The <a data-analytics-id="inline-link" href="https://www.tomsguide.com/wellness/sleep/best-sunrise-alarm-clocks">best sunrise alarm clocks</a> can be a game changer in your morning routine at this time of year, helping you wake up with tons of energy</p></div></div><p>You may have thought that extra hour in bed could help you pay back some of your <a href="https://www.tomsguide.com/news/what-is-sleep-debt-and-can-it-ever-really-be-paid-back">sleep debt</a>, but unfortunately, it's not that simple. Instead the clock change can throw off your circadian rhythm, making it harder to fall asleep and wake up on time for several days. </p><p>"While feeling exhausted after gaining an hour may seem paradoxical, it can happen when the body clock has not yet adjusted, causing some people to wake earlier than intended or experience disrupted sleep," explains board-certified physician Dr. Hanul Bhandari, who specialises in neurology and sleep medicine  </p><p>Following the transition from British Summer Time (BST) to Greenwich Mean Time (GMT) this weekend, I've caught up with Dr. Bhandari and board-certified physician Dr. Robert Thompson to find out how we can minimise the impact the time change has on our sleep.</p><h2 id="what-is-my-circadian-rhythm">What is my circadian rhythm? </h2><p>In a nutshell, your <a href="https://www.tomsguide.com/wellness/sleep/how-to-fix-circadian-rhythm">circadian rhythm</a> is your 24-hour internal body clock that manages <a href="https://www.tomsguide.com/wellness/sleep/sleep-hormones">hormones</a> in your sleep/wake cycle. That means it controls when your body releases melatonin, making you feel sleepy, and when it releases cortisol that makes you feel alert. </p><p>The circadian rhythm is largely influenced by light and temperature cues. Alongside sleep, it plays a key role in regulating mood, energy levels, and metabolism. </p><p>Therefore, keeping your body clock aligned by sleeping and eating at roughly the same time each day and night helps keep your mood and energy levels as stable as they can be. </p><h2 class="article-body__section" id="section-5-ways-to-reset-your-circadian-rhythm"><span>5 ways to reset your circadian rhythm</span></h2><p>On the surface, an extra hour in bed sounds like a great deal. However, a clock change and shorter days means your circadian rhythm is likely out of sync. Here’s how to get it back on track…</p><h2 id="1-wake-up-at-the-same-time-every-day">1. Wake up at the same time every day </h2><p>The clocks have just changed, so your body is likely feeling a bit confused. The best way to help it get back on the straight and narrow is by <a href="https://www.tomsguide.com/wellness/sleep/i-asked-the-experts-whats-the-number-one-rule-of-good-sleep-hygiene-and-they-all-said-the-same-thing">going to bed and waking up at roughly the same time every day</a> – that includes on weekends (sorry, party animals) and after a poor night's sleep (resist the urge to crash before you've eaten dinner). </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bXTa6uznnwqoiu9VHxNWWP" name="REM sleep checking" alt="The main image shows a woman sitting up in bed and stretching her arms above her head. In the bottom left is a close up of a phone showing sleep tracking data" src="https://cdn.mos.cms.futurecdn.net/bXTa6uznnwqoiu9VHxNWWP-1920-80.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>This anchors your circadian rhythm, meaning your body gets used to waking up on time and falling asleep easily when you get into bed. Essentially, your sleep and wake hormones work in consistent harmony when you stick to a <a href="https://www.tomsguide.com/wellness/sleep/science-says-regular-good-quality-sleep-can-add-up-to-four-years-to-your-life-these-are-the-hacks-i-swear-by-to-fall-asleep-at-the-same-time-every-night">regular sleep schedule</a>. </p><p>"Predictable cues help your circadian system adapt with less friction," summarises Dr. Thompson. </p><h2 id="2-shift-your-bedtime-in-15-minute-increments">2. Shift your bedtime in 15 minute increments </h2><p>"You can’t make up for chronic sleep deficiency in one night, but you can kick-start a change to your routine," says Dr. Bhandari. </p><p>If a regular sleep schedule is the goal, you need to establish one that suits your lifestyle and biology. </p><p>The <a href="https://www.tomsguide.com/wellness/sleep/i-tried-the-7-1-sleep-rule-doctors-rate-as-the-best-way-to-stop-3-a-m-wake-ups-heres-why-it-works">7:1 sleep rule</a> can help you get there. This rule is based on the concept that getting seven hours of sleep per night and going to bed within the same one-hour window are the keys to healthy sleep.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WfD76UjCcsnyBMsMr5hXtS" name="60 minute bedtime routine" alt="On the left, a woman prepares to get into bed at night. On the right, a woman wakes up feeling refreshed and stretches wide" src="https://cdn.mos.cms.futurecdn.net/WfD76UjCcsnyBMsMr5hXtS-1920-80.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>So, if you know you need to be up in time for work at 6am, your strict bedtime should be 11 AM at the latest. If your bedtime is wildly out of whack after the time jump, move it in 15 minute increments, starting tonight. 15 minute shifts are best, says Dr. Bhandri, because while "the clock changes immediately," your "internal clock takes time to adjust." </p><h2 id="3-get-plenty-of-morning-sunlight">3. Get plenty of morning sunlight </h2><p>People are always surprised to hear that the holy grail of great sleep isn't what you do in the evening, but more to do with what you do in the morning to anchor your circadian rhythm.  </p><p>The clocks going back means that, depending on exactly when you wake up, mornings should be lighter for the majority of us – albeit temporarily. Capitalising on this <a href="https://www.tomsguide.com/wellness/sleep/better-sleep-starts-with-morning-sunlight-new-study-suggests">morning light</a> by drawing back the curtains as soon as you wake up, or heading outside for a morning walk within the first hour of waking, triggers the production of key get-up-and-go hormones, AKA serotonin and cortisol, boosting energy in the morning and improving sleep at night.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8AATdVPop8qGeGiDztrUFV" name="Sleeping better and waking with more energy" alt="A woman with long dark hair sits up in bed with her arms stretched in the air as sunlight streams in through her open curtains" src="https://cdn.mos.cms.futurecdn.net/8AATdVPop8qGeGiDztrUFV-1920-80.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: Getty Images)</span></figcaption></figure><p>A <a href="https://journals.sagepub.com/doi/10.1177/13591053241262643" target="_blank">2024 study</a> examined the effect sunlight exposure has on sleep. Participants were exposed to sunlight at different times of day and for different durations, and the research concludes those who got sunlight in the morning recorded better sleep efficiency – falling asleep fast after getting into bed – as well as fewer nighttime awakenings than those who got sunlight later in the day.</p><p>Dr. Bhandari explains, "The effect of morning light is that it advances the clock, while evening and night light delays the clock." This means that even on cloudy days, the morning light kick starts your energy levels, while bright light in the evening can keep you alert when you want to fall asleep. </p><h2 id="4-eat-meals-at-the-same-time-every-day">4. Eat meals at the same time every day</h2><p>What does your diet have to do with you sleep? Quite a lot, actually.  </p><p>What and when you eat directly influences your hormone levels, digestion and body temperature, and therefore your internal body clock. </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:2119px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CMPeMuZ9RHUGSsyaMh6Wti" name="Eating veggies" alt="A person holding a bowl of salad" src="https://cdn.mos.cms.futurecdn.net/CMPeMuZ9RHUGSsyaMh6Wti-1920-80.jpg" mos="" align="middle" fullscreen="" width="2119" height="1192" 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>So, eating balanced meals at regular times – in accordance with the time shift and making sure to leave at least three hours between your last meal and bedtime – will help reset your circadian rhythm. If you don’t adjust your mealtimes to your new time zone, you run the risk of blood sugar fluctuations <a href="https://www.tomsguide.com/wellness/sleep-problems/experts-share-7-major-sleep-hygiene-mistakes-that-cause-3-a-m-wake-ups-and-insomnia-and-how-to-fix-them">waking you up at 3AM</a>.</p><p>It's also worth noting that it is important to avoid stimulants like caffeine and spicy food too close to bedtime. </p><h2 id="5-limit-bright-lights-at-night">5. Limit bright lights at night </h2><p>While that bright light in the morning is a blessing for your sleep, in the evening it's not so helpful. </p><p>Naturally, the evenings will be darker after the time change, so any light you get in the evenings is likely to be artificial. That's the sleep doctor's worst nightmare, as this light keeps your brain active while you should be winding down for bed. </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rVMJFzox7vq8EpLFmiDXBQ" name="TG_Sleep_280426_ps0153" alt="A woman sits up in bed reading a book in dim lighting" src="https://cdn.mos.cms.futurecdn.net/rVMJFzox7vq8EpLFmiDXBQ-1920-80.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>Of course you still need some light in the evenings. It is recommended you use red light lamps (<a href="https://www.amazon.co.uk/Therapy-Wavelength-Control-Bedroom-Nursery/dp/B0GXVX7GQ7" target="_blank">like this £13.99 lamp at Amazon</a>) for the best sleep outcomes, as this type of light encourages melatonin production rather than tricking your mind into thinking it is daytime. Dim lights with amber hues are also ideal for creating a cosy atmosphere without a harsh glare. </p><p>"Make the bedroom a screen-free zone and switch off gadgets at least an hour before bed," advises Dr. Bhandari. In place of screens, he says you should establish a "calming wind-down routine," perhaps involving some <a href="https://www.tomsguide.com/wellness/sleep/reduce-your-stress-before-bed-by-68-percent-with-this-easy-6-minute-nighttime-routine">reading</a>, <a href="https://www.tomsguide.com/wellness/sleep/best-before-bed-stretches">stretching</a>, or <a href="https://www.tomsguide.com/wellness/sleep/sleep-meditation">meditating</a>. </p><h2 class="article-body__section" id="section-5-signs-your-circadian-rhythm-is-misaligned"><span>5 signs your circadian rhythm is misaligned </span></h2><p>By now you know a well regulated circadian rhythm can do wonders for your ability to fall asleep fast, sleep soundly through the night, and wake up with energy, but how can you tell if yours needs a little fine tuning? </p><p>Keep an eye out for these signs. </p><ul><li><strong>You find it hard to fall asleep:</strong> Having trouble dropping off usually means your body hasn't produced enough melatonin for you to feel sleepy.</li><li><strong>Waking up is a struggle: </strong>On the flip side, struggling to wake up means there's too much melatonin present in the morning. But<strong> </strong>"exposure to light in the morning" can fight off that sleepiness, helping to "synchronise the clock," says Dr. Thompson.</li><li><strong>Your energy dips during the day: </strong>"Your circadian rhythm is an internal timing system that helps regulate when you are most alert and when you are most tired," says Dr. Bhandari. Crashes in energy may indicate your body clock is not running efficiently.</li><li><strong>Your appetite is erratic: </strong>Your circadian rhythm directly controls hunger hormones (ghrelin and leptin) as well as sleep ones. When it is synchronised, you should feel hungry at same time each day.</li><li><strong>You rarely go to bed or wake up at the same time:  </strong>"Circadian misalignment can contribute to sleep disturbance or daytime sleepiness," explains Dr. Thompson. This can get in the way of a regular sleep routine as you're awake through the night and tempted to nap during the day.</li></ul><div data-widget-type="multimodelreview" data-model-name="Hatch Sleep Clock,Hatch Restore 3,Dreamegg Sunrise 1,Philips SmartSleep Sleep and Wake-up Light,BIB_WJ Smart Sunrise Alarm Clock" data-widget-title="Today's best sunrise alarm clock deals"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I ran 40 miles in the Brooks Hyperion Max 4 — here’s why I think it misses the mark ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Brooks has thrown a lot at the Hyperion Max 4, and unfortunately it’s a shoe that ends up being less than the sum of its parts, partly because all those parts make it way too heavy to be an effective speed shoe.</p><p>I enjoyed some of my runs in the Hyperion Max 4, which has a bouncy midsole and does perform well as a long-run cruiser, but if you’re in the market for a fast training shoe, I could name many others that I’d buy ahead of it, and almost all of them would cost less too.</p><p>It’s also very similar to its predecessor, so even if you were keen to pick it up, you’d be better off finding the <a href="https://www.tomsguide.com/wellness/running/brooks-hyperion-max-3-review">Brooks Hyperion Max 3 </a>on sale.</p><p>The Brooks Hyperion Max 4 has some good ingredients, most notably the springy DNA Gold foam, but the line needs a rethink to compete with the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> in its category, like the excellent<a href="https://www.tomsguide.com/wellness/running/weve-run-60-miles-in-the-new-balance-supercomp-rebel-v1-and-its-our-new-favorite-fast-training-shoe"> New Balance SC Rebel v1 </a>or <a href="https://www.tomsguide.com/wellness/running/hoka-mach-x3-review">Hoka Mach X3</a>.</p><h2 class="article-body__section" id="section-brooks-hyperion-max-4-review-price-and-availability"><span>Brooks Hyperion Max 4 review: price and availability</span></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="uSFaDuELpuL6BEtFJQc5YC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/uSFaDuELpuL6BEtFJQc5YC-1920-80.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>The Brooks Hyperion Max 4 launched in summer 2026 and costs $200 in the U.S. and £170 in the U.K., which is the same price as its predecessor.</p><p>It’s an expensive shoe, and while the price is around par for a plated super-trainer, the Hyperion Max 4 is undercut by some excellent fast training shoes like the <a href="https://www.tomsguide.com/wellness/running/its-been-over-a-year-since-i-reviewed-the-adidas-adizero-evo-sl-heres-5-reasons-why-its-still-my-go-to-running-shoe">Adidas Adizero Evo SL</a> and <a href="https://www.tomsguide.com/wellness/running/i-ran-50-miles-in-the-kiprun-kipstorm-tempo-and-its-a-fantastic-daily-trainer">Kiprun Kipstorm Tempo</a>.</p><h2 class="article-body__section" id="section-brooks-hyperion-max-4-review-design-and-fit"><span>Brooks Hyperion Max 4 review: design and fit</span></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="wA2vQiNFMa89f7BX3woi5D" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/wA2vQiNFMa89f7BX3woi5D-1920-80.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>The Brooks Hyperion Max 4 is currently available in four colors, including the white and yellow design I tested, which fit me well in my normal running shoe size.</p><p>It’s a very high stack shoe, standing 45mm tall at the heel and 39mm at the forefoot for a 6mm drop.</p><p>At 10.8oz in my US men’s size 10, the Hyperion Max 4 is not just heavy for a speed shoe; it’s pretty heavy even compared to most of the cushioned shoes for easy training I tested these days. </p><h3 class="article-body__section" id="section-upper"><span>Upper</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nbwPTGKdr9CaQiouZ95RSC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/nbwPTGKdr9CaQiouZ95RSC-1920-80.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>The Brooks Hyperion Max 4 has a mesh upper with padding around the collar of the shoe and a large, stiff internal heel counter at the back.</p><p>It’s not as thick and padded as the uppers on the brand’s cushioned shoes, like the <a href="https://www.tomsguide.com/wellness/running/brooks-glycerin-max-2-review">Brooks Glycerin Max 2</a>, but it’s still comfortable for long runs, though I think a thinner, more minimal upper would be good for cutting weight and making the shoe feel a bit quicker.</p><h3 class="article-body__section" id="section-midsole"><span>Midsole</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wKeBAkQYULqWEPaGZQYABC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/wKeBAkQYULqWEPaGZQYABC-1920-80.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>Two foams are used in the midsole of the Hyperion Max 4, with the top layer being made from Brooks’ bouncy PEBA-based DNA Gold foam, and the bottom being a firmer supercritical EVA foam called DNA Flash v2.</p><p>In between these two foams runs a nylon plate that helps to stabilize the high stack and add some extra pop to your stride. The plate also creates a stiff feel to the ride, though it’s not as rigid as a carbon plate.</p><p>The Hyperion Max 4 has a rocker profile to help roll you from heel to toe smoothly with each step.</p><h3 class="article-body__section" id="section-outsole"><span>Outsole</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="u9xzMP9SobdhFLUS4CGsHC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/u9xzMP9SobdhFLUS4CGsHC-1920-80.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>A thick layer of rubber is used at the heel and forefoot of the shoe and while this is good for durability, using a thinner material would help reduce the weight of the Hyperion Max 4 for fast running.</p><p>One way the shoe has shed some weight is a large cutout on the medial side of the shoe, but the placement of this cutout reduces the stability of the Hyperion Max 4 and might encourage pronation (inward rolling of the foot) when landing.</p><p>Midsole cutouts are common on fast shoes to reduce weight, but many brands opt to remove a central section of foam rather than at the sides to limit the instability created.</p><h2 class="article-body__section" id="section-brooks-hyperion-max-4-review-running-performance"><span>Brooks Hyperion Max 4 review: running performance</span></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="jWcLJQBczbPVbjJLsthscC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/jWcLJQBczbPVbjJLsthscC-1920-80.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 used the Hyperion Max 4 for a variety of training runs, including some easy efforts, a progression run, and an 18-mile long run including 15 steady miles at sub-6/min per mile pace.</p><p>I’ve tested all four generations of the shoe to date, and it changed a lot in the first three, but the fourth feels similar to the Brooks Hyperion Max 3 to 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="oWaYo8WsVkrHxYFHRzQ9vC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4 and Brooks Hyperion Max 3" src="https://cdn.mos.cms.futurecdn.net/oWaYo8WsVkrHxYFHRzQ9vC-1920-80.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>It’s big, it has some bounce and it rolls through smoothly, but the Hyperion Max 4 doesn’t feel great at faster paces. It’s too heavy and doesn’t have the nimble, aggressive feel of most speed shoes.</p><p>You can cruise along quite nicely in the shoe and it does have a comfortable and protective ride for long runs at a pace somewhere between easy and steady. However, at really easy paces, it feels a bit firm for me, and it isn’t especially stable because of the high stack and medial cutout.</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="XaPfKMSfSu5cjXhB3EJgLC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/XaPfKMSfSu5cjXhB3EJgLC-1920-80.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>In general, plated super-trainers like this are often among the most versatile shoes available in terms of the types of runs they work well for, but the Hyperion Max 4 doesn’t have that range — it’s cumbersome at fast paces and too stiff to truly enjoy on easy runs.</p><h2 class="article-body__section" id="section-should-you-buy-the-brooks-hyperion-max-4"><span>Should you buy the Brooks Hyperion Max 4?</span></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="AYrQSpYwzwBpskM5rHeVjC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/AYrQSpYwzwBpskM5rHeVjC-1920-80.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’d skip the Brooks Hyperion Max 4 if you’re in the market for a fast trainer right now, because there are many alternatives that offer a superior ride and/or better value.</p><p>The New Balance SC Rebel v1 is my favorite plated training shoe and while it’s also expensive, it delivers a truly fast and fun ride for workouts and can stand in for a full carbon super-shoe for races too.</p><p>More affordable speed shoes include the Adidas Evo SL, <a href="https://www.tomsguide.com/wellness/running/skechers-aero-razor-review">Skechers Aero Razor</a>, and Kiprun Kipstorm Tempo, which are much lighter than the Brooks and have more energetic rides for workouts.</p><p>If you’re looking for more of an all-rounder, then the <a href="https://www.tomsguide.com/wellness/running/ive-run-220-miles-in-the-asics-megablast-heres-5-reasons-why-its-my-go-to-shoe-for-marathon-training">Asics Megablast</a> is a little pricier than the Brooks, but much lighter and livelier on the run, and more enjoyable to use for easy or fast runs.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/running/i-ran-40-miles-in-the-brooks-hyperion-max-4-heres-why-i-think-it-misses-the-mark</link>
                                                                            <description>
                            <![CDATA[ The Brooks Hyperion Max 4 promises a speedy, springy ride for fast training, but it’s heavy and feels sluggish compared to the best rivals in its category. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">iCEaarFPjSM6Kw3zHmKiQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ms3xHdXqo6TmCrPo3EZN3D-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Oct 2026 10:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Running]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nick Harris-Fry ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/J5Jjp49GUVjLZEbjEkTex-320-70.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/ms3xHdXqo6TmCrPo3EZN3D-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Brooks Hyperion Max 4 ]]></media:description>                                                            <media:text><![CDATA[Brooks Hyperion Max 4 ]]></media:text>
                                <media:title type="plain"><![CDATA[Brooks Hyperion Max 4 ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ms3xHdXqo6TmCrPo3EZN3D-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Brooks has thrown a lot at the Hyperion Max 4, and unfortunately it’s a shoe that ends up being less than the sum of its parts, partly because all those parts make it way too heavy to be an effective speed shoe.</p><p>I enjoyed some of my runs in the Hyperion Max 4, which has a bouncy midsole and does perform well as a long-run cruiser, but if you’re in the market for a fast training shoe, I could name many others that I’d buy ahead of it, and almost all of them would cost less too.</p><p>It’s also very similar to its predecessor, so even if you were keen to pick it up, you’d be better off finding the <a href="https://www.tomsguide.com/wellness/running/brooks-hyperion-max-3-review">Brooks Hyperion Max 3 </a>on sale.</p><p>The Brooks Hyperion Max 4 has some good ingredients, most notably the springy DNA Gold foam, but the line needs a rethink to compete with the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> in its category, like the excellent<a href="https://www.tomsguide.com/wellness/running/weve-run-60-miles-in-the-new-balance-supercomp-rebel-v1-and-its-our-new-favorite-fast-training-shoe"> New Balance SC Rebel v1 </a>or <a href="https://www.tomsguide.com/wellness/running/hoka-mach-x3-review">Hoka Mach X3</a>.</p><h2 class="article-body__section" id="section-brooks-hyperion-max-4-review-price-and-availability"><span>Brooks Hyperion Max 4 review: price and availability</span></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="uSFaDuELpuL6BEtFJQc5YC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/uSFaDuELpuL6BEtFJQc5YC-1920-80.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>The Brooks Hyperion Max 4 launched in summer 2026 and costs $200 in the U.S. and £170 in the U.K., which is the same price as its predecessor.</p><p>It’s an expensive shoe, and while the price is around par for a plated super-trainer, the Hyperion Max 4 is undercut by some excellent fast training shoes like the <a href="https://www.tomsguide.com/wellness/running/its-been-over-a-year-since-i-reviewed-the-adidas-adizero-evo-sl-heres-5-reasons-why-its-still-my-go-to-running-shoe">Adidas Adizero Evo SL</a> and <a href="https://www.tomsguide.com/wellness/running/i-ran-50-miles-in-the-kiprun-kipstorm-tempo-and-its-a-fantastic-daily-trainer">Kiprun Kipstorm Tempo</a>.</p><h2 class="article-body__section" id="section-brooks-hyperion-max-4-review-design-and-fit"><span>Brooks Hyperion Max 4 review: design and fit</span></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="wA2vQiNFMa89f7BX3woi5D" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/wA2vQiNFMa89f7BX3woi5D-1920-80.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>The Brooks Hyperion Max 4 is currently available in four colors, including the white and yellow design I tested, which fit me well in my normal running shoe size.</p><p>It’s a very high stack shoe, standing 45mm tall at the heel and 39mm at the forefoot for a 6mm drop.</p><p>At 10.8oz in my US men’s size 10, the Hyperion Max 4 is not just heavy for a speed shoe; it’s pretty heavy even compared to most of the cushioned shoes for easy training I tested these days. </p><h3 class="article-body__section" id="section-upper"><span>Upper</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nbwPTGKdr9CaQiouZ95RSC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/nbwPTGKdr9CaQiouZ95RSC-1920-80.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>The Brooks Hyperion Max 4 has a mesh upper with padding around the collar of the shoe and a large, stiff internal heel counter at the back.</p><p>It’s not as thick and padded as the uppers on the brand’s cushioned shoes, like the <a href="https://www.tomsguide.com/wellness/running/brooks-glycerin-max-2-review">Brooks Glycerin Max 2</a>, but it’s still comfortable for long runs, though I think a thinner, more minimal upper would be good for cutting weight and making the shoe feel a bit quicker.</p><h3 class="article-body__section" id="section-midsole"><span>Midsole</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wKeBAkQYULqWEPaGZQYABC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/wKeBAkQYULqWEPaGZQYABC-1920-80.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>Two foams are used in the midsole of the Hyperion Max 4, with the top layer being made from Brooks’ bouncy PEBA-based DNA Gold foam, and the bottom being a firmer supercritical EVA foam called DNA Flash v2.</p><p>In between these two foams runs a nylon plate that helps to stabilize the high stack and add some extra pop to your stride. The plate also creates a stiff feel to the ride, though it’s not as rigid as a carbon plate.</p><p>The Hyperion Max 4 has a rocker profile to help roll you from heel to toe smoothly with each step.</p><h3 class="article-body__section" id="section-outsole"><span>Outsole</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="u9xzMP9SobdhFLUS4CGsHC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/u9xzMP9SobdhFLUS4CGsHC-1920-80.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>A thick layer of rubber is used at the heel and forefoot of the shoe and while this is good for durability, using a thinner material would help reduce the weight of the Hyperion Max 4 for fast running.</p><p>One way the shoe has shed some weight is a large cutout on the medial side of the shoe, but the placement of this cutout reduces the stability of the Hyperion Max 4 and might encourage pronation (inward rolling of the foot) when landing.</p><p>Midsole cutouts are common on fast shoes to reduce weight, but many brands opt to remove a central section of foam rather than at the sides to limit the instability created.</p><h2 class="article-body__section" id="section-brooks-hyperion-max-4-review-running-performance"><span>Brooks Hyperion Max 4 review: running performance</span></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="jWcLJQBczbPVbjJLsthscC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/jWcLJQBczbPVbjJLsthscC-1920-80.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 used the Hyperion Max 4 for a variety of training runs, including some easy efforts, a progression run, and an 18-mile long run including 15 steady miles at sub-6/min per mile pace.</p><p>I’ve tested all four generations of the shoe to date, and it changed a lot in the first three, but the fourth feels similar to the Brooks Hyperion Max 3 to 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="oWaYo8WsVkrHxYFHRzQ9vC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4 and Brooks Hyperion Max 3" src="https://cdn.mos.cms.futurecdn.net/oWaYo8WsVkrHxYFHRzQ9vC-1920-80.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>It’s big, it has some bounce and it rolls through smoothly, but the Hyperion Max 4 doesn’t feel great at faster paces. It’s too heavy and doesn’t have the nimble, aggressive feel of most speed shoes.</p><p>You can cruise along quite nicely in the shoe and it does have a comfortable and protective ride for long runs at a pace somewhere between easy and steady. However, at really easy paces, it feels a bit firm for me, and it isn’t especially stable because of the high stack and medial cutout.</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="XaPfKMSfSu5cjXhB3EJgLC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/XaPfKMSfSu5cjXhB3EJgLC-1920-80.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>In general, plated super-trainers like this are often among the most versatile shoes available in terms of the types of runs they work well for, but the Hyperion Max 4 doesn’t have that range — it’s cumbersome at fast paces and too stiff to truly enjoy on easy runs.</p><h2 class="article-body__section" id="section-should-you-buy-the-brooks-hyperion-max-4"><span>Should you buy the Brooks Hyperion Max 4?</span></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="AYrQSpYwzwBpskM5rHeVjC" name="Brooks Hyperion Max 4" alt="Brooks Hyperion Max 4" src="https://cdn.mos.cms.futurecdn.net/AYrQSpYwzwBpskM5rHeVjC-1920-80.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’d skip the Brooks Hyperion Max 4 if you’re in the market for a fast trainer right now, because there are many alternatives that offer a superior ride and/or better value.</p><p>The New Balance SC Rebel v1 is my favorite plated training shoe and while it’s also expensive, it delivers a truly fast and fun ride for workouts and can stand in for a full carbon super-shoe for races too.</p><p>More affordable speed shoes include the Adidas Evo SL, <a href="https://www.tomsguide.com/wellness/running/skechers-aero-razor-review">Skechers Aero Razor</a>, and Kiprun Kipstorm Tempo, which are much lighter than the Brooks and have more energetic rides for workouts.</p><p>If you’re looking for more of an all-rounder, then the <a href="https://www.tomsguide.com/wellness/running/ive-run-220-miles-in-the-asics-megablast-heres-5-reasons-why-its-my-go-to-shoe-for-marathon-training">Asics Megablast</a> is a little pricier than the Brooks, but much lighter and livelier on the run, and more enjoyable to use for easy or fast runs.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ A master trainer gave me this low-impact core workout, and it’s a game-changer for strong abs and lower backs ]]></title>
                                                                                                <dc:content><![CDATA[ <p>While a sculpted midsection might be the goal for some, I want a strong core so I can do the activities I love longer without hurting my back. Since taking up Pilates, I've seen a huge difference in my core, so when LJ, a master trainer at London's <a href="https://www.1rebel.com/" target="_blank">1Rebel</a>, shared a five-move Pilates-inspired core workout with me, I couldn't wait to try it.</p><p>If you don't have access to a reformer bed, you can try using sliders instead, which are cheap and easy to buy from Amazon. If you want to stick to low-impact exercises, you're going to love the moves below. You don't need weights or any other equipment, and it's also accessible for most levels. </p><p>Here it is!</p><h2 id="watch-master-trainer-39-s-5-move-ab-workout">Watch: Master trainer's 5-move ab workout</h2><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/De3x0AVzl0l/" target="_blank">A post shared by Tom's Guide Fitness | Workout Tips & Gear (@tomsguidefitness)</a></p><p>A photo posted by </p></blockquote></div><p>LJ hasn't programmed sets, reps, or timing, but as a personal trainer myself, I would recommend programming 45 seconds on and 15 seconds off for 3-5 rounds. To make it more challenging, slow your tempo and program 50 seconds on instead.</p><p>My stomach has always been a problem area for me, but workouts like this have definitely made an enormous difference in developing strength, muscle and shape. I still maintain that your diet will move the needle most when it comes to how much muscle definition you show there, as well as other factors like health conditions, sleep, stress, lifting weights and genetics. </p><div class="product"><a data-dimension112="32dd6c9a-d12e-11f1-907c-3be3349cec07" data-action="Deal Block" data-label="Sliders" data-dimension48="Sliders" data-dimension25="$6" href="https://www.amazon.com/AZURELIFE-Exercise-Surfaces-Portable-Abdominal/dp/B07RK1CL2T" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:71.47%;"><img id="kiNtDpQf9KK6Y9wRGLwAwg" name="sliders" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kiNtDpQf9KK6Y9wRGLwAwg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1072" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Azure life sliders are great for core workouts because they allow you to glide along the floor using your hands or feet if you can't access a reformer bed.<a class="view-deal button" href="https://www.amazon.com/AZURELIFE-Exercise-Surfaces-Portable-Abdominal/dp/B07RK1CL2T" target="_blank" rel="nofollow" data-dimension112="32dd6c9a-d12e-11f1-907c-3be3349cec07" data-action="Deal Block" data-label="Sliders" data-dimension48="Sliders" data-dimension25="$6">View Deal</a></p></div><ul><li><strong>Kneeling side kick (lateral core and glute stability): </strong>Start in a side-kneeling position, one hand down under your shoulder and the top leg extended straight out to the side. Keep your torso tall and still; kick the top leg forward, then sweep it back with control, without letting your hips or ribs collapse. <em><strong>Working: </strong></em>Obliques and deep lateral core for stability, plus gluteus medius and hip flexors on the working leg. </li><li><strong>Glute raise to heel slides outward: </strong>Lie on your back, knees bent, heels on sliders or the bed. Lift into a glute bridge, then slowly slide both heels outward to the sides, draw them back in, and lower with control. <em><strong>Working:</strong></em><em> </em>Glutes, hamstrings and adductors, with the core working to keep the pelvis level. The slide adds an eccentric challenge to the hamstrings and inner thighs.</li><li><strong>Wheelbarrow: </strong>Start in a strong plank with your hands on sliders or the bed. Brace your core, then push the sliders forward or your knees backward in a controlled line, keeping your hips level and ribs down. Drive back in to the start. <em><strong>Working: </strong></em>Deep core (transverse abdominis) and rectus abdominis, shoulders and lats for stability, and serratus anterior for scapular control. </li><li><strong>Glute bridge marches: </strong>Lie on your back with your knees bent, and lift into a glute bridge. Holding your hips high and level, alternate lifting one foot off the floor at a time as though marching on the spot. <em><strong>Working: </strong></em>Glutes and hamstrings holding the bridge, plus core and obliques resisting rotation and keeping the pelvis steady. This is great for single-leg stability.</li><li><strong>Criss-cross leg flutters: </strong>Lie on your back with your legs extended just off the floor and your lower back pressed into the mat. Flutter your legs up and down in small, quick movements,  crossing them over one another with each beat. <em><strong>Working:</strong></em><em> </em>Lower abdominals and hip flexors, plus inner thighs from the crossing action. It’s a good test of core control and endurance.</li></ul><h2 id="what-happened-when-i-tried-it">What happened when I tried it</h2><p>Try to keep the reps similar for each move in each round, and work both sides of the body. If you choose to do equal-number rounds, you could complete the reps on one side only, then switch to the other side on the next round.</p><div><blockquote><p>I kept my tempo slow and controlled, which delivered a strong burn in my core muscles and ensured I switched everything on to stay stable.</p></blockquote></div><p>This is a really great all-rounder, and you'll feel it everywhere. I kept my tempo slow and controlled, which delivered a strong burn in my core muscles and ensured I switched everything on to stay stable. </p><p>I used a reformer bed, but sliders work well, in my experience. I stuck to four rounds, which totaled a 20-minute workout, and my abs and shoulders were in pieces after. I had to keep remembering to use my breath, exhaling deeply during the phases of the exercises that created the most tension; this actually made me feel more in control and kept my body in a natural rhythm.</p><p>If you're new to core workouts or this type of routine, I strongly recommend taking it slowly and stopping if you experience any pain. </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><p>This isn't just about hitting your abs, though, although the rectus abdominis muscles along the front of your stomach are targeted. It's also about building deep core strength and working the muscles that protect your spine, like your hips, glutes and stabilizing layers of muscle.</p><p>If you suffer from tight hips or back pain, some (or all) of these moves might be useful for you to try, but <strong>stop and rest if you need to. </strong></p><p>If you're unsure <a href="https://www.tomsguide.com/news/this-is-the-most-important-thing-to-do-when-working-your-abs-according-to-a-personal-trainer">how to engage your core properly</a>, this <a href="https://www.tomsguide.com/wellness/workouts/stop-doing-100s-of-crunches-why-this-5-minute-bracing-routine-builds-a-stronger-core-than-sit-ups-ever-will">short "bracing" routine</a> might be helpful for you before you start the workout. </p><p>Also remember that training should make you feel good, so if ripped abs isn't the goal, that's great; focus on what you enjoy about the workout and let us know how you get on.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="vGnNDN" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-to-be-more-mobile-in-their-60s-and-70s-3-low-impact-exercises-you-should-start-with" target="_blank">I teach people to be more mobile in their 60s and 70s: 3 low-impact exercises you should start with</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/forget-burpees-the-pilates-burpee-is-beginner-friendly-and-low-impact-and-youll-love-it" target="_blank">Forget burpees —the 'Pilates burpee' is beginner-friendly and low-impact (and you’ll love it)</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/a-yoga-instructor-says-this-is-the-5-minute-yoga-routine-you-need-for-strong-and-mobile-hips-and-core-muscles" target="_blank">A yoga instructor says this is the 5-minute yoga routine you need for strong and mobile hips and core muscles</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/workouts/a-master-trainer-gave-me-this-low-impact-core-workout-and-its-a-game-changer-for-strong-abs-and-lower-backs</link>
                                                                            <description>
                            <![CDATA[ 1Rebel master trainer LJ shares a short core workout to build strength — so we tried it. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">PeggF4bUj53aMPy4uWqu4B</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/M4nRXs7zE5LU76TAyhnNQP-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Oct 2026 08:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Workouts]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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;Live Science&lt;/a&gt;,&lt;a href=&quot;https://www.fitandwell.com/author/sam-hopes&quot;&gt; Fit&amp;amp;Well&lt;/a&gt;,&lt;a href=&quot;https://www.coachweb.com/author/sam-hopes&quot;&gt; Coach&lt;/a&gt;, and T3. &lt;/p&gt;&lt;p&gt;Having worked with fitness studios like F45 and Virgin Active and trained both group and 1:1, Sam now primarily teaches outdoor bootcamps, bodyweight, 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, Pilates 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, mindfulness, 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/M4nRXs7zE5LU76TAyhnNQP-1920-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Image left, close up of woman with abs, image right, writer Sam taking a selfie in workout gear]]></media:description>                                                            <media:text><![CDATA[Image left, close up of woman with abs, image right, writer Sam taking a selfie in workout gear]]></media:text>
                                <media:title type="plain"><![CDATA[Image left, close up of woman with abs, image right, writer Sam taking a selfie in workout gear]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/M4nRXs7zE5LU76TAyhnNQP-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>While a sculpted midsection might be the goal for some, I want a strong core so I can do the activities I love longer without hurting my back. Since taking up Pilates, I've seen a huge difference in my core, so when LJ, a master trainer at London's <a href="https://www.1rebel.com/" target="_blank">1Rebel</a>, shared a five-move Pilates-inspired core workout with me, I couldn't wait to try it.</p><p>If you don't have access to a reformer bed, you can try using sliders instead, which are cheap and easy to buy from Amazon. If you want to stick to low-impact exercises, you're going to love the moves below. You don't need weights or any other equipment, and it's also accessible for most levels. </p><p>Here it is!</p><h2 id="watch-master-trainer-39-s-5-move-ab-workout">Watch: Master trainer's 5-move ab workout</h2><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/De3x0AVzl0l/" target="_blank">A post shared by Tom's Guide Fitness | Workout Tips & Gear (@tomsguidefitness)</a></p><p>A photo posted by </p></blockquote></div><p>LJ hasn't programmed sets, reps, or timing, but as a personal trainer myself, I would recommend programming 45 seconds on and 15 seconds off for 3-5 rounds. To make it more challenging, slow your tempo and program 50 seconds on instead.</p><p>My stomach has always been a problem area for me, but workouts like this have definitely made an enormous difference in developing strength, muscle and shape. I still maintain that your diet will move the needle most when it comes to how much muscle definition you show there, as well as other factors like health conditions, sleep, stress, lifting weights and genetics. </p><div class="product"><a data-dimension112="32dd6c9a-d12e-11f1-907c-3be3349cec07" data-action="Deal Block" data-label="Sliders" data-dimension48="Sliders" data-dimension25="$6" href="https://www.amazon.com/AZURELIFE-Exercise-Surfaces-Portable-Abdominal/dp/B07RK1CL2T" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:71.47%;"><img id="kiNtDpQf9KK6Y9wRGLwAwg" name="sliders" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kiNtDpQf9KK6Y9wRGLwAwg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1072" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Azure life sliders are great for core workouts because they allow you to glide along the floor using your hands or feet if you can't access a reformer bed.<a class="view-deal button" href="https://www.amazon.com/AZURELIFE-Exercise-Surfaces-Portable-Abdominal/dp/B07RK1CL2T" target="_blank" rel="nofollow" data-dimension112="32dd6c9a-d12e-11f1-907c-3be3349cec07" data-action="Deal Block" data-label="Sliders" data-dimension48="Sliders" data-dimension25="$6">View Deal</a></p></div><ul><li><strong>Kneeling side kick (lateral core and glute stability): </strong>Start in a side-kneeling position, one hand down under your shoulder and the top leg extended straight out to the side. Keep your torso tall and still; kick the top leg forward, then sweep it back with control, without letting your hips or ribs collapse. <em><strong>Working: </strong></em>Obliques and deep lateral core for stability, plus gluteus medius and hip flexors on the working leg. </li><li><strong>Glute raise to heel slides outward: </strong>Lie on your back, knees bent, heels on sliders or the bed. Lift into a glute bridge, then slowly slide both heels outward to the sides, draw them back in, and lower with control. <em><strong>Working:</strong></em><em> </em>Glutes, hamstrings and adductors, with the core working to keep the pelvis level. The slide adds an eccentric challenge to the hamstrings and inner thighs.</li><li><strong>Wheelbarrow: </strong>Start in a strong plank with your hands on sliders or the bed. Brace your core, then push the sliders forward or your knees backward in a controlled line, keeping your hips level and ribs down. Drive back in to the start. <em><strong>Working: </strong></em>Deep core (transverse abdominis) and rectus abdominis, shoulders and lats for stability, and serratus anterior for scapular control. </li><li><strong>Glute bridge marches: </strong>Lie on your back with your knees bent, and lift into a glute bridge. Holding your hips high and level, alternate lifting one foot off the floor at a time as though marching on the spot. <em><strong>Working: </strong></em>Glutes and hamstrings holding the bridge, plus core and obliques resisting rotation and keeping the pelvis steady. This is great for single-leg stability.</li><li><strong>Criss-cross leg flutters: </strong>Lie on your back with your legs extended just off the floor and your lower back pressed into the mat. Flutter your legs up and down in small, quick movements,  crossing them over one another with each beat. <em><strong>Working:</strong></em><em> </em>Lower abdominals and hip flexors, plus inner thighs from the crossing action. It’s a good test of core control and endurance.</li></ul><h2 id="what-happened-when-i-tried-it">What happened when I tried it</h2><p>Try to keep the reps similar for each move in each round, and work both sides of the body. If you choose to do equal-number rounds, you could complete the reps on one side only, then switch to the other side on the next round.</p><div><blockquote><p>I kept my tempo slow and controlled, which delivered a strong burn in my core muscles and ensured I switched everything on to stay stable.</p></blockquote></div><p>This is a really great all-rounder, and you'll feel it everywhere. I kept my tempo slow and controlled, which delivered a strong burn in my core muscles and ensured I switched everything on to stay stable. </p><p>I used a reformer bed, but sliders work well, in my experience. I stuck to four rounds, which totaled a 20-minute workout, and my abs and shoulders were in pieces after. I had to keep remembering to use my breath, exhaling deeply during the phases of the exercises that created the most tension; this actually made me feel more in control and kept my body in a natural rhythm.</p><p>If you're new to core workouts or this type of routine, I strongly recommend taking it slowly and stopping if you experience any pain. </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><p>This isn't just about hitting your abs, though, although the rectus abdominis muscles along the front of your stomach are targeted. It's also about building deep core strength and working the muscles that protect your spine, like your hips, glutes and stabilizing layers of muscle.</p><p>If you suffer from tight hips or back pain, some (or all) of these moves might be useful for you to try, but <strong>stop and rest if you need to. </strong></p><p>If you're unsure <a href="https://www.tomsguide.com/news/this-is-the-most-important-thing-to-do-when-working-your-abs-according-to-a-personal-trainer">how to engage your core properly</a>, this <a href="https://www.tomsguide.com/wellness/workouts/stop-doing-100s-of-crunches-why-this-5-minute-bracing-routine-builds-a-stronger-core-than-sit-ups-ever-will">short "bracing" routine</a> might be helpful for you before you start the workout. </p><p>Also remember that training should make you feel good, so if ripped abs isn't the goal, that's great; focus on what you enjoy about the workout and let us know how you get on.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="vGnNDN" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-to-be-more-mobile-in-their-60s-and-70s-3-low-impact-exercises-you-should-start-with" target="_blank">I teach people to be more mobile in their 60s and 70s: 3 low-impact exercises you should start with</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/forget-burpees-the-pilates-burpee-is-beginner-friendly-and-low-impact-and-youll-love-it" target="_blank">Forget burpees —the 'Pilates burpee' is beginner-friendly and low-impact (and you’ll love it)</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/a-yoga-instructor-says-this-is-the-5-minute-yoga-routine-you-need-for-strong-and-mobile-hips-and-core-muscles" target="_blank">A yoga instructor says this is the 5-minute yoga routine you need for strong and mobile hips and core muscles</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Struggle to squat? Here are five alternative moves for building stronger legs after 60 ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/how-to/squats-how-to-do-them-and-the-benefits-for-building-leg-strength-and-muscle"><u>Squats</u></a> are one of the best-known exercises for building stronger legs, but that doesn’t mean they’re suitable for everyone. If you find squatting difficult because of stiff knees, limited mobility, or balance concerns, there are some great alternatives you can try — so you don’t have to miss out on building that all-important <a href="https://www.tomsguide.com/wellness/workouts/forget-squats-these-3-exercises-improve-single-leg-strength-stability-and-power"><u>lower-body strength</u></a>.</p><p>As we age, strong legs help us manage everyday activities like climbing stairs, getting up from a chair, and walking independently. And while squats are an <a href="https://www.tomsguide.com/wellness/workouts/squats-dont-just-build-strength-and-muscle-they-also-increase-functional-fitness-heres-3-of-my-favorites-to-try"><u>effective way to train several lower-body muscles at once</u></a>, they’re not the only option. Other exercises can also strengthen your thighs, hips and calves, without requiring you to lower your body into a deep squat.</p><p>Below, we’ve rounded up five alternative moves to help you build <a href="https://www.tomsguide.com/wellness/workouts/im-stronger-than-ever-at-70-here-are-6-exercises-to-build-strong-legs-according-to-a-70-year-old-fitness-coach"><u>stronger legs</u></a>. They can be adapted to different fitness levels, with options to use a sturdy chair or wall for extra support where needed. </p><p>The goal is to find exercises that feel comfortable for your body, while helping you maintain the strength and stability you rely on every day. Give the exercises below a try and you should start to notice a difference. </p><h3 class="article-body__section" id="section-1-seated-leg-extensions"><span>1. Seated leg extensions</span></h3><p>If bending your knees deeply feels uncomfortable, seated <a href="https://www.tomsguide.com/news/i-did-60-leg-extensions-every-day-for-a-week-heres-what-happened-to-my-legs"><u>leg extensions</u></a> are a useful alternative for strengthening your quadriceps — the muscles at the front of your thighs. These muscles help straighten your knees and play an important role in everyday activities like walking and climbing the stairs. Best of all, you can practice them without having to support your full body weight.</p><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/EAymwps5x0s" allowfullscreen></iframe></div></div><p><strong>How to do it:</strong></p><ul><li>Sit towards the front of a sturdy chair, with your back straight and both feet flat on the floor.</li><li>Slowly straighten one knee, lifting your foot until your leg is almost fully extended.</li><li>Pause for a second, keeping your thigh on the chair.</li><li>Lower your foot back to the floor with control.</li></ul><p><strong>Make it easier:</strong> Straighten your knee through a smaller range of motion, working only as far as feels comfortable.</p><p><strong>Make it harder:</strong> Hold your leg straight for three to five seconds before lowering it, or add a light ankle weight if you can do the movement comfortably and with control.</p><h3 class="article-body__section" id="section-2-standing-hamstring-curls"><span>2. Standing hamstring curls</span></h3><p>Your <a href="https://www.tomsguide.com/features/forget-squats-7-best-hamstring-exercises-to-build-stronger-legs-without-weights"><u>hamstrings</u></a> — the muscles at the backs of your thighs — help bend your knees and contribute to stability while walking. Standing <a href="https://www.tomsguide.com/how-to/how-to-do-hamstring-curl"><u>hamstring curls</u></a> strengthen these muscles without the effort of lowering your body into a squat. You can hold onto a sturdy chair or countertop if you struggle to <a href="https://www.tomsguide.com/wellness/workouts/can-you-stand-on-one-leg-for-30-seconds-heres-what-the-simple-balance-test-says-about-your-health"><u>balance on one leg</u></a>.</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/oWu8RxtWdGE" allowfullscreen></iframe></div></div><p><strong>How to do it</strong></p><ul><li>Stand tall behind a sturdy chair or countertop, holding on for support.</li><li>Keeping your thighs roughly in line with each other, bend one knee to bring your heel towards your buttocks.</li><li>Avoid leaning forward or arching your back as you lift your foot.</li><li>Slowly lower your foot back to the floor.</li></ul><p><strong>Make it easier:</strong> Bend your knee only a small amount, gradually increasing the range as your strength improves. Keep both hands on your support.</p><p><strong>Make it harder:</strong> Add a light ankle weight or resistance band, provided you can maintain good form and balance.</p><h3 class="article-body__section" id="section-3-standing-hip-extensions"><span>3. Standing hip extensions</span></h3><p>Our <a href="https://www.tomsguide.com/features/im-a-personal-trainer-here-are-5-glute-exercises-that-also-strengthen-your-back-without-weights"><u>glutes</u></a> are the primary engine for balance, posture, and independence as we age. Standing hip extensions target these muscles without the deep knee bend involved in squats, making them a useful alternative. </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/SWvnWGd0yQQ" allowfullscreen></iframe></div></div><p><strong>How to do it</strong></p><ul><li>Stand behind a sturdy chair or countertop for support.</li><li>Keep your back straight and your weight evenly distributed between your feet.</li><li>Slowly raise one leg backwards, keeping your knee mostly straight and your toes pointing forwards.</li><li>Stop before you feel the need to arch your lower back or lean forwards.</li><li>Bring your leg back to the starting position with control.</li></ul><p><strong>Make it easier:</strong> Move your leg backwards through a smaller range, keeping both hands on the support.</p><p><strong>Make it harder:</strong> Place a resistance band around your ankles, if you're comfortable using one.</p><h3 class="article-body__section" id="section-4-standing-side-leg-raises"><span>4. Standing side leg raises</span></h3><p>Standing side leg raises work the muscles around the outside of your hips, including the gluteus medius. These muscles help stabilize your pelvis when you stand on one leg during walking. It’s a particularly useful exercise for building <a href="https://www.tomsguide.com/wellness/workouts/i-test-hip-mobility-exercises-so-you-dont-have-to-this-one-move-always-stands-out"><u>hip strength</u></a> without requiring a deep bend in the knees.</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/l_U2uoePtS4" allowfullscreen></iframe></div></div><p><strong>How to do it</strong></p><ul><li>Stand tall beside a sturdy chair or countertop, holding on for support.</li><li>Keep your feet pointing forwards and your torso upright.</li><li>Slowly lift one leg out to the side, keeping your knee straight but not locked.</li><li>Avoid leaning your upper body in the opposite direction or turning your toes towards the ceiling.</li><li>Pause briefly, then lower your leg with control.</li></ul><p><strong>Make it easier:</strong> Lift your leg only a few inches, prioritising control over height. Use both hands on the support.</p><p><strong>Make it harder:</strong> Add a resistance band around your thighs, just above your knees.</p><h3 class="article-body__section" id="section-5-standing-calf-raises"><span>5. Standing calf raises</span></h3><p>Your calf muscles help propel you forwards as you walk and contribute to <a href="https://www.tomsguide.com/wellness/fitness/if-you-have-tight-ankles-or-stiff-joints-a-personal-trainer-recommends-these-3-underrated-mobility-exercises"><u>ankle stability</u></a>, so it’s important we keep them in check. <a href="https://www.tomsguide.com/wellness/workouts/im-a-personal-trainer-this-is-the-one-exercise-i-want-you-to-practice-daily-if-youre-over-60"><u>Calf raises</u></a> are a tried and tested exercise for strengthening the calves without bending your knees into a squat.</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/nnPGrBLNlaw" allowfullscreen></iframe></div></div><p><strong>How to do it</strong></p><ul><li>Stand behind a sturdy chair or countertop, with your feet hip-width apart.</li><li>Hold on for support and keep your torso upright.</li><li>Slowly lift your heels off the floor, rising onto the balls of your feet.</li><li>Pause at the top, then lower your heels slowly back to the floor.</li></ul><p><strong>Make it easier:</strong> Try <a href="https://www.tomsguide.com/features/i-did-100-seated-calf-raises-every-day-for-a-week-heres-what-happened"><u>seated calf raises</u></a> instead. Sit in a sturdy chair with your feet flat on the floor, then lift your heels while keeping the balls of your feet grounded.</p><p><strong>Make it harder:</strong> Try raising one heel at a time or slowing down the lowering phase to make your calves work harder.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.js" async></script><p>These exercises are proof that you don’t have to squat to build lower-body strength. Together, they target key lower-body muscles that support walking, balance and everyday movement as we age. </p><p>Start with one set of controlled repetitions for each exercise, and aim to practice them twice a week. Over time, your legs should start to feel stronger and more capable.</p><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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank"><strong>I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-how-to-be-strong-and-mobile-this-is-the-one-exercise-i-regret-ignoring-for-years" target="_blank"><strong>I teach people how to be strong and mobile: this is the one exercise I regret ignoring for years</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank"><strong>I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/workouts/struggle-to-squat-here-are-five-alternative-moves-for-building-stronger-legs-after-60</link>
                                                                            <description>
                            <![CDATA[ 5 ways to build strong legs after 60, without doing a single squat ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">uh6zKSZKhkUEAPU3RCUNpF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/r9EbytpDFfnu77oFtgdF9E-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Oct 2026 07:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 27 Oct 2026 13:48:22 +0000</updated>
                                                                                                                                            <category><![CDATA[Workouts]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Katie Sims ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/9Ha2PHteeRRzUwJfKjgM7U-320-70.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/r9EbytpDFfnu77oFtgdF9E-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a senior man in exercise kit]]></media:description>                                                            <media:text><![CDATA[a senior man in exercise kit]]></media:text>
                                <media:title type="plain"><![CDATA[a senior man in exercise kit]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/r9EbytpDFfnu77oFtgdF9E-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/how-to/squats-how-to-do-them-and-the-benefits-for-building-leg-strength-and-muscle"><u>Squats</u></a> are one of the best-known exercises for building stronger legs, but that doesn’t mean they’re suitable for everyone. If you find squatting difficult because of stiff knees, limited mobility, or balance concerns, there are some great alternatives you can try — so you don’t have to miss out on building that all-important <a href="https://www.tomsguide.com/wellness/workouts/forget-squats-these-3-exercises-improve-single-leg-strength-stability-and-power"><u>lower-body strength</u></a>.</p><p>As we age, strong legs help us manage everyday activities like climbing stairs, getting up from a chair, and walking independently. And while squats are an <a href="https://www.tomsguide.com/wellness/workouts/squats-dont-just-build-strength-and-muscle-they-also-increase-functional-fitness-heres-3-of-my-favorites-to-try"><u>effective way to train several lower-body muscles at once</u></a>, they’re not the only option. Other exercises can also strengthen your thighs, hips and calves, without requiring you to lower your body into a deep squat.</p><p>Below, we’ve rounded up five alternative moves to help you build <a href="https://www.tomsguide.com/wellness/workouts/im-stronger-than-ever-at-70-here-are-6-exercises-to-build-strong-legs-according-to-a-70-year-old-fitness-coach"><u>stronger legs</u></a>. They can be adapted to different fitness levels, with options to use a sturdy chair or wall for extra support where needed. </p><p>The goal is to find exercises that feel comfortable for your body, while helping you maintain the strength and stability you rely on every day. Give the exercises below a try and you should start to notice a difference. </p><h3 class="article-body__section" id="section-1-seated-leg-extensions"><span>1. Seated leg extensions</span></h3><p>If bending your knees deeply feels uncomfortable, seated <a href="https://www.tomsguide.com/news/i-did-60-leg-extensions-every-day-for-a-week-heres-what-happened-to-my-legs"><u>leg extensions</u></a> are a useful alternative for strengthening your quadriceps — the muscles at the front of your thighs. These muscles help straighten your knees and play an important role in everyday activities like walking and climbing the stairs. Best of all, you can practice them without having to support your full body weight.</p><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/EAymwps5x0s" allowfullscreen></iframe></div></div><p><strong>How to do it:</strong></p><ul><li>Sit towards the front of a sturdy chair, with your back straight and both feet flat on the floor.</li><li>Slowly straighten one knee, lifting your foot until your leg is almost fully extended.</li><li>Pause for a second, keeping your thigh on the chair.</li><li>Lower your foot back to the floor with control.</li></ul><p><strong>Make it easier:</strong> Straighten your knee through a smaller range of motion, working only as far as feels comfortable.</p><p><strong>Make it harder:</strong> Hold your leg straight for three to five seconds before lowering it, or add a light ankle weight if you can do the movement comfortably and with control.</p><h3 class="article-body__section" id="section-2-standing-hamstring-curls"><span>2. Standing hamstring curls</span></h3><p>Your <a href="https://www.tomsguide.com/features/forget-squats-7-best-hamstring-exercises-to-build-stronger-legs-without-weights"><u>hamstrings</u></a> — the muscles at the backs of your thighs — help bend your knees and contribute to stability while walking. Standing <a href="https://www.tomsguide.com/how-to/how-to-do-hamstring-curl"><u>hamstring curls</u></a> strengthen these muscles without the effort of lowering your body into a squat. You can hold onto a sturdy chair or countertop if you struggle to <a href="https://www.tomsguide.com/wellness/workouts/can-you-stand-on-one-leg-for-30-seconds-heres-what-the-simple-balance-test-says-about-your-health"><u>balance on one leg</u></a>.</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/oWu8RxtWdGE" allowfullscreen></iframe></div></div><p><strong>How to do it</strong></p><ul><li>Stand tall behind a sturdy chair or countertop, holding on for support.</li><li>Keeping your thighs roughly in line with each other, bend one knee to bring your heel towards your buttocks.</li><li>Avoid leaning forward or arching your back as you lift your foot.</li><li>Slowly lower your foot back to the floor.</li></ul><p><strong>Make it easier:</strong> Bend your knee only a small amount, gradually increasing the range as your strength improves. Keep both hands on your support.</p><p><strong>Make it harder:</strong> Add a light ankle weight or resistance band, provided you can maintain good form and balance.</p><h3 class="article-body__section" id="section-3-standing-hip-extensions"><span>3. Standing hip extensions</span></h3><p>Our <a href="https://www.tomsguide.com/features/im-a-personal-trainer-here-are-5-glute-exercises-that-also-strengthen-your-back-without-weights"><u>glutes</u></a> are the primary engine for balance, posture, and independence as we age. Standing hip extensions target these muscles without the deep knee bend involved in squats, making them a useful alternative. </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/SWvnWGd0yQQ" allowfullscreen></iframe></div></div><p><strong>How to do it</strong></p><ul><li>Stand behind a sturdy chair or countertop for support.</li><li>Keep your back straight and your weight evenly distributed between your feet.</li><li>Slowly raise one leg backwards, keeping your knee mostly straight and your toes pointing forwards.</li><li>Stop before you feel the need to arch your lower back or lean forwards.</li><li>Bring your leg back to the starting position with control.</li></ul><p><strong>Make it easier:</strong> Move your leg backwards through a smaller range, keeping both hands on the support.</p><p><strong>Make it harder:</strong> Place a resistance band around your ankles, if you're comfortable using one.</p><h3 class="article-body__section" id="section-4-standing-side-leg-raises"><span>4. Standing side leg raises</span></h3><p>Standing side leg raises work the muscles around the outside of your hips, including the gluteus medius. These muscles help stabilize your pelvis when you stand on one leg during walking. It’s a particularly useful exercise for building <a href="https://www.tomsguide.com/wellness/workouts/i-test-hip-mobility-exercises-so-you-dont-have-to-this-one-move-always-stands-out"><u>hip strength</u></a> without requiring a deep bend in the knees.</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/l_U2uoePtS4" allowfullscreen></iframe></div></div><p><strong>How to do it</strong></p><ul><li>Stand tall beside a sturdy chair or countertop, holding on for support.</li><li>Keep your feet pointing forwards and your torso upright.</li><li>Slowly lift one leg out to the side, keeping your knee straight but not locked.</li><li>Avoid leaning your upper body in the opposite direction or turning your toes towards the ceiling.</li><li>Pause briefly, then lower your leg with control.</li></ul><p><strong>Make it easier:</strong> Lift your leg only a few inches, prioritising control over height. Use both hands on the support.</p><p><strong>Make it harder:</strong> Add a resistance band around your thighs, just above your knees.</p><h3 class="article-body__section" id="section-5-standing-calf-raises"><span>5. Standing calf raises</span></h3><p>Your calf muscles help propel you forwards as you walk and contribute to <a href="https://www.tomsguide.com/wellness/fitness/if-you-have-tight-ankles-or-stiff-joints-a-personal-trainer-recommends-these-3-underrated-mobility-exercises"><u>ankle stability</u></a>, so it’s important we keep them in check. <a href="https://www.tomsguide.com/wellness/workouts/im-a-personal-trainer-this-is-the-one-exercise-i-want-you-to-practice-daily-if-youre-over-60"><u>Calf raises</u></a> are a tried and tested exercise for strengthening the calves without bending your knees into a squat.</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/nnPGrBLNlaw" allowfullscreen></iframe></div></div><p><strong>How to do it</strong></p><ul><li>Stand behind a sturdy chair or countertop, with your feet hip-width apart.</li><li>Hold on for support and keep your torso upright.</li><li>Slowly lift your heels off the floor, rising onto the balls of your feet.</li><li>Pause at the top, then lower your heels slowly back to the floor.</li></ul><p><strong>Make it easier:</strong> Try <a href="https://www.tomsguide.com/features/i-did-100-seated-calf-raises-every-day-for-a-week-heres-what-happened"><u>seated calf raises</u></a> instead. Sit in a sturdy chair with your feet flat on the floor, then lift your heels while keeping the balls of your feet grounded.</p><p><strong>Make it harder:</strong> Try raising one heel at a time or slowing down the lowering phase to make your calves work harder.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.js" async></script><p>These exercises are proof that you don’t have to squat to build lower-body strength. Together, they target key lower-body muscles that support walking, balance and everyday movement as we age. </p><p>Start with one set of controlled repetitions for each exercise, and aim to practice them twice a week. Over time, your legs should start to feel stronger and more capable.</p><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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank"><strong>I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-how-to-be-strong-and-mobile-this-is-the-one-exercise-i-regret-ignoring-for-years" target="_blank"><strong>I teach people how to be strong and mobile: this is the one exercise I regret ignoring for years</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank"><strong>I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I walked 6,000 steps with the Fitbit Edge vs Apple Watch 12 — and I'm shocked by the results ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I walked exactly 6,094 steps wearing the Fitbit Edge on my left wrist and the Apple Watch Series 12 on my right wrist to find out which is the more accurate fitness tracker.</p><p>My 55-minute walk also included just under 500 feet of elevation gain with roughly three miles of ground covered. As a control, I separately logged my walk using the Strava app on my iPhone 16 Plus. </p><p>Find the results of my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people">Fitbit Edge</a> versus <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review">Apple Watch Series 12</a> head-to-head fitness tracking performance test below, along with the five biggest takeaways from the data. </p><h2 id="fitbit-edge-vs-apple-watch-12">Fitbit Edge vs. Apple Watch 12 </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="QKXfJYDjTvWBfnLJnwgfdH" name="FitbitEdge-AW12-02" alt="Close-up of both the Apple Watch 12 and Fitbit Edge in a user's hand against a colorful background" src="https://cdn.mos.cms.futurecdn.net/QKXfJYDjTvWBfnLJnwgfdH-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>But first, it's worth calling out key differences in terms of cost, features, and intended user between these two modern devices. For instance, when it comes to full-featured wearables, the Apple Watch 12 is one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> you can buy.</p><p>The Fitbit Edge, meanwhile, has essentially zero smart features, but is still among the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> on the market because it offers reliable, distraction-free holistic insights. Cost-wise, the Fitbit Edge <a href="https://www.amazon.com/Apple-Watch-Smartwatch-Bronze-Aluminum/dp/B0HJB63G4M/" target="_blank" rel="nofollow">starts at $179</a>, and the Apple Watch 12 <a href="https://www.amazon.com/Apple-Watch-Smartwatch-Bronze-Aluminum/dp/B0HJB63G4M/" target="_blank" rel="nofollow">starts at $399</a>.</p><p>While the Apple Watch 12 is for iOS users only, the Fitbit Edge brings Google's best health and fitness features to both Android and iOS devices. </p><p>Ultimately, when it comes to onboard holistic and tracking tech, the two are fairly evenly matched: Both models have GPS, barometric altimeters, and continuous heart rate monitors. </p><p>With that out of the way, on to the test results!</p><h3 class="article-body__section" id="section-i-walked-6-000-steps-with-the-fitbit-edge-vs-apple-watch-12"><span>I walked 6,000 steps with the Fitbit Edge vs Apple Watch 12</span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Edge</p></th><th  ><p>Apple Watch 12</p></th><th  ><p>Strava (control)</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>6,079 steps</p></td><td  ><p>6,053 steps</p></td><td  ><p>6,094 steps</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p> 3.15 miles</p></td><td  ><p>3.22 miles</p></td><td  ><p>3.28 miles</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>476 feet</p></td><td  ><p>502 feet</p></td><td  ><p>480 feet</p></td></tr><tr><td class="firstcol " ><p><strong>Average elapsed pace</strong></p></td><td  ><p>18 mins 21 secs per mile</p></td><td  ><p>17 mins 07 secs per mile</p></td><td  ><p>16 mins 58 secs per mile</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>115 bpm</p></td><td  ><p>133 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>163 bpm</p></td><td  ><p>168 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>531 total calories</p></td><td  ><p>461 total calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery usage</strong></p></td><td  ><p>10%</p></td><td  ><p>0%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-1-fitbit-s-step-count-is-closer-to-the-control"><span>1. Fitbit's step count is closer to the control</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XChuFVdKVe6KKigTsWyfMY" name="FitbitEdge-lead-02" alt="Close-up of the Fitbit Edge fitness tracker on the reviewers' wrist against a bright red background" src="https://cdn.mos.cms.futurecdn.net/XChuFVdKVe6KKigTsWyfMY-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I walked precisely 6,094 steps during my 55-minute outing, according to the control data logged by Strava, a tally that the Fitbit Edge came ridiculously close to matching. </p><p>In terms of accuracy in these comparisons, my rule of thumb is that any step count within 100 steps of the control is excellent and well within a reasonable margin of error. With that in mind, Apple and Fitbit each performed seriously well. But while Apple undercounted by only 41 steps, the Fitbit Edge came within 15 steps of my actual total. </p><h3 class="article-body__section" id="section-2-but-apple-s-total-distance-is-more-accurate"><span>2. But Apple's total distance is more accurate</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZjhiNQFQLmwXFVjSJCUGQ9" name="AW12-step-widget-03" alt="Close-up of the Apple Watch Series 12 on a user's wrist with the new step count widget shown on the watch face" src="https://cdn.mos.cms.futurecdn.net/ZjhiNQFQLmwXFVjSJCUGQ9-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>On the flip side, when it came to correctly logging my total distance, the Apple Watch Series 12 proved more accurate than the Fitbit Edge, with a tally that's just 0.06 miles off from Strava's measure.</p><p>The Fitbit Edge didn't do too badly, though, coming within 0.13 miles of the control data, a result I still deem more than acceptable.</p><h3 class="article-body__section" id="section-3-fitbit-s-climb-data-is-spot-on"><span>3. Fitbit's climb data is spot-on</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FRt3fdNv6m42HjBWukGBWk" name="FitbitEdge-rev-10" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/FRt3fdNv6m42HjBWukGBWk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I just published my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people">Fitbit Edge review</a>, and one of the upgrades I'm most excited for is the onboard barometric altimeter for precise elevation tracking. The Edge's predecessor, 2023's <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>, lacked this important piece of tech. While some wearables try to roughly calculate climb using GPS data, the Charge 6 never did. </p><p>The upgrade definitely paid off, because the Fitbit Edge logs uphill efforts with impressive reliability. For this test, the Edge's climb data is within four feet of the control. The Apple Watch 12, meanwhile, proved a little more generous with its climb data, a trend I've noted several times before in similar head-to-heads.</p><h3 class="article-body__section" id="section-4-apple-s-average-heart-rate-is-slightly-higher-than-expected"><span>4. Apple's average heart rate is slightly higher than expected</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:1541px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="u4rBKarcnhBMVXdeQU9Jxn" name="AW12-Readiness-widget" alt="Close-up of the Apple Watch 12 home screen; the daily Readiness Score as one of  several widgets shown" src="https://cdn.mos.cms.futurecdn.net/u4rBKarcnhBMVXdeQU9Jxn-1920-80.jpg" mos="" align="middle" fullscreen="" width="1541" height="867" 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>I'm not sure if the Apple Watch 12 wasn't worn tightly enough (or maybe too tightly), but the logged average heart rate of 133 bpm for this brisk yet not overly demanding walk is slightly higher than I expected, especially when compared to heart rate data from walks of similar effort (~120 bpm tends to be my average). </p><p>That said, the Fitbit Edge's average heart rate is slightly lower than anticipated, though the max pace is much more aligned with what I've come to expect from such a workout. </p><h3 class="article-body__section" id="section-5-apple-s-pace-is-closer-to-the-control-but-fitbit-wins-overall"><span>5. Apple's pace is closer to the control, but Fitbit wins overall</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dKWbhrd2xJi3qyV3xRDsYH" name="FitbitEdge-AW12-01" alt="Close-up of both the Apple Watch 12 and Fitbit Edge in a user's hand against a colorful background" src="https://cdn.mos.cms.futurecdn.net/dKWbhrd2xJi3qyV3xRDsYH-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Finally,  Apple's average pace data is much more closely aligned with Strava's. Fitbit's tally, meanwhile, I'd label as "slower than expected," especially given the fact that I was moving briskly and barely paused at any point during the walk. </p><p>That said, the Edge logged several additional minutes of workout time compared to Strava and Apple (it was the last device I ended my workout on), which might be the reason for the sluggishness. </p><p>Ultimately, pace aside, I'm calling the Fitbit Edge the winner for this head-to-head fitness tracking showdown versus the Apple Watch Series 12. Not only did the Edge log a more accurate step count, but it also beat Apple at logging my climb and heart rate (even if the Apple Watch was closer in terms of distance and pace).</p><p>Of course, I'd happily trust either device as my daily fitness tracker. Which begs the question: Which of these two 2026 wearables would you rather own? Let me know in the poll below.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgrNX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgrNX.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-5-500-steps-with-the-apple-watch-12-vs-garmin-venu-4-and-the-winner-was-nearly-too-close-to-call"><strong>I walked 5,500 steps with the Apple Watch 12 vs Garmin Venu 4 — here's the winner</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-vs-apple-watch-ultra-4-which-new-apple-watch-should-you-buy"><strong>Apple Watch Series 12 vs Apple Watch Ultra 4: Which new Apple Watch should you buy?</strong></a></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/ive-tested-over-100-fitness-trackers-head-to-head-3-workout-stats-i-trust-the-least"><strong>I’ve tested over 100 fitness trackers head-to-head — 3 workout stats I trust the least</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/i-walked-6-000-steps-with-the-fitbit-edge-vs-apple-watch-12-and-im-shocked-by-the-results</link>
                                                                            <description>
                            <![CDATA[ I put two of the top wearables of 2026, the Apple Watch 12 and Fitbit Edge, to the test in a head-to-head comparison of fitness tracking performance. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">QCraU4XjqMdhU2jdojpZX5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TtQxRKJttrbF8a9gdZX7gH-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Oct 2026 05:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 27 Oct 2026 08:55: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-320-70.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/TtQxRKJttrbF8a9gdZX7gH-1920-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of both the Apple Watch 12 and Fitbit Edge in a user&#039;s hand against a colorful background]]></media:description>                                                            <media:text><![CDATA[Close-up of both the Apple Watch 12 and Fitbit Edge in a user&#039;s hand against a colorful background]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of both the Apple Watch 12 and Fitbit Edge in a user&#039;s hand against a colorful background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TtQxRKJttrbF8a9gdZX7gH-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I walked exactly 6,094 steps wearing the Fitbit Edge on my left wrist and the Apple Watch Series 12 on my right wrist to find out which is the more accurate fitness tracker.</p><p>My 55-minute walk also included just under 500 feet of elevation gain with roughly three miles of ground covered. As a control, I separately logged my walk using the Strava app on my iPhone 16 Plus. </p><p>Find the results of my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people">Fitbit Edge</a> versus <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review">Apple Watch Series 12</a> head-to-head fitness tracking performance test below, along with the five biggest takeaways from the data. </p><h2 id="fitbit-edge-vs-apple-watch-12">Fitbit Edge vs. Apple Watch 12 </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="QKXfJYDjTvWBfnLJnwgfdH" name="FitbitEdge-AW12-02" alt="Close-up of both the Apple Watch 12 and Fitbit Edge in a user's hand against a colorful background" src="https://cdn.mos.cms.futurecdn.net/QKXfJYDjTvWBfnLJnwgfdH-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>But first, it's worth calling out key differences in terms of cost, features, and intended user between these two modern devices. For instance, when it comes to full-featured wearables, the Apple Watch 12 is one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> you can buy.</p><p>The Fitbit Edge, meanwhile, has essentially zero smart features, but is still among the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> on the market because it offers reliable, distraction-free holistic insights. Cost-wise, the Fitbit Edge <a href="https://www.amazon.com/Apple-Watch-Smartwatch-Bronze-Aluminum/dp/B0HJB63G4M/" target="_blank" rel="nofollow">starts at $179</a>, and the Apple Watch 12 <a href="https://www.amazon.com/Apple-Watch-Smartwatch-Bronze-Aluminum/dp/B0HJB63G4M/" target="_blank" rel="nofollow">starts at $399</a>.</p><p>While the Apple Watch 12 is for iOS users only, the Fitbit Edge brings Google's best health and fitness features to both Android and iOS devices. </p><p>Ultimately, when it comes to onboard holistic and tracking tech, the two are fairly evenly matched: Both models have GPS, barometric altimeters, and continuous heart rate monitors. </p><p>With that out of the way, on to the test results!</p><h3 class="article-body__section" id="section-i-walked-6-000-steps-with-the-fitbit-edge-vs-apple-watch-12"><span>I walked 6,000 steps with the Fitbit Edge vs Apple Watch 12</span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Edge</p></th><th  ><p>Apple Watch 12</p></th><th  ><p>Strava (control)</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Steps</strong></p></td><td  ><p>6,079 steps</p></td><td  ><p>6,053 steps</p></td><td  ><p>6,094 steps</p></td></tr><tr><td class="firstcol " ><p><strong>Distance</strong></p></td><td  ><p> 3.15 miles</p></td><td  ><p>3.22 miles</p></td><td  ><p>3.28 miles</p></td></tr><tr><td class="firstcol " ><p><strong>Climb</strong></p></td><td  ><p>476 feet</p></td><td  ><p>502 feet</p></td><td  ><p>480 feet</p></td></tr><tr><td class="firstcol " ><p><strong>Average elapsed pace</strong></p></td><td  ><p>18 mins 21 secs per mile</p></td><td  ><p>17 mins 07 secs per mile</p></td><td  ><p>16 mins 58 secs per mile</p></td></tr><tr><td class="firstcol " ><p><strong>Average heart rate</strong></p></td><td  ><p>115 bpm</p></td><td  ><p>133 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Max heart rate</strong></p></td><td  ><p>163 bpm</p></td><td  ><p>168 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Calories burned</strong></p></td><td  ><p>531 total calories</p></td><td  ><p>461 total calories</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Battery usage</strong></p></td><td  ><p>10%</p></td><td  ><p>0%</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-1-fitbit-s-step-count-is-closer-to-the-control"><span>1. Fitbit's step count is closer to the control</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XChuFVdKVe6KKigTsWyfMY" name="FitbitEdge-lead-02" alt="Close-up of the Fitbit Edge fitness tracker on the reviewers' wrist against a bright red background" src="https://cdn.mos.cms.futurecdn.net/XChuFVdKVe6KKigTsWyfMY-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I walked precisely 6,094 steps during my 55-minute outing, according to the control data logged by Strava, a tally that the Fitbit Edge came ridiculously close to matching. </p><p>In terms of accuracy in these comparisons, my rule of thumb is that any step count within 100 steps of the control is excellent and well within a reasonable margin of error. With that in mind, Apple and Fitbit each performed seriously well. But while Apple undercounted by only 41 steps, the Fitbit Edge came within 15 steps of my actual total. </p><h3 class="article-body__section" id="section-2-but-apple-s-total-distance-is-more-accurate"><span>2. But Apple's total distance is more accurate</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZjhiNQFQLmwXFVjSJCUGQ9" name="AW12-step-widget-03" alt="Close-up of the Apple Watch Series 12 on a user's wrist with the new step count widget shown on the watch face" src="https://cdn.mos.cms.futurecdn.net/ZjhiNQFQLmwXFVjSJCUGQ9-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>On the flip side, when it came to correctly logging my total distance, the Apple Watch Series 12 proved more accurate than the Fitbit Edge, with a tally that's just 0.06 miles off from Strava's measure.</p><p>The Fitbit Edge didn't do too badly, though, coming within 0.13 miles of the control data, a result I still deem more than acceptable.</p><h3 class="article-body__section" id="section-3-fitbit-s-climb-data-is-spot-on"><span>3. Fitbit's climb data is spot-on</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FRt3fdNv6m42HjBWukGBWk" name="FitbitEdge-rev-10" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/FRt3fdNv6m42HjBWukGBWk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>I just published my <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people">Fitbit Edge review</a>, and one of the upgrades I'm most excited for is the onboard barometric altimeter for precise elevation tracking. The Edge's predecessor, 2023's <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>, lacked this important piece of tech. While some wearables try to roughly calculate climb using GPS data, the Charge 6 never did. </p><p>The upgrade definitely paid off, because the Fitbit Edge logs uphill efforts with impressive reliability. For this test, the Edge's climb data is within four feet of the control. The Apple Watch 12, meanwhile, proved a little more generous with its climb data, a trend I've noted several times before in similar head-to-heads.</p><h3 class="article-body__section" id="section-4-apple-s-average-heart-rate-is-slightly-higher-than-expected"><span>4. Apple's average heart rate is slightly higher than expected</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:1541px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="u4rBKarcnhBMVXdeQU9Jxn" name="AW12-Readiness-widget" alt="Close-up of the Apple Watch 12 home screen; the daily Readiness Score as one of  several widgets shown" src="https://cdn.mos.cms.futurecdn.net/u4rBKarcnhBMVXdeQU9Jxn-1920-80.jpg" mos="" align="middle" fullscreen="" width="1541" height="867" 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>I'm not sure if the Apple Watch 12 wasn't worn tightly enough (or maybe too tightly), but the logged average heart rate of 133 bpm for this brisk yet not overly demanding walk is slightly higher than I expected, especially when compared to heart rate data from walks of similar effort (~120 bpm tends to be my average). </p><p>That said, the Fitbit Edge's average heart rate is slightly lower than anticipated, though the max pace is much more aligned with what I've come to expect from such a workout. </p><h3 class="article-body__section" id="section-5-apple-s-pace-is-closer-to-the-control-but-fitbit-wins-overall"><span>5. Apple's pace is closer to the control, but Fitbit wins overall</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dKWbhrd2xJi3qyV3xRDsYH" name="FitbitEdge-AW12-01" alt="Close-up of both the Apple Watch 12 and Fitbit Edge in a user's hand against a colorful background" src="https://cdn.mos.cms.futurecdn.net/dKWbhrd2xJi3qyV3xRDsYH-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Finally,  Apple's average pace data is much more closely aligned with Strava's. Fitbit's tally, meanwhile, I'd label as "slower than expected," especially given the fact that I was moving briskly and barely paused at any point during the walk. </p><p>That said, the Edge logged several additional minutes of workout time compared to Strava and Apple (it was the last device I ended my workout on), which might be the reason for the sluggishness. </p><p>Ultimately, pace aside, I'm calling the Fitbit Edge the winner for this head-to-head fitness tracking showdown versus the Apple Watch Series 12. Not only did the Edge log a more accurate step count, but it also beat Apple at logging my climb and heart rate (even if the Apple Watch was closer in terms of distance and pace).</p><p>Of course, I'd happily trust either device as my daily fitness tracker. Which begs the question: Which of these two 2026 wearables would you rather own? Let me know in the poll below.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exgrNX"></div>                            </div>                            <script src="https://kwizly.com/embed/exgrNX.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-5-500-steps-with-the-apple-watch-12-vs-garmin-venu-4-and-the-winner-was-nearly-too-close-to-call"><strong>I walked 5,500 steps with the Apple Watch 12 vs Garmin Venu 4 — here's the winner</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-vs-apple-watch-ultra-4-which-new-apple-watch-should-you-buy"><strong>Apple Watch Series 12 vs Apple Watch Ultra 4: Which new Apple Watch should you buy?</strong></a></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/ive-tested-over-100-fitness-trackers-head-to-head-3-workout-stats-i-trust-the-least"><strong>I’ve tested over 100 fitness trackers head-to-head — 3 workout stats I trust the least</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Fitbit Edge review: Just the right amount of fitness tracker for most people ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Fitbit Charge 6  is one of the fitness trackers I've recommended the most over the past three years. Originally launched in 2023, a replacement has been long overdue, and for a while, I had my doubts we'd ever get one. </p><p>After all, when Google <a href="https://www.tomsguide.com/news/google-acquires-fitbit-for-21-billion">acquired Fitbit in 2021</a>, it wasn't crystal clear what the tech giant's plans were for the brand. Would the Fitbit name live on, or would the best bits of Fitbit be chopped up for parts and fed to the more advanced Pixel Watch line? </p><p>Now we have our answer. The Fitbit line truly lives on with the launch of the 2026 Fitbit Edge, which I've been wearing for the past ten days. </p><p>A worthy replacement for the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6,</a> the Fitbit Edge is <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-vs-fitbit-charge-6-which-google-fitness-tracker-wins#section-fitbit-edge-vs-fitbit-charge-6-design">better than its predecessor</a> in nearly every way. Moreover, the Fitbit Edge feels like just the right amount of fitness tracker for most folks, which is why I highly recommend it. </p><h3 class="article-body__section" id="section-fitbit-edge-specs-compared"><span>Fitbit Edge: 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PTjN8q9e45sZwgK2hHWfWC" name="FitbitEdge-rev-08" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/PTjN8q9e45sZwgK2hHWfWC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Edge</p></th><th  ><p>Fitbit Charge 6</p></th><th  ><p>Fitbit Air</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$179</p></td><td  ><p>$159</p></td><td  ><p>$99</p></td></tr><tr><td class="firstcol " ><p><strong>Launch date</strong></p></td><td  ><p>October, 2026</p></td><td  ><p>September, 2023</p></td><td  ><p>May, 2026</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></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>39.2 x 25.6 x 11.6 mm</p></td><td  ><p>36.7 x 23.1 x 11.2 mm</p></td><td  ><p>35 x 17 x 8.3 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight w/ strap</strong></p></td><td  ><p>32 g</p></td><td  ><p>30 g</p></td><td  ><p>12 g</p></td></tr><tr><td class="firstcol " ><p><strong>Display </strong></p></td><td  ><p>1.34-inch AMOLED</p></td><td  ><p>1.04-inch AMOLED</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Sensors</strong></p></td><td  ><p>Heart rate, SpO2, Skin temp, ECG, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, Skin temp, ECG, 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>Yes</p></td><td  ><p>Yes</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Altimeter</strong></p></td><td  ><p>Yes</p></td><td  ><p>No</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>NFC</strong></p></td><td  ><p>No</p></td><td  ><p>Yes</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life (rated)</strong></p></td><td  ><p>Up to 7 days</p></td><td  ><p>Up to 7 days</p></td><td  ><p>Up to 7 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><td  ><p>50 meters</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-fitbit-edge-value-4-5"><span>Fitbit Edge value: 4/5</span></h3><ul><li><strong>The Fitbit Edge costs roughly the same as its 2023 predecessor, accounting for inflation</strong></li><li><strong>The optional Google Health Premium subscription is $9.99 a month or $99 a year and includes personalized AI-backed holistic trend reports, training tips, custom workout plans, and more</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:833px;"><p class="vanilla-image-block" style="padding-top:56.18%;"><img id="3h9gMohY4YuHP9FfQEFvoL" name="Fitbit Edge" alt="a photo of the Fitbit Edge" src="https://cdn.mos.cms.futurecdn.net/3h9gMohY4YuHP9FfQEFvoL-1920-80.jpg" mos="" align="middle" fullscreen="" width="833" height="468" 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 Edge is priced at <a href="https://www.amazon.com/dp/B0HG61DKC8" target="_blank" rel="nofollow">$179 via Amazon</a> and other major retailers, which is pretty close to the $159 launch price of its 2023 predecessor, accounting for inflation. It's also $79 more than the screen-free <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a>, which also arrived this year.</p><p>Google offers the Fitbit Edge in an impressive range of case designs. Options include a Matte Black case with an Obsidian strap (shown here), a Satin Silver case with a "Fog" strap, a  Satin Pyrite case with an Olive strap, a Champagne Gold case with a "Canyon" strap, and a Satin Pyrite case with a limited edition Stephen Curry band ($219).</p><p>There are also plenty of accessory straps in all styles and materials, including metal, silicone, and woven cloth to choose from for added personalization. </p><p><strong>Fitbit Edge value: 4/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-design-and-display-4-5-5"><span>Fitbit Edge design and display: 4.5/5</span></h3><ul><li><strong>Comfortable, highly customizable design with lots of strap options to choose from</strong></li><li><strong>Aluminum case with 50 meters of water resistance</strong></li><li><strong>Larger, brighter display than its predecessor, despite a similarly sized case design</strong></li><li><strong>Google ditched the haptic button of the Fitbit Charge 6 for a more responsive physical button on the Fitbit Edge</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hzzx3SFfMkmhMJhnHgrwmC" name="FitbitEdge-rev-04" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/Hzzx3SFfMkmhMJhnHgrwmC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Edge case is a tad larger and heavier than its predecessor to accommodate a bigger display. That said, the two feel pretty much indistinguishable once on the wrist. </p><p>Ultimately, I prefer the design of the newer model for several key reasons. While both the Fitbit Charge 6 and Fitbit Edge feature aluminum cases and <a href="https://www.tomsguide.com/wellness/smartwatches/smartwatch-water-resistance-ratings-explained#section-50-meters-water-resistance">50 meters</a> of water resistance (enough for surface-level swims, hand-washing, etc.), the Edge boasts a 1.34-inch AMOLED screen with 1,000 nits of max brightness that's far roomier and easier to view in direct sunlight than the Charge 6's  1.04-inch touchscreen with roughly 450 nits of max brightness.</p><p>In terms of controls, the Fitbit Charge 6 has a single haptic-style button on the side of the case that vibrates slightly when you press it. I've never been a huge fan, and I'm thankful that Google reverted to a physical, clickable button on the Edge's case.</p><p><strong>Fitbit Edge design and display: 4.5/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-health-tracking-4-5-5"><span>Fitbit Edge Health tracking: 4.5/5</span></h3><ul><li><strong>Detailed nightly sleep reports are 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> I've tested </strong></li><li><strong>The Fitbit Edge supports Google's latest Health Guardian features, including breathing emergency alerts and loss of pulse detection</strong></li><li><strong>The companion Google Health app is easy to navigate, with key vitals and metrics presented front and center, including your heart rate, HRV, breathing rate and quality, skin temperature, and blood oxygen saturation (SpO2)</strong></li><li><strong>Some health tracking features require a Google Health Premium subscription, like insulin resistance and blood pressure trend reports</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8obRGqn7ctr9KYTt7WBfKC" name="FitbitEdge-rev-07" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/8obRGqn7ctr9KYTt7WBfKC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Edge is packed with all sorts of holistic tech to keep tabs on your heart health, sleep quality, body temperature fluctuations, breathing rate and quality, stress, women's health, and more.</p><p>I'm a particularly big fan of Google's detail-rich daily sleep reports, which include a numeric score out of 100 along with a rating, plus insights into time spent in various sleep stages, sleep interruptions, "sound sleep," and restlessness. </p><p>I also love Google's dynamic Readiness Score, also out of 100; it reflects how much effort you should put into physical fitness daily and is based on your resting heart rate, heart rate variability trends, and recent sleep quality. A low Readiness Score might also reflect an oncoming illness or general fatigue.</p><p>For example, my Readiness Score this morning was 65/100, which Google considers high. This means that I got solid recovery over the weekend, and I'm cleared for a hardcore workout this afternoon. </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="kwQ4Mw2AYBc4gbJstbeVgk" name="FitbitEdge-rev-12" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/kwQ4Mw2AYBc4gbJstbeVgk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Google Health app, which replaces the <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">old Fitbit app</a>, puts all your most important insights and metrics front and center on the main "Today" tab. That said, users can fully customize what appears. By default, the Today tab shows your current step count for the day, Readiness Score, sleep duration and score, and progress toward your weekly cardio goals. </p><p>Meanwhile, the Vitals tab is where you'll find your real-time cardiovascular insights beyond heart rate, including your heart rate variability (HRV), resting heart rate trends, blood oxygen saturation levels, and VO2 max, a measure of the maximum amount of oxygen your body uses during peak exercise.</p><p>The Edge also supports all of Google's Health Guardian features, like high and low heart rate alerts, <a href="https://www.tomsguide.com/wellness/smartwatches/exclusive-google-pm-says-the-pixel-watch-5-is-like-an-airbag-on-your-wrist-thanks-to-features-like-breathing-emergency-detection">breathing emergency alerts, </a>and <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">loss of pulse detection.</a> </p><p>Finally, Google Health Premium subscribers get access to Google's new insulin resistance and <a href="https://www.tomsguide.com/wellness/fitness-trackers/3-reasons-the-new-google-pixel-watch-5-is-good-news-for-the-fitbit-air">blood pressure trend</a> reports, something older Fitbit models don't support. The subscription also unlocks Google's AI-powered health concierge called "<a href="https://www.tomsguide.com/wellness/fitness/i-spent-20-minutes-chatting-with-fitbits-new-ai-fitness-coach-5-things-that-surprised-me">The Coach</a>," which can help you set goals and better understand your real-time and long-term health data.  </p><p><strong>Fitbit Edge Health tracking: 4.5/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-fitness-tracking-4-5-5"><span>Fitbit Edge fitness tracking: 4.5/5</span></h3><ul><li><strong>The Fitbit Edge has onboard GPS (unlike the Fitbit Air) and a barometric altimeter (unlike the Fitbit Charge 6) for precise location and elevation data</strong></li><li><strong>The Fitbit Edge proved just as accurate at tracking a basic walking workout as the Strava app</strong></li><li><strong>50+ common workout types are supported, but auto-workout detection isn't always reliable</strong></li><li><strong>Highly-personalized training plans, recovery advice, and more are available via the Google Health Premium subscription; the Edge ships with a trial to try before you buy</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vBWyfokL3fXrek3HT2PaxW" name="Edge-v-Inspire3-05" alt="Close-up of the Fitbit Edge next to the Fitbit Inspire 3 in a user's hand against a blue background" src="https://cdn.mos.cms.futurecdn.net/vBWyfokL3fXrek3HT2PaxW-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Edge has one clear advantage over its predecessor when it comes to fitness tracking: the inclusion of a barometric altimeter. This handy piece of tech is used to precisely log changes in elevation when tracking an outdoor workout. Not only does the Charge 6 lack an altimeter, but it also doesn't even report climb data. </p><p>In terms of accuracy, I tested the Fitbit Edge's outdoor workout tracking performance against the Strava app running on my iPhone 16 Plus during a particularly hilly ~2.5-mile walk around Seattle, Washington. Check out the results below. </p><div ><table><caption>Walk test comparison vs Strava</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Edge</p></th><th  ><p>Strava app + iPhone 16 Plus</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>4,643 steps</p></td><td  ><p>4,642 steps</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>2.29 miles</p></td><td  ><p>2.47 miles</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>183 feet</p></td><td  ><p>187 feet</p></td></tr><tr><td class="firstcol " ><p>Pace (elapsed)</p></td><td  ><p>21 mins 41 secs per mile</p></td><td  ><p>19 mins 42 secs per mile</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>115 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>143 bpm</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>The Edge logged nearly the exact same number of steps taken during the workout, along with remarkably similar elevation gain data. Distance data aligns slightly less well; the same goes for pace. Then again, Strava almost always logs a quicker pace than other tracking methods I've tested. </p><p>The Fitbit Edge additionally supports 50+ common workout types and can even auto-detect certain ones, like walks and runs, with hit-or-miss reliability. One of the downsides of the feature is that users need to perform a workout for 15 consecutive minutes before auto-detection kicks in.</p><p>This stipulation means that, as a newbie runner who tends to interval train with a mix of running and walking, I can't really rely on the Edge's auto-detection to log my training efforts. </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="vmyPUsPYBjNEJ47uPsP3bC" name="FitbitEdge-rev-06" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/vmyPUsPYBjNEJ47uPsP3bC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Some of the Fitbit Edge's most impressive training tools and insights require a Google Health Premium subscription. Fortunately, the tracker ships with a three-month free trial. </p><p>Premium subscribers get personalized, adaptive training plans via Google's AI-powered "Coach," custom-tailored daily recommendations to build better workout and recovery habits, and access to Google's large library of fitness and mindfulness video content.  </p><p><strong>Fitbit Edge fitness tracking: 4.5/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-smart-features-2-5"><span>Fitbit Edge smart features: 2/5</span></h3><ul><li><strong>The Fitbit Edge isn't the wearable to get if you want smart features</strong></li><li><strong>The Edge </strong><em><strong>does</strong></em><strong> support mirrored notifications and music control for paired Android and iOS devices</strong></li><li><strong>Unlike the Fitbit Charge 6, the new Fitbit Edge lacks NFC for contactless payments</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="K5Ec6PiZEMb2zXiaHvC4gk" name="FitbitEdge-rev-11" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/K5Ec6PiZEMb2zXiaHvC4gk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>If you want smart features, the Fitbit Edge probably isn't the wearable for you. Instead, consider the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch5-review">Google Pixel Watch 5</a>, one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> of 2026.</p><p>That said, the Fitbit Edge <em>does</em> work with both Android and iOS devices (unlike the Pixel Watch 5), with support for mirrored notifications and music/media control. </p><p>Unfortunately, unlike 2023's Fitbit Charge 6, the Fitbit Edge lacks onboard NFC for contactless payments. </p><p><strong>Fitbit Edge smart features: 2/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-battery-life-4-5-5"><span>Fitbit Edge battery life: 4.5/5</span></h3><ul><li><strong>In my testing, the Edge surpassed its advertised battery life rating of seven days per charge </strong></li><li><strong>That includes logging one ~45-minute workout per day during the test period</strong></li><li><strong>The Fitbit Edge recharges from 0 to 100% in about 90 minutes, compared to a two-hour recharge time for the Fitbit Charge 6</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2sgX53av2p7u4Yi27YJfjk" name="FitbitEdge-rev-13" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/2sgX53av2p7u4Yi27YJfjk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Google rates the Fitbit Edge's battery life at seven days per charge with normal use, the same as its predecessor. However, in reality, the Fitbit Charge 6 lasts closer to five or six days per charge. </p><p>Fortunately, in my testing, the Fitbit Edge not only met the advertised rating, but surpassed it by a cool 24 hours. During the eight days of battery testing, the Edge rarely left my wrist, and I logged a roughly 45-minute outdoor workout using GPS each day of the test period. </p><p>The Fitbit Edge also recharges faster than its predecessor. Google claims a 90-minute recharge time from 0 to 100%. In my testing, it took the Edge roughly 90 minutes to go from 5% to 100%. By comparison, the Fitbit Charge 6 needs closer to two hours for a full recharge. </p><p><strong>Fitbit Edge battery life: 4.5/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-review-verdict"><span>Fitbit Edge 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FRt3fdNv6m42HjBWukGBWk" name="FitbitEdge-rev-10" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/FRt3fdNv6m42HjBWukGBWk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>The Fitbit Edge offers nearly all of the best health and fitness features found in the latest Google Pixel Watch 5, for a fraction of the price (and in a smaller form factor). </p></blockquote></div><p>The Fitbit Edge is, in most regards, the perfect successor to the Fitbit Charge 6, with a bigger, brighter display, easier-to-use controls, more accurate elevation tracking, access to Google's latest/greatest health and safety features, and better battery performance, in an equally comfortable, similarly priced package.</p><p>Put another way, the Fitbit Edge offers nearly all of the best health and fitness features found in the latest Google Pixel Watch 5, for a fraction of the price (and in a smaller form factor). </p><p>But what about the lack of NFC for contactless payments? My theory is that Google needed to free up some space in the case for the barometric altimeter (used to track elevation), a tradeoff I fully support. After all, as an avid mountain adventurer, while paying for a coffee with my Fitbit sounds nice, accurate climb data is a whole lot nicer. </p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-review-just-the-right-amount-of-fitness-tracker-for-most-people</link>
                                                                            <description>
                            <![CDATA[ The Fitbit Edge is as close as it gets to a perfect fitness tracker thanks to a comfortable, user-friendly design, incredibly accurate workout tracking performance, a bright and responsive display, a long-lasting battery, and health features galore. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">koCz7wAvvdCMk7khkUJaQ7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XChuFVdKVe6KKigTsWyfMY-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 17:00:30 +0000</pubDate>                                                                                                                                <updated>Mon, 26 Oct 2026 20:42:27 +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-320-70.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/XChuFVdKVe6KKigTsWyfMY-1920-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Fitbit Edge fitness tracker on the reviewers&#039; wrist against a bright red background]]></media:description>                                                            <media:text><![CDATA[Close-up of the Fitbit Edge fitness tracker on the reviewers&#039; wrist against a bright red background]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Fitbit Edge fitness tracker on the reviewers&#039; wrist against a bright red background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XChuFVdKVe6KKigTsWyfMY-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Fitbit Charge 6  is one of the fitness trackers I've recommended the most over the past three years. Originally launched in 2023, a replacement has been long overdue, and for a while, I had my doubts we'd ever get one. </p><p>After all, when Google <a href="https://www.tomsguide.com/news/google-acquires-fitbit-for-21-billion">acquired Fitbit in 2021</a>, it wasn't crystal clear what the tech giant's plans were for the brand. Would the Fitbit name live on, or would the best bits of Fitbit be chopped up for parts and fed to the more advanced Pixel Watch line? </p><p>Now we have our answer. The Fitbit line truly lives on with the launch of the 2026 Fitbit Edge, which I've been wearing for the past ten days. </p><p>A worthy replacement for the <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6,</a> the Fitbit Edge is <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-vs-fitbit-charge-6-which-google-fitness-tracker-wins#section-fitbit-edge-vs-fitbit-charge-6-design">better than its predecessor</a> in nearly every way. Moreover, the Fitbit Edge feels like just the right amount of fitness tracker for most folks, which is why I highly recommend it. </p><h3 class="article-body__section" id="section-fitbit-edge-specs-compared"><span>Fitbit Edge: 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PTjN8q9e45sZwgK2hHWfWC" name="FitbitEdge-rev-08" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/PTjN8q9e45sZwgK2hHWfWC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Edge</p></th><th  ><p>Fitbit Charge 6</p></th><th  ><p>Fitbit Air</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$179</p></td><td  ><p>$159</p></td><td  ><p>$99</p></td></tr><tr><td class="firstcol " ><p><strong>Launch date</strong></p></td><td  ><p>October, 2026</p></td><td  ><p>September, 2023</p></td><td  ><p>May, 2026</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></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>39.2 x 25.6 x 11.6 mm</p></td><td  ><p>36.7 x 23.1 x 11.2 mm</p></td><td  ><p>35 x 17 x 8.3 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Weight w/ strap</strong></p></td><td  ><p>32 g</p></td><td  ><p>30 g</p></td><td  ><p>12 g</p></td></tr><tr><td class="firstcol " ><p><strong>Display </strong></p></td><td  ><p>1.34-inch AMOLED</p></td><td  ><p>1.04-inch AMOLED</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p><strong>Sensors</strong></p></td><td  ><p>Heart rate, SpO2, Skin temp, ECG, Accelerometer, Gyroscope</p></td><td  ><p>Heart rate, SpO2, Skin temp, ECG, 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>Yes</p></td><td  ><p>Yes</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Altimeter</strong></p></td><td  ><p>Yes</p></td><td  ><p>No</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>NFC</strong></p></td><td  ><p>No</p></td><td  ><p>Yes</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Battery life (rated)</strong></p></td><td  ><p>Up to 7 days</p></td><td  ><p>Up to 7 days</p></td><td  ><p>Up to 7 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><td  ><p>50 meters</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-fitbit-edge-value-4-5"><span>Fitbit Edge value: 4/5</span></h3><ul><li><strong>The Fitbit Edge costs roughly the same as its 2023 predecessor, accounting for inflation</strong></li><li><strong>The optional Google Health Premium subscription is $9.99 a month or $99 a year and includes personalized AI-backed holistic trend reports, training tips, custom workout plans, and more</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:833px;"><p class="vanilla-image-block" style="padding-top:56.18%;"><img id="3h9gMohY4YuHP9FfQEFvoL" name="Fitbit Edge" alt="a photo of the Fitbit Edge" src="https://cdn.mos.cms.futurecdn.net/3h9gMohY4YuHP9FfQEFvoL-1920-80.jpg" mos="" align="middle" fullscreen="" width="833" height="468" 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 Edge is priced at <a href="https://www.amazon.com/dp/B0HG61DKC8" target="_blank" rel="nofollow">$179 via Amazon</a> and other major retailers, which is pretty close to the $159 launch price of its 2023 predecessor, accounting for inflation. It's also $79 more than the screen-free <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-air-review">Fitbit Air</a>, which also arrived this year.</p><p>Google offers the Fitbit Edge in an impressive range of case designs. Options include a Matte Black case with an Obsidian strap (shown here), a Satin Silver case with a "Fog" strap, a  Satin Pyrite case with an Olive strap, a Champagne Gold case with a "Canyon" strap, and a Satin Pyrite case with a limited edition Stephen Curry band ($219).</p><p>There are also plenty of accessory straps in all styles and materials, including metal, silicone, and woven cloth to choose from for added personalization. </p><p><strong>Fitbit Edge value: 4/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-design-and-display-4-5-5"><span>Fitbit Edge design and display: 4.5/5</span></h3><ul><li><strong>Comfortable, highly customizable design with lots of strap options to choose from</strong></li><li><strong>Aluminum case with 50 meters of water resistance</strong></li><li><strong>Larger, brighter display than its predecessor, despite a similarly sized case design</strong></li><li><strong>Google ditched the haptic button of the Fitbit Charge 6 for a more responsive physical button on the Fitbit Edge</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hzzx3SFfMkmhMJhnHgrwmC" name="FitbitEdge-rev-04" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/Hzzx3SFfMkmhMJhnHgrwmC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Edge case is a tad larger and heavier than its predecessor to accommodate a bigger display. That said, the two feel pretty much indistinguishable once on the wrist. </p><p>Ultimately, I prefer the design of the newer model for several key reasons. While both the Fitbit Charge 6 and Fitbit Edge feature aluminum cases and <a href="https://www.tomsguide.com/wellness/smartwatches/smartwatch-water-resistance-ratings-explained#section-50-meters-water-resistance">50 meters</a> of water resistance (enough for surface-level swims, hand-washing, etc.), the Edge boasts a 1.34-inch AMOLED screen with 1,000 nits of max brightness that's far roomier and easier to view in direct sunlight than the Charge 6's  1.04-inch touchscreen with roughly 450 nits of max brightness.</p><p>In terms of controls, the Fitbit Charge 6 has a single haptic-style button on the side of the case that vibrates slightly when you press it. I've never been a huge fan, and I'm thankful that Google reverted to a physical, clickable button on the Edge's case.</p><p><strong>Fitbit Edge design and display: 4.5/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-health-tracking-4-5-5"><span>Fitbit Edge Health tracking: 4.5/5</span></h3><ul><li><strong>Detailed nightly sleep reports are 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> I've tested </strong></li><li><strong>The Fitbit Edge supports Google's latest Health Guardian features, including breathing emergency alerts and loss of pulse detection</strong></li><li><strong>The companion Google Health app is easy to navigate, with key vitals and metrics presented front and center, including your heart rate, HRV, breathing rate and quality, skin temperature, and blood oxygen saturation (SpO2)</strong></li><li><strong>Some health tracking features require a Google Health Premium subscription, like insulin resistance and blood pressure trend reports</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8obRGqn7ctr9KYTt7WBfKC" name="FitbitEdge-rev-07" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/8obRGqn7ctr9KYTt7WBfKC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Edge is packed with all sorts of holistic tech to keep tabs on your heart health, sleep quality, body temperature fluctuations, breathing rate and quality, stress, women's health, and more.</p><p>I'm a particularly big fan of Google's detail-rich daily sleep reports, which include a numeric score out of 100 along with a rating, plus insights into time spent in various sleep stages, sleep interruptions, "sound sleep," and restlessness. </p><p>I also love Google's dynamic Readiness Score, also out of 100; it reflects how much effort you should put into physical fitness daily and is based on your resting heart rate, heart rate variability trends, and recent sleep quality. A low Readiness Score might also reflect an oncoming illness or general fatigue.</p><p>For example, my Readiness Score this morning was 65/100, which Google considers high. This means that I got solid recovery over the weekend, and I'm cleared for a hardcore workout this afternoon. </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="kwQ4Mw2AYBc4gbJstbeVgk" name="FitbitEdge-rev-12" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/kwQ4Mw2AYBc4gbJstbeVgk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Google Health app, which replaces the <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">old Fitbit app</a>, puts all your most important insights and metrics front and center on the main "Today" tab. That said, users can fully customize what appears. By default, the Today tab shows your current step count for the day, Readiness Score, sleep duration and score, and progress toward your weekly cardio goals. </p><p>Meanwhile, the Vitals tab is where you'll find your real-time cardiovascular insights beyond heart rate, including your heart rate variability (HRV), resting heart rate trends, blood oxygen saturation levels, and VO2 max, a measure of the maximum amount of oxygen your body uses during peak exercise.</p><p>The Edge also supports all of Google's Health Guardian features, like high and low heart rate alerts, <a href="https://www.tomsguide.com/wellness/smartwatches/exclusive-google-pm-says-the-pixel-watch-5-is-like-an-airbag-on-your-wrist-thanks-to-features-like-breathing-emergency-detection">breathing emergency alerts, </a>and <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">loss of pulse detection.</a> </p><p>Finally, Google Health Premium subscribers get access to Google's new insulin resistance and <a href="https://www.tomsguide.com/wellness/fitness-trackers/3-reasons-the-new-google-pixel-watch-5-is-good-news-for-the-fitbit-air">blood pressure trend</a> reports, something older Fitbit models don't support. The subscription also unlocks Google's AI-powered health concierge called "<a href="https://www.tomsguide.com/wellness/fitness/i-spent-20-minutes-chatting-with-fitbits-new-ai-fitness-coach-5-things-that-surprised-me">The Coach</a>," which can help you set goals and better understand your real-time and long-term health data.  </p><p><strong>Fitbit Edge Health tracking: 4.5/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-fitness-tracking-4-5-5"><span>Fitbit Edge fitness tracking: 4.5/5</span></h3><ul><li><strong>The Fitbit Edge has onboard GPS (unlike the Fitbit Air) and a barometric altimeter (unlike the Fitbit Charge 6) for precise location and elevation data</strong></li><li><strong>The Fitbit Edge proved just as accurate at tracking a basic walking workout as the Strava app</strong></li><li><strong>50+ common workout types are supported, but auto-workout detection isn't always reliable</strong></li><li><strong>Highly-personalized training plans, recovery advice, and more are available via the Google Health Premium subscription; the Edge ships with a trial to try before you buy</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vBWyfokL3fXrek3HT2PaxW" name="Edge-v-Inspire3-05" alt="Close-up of the Fitbit Edge next to the Fitbit Inspire 3 in a user's hand against a blue background" src="https://cdn.mos.cms.futurecdn.net/vBWyfokL3fXrek3HT2PaxW-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Fitbit Edge has one clear advantage over its predecessor when it comes to fitness tracking: the inclusion of a barometric altimeter. This handy piece of tech is used to precisely log changes in elevation when tracking an outdoor workout. Not only does the Charge 6 lack an altimeter, but it also doesn't even report climb data. </p><p>In terms of accuracy, I tested the Fitbit Edge's outdoor workout tracking performance against the Strava app running on my iPhone 16 Plus during a particularly hilly ~2.5-mile walk around Seattle, Washington. Check out the results below. </p><div ><table><caption>Walk test comparison vs Strava</caption><thead><tr><th class="firstcol empty" ></th><th  ><p>Fitbit Edge</p></th><th  ><p>Strava app + iPhone 16 Plus</p></th></tr></thead><tbody><tr><td class="firstcol " ><p>Steps</p></td><td  ><p>4,643 steps</p></td><td  ><p>4,642 steps</p></td></tr><tr><td class="firstcol " ><p>Distance</p></td><td  ><p>2.29 miles</p></td><td  ><p>2.47 miles</p></td></tr><tr><td class="firstcol " ><p>Climb</p></td><td  ><p>183 feet</p></td><td  ><p>187 feet</p></td></tr><tr><td class="firstcol " ><p>Pace (elapsed)</p></td><td  ><p>21 mins 41 secs per mile</p></td><td  ><p>19 mins 42 secs per mile</p></td></tr><tr><td class="firstcol " ><p>Average heart rate</p></td><td  ><p>115 bpm</p></td><td  ><p>n/a</p></td></tr><tr><td class="firstcol " ><p>Max heart rate</p></td><td  ><p>143 bpm</p></td><td  ><p>n/a</p></td></tr></tbody></table></div><p>The Edge logged nearly the exact same number of steps taken during the workout, along with remarkably similar elevation gain data. Distance data aligns slightly less well; the same goes for pace. Then again, Strava almost always logs a quicker pace than other tracking methods I've tested. </p><p>The Fitbit Edge additionally supports 50+ common workout types and can even auto-detect certain ones, like walks and runs, with hit-or-miss reliability. One of the downsides of the feature is that users need to perform a workout for 15 consecutive minutes before auto-detection kicks in.</p><p>This stipulation means that, as a newbie runner who tends to interval train with a mix of running and walking, I can't really rely on the Edge's auto-detection to log my training efforts. </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="vmyPUsPYBjNEJ47uPsP3bC" name="FitbitEdge-rev-06" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/vmyPUsPYBjNEJ47uPsP3bC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Some of the Fitbit Edge's most impressive training tools and insights require a Google Health Premium subscription. Fortunately, the tracker ships with a three-month free trial. </p><p>Premium subscribers get personalized, adaptive training plans via Google's AI-powered "Coach," custom-tailored daily recommendations to build better workout and recovery habits, and access to Google's large library of fitness and mindfulness video content.  </p><p><strong>Fitbit Edge fitness tracking: 4.5/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-smart-features-2-5"><span>Fitbit Edge smart features: 2/5</span></h3><ul><li><strong>The Fitbit Edge isn't the wearable to get if you want smart features</strong></li><li><strong>The Edge </strong><em><strong>does</strong></em><strong> support mirrored notifications and music control for paired Android and iOS devices</strong></li><li><strong>Unlike the Fitbit Charge 6, the new Fitbit Edge lacks NFC for contactless payments</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="K5Ec6PiZEMb2zXiaHvC4gk" name="FitbitEdge-rev-11" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/K5Ec6PiZEMb2zXiaHvC4gk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>If you want smart features, the Fitbit Edge probably isn't the wearable for you. Instead, consider the <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch5-review">Google Pixel Watch 5</a>, one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatches</a> of 2026.</p><p>That said, the Fitbit Edge <em>does</em> work with both Android and iOS devices (unlike the Pixel Watch 5), with support for mirrored notifications and music/media control. </p><p>Unfortunately, unlike 2023's Fitbit Charge 6, the Fitbit Edge lacks onboard NFC for contactless payments. </p><p><strong>Fitbit Edge smart features: 2/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-battery-life-4-5-5"><span>Fitbit Edge battery life: 4.5/5</span></h3><ul><li><strong>In my testing, the Edge surpassed its advertised battery life rating of seven days per charge </strong></li><li><strong>That includes logging one ~45-minute workout per day during the test period</strong></li><li><strong>The Fitbit Edge recharges from 0 to 100% in about 90 minutes, compared to a two-hour recharge time for the Fitbit Charge 6</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2sgX53av2p7u4Yi27YJfjk" name="FitbitEdge-rev-13" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/2sgX53av2p7u4Yi27YJfjk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Google rates the Fitbit Edge's battery life at seven days per charge with normal use, the same as its predecessor. However, in reality, the Fitbit Charge 6 lasts closer to five or six days per charge. </p><p>Fortunately, in my testing, the Fitbit Edge not only met the advertised rating, but surpassed it by a cool 24 hours. During the eight days of battery testing, the Edge rarely left my wrist, and I logged a roughly 45-minute outdoor workout using GPS each day of the test period. </p><p>The Fitbit Edge also recharges faster than its predecessor. Google claims a 90-minute recharge time from 0 to 100%. In my testing, it took the Edge roughly 90 minutes to go from 5% to 100%. By comparison, the Fitbit Charge 6 needs closer to two hours for a full recharge. </p><p><strong>Fitbit Edge battery life: 4.5/5</strong></p><h3 class="article-body__section" id="section-fitbit-edge-review-verdict"><span>Fitbit Edge 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FRt3fdNv6m42HjBWukGBWk" name="FitbitEdge-rev-10" alt="Close-up of the Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/FRt3fdNv6m42HjBWukGBWk-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><div><blockquote><p>The Fitbit Edge offers nearly all of the best health and fitness features found in the latest Google Pixel Watch 5, for a fraction of the price (and in a smaller form factor). </p></blockquote></div><p>The Fitbit Edge is, in most regards, the perfect successor to the Fitbit Charge 6, with a bigger, brighter display, easier-to-use controls, more accurate elevation tracking, access to Google's latest/greatest health and safety features, and better battery performance, in an equally comfortable, similarly priced package.</p><p>Put another way, the Fitbit Edge offers nearly all of the best health and fitness features found in the latest Google Pixel Watch 5, for a fraction of the price (and in a smaller form factor). </p><p>But what about the lack of NFC for contactless payments? My theory is that Google needed to free up some space in the case for the barometric altimeter (used to track elevation), a tradeoff I fully support. After all, as an avid mountain adventurer, while paying for a coffee with my Fitbit sounds nice, accurate climb data is a whole lot nicer. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Alo Yoga's entire site is 30% off ahead of Black Friday — here are my 15 favorite deals ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I'm a huge fan of Alo apparel. It's quickly become one of my go-to brands for working out, getting my steps in and even just lounging around the house. Their prices aren't considered cheap, but their clothes are comfortable, versatile and most importantly, they're durable. </p><p>Although the brand rarely has sales, Alo is currently hosting a <a href="https://www.aloyoga.com/?" target="_blank" rel="nofollow">huge Black Friday Early Access sale with 30% off sitewide</a>. In order to take advantage of this discount, you do have to sign up to become an Alo member, but it's free and extremely simple. (You can <a href="https://www.aloyoga.com/pages/access?" target="_blank" rel="nofollow">sign up at Alo Yoga</a>). Once you sign up, you can get 30% off literally anything you have your eyes set on.</p><p>Even better? Sale items are also slashing an extra 30% off — and my favorite deals start at just $31. We don't know how long this Early Access Sale will last, so we recommend shopping ASAP. Keep scrolling to check out my tried-and-true favorites from the sale.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong></strong><a href="https://www.aloyoga.com/collections/mens-sale?sort_by=PRICE_LOW_TO_HIGH" target="_blank" rel="nofollow"><strong>shop all men's Alo Yoga</strong></a><strong></strong></li><li><strong></strong><a href="https://www.aloyoga.com/collections/womens-sale-all?sort_by=PRICE_LOW_TO_HIGH" target="_blank" rel="nofollow"><strong>shop all women's Alo Yoga</strong></a><strong></strong></li><li><strong>Airlift Intrigue Bra: </strong><a href="https://www.aloyoga.com/products/w9557r-airlift-intrigue-bra-toasted-almond" target="_blank" rel="nofollow"><strong>was $78 now $31</strong></a></li><li><strong>Triumph Long Sleeve Tee: </strong><a href="https://www.aloyoga.com/products/m3079r-triumph-long-sleeve-tee-navy?" target="_blank" rel="nofollow"><strong>was $68 now $34</strong></a></li><li><strong>Airlift Redefine Bra: </strong><a href="https://www.aloyoga.com/products/w9796r-airlift-redefine-bra-black-white" target="_blank" rel="nofollow"><strong>was $88 now $44</strong></a><strong></strong></li><li><strong>Conquer Reform Mock Neck Long Sleeve: </strong><a href="https://www.aloyoga.com/products/m3218r-conquer-reform-mock-neck-long-sleeve-bone" target="_blank" rel="nofollow"><strong>was $98 now $49</strong></a><strong></strong></li><li><strong>Airlift Tennis Skirt: </strong><a href="https://www.aloyoga.com/products/w6435r-airlift-down-the-line-tennis-skirt-black" target="_blank" rel="nofollow"><strong>was $88 now $44</strong></a></li><li><strong>Alosoft Courtside Tennis Dress: </strong><a href="https://www.aloyoga.com/products/w8176r-alosoft-courtside-tennis-dress-white" target="_blank" rel="nofollow"><strong>was $118 now $47</strong></a></li><li><strong>Latitude 1/2 Zip Pullover: </strong><a href="https://www.aloyoga.com/products/m4161r-latitude-light-weight-1-2-zip-pullover-jacket-black" target="_blank" rel="nofollow"><strong>was $178 now $89</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-best-alo-yoga-deals"><span>Best Alo Yoga Deals</span></h3><div class="product"><a data-dimension112="6a8e3f4c-d157-11f1-8710-b3c088979d80" data-action="Deal Block" data-label="Airlift Intrigue Bra (Women's)" data-dimension48="Airlift Intrigue Bra (Women's)" data-dimension25="$31" href="https://www.aloyoga.com/products/w9557r-airlift-intrigue-bra-toasted-almond" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="neAS4wnALZD9n5J3B3gd7T" name="Alo Yoga Airlift Intrigue Bra" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/neAS4wnALZD9n5J3B3gd7T-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w9557r-airlift-intrigue-bra-toasted-almond" target="_blank" rel="nofollow" data-dimension112="6a8e3f4c-d157-11f1-8710-b3c088979d80" data-action="Deal Block" data-label="Airlift Intrigue Bra (Women's)" data-dimension48="Airlift Intrigue Bra (Women's)" data-dimension25="$31">Airlift Intrigue Bra (Women's): was $78 now $31</a></strong><br>The Airlift Intrigue Bra is made from Alo's signature Airlift fabric for a supportive and snug fit that's ready for everything from HIIT to headstands. (Alo recommends sizing up if you have a fuller cup size). The cut is simple but flattering, designed with a scoop-neck, adjustable straps that crisscross in back for extra lift. There's also a keyhole cutout.<a class="view-deal button" href="https://www.aloyoga.com/products/w9557r-airlift-intrigue-bra-toasted-almond" target="_blank" rel="nofollow" data-dimension112="6a8e3f4c-d157-11f1-8710-b3c088979d80" data-action="Deal Block" data-label="Airlift Intrigue Bra (Women's)" data-dimension48="Airlift Intrigue Bra (Women's)" data-dimension25="$31">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e3fc4-d157-11f1-8313-ad15c1a960be" data-action="Deal Block" data-label="Triumph Long Sleeve Tee (Men's)" data-dimension48="Triumph Long Sleeve Tee (Men's)" data-dimension25="$34" href="https://www.aloyoga.com/products/m3079r-triumph-long-sleeve-tee-navy?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="KRVhnW2jjpJGyTvpRk8pRD" name="long sleeve" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KRVhnW2jjpJGyTvpRk8pRD-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m3079r-triumph-long-sleeve-tee-navy?" target="_blank" rel="nofollow" data-dimension112="6a8e3fc4-d157-11f1-8313-ad15c1a960be" data-action="Deal Block" data-label="Triumph Long Sleeve Tee (Men's)" data-dimension48="Triumph Long Sleeve Tee (Men's)" data-dimension25="$34">Triumph Long Sleeve Tee (Men's): was $68 now $34</a></strong><br>You can never have enough tees — and this Alo long sleeve is airy, ultra-soft and perfect for training or layering under a light jacket. Plus, it's versatile enough that you can wear it just about anywhere. It's available in various colors.<a class="view-deal button" href="https://www.aloyoga.com/products/m3079r-triumph-long-sleeve-tee-navy?" target="_blank" rel="nofollow" data-dimension112="6a8e3fc4-d157-11f1-8313-ad15c1a960be" data-action="Deal Block" data-label="Triumph Long Sleeve Tee (Men's)" data-dimension48="Triumph Long Sleeve Tee (Men's)" data-dimension25="$34">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e403c-d157-11f1-b426-1dd511171f5a" data-action="Deal Block" data-label="Airlift Redefine Bra (Women's)" data-dimension48="Airlift Redefine Bra (Women's)" data-dimension25="$44" href="https://www.aloyoga.com/products/w9796r-airlift-redefine-bra-black-white" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="pW68i78BhEAGeRLXdzv3rB" name="Alo Yoga Airlift Redefine Bra" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pW68i78BhEAGeRLXdzv3rB-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w9796r-airlift-redefine-bra-black-white" target="_blank" rel="nofollow" data-dimension112="6a8e403c-d157-11f1-b426-1dd511171f5a" data-action="Deal Block" data-label="Airlift Redefine Bra (Women's)" data-dimension48="Airlift Redefine Bra (Women's)" data-dimension25="$44">Airlift Redefine Bra (Women's): was $88 now $44</a></strong><br>The Airlift design features high-compression Airlift performance fabric, stitch lines, and corset detailing. It pairs well with the Infatuation leggings for a very cool finish. It's listed as medium support, which makes it a good option for everything from yoga to running.<a class="view-deal button" href="https://www.aloyoga.com/products/w9796r-airlift-redefine-bra-black-white" target="_blank" rel="nofollow" data-dimension112="6a8e403c-d157-11f1-b426-1dd511171f5a" data-action="Deal Block" data-label="Airlift Redefine Bra (Women's)" data-dimension48="Airlift Redefine Bra (Women's)" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e40b4-d157-11f1-aa15-5f5ef49a9db4" data-action="Deal Block" data-label="Airlift Down the Line Tennis Skirt (Women's)" data-dimension48="Airlift Down the Line Tennis Skirt (Women's)" data-dimension25="$44" href="https://www.aloyoga.com/products/w6435r-airlift-down-the-line-tennis-skirt-black" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="TZsSpJ3BxBmJ4ZL9FZvLXc" name="Alo Yoga Airlift Down The Line Tennis Skirt" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TZsSpJ3BxBmJ4ZL9FZvLXc-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w6435r-airlift-down-the-line-tennis-skirt-black" target="_blank" rel="nofollow" data-dimension112="6a8e40b4-d157-11f1-aa15-5f5ef49a9db4" data-action="Deal Block" data-label="Airlift Down the Line Tennis Skirt (Women's)" data-dimension48="Airlift Down the Line Tennis Skirt (Women's)" data-dimension25="$44">Airlift Down the Line Tennis Skirt (Women's): was $88 now $44</a></strong><br>This tennis skirt is made from Alo's signature Airlift fabric that provides a lightweight feel. It has detailed seams along the front for added definition along with a high-rise waist and built-in shorts (with a hidden pocket) that offers extra coverage on and off the court. <a class="view-deal button" href="https://www.aloyoga.com/products/w6435r-airlift-down-the-line-tennis-skirt-black" target="_blank" rel="nofollow" data-dimension112="6a8e40b4-d157-11f1-aa15-5f5ef49a9db4" data-action="Deal Block" data-label="Airlift Down the Line Tennis Skirt (Women's)" data-dimension48="Airlift Down the Line Tennis Skirt (Women's)" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e41a4-d157-11f1-9180-bbf59447b044" data-action="Deal Block" data-label="Alosoft Courtside Tennis Dress (Women's)" data-dimension48="Alosoft Courtside Tennis Dress (Women's)" data-dimension25="$47" href="https://www.aloyoga.com/products/w8176r-alosoft-courtside-tennis-dress-white" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="XKptohETcY85TbUyX5VLnX" name="alosoft" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XKptohETcY85TbUyX5VLnX-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w8176r-alosoft-courtside-tennis-dress-white" target="_blank" rel="nofollow" data-dimension112="6a8e41a4-d157-11f1-9180-bbf59447b044" data-action="Deal Block" data-label="Alosoft Courtside Tennis Dress (Women's)" data-dimension48="Alosoft Courtside Tennis Dress (Women's)" data-dimension25="$47">Alosoft Courtside Tennis Dress (Women's): was $118 now $47</a></strong><br>This is more of a summer or warm-weather pick, but now that it's on sale, you might as well add it to your cart. This adorable tennis dress is made from Alo's signature Alosoft fabric and has a built-in onesie for all-in-one ease. It offers just the right amount of support, comfort and stretch and is perfect for any adventure.<a class="view-deal button" href="https://www.aloyoga.com/products/w8176r-alosoft-courtside-tennis-dress-white" target="_blank" rel="nofollow" data-dimension112="6a8e41a4-d157-11f1-9180-bbf59447b044" data-action="Deal Block" data-label="Alosoft Courtside Tennis Dress (Women's)" data-dimension48="Alosoft Courtside Tennis Dress (Women's)" data-dimension25="$47">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e412c-d157-11f1-9f4d-21cb954ebd0f" data-action="Deal Block" data-label="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension48="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension25="$49" href="https://www.aloyoga.com/products/m3218r-conquer-reform-mock-neck-long-sleeve-bone" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="mwpJoM9mJPUQGvQSzaW8P3" name="Alo Yoga Conquer Reform Mock Neck Long Sleeve" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mwpJoM9mJPUQGvQSzaW8P3-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m3218r-conquer-reform-mock-neck-long-sleeve-bone" target="_blank" rel="nofollow" data-dimension112="6a8e412c-d157-11f1-9f4d-21cb954ebd0f" data-action="Deal Block" data-label="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension48="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension25="$49">Conquer Reform Mock Neck Long Sleeve (Men's): was $98 now $49</a></strong><br>This Conquer Long Sleeve will leave you looking cool. It's made with Alo's signature stretchy, sweat-wicking Conquer fabric. It offers a slim fit, but it's not clingy. Plus, it'll feel ultra-soft against your skin with a cool buttery feel. <a class="view-deal button" href="https://www.aloyoga.com/products/m3218r-conquer-reform-mock-neck-long-sleeve-bone" target="_blank" rel="nofollow" data-dimension112="6a8e412c-d157-11f1-9f4d-21cb954ebd0f" data-action="Deal Block" data-label="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension48="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e4212-d157-11f1-8057-03d73344435e" data-action="Deal Block" data-label="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension48="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension25="$54" href="https://www.aloyoga.com/products/m1205r-conquer-reform-crewneck-short-sleeve-black?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="SqWdyd5HuAWgavpBCsEErA" name="Alo t-shirt" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/SqWdyd5HuAWgavpBCsEErA-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m1205r-conquer-reform-crewneck-short-sleeve-black?" target="_blank" rel="nofollow" data-dimension112="6a8e4212-d157-11f1-8057-03d73344435e" data-action="Deal Block" data-label="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension48="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension25="$54">Conquer Reform Crewneck Short Sleeve (Men's): was $78 now $54</a></strong><br>This Alo short sleeve is so versatile! It's airy, ultra-soft and perfect for training or layering under your favorite hoodie. I recommend grabbing one in several colors.<a class="view-deal button" href="https://www.aloyoga.com/products/m1205r-conquer-reform-crewneck-short-sleeve-black?" target="_blank" rel="nofollow" data-dimension112="6a8e4212-d157-11f1-8057-03d73344435e" data-action="Deal Block" data-label="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension48="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension25="$54">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e428a-d157-11f1-a682-3b05d21fb917" data-action="Deal Block" data-label="Accolade Short (Women's)" data-dimension48="Accolade Short (Women's)" data-dimension25="$54" href="https://www.aloyoga.com/products/w6472rg-accolade-short-athletic-heather-grey" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="VFMGYyj98EiJSVQw2DinSC" name="Alo Accolade shorts" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/VFMGYyj98EiJSVQw2DinSC-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w6472rg-accolade-short-athletic-heather-grey" target="_blank" rel="nofollow" data-dimension112="6a8e428a-d157-11f1-a682-3b05d21fb917" data-action="Deal Block" data-label="Accolade Short (Women's)" data-dimension48="Accolade Short (Women's)" data-dimension25="$54">Accolade Short (Women's): was $78 now $54</a></strong><br>Elevate your loungewear collection with these super soft shorts that feature french terry fabric on the outside and warm fleece on the inside. I love wearing these cozy shorts around the house or when I'm walking my dog around the block during warmer weather. You'll definitely want to pair them with the stylish Accolade 1/4 Zip that I highlight further below. <a class="view-deal button" href="https://www.aloyoga.com/products/w6472rg-accolade-short-athletic-heather-grey" target="_blank" rel="nofollow" data-dimension112="6a8e428a-d157-11f1-a682-3b05d21fb917" data-action="Deal Block" data-label="Accolade Short (Women's)" data-dimension48="Accolade Short (Women's)" data-dimension25="$54">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e4302-d157-11f1-bef9-0f64c9ef4253" data-action="Deal Block" data-label="Airbrush Real Bra Tank (Women's)" data-dimension48="Airbrush Real Bra Tank (Women's)" data-dimension25="$54" href="https://www.aloyoga.com/products/w9587r-real-bra-tank-navy" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="YZ5EMQJNACcVfTogAGPsbU" name="Alo tank" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YZ5EMQJNACcVfTogAGPsbU-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w9587r-real-bra-tank-navy" target="_blank" rel="nofollow" data-dimension112="6a8e4302-d157-11f1-bef9-0f64c9ef4253" data-action="Deal Block" data-label="Airbrush Real Bra Tank (Women's)" data-dimension48="Airbrush Real Bra Tank (Women's)" data-dimension25="$54">Airbrush Real Bra Tank (Women's): was $78 now $54</a></strong><br>I can't get enough of this tank. So many fitness tanks are itchy and uncomfortable around the rib cage, but this one really does feel airbrushed with softness. I love its wide straps, flattering V-neckline and the fact that it has a built-in bra. Grab the matching yoga pants below to create your fabulous set.<a class="view-deal button" href="https://www.aloyoga.com/products/w9587r-real-bra-tank-navy" target="_blank" rel="nofollow" data-dimension112="6a8e4302-d157-11f1-bef9-0f64c9ef4253" data-action="Deal Block" data-label="Airbrush Real Bra Tank (Women's)" data-dimension48="Airbrush Real Bra Tank (Women's)" data-dimension25="$54">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e4370-d157-11f1-8070-ef5f7931ab86" data-action="Deal Block" data-label="5" Traction Shorts (Men's)" data-dimension48="5" Traction Shorts (Men's)" data-dimension25="$61" href="https://www.aloyoga.com/products/m6169r-5-traction-running-short-black" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="E2Ls8epEvgMgAdu9eiLz5G" name="Alo Yoga Traction Short" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/E2Ls8epEvgMgAdu9eiLz5G-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m6169r-5-traction-running-short-black" target="_blank" rel="nofollow" data-dimension112="6a8e4370-d157-11f1-8070-ef5f7931ab86" data-action="Deal Block" data-label="5" Traction Shorts (Men's)" data-dimension48="5" Traction Shorts (Men's)" data-dimension25="$61">5" Traction Shorts (Men's): was $88 now $61</a></strong><br>Our Deals Editor in Chief can't recommend these shorts enough. First, they're very comfy with an elastic (but secure) waistband that stays in place even during the most intense HIIT sessions. The shorts are made of a slightly perforated, fast-drying fabric, which means they won't get heavy and weigh you down on those sweaty, humid runs. (Don't worry, they're not revealing). Are there cheaper options, yes, but these are a top choice.<a class="view-deal button" href="https://www.aloyoga.com/products/m6169r-5-traction-running-short-black" target="_blank" rel="nofollow" data-dimension112="6a8e4370-d157-11f1-8070-ef5f7931ab86" data-action="Deal Block" data-label="5" Traction Shorts (Men's)" data-dimension48="5" Traction Shorts (Men's)" data-dimension25="$61">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e43e8-d157-11f1-9cb8-4f1f4ca6232e" data-action="Deal Block" data-label="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension48="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension25="$64" href="https://www.aloyoga.com/products/w51207r-airbrush-high-waist-highlight-goddess-legging-black" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="873yoM5e6uuYF2aJS3ryiY" name="Alo deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/873yoM5e6uuYF2aJS3ryiY-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w51207r-airbrush-high-waist-highlight-goddess-legging-black" target="_blank" rel="nofollow" data-dimension112="6a8e43e8-d157-11f1-9cb8-4f1f4ca6232e" data-action="Deal Block" data-label="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension48="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension25="$64">Airbrush High-Waist Highlight Goddess Legging (Women's): was $128 now $64</a></strong><br>These buttery-soft Alo leggings are supportive in all the right places, and right now, you can score 30% off in this black color. This is a total win for just under $100.<a class="view-deal button" href="https://www.aloyoga.com/products/w51207r-airbrush-high-waist-highlight-goddess-legging-black" target="_blank" rel="nofollow" data-dimension112="6a8e43e8-d157-11f1-9cb8-4f1f4ca6232e" data-action="Deal Block" data-label="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension48="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e4460-d157-11f1-ba73-3b5eca588706" data-action="Deal Block" data-label="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension48="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension25="$89" href="https://www.aloyoga.com/products/m4161r-latitude-light-weight-1-2-zip-pullover-jacket-black" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="jpqrb3ejVXYMJ5LpcbTSNE" name="Alo Yoga Latitude Light Weight 1:2 Zip Pullover Jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jpqrb3ejVXYMJ5LpcbTSNE-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m4161r-latitude-light-weight-1-2-zip-pullover-jacket-black" target="_blank" rel="nofollow" data-dimension112="6a8e4460-d157-11f1-ba73-3b5eca588706" data-action="Deal Block" data-label="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension48="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension25="$89">Latitude Light Weight 1/2 Zip Pullover Jacket (Men's): was $178 now $89</a></strong><br>Need a new fall jacket? This lightweight pullover is lightly filled (for a little warmth) and made from 100 percent nylon — the kind that's durable, swishy and ready to face the elements. It also has a half-zip collar, zippered side pockets, banded cuffs, and a banded hem. The fit is relaxed and comfortable.<a class="view-deal button" href="https://www.aloyoga.com/products/m4161r-latitude-light-weight-1-2-zip-pullover-jacket-black" target="_blank" rel="nofollow" data-dimension112="6a8e4460-d157-11f1-ba73-3b5eca588706" data-action="Deal Block" data-label="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension48="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e45fa-d157-11f1-8d7e-8149ba49ea14" data-action="Deal Block" data-label="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension48="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension25="$89" href="https://www.aloyoga.com/products/w51118r-airbrush-high-waist-bootcut-legging-navy?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="Qsw5mp42qkqdNqEk5q5dBf" name="Alo yoga pant" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Qsw5mp42qkqdNqEk5q5dBf-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w51118r-airbrush-high-waist-bootcut-legging-navy?" target="_blank" rel="nofollow" data-dimension112="6a8e45fa-d157-11f1-8d7e-8149ba49ea14" data-action="Deal Block" data-label="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension48="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension25="$89">Airbrush High-Waist Bootcut Legging (Women's): was $128 now $89</a></strong><br>I'm actually wearing these bootcut leggings as I write this! They are my all-time favorite legging, not only because they're comfortable, but because they're extremely flattering. I wear them literally everywhere and usually pair them with sneakers. They look great whether you're working out, walking or just want to put together a cute and casual weekend outfit. I definitely recommend these versatile leggings. <a class="view-deal button" href="https://www.aloyoga.com/products/w51118r-airbrush-high-waist-bootcut-legging-navy?" target="_blank" rel="nofollow" data-dimension112="6a8e45fa-d157-11f1-8d7e-8149ba49ea14" data-action="Deal Block" data-label="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension48="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e467c-d157-11f1-aa03-b981bfb8fb48" data-action="Deal Block" data-label="7/8 High-Waist Airlift Legging (Women's)" data-dimension48="7/8 High-Waist Airlift Legging (Women's)" data-dimension25="$93" href="https://www.aloyoga.com/products/w5766r-7-8-high-waist-airlift-legging-black?variant=38169647710388" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="ZEAYKdVRTdVimtce8fAB2P" name="Alo leggings" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZEAYKdVRTdVimtce8fAB2P-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w5766r-7-8-high-waist-airlift-legging-black?variant=38169647710388" target="_blank" rel="nofollow" data-dimension112="6a8e467c-d157-11f1-aa03-b981bfb8fb48" data-action="Deal Block" data-label="7/8 High-Waist Airlift Legging (Women's)" data-dimension48="7/8 High-Waist Airlift Legging (Women's)" data-dimension25="$93">7/8 High-Waist Airlift Legging (Women's): was $134 now $93</a></strong><br>These buttery-soft Alo leggings are supportive in all the right places, and right now, you can score 30% off in a rainbow of colors. This is a total win for just under $100. <a class="view-deal button" href="https://www.aloyoga.com/products/w5766r-7-8-high-waist-airlift-legging-black?variant=38169647710388" target="_blank" rel="nofollow" data-dimension112="6a8e467c-d157-11f1-aa03-b981bfb8fb48" data-action="Deal Block" data-label="7/8 High-Waist Airlift Legging (Women's)" data-dimension48="7/8 High-Waist Airlift Legging (Women's)" data-dimension25="$93">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e46f4-d157-11f1-96bd-4771f143ee8a" data-action="Deal Block" data-label="Accolade 1/4 Zip Pullover (Women's)" data-dimension48="Accolade 1/4 Zip Pullover (Women's)" data-dimension25="$103" href="https://www.aloyoga.com/products/u3040rg-accolade-1-4-zip-pullover-athletic-heather-grey?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="7ffv5DbfcMMrS4QEmnYHug" name="Accolade sweathshirt" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7ffv5DbfcMMrS4QEmnYHug-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/u3040rg-accolade-1-4-zip-pullover-athletic-heather-grey?" target="_blank" rel="nofollow" data-dimension112="6a8e46f4-d157-11f1-96bd-4771f143ee8a" data-action="Deal Block" data-label="Accolade 1/4 Zip Pullover (Women's)" data-dimension48="Accolade 1/4 Zip Pullover (Women's)" data-dimension25="$103">Accolade 1/4 Zip Pullover (Women's): was $148 now $103</a></strong><br>If you're anything like me, you'll be living in this cozy 1/4 zip. It's an absolute must for crisp spring mornings thanks to its fleece interior. It comes in a variety of colors and matches perfectly with the Accolade shorts above. It also has a <a href="https://www.aloyoga.com/products/u5012rg-accolade-straight-leg-swtpnt-athletic-heather-grey" target="_blank" rel="nofollow">matching pair of sweatpants</a> if you want to be extra warm and cozy.<a class="view-deal button" href="https://www.aloyoga.com/products/u3040rg-accolade-1-4-zip-pullover-athletic-heather-grey?" target="_blank" rel="nofollow" data-dimension112="6a8e46f4-d157-11f1-96bd-4771f143ee8a" data-action="Deal Block" data-label="Accolade 1/4 Zip Pullover (Women's)" data-dimension48="Accolade 1/4 Zip Pullover (Women's)" data-dimension25="$103">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/alo-yogas-entire-site-is-30-percent-off-ahead-of-black-friday-here-are-my-15-favorite-deals</link>
                                                                            <description>
                            <![CDATA[ Alo Yoga deals are rare to find, but the brand's early Black Friday sale is happening now. Here are my favorite deals. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">sKsQDGURXF8gzTAAJgBkxL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/x54Ah3ftmNYju7S6rnEXL8-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 16:26:42 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Olivia Halevy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/YAg7Fmh9dGKbg3hULBMWiU-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Olivia is a Deals Writer at Tom’s Guide. She loves all things lifestyle, shopping and sourcing the best deals from some of the top brands, retailers and websites around. From fashion and beauty to smart home and tech, she has an eye for finding practical, stylish, and reasonably-priced items that help make life simpler (and a little more aesthetically-pleasing).&amp;nbsp;Olivia has over five years of experience writing lifestyle, commerce, and branded content for &lt;a href=&quot;http://patch.com/&quot;&gt;Patch.com&lt;/a&gt;. She&#039;s covered major shopping holidays like Amazon Prime Day, Black Friday and Cyber Monday. In her free time, she enjoys trying out new exercise classes, binge-watching the latest viral TV shows, cooking, spending time with family and taking long walks with her dog, Gus.&amp;nbsp;&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/x54Ah3ftmNYju7S6rnEXL8-1920-80.jpg">
                                                            <media:credit><![CDATA[Alo / edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Alo Yoga]]></media:description>                                                            <media:text><![CDATA[Alo Yoga]]></media:text>
                                <media:title type="plain"><![CDATA[Alo Yoga]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/x54Ah3ftmNYju7S6rnEXL8-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I'm a huge fan of Alo apparel. It's quickly become one of my go-to brands for working out, getting my steps in and even just lounging around the house. Their prices aren't considered cheap, but their clothes are comfortable, versatile and most importantly, they're durable. </p><p>Although the brand rarely has sales, Alo is currently hosting a <a href="https://www.aloyoga.com/?" target="_blank" rel="nofollow">huge Black Friday Early Access sale with 30% off sitewide</a>. In order to take advantage of this discount, you do have to sign up to become an Alo member, but it's free and extremely simple. (You can <a href="https://www.aloyoga.com/pages/access?" target="_blank" rel="nofollow">sign up at Alo Yoga</a>). Once you sign up, you can get 30% off literally anything you have your eyes set on.</p><p>Even better? Sale items are also slashing an extra 30% off — and my favorite deals start at just $31. We don't know how long this Early Access Sale will last, so we recommend shopping ASAP. Keep scrolling to check out my tried-and-true favorites from the sale.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong></strong><a href="https://www.aloyoga.com/collections/mens-sale?sort_by=PRICE_LOW_TO_HIGH" target="_blank" rel="nofollow"><strong>shop all men's Alo Yoga</strong></a><strong></strong></li><li><strong></strong><a href="https://www.aloyoga.com/collections/womens-sale-all?sort_by=PRICE_LOW_TO_HIGH" target="_blank" rel="nofollow"><strong>shop all women's Alo Yoga</strong></a><strong></strong></li><li><strong>Airlift Intrigue Bra: </strong><a href="https://www.aloyoga.com/products/w9557r-airlift-intrigue-bra-toasted-almond" target="_blank" rel="nofollow"><strong>was $78 now $31</strong></a></li><li><strong>Triumph Long Sleeve Tee: </strong><a href="https://www.aloyoga.com/products/m3079r-triumph-long-sleeve-tee-navy?" target="_blank" rel="nofollow"><strong>was $68 now $34</strong></a></li><li><strong>Airlift Redefine Bra: </strong><a href="https://www.aloyoga.com/products/w9796r-airlift-redefine-bra-black-white" target="_blank" rel="nofollow"><strong>was $88 now $44</strong></a><strong></strong></li><li><strong>Conquer Reform Mock Neck Long Sleeve: </strong><a href="https://www.aloyoga.com/products/m3218r-conquer-reform-mock-neck-long-sleeve-bone" target="_blank" rel="nofollow"><strong>was $98 now $49</strong></a><strong></strong></li><li><strong>Airlift Tennis Skirt: </strong><a href="https://www.aloyoga.com/products/w6435r-airlift-down-the-line-tennis-skirt-black" target="_blank" rel="nofollow"><strong>was $88 now $44</strong></a></li><li><strong>Alosoft Courtside Tennis Dress: </strong><a href="https://www.aloyoga.com/products/w8176r-alosoft-courtside-tennis-dress-white" target="_blank" rel="nofollow"><strong>was $118 now $47</strong></a></li><li><strong>Latitude 1/2 Zip Pullover: </strong><a href="https://www.aloyoga.com/products/m4161r-latitude-light-weight-1-2-zip-pullover-jacket-black" target="_blank" rel="nofollow"><strong>was $178 now $89</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-best-alo-yoga-deals"><span>Best Alo Yoga Deals</span></h3><div class="product"><a data-dimension112="6a8e3f4c-d157-11f1-8710-b3c088979d80" data-action="Deal Block" data-label="Airlift Intrigue Bra (Women's)" data-dimension48="Airlift Intrigue Bra (Women's)" data-dimension25="$31" href="https://www.aloyoga.com/products/w9557r-airlift-intrigue-bra-toasted-almond" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="neAS4wnALZD9n5J3B3gd7T" name="Alo Yoga Airlift Intrigue Bra" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/neAS4wnALZD9n5J3B3gd7T-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w9557r-airlift-intrigue-bra-toasted-almond" target="_blank" rel="nofollow" data-dimension112="6a8e3f4c-d157-11f1-8710-b3c088979d80" data-action="Deal Block" data-label="Airlift Intrigue Bra (Women's)" data-dimension48="Airlift Intrigue Bra (Women's)" data-dimension25="$31">Airlift Intrigue Bra (Women's): was $78 now $31</a></strong><br>The Airlift Intrigue Bra is made from Alo's signature Airlift fabric for a supportive and snug fit that's ready for everything from HIIT to headstands. (Alo recommends sizing up if you have a fuller cup size). The cut is simple but flattering, designed with a scoop-neck, adjustable straps that crisscross in back for extra lift. There's also a keyhole cutout.<a class="view-deal button" href="https://www.aloyoga.com/products/w9557r-airlift-intrigue-bra-toasted-almond" target="_blank" rel="nofollow" data-dimension112="6a8e3f4c-d157-11f1-8710-b3c088979d80" data-action="Deal Block" data-label="Airlift Intrigue Bra (Women's)" data-dimension48="Airlift Intrigue Bra (Women's)" data-dimension25="$31">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e3fc4-d157-11f1-8313-ad15c1a960be" data-action="Deal Block" data-label="Triumph Long Sleeve Tee (Men's)" data-dimension48="Triumph Long Sleeve Tee (Men's)" data-dimension25="$34" href="https://www.aloyoga.com/products/m3079r-triumph-long-sleeve-tee-navy?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="KRVhnW2jjpJGyTvpRk8pRD" name="long sleeve" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KRVhnW2jjpJGyTvpRk8pRD-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m3079r-triumph-long-sleeve-tee-navy?" target="_blank" rel="nofollow" data-dimension112="6a8e3fc4-d157-11f1-8313-ad15c1a960be" data-action="Deal Block" data-label="Triumph Long Sleeve Tee (Men's)" data-dimension48="Triumph Long Sleeve Tee (Men's)" data-dimension25="$34">Triumph Long Sleeve Tee (Men's): was $68 now $34</a></strong><br>You can never have enough tees — and this Alo long sleeve is airy, ultra-soft and perfect for training or layering under a light jacket. Plus, it's versatile enough that you can wear it just about anywhere. It's available in various colors.<a class="view-deal button" href="https://www.aloyoga.com/products/m3079r-triumph-long-sleeve-tee-navy?" target="_blank" rel="nofollow" data-dimension112="6a8e3fc4-d157-11f1-8313-ad15c1a960be" data-action="Deal Block" data-label="Triumph Long Sleeve Tee (Men's)" data-dimension48="Triumph Long Sleeve Tee (Men's)" data-dimension25="$34">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e403c-d157-11f1-b426-1dd511171f5a" data-action="Deal Block" data-label="Airlift Redefine Bra (Women's)" data-dimension48="Airlift Redefine Bra (Women's)" data-dimension25="$44" href="https://www.aloyoga.com/products/w9796r-airlift-redefine-bra-black-white" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="pW68i78BhEAGeRLXdzv3rB" name="Alo Yoga Airlift Redefine Bra" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pW68i78BhEAGeRLXdzv3rB-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w9796r-airlift-redefine-bra-black-white" target="_blank" rel="nofollow" data-dimension112="6a8e403c-d157-11f1-b426-1dd511171f5a" data-action="Deal Block" data-label="Airlift Redefine Bra (Women's)" data-dimension48="Airlift Redefine Bra (Women's)" data-dimension25="$44">Airlift Redefine Bra (Women's): was $88 now $44</a></strong><br>The Airlift design features high-compression Airlift performance fabric, stitch lines, and corset detailing. It pairs well with the Infatuation leggings for a very cool finish. It's listed as medium support, which makes it a good option for everything from yoga to running.<a class="view-deal button" href="https://www.aloyoga.com/products/w9796r-airlift-redefine-bra-black-white" target="_blank" rel="nofollow" data-dimension112="6a8e403c-d157-11f1-b426-1dd511171f5a" data-action="Deal Block" data-label="Airlift Redefine Bra (Women's)" data-dimension48="Airlift Redefine Bra (Women's)" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e40b4-d157-11f1-aa15-5f5ef49a9db4" data-action="Deal Block" data-label="Airlift Down the Line Tennis Skirt (Women's)" data-dimension48="Airlift Down the Line Tennis Skirt (Women's)" data-dimension25="$44" href="https://www.aloyoga.com/products/w6435r-airlift-down-the-line-tennis-skirt-black" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="TZsSpJ3BxBmJ4ZL9FZvLXc" name="Alo Yoga Airlift Down The Line Tennis Skirt" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TZsSpJ3BxBmJ4ZL9FZvLXc-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w6435r-airlift-down-the-line-tennis-skirt-black" target="_blank" rel="nofollow" data-dimension112="6a8e40b4-d157-11f1-aa15-5f5ef49a9db4" data-action="Deal Block" data-label="Airlift Down the Line Tennis Skirt (Women's)" data-dimension48="Airlift Down the Line Tennis Skirt (Women's)" data-dimension25="$44">Airlift Down the Line Tennis Skirt (Women's): was $88 now $44</a></strong><br>This tennis skirt is made from Alo's signature Airlift fabric that provides a lightweight feel. It has detailed seams along the front for added definition along with a high-rise waist and built-in shorts (with a hidden pocket) that offers extra coverage on and off the court. <a class="view-deal button" href="https://www.aloyoga.com/products/w6435r-airlift-down-the-line-tennis-skirt-black" target="_blank" rel="nofollow" data-dimension112="6a8e40b4-d157-11f1-aa15-5f5ef49a9db4" data-action="Deal Block" data-label="Airlift Down the Line Tennis Skirt (Women's)" data-dimension48="Airlift Down the Line Tennis Skirt (Women's)" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e41a4-d157-11f1-9180-bbf59447b044" data-action="Deal Block" data-label="Alosoft Courtside Tennis Dress (Women's)" data-dimension48="Alosoft Courtside Tennis Dress (Women's)" data-dimension25="$47" href="https://www.aloyoga.com/products/w8176r-alosoft-courtside-tennis-dress-white" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="XKptohETcY85TbUyX5VLnX" name="alosoft" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XKptohETcY85TbUyX5VLnX-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w8176r-alosoft-courtside-tennis-dress-white" target="_blank" rel="nofollow" data-dimension112="6a8e41a4-d157-11f1-9180-bbf59447b044" data-action="Deal Block" data-label="Alosoft Courtside Tennis Dress (Women's)" data-dimension48="Alosoft Courtside Tennis Dress (Women's)" data-dimension25="$47">Alosoft Courtside Tennis Dress (Women's): was $118 now $47</a></strong><br>This is more of a summer or warm-weather pick, but now that it's on sale, you might as well add it to your cart. This adorable tennis dress is made from Alo's signature Alosoft fabric and has a built-in onesie for all-in-one ease. It offers just the right amount of support, comfort and stretch and is perfect for any adventure.<a class="view-deal button" href="https://www.aloyoga.com/products/w8176r-alosoft-courtside-tennis-dress-white" target="_blank" rel="nofollow" data-dimension112="6a8e41a4-d157-11f1-9180-bbf59447b044" data-action="Deal Block" data-label="Alosoft Courtside Tennis Dress (Women's)" data-dimension48="Alosoft Courtside Tennis Dress (Women's)" data-dimension25="$47">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e412c-d157-11f1-9f4d-21cb954ebd0f" data-action="Deal Block" data-label="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension48="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension25="$49" href="https://www.aloyoga.com/products/m3218r-conquer-reform-mock-neck-long-sleeve-bone" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="mwpJoM9mJPUQGvQSzaW8P3" name="Alo Yoga Conquer Reform Mock Neck Long Sleeve" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mwpJoM9mJPUQGvQSzaW8P3-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m3218r-conquer-reform-mock-neck-long-sleeve-bone" target="_blank" rel="nofollow" data-dimension112="6a8e412c-d157-11f1-9f4d-21cb954ebd0f" data-action="Deal Block" data-label="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension48="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension25="$49">Conquer Reform Mock Neck Long Sleeve (Men's): was $98 now $49</a></strong><br>This Conquer Long Sleeve will leave you looking cool. It's made with Alo's signature stretchy, sweat-wicking Conquer fabric. It offers a slim fit, but it's not clingy. Plus, it'll feel ultra-soft against your skin with a cool buttery feel. <a class="view-deal button" href="https://www.aloyoga.com/products/m3218r-conquer-reform-mock-neck-long-sleeve-bone" target="_blank" rel="nofollow" data-dimension112="6a8e412c-d157-11f1-9f4d-21cb954ebd0f" data-action="Deal Block" data-label="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension48="Conquer Reform Mock Neck Long Sleeve (Men's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e4212-d157-11f1-8057-03d73344435e" data-action="Deal Block" data-label="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension48="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension25="$54" href="https://www.aloyoga.com/products/m1205r-conquer-reform-crewneck-short-sleeve-black?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="SqWdyd5HuAWgavpBCsEErA" name="Alo t-shirt" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/SqWdyd5HuAWgavpBCsEErA-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m1205r-conquer-reform-crewneck-short-sleeve-black?" target="_blank" rel="nofollow" data-dimension112="6a8e4212-d157-11f1-8057-03d73344435e" data-action="Deal Block" data-label="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension48="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension25="$54">Conquer Reform Crewneck Short Sleeve (Men's): was $78 now $54</a></strong><br>This Alo short sleeve is so versatile! It's airy, ultra-soft and perfect for training or layering under your favorite hoodie. I recommend grabbing one in several colors.<a class="view-deal button" href="https://www.aloyoga.com/products/m1205r-conquer-reform-crewneck-short-sleeve-black?" target="_blank" rel="nofollow" data-dimension112="6a8e4212-d157-11f1-8057-03d73344435e" data-action="Deal Block" data-label="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension48="Conquer Reform Crewneck Short Sleeve (Men's)" data-dimension25="$54">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e428a-d157-11f1-a682-3b05d21fb917" data-action="Deal Block" data-label="Accolade Short (Women's)" data-dimension48="Accolade Short (Women's)" data-dimension25="$54" href="https://www.aloyoga.com/products/w6472rg-accolade-short-athletic-heather-grey" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="VFMGYyj98EiJSVQw2DinSC" name="Alo Accolade shorts" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/VFMGYyj98EiJSVQw2DinSC-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w6472rg-accolade-short-athletic-heather-grey" target="_blank" rel="nofollow" data-dimension112="6a8e428a-d157-11f1-a682-3b05d21fb917" data-action="Deal Block" data-label="Accolade Short (Women's)" data-dimension48="Accolade Short (Women's)" data-dimension25="$54">Accolade Short (Women's): was $78 now $54</a></strong><br>Elevate your loungewear collection with these super soft shorts that feature french terry fabric on the outside and warm fleece on the inside. I love wearing these cozy shorts around the house or when I'm walking my dog around the block during warmer weather. You'll definitely want to pair them with the stylish Accolade 1/4 Zip that I highlight further below. <a class="view-deal button" href="https://www.aloyoga.com/products/w6472rg-accolade-short-athletic-heather-grey" target="_blank" rel="nofollow" data-dimension112="6a8e428a-d157-11f1-a682-3b05d21fb917" data-action="Deal Block" data-label="Accolade Short (Women's)" data-dimension48="Accolade Short (Women's)" data-dimension25="$54">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e4302-d157-11f1-bef9-0f64c9ef4253" data-action="Deal Block" data-label="Airbrush Real Bra Tank (Women's)" data-dimension48="Airbrush Real Bra Tank (Women's)" data-dimension25="$54" href="https://www.aloyoga.com/products/w9587r-real-bra-tank-navy" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="YZ5EMQJNACcVfTogAGPsbU" name="Alo tank" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YZ5EMQJNACcVfTogAGPsbU-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w9587r-real-bra-tank-navy" target="_blank" rel="nofollow" data-dimension112="6a8e4302-d157-11f1-bef9-0f64c9ef4253" data-action="Deal Block" data-label="Airbrush Real Bra Tank (Women's)" data-dimension48="Airbrush Real Bra Tank (Women's)" data-dimension25="$54">Airbrush Real Bra Tank (Women's): was $78 now $54</a></strong><br>I can't get enough of this tank. So many fitness tanks are itchy and uncomfortable around the rib cage, but this one really does feel airbrushed with softness. I love its wide straps, flattering V-neckline and the fact that it has a built-in bra. Grab the matching yoga pants below to create your fabulous set.<a class="view-deal button" href="https://www.aloyoga.com/products/w9587r-real-bra-tank-navy" target="_blank" rel="nofollow" data-dimension112="6a8e4302-d157-11f1-bef9-0f64c9ef4253" data-action="Deal Block" data-label="Airbrush Real Bra Tank (Women's)" data-dimension48="Airbrush Real Bra Tank (Women's)" data-dimension25="$54">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e4370-d157-11f1-8070-ef5f7931ab86" data-action="Deal Block" data-label="5" Traction Shorts (Men's)" data-dimension48="5" Traction Shorts (Men's)" data-dimension25="$61" href="https://www.aloyoga.com/products/m6169r-5-traction-running-short-black" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="E2Ls8epEvgMgAdu9eiLz5G" name="Alo Yoga Traction Short" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/E2Ls8epEvgMgAdu9eiLz5G-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m6169r-5-traction-running-short-black" target="_blank" rel="nofollow" data-dimension112="6a8e4370-d157-11f1-8070-ef5f7931ab86" data-action="Deal Block" data-label="5" Traction Shorts (Men's)" data-dimension48="5" Traction Shorts (Men's)" data-dimension25="$61">5" Traction Shorts (Men's): was $88 now $61</a></strong><br>Our Deals Editor in Chief can't recommend these shorts enough. First, they're very comfy with an elastic (but secure) waistband that stays in place even during the most intense HIIT sessions. The shorts are made of a slightly perforated, fast-drying fabric, which means they won't get heavy and weigh you down on those sweaty, humid runs. (Don't worry, they're not revealing). Are there cheaper options, yes, but these are a top choice.<a class="view-deal button" href="https://www.aloyoga.com/products/m6169r-5-traction-running-short-black" target="_blank" rel="nofollow" data-dimension112="6a8e4370-d157-11f1-8070-ef5f7931ab86" data-action="Deal Block" data-label="5" Traction Shorts (Men's)" data-dimension48="5" Traction Shorts (Men's)" data-dimension25="$61">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e43e8-d157-11f1-9cb8-4f1f4ca6232e" data-action="Deal Block" data-label="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension48="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension25="$64" href="https://www.aloyoga.com/products/w51207r-airbrush-high-waist-highlight-goddess-legging-black" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="873yoM5e6uuYF2aJS3ryiY" name="Alo deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/873yoM5e6uuYF2aJS3ryiY-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w51207r-airbrush-high-waist-highlight-goddess-legging-black" target="_blank" rel="nofollow" data-dimension112="6a8e43e8-d157-11f1-9cb8-4f1f4ca6232e" data-action="Deal Block" data-label="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension48="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension25="$64">Airbrush High-Waist Highlight Goddess Legging (Women's): was $128 now $64</a></strong><br>These buttery-soft Alo leggings are supportive in all the right places, and right now, you can score 30% off in this black color. This is a total win for just under $100.<a class="view-deal button" href="https://www.aloyoga.com/products/w51207r-airbrush-high-waist-highlight-goddess-legging-black" target="_blank" rel="nofollow" data-dimension112="6a8e43e8-d157-11f1-9cb8-4f1f4ca6232e" data-action="Deal Block" data-label="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension48="Airbrush High-Waist Highlight Goddess Legging (Women's)" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e4460-d157-11f1-ba73-3b5eca588706" data-action="Deal Block" data-label="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension48="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension25="$89" href="https://www.aloyoga.com/products/m4161r-latitude-light-weight-1-2-zip-pullover-jacket-black" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="jpqrb3ejVXYMJ5LpcbTSNE" name="Alo Yoga Latitude Light Weight 1:2 Zip Pullover Jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jpqrb3ejVXYMJ5LpcbTSNE-1920-80.jpg" mos="" align="middle" fullscreen="" width="930" height="1395" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/m4161r-latitude-light-weight-1-2-zip-pullover-jacket-black" target="_blank" rel="nofollow" data-dimension112="6a8e4460-d157-11f1-ba73-3b5eca588706" data-action="Deal Block" data-label="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension48="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension25="$89">Latitude Light Weight 1/2 Zip Pullover Jacket (Men's): was $178 now $89</a></strong><br>Need a new fall jacket? This lightweight pullover is lightly filled (for a little warmth) and made from 100 percent nylon — the kind that's durable, swishy and ready to face the elements. It also has a half-zip collar, zippered side pockets, banded cuffs, and a banded hem. The fit is relaxed and comfortable.<a class="view-deal button" href="https://www.aloyoga.com/products/m4161r-latitude-light-weight-1-2-zip-pullover-jacket-black" target="_blank" rel="nofollow" data-dimension112="6a8e4460-d157-11f1-ba73-3b5eca588706" data-action="Deal Block" data-label="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension48="Latitude Light Weight 1/2 Zip Pullover Jacket (Men's)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e45fa-d157-11f1-8d7e-8149ba49ea14" data-action="Deal Block" data-label="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension48="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension25="$89" href="https://www.aloyoga.com/products/w51118r-airbrush-high-waist-bootcut-legging-navy?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="Qsw5mp42qkqdNqEk5q5dBf" name="Alo yoga pant" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Qsw5mp42qkqdNqEk5q5dBf-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w51118r-airbrush-high-waist-bootcut-legging-navy?" target="_blank" rel="nofollow" data-dimension112="6a8e45fa-d157-11f1-8d7e-8149ba49ea14" data-action="Deal Block" data-label="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension48="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension25="$89">Airbrush High-Waist Bootcut Legging (Women's): was $128 now $89</a></strong><br>I'm actually wearing these bootcut leggings as I write this! They are my all-time favorite legging, not only because they're comfortable, but because they're extremely flattering. I wear them literally everywhere and usually pair them with sneakers. They look great whether you're working out, walking or just want to put together a cute and casual weekend outfit. I definitely recommend these versatile leggings. <a class="view-deal button" href="https://www.aloyoga.com/products/w51118r-airbrush-high-waist-bootcut-legging-navy?" target="_blank" rel="nofollow" data-dimension112="6a8e45fa-d157-11f1-8d7e-8149ba49ea14" data-action="Deal Block" data-label="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension48="Airbrush High-Waist Bootcut Legging (Women's)" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e467c-d157-11f1-aa03-b981bfb8fb48" data-action="Deal Block" data-label="7/8 High-Waist Airlift Legging (Women's)" data-dimension48="7/8 High-Waist Airlift Legging (Women's)" data-dimension25="$93" href="https://www.aloyoga.com/products/w5766r-7-8-high-waist-airlift-legging-black?variant=38169647710388" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="ZEAYKdVRTdVimtce8fAB2P" name="Alo leggings" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZEAYKdVRTdVimtce8fAB2P-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/w5766r-7-8-high-waist-airlift-legging-black?variant=38169647710388" target="_blank" rel="nofollow" data-dimension112="6a8e467c-d157-11f1-aa03-b981bfb8fb48" data-action="Deal Block" data-label="7/8 High-Waist Airlift Legging (Women's)" data-dimension48="7/8 High-Waist Airlift Legging (Women's)" data-dimension25="$93">7/8 High-Waist Airlift Legging (Women's): was $134 now $93</a></strong><br>These buttery-soft Alo leggings are supportive in all the right places, and right now, you can score 30% off in a rainbow of colors. This is a total win for just under $100. <a class="view-deal button" href="https://www.aloyoga.com/products/w5766r-7-8-high-waist-airlift-legging-black?variant=38169647710388" target="_blank" rel="nofollow" data-dimension112="6a8e467c-d157-11f1-aa03-b981bfb8fb48" data-action="Deal Block" data-label="7/8 High-Waist Airlift Legging (Women's)" data-dimension48="7/8 High-Waist Airlift Legging (Women's)" data-dimension25="$93">View Deal</a></p></div><div class="product"><a data-dimension112="6a8e46f4-d157-11f1-96bd-4771f143ee8a" data-action="Deal Block" data-label="Accolade 1/4 Zip Pullover (Women's)" data-dimension48="Accolade 1/4 Zip Pullover (Women's)" data-dimension25="$103" href="https://www.aloyoga.com/products/u3040rg-accolade-1-4-zip-pullover-athletic-heather-grey?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:750px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="7ffv5DbfcMMrS4QEmnYHug" name="Accolade sweathshirt" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7ffv5DbfcMMrS4QEmnYHug-1920-80.jpg" mos="" align="middle" fullscreen="" width="750" height="1125" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.aloyoga.com/products/u3040rg-accolade-1-4-zip-pullover-athletic-heather-grey?" target="_blank" rel="nofollow" data-dimension112="6a8e46f4-d157-11f1-96bd-4771f143ee8a" data-action="Deal Block" data-label="Accolade 1/4 Zip Pullover (Women's)" data-dimension48="Accolade 1/4 Zip Pullover (Women's)" data-dimension25="$103">Accolade 1/4 Zip Pullover (Women's): was $148 now $103</a></strong><br>If you're anything like me, you'll be living in this cozy 1/4 zip. It's an absolute must for crisp spring mornings thanks to its fleece interior. It comes in a variety of colors and matches perfectly with the Accolade shorts above. It also has a <a href="https://www.aloyoga.com/products/u5012rg-accolade-straight-leg-swtpnt-athletic-heather-grey" target="_blank" rel="nofollow">matching pair of sweatpants</a> if you want to be extra warm and cozy.<a class="view-deal button" href="https://www.aloyoga.com/products/u3040rg-accolade-1-4-zip-pullover-athletic-heather-grey?" target="_blank" rel="nofollow" data-dimension112="6a8e46f4-d157-11f1-96bd-4771f143ee8a" data-action="Deal Block" data-label="Accolade 1/4 Zip Pullover (Women's)" data-dimension48="Accolade 1/4 Zip Pullover (Women's)" data-dimension25="$103">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Stanley tumblers, mugs and bottles are on sale from $19 at Amazon — 11 early holiday deals I’d shop now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The holidays are closer than you think! Now's a great time to start thinking about gifts — and if you're thinking the way I am, you'll want to grab some of these <a href="https://www.amazon.com/stores/page/86141DC2-87AF-4D9C-80E4-C0F22367DF0D" target="_blank" rel="nofollow">Stanley deals at Amazon</a>.</p><p>Not only are Stanley tumblers and mugs super stylish, they're also practical. They're easy to drink from and offer insulation to keep drinks at the perfect temperature.</p><p>Keep scrolling to see all my favorite deals! I also recommend checking out our <a href="https://www.tomsguide.com/coupons/amazon.com">Amazon promo codes</a> page.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.amazon.com/stores/Stanley/page/47A7E765-00AF-4F34-AC01-240A7EDD822A" target="_blank" rel="nofollow"><strong>shop all Stanley deals at Amazon</strong></a></li><li><strong>Quencher H2.0 FlowState Tumbler (14 oz): </strong><a href="https://www.amazon.com/Quencher-FlowState-Stainless-Insulated-Smoothie/dp/B0CP9Z16VD" target="_blank" rel="nofollow"><strong>was $25 now $19</strong></a></li><li><strong>Cafe-To-Go Travel Mug (16 oz): </strong><a href="https://www.amazon.com/STANLEY-Leakproof-Two-Part-Insulated-Stainless/dp/B0DXNC34LQ" target="_blank" rel="nofollow"><strong>was $28 now $19</strong></a></li><li><strong>Classic Food Jar and Spork (14 oz): </strong><a href="https://www.amazon.com/STANLEY-Insulated-Container-Stainless-Leakproof/dp/B0H1YLQ21Q" target="_blank" rel="nofollow"><strong>was $30 now $25</strong></a></li><li><strong>IceFlow 2.0 Flip Straw Tumbler (30 oz): </strong><a href="https://www.amazon.com/STANLEY-Champagne-Resistant-Insulated-Stainless/dp/B0H48S2D7V" target="_blank" rel="nofollow"><strong>was $35 now $26</strong></a></li><li><strong>Classic Legendary Vacuum Bottle: </strong><a href="https://www.amazon.com/Legendary-Leakproof-Insulated-Stainless-Hammertone/dp/B0BRKQDYTV" target="_blank" rel="nofollow"><strong>was $45 now $29</strong></a></li><li><strong>IceFlow Flip Straw 2.0 Water Bottle (36 oz): </strong><a href="https://www.amazon.com/Lightweight-Leak-Resistant-Insulated-Stainless-BPA-Free/dp/B0CYVRB35T" target="_blank" rel="nofollow"><strong>was $45 now $42</strong></a></li><li><strong>IceFlow Flip Straw Jug with Handle (40 oz): </strong><a href="https://www.amazon.com/Stanley-IceFlow-Stainless-Steel-Tumbler/dp/B0CT4BJ4Q1" target="_blank" rel="nofollow"><strong>was $69 now $57</strong></a></li></ul><h3 class="article-body__section" id="section-best-stanley-deals"><span>Best Stanley Deals</span></h3><div class="product"><a data-dimension112="f4cca5c0-d140-11f1-9ddd-89e84a606cde" data-action="Deal Block" data-label="Quencher H2.0 FlowState (14 oz)" data-dimension48="Quencher H2.0 FlowState (14 oz)" data-dimension25="$19" href="https://www.amazon.com/Quencher-FlowState-Stainless-Insulated-Smoothie/dp/B0CP9Z16VD" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:503px;"><p class="vanilla-image-block" style="padding-top:293.64%;"><img id="phYEdy8ndMPk2atezwdctd" name="Stanley quencher" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/phYEdy8ndMPk2atezwdctd-1920-80.jpg" mos="" align="middle" fullscreen="" width="503" height="1477" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Quencher-FlowState-Stainless-Insulated-Smoothie/dp/B0CP9Z16VD" target="_blank" rel="nofollow" data-dimension112="f4cca5c0-d140-11f1-9ddd-89e84a606cde" data-action="Deal Block" data-label="Quencher H2.0 FlowState (14 oz)" data-dimension48="Quencher H2.0 FlowState (14 oz)" data-dimension25="$19">Quencher H2.0 FlowState (14 oz): was $25 now $19</a></strong><br>With the Stanley Quencher love still going strong, it can be difficult to secure a discount on this incredibly popular tumbler. But right now you can save on the 14 oz version of the trendy beverage container.<a class="view-deal button" href="https://www.amazon.com/Quencher-FlowState-Stainless-Insulated-Smoothie/dp/B0CP9Z16VD" target="_blank" rel="nofollow" data-dimension112="f4cca5c0-d140-11f1-9ddd-89e84a606cde" data-action="Deal Block" data-label="Quencher H2.0 FlowState (14 oz)" data-dimension48="Quencher H2.0 FlowState (14 oz)" data-dimension25="$19">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca624-d140-11f1-a283-fd1d73cdbb35" data-action="Deal Block" data-label="Cafe-To-Go Travel Mug (16 oz)" data-dimension48="Cafe-To-Go Travel Mug (16 oz)" data-dimension25="$19" href="https://www.amazon.com/STANLEY-Leakproof-Two-Part-Insulated-Stainless/dp/B0DXNC34LQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:510px;"><p class="vanilla-image-block" style="padding-top:294.12%;"><img id="FhHs5uZirZNJVWDMXzDeqA" name="Cafe-To-Go Travel Mug (16 oz)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FhHs5uZirZNJVWDMXzDeqA-1920-80.jpg" mos="" align="middle" fullscreen="" width="510" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Leakproof-Two-Part-Insulated-Stainless/dp/B0DXNC34LQ" target="_blank" rel="nofollow" data-dimension112="f4cca624-d140-11f1-a283-fd1d73cdbb35" data-action="Deal Block" data-label="Cafe-To-Go Travel Mug (16 oz)" data-dimension48="Cafe-To-Go Travel Mug (16 oz)" data-dimension25="$19">Cafe-To-Go Travel Mug (16 oz): was $28 now $19</a></strong><br>This Stanley is here to make a case for the last coffee mug you ever need to buy. It'll keep your coffee hot for up to 6 hours, and offers two different sipping styles with its dual openings.<a class="view-deal button" href="https://www.amazon.com/STANLEY-Leakproof-Two-Part-Insulated-Stainless/dp/B0DXNC34LQ" target="_blank" rel="nofollow" data-dimension112="f4cca624-d140-11f1-a283-fd1d73cdbb35" data-action="Deal Block" data-label="Cafe-To-Go Travel Mug (16 oz)" data-dimension48="Cafe-To-Go Travel Mug (16 oz)" data-dimension25="$19">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca6e2-d140-11f1-be0c-ede6ae697bfc" data-action="Deal Block" data-label="Classic Food Jar and Spork (14 oz)" data-dimension48="Classic Food Jar and Spork (14 oz)" data-dimension25="$25" href="https://www.amazon.com/STANLEY-Insulated-Container-Stainless-Leakproof/dp/B0H1YLQ21Q" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1010px;"><p class="vanilla-image-block" style="padding-top:144.36%;"><img id="ojbwzuMy3D67RHPAqD2pUU" name="Classic Food Jar and Spork (14 oz)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ojbwzuMy3D67RHPAqD2pUU-1920-80.jpg" mos="" align="middle" fullscreen="" width="1010" height="1458" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Insulated-Container-Stainless-Leakproof/dp/B0H1YLQ21Q" target="_blank" rel="nofollow" data-dimension112="f4cca6e2-d140-11f1-be0c-ede6ae697bfc" data-action="Deal Block" data-label="Classic Food Jar and Spork (14 oz)" data-dimension48="Classic Food Jar and Spork (14 oz)" data-dimension25="$25">Classic Food Jar and Spork (14 oz): was $30 now $25</a></strong><br>This Stanley thermos with an integrated spork is designed with a leakproof lid and can hold your favorite foods when you're on the go. Regardless of the temperature outside, it keeps food hot or cold for 7 hours. It seals tight and features a wide mouth, making it easy to clean.<a class="view-deal button" href="https://www.amazon.com/STANLEY-Insulated-Container-Stainless-Leakproof/dp/B0H1YLQ21Q" target="_blank" rel="nofollow" data-dimension112="f4cca6e2-d140-11f1-be0c-ede6ae697bfc" data-action="Deal Block" data-label="Classic Food Jar and Spork (14 oz)" data-dimension48="Classic Food Jar and Spork (14 oz)" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="731d8786-d14c-11f1-8eaf-793a3c91dbc4" data-action="Deal Block" data-label="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension48="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension25="$25" href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CHN7KDNZ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:253px;"><p class="vanilla-image-block" style="padding-top:347.43%;"><img id="fL7dCo8ZNJKibWdUGa9Jzm" name="Stanley IceFlow Cap and Carry Water Bottle.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/fL7dCo8ZNJKibWdUGa9Jzm-1920-80.jpg" mos="" align="middle" fullscreen="" width="253" height="879" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CHN7KDNZ" target="_blank" rel="nofollow" data-dimension112="731d8786-d14c-11f1-8eaf-793a3c91dbc4" data-action="Deal Block" data-label="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension48="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension25="$25">IceFlow Cap and Carry Water Bottle (16 oz): was $35 now $25</a></strong><br>Not a fan of straws or chug lids? The Stanley IceFlow Cap and Carry Water Bottle has a twist lid that's easy to access thanks to its large, chunky handle. What's more, that handle on top means you can carry it at by your side without it spilling. Like many Stanley cups, it's insulated to keep your drinks at their optimum temperature and it fits in most car cup holders.<a class="view-deal button" href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CHN7KDNZ" target="_blank" rel="nofollow" data-dimension112="731d8786-d14c-11f1-8eaf-793a3c91dbc4" data-action="Deal Block" data-label="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension48="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca750-d140-11f1-9c80-2f0de7014751" data-action="Deal Block" data-label="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension48="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension25="$26" href="https://www.amazon.com/STANLEY-Champagne-Resistant-Insulated-Stainless/dp/B0H48S2D7V" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:487px;"><p class="vanilla-image-block" style="padding-top:299.59%;"><img id="jfyqVfb82F2gre6soyu7ab" name="IceFlow 2.0 Flip Straw Tumbler (30 oz)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jfyqVfb82F2gre6soyu7ab-1920-80.jpg" mos="" align="middle" fullscreen="" width="487" height="1459" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Champagne-Resistant-Insulated-Stainless/dp/B0H48S2D7V" target="_blank" rel="nofollow" data-dimension112="f4cca750-d140-11f1-9c80-2f0de7014751" data-action="Deal Block" data-label="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension48="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension25="$26">IceFlow 2.0 Flip Straw Tumbler (30 oz): was $35 now $26</a></strong><br>This Stanley features a 30oz capacity, a handle for transportation and a flip straw for easy sipping. The insulation can keep your drinks icy for up to 2 days.<a class="view-deal button" href="https://www.amazon.com/STANLEY-Champagne-Resistant-Insulated-Stainless/dp/B0H48S2D7V" target="_blank" rel="nofollow" data-dimension112="f4cca750-d140-11f1-9c80-2f0de7014751" data-action="Deal Block" data-label="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension48="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension25="$26">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca7aa-d140-11f1-aabd-63c300e2883a" data-action="Deal Block" data-label="Classic Legendary Vacuum Bottle" data-dimension48="Classic Legendary Vacuum Bottle" data-dimension25="$29" href="https://www.amazon.com/Legendary-Leakproof-Insulated-Stainless-Hammertone/dp/B0BRKQDYTV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:486px;"><p class="vanilla-image-block" style="padding-top:308.64%;"><img id="PRUhUxKXFDy7LbPYyKEiDi" name="Classic Legendary Vacuum Bottle" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PRUhUxKXFDy7LbPYyKEiDi-1920-80.jpg" mos="" align="middle" fullscreen="" width="486" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Legendary-Leakproof-Insulated-Stainless-Hammertone/dp/B0BRKQDYTV" target="_blank" rel="nofollow" data-dimension112="f4cca7aa-d140-11f1-aabd-63c300e2883a" data-action="Deal Block" data-label="Classic Legendary Vacuum Bottle" data-dimension48="Classic Legendary Vacuum Bottle" data-dimension25="$29">Classic Legendary Vacuum Bottle: was $45 now $29</a></strong><br>Don't miss your chance to grab this Stanley deal — it's called a classic for a reason. Perfect for coffee, tea and even soup, this vacuum bottle comes with a mug for easy serving.<a class="view-deal button" href="https://www.amazon.com/Legendary-Leakproof-Insulated-Stainless-Hammertone/dp/B0BRKQDYTV" target="_blank" rel="nofollow" data-dimension112="f4cca7aa-d140-11f1-aabd-63c300e2883a" data-action="Deal Block" data-label="Classic Legendary Vacuum Bottle" data-dimension48="Classic Legendary Vacuum Bottle" data-dimension25="$29">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca872-d140-11f1-9ea2-a3c63f11dc1a" data-action="Deal Block" data-label="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension48="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension25="$32" href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CFNRCVF8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:316px;"><p class="vanilla-image-block" style="padding-top:278.16%;"><img id="ssCbmwVVnEcqjXw7DyC8F" name="Stanley Fast Flow.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ssCbmwVVnEcqjXw7DyC8F-1920-80.jpg" mos="" align="middle" fullscreen="" width="316" height="879" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CFNRCVF8" target="_blank" rel="nofollow" data-dimension112="f4cca872-d140-11f1-9ea2-a3c63f11dc1a" data-action="Deal Block" data-label="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension48="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension25="$32">IceFlow Fast Flow Water Bottle (24 oz): was $35 now $32</a></strong><br>This lightweight water bottle was designed to carry the most amount of water without weighing you down. Perfect for sipping during workouts, on your daily commute and camping trips, the bottle has a wide mouth opening that allows you to quench your thirst quickly. It's available in a variety of vibrant hues and four different sizes. <a class="view-deal button" href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CFNRCVF8" target="_blank" rel="nofollow" data-dimension112="f4cca872-d140-11f1-9ea2-a3c63f11dc1a" data-action="Deal Block" data-label="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension48="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension25="$32">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca8d6-d140-11f1-8a3f-8761188c4a86" data-action="Deal Block" data-label="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension48="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension25="$33" href="https://www.amazon.com/STANLEY-Leakproof-Cupholder-Compatible-Insulated/dp/B0G77P82ZT" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:784px;"><p class="vanilla-image-block" style="padding-top:186.10%;"><img id="8KeoEbWJrTGTCHq4axhjtL" name="Quencher ProTour Flipstraw Tumbler (40 oz)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8KeoEbWJrTGTCHq4axhjtL-1920-80.jpg" mos="" align="middle" fullscreen="" width="784" height="1459" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Leakproof-Cupholder-Compatible-Insulated/dp/B0G77P82ZT" target="_blank" rel="nofollow" data-dimension112="f4cca8d6-d140-11f1-8a3f-8761188c4a86" data-action="Deal Block" data-label="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension48="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension25="$33">Quencher ProTour Flipstraw Tumbler (40 oz): was $45 now $33</a></strong><br>This Stanley tumbler lets you sip without worry thanks to its flip straw lid. All you have to do is flip up the built-in straw for a quick drink, then snap it shut to prevent any spills. Designed to fit in a car cup holder, you'll be able to take it with you on all adventures and it can keep your drinks hot or cold for hours thanks to its double walled insulation.<a class="view-deal button" href="https://www.amazon.com/STANLEY-Leakproof-Cupholder-Compatible-Insulated/dp/B0G77P82ZT" target="_blank" rel="nofollow" data-dimension112="f4cca8d6-d140-11f1-8a3f-8761188c4a86" data-action="Deal Block" data-label="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension48="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension25="$33">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca93a-d140-11f1-96f4-f1b1cbee777c" data-action="Deal Block" data-label="Quencher H2.0 Tumbler (40 oz)" data-dimension48="Quencher H2.0 Tumbler (40 oz)" data-dimension25="$34" href="https://www.amazon.com/STANLEY-Flowstate-3-Position-Compatible-Insulated/dp/B0CP9Y2SKW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:219.75%;"><img id="ho8fBjchigjZLwpGRcTDCn" name="Stanley sage" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ho8fBjchigjZLwpGRcTDCn-1920-80.jpg" mos="" align="middle" fullscreen="" width="400" height="879" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Flowstate-3-Position-Compatible-Insulated/dp/B0CP9Y2SKW" target="_blank" rel="nofollow" data-dimension112="f4cca93a-d140-11f1-96f4-f1b1cbee777c" data-action="Deal Block" data-label="Quencher H2.0 Tumbler (40 oz)" data-dimension48="Quencher H2.0 Tumbler (40 oz)" data-dimension25="$34">Quencher H2.0 Tumbler (40 oz): was $45 now $34</a></strong><br>Looking for something large to hold your beverages? The popular 40-ounce Stanley Quencher H2.0 Tumbler fits into most car cup holders. It's made with recycled stainless steel, features a 3-position lid, and reusable straw. Its double-wall vacuum insulation can keep water ice cold for 40 hours. <a class="view-deal button" href="https://www.amazon.com/STANLEY-Flowstate-3-Position-Compatible-Insulated/dp/B0CP9Y2SKW" target="_blank" rel="nofollow" data-dimension112="f4cca93a-d140-11f1-96f4-f1b1cbee777c" data-action="Deal Block" data-label="Quencher H2.0 Tumbler (40 oz)" data-dimension48="Quencher H2.0 Tumbler (40 oz)" data-dimension25="$34">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca99e-d140-11f1-b20d-b50ed10b632e" data-action="Deal Block" data-label="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension48="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension25="$42" href="https://www.amazon.com/Lightweight-Leak-Resistant-Insulated-Stainless-BPA-Free/dp/B0CYVRB35T" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:493px;"><p class="vanilla-image-block" style="padding-top:304.26%;"><img id="srCGwMucdiuWiGjkM6xtK4" name="51Y0idpsdWL._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/srCGwMucdiuWiGjkM6xtK4-1920-80.jpg" mos="" align="middle" fullscreen="" width="493" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Lightweight-Leak-Resistant-Insulated-Stainless-BPA-Free/dp/B0CYVRB35T" target="_blank" rel="nofollow" data-dimension112="f4cca99e-d140-11f1-b20d-b50ed10b632e" data-action="Deal Block" data-label="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension48="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension25="$42">IceFlow Flip Straw 2.0 Water Bottle (36 oz): was $45 now $42</a></strong><br>Made with AeroLight spun steel, Stanley bills the IceFlow Flip Straw 2.0 Water Bottle as being 33% lighter than other stainless steel water bottles. That makes it super easy to take around with you, and the Flip Straw lid makes it super easy to sip from too.<a class="view-deal button" href="https://www.amazon.com/Lightweight-Leak-Resistant-Insulated-Stainless-BPA-Free/dp/B0CYVRB35T" target="_blank" rel="nofollow" data-dimension112="f4cca99e-d140-11f1-b20d-b50ed10b632e" data-action="Deal Block" data-label="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension48="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension25="$42">View Deal</a></p></div><div class="product"><a data-dimension112="f4ccaa0c-d140-11f1-b398-8333244e253c" data-action="Deal Block" data-label="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension48="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension25="$57" href="https://www.amazon.com/Stanley-IceFlow-Stainless-Steel-Tumbler/dp/B0CT4BJ4Q1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:702px;"><p class="vanilla-image-block" style="padding-top:213.68%;"><img id="yYqTMUAPSrnqJ4EKwXCMLC" name="61MXE5ctmHL._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yYqTMUAPSrnqJ4EKwXCMLC-1920-80.jpg" mos="" align="middle" fullscreen="" width="702" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Stanley-IceFlow-Stainless-Steel-Tumbler/dp/B0CT4BJ4Q1" target="_blank" rel="nofollow" data-dimension112="f4ccaa0c-d140-11f1-b398-8333244e253c" data-action="Deal Block" data-label="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension48="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension25="$57">IceFlow Flip Straw Jug with Handle (40 oz): was $69 now $57</a></strong><br>While this water jug is the smallest of its family from Stanley, it still houses an impressive 40 oz of water. It'll keep your cold drinks cold for up to 14 hours, while having a sweat-proof coating that's perfect for trips to the gym. And when you're done drinking, just pop it in the dishwasher to clean.<a class="view-deal button" href="https://www.amazon.com/Stanley-IceFlow-Stainless-Steel-Tumbler/dp/B0CT4BJ4Q1" target="_blank" rel="nofollow" data-dimension112="f4ccaa0c-d140-11f1-b398-8333244e253c" data-action="Deal Block" data-label="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension48="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension25="$57">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/stanley-tumblers-mugs-and-bottles-are-on-sale-from-usd19-at-amazon-11-early-holiday-deals-id-shop-now</link>
                                                                            <description>
                            <![CDATA[ I'm sharing the best Stanley deals to shop ahead of the holidays — treat you and your loved ones to some stylish new drinkware. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">XJEFgVyUCUuthDxebfikZm</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/tas2LcwBqZePVhW8GoFdci-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 14:52:27 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></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-320-70.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/tas2LcwBqZePVhW8GoFdci-1920-80.jpg">
                                                            <media:credit><![CDATA[Stanley / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Stanley drinkware]]></media:description>                                                            <media:text><![CDATA[Stanley drinkware]]></media:text>
                                <media:title type="plain"><![CDATA[Stanley drinkware]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/tas2LcwBqZePVhW8GoFdci-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The holidays are closer than you think! Now's a great time to start thinking about gifts — and if you're thinking the way I am, you'll want to grab some of these <a href="https://www.amazon.com/stores/page/86141DC2-87AF-4D9C-80E4-C0F22367DF0D" target="_blank" rel="nofollow">Stanley deals at Amazon</a>.</p><p>Not only are Stanley tumblers and mugs super stylish, they're also practical. They're easy to drink from and offer insulation to keep drinks at the perfect temperature.</p><p>Keep scrolling to see all my favorite deals! I also recommend checking out our <a href="https://www.tomsguide.com/coupons/amazon.com">Amazon promo codes</a> page.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.amazon.com/stores/Stanley/page/47A7E765-00AF-4F34-AC01-240A7EDD822A" target="_blank" rel="nofollow"><strong>shop all Stanley deals at Amazon</strong></a></li><li><strong>Quencher H2.0 FlowState Tumbler (14 oz): </strong><a href="https://www.amazon.com/Quencher-FlowState-Stainless-Insulated-Smoothie/dp/B0CP9Z16VD" target="_blank" rel="nofollow"><strong>was $25 now $19</strong></a></li><li><strong>Cafe-To-Go Travel Mug (16 oz): </strong><a href="https://www.amazon.com/STANLEY-Leakproof-Two-Part-Insulated-Stainless/dp/B0DXNC34LQ" target="_blank" rel="nofollow"><strong>was $28 now $19</strong></a></li><li><strong>Classic Food Jar and Spork (14 oz): </strong><a href="https://www.amazon.com/STANLEY-Insulated-Container-Stainless-Leakproof/dp/B0H1YLQ21Q" target="_blank" rel="nofollow"><strong>was $30 now $25</strong></a></li><li><strong>IceFlow 2.0 Flip Straw Tumbler (30 oz): </strong><a href="https://www.amazon.com/STANLEY-Champagne-Resistant-Insulated-Stainless/dp/B0H48S2D7V" target="_blank" rel="nofollow"><strong>was $35 now $26</strong></a></li><li><strong>Classic Legendary Vacuum Bottle: </strong><a href="https://www.amazon.com/Legendary-Leakproof-Insulated-Stainless-Hammertone/dp/B0BRKQDYTV" target="_blank" rel="nofollow"><strong>was $45 now $29</strong></a></li><li><strong>IceFlow Flip Straw 2.0 Water Bottle (36 oz): </strong><a href="https://www.amazon.com/Lightweight-Leak-Resistant-Insulated-Stainless-BPA-Free/dp/B0CYVRB35T" target="_blank" rel="nofollow"><strong>was $45 now $42</strong></a></li><li><strong>IceFlow Flip Straw Jug with Handle (40 oz): </strong><a href="https://www.amazon.com/Stanley-IceFlow-Stainless-Steel-Tumbler/dp/B0CT4BJ4Q1" target="_blank" rel="nofollow"><strong>was $69 now $57</strong></a></li></ul><h3 class="article-body__section" id="section-best-stanley-deals"><span>Best Stanley Deals</span></h3><div class="product"><a data-dimension112="f4cca5c0-d140-11f1-9ddd-89e84a606cde" data-action="Deal Block" data-label="Quencher H2.0 FlowState (14 oz)" data-dimension48="Quencher H2.0 FlowState (14 oz)" data-dimension25="$19" href="https://www.amazon.com/Quencher-FlowState-Stainless-Insulated-Smoothie/dp/B0CP9Z16VD" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:503px;"><p class="vanilla-image-block" style="padding-top:293.64%;"><img id="phYEdy8ndMPk2atezwdctd" name="Stanley quencher" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/phYEdy8ndMPk2atezwdctd-1920-80.jpg" mos="" align="middle" fullscreen="" width="503" height="1477" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Quencher-FlowState-Stainless-Insulated-Smoothie/dp/B0CP9Z16VD" target="_blank" rel="nofollow" data-dimension112="f4cca5c0-d140-11f1-9ddd-89e84a606cde" data-action="Deal Block" data-label="Quencher H2.0 FlowState (14 oz)" data-dimension48="Quencher H2.0 FlowState (14 oz)" data-dimension25="$19">Quencher H2.0 FlowState (14 oz): was $25 now $19</a></strong><br>With the Stanley Quencher love still going strong, it can be difficult to secure a discount on this incredibly popular tumbler. But right now you can save on the 14 oz version of the trendy beverage container.<a class="view-deal button" href="https://www.amazon.com/Quencher-FlowState-Stainless-Insulated-Smoothie/dp/B0CP9Z16VD" target="_blank" rel="nofollow" data-dimension112="f4cca5c0-d140-11f1-9ddd-89e84a606cde" data-action="Deal Block" data-label="Quencher H2.0 FlowState (14 oz)" data-dimension48="Quencher H2.0 FlowState (14 oz)" data-dimension25="$19">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca624-d140-11f1-a283-fd1d73cdbb35" data-action="Deal Block" data-label="Cafe-To-Go Travel Mug (16 oz)" data-dimension48="Cafe-To-Go Travel Mug (16 oz)" data-dimension25="$19" href="https://www.amazon.com/STANLEY-Leakproof-Two-Part-Insulated-Stainless/dp/B0DXNC34LQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:510px;"><p class="vanilla-image-block" style="padding-top:294.12%;"><img id="FhHs5uZirZNJVWDMXzDeqA" name="Cafe-To-Go Travel Mug (16 oz)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FhHs5uZirZNJVWDMXzDeqA-1920-80.jpg" mos="" align="middle" fullscreen="" width="510" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Leakproof-Two-Part-Insulated-Stainless/dp/B0DXNC34LQ" target="_blank" rel="nofollow" data-dimension112="f4cca624-d140-11f1-a283-fd1d73cdbb35" data-action="Deal Block" data-label="Cafe-To-Go Travel Mug (16 oz)" data-dimension48="Cafe-To-Go Travel Mug (16 oz)" data-dimension25="$19">Cafe-To-Go Travel Mug (16 oz): was $28 now $19</a></strong><br>This Stanley is here to make a case for the last coffee mug you ever need to buy. It'll keep your coffee hot for up to 6 hours, and offers two different sipping styles with its dual openings.<a class="view-deal button" href="https://www.amazon.com/STANLEY-Leakproof-Two-Part-Insulated-Stainless/dp/B0DXNC34LQ" target="_blank" rel="nofollow" data-dimension112="f4cca624-d140-11f1-a283-fd1d73cdbb35" data-action="Deal Block" data-label="Cafe-To-Go Travel Mug (16 oz)" data-dimension48="Cafe-To-Go Travel Mug (16 oz)" data-dimension25="$19">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca6e2-d140-11f1-be0c-ede6ae697bfc" data-action="Deal Block" data-label="Classic Food Jar and Spork (14 oz)" data-dimension48="Classic Food Jar and Spork (14 oz)" data-dimension25="$25" href="https://www.amazon.com/STANLEY-Insulated-Container-Stainless-Leakproof/dp/B0H1YLQ21Q" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1010px;"><p class="vanilla-image-block" style="padding-top:144.36%;"><img id="ojbwzuMy3D67RHPAqD2pUU" name="Classic Food Jar and Spork (14 oz)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ojbwzuMy3D67RHPAqD2pUU-1920-80.jpg" mos="" align="middle" fullscreen="" width="1010" height="1458" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Insulated-Container-Stainless-Leakproof/dp/B0H1YLQ21Q" target="_blank" rel="nofollow" data-dimension112="f4cca6e2-d140-11f1-be0c-ede6ae697bfc" data-action="Deal Block" data-label="Classic Food Jar and Spork (14 oz)" data-dimension48="Classic Food Jar and Spork (14 oz)" data-dimension25="$25">Classic Food Jar and Spork (14 oz): was $30 now $25</a></strong><br>This Stanley thermos with an integrated spork is designed with a leakproof lid and can hold your favorite foods when you're on the go. Regardless of the temperature outside, it keeps food hot or cold for 7 hours. It seals tight and features a wide mouth, making it easy to clean.<a class="view-deal button" href="https://www.amazon.com/STANLEY-Insulated-Container-Stainless-Leakproof/dp/B0H1YLQ21Q" target="_blank" rel="nofollow" data-dimension112="f4cca6e2-d140-11f1-be0c-ede6ae697bfc" data-action="Deal Block" data-label="Classic Food Jar and Spork (14 oz)" data-dimension48="Classic Food Jar and Spork (14 oz)" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="731d8786-d14c-11f1-8eaf-793a3c91dbc4" data-action="Deal Block" data-label="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension48="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension25="$25" href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CHN7KDNZ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:253px;"><p class="vanilla-image-block" style="padding-top:347.43%;"><img id="fL7dCo8ZNJKibWdUGa9Jzm" name="Stanley IceFlow Cap and Carry Water Bottle.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/fL7dCo8ZNJKibWdUGa9Jzm-1920-80.jpg" mos="" align="middle" fullscreen="" width="253" height="879" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CHN7KDNZ" target="_blank" rel="nofollow" data-dimension112="731d8786-d14c-11f1-8eaf-793a3c91dbc4" data-action="Deal Block" data-label="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension48="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension25="$25">IceFlow Cap and Carry Water Bottle (16 oz): was $35 now $25</a></strong><br>Not a fan of straws or chug lids? The Stanley IceFlow Cap and Carry Water Bottle has a twist lid that's easy to access thanks to its large, chunky handle. What's more, that handle on top means you can carry it at by your side without it spilling. Like many Stanley cups, it's insulated to keep your drinks at their optimum temperature and it fits in most car cup holders.<a class="view-deal button" href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CHN7KDNZ" target="_blank" rel="nofollow" data-dimension112="731d8786-d14c-11f1-8eaf-793a3c91dbc4" data-action="Deal Block" data-label="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension48="IceFlow Cap and Carry Water Bottle (16 oz)" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca750-d140-11f1-9c80-2f0de7014751" data-action="Deal Block" data-label="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension48="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension25="$26" href="https://www.amazon.com/STANLEY-Champagne-Resistant-Insulated-Stainless/dp/B0H48S2D7V" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:487px;"><p class="vanilla-image-block" style="padding-top:299.59%;"><img id="jfyqVfb82F2gre6soyu7ab" name="IceFlow 2.0 Flip Straw Tumbler (30 oz)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jfyqVfb82F2gre6soyu7ab-1920-80.jpg" mos="" align="middle" fullscreen="" width="487" height="1459" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Champagne-Resistant-Insulated-Stainless/dp/B0H48S2D7V" target="_blank" rel="nofollow" data-dimension112="f4cca750-d140-11f1-9c80-2f0de7014751" data-action="Deal Block" data-label="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension48="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension25="$26">IceFlow 2.0 Flip Straw Tumbler (30 oz): was $35 now $26</a></strong><br>This Stanley features a 30oz capacity, a handle for transportation and a flip straw for easy sipping. The insulation can keep your drinks icy for up to 2 days.<a class="view-deal button" href="https://www.amazon.com/STANLEY-Champagne-Resistant-Insulated-Stainless/dp/B0H48S2D7V" target="_blank" rel="nofollow" data-dimension112="f4cca750-d140-11f1-9c80-2f0de7014751" data-action="Deal Block" data-label="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension48="IceFlow 2.0 Flip Straw Tumbler (30 oz)" data-dimension25="$26">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca7aa-d140-11f1-aabd-63c300e2883a" data-action="Deal Block" data-label="Classic Legendary Vacuum Bottle" data-dimension48="Classic Legendary Vacuum Bottle" data-dimension25="$29" href="https://www.amazon.com/Legendary-Leakproof-Insulated-Stainless-Hammertone/dp/B0BRKQDYTV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:486px;"><p class="vanilla-image-block" style="padding-top:308.64%;"><img id="PRUhUxKXFDy7LbPYyKEiDi" name="Classic Legendary Vacuum Bottle" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PRUhUxKXFDy7LbPYyKEiDi-1920-80.jpg" mos="" align="middle" fullscreen="" width="486" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Legendary-Leakproof-Insulated-Stainless-Hammertone/dp/B0BRKQDYTV" target="_blank" rel="nofollow" data-dimension112="f4cca7aa-d140-11f1-aabd-63c300e2883a" data-action="Deal Block" data-label="Classic Legendary Vacuum Bottle" data-dimension48="Classic Legendary Vacuum Bottle" data-dimension25="$29">Classic Legendary Vacuum Bottle: was $45 now $29</a></strong><br>Don't miss your chance to grab this Stanley deal — it's called a classic for a reason. Perfect for coffee, tea and even soup, this vacuum bottle comes with a mug for easy serving.<a class="view-deal button" href="https://www.amazon.com/Legendary-Leakproof-Insulated-Stainless-Hammertone/dp/B0BRKQDYTV" target="_blank" rel="nofollow" data-dimension112="f4cca7aa-d140-11f1-aabd-63c300e2883a" data-action="Deal Block" data-label="Classic Legendary Vacuum Bottle" data-dimension48="Classic Legendary Vacuum Bottle" data-dimension25="$29">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca872-d140-11f1-9ea2-a3c63f11dc1a" data-action="Deal Block" data-label="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension48="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension25="$32" href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CFNRCVF8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:316px;"><p class="vanilla-image-block" style="padding-top:278.16%;"><img id="ssCbmwVVnEcqjXw7DyC8F" name="Stanley Fast Flow.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ssCbmwVVnEcqjXw7DyC8F-1920-80.jpg" mos="" align="middle" fullscreen="" width="316" height="879" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CFNRCVF8" target="_blank" rel="nofollow" data-dimension112="f4cca872-d140-11f1-9ea2-a3c63f11dc1a" data-action="Deal Block" data-label="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension48="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension25="$32">IceFlow Fast Flow Water Bottle (24 oz): was $35 now $32</a></strong><br>This lightweight water bottle was designed to carry the most amount of water without weighing you down. Perfect for sipping during workouts, on your daily commute and camping trips, the bottle has a wide mouth opening that allows you to quench your thirst quickly. It's available in a variety of vibrant hues and four different sizes. <a class="view-deal button" href="https://www.amazon.com/Lightweight-Leakproof-Insulated-Stainless-BPA-Free/dp/B0CFNRCVF8" target="_blank" rel="nofollow" data-dimension112="f4cca872-d140-11f1-9ea2-a3c63f11dc1a" data-action="Deal Block" data-label="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension48="IceFlow Fast Flow Water Bottle (24 oz)" data-dimension25="$32">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca8d6-d140-11f1-8a3f-8761188c4a86" data-action="Deal Block" data-label="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension48="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension25="$33" href="https://www.amazon.com/STANLEY-Leakproof-Cupholder-Compatible-Insulated/dp/B0G77P82ZT" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:784px;"><p class="vanilla-image-block" style="padding-top:186.10%;"><img id="8KeoEbWJrTGTCHq4axhjtL" name="Quencher ProTour Flipstraw Tumbler (40 oz)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8KeoEbWJrTGTCHq4axhjtL-1920-80.jpg" mos="" align="middle" fullscreen="" width="784" height="1459" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Leakproof-Cupholder-Compatible-Insulated/dp/B0G77P82ZT" target="_blank" rel="nofollow" data-dimension112="f4cca8d6-d140-11f1-8a3f-8761188c4a86" data-action="Deal Block" data-label="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension48="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension25="$33">Quencher ProTour Flipstraw Tumbler (40 oz): was $45 now $33</a></strong><br>This Stanley tumbler lets you sip without worry thanks to its flip straw lid. All you have to do is flip up the built-in straw for a quick drink, then snap it shut to prevent any spills. Designed to fit in a car cup holder, you'll be able to take it with you on all adventures and it can keep your drinks hot or cold for hours thanks to its double walled insulation.<a class="view-deal button" href="https://www.amazon.com/STANLEY-Leakproof-Cupholder-Compatible-Insulated/dp/B0G77P82ZT" target="_blank" rel="nofollow" data-dimension112="f4cca8d6-d140-11f1-8a3f-8761188c4a86" data-action="Deal Block" data-label="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension48="Quencher ProTour Flipstraw Tumbler (40 oz)" data-dimension25="$33">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca93a-d140-11f1-96f4-f1b1cbee777c" data-action="Deal Block" data-label="Quencher H2.0 Tumbler (40 oz)" data-dimension48="Quencher H2.0 Tumbler (40 oz)" data-dimension25="$34" href="https://www.amazon.com/STANLEY-Flowstate-3-Position-Compatible-Insulated/dp/B0CP9Y2SKW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:219.75%;"><img id="ho8fBjchigjZLwpGRcTDCn" name="Stanley sage" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ho8fBjchigjZLwpGRcTDCn-1920-80.jpg" mos="" align="middle" fullscreen="" width="400" height="879" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/STANLEY-Flowstate-3-Position-Compatible-Insulated/dp/B0CP9Y2SKW" target="_blank" rel="nofollow" data-dimension112="f4cca93a-d140-11f1-96f4-f1b1cbee777c" data-action="Deal Block" data-label="Quencher H2.0 Tumbler (40 oz)" data-dimension48="Quencher H2.0 Tumbler (40 oz)" data-dimension25="$34">Quencher H2.0 Tumbler (40 oz): was $45 now $34</a></strong><br>Looking for something large to hold your beverages? The popular 40-ounce Stanley Quencher H2.0 Tumbler fits into most car cup holders. It's made with recycled stainless steel, features a 3-position lid, and reusable straw. Its double-wall vacuum insulation can keep water ice cold for 40 hours. <a class="view-deal button" href="https://www.amazon.com/STANLEY-Flowstate-3-Position-Compatible-Insulated/dp/B0CP9Y2SKW" target="_blank" rel="nofollow" data-dimension112="f4cca93a-d140-11f1-96f4-f1b1cbee777c" data-action="Deal Block" data-label="Quencher H2.0 Tumbler (40 oz)" data-dimension48="Quencher H2.0 Tumbler (40 oz)" data-dimension25="$34">View Deal</a></p></div><div class="product"><a data-dimension112="f4cca99e-d140-11f1-b20d-b50ed10b632e" data-action="Deal Block" data-label="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension48="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension25="$42" href="https://www.amazon.com/Lightweight-Leak-Resistant-Insulated-Stainless-BPA-Free/dp/B0CYVRB35T" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:493px;"><p class="vanilla-image-block" style="padding-top:304.26%;"><img id="srCGwMucdiuWiGjkM6xtK4" name="51Y0idpsdWL._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/srCGwMucdiuWiGjkM6xtK4-1920-80.jpg" mos="" align="middle" fullscreen="" width="493" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Lightweight-Leak-Resistant-Insulated-Stainless-BPA-Free/dp/B0CYVRB35T" target="_blank" rel="nofollow" data-dimension112="f4cca99e-d140-11f1-b20d-b50ed10b632e" data-action="Deal Block" data-label="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension48="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension25="$42">IceFlow Flip Straw 2.0 Water Bottle (36 oz): was $45 now $42</a></strong><br>Made with AeroLight spun steel, Stanley bills the IceFlow Flip Straw 2.0 Water Bottle as being 33% lighter than other stainless steel water bottles. That makes it super easy to take around with you, and the Flip Straw lid makes it super easy to sip from too.<a class="view-deal button" href="https://www.amazon.com/Lightweight-Leak-Resistant-Insulated-Stainless-BPA-Free/dp/B0CYVRB35T" target="_blank" rel="nofollow" data-dimension112="f4cca99e-d140-11f1-b20d-b50ed10b632e" data-action="Deal Block" data-label="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension48="IceFlow Flip Straw 2.0 Water Bottle (36 oz)" data-dimension25="$42">View Deal</a></p></div><div class="product"><a data-dimension112="f4ccaa0c-d140-11f1-b398-8333244e253c" data-action="Deal Block" data-label="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension48="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension25="$57" href="https://www.amazon.com/Stanley-IceFlow-Stainless-Steel-Tumbler/dp/B0CT4BJ4Q1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:702px;"><p class="vanilla-image-block" style="padding-top:213.68%;"><img id="yYqTMUAPSrnqJ4EKwXCMLC" name="61MXE5ctmHL._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yYqTMUAPSrnqJ4EKwXCMLC-1920-80.jpg" mos="" align="middle" fullscreen="" width="702" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Stanley-IceFlow-Stainless-Steel-Tumbler/dp/B0CT4BJ4Q1" target="_blank" rel="nofollow" data-dimension112="f4ccaa0c-d140-11f1-b398-8333244e253c" data-action="Deal Block" data-label="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension48="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension25="$57">IceFlow Flip Straw Jug with Handle (40 oz): was $69 now $57</a></strong><br>While this water jug is the smallest of its family from Stanley, it still houses an impressive 40 oz of water. It'll keep your cold drinks cold for up to 14 hours, while having a sweat-proof coating that's perfect for trips to the gym. And when you're done drinking, just pop it in the dishwasher to clean.<a class="view-deal button" href="https://www.amazon.com/Stanley-IceFlow-Stainless-Steel-Tumbler/dp/B0CT4BJ4Q1" target="_blank" rel="nofollow" data-dimension112="f4ccaa0c-d140-11f1-b398-8333244e253c" data-action="Deal Block" data-label="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension48="IceFlow Flip Straw Jug with Handle (40 oz)" data-dimension25="$57">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 21 walking shoe deals with up to 61% off: best fall sales on Skechers, Birkenstocks and New Balance ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Fall is well and truly here. But that doesn't mean you have to hole up inside for the rest of the year. To keep enjoying the great outdoors, there are a bunch of deals you can grab on walking shoes from Skechers, Birkenstocks and more.</p><p>Over at <a href="https://www.amazon.com/b?node=211953829011" target="_blank" rel="nofollow">Amazon you'll find discounts on everything from Skechers slip-ins to Dr. Martens boots</a>. So if you need a new pair, I'm sharing the best savings below!</p><p><strong>Note: </strong>prices can vary depending on the size and color you select. To find the best deals, check out the different colors available in your size.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links </span></h3><ul><li><strong>Asics: </strong><a href="https://www.asics.com/us/en-us/clearance/c/aa60000000/?" target="_blank" rel="nofollow"><strong>deals from $49</strong></a></li><li><strong>Brooks: </strong><a href="https://www.amazon.com/stores/Brooks/page/B6834DFA-396F-4E38-98F6-3D2739393271?" target="_blank" rel="nofollow"><strong>up to 40% off</strong></a></li><li><strong>Hoka: </strong><a href="https://www.hoka.com/en/us/sale/" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li><li><strong>Nike: </strong><a href="https://www.nike.com/w/mens-shoes-nik1zy7ok" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li><li><strong>New Balance: </strong><a href="https://www.amazon.com/stores/NewBalanceAthleticShoeInc/page/855D4CDF-ADB7-4BE8-9E26-A085D029E4B5" target="_blank" rel="nofollow"><strong>deals from $39</strong></a></li><li><strong>Skechers: </strong><a href="https://www.skechers.com/women/shop-by-activity/walking/" target="_blank" rel="nofollow"><strong>20% off for members</strong></a></li></ul><h3 class="article-body__section" id="section-skechers"><span>Skechers</span></h3><div class="product"><a data-dimension112="2c3abf7c-d12f-11f1-b55a-c77191e28df0" data-action="Deal Block" data-label="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension48="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension25="$37" href="https://www.amazon.com/Skechers-Womens-BrilliantPath-Sneaker-Periwinkle/dp/B0CB1TB6FF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:64.60%;"><img id="ktgq75pP2AA2yCeBTtmCNi" name="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ktgq75pP2AA2yCeBTtmCNi-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="449" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-BrilliantPath-Sneaker-Periwinkle/dp/B0CB1TB6FF" target="_blank" rel="nofollow" data-dimension112="2c3abf7c-d12f-11f1-b55a-c77191e28df0" data-action="Deal Block" data-label="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension48="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension25="$37">Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's): was $39 now $37</a></strong><br>The Skechers Ultra Flex 3.0 Brilliant Path slip-ons are our choice for the most versatile Skechers sneaker. As you'd expect, they're lightweight and comfortable with pillowy soft midsoles and Air-Cooled Memory Foam. In our <a href="https://www.tomsguide.com/reviews/Skechers-Slip-Ins-Ultra-Flex-3.0">Skechers Hands Free Ultra Flex 3.0 Brilliant Path review</a> we determined that they're great for casual wear, but we don't recommend them for high-impact exercise.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-BrilliantPath-Sneaker-Periwinkle/dp/B0CB1TB6FF" target="_blank" rel="nofollow" data-dimension112="2c3abf7c-d12f-11f1-b55a-c77191e28df0" data-action="Deal Block" data-label="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension48="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension25="$37">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac012-d12f-11f1-b9d7-d9a0451e464c" data-action="Deal Block" data-label="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension48="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension25="$44" href="https://www.amazon.com/Skechers-Sneaker-5Gen-Cushioning-Air-Cooled-Breathable/dp/B072LFYC5Q" 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:65.54%;"><img id="sMKHY4Hdbe52xJSyHG6eJg" name="81t7vPwv8wL._AC_SX679_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/sMKHY4Hdbe52xJSyHG6eJg-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="445" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Sneaker-5Gen-Cushioning-Air-Cooled-Breathable/dp/B072LFYC5Q" target="_blank" rel="nofollow" data-dimension112="2c3ac012-d12f-11f1-b9d7-d9a0451e464c" data-action="Deal Block" data-label="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension48="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension25="$44">Go Walk Joy Cushioning Sneakers (Women's): was $51 now $44</a></strong><br>These slip-in Skechers shoes have all of the cushioning and comfort you've come to know and love from the brand. There's also a breathable upper, to keep your feet cool and comfortable.<a class="view-deal button" href="https://www.amazon.com/Skechers-Sneaker-5Gen-Cushioning-Air-Cooled-Breathable/dp/B072LFYC5Q" target="_blank" rel="nofollow" data-dimension112="2c3ac012-d12f-11f1-b9d7-d9a0451e464c" data-action="Deal Block" data-label="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension48="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac076-d12f-11f1-9225-cdf77c0e89ee" data-action="Deal Block" data-label="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension48="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension25="$60" href="https://www.amazon.com/Skechers-Respected-Holmgren-Slip-Loafer-Charcoal/dp/B0BYBFZXL8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1137px;"><p class="vanilla-image-block" style="padding-top:61.13%;"><img id="p79NadjFtsEoazJoKeBmgR" name="Respected-Holmgren Slip-in Loafer (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/p79NadjFtsEoazJoKeBmgR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1137" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Respected-Holmgren-Slip-Loafer-Charcoal/dp/B0BYBFZXL8" target="_blank" rel="nofollow" data-dimension112="2c3ac076-d12f-11f1-9225-cdf77c0e89ee" data-action="Deal Block" data-label="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension48="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension25="$60">Respected-Holmgren Slip-in Loafer (Men's): was $89 now $60</a></strong><br>The simple but stylish design of the Respected-Holmgren Slip-in Loafer makes them a great pick for any activity. The Air Cooled Memory Foam delivers breathable comfort, and the Goodyear rubber outsole provides reliable grip in wet or icy conditions.<a class="view-deal button" href="https://www.amazon.com/Skechers-Respected-Holmgren-Slip-Loafer-Charcoal/dp/B0BYBFZXL8" target="_blank" rel="nofollow" data-dimension112="2c3ac076-d12f-11f1-9225-cdf77c0e89ee" data-action="Deal Block" data-label="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension48="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension25="$60">View Deal</a></p></div><div class="product"><a data-dimension112="558f67c2-d131-11f1-8c70-6fe2d258a912" data-action="Deal Block" data-label="Arch Fit 2.0 - Star Bound" data-dimension48="Arch Fit 2.0 - Star Bound" data-dimension25="$94" href="https://www.amazon.com/Skechers-Womens-Sneaker-White-7/dp/B0CPJFGK3G/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:819px;"><p class="vanilla-image-block" style="padding-top:84.86%;"><img id="VJnWP38VkGWMuARJrWadJB" name="Skechers Arch Fit 2.0 - Star Bound" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/VJnWP38VkGWMuARJrWadJB-1920-80.jpg" mos="" align="middle" fullscreen="" width="819" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Sneaker-White-7/dp/B0CPJFGK3G/" target="_blank" rel="nofollow" data-dimension112="558f67c2-d131-11f1-8c70-6fe2d258a912" data-action="Deal Block" data-label="Arch Fit 2.0 - Star Bound" data-dimension48="Arch Fit 2.0 - Star Bound" data-dimension25="$94">Arch Fit 2.0 - Star Bound: was $102 now $94</a></strong><br>The <a href="https://www.tomsguide.com/wellness/fitness/skechers-arch-fit-2-0-star-bound-review">Skechers Arch Fit 2.0 Star Bound</a> sneakers offer comfort and support for anyone looking for a versatile option to wear to run errands all day. The Air Cooled Memory Foam and Arch Fit technology work together to provide a bouncy walking experience, and the elevated heel aids in maintaining good posture by promoting heel-to-toe steps. The leather of the upper takes a little time to bend with your footsteps, but once it does, you will reach for them every day.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Sneaker-White-7/dp/B0CPJFGK3G/" target="_blank" rel="nofollow" data-dimension112="558f67c2-d131-11f1-8c70-6fe2d258a912" data-action="Deal Block" data-label="Arch Fit 2.0 - Star Bound" data-dimension48="Arch Fit 2.0 - Star Bound" data-dimension25="$94">View Deal</a></p></div><h3 class="article-body__section" id="section-birkenstocks"><span>Birkenstocks</span></h3><div class="product"><a data-dimension112="2c3ac134-d12f-11f1-9174-094bd5538ab4" data-action="Deal Block" data-label="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension48="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension25="$30" href="https://www.nordstromrack.com/s/birkenstock-arizona-stealth-buckle-eva-slide-sandal-women/7945865?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1560px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="3Qt2UrH7ESWm55JQpi8aXQ" name="Arizona Stealth" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3Qt2UrH7ESWm55JQpi8aXQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1560" height="2340" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nordstromrack.com/s/birkenstock-arizona-stealth-buckle-eva-slide-sandal-women/7945865?" target="_blank" rel="nofollow" data-dimension112="2c3ac134-d12f-11f1-9174-094bd5538ab4" data-action="Deal Block" data-label="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension48="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension25="$30">Arizona Stealth Buckle EVA Slide (Women's): was $54 now $30</a></strong><br>A pair of Birkenstocks for $30??? Sign me up. These waterproof slides are perfect for hanging out indoors, or going to the beach or pool. They feature a rubber-like texture with sleek adjustable straps and a grippy traction sole. <a class="view-deal button" href="https://www.nordstromrack.com/s/birkenstock-arizona-stealth-buckle-eva-slide-sandal-women/7945865?" target="_blank" rel="nofollow" data-dimension112="2c3ac134-d12f-11f1-9174-094bd5538ab4" data-action="Deal Block" data-label="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension48="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension25="$30">View Deal</a></p></div><div class="product"><a data-dimension112="508c7720-d130-11f1-aa16-1d13b2533b71" data-action="Deal Block" data-label="Lutry 365 Clog - Suede (Women's)" data-dimension48="Lutry 365 Clog - Suede (Women's)" data-dimension25="$61" href="https://www.amazon.com/Birkenstock-Womens-Lutry-365-Suede-Narrow/dp/B0FH15W1SY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:46.62%;"><img id="b4FtpSQLYePgojSeRWMMh8" name="Lutry 365 Clog - Suede (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/b4FtpSQLYePgojSeRWMMh8-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="324" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Birkenstock-Womens-Lutry-365-Suede-Narrow/dp/B0FH15W1SY" target="_blank" rel="nofollow" data-dimension112="508c7720-d130-11f1-aa16-1d13b2533b71" data-action="Deal Block" data-label="Lutry 365 Clog - Suede (Women's)" data-dimension48="Lutry 365 Clog - Suede (Women's)" data-dimension25="$61">Lutry 365 Clog - Suede (Women's): was $154 now $61</a></strong><br>You don't see a Birkenstock discount this big every day, so grab it while you can if it's available in your size! These slip-on clogs have a premium suede upper, making them look and feel super luxurious.<a class="view-deal button" href="https://www.amazon.com/Birkenstock-Womens-Lutry-365-Suede-Narrow/dp/B0FH15W1SY" target="_blank" rel="nofollow" data-dimension112="508c7720-d130-11f1-aa16-1d13b2533b71" data-action="Deal Block" data-label="Lutry 365 Clog - Suede (Women's)" data-dimension48="Lutry 365 Clog - Suede (Women's)" data-dimension25="$61">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac1b6-d12f-11f1-b4df-f9cca801955f" data-action="Deal Block" data-label="Papilio Florida Platform Flex (Women's)" data-dimension48="Papilio Florida Platform Flex (Women's)" data-dimension25="$74" href="https://www.nordstromrack.com/s/florida-flex-platform-slide-sandal-women/7953334?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1560px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="YToScW8bDWGEAAJqToJey" name="florida" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YToScW8bDWGEAAJqToJey-1920-80.jpg" mos="" align="middle" fullscreen="" width="1560" height="2340" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nordstromrack.com/s/florida-flex-platform-slide-sandal-women/7953334?" target="_blank" rel="nofollow" data-dimension112="2c3ac1b6-d12f-11f1-b4df-f9cca801955f" data-action="Deal Block" data-label="Papilio Florida Platform Flex (Women's)" data-dimension48="Papilio Florida Platform Flex (Women's)" data-dimension25="$74">Papilio Florida Platform Flex (Women's): was $144 now $74</a></strong><br>These Papilio by Birkenstock sandals feature a platform and three straps for extra support. Reviewers love their iconic design and comfortable, adjustable fit.<a class="view-deal button" href="https://www.nordstromrack.com/s/florida-flex-platform-slide-sandal-women/7953334?" target="_blank" rel="nofollow" data-dimension112="2c3ac1b6-d12f-11f1-b4df-f9cca801955f" data-action="Deal Block" data-label="Papilio Florida Platform Flex (Women's)" data-dimension48="Papilio Florida Platform Flex (Women's)" data-dimension25="$74">View Deal</a></p></div><h3 class="article-body__section" id="section-vans"><span>Vans</span></h3><div class="product"><a data-dimension112="508c7bc6-d130-11f1-b083-a1a8585d05a8" data-action="Deal Block" data-label="Asher Adult Low Top Sneakers (Women's)" data-dimension48="Asher Adult Low Top Sneakers (Women's)" data-dimension25="$39" href="https://www.amazon.com/Vans-Comfortable-Sneakers-Walking-Everyday/dp/B0FL84PVY7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1047px;"><p class="vanilla-image-block" style="padding-top:66.38%;"><img id="QKub3ycPjdDp9fUWpA3uZc" name="Asher Adult Low Top Sneakers (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QKub3ycPjdDp9fUWpA3uZc-1920-80.jpg" mos="" align="middle" fullscreen="" width="1047" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Vans-Comfortable-Sneakers-Walking-Everyday/dp/B0FL84PVY7" target="_blank" rel="nofollow" data-dimension112="508c7bc6-d130-11f1-b083-a1a8585d05a8" data-action="Deal Block" data-label="Asher Adult Low Top Sneakers (Women's)" data-dimension48="Asher Adult Low Top Sneakers (Women's)" data-dimension25="$39">Asher Adult Low Top Sneakers (Women's): was $55 now $39</a></strong><br>Vans' low-top slip-on shoes are a steal starting from just $39! The simple design means they couldn't be any more versatile and easy to style — and the color selection is great, too. <a class="view-deal button" href="https://www.amazon.com/Vans-Comfortable-Sneakers-Walking-Everyday/dp/B0FL84PVY7" target="_blank" rel="nofollow" data-dimension112="508c7bc6-d130-11f1-b083-a1a8585d05a8" data-action="Deal Block" data-label="Asher Adult Low Top Sneakers (Women's)" data-dimension48="Asher Adult Low Top Sneakers (Women's)" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="508c7c84-d130-11f1-8116-bb3e84775756" data-action="Deal Block" data-label="Brooklyn LS Shoe (Women's)" data-dimension48="Brooklyn LS Shoe (Women's)" data-dimension25="$52" href="https://www.amazon.com/Vans-Brooklyn-Low-Top-Sneakers-Everyday/dp/B0D7QCNLHJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1005px;"><p class="vanilla-image-block" style="padding-top:69.15%;"><img id="rJDozMtKWunUE3PrvRZ9kQ" name="Brooklyn LS Shoe (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rJDozMtKWunUE3PrvRZ9kQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1005" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Vans-Brooklyn-Low-Top-Sneakers-Everyday/dp/B0D7QCNLHJ" target="_blank" rel="nofollow" data-dimension112="508c7c84-d130-11f1-8116-bb3e84775756" data-action="Deal Block" data-label="Brooklyn LS Shoe (Women's)" data-dimension48="Brooklyn LS Shoe (Women's)" data-dimension25="$52">Brooklyn LS Shoe (Women's): was $70 now $52</a></strong><br>These classic Vans can be yours starting from just $52 right now. Their padded collar makes them comfortable to wear, and they feature the iconic Vans stripe down the side.<a class="view-deal button" href="https://www.amazon.com/Vans-Brooklyn-Low-Top-Sneakers-Everyday/dp/B0D7QCNLHJ" target="_blank" rel="nofollow" data-dimension112="508c7c84-d130-11f1-8116-bb3e84775756" data-action="Deal Block" data-label="Brooklyn LS Shoe (Women's)" data-dimension48="Brooklyn LS Shoe (Women's)" data-dimension25="$52">View Deal</a></p></div><h3 class="article-body__section" id="section-cushionaire"><span>Cushionaire</span></h3><div class="product"><a data-dimension112="2c3ac3fa-d12f-11f1-9469-391b5c391713" data-action="Deal Block" data-label="Laz Cork Footbed Sandals" data-dimension48="Laz Cork Footbed Sandals" data-dimension25="$39" href="https://www.amazon.com/dp/B0H8FB19F7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:606px;"><p class="vanilla-image-block" style="padding-top:114.69%;"><img id="GknzxZr7RhbEEsFqQG3HjN" name="Laz" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GknzxZr7RhbEEsFqQG3HjN-1920-80.jpg" mos="" align="middle" fullscreen="" width="606" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0H8FB19F7" target="_blank" rel="nofollow" data-dimension112="2c3ac3fa-d12f-11f1-9469-391b5c391713" data-action="Deal Block" data-label="Laz Cork Footbed Sandals" data-dimension48="Laz Cork Footbed Sandals" data-dimension25="$39">Laz Cork Footbed Sandals: was $59 now $39</a></strong><br>If you're in the market for some Birkenstocks but don't want to pay the hefty price, these Cushionaire sandals are the next best thing. Crafted from high-quality faux leather, the sandals feature a soft lining and adjustable double buckle strap. They're also available in a plethora of colors, although price may vary. <a class="view-deal button" href="https://www.amazon.com/dp/B0H8FB19F7" target="_blank" rel="nofollow" data-dimension112="2c3ac3fa-d12f-11f1-9469-391b5c391713" data-action="Deal Block" data-label="Laz Cork Footbed Sandals" data-dimension48="Laz Cork Footbed Sandals" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac45e-d12f-11f1-a100-c3e3fffc96dc" data-action="Deal Block" data-label="Lens Sandals" data-dimension48="Lens Sandals" data-dimension25="$49" href="https://www.amazon.com/dp/B0GZJ8VB6M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:543px;"><p class="vanilla-image-block" style="padding-top:127.99%;"><img id="v9a622fikJvyBJaGFHRcpH" name="Cushionaire Lens" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/v9a622fikJvyBJaGFHRcpH-1920-80.jpg" mos="" align="middle" fullscreen="" width="543" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0GZJ8VB6M" target="_blank" rel="nofollow" data-dimension112="2c3ac45e-d12f-11f1-a100-c3e3fffc96dc" data-action="Deal Block" data-label="Lens Sandals" data-dimension48="Lens Sandals" data-dimension25="$49">Lens Sandals: was $69 now $49</a></strong><br>Looking for a fun little twist on a classic slide? Slip into these comfortable sandals that feature unique braided straps. They have a cushioned footbed and a contoured sole making them extra comfy. They also pair nicely with dresses, denim and casual outfits.<a class="view-deal button" href="https://www.amazon.com/dp/B0GZJ8VB6M" target="_blank" rel="nofollow" data-dimension112="2c3ac45e-d12f-11f1-a100-c3e3fffc96dc" data-action="Deal Block" data-label="Lens Sandals" data-dimension48="Lens Sandals" data-dimension25="$49">View Deal</a></p></div><h3 class="article-body__section" id="section-nortiv-8"><span>Nortiv 8</span></h3><div class="product"><a data-dimension112="2c3ac512-d12f-11f1-b603-b1ccc341b16a" data-action="Deal Block" data-label="Lightweight Ankle Hiking Boots (Women's)" data-dimension48="Lightweight Ankle Hiking Boots (Women's)" data-dimension25="$39" href="https://www.amazon.com/dp/B0BFPR8Y2Y" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:873px;"><p class="vanilla-image-block" style="padding-top:79.61%;"><img id="5QdW6J7JmJEfcovDJA6ZgM" name="Lightweight Ankle Hiking Boots (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5QdW6J7JmJEfcovDJA6ZgM-1920-80.jpg" mos="" align="middle" fullscreen="" width="873" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0BFPR8Y2Y" target="_blank" rel="nofollow" data-dimension112="2c3ac512-d12f-11f1-b603-b1ccc341b16a" data-action="Deal Block" data-label="Lightweight Ankle Hiking Boots (Women's)" data-dimension48="Lightweight Ankle Hiking Boots (Women's)" data-dimension25="$39">Lightweight Ankle Hiking Boots (Women's): was $47 now $39</a></strong><br>Nortiv 8's budget-friendly hiking boots just got a discount, making them even better value. They're built to be lightweight, comfortable and durable, with grip to stop you from slipping on the trails.<a class="view-deal button" href="https://www.amazon.com/dp/B0BFPR8Y2Y" target="_blank" rel="nofollow" data-dimension112="2c3ac512-d12f-11f1-b603-b1ccc341b16a" data-action="Deal Block" data-label="Lightweight Ankle Hiking Boots (Women's)" data-dimension48="Lightweight Ankle Hiking Boots (Women's)" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac56c-d12f-11f1-b6ca-9fc55314d528" data-action="Deal Block" data-label="Trail Running Walking Shoes (Men's)" data-dimension48="Trail Running Walking Shoes (Men's)" data-dimension25="$56" href="https://www.amazon.com/dp/B0H7BRYLZ1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1093px;"><p class="vanilla-image-block" style="padding-top:63.59%;"><img id="98qPHFxV2Ykz8EZjKZouLY" name="Trail Running Walking Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/98qPHFxV2Ykz8EZjKZouLY-1920-80.jpg" mos="" align="middle" fullscreen="" width="1093" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0H7BRYLZ1" target="_blank" rel="nofollow" data-dimension112="2c3ac56c-d12f-11f1-b6ca-9fc55314d528" data-action="Deal Block" data-label="Trail Running Walking Shoes (Men's)" data-dimension48="Trail Running Walking Shoes (Men's)" data-dimension25="$56">Trail Running Walking Shoes (Men's): was $69 now $56</a></strong><br>These Nortiv 8 shoes come in handy for both hiking and trail runs. They're lightweight, packed with cushioning and have grip to keep you steady. Plus, with this discount, they're affordable too.<a class="view-deal button" href="https://www.amazon.com/dp/B0H7BRYLZ1" target="_blank" rel="nofollow" data-dimension112="2c3ac56c-d12f-11f1-b6ca-9fc55314d528" data-action="Deal Block" data-label="Trail Running Walking Shoes (Men's)" data-dimension48="Trail Running Walking Shoes (Men's)" data-dimension25="$56">View Deal</a></p></div><h3 class="article-body__section" id="section-new-balance"><span>New Balance</span></h3><div class="product"><a data-dimension112="2c3ac62a-d12f-11f1-8a8b-77e3e9abadb3" data-action="Deal Block" data-label="237 V1 Sneaker (Men's)" data-dimension48="237 V1 Sneaker (Men's)" data-dimension25="$69" href="https://www.amazon.com/New-Balance-Sneaker-White-Brighton/dp/B0F4MB4R6V" 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:50.47%;"><img id="sTxmZw69B2s8LpTEsCvTfT" name="237 V1 Sneaker (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/sTxmZw69B2s8LpTEsCvTfT-1920-80.jpg" mos="" align="middle" fullscreen="" width="1290" height="651" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-Sneaker-White-Brighton/dp/B0F4MB4R6V" target="_blank" rel="nofollow" data-dimension112="2c3ac62a-d12f-11f1-8a8b-77e3e9abadb3" data-action="Deal Block" data-label="237 V1 Sneaker (Men's)" data-dimension48="237 V1 Sneaker (Men's)" data-dimension25="$69">237 V1 Sneaker (Men's): was $84 now $69</a></strong><br>Right now you can get the New Balance 237 V1 sneakers on sale and add a touch of style to your wardrobe. They have a suede and mesh upper with a sleek three-tone color scheme.<a class="view-deal button" href="https://www.amazon.com/New-Balance-Sneaker-White-Brighton/dp/B0F4MB4R6V" target="_blank" rel="nofollow" data-dimension112="2c3ac62a-d12f-11f1-8a8b-77e3e9abadb3" data-action="Deal Block" data-label="237 V1 Sneaker (Men's)" data-dimension48="237 V1 Sneaker (Men's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac684-d12f-11f1-a5d7-ff54bdfdf464" data-action="Deal Block" data-label="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension48="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension25="$98" href="https://www.amazon.com/New-Balance-FuelCell-Walking-Electric/dp/B0D2Y7L3DC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:755px;"><p class="vanilla-image-block" style="padding-top:55.23%;"><img id="ufsfox6NerPUoEY6YYZYXk" name="FuelCell Walker Elite V1 Walking Shoe (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ufsfox6NerPUoEY6YYZYXk-1920-80.jpg" mos="" align="middle" fullscreen="" width="755" height="417" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-FuelCell-Walking-Electric/dp/B0D2Y7L3DC" target="_blank" rel="nofollow" data-dimension112="2c3ac684-d12f-11f1-a5d7-ff54bdfdf464" data-action="Deal Block" data-label="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension48="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension25="$98">FuelCell Walker Elite V1 Walking Shoe (Women's): was $139 now $98</a></strong><br>Engineered for walking, the New Balance FuelCell Walker Elite V1 Walking Shoes are cushioned, stable, and propel your feet forward with each step. They look super sleek, too. <a class="view-deal button" href="https://www.amazon.com/New-Balance-FuelCell-Walking-Electric/dp/B0D2Y7L3DC" target="_blank" rel="nofollow" data-dimension112="2c3ac684-d12f-11f1-a5d7-ff54bdfdf464" data-action="Deal Block" data-label="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension48="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension25="$98">View Deal</a></p></div><h3 class="article-body__section" id="section-dr-martens"><span>Dr Martens</span></h3><div class="product"><a data-dimension112="2c3ac7e2-d12f-11f1-9654-3b855454325c" data-action="Deal Block" data-label="Holly Leather Quad Shoe (Women's)" data-dimension48="Holly Leather Quad Shoe (Women's)" data-dimension25="$83" href="https://www.amazon.com/Dr-Martens-Holly-Buttero-Womens/dp/B07MHM313L" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:72.37%;"><img id="AgdKAuExiUftz8NTZy4PoQ" name="Holly Leather Quad Shoe (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/AgdKAuExiUftz8NTZy4PoQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="503" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Dr-Martens-Holly-Buttero-Womens/dp/B07MHM313L" target="_blank" rel="nofollow" data-dimension112="2c3ac7e2-d12f-11f1-9654-3b855454325c" data-action="Deal Block" data-label="Holly Leather Quad Shoe (Women's)" data-dimension48="Holly Leather Quad Shoe (Women's)" data-dimension25="$83">Holly Leather Quad Shoe (Women's): was $170 now $83</a></strong><br>Don't miss your chance to score this huge saving — it's not going to be available for long. These Dr Martens shoes have 1.5-inch soles and a pretty ribbon at the front! Perfect to add some "dark academia" vibes to your fall outfits.<a class="view-deal button" href="https://www.amazon.com/Dr-Martens-Holly-Buttero-Womens/dp/B07MHM313L" target="_blank" rel="nofollow" data-dimension112="2c3ac7e2-d12f-11f1-9654-3b855454325c" data-action="Deal Block" data-label="Holly Leather Quad Shoe (Women's)" data-dimension48="Holly Leather Quad Shoe (Women's)" data-dimension25="$83">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac850-d12f-11f1-a753-47a3eccd64c4" data-action="Deal Block" data-label="1460 8 Eye Boot (Unisex)" data-dimension48="1460 8 Eye Boot (Unisex)" data-dimension25="$151" href="https://www.amazon.com/Dr-Martens-Smooth-Combat-Womens/dp/B004SI1QNU/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:684px;"><p class="vanilla-image-block" style="padding-top:101.61%;"><img id="imnJnaGkotNWgHnjsGETSk" name="1460 8 Eye Boot" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/imnJnaGkotNWgHnjsGETSk-1920-80.jpg" mos="" align="middle" fullscreen="" width="684" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Dr-Martens-Smooth-Combat-Womens/dp/B004SI1QNU/" target="_blank" rel="nofollow" data-dimension112="2c3ac850-d12f-11f1-a753-47a3eccd64c4" data-action="Deal Block" data-label="1460 8 Eye Boot (Unisex)" data-dimension48="1460 8 Eye Boot (Unisex)" data-dimension25="$151">1460 8 Eye Boot (Unisex): was $180 now $151</a></strong><br>Right now Dr. Martens’ 1460 8 Eye Boots have seen a discount at Amazon. Made of vegan leather, their slip-resistant soles and tough construction make them great for both work and everyday wear.<a class="view-deal button" href="https://www.amazon.com/Dr-Martens-Smooth-Combat-Womens/dp/B004SI1QNU/" target="_blank" rel="nofollow" data-dimension112="2c3ac850-d12f-11f1-a753-47a3eccd64c4" data-action="Deal Block" data-label="1460 8 Eye Boot (Unisex)" data-dimension48="1460 8 Eye Boot (Unisex)" data-dimension25="$151">View Deal</a></p></div><h3 class="article-body__section" id="section-timberland"><span>Timberland</span></h3><div class="product"><a data-dimension112="2c3ac90e-d12f-11f1-85a3-9fe1d961f60d" data-action="Deal Block" data-label="Davis Square Chukka Shoe (Men's)" data-dimension48="Davis Square Chukka Shoe (Men's)" data-dimension25="$48" href="https://www.amazon.com/Timberland-Davis-Square-Chukka-Wheat/dp/B0D54GMPLS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:895px;"><p class="vanilla-image-block" style="padding-top:77.65%;"><img id="9sA8mqcAuQkkDAVnQjVBqj" name="Davis Square Chukka Shoe (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9sA8mqcAuQkkDAVnQjVBqj-1920-80.jpg" mos="" align="middle" fullscreen="" width="895" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Timberland-Davis-Square-Chukka-Wheat/dp/B0D54GMPLS" target="_blank" rel="nofollow" data-dimension112="2c3ac90e-d12f-11f1-85a3-9fe1d961f60d" data-action="Deal Block" data-label="Davis Square Chukka Shoe (Men's)" data-dimension48="Davis Square Chukka Shoe (Men's)" data-dimension25="$48">Davis Square Chukka Shoe (Men's): was $95 now $48</a></strong><br>Classic, stylish and comfortable. It doesn't get better than the Davis Square Chukka Shoe — especially when you can get a pair for almost half off. These are made of premium Timberland leather and have comfortable OrthoLite insoles.<a class="view-deal button" href="https://www.amazon.com/Timberland-Davis-Square-Chukka-Wheat/dp/B0D54GMPLS" target="_blank" rel="nofollow" data-dimension112="2c3ac90e-d12f-11f1-85a3-9fe1d961f60d" data-action="Deal Block" data-label="Davis Square Chukka Shoe (Men's)" data-dimension48="Davis Square Chukka Shoe (Men's)" data-dimension25="$48">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac968-d12f-11f1-89ec-eb419ee77651" data-action="Deal Block" data-label="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension48="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension25="$79" href="https://www.amazon.com/Timberland-Parker-Street-Lace-Up-Sneaker/dp/B0D54KCZDX" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:785px;"><p class="vanilla-image-block" style="padding-top:88.54%;"><img id="hxmYG96im3MVZgN7nzYSRk" name="Parker Street Mid Lace-Up Sneaker (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hxmYG96im3MVZgN7nzYSRk-1920-80.jpg" mos="" align="middle" fullscreen="" width="785" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Timberland-Parker-Street-Lace-Up-Sneaker/dp/B0D54KCZDX" target="_blank" rel="nofollow" data-dimension112="2c3ac968-d12f-11f1-89ec-eb419ee77651" data-action="Deal Block" data-label="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension48="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension25="$79">Parker Street Mid Lace-Up Sneaker (Men's): was $110 now $79</a></strong><br>These casual sneaker boots are a great transitional shoe from mornings at the office to afternoons on the mountain. The lace up sneaker will be a staple in your wardrobe thanks to their cushioning. You'll want to wear them on every adventure. <a class="view-deal button" href="https://www.amazon.com/Timberland-Parker-Street-Lace-Up-Sneaker/dp/B0D54KCZDX" target="_blank" rel="nofollow" data-dimension112="2c3ac968-d12f-11f1-89ec-eb419ee77651" data-action="Deal Block" data-label="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension48="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension25="$79">View Deal</a></p></div><h3 class="article-body__section" id="section-asics"><span>Asics</span></h3><div class="product"><a data-dimension112="2c3aca1c-d12f-11f1-a9c7-55d9c57385b9" data-action="Deal Block" data-label="Tiger Runner II (Women's)" data-dimension48="Tiger Runner II (Women's)" data-dimension25="$59" href="https://www.amazon.com/ASICS-Womens-Runner-Sportstyle-Silver/dp/B0H3F1WSB3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:682px;"><p class="vanilla-image-block" style="padding-top:75.07%;"><img id="vcT4ZrTkbB5kx6uGRWjquJ" name="asics tiger runner ii" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vcT4ZrTkbB5kx6uGRWjquJ-1920-80.png" mos="" align="middle" fullscreen="" width="682" height="512" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Runner-Sportstyle-Silver/dp/B0H3F1WSB3" target="_blank" rel="nofollow" data-dimension112="2c3aca1c-d12f-11f1-a9c7-55d9c57385b9" data-action="Deal Block" data-label="Tiger Runner II (Women's)" data-dimension48="Tiger Runner II (Women's)" data-dimension25="$59">Tiger Runner II (Women's): was $85 now $59</a></strong><br>Designed for everyday wear, these Asics sneakers are inspired by classic 80s jogging shoes. On the inside, they're packed with today's best cushioning and durability.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Runner-Sportstyle-Silver/dp/B0H3F1WSB3" target="_blank" rel="nofollow" data-dimension112="2c3aca1c-d12f-11f1-a9c7-55d9c57385b9" data-action="Deal Block" data-label="Tiger Runner II (Women's)" data-dimension48="Tiger Runner II (Women's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="2c3aca76-d12f-11f1-af2c-15d20261453c" data-action="Deal Block" data-label="Gel-Venture 11" data-dimension48="Gel-Venture 11" data-dimension25="$69" href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Carrier/dp/B0FV72G49S" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1146px;"><p class="vanilla-image-block" style="padding-top:75.04%;"><img id="44i7uWA8WvTqRemkvKZpV6" name="Gel-Venture 11" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/44i7uWA8WvTqRemkvKZpV6-1920-80.jpg" mos="" align="middle" fullscreen="" width="1146" height="860" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Asics Gel-Venture 11 are designed for everyday runs and walks! They have Amplifoam Plus midsole cushioning on board, and a 2mm higher stack height — 2mm of extra softness to absorb impact and keep you comfortable for hours.<a class="view-deal button" href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Carrier/dp/B0FV72G49S" target="_blank" rel="nofollow" data-dimension112="2c3aca76-d12f-11f1-af2c-15d20261453c" data-action="Deal Block" data-label="Gel-Venture 11" data-dimension48="Gel-Venture 11" data-dimension25="$69">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Home+Appliances&view_mode=savings_squad&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 getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      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%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      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-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .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 {      width: 100%;      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;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .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);    }    .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;    }    /*       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: 120px;      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: 16px 16px 8px;      }            .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-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .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;      }      /* 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;        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;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .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: 14px;      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-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      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-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .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;    }    .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;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .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::-webkit-scrollbar {      display: none;    }    .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;      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 {    }    .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.40);        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: #1f69ff; 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: #0056e0; 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; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \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">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \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>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \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>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \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 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/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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>        \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();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          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();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    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);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             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 (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    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 (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = 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') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // 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) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              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 !== 'date_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 handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          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');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          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');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    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;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   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;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = 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 });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          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;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               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 = 'date_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')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        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';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        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 fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&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=${siteParam}&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 && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&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 seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.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) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          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();                }                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;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                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 || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[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) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    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');                    url.searchParams.append('rows', this.getRowsLimit().toString());          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 = this.getRowsLimit();          // 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 : 'date_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}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_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, idx) => {              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}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${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);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } 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)}${_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 = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \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 = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \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 = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \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 tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_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>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}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_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 ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_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) {            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;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // 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');            }            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);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } 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/21-walking-shoe-deals-with-up-to-61-percent-off-best-fall-sales-on-skechers-birkenstocks-and-new-balance</link>
                                                                            <description>
                            <![CDATA[ Don't miss your chance for big savings on walking shoes from top brands! I'm sharing the best sales to stay comfortable this fall. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">f9sgu5ArpDoUbrAnnpyks9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/YiZ8NoWkDHwRU6c8tgPEin-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 12:06:22 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></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-320-70.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/YiZ8NoWkDHwRU6c8tgPEin-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[White Skechers sneakers]]></media:description>                                                            <media:text><![CDATA[White Skechers sneakers]]></media:text>
                                <media:title type="plain"><![CDATA[White Skechers sneakers]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/YiZ8NoWkDHwRU6c8tgPEin-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Fall is well and truly here. But that doesn't mean you have to hole up inside for the rest of the year. To keep enjoying the great outdoors, there are a bunch of deals you can grab on walking shoes from Skechers, Birkenstocks and more.</p><p>Over at <a href="https://www.amazon.com/b?node=211953829011" target="_blank" rel="nofollow">Amazon you'll find discounts on everything from Skechers slip-ins to Dr. Martens boots</a>. So if you need a new pair, I'm sharing the best savings below!</p><p><strong>Note: </strong>prices can vary depending on the size and color you select. To find the best deals, check out the different colors available in your size.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links </span></h3><ul><li><strong>Asics: </strong><a href="https://www.asics.com/us/en-us/clearance/c/aa60000000/?" target="_blank" rel="nofollow"><strong>deals from $49</strong></a></li><li><strong>Brooks: </strong><a href="https://www.amazon.com/stores/Brooks/page/B6834DFA-396F-4E38-98F6-3D2739393271?" target="_blank" rel="nofollow"><strong>up to 40% off</strong></a></li><li><strong>Hoka: </strong><a href="https://www.hoka.com/en/us/sale/" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li><li><strong>Nike: </strong><a href="https://www.nike.com/w/mens-shoes-nik1zy7ok" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li><li><strong>New Balance: </strong><a href="https://www.amazon.com/stores/NewBalanceAthleticShoeInc/page/855D4CDF-ADB7-4BE8-9E26-A085D029E4B5" target="_blank" rel="nofollow"><strong>deals from $39</strong></a></li><li><strong>Skechers: </strong><a href="https://www.skechers.com/women/shop-by-activity/walking/" target="_blank" rel="nofollow"><strong>20% off for members</strong></a></li></ul><h3 class="article-body__section" id="section-skechers"><span>Skechers</span></h3><div class="product"><a data-dimension112="2c3abf7c-d12f-11f1-b55a-c77191e28df0" data-action="Deal Block" data-label="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension48="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension25="$37" href="https://www.amazon.com/Skechers-Womens-BrilliantPath-Sneaker-Periwinkle/dp/B0CB1TB6FF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:64.60%;"><img id="ktgq75pP2AA2yCeBTtmCNi" name="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ktgq75pP2AA2yCeBTtmCNi-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="449" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-BrilliantPath-Sneaker-Periwinkle/dp/B0CB1TB6FF" target="_blank" rel="nofollow" data-dimension112="2c3abf7c-d12f-11f1-b55a-c77191e28df0" data-action="Deal Block" data-label="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension48="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension25="$37">Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's): was $39 now $37</a></strong><br>The Skechers Ultra Flex 3.0 Brilliant Path slip-ons are our choice for the most versatile Skechers sneaker. As you'd expect, they're lightweight and comfortable with pillowy soft midsoles and Air-Cooled Memory Foam. In our <a href="https://www.tomsguide.com/reviews/Skechers-Slip-Ins-Ultra-Flex-3.0">Skechers Hands Free Ultra Flex 3.0 Brilliant Path review</a> we determined that they're great for casual wear, but we don't recommend them for high-impact exercise.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-BrilliantPath-Sneaker-Periwinkle/dp/B0CB1TB6FF" target="_blank" rel="nofollow" data-dimension112="2c3abf7c-d12f-11f1-b55a-c77191e28df0" data-action="Deal Block" data-label="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension48="Hands Free Slip-in Ultra Flex 3.0 - Brilliant Path Sneakers (Women's)" data-dimension25="$37">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac012-d12f-11f1-b9d7-d9a0451e464c" data-action="Deal Block" data-label="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension48="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension25="$44" href="https://www.amazon.com/Skechers-Sneaker-5Gen-Cushioning-Air-Cooled-Breathable/dp/B072LFYC5Q" 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:65.54%;"><img id="sMKHY4Hdbe52xJSyHG6eJg" name="81t7vPwv8wL._AC_SX679_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/sMKHY4Hdbe52xJSyHG6eJg-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="445" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Sneaker-5Gen-Cushioning-Air-Cooled-Breathable/dp/B072LFYC5Q" target="_blank" rel="nofollow" data-dimension112="2c3ac012-d12f-11f1-b9d7-d9a0451e464c" data-action="Deal Block" data-label="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension48="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension25="$44">Go Walk Joy Cushioning Sneakers (Women's): was $51 now $44</a></strong><br>These slip-in Skechers shoes have all of the cushioning and comfort you've come to know and love from the brand. There's also a breathable upper, to keep your feet cool and comfortable.<a class="view-deal button" href="https://www.amazon.com/Skechers-Sneaker-5Gen-Cushioning-Air-Cooled-Breathable/dp/B072LFYC5Q" target="_blank" rel="nofollow" data-dimension112="2c3ac012-d12f-11f1-b9d7-d9a0451e464c" data-action="Deal Block" data-label="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension48="Go Walk Joy Cushioning Sneakers (Women's)" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac076-d12f-11f1-9225-cdf77c0e89ee" data-action="Deal Block" data-label="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension48="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension25="$60" href="https://www.amazon.com/Skechers-Respected-Holmgren-Slip-Loafer-Charcoal/dp/B0BYBFZXL8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1137px;"><p class="vanilla-image-block" style="padding-top:61.13%;"><img id="p79NadjFtsEoazJoKeBmgR" name="Respected-Holmgren Slip-in Loafer (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/p79NadjFtsEoazJoKeBmgR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1137" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Respected-Holmgren-Slip-Loafer-Charcoal/dp/B0BYBFZXL8" target="_blank" rel="nofollow" data-dimension112="2c3ac076-d12f-11f1-9225-cdf77c0e89ee" data-action="Deal Block" data-label="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension48="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension25="$60">Respected-Holmgren Slip-in Loafer (Men's): was $89 now $60</a></strong><br>The simple but stylish design of the Respected-Holmgren Slip-in Loafer makes them a great pick for any activity. The Air Cooled Memory Foam delivers breathable comfort, and the Goodyear rubber outsole provides reliable grip in wet or icy conditions.<a class="view-deal button" href="https://www.amazon.com/Skechers-Respected-Holmgren-Slip-Loafer-Charcoal/dp/B0BYBFZXL8" target="_blank" rel="nofollow" data-dimension112="2c3ac076-d12f-11f1-9225-cdf77c0e89ee" data-action="Deal Block" data-label="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension48="Respected-Holmgren Slip-in Loafer (Men's)" data-dimension25="$60">View Deal</a></p></div><div class="product"><a data-dimension112="558f67c2-d131-11f1-8c70-6fe2d258a912" data-action="Deal Block" data-label="Arch Fit 2.0 - Star Bound" data-dimension48="Arch Fit 2.0 - Star Bound" data-dimension25="$94" href="https://www.amazon.com/Skechers-Womens-Sneaker-White-7/dp/B0CPJFGK3G/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:819px;"><p class="vanilla-image-block" style="padding-top:84.86%;"><img id="VJnWP38VkGWMuARJrWadJB" name="Skechers Arch Fit 2.0 - Star Bound" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/VJnWP38VkGWMuARJrWadJB-1920-80.jpg" mos="" align="middle" fullscreen="" width="819" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Sneaker-White-7/dp/B0CPJFGK3G/" target="_blank" rel="nofollow" data-dimension112="558f67c2-d131-11f1-8c70-6fe2d258a912" data-action="Deal Block" data-label="Arch Fit 2.0 - Star Bound" data-dimension48="Arch Fit 2.0 - Star Bound" data-dimension25="$94">Arch Fit 2.0 - Star Bound: was $102 now $94</a></strong><br>The <a href="https://www.tomsguide.com/wellness/fitness/skechers-arch-fit-2-0-star-bound-review">Skechers Arch Fit 2.0 Star Bound</a> sneakers offer comfort and support for anyone looking for a versatile option to wear to run errands all day. The Air Cooled Memory Foam and Arch Fit technology work together to provide a bouncy walking experience, and the elevated heel aids in maintaining good posture by promoting heel-to-toe steps. The leather of the upper takes a little time to bend with your footsteps, but once it does, you will reach for them every day.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Sneaker-White-7/dp/B0CPJFGK3G/" target="_blank" rel="nofollow" data-dimension112="558f67c2-d131-11f1-8c70-6fe2d258a912" data-action="Deal Block" data-label="Arch Fit 2.0 - Star Bound" data-dimension48="Arch Fit 2.0 - Star Bound" data-dimension25="$94">View Deal</a></p></div><h3 class="article-body__section" id="section-birkenstocks"><span>Birkenstocks</span></h3><div class="product"><a data-dimension112="2c3ac134-d12f-11f1-9174-094bd5538ab4" data-action="Deal Block" data-label="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension48="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension25="$30" href="https://www.nordstromrack.com/s/birkenstock-arizona-stealth-buckle-eva-slide-sandal-women/7945865?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1560px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="3Qt2UrH7ESWm55JQpi8aXQ" name="Arizona Stealth" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3Qt2UrH7ESWm55JQpi8aXQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1560" height="2340" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nordstromrack.com/s/birkenstock-arizona-stealth-buckle-eva-slide-sandal-women/7945865?" target="_blank" rel="nofollow" data-dimension112="2c3ac134-d12f-11f1-9174-094bd5538ab4" data-action="Deal Block" data-label="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension48="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension25="$30">Arizona Stealth Buckle EVA Slide (Women's): was $54 now $30</a></strong><br>A pair of Birkenstocks for $30??? Sign me up. These waterproof slides are perfect for hanging out indoors, or going to the beach or pool. They feature a rubber-like texture with sleek adjustable straps and a grippy traction sole. <a class="view-deal button" href="https://www.nordstromrack.com/s/birkenstock-arizona-stealth-buckle-eva-slide-sandal-women/7945865?" target="_blank" rel="nofollow" data-dimension112="2c3ac134-d12f-11f1-9174-094bd5538ab4" data-action="Deal Block" data-label="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension48="Arizona Stealth Buckle EVA Slide (Women's)" data-dimension25="$30">View Deal</a></p></div><div class="product"><a data-dimension112="508c7720-d130-11f1-aa16-1d13b2533b71" data-action="Deal Block" data-label="Lutry 365 Clog - Suede (Women's)" data-dimension48="Lutry 365 Clog - Suede (Women's)" data-dimension25="$61" href="https://www.amazon.com/Birkenstock-Womens-Lutry-365-Suede-Narrow/dp/B0FH15W1SY" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:46.62%;"><img id="b4FtpSQLYePgojSeRWMMh8" name="Lutry 365 Clog - Suede (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/b4FtpSQLYePgojSeRWMMh8-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="324" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Birkenstock-Womens-Lutry-365-Suede-Narrow/dp/B0FH15W1SY" target="_blank" rel="nofollow" data-dimension112="508c7720-d130-11f1-aa16-1d13b2533b71" data-action="Deal Block" data-label="Lutry 365 Clog - Suede (Women's)" data-dimension48="Lutry 365 Clog - Suede (Women's)" data-dimension25="$61">Lutry 365 Clog - Suede (Women's): was $154 now $61</a></strong><br>You don't see a Birkenstock discount this big every day, so grab it while you can if it's available in your size! These slip-on clogs have a premium suede upper, making them look and feel super luxurious.<a class="view-deal button" href="https://www.amazon.com/Birkenstock-Womens-Lutry-365-Suede-Narrow/dp/B0FH15W1SY" target="_blank" rel="nofollow" data-dimension112="508c7720-d130-11f1-aa16-1d13b2533b71" data-action="Deal Block" data-label="Lutry 365 Clog - Suede (Women's)" data-dimension48="Lutry 365 Clog - Suede (Women's)" data-dimension25="$61">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac1b6-d12f-11f1-b4df-f9cca801955f" data-action="Deal Block" data-label="Papilio Florida Platform Flex (Women's)" data-dimension48="Papilio Florida Platform Flex (Women's)" data-dimension25="$74" href="https://www.nordstromrack.com/s/florida-flex-platform-slide-sandal-women/7953334?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1560px;"><p class="vanilla-image-block" style="padding-top:150.00%;"><img id="YToScW8bDWGEAAJqToJey" name="florida" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YToScW8bDWGEAAJqToJey-1920-80.jpg" mos="" align="middle" fullscreen="" width="1560" height="2340" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nordstromrack.com/s/florida-flex-platform-slide-sandal-women/7953334?" target="_blank" rel="nofollow" data-dimension112="2c3ac1b6-d12f-11f1-b4df-f9cca801955f" data-action="Deal Block" data-label="Papilio Florida Platform Flex (Women's)" data-dimension48="Papilio Florida Platform Flex (Women's)" data-dimension25="$74">Papilio Florida Platform Flex (Women's): was $144 now $74</a></strong><br>These Papilio by Birkenstock sandals feature a platform and three straps for extra support. Reviewers love their iconic design and comfortable, adjustable fit.<a class="view-deal button" href="https://www.nordstromrack.com/s/florida-flex-platform-slide-sandal-women/7953334?" target="_blank" rel="nofollow" data-dimension112="2c3ac1b6-d12f-11f1-b4df-f9cca801955f" data-action="Deal Block" data-label="Papilio Florida Platform Flex (Women's)" data-dimension48="Papilio Florida Platform Flex (Women's)" data-dimension25="$74">View Deal</a></p></div><h3 class="article-body__section" id="section-vans"><span>Vans</span></h3><div class="product"><a data-dimension112="508c7bc6-d130-11f1-b083-a1a8585d05a8" data-action="Deal Block" data-label="Asher Adult Low Top Sneakers (Women's)" data-dimension48="Asher Adult Low Top Sneakers (Women's)" data-dimension25="$39" href="https://www.amazon.com/Vans-Comfortable-Sneakers-Walking-Everyday/dp/B0FL84PVY7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1047px;"><p class="vanilla-image-block" style="padding-top:66.38%;"><img id="QKub3ycPjdDp9fUWpA3uZc" name="Asher Adult Low Top Sneakers (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QKub3ycPjdDp9fUWpA3uZc-1920-80.jpg" mos="" align="middle" fullscreen="" width="1047" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Vans-Comfortable-Sneakers-Walking-Everyday/dp/B0FL84PVY7" target="_blank" rel="nofollow" data-dimension112="508c7bc6-d130-11f1-b083-a1a8585d05a8" data-action="Deal Block" data-label="Asher Adult Low Top Sneakers (Women's)" data-dimension48="Asher Adult Low Top Sneakers (Women's)" data-dimension25="$39">Asher Adult Low Top Sneakers (Women's): was $55 now $39</a></strong><br>Vans' low-top slip-on shoes are a steal starting from just $39! The simple design means they couldn't be any more versatile and easy to style — and the color selection is great, too. <a class="view-deal button" href="https://www.amazon.com/Vans-Comfortable-Sneakers-Walking-Everyday/dp/B0FL84PVY7" target="_blank" rel="nofollow" data-dimension112="508c7bc6-d130-11f1-b083-a1a8585d05a8" data-action="Deal Block" data-label="Asher Adult Low Top Sneakers (Women's)" data-dimension48="Asher Adult Low Top Sneakers (Women's)" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="508c7c84-d130-11f1-8116-bb3e84775756" data-action="Deal Block" data-label="Brooklyn LS Shoe (Women's)" data-dimension48="Brooklyn LS Shoe (Women's)" data-dimension25="$52" href="https://www.amazon.com/Vans-Brooklyn-Low-Top-Sneakers-Everyday/dp/B0D7QCNLHJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1005px;"><p class="vanilla-image-block" style="padding-top:69.15%;"><img id="rJDozMtKWunUE3PrvRZ9kQ" name="Brooklyn LS Shoe (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rJDozMtKWunUE3PrvRZ9kQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1005" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Vans-Brooklyn-Low-Top-Sneakers-Everyday/dp/B0D7QCNLHJ" target="_blank" rel="nofollow" data-dimension112="508c7c84-d130-11f1-8116-bb3e84775756" data-action="Deal Block" data-label="Brooklyn LS Shoe (Women's)" data-dimension48="Brooklyn LS Shoe (Women's)" data-dimension25="$52">Brooklyn LS Shoe (Women's): was $70 now $52</a></strong><br>These classic Vans can be yours starting from just $52 right now. Their padded collar makes them comfortable to wear, and they feature the iconic Vans stripe down the side.<a class="view-deal button" href="https://www.amazon.com/Vans-Brooklyn-Low-Top-Sneakers-Everyday/dp/B0D7QCNLHJ" target="_blank" rel="nofollow" data-dimension112="508c7c84-d130-11f1-8116-bb3e84775756" data-action="Deal Block" data-label="Brooklyn LS Shoe (Women's)" data-dimension48="Brooklyn LS Shoe (Women's)" data-dimension25="$52">View Deal</a></p></div><h3 class="article-body__section" id="section-cushionaire"><span>Cushionaire</span></h3><div class="product"><a data-dimension112="2c3ac3fa-d12f-11f1-9469-391b5c391713" data-action="Deal Block" data-label="Laz Cork Footbed Sandals" data-dimension48="Laz Cork Footbed Sandals" data-dimension25="$39" href="https://www.amazon.com/dp/B0H8FB19F7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:606px;"><p class="vanilla-image-block" style="padding-top:114.69%;"><img id="GknzxZr7RhbEEsFqQG3HjN" name="Laz" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GknzxZr7RhbEEsFqQG3HjN-1920-80.jpg" mos="" align="middle" fullscreen="" width="606" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0H8FB19F7" target="_blank" rel="nofollow" data-dimension112="2c3ac3fa-d12f-11f1-9469-391b5c391713" data-action="Deal Block" data-label="Laz Cork Footbed Sandals" data-dimension48="Laz Cork Footbed Sandals" data-dimension25="$39">Laz Cork Footbed Sandals: was $59 now $39</a></strong><br>If you're in the market for some Birkenstocks but don't want to pay the hefty price, these Cushionaire sandals are the next best thing. Crafted from high-quality faux leather, the sandals feature a soft lining and adjustable double buckle strap. They're also available in a plethora of colors, although price may vary. <a class="view-deal button" href="https://www.amazon.com/dp/B0H8FB19F7" target="_blank" rel="nofollow" data-dimension112="2c3ac3fa-d12f-11f1-9469-391b5c391713" data-action="Deal Block" data-label="Laz Cork Footbed Sandals" data-dimension48="Laz Cork Footbed Sandals" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac45e-d12f-11f1-a100-c3e3fffc96dc" data-action="Deal Block" data-label="Lens Sandals" data-dimension48="Lens Sandals" data-dimension25="$49" href="https://www.amazon.com/dp/B0GZJ8VB6M" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:543px;"><p class="vanilla-image-block" style="padding-top:127.99%;"><img id="v9a622fikJvyBJaGFHRcpH" name="Cushionaire Lens" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/v9a622fikJvyBJaGFHRcpH-1920-80.jpg" mos="" align="middle" fullscreen="" width="543" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0GZJ8VB6M" target="_blank" rel="nofollow" data-dimension112="2c3ac45e-d12f-11f1-a100-c3e3fffc96dc" data-action="Deal Block" data-label="Lens Sandals" data-dimension48="Lens Sandals" data-dimension25="$49">Lens Sandals: was $69 now $49</a></strong><br>Looking for a fun little twist on a classic slide? Slip into these comfortable sandals that feature unique braided straps. They have a cushioned footbed and a contoured sole making them extra comfy. They also pair nicely with dresses, denim and casual outfits.<a class="view-deal button" href="https://www.amazon.com/dp/B0GZJ8VB6M" target="_blank" rel="nofollow" data-dimension112="2c3ac45e-d12f-11f1-a100-c3e3fffc96dc" data-action="Deal Block" data-label="Lens Sandals" data-dimension48="Lens Sandals" data-dimension25="$49">View Deal</a></p></div><h3 class="article-body__section" id="section-nortiv-8"><span>Nortiv 8</span></h3><div class="product"><a data-dimension112="2c3ac512-d12f-11f1-b603-b1ccc341b16a" data-action="Deal Block" data-label="Lightweight Ankle Hiking Boots (Women's)" data-dimension48="Lightweight Ankle Hiking Boots (Women's)" data-dimension25="$39" href="https://www.amazon.com/dp/B0BFPR8Y2Y" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:873px;"><p class="vanilla-image-block" style="padding-top:79.61%;"><img id="5QdW6J7JmJEfcovDJA6ZgM" name="Lightweight Ankle Hiking Boots (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5QdW6J7JmJEfcovDJA6ZgM-1920-80.jpg" mos="" align="middle" fullscreen="" width="873" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0BFPR8Y2Y" target="_blank" rel="nofollow" data-dimension112="2c3ac512-d12f-11f1-b603-b1ccc341b16a" data-action="Deal Block" data-label="Lightweight Ankle Hiking Boots (Women's)" data-dimension48="Lightweight Ankle Hiking Boots (Women's)" data-dimension25="$39">Lightweight Ankle Hiking Boots (Women's): was $47 now $39</a></strong><br>Nortiv 8's budget-friendly hiking boots just got a discount, making them even better value. They're built to be lightweight, comfortable and durable, with grip to stop you from slipping on the trails.<a class="view-deal button" href="https://www.amazon.com/dp/B0BFPR8Y2Y" target="_blank" rel="nofollow" data-dimension112="2c3ac512-d12f-11f1-b603-b1ccc341b16a" data-action="Deal Block" data-label="Lightweight Ankle Hiking Boots (Women's)" data-dimension48="Lightweight Ankle Hiking Boots (Women's)" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac56c-d12f-11f1-b6ca-9fc55314d528" data-action="Deal Block" data-label="Trail Running Walking Shoes (Men's)" data-dimension48="Trail Running Walking Shoes (Men's)" data-dimension25="$56" href="https://www.amazon.com/dp/B0H7BRYLZ1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1093px;"><p class="vanilla-image-block" style="padding-top:63.59%;"><img id="98qPHFxV2Ykz8EZjKZouLY" name="Trail Running Walking Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/98qPHFxV2Ykz8EZjKZouLY-1920-80.jpg" mos="" align="middle" fullscreen="" width="1093" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0H7BRYLZ1" target="_blank" rel="nofollow" data-dimension112="2c3ac56c-d12f-11f1-b6ca-9fc55314d528" data-action="Deal Block" data-label="Trail Running Walking Shoes (Men's)" data-dimension48="Trail Running Walking Shoes (Men's)" data-dimension25="$56">Trail Running Walking Shoes (Men's): was $69 now $56</a></strong><br>These Nortiv 8 shoes come in handy for both hiking and trail runs. They're lightweight, packed with cushioning and have grip to keep you steady. Plus, with this discount, they're affordable too.<a class="view-deal button" href="https://www.amazon.com/dp/B0H7BRYLZ1" target="_blank" rel="nofollow" data-dimension112="2c3ac56c-d12f-11f1-b6ca-9fc55314d528" data-action="Deal Block" data-label="Trail Running Walking Shoes (Men's)" data-dimension48="Trail Running Walking Shoes (Men's)" data-dimension25="$56">View Deal</a></p></div><h3 class="article-body__section" id="section-new-balance"><span>New Balance</span></h3><div class="product"><a data-dimension112="2c3ac62a-d12f-11f1-8a8b-77e3e9abadb3" data-action="Deal Block" data-label="237 V1 Sneaker (Men's)" data-dimension48="237 V1 Sneaker (Men's)" data-dimension25="$69" href="https://www.amazon.com/New-Balance-Sneaker-White-Brighton/dp/B0F4MB4R6V" 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:50.47%;"><img id="sTxmZw69B2s8LpTEsCvTfT" name="237 V1 Sneaker (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/sTxmZw69B2s8LpTEsCvTfT-1920-80.jpg" mos="" align="middle" fullscreen="" width="1290" height="651" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-Sneaker-White-Brighton/dp/B0F4MB4R6V" target="_blank" rel="nofollow" data-dimension112="2c3ac62a-d12f-11f1-8a8b-77e3e9abadb3" data-action="Deal Block" data-label="237 V1 Sneaker (Men's)" data-dimension48="237 V1 Sneaker (Men's)" data-dimension25="$69">237 V1 Sneaker (Men's): was $84 now $69</a></strong><br>Right now you can get the New Balance 237 V1 sneakers on sale and add a touch of style to your wardrobe. They have a suede and mesh upper with a sleek three-tone color scheme.<a class="view-deal button" href="https://www.amazon.com/New-Balance-Sneaker-White-Brighton/dp/B0F4MB4R6V" target="_blank" rel="nofollow" data-dimension112="2c3ac62a-d12f-11f1-8a8b-77e3e9abadb3" data-action="Deal Block" data-label="237 V1 Sneaker (Men's)" data-dimension48="237 V1 Sneaker (Men's)" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac684-d12f-11f1-a5d7-ff54bdfdf464" data-action="Deal Block" data-label="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension48="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension25="$98" href="https://www.amazon.com/New-Balance-FuelCell-Walking-Electric/dp/B0D2Y7L3DC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:755px;"><p class="vanilla-image-block" style="padding-top:55.23%;"><img id="ufsfox6NerPUoEY6YYZYXk" name="FuelCell Walker Elite V1 Walking Shoe (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ufsfox6NerPUoEY6YYZYXk-1920-80.jpg" mos="" align="middle" fullscreen="" width="755" height="417" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/New-Balance-FuelCell-Walking-Electric/dp/B0D2Y7L3DC" target="_blank" rel="nofollow" data-dimension112="2c3ac684-d12f-11f1-a5d7-ff54bdfdf464" data-action="Deal Block" data-label="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension48="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension25="$98">FuelCell Walker Elite V1 Walking Shoe (Women's): was $139 now $98</a></strong><br>Engineered for walking, the New Balance FuelCell Walker Elite V1 Walking Shoes are cushioned, stable, and propel your feet forward with each step. They look super sleek, too. <a class="view-deal button" href="https://www.amazon.com/New-Balance-FuelCell-Walking-Electric/dp/B0D2Y7L3DC" target="_blank" rel="nofollow" data-dimension112="2c3ac684-d12f-11f1-a5d7-ff54bdfdf464" data-action="Deal Block" data-label="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension48="FuelCell Walker Elite V1 Walking Shoe (Women's)" data-dimension25="$98">View Deal</a></p></div><h3 class="article-body__section" id="section-dr-martens"><span>Dr Martens</span></h3><div class="product"><a data-dimension112="2c3ac7e2-d12f-11f1-9654-3b855454325c" data-action="Deal Block" data-label="Holly Leather Quad Shoe (Women's)" data-dimension48="Holly Leather Quad Shoe (Women's)" data-dimension25="$83" href="https://www.amazon.com/Dr-Martens-Holly-Buttero-Womens/dp/B07MHM313L" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:72.37%;"><img id="AgdKAuExiUftz8NTZy4PoQ" name="Holly Leather Quad Shoe (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/AgdKAuExiUftz8NTZy4PoQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="503" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Dr-Martens-Holly-Buttero-Womens/dp/B07MHM313L" target="_blank" rel="nofollow" data-dimension112="2c3ac7e2-d12f-11f1-9654-3b855454325c" data-action="Deal Block" data-label="Holly Leather Quad Shoe (Women's)" data-dimension48="Holly Leather Quad Shoe (Women's)" data-dimension25="$83">Holly Leather Quad Shoe (Women's): was $170 now $83</a></strong><br>Don't miss your chance to score this huge saving — it's not going to be available for long. These Dr Martens shoes have 1.5-inch soles and a pretty ribbon at the front! Perfect to add some "dark academia" vibes to your fall outfits.<a class="view-deal button" href="https://www.amazon.com/Dr-Martens-Holly-Buttero-Womens/dp/B07MHM313L" target="_blank" rel="nofollow" data-dimension112="2c3ac7e2-d12f-11f1-9654-3b855454325c" data-action="Deal Block" data-label="Holly Leather Quad Shoe (Women's)" data-dimension48="Holly Leather Quad Shoe (Women's)" data-dimension25="$83">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac850-d12f-11f1-a753-47a3eccd64c4" data-action="Deal Block" data-label="1460 8 Eye Boot (Unisex)" data-dimension48="1460 8 Eye Boot (Unisex)" data-dimension25="$151" href="https://www.amazon.com/Dr-Martens-Smooth-Combat-Womens/dp/B004SI1QNU/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:684px;"><p class="vanilla-image-block" style="padding-top:101.61%;"><img id="imnJnaGkotNWgHnjsGETSk" name="1460 8 Eye Boot" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/imnJnaGkotNWgHnjsGETSk-1920-80.jpg" mos="" align="middle" fullscreen="" width="684" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Dr-Martens-Smooth-Combat-Womens/dp/B004SI1QNU/" target="_blank" rel="nofollow" data-dimension112="2c3ac850-d12f-11f1-a753-47a3eccd64c4" data-action="Deal Block" data-label="1460 8 Eye Boot (Unisex)" data-dimension48="1460 8 Eye Boot (Unisex)" data-dimension25="$151">1460 8 Eye Boot (Unisex): was $180 now $151</a></strong><br>Right now Dr. Martens’ 1460 8 Eye Boots have seen a discount at Amazon. Made of vegan leather, their slip-resistant soles and tough construction make them great for both work and everyday wear.<a class="view-deal button" href="https://www.amazon.com/Dr-Martens-Smooth-Combat-Womens/dp/B004SI1QNU/" target="_blank" rel="nofollow" data-dimension112="2c3ac850-d12f-11f1-a753-47a3eccd64c4" data-action="Deal Block" data-label="1460 8 Eye Boot (Unisex)" data-dimension48="1460 8 Eye Boot (Unisex)" data-dimension25="$151">View Deal</a></p></div><h3 class="article-body__section" id="section-timberland"><span>Timberland</span></h3><div class="product"><a data-dimension112="2c3ac90e-d12f-11f1-85a3-9fe1d961f60d" data-action="Deal Block" data-label="Davis Square Chukka Shoe (Men's)" data-dimension48="Davis Square Chukka Shoe (Men's)" data-dimension25="$48" href="https://www.amazon.com/Timberland-Davis-Square-Chukka-Wheat/dp/B0D54GMPLS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:895px;"><p class="vanilla-image-block" style="padding-top:77.65%;"><img id="9sA8mqcAuQkkDAVnQjVBqj" name="Davis Square Chukka Shoe (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9sA8mqcAuQkkDAVnQjVBqj-1920-80.jpg" mos="" align="middle" fullscreen="" width="895" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Timberland-Davis-Square-Chukka-Wheat/dp/B0D54GMPLS" target="_blank" rel="nofollow" data-dimension112="2c3ac90e-d12f-11f1-85a3-9fe1d961f60d" data-action="Deal Block" data-label="Davis Square Chukka Shoe (Men's)" data-dimension48="Davis Square Chukka Shoe (Men's)" data-dimension25="$48">Davis Square Chukka Shoe (Men's): was $95 now $48</a></strong><br>Classic, stylish and comfortable. It doesn't get better than the Davis Square Chukka Shoe — especially when you can get a pair for almost half off. These are made of premium Timberland leather and have comfortable OrthoLite insoles.<a class="view-deal button" href="https://www.amazon.com/Timberland-Davis-Square-Chukka-Wheat/dp/B0D54GMPLS" target="_blank" rel="nofollow" data-dimension112="2c3ac90e-d12f-11f1-85a3-9fe1d961f60d" data-action="Deal Block" data-label="Davis Square Chukka Shoe (Men's)" data-dimension48="Davis Square Chukka Shoe (Men's)" data-dimension25="$48">View Deal</a></p></div><div class="product"><a data-dimension112="2c3ac968-d12f-11f1-89ec-eb419ee77651" data-action="Deal Block" data-label="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension48="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension25="$79" href="https://www.amazon.com/Timberland-Parker-Street-Lace-Up-Sneaker/dp/B0D54KCZDX" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:785px;"><p class="vanilla-image-block" style="padding-top:88.54%;"><img id="hxmYG96im3MVZgN7nzYSRk" name="Parker Street Mid Lace-Up Sneaker (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hxmYG96im3MVZgN7nzYSRk-1920-80.jpg" mos="" align="middle" fullscreen="" width="785" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Timberland-Parker-Street-Lace-Up-Sneaker/dp/B0D54KCZDX" target="_blank" rel="nofollow" data-dimension112="2c3ac968-d12f-11f1-89ec-eb419ee77651" data-action="Deal Block" data-label="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension48="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension25="$79">Parker Street Mid Lace-Up Sneaker (Men's): was $110 now $79</a></strong><br>These casual sneaker boots are a great transitional shoe from mornings at the office to afternoons on the mountain. The lace up sneaker will be a staple in your wardrobe thanks to their cushioning. You'll want to wear them on every adventure. <a class="view-deal button" href="https://www.amazon.com/Timberland-Parker-Street-Lace-Up-Sneaker/dp/B0D54KCZDX" target="_blank" rel="nofollow" data-dimension112="2c3ac968-d12f-11f1-89ec-eb419ee77651" data-action="Deal Block" data-label="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension48="Parker Street Mid Lace-Up Sneaker (Men's)" data-dimension25="$79">View Deal</a></p></div><h3 class="article-body__section" id="section-asics"><span>Asics</span></h3><div class="product"><a data-dimension112="2c3aca1c-d12f-11f1-a9c7-55d9c57385b9" data-action="Deal Block" data-label="Tiger Runner II (Women's)" data-dimension48="Tiger Runner II (Women's)" data-dimension25="$59" href="https://www.amazon.com/ASICS-Womens-Runner-Sportstyle-Silver/dp/B0H3F1WSB3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:682px;"><p class="vanilla-image-block" style="padding-top:75.07%;"><img id="vcT4ZrTkbB5kx6uGRWjquJ" name="asics tiger runner ii" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vcT4ZrTkbB5kx6uGRWjquJ-1920-80.png" mos="" align="middle" fullscreen="" width="682" height="512" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/ASICS-Womens-Runner-Sportstyle-Silver/dp/B0H3F1WSB3" target="_blank" rel="nofollow" data-dimension112="2c3aca1c-d12f-11f1-a9c7-55d9c57385b9" data-action="Deal Block" data-label="Tiger Runner II (Women's)" data-dimension48="Tiger Runner II (Women's)" data-dimension25="$59">Tiger Runner II (Women's): was $85 now $59</a></strong><br>Designed for everyday wear, these Asics sneakers are inspired by classic 80s jogging shoes. On the inside, they're packed with today's best cushioning and durability.<a class="view-deal button" href="https://www.amazon.com/ASICS-Womens-Runner-Sportstyle-Silver/dp/B0H3F1WSB3" target="_blank" rel="nofollow" data-dimension112="2c3aca1c-d12f-11f1-a9c7-55d9c57385b9" data-action="Deal Block" data-label="Tiger Runner II (Women's)" data-dimension48="Tiger Runner II (Women's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="2c3aca76-d12f-11f1-af2c-15d20261453c" data-action="Deal Block" data-label="Gel-Venture 11" data-dimension48="Gel-Venture 11" data-dimension25="$69" href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Carrier/dp/B0FV72G49S" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1146px;"><p class="vanilla-image-block" style="padding-top:75.04%;"><img id="44i7uWA8WvTqRemkvKZpV6" name="Gel-Venture 11" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/44i7uWA8WvTqRemkvKZpV6-1920-80.jpg" mos="" align="middle" fullscreen="" width="1146" height="860" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Asics Gel-Venture 11 are designed for everyday runs and walks! They have Amplifoam Plus midsole cushioning on board, and a 2mm higher stack height — 2mm of extra softness to absorb impact and keep you comfortable for hours.<a class="view-deal button" href="https://www.amazon.com/ASICS-Gel-Venture-Running-Shoes-Carrier/dp/B0FV72G49S" target="_blank" rel="nofollow" data-dimension112="2c3aca76-d12f-11f1-af2c-15d20261453c" data-action="Deal Block" data-label="Gel-Venture 11" data-dimension48="Gel-Venture 11" data-dimension25="$69">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Home+Appliances&view_mode=savings_squad&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 getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      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%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      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-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .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 {      width: 100%;      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;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .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);    }    .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;    }    /*       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: 120px;      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: 16px 16px 8px;      }            .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-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .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;      }      /* 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;        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;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .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: 14px;      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-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      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-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .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;    }    .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;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .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::-webkit-scrollbar {      display: none;    }    .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;      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 {    }    .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.40);        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: #1f69ff; 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: #0056e0; 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; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \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">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').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>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \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>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').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>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \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>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \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 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/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').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>        \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();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          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();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    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);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             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 (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    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 (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = 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') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // 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) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              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 !== 'date_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 handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          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');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          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');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    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;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   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;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = 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 });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          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;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               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 = 'date_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')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        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';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        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 fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&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=${siteParam}&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 && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&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 seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.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) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          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();                }                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;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                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 || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[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) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    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');                    url.searchParams.append('rows', this.getRowsLimit().toString());          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 = this.getRowsLimit();          // 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 : 'date_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}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_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, idx) => {              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}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${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);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } 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)}${_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 = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \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 = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \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 = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \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 tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_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>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}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_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 ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_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) {            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;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // 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');            }            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);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } 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 was tossing and turning all night until I made this 2-second tweak to my bedtime routine — experts explains why it works ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When it's time to sleep, I like to create the <a href="https://www.tomsguide.com/mattresses/pillows-bedding/cozy-season-is-here-12-bedroom-essentials-our-sleep-experts-swear-by-for-better-fall-and-winter-sleep">coziest atmosphere</a>. That means a warm room, plenty of layers and dim lights. A closed window is a must. But since October hit, I've noticed instead of snuggling up to sleep, I'm tossing and turning in a room that feels stuffy.</p><p>I asked the experts what was happening and they made a simple suggestion: start opening the window. This two second hack lets out carbon dioxide, stale air and excess moisture and lets in the fresh, clean air that's necessary to sleep.</p><p>Yes, open windows also cool down your bedroom but as the experts explain, that's a good thing when you're trying to sleep. So grab a blanket, prop open the window, and discover why this quick habit is your key to good sleep this fall and winter.</p><h2 id="the-2-second-task-that-will-help-you-sleep-better">The 2-second task that will help you sleep better</h2><p>“It may sound counterintuitive in the cold nights of winter, but opening your bedroom windows is important for your health, your sleep quality and your hygiene," explains Dr. Hana Patel, NHS GP and resident sleep expert for <a href="https://www.time4sleep.co.uk/pages/bed-size-guide" target="_blank">Time4Sleep.</a></p><p>A sealed room keeps in warmth, which is what you want on a cold day. But it also traps moisture, air pollutants such as VOCs and CO₂, and allergens like mold, which thrive in humid conditions.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8U6WwewFzfsTTBy9j5KWNR" name="Bedroom window open" alt="The image shows a bedroom window open wide, with white and green curtains moving in the breeze. Outside the window there is a large leafy tree." src="https://cdn.mos.cms.futurecdn.net/8U6WwewFzfsTTBy9j5KWNR-1920-80.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: Getty Images)</span></figcaption></figure><p>Warm, stuffy rooms also disrupt the natural cycle of your body clock, which expects a cooler feel at bedtime. This can leave you struggling to fall asleep or <a href="https://www.tomsguide.com/wellness/sleep/sleep-doctor-shares-tip-for-falling-back-to-sleep-when-i-wake-up-at-3am-with-nighttime-anxiety">waking up at 3 a.m</a>. </p><p>“Open your windows for a couple of hours in the morning once you get up," advises Dr. Patel. "This helps to <a href="https://www.tomsguide.com/home/5-ways-to-ventilate-a-room-without-windows">ventilate the room</a> and improve air quality, bringing in fresh air and reducing condensation."</p><p>If that sounds horribly chilly to you, <a href="https://click2pharmacy.co.uk/" target="_blank">Dr. Hussain Ahmad</a> suggests a shorter timeframe of "10 to 15 minutes before you go to bed." Alternatively, using trickle vents can create continuous airflow without the sudden blast of cold.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X759ZW"></div>                            </div>                            <script src="https://kwizly.com/embed/X759ZW.js" async></script><h3 class="article-body__section" id="section-why-opening-your-window-can-help-you-sleep-better-even-in-winter"><span>Why opening your window can help you sleep better (even in winter)</span></h3><h2 id="1-reduces-co2-build-up">1. Reduces CO2 build-up</h2><p>As we breathe out, we release carbon dioxide (CO₂) into the air. When the doors and windows are closed, carbon dioxide levels build-up.</p><p>"Research suggests better-ventilated bedrooms with lower levels of carbon dioxide are associated with better <a href="https://www.tomsguide.com/wellness/sleep/sleep-quality--matters-more-than-quantity-says-new-study">sleep quality</a> and feeling less tired and sleepy the following day," explains Dr. Ahmad.</p><p>It's thought that high levels of CO₂ increase breathing stress. This extra work keeps your body in a <a href="https://www.tomsguide.com/wellness/sleep/light-sleep-is-just-as-important-as-deep-this-sleep-expert-explains-why">lighter, more easily-disrupted sleep stage</a>.</p><p><a href="https://newwatersrecovery.com/contributor/hanul-bandari/" target="_blank">Dr. Hanul Bhandari, MD</a>, agrees. "A <a href="https://www.sciencedirect.com/science/article/pii/S0360132322008605" target="_blank">field study</a> of 40 bedrooms found that opening a window lowered carbon dioxide, <a href="https://www.tomsguide.com/features/what-is-mattress-off-gassing">volatile organic compounds</a> and particulate matter, while both measured and perceived sleep quality improved."</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Vd4Cjuin8vnVhUkTPnRPfN" name="TG_Sleep_280426_ps0812" alt="A woman lying on her back on a bed in the dark. She's wearing an eye mask and a sleep tracker." src="https://cdn.mos.cms.futurecdn.net/Vd4Cjuin8vnVhUkTPnRPfN-1920-80.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><h2 id="2-lowers-the-temperature-before-bed">2. Lowers the temperature before bed</h2><p>As we edge closer to winter, you're probably shutting the windows so warm air stays <em>in</em>. But before bed, you want that stuffy air heading <em>out</em>.</p><p>"Your core body temperature needs to lower slightly as you fall asleep, which can become harder if a room is stuffy or too hot," says Dr. Ahmad. He advises a <a href="https://www.tomsguide.com/reference/the-best-temperature-for-sleeping">room temperature of 60 to 65 °F</a> (16 to 18°C.)</p><p>This temperature drop helps support your <a href="https://www.tomsguide.com/wellness/sleep/circadian-rhythm">circadian rhythm</a> by mimicking the conditions of day to night. When your bedroom is too warm at night, your internal clock misses a vital signal for sleep.</p><p>To keep your bedroom on the comfortable side of chill, stick to a brief window opening. Dr. Patel warns against <a href="https://www.tomsguide.com/wellness/sleep/this-is-the-simple-reason-why-you-wake-up-more-at-3am-in-winter-and-the-cozy-hacks-i-recommend-to-sleep-better">sleeping in a room too cold</a>, as this can lead to "chest infections and cold-related illnesses, especially for vulnerable people."</p><h2 id="3-helps-get-rid-of-allergens-and-mold">3. Helps get rid of allergens and mold</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:2121px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gVBRx6jxRJ2VydcoVJTVMZ" name="Mattress mold cleaning.jpg" alt="Image shows black mold on a white mattress with blue disposable gloves" src="https://cdn.mos.cms.futurecdn.net/gVBRx6jxRJ2VydcoVJTVMZ-1920-80.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>Breathing releases moisture into the air, which, alongside condensation from warm air on cold windows, can lead to damp in your sealed room.</p><p>"This moisture can cause <a href="https://www.tomsguide.com/home/spot-mold-early-dont-ignore-these-5-early-warning-signs">black mold to grow around the windows</a> if it is not removed, which can pose a health risk," explains Dr. Patel. The moisture can also settle into the bed, potentially leading to <a href="https://www.tomsguide.com/how-to/how-to-remove-mold-from-a-mattress">mattress mold</a>.</p><p>“Pulling back your bed covers while the windows are open also helps to <a href="https://www.tomsguide.com/wellness/mattress/do-mattresses-need-to-breathe">air your bedding</a>, improving your sleep hygiene by allowing moisture and humidity caused by your body heat overnight to escape in the morning," Dr. Patel advises.</p><p>And it's not just mold that thrives in the damp. <a href="https://allergycentre.co.uk/ace-specialist/professor-george-du-toit/" target="_blank">Professor George Du Toit</a>, Co-Founding Director and Professor of Paediatric Allergy at the Allergy Centre of Excellence (ACE) explained that <a href="https://www.tomsguide.com/wellness/mattresses/how-to-get-rid-of-dust-mites-from-your-mattress-pillows-and-bedding">dust mites</a> also love humid conditions, while closed windows trap in dust mite allergens. </p><p>He advises keeping humidity levels low through the use of "<a href="https://www.tomsguide.com/home/home-appliances/best-dehumidifiers">dehumidifiers</a>, extractor fans, and adequate ventilation."</p><div data-model-name="GoveeLife Smart 50 Pint Dehumidifier,Midea Cube 20-Pint Smart WiFi Dehumidifier,Frigidaire White Energy Star 50-Pint Portable Dehumidifier,Probreeze 20L Dehumidifier,Dreo 512s smart dehumidifier" data-widget-type="multimodelreview" data-widget-title="Today's best dehumidifier deals..."></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep/i-was-tossing-and-turning-all-night-until-i-made-this-2-second-tweak-to-my-bedtime-routine-experts-explains-why-it-works</link>
                                                                            <description>
                            <![CDATA[ Closed your windows to keep the cold out? Doctors say you're trapping in moisture, CO2, allergens and other sleep disruptors. Here's what health experts do instead. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">n5UyD3pJmuo2CakhQaWa4K</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/syQw8Bgx5WvaprkKJeNZPX-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 09:22:46 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sleep]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ ruth.jones@futurenet.com (Ruth Jones) ]]></author>                    <dc:creator><![CDATA[ Ruth Jones ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/Cqbswyyro7aBYnvMKaoS6W-320-70.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/syQw8Bgx5WvaprkKJeNZPX-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock / Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A woman lies in bed sleeping peacefully. In the bottom left is an inset image of a hand opening a window.]]></media:description>                                                            <media:text><![CDATA[A woman lies in bed sleeping peacefully. In the bottom left is an inset image of a hand opening a window.]]></media:text>
                                <media:title type="plain"><![CDATA[A woman lies in bed sleeping peacefully. In the bottom left is an inset image of a hand opening a window.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/syQw8Bgx5WvaprkKJeNZPX-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When it's time to sleep, I like to create the <a href="https://www.tomsguide.com/mattresses/pillows-bedding/cozy-season-is-here-12-bedroom-essentials-our-sleep-experts-swear-by-for-better-fall-and-winter-sleep">coziest atmosphere</a>. That means a warm room, plenty of layers and dim lights. A closed window is a must. But since October hit, I've noticed instead of snuggling up to sleep, I'm tossing and turning in a room that feels stuffy.</p><p>I asked the experts what was happening and they made a simple suggestion: start opening the window. This two second hack lets out carbon dioxide, stale air and excess moisture and lets in the fresh, clean air that's necessary to sleep.</p><p>Yes, open windows also cool down your bedroom but as the experts explain, that's a good thing when you're trying to sleep. So grab a blanket, prop open the window, and discover why this quick habit is your key to good sleep this fall and winter.</p><h2 id="the-2-second-task-that-will-help-you-sleep-better">The 2-second task that will help you sleep better</h2><p>“It may sound counterintuitive in the cold nights of winter, but opening your bedroom windows is important for your health, your sleep quality and your hygiene," explains Dr. Hana Patel, NHS GP and resident sleep expert for <a href="https://www.time4sleep.co.uk/pages/bed-size-guide" target="_blank">Time4Sleep.</a></p><p>A sealed room keeps in warmth, which is what you want on a cold day. But it also traps moisture, air pollutants such as VOCs and CO₂, and allergens like mold, which thrive in humid conditions.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8U6WwewFzfsTTBy9j5KWNR" name="Bedroom window open" alt="The image shows a bedroom window open wide, with white and green curtains moving in the breeze. Outside the window there is a large leafy tree." src="https://cdn.mos.cms.futurecdn.net/8U6WwewFzfsTTBy9j5KWNR-1920-80.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: Getty Images)</span></figcaption></figure><p>Warm, stuffy rooms also disrupt the natural cycle of your body clock, which expects a cooler feel at bedtime. This can leave you struggling to fall asleep or <a href="https://www.tomsguide.com/wellness/sleep/sleep-doctor-shares-tip-for-falling-back-to-sleep-when-i-wake-up-at-3am-with-nighttime-anxiety">waking up at 3 a.m</a>. </p><p>“Open your windows for a couple of hours in the morning once you get up," advises Dr. Patel. "This helps to <a href="https://www.tomsguide.com/home/5-ways-to-ventilate-a-room-without-windows">ventilate the room</a> and improve air quality, bringing in fresh air and reducing condensation."</p><p>If that sounds horribly chilly to you, <a href="https://click2pharmacy.co.uk/" target="_blank">Dr. Hussain Ahmad</a> suggests a shorter timeframe of "10 to 15 minutes before you go to bed." Alternatively, using trickle vents can create continuous airflow without the sudden blast of cold.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X759ZW"></div>                            </div>                            <script src="https://kwizly.com/embed/X759ZW.js" async></script><h3 class="article-body__section" id="section-why-opening-your-window-can-help-you-sleep-better-even-in-winter"><span>Why opening your window can help you sleep better (even in winter)</span></h3><h2 id="1-reduces-co2-build-up">1. Reduces CO2 build-up</h2><p>As we breathe out, we release carbon dioxide (CO₂) into the air. When the doors and windows are closed, carbon dioxide levels build-up.</p><p>"Research suggests better-ventilated bedrooms with lower levels of carbon dioxide are associated with better <a href="https://www.tomsguide.com/wellness/sleep/sleep-quality--matters-more-than-quantity-says-new-study">sleep quality</a> and feeling less tired and sleepy the following day," explains Dr. Ahmad.</p><p>It's thought that high levels of CO₂ increase breathing stress. This extra work keeps your body in a <a href="https://www.tomsguide.com/wellness/sleep/light-sleep-is-just-as-important-as-deep-this-sleep-expert-explains-why">lighter, more easily-disrupted sleep stage</a>.</p><p><a href="https://newwatersrecovery.com/contributor/hanul-bandari/" target="_blank">Dr. Hanul Bhandari, MD</a>, agrees. "A <a href="https://www.sciencedirect.com/science/article/pii/S0360132322008605" target="_blank">field study</a> of 40 bedrooms found that opening a window lowered carbon dioxide, <a href="https://www.tomsguide.com/features/what-is-mattress-off-gassing">volatile organic compounds</a> and particulate matter, while both measured and perceived sleep quality improved."</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Vd4Cjuin8vnVhUkTPnRPfN" name="TG_Sleep_280426_ps0812" alt="A woman lying on her back on a bed in the dark. She's wearing an eye mask and a sleep tracker." src="https://cdn.mos.cms.futurecdn.net/Vd4Cjuin8vnVhUkTPnRPfN-1920-80.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><h2 id="2-lowers-the-temperature-before-bed">2. Lowers the temperature before bed</h2><p>As we edge closer to winter, you're probably shutting the windows so warm air stays <em>in</em>. But before bed, you want that stuffy air heading <em>out</em>.</p><p>"Your core body temperature needs to lower slightly as you fall asleep, which can become harder if a room is stuffy or too hot," says Dr. Ahmad. He advises a <a href="https://www.tomsguide.com/reference/the-best-temperature-for-sleeping">room temperature of 60 to 65 °F</a> (16 to 18°C.)</p><p>This temperature drop helps support your <a href="https://www.tomsguide.com/wellness/sleep/circadian-rhythm">circadian rhythm</a> by mimicking the conditions of day to night. When your bedroom is too warm at night, your internal clock misses a vital signal for sleep.</p><p>To keep your bedroom on the comfortable side of chill, stick to a brief window opening. Dr. Patel warns against <a href="https://www.tomsguide.com/wellness/sleep/this-is-the-simple-reason-why-you-wake-up-more-at-3am-in-winter-and-the-cozy-hacks-i-recommend-to-sleep-better">sleeping in a room too cold</a>, as this can lead to "chest infections and cold-related illnesses, especially for vulnerable people."</p><h2 id="3-helps-get-rid-of-allergens-and-mold">3. Helps get rid of allergens and mold</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:2121px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gVBRx6jxRJ2VydcoVJTVMZ" name="Mattress mold cleaning.jpg" alt="Image shows black mold on a white mattress with blue disposable gloves" src="https://cdn.mos.cms.futurecdn.net/gVBRx6jxRJ2VydcoVJTVMZ-1920-80.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>Breathing releases moisture into the air, which, alongside condensation from warm air on cold windows, can lead to damp in your sealed room.</p><p>"This moisture can cause <a href="https://www.tomsguide.com/home/spot-mold-early-dont-ignore-these-5-early-warning-signs">black mold to grow around the windows</a> if it is not removed, which can pose a health risk," explains Dr. Patel. The moisture can also settle into the bed, potentially leading to <a href="https://www.tomsguide.com/how-to/how-to-remove-mold-from-a-mattress">mattress mold</a>.</p><p>“Pulling back your bed covers while the windows are open also helps to <a href="https://www.tomsguide.com/wellness/mattress/do-mattresses-need-to-breathe">air your bedding</a>, improving your sleep hygiene by allowing moisture and humidity caused by your body heat overnight to escape in the morning," Dr. Patel advises.</p><p>And it's not just mold that thrives in the damp. <a href="https://allergycentre.co.uk/ace-specialist/professor-george-du-toit/" target="_blank">Professor George Du Toit</a>, Co-Founding Director and Professor of Paediatric Allergy at the Allergy Centre of Excellence (ACE) explained that <a href="https://www.tomsguide.com/wellness/mattresses/how-to-get-rid-of-dust-mites-from-your-mattress-pillows-and-bedding">dust mites</a> also love humid conditions, while closed windows trap in dust mite allergens. </p><p>He advises keeping humidity levels low through the use of "<a href="https://www.tomsguide.com/home/home-appliances/best-dehumidifiers">dehumidifiers</a>, extractor fans, and adequate ventilation."</p><div data-model-name="GoveeLife Smart 50 Pint Dehumidifier,Midea Cube 20-Pint Smart WiFi Dehumidifier,Frigidaire White Energy Star 50-Pint Portable Dehumidifier,Probreeze 20L Dehumidifier,Dreo 512s smart dehumidifier" data-widget-type="multimodelreview" data-widget-title="Today's best dehumidifier deals..."></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 15 best Patagonia deals at REI — save up to 50% on my favorite fall finds ]]></title>
                                                                                                <dc:content><![CDATA[ <p>REI is notorious for offering impressive markdowns on the best outdoor brands — and Patagonia is no exception. Now that temperatures are starting to drop, investing in some high-quality outerwear is a must. And fortunately, <a href="https://www.rei.com/b/patagonia/f/scd-deals?" target="_blank" rel="nofollow">Patagonia's best-selling styles are up to 50% off</a>. </p><p>For instance, <a href="https://www.rei.com/product/143470/patagonia-houdini-jacket-mens" target="_blank" rel="nofollow">the popular Patagonia Houdini Jacket is down to just $82</a> and is the perfect layer for fall adventures. You can also grab <a href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow">the Patagonia Micro-D Half-Zip Fleece Pullover for just $44</a>. Plus, there's plenty more deals on rain jackets, hats, hoodies and fleeces from $21.</p><p>Patagonia doesn't come cheap, so you'll want to snap up these deals ASAP.  Below, I've rounded up my favorite REI styles. Keep scrolling to check out the deals that are actually worth shopping for fall. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.rei.com/f/scd-deals" target="_blank" rel="nofollow"><strong>shop REI's fall sale</strong></a></li><li><strong>Patagonia: </strong><a href="https://www.rei.com/b/patagonia/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&r=f%3Bb&sort=min-price" target="_blank" rel="nofollow"><strong>apparel/accessories from $15</strong></a></li><li><strong>Camping gear: </strong><a href="https://www.rei.com/c/camping-and-hiking/f/scd-deals" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li><li><strong>Vuori: </strong><a href="https://www.rei.com/b/vuori/f/scd-deals?" target="_blank" rel="nofollow"><strong>up to 40% off</strong></a></li><li><strong>Arc'teryx: </strong><a href="https://www.rei.com/b/arcteryx/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&sort=min-price&r=f%3Bb" target="_blank" rel="nofollow"><strong>apparel from $24</strong></a></li><li><strong>Columbia: </strong><a href="https://www.rei.com/b/columbia/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&sort=min-price&irclickid=3KjxOUTuLxyKWYwT3BUaGy3DUkp2c0Uto0pyw40" target="_blank" rel="nofollow"><strong>apparel from $14</strong></a></li><li><strong>Marmot: </strong><a href="https://www.rei.com/b/marmot/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&sort=min-price&r=f%3Bb" target="_blank" rel="nofollow"><strong>apparel from $15</strong></a></li><li><strong>The North Face: </strong><a href="https://www.rei.com/b/the-north-face/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&r=f%3Bb&sort=min-price" target="_blank" rel="nofollow"><strong>apparel from $16</strong></a></li><li><strong>Yeti: </strong><a href="https://www.rei.com/b/yeti/f/scd-deals?" target="_blank" rel="nofollow"><strong>water bottles from $17</strong></a></li><li><strong>Saucony: </strong><a href="https://www.rei.com/b/saucony/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&sort=min-price&r=f%3Bb" target="_blank" rel="nofollow"><strong>running gear from $46</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-top-patagonia-deals"><span>Top Patagonia Deals</span></h3><div class="product"><a data-dimension112="5739ce20-cf13-11f1-a7ce-574d3763f097" data-action="Deal Block" data-label="Coastal Cable Beanie" data-dimension48="Coastal Cable Beanie" data-dimension25="$21" href="https://www.rei.com/product/240304/patagonia-coastal-cable-beanie" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:932px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="aBHmT9EnHGHJTKCk7hooyT" name="patagonia coastal cable beanie" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aBHmT9EnHGHJTKCk7hooyT-1920-80.jpg" mos="" align="middle" fullscreen="" width="932" height="932" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Made with recycled wool and recycled nylon, the Patagonia Coastal Cable beanie is super-warm and super-fuzzy, perfect for winter and fall. There's even a recycled fleece headband to keep the cold out and the warm in. The green color is eye-catching enough to ensure your friends will never lose you on the slopes or in the city. <a class="view-deal button" href="https://www.rei.com/product/240304/patagonia-coastal-cable-beanie" target="_blank" rel="nofollow" data-dimension112="5739ce20-cf13-11f1-a7ce-574d3763f097" data-action="Deal Block" data-label="Coastal Cable Beanie" data-dimension48="Coastal Cable Beanie" data-dimension25="$21">View Deal</a></p></div><div class="product"><a data-dimension112="5739ce8e-cf13-11f1-8e1c-5335e032695f" data-action="Deal Block" data-label="Powder Town Headband" data-dimension48="Powder Town Headband" data-dimension25="$22" href="https://www.rei.com/product/240312/patagonia-powder-town-headband" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:932px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ekwiWeSPvjXJ3G4PTtqQXP" name="patagonia powder town headband" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ekwiWeSPvjXJ3G4PTtqQXP-1920-80.jpg" mos="" align="middle" fullscreen="" width="932" height="932" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Patagonia Powder Town Headband is designed to keep your ears warm on the slopes, without overheating the rest of you. It's also so bright that your friends will always be able to find you. This headband has a moisture-wicking recycled fleece lining to keep you dry and cozy. <a class="view-deal button" href="https://www.rei.com/product/240312/patagonia-powder-town-headband" target="_blank" rel="nofollow" data-dimension112="5739ce8e-cf13-11f1-8e1c-5335e032695f" data-action="Deal Block" data-label="Powder Town Headband" data-dimension48="Powder Town Headband" data-dimension25="$22">View Deal</a></p></div><div class="product"><a data-dimension112="5739cefc-cf13-11f1-bae6-3b754de32af0" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension48="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension25="$48" href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1576px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="nf39PweshXkywy2qiMnC8k" name="b28afb8f-ec50-4921-9346-b3269d66e19b" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nf39PweshXkywy2qiMnC8k-1920-80.jpg" mos="" align="middle" fullscreen="" width="1576" height="1576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739cefc-cf13-11f1-bae6-3b754de32af0" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension48="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension25="$48">Micro-D Half-Zip Fleece Pullover (Women's): was $99 now $48</a></strong><br>Right now, the beautiful Thin Ice colorway is down to $48 in REI’s mid-season deal. It’s still available in a handful of sizes. The <a href="https://www.rei.com/product/143319/patagonia-micro-d-fleece-pullover-mens%20" target="_blank" rel="nofollow">men’s Micro D Fleece Pullover is still full price at $79</a>, but REI members can get rewards. <a class="view-deal button" href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739cefc-cf13-11f1-bae6-3b754de32af0" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension48="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension25="$48">View Deal</a></p></div><div class="product"><a data-dimension112="5739cf56-cf13-11f1-8ab2-a5e2fc3975b6" data-action="Deal Block" data-label="Baggies Shorts (Men’s)" data-dimension48="Baggies Shorts (Men’s)" data-dimension25="$54" href="https://www.rei.com/product/242831/patagonia-baggies-5-shorts-mens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1504px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="JtXgyevXrT5SUBGhvhBYQF" name="patagonia baggies" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JtXgyevXrT5SUBGhvhBYQF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1504" height="1504" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/242831/patagonia-baggies-5-shorts-mens" target="_blank" rel="nofollow" data-dimension112="5739cf56-cf13-11f1-8ab2-a5e2fc3975b6" data-action="Deal Block" data-label="Baggies Shorts (Men’s)" data-dimension48="Baggies Shorts (Men’s)" data-dimension25="$54">Baggies Shorts (Men’s): was $69 now $54</a></strong><br>Summer may be long gone, but Patagonia's Baggie shorts are suitable for both inside and out of the water. And as the brand clears out its end-of-season styles, you can get these shorts for as low as $54.<a class="view-deal button" href="https://www.rei.com/product/242831/patagonia-baggies-5-shorts-mens" target="_blank" rel="nofollow" data-dimension112="5739cf56-cf13-11f1-8ab2-a5e2fc3975b6" data-action="Deal Block" data-label="Baggies Shorts (Men’s)" data-dimension48="Baggies Shorts (Men’s)" data-dimension25="$54">View Deal</a></p></div><div class="product"><a data-dimension112="5739cfba-cf13-11f1-aa7a-c5c42a5782ea" data-action="Deal Block" data-label="Outdoor Everyday Pants (Women's)" data-dimension48="Outdoor Everyday Pants (Women's)" data-dimension25="$68" href="https://www.rei.com/product/228412/patagonia-outdoor-everyday-pants-womens" 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:100.00%;"><img id="zoeCcCwPahdqAedoN2ztbX" name="pants" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zoeCcCwPahdqAedoN2ztbX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/228412/patagonia-outdoor-everyday-pants-womens" target="_blank" rel="nofollow" data-dimension112="5739cfba-cf13-11f1-aa7a-c5c42a5782ea" data-action="Deal Block" data-label="Outdoor Everyday Pants (Women's)" data-dimension48="Outdoor Everyday Pants (Women's)" data-dimension25="$68">Outdoor Everyday Pants (Women's): was $99 now $68</a></strong><br>Although they look like sweatpants, the Patagonia Outdoor Everyday Pants are ideal for hikes and outdoor activities. As they're wide-legged, they're super comfortable, and are even water-repellant. They're on sale in two different colors.<a class="view-deal button" href="https://www.rei.com/product/228412/patagonia-outdoor-everyday-pants-womens" target="_blank" rel="nofollow" data-dimension112="5739cfba-cf13-11f1-aa7a-c5c42a5782ea" data-action="Deal Block" data-label="Outdoor Everyday Pants (Women's)" data-dimension48="Outdoor Everyday Pants (Women's)" data-dimension25="$68">View Deal</a></p></div><div class="product"><a data-dimension112="5739d01e-cf13-11f1-b67b-a7f8d31541ed" data-action="Deal Block" data-label="P-6 Logo Uprisal Hoody (Unisex)" data-dimension48="P-6 Logo Uprisal Hoody (Unisex)" data-dimension25="$71" href="https://www.rei.com/product/191626/patagonia-p-6-logo-uprisal-hoody" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1707px;"><p class="vanilla-image-block" style="padding-top:117.16%;"><img id="AxhSkgAYP5VCo4UWcfgBNi" name="Patagonia hoodie" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/AxhSkgAYP5VCo4UWcfgBNi-1920-80.jpg" mos="" align="middle" fullscreen="" width="1707" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/191626/patagonia-p-6-logo-uprisal-hoody" target="_blank" rel="nofollow" data-dimension112="5739d01e-cf13-11f1-b67b-a7f8d31541ed" data-action="Deal Block" data-label="P-6 Logo Uprisal Hoody (Unisex)" data-dimension48="P-6 Logo Uprisal Hoody (Unisex)" data-dimension25="$71">P-6 Logo Uprisal Hoody (Unisex): was $95 now $71</a></strong><br>This is such a classic versatile hoody, I can't quite believe it's discounted in three colors. This is the kind of sweater that never goes out of style. This hoody is made from 30 plastic bottles, so you know you're wearing something that is benefitting the planet.  <a class="view-deal button" href="https://www.rei.com/product/191626/patagonia-p-6-logo-uprisal-hoody" target="_blank" rel="nofollow" data-dimension112="5739d01e-cf13-11f1-b67b-a7f8d31541ed" data-action="Deal Block" data-label="P-6 Logo Uprisal Hoody (Unisex)" data-dimension48="P-6 Logo Uprisal Hoody (Unisex)" data-dimension25="$71">View Deal</a></p></div><div class="product"><a data-dimension112="5739d0d2-cf13-11f1-a651-8f12914c5637" data-action="Deal Block" data-label="Black Hole Pack 25L" data-dimension48="Black Hole Pack 25L" data-dimension25="$76" href="https://www.rei.com/product/221915/patagonia-black-hole-pack-25-l" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="Ajyo94pRBxZGziA2SbfTtP" name="patagonia black hole yellow" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Ajyo94pRBxZGziA2SbfTtP-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/221915/patagonia-black-hole-pack-25-l" target="_blank" rel="nofollow" data-dimension112="5739d0d2-cf13-11f1-a651-8f12914c5637" data-action="Deal Block" data-label="Black Hole Pack 25L" data-dimension48="Black Hole Pack 25L" data-dimension25="$76">Black Hole Pack 25L: was $149 now $76</a></strong><br>The Black Hole Pack is Patagonia's iconic backpack for a reason. This backpack does what it says on the tin — it fits way more stuff than you'd expect. It's on sale for just $76 right now, which is a massive $73 off. Only one color is discounted now, so I'd be quick if you're on the fence. <a class="view-deal button" href="https://www.rei.com/product/221915/patagonia-black-hole-pack-25-l" target="_blank" rel="nofollow" data-dimension112="5739d0d2-cf13-11f1-a651-8f12914c5637" data-action="Deal Block" data-label="Black Hole Pack 25L" data-dimension48="Black Hole Pack 25L" data-dimension25="$76">View Deal</a></p></div><div class="product"><a data-dimension112="5739d12c-cf13-11f1-a5c6-fb7b9b7d41d1" data-action="Deal Block" data-label="Houdini Jacket (Men's)" data-dimension48="Houdini Jacket (Men's)" data-dimension25="$82" href="https://www.rei.com/product/143470/patagonia-houdini-jacket-mens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:588px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="8GQeT4DV45yR8hUW8QhMEC" name="REI Patagonia jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8GQeT4DV45yR8hUW8QhMEC-1920-80.jpg" mos="" align="middle" fullscreen="" width="588" height="588" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/143470/patagonia-houdini-jacket-mens" target="_blank" rel="nofollow" data-dimension112="5739d12c-cf13-11f1-a5c6-fb7b9b7d41d1" data-action="Deal Block" data-label="Houdini Jacket (Men's)" data-dimension48="Houdini Jacket (Men's)" data-dimension25="$82">Houdini Jacket (Men's): was $109 now $82</a></strong><br>Lightweight and compact enough to stuff into a back pocket, yet warm and weather-resistant enough to keep you dry and comfy in moderate rain and chilliness, the Patagonia Houdini really lives up to its magical name.  <a class="view-deal button" href="https://www.rei.com/product/143470/patagonia-houdini-jacket-mens" target="_blank" rel="nofollow" data-dimension112="5739d12c-cf13-11f1-a5c6-fb7b9b7d41d1" data-action="Deal Block" data-label="Houdini Jacket (Men's)" data-dimension48="Houdini Jacket (Men's)" data-dimension25="$82">View Deal</a></p></div><div class="product"><a data-dimension112="5739d190-cf13-11f1-8edf-658df9c91b15" data-action="Deal Block" data-label="Snap-T Fleece Pullover" data-dimension48="Snap-T Fleece Pullover" data-dimension25="$82" href="https://www.rei.com/product/252162/patagonia-lightweight-synchilla-snap-t-fleece-pullover-mens?color=ELLWOOD%2520GREEN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:932px;"><p class="vanilla-image-block" style="padding-top:102.25%;"><img id="3pubarQgzemrCrjiaDFxVf" name="Screenshot 2026-06-15 at 9.10.50 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3pubarQgzemrCrjiaDFxVf-1920-80.png" mos="" align="middle" fullscreen="" width="932" height="953" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/252162/patagonia-lightweight-synchilla-snap-t-fleece-pullover-mens?color=ELLWOOD%2520GREEN" target="_blank" rel="nofollow" data-dimension112="5739d190-cf13-11f1-8edf-658df9c91b15" data-action="Deal Block" data-label="Snap-T Fleece Pullover" data-dimension48="Snap-T Fleece Pullover" data-dimension25="$82">Snap-T Fleece Pullover: was $139 now $82</a></strong><br>Every wardrobe should have one of these classic fleece pullovers. With two stylish colorways to choose from and plenty of sizes still available, the Patagonia Synchilla Snap-T Fleece is the ultimate lounge-around-the-house garment for cooler temps. <a class="view-deal button" href="https://www.rei.com/product/252162/patagonia-lightweight-synchilla-snap-t-fleece-pullover-mens?color=ELLWOOD%2520GREEN" target="_blank" rel="nofollow" data-dimension112="5739d190-cf13-11f1-8edf-658df9c91b15" data-action="Deal Block" data-label="Snap-T Fleece Pullover" data-dimension48="Snap-T Fleece Pullover" data-dimension25="$82">View Deal</a></p></div><div class="product"><a data-dimension112="5739d1ea-cf13-11f1-8038-3d9c96b33bf6" data-action="Deal Block" data-label="Ahnya Pullover (Women's)" data-dimension48="Ahnya Pullover (Women's)" data-dimension25="$93" href="https://www.rei.com/product/250042/patagonia-ahnya-full-zip-hoody-womens" 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="8Ja4UguKzZauzQ2r3qNtGm" name="patagonia" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8Ja4UguKzZauzQ2r3qNtGm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/250042/patagonia-ahnya-full-zip-hoody-womens" target="_blank" rel="nofollow" data-dimension112="5739d1ea-cf13-11f1-8038-3d9c96b33bf6" data-action="Deal Block" data-label="Ahnya Pullover (Women's)" data-dimension48="Ahnya Pullover (Women's)" data-dimension25="$93">Ahnya Pullover (Women's): was $135 now $93</a></strong><br>Nothing says fall apparel like a lightweight pullover. The sweatshirt is made with Regenerative Organic Certified cotton and recycled polyester fleece and spandex, with front pockets and rib-knit cuffs. It's perfect for throwing over a tee or wearing under a jacket.<a class="view-deal button" href="https://www.rei.com/product/250042/patagonia-ahnya-full-zip-hoody-womens" target="_blank" rel="nofollow" data-dimension112="5739d1ea-cf13-11f1-8038-3d9c96b33bf6" data-action="Deal Block" data-label="Ahnya Pullover (Women's)" data-dimension48="Ahnya Pullover (Women's)" data-dimension25="$93">View Deal</a></p></div><div class="product"><a data-dimension112="5739d276-cf13-11f1-ab19-a39159ec7544" data-action="Deal Block" data-label="Houdini Half-zip" data-dimension48="Houdini Half-zip" data-dimension25="$100" href="https://www.rei.com/product/228564/patagonia-houdini-stash-half-zip-jacket-mens?color=CASCADE%2520GREEN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1090px;"><p class="vanilla-image-block" style="padding-top:112.75%;"><img id="Ae9C3N28VXVi824kshL69a" name="Screenshot 2026-06-15 at 9.10.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Ae9C3N28VXVi824kshL69a-1920-80.png" mos="" align="middle" fullscreen="" width="1090" height="1229" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Patagonia Houdini Half-Zip is nothing short of pure magic. This back-pocket-packable pull-over weighs about as much as a deck of playing cards, yet offers seriously solid protection from the rain, wind and chill.<a class="view-deal button" href="https://www.rei.com/product/228564/patagonia-houdini-stash-half-zip-jacket-mens?color=CASCADE%2520GREEN" target="_blank" rel="nofollow" data-dimension112="5739d276-cf13-11f1-ab19-a39159ec7544" data-action="Deal Block" data-label="Houdini Half-zip" data-dimension48="Houdini Half-zip" data-dimension25="$100">View Deal</a></p></div><div class="product"><a data-dimension112="5739d2d0-cf13-11f1-921f-bd7957933c9f" data-action="Deal Block" data-label="R1 Pullover - Women's" data-dimension48="R1 Pullover - Women's" data-dimension25="$107" href="https://www.rei.com/product/242323/patagonia-r1-pullover-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bre5ZuSFLvwfm5qxrkvwTm" name="patagonia r1 pullover" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bre5ZuSFLvwfm5qxrkvwTm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/242323/patagonia-r1-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739d2d0-cf13-11f1-921f-bd7957933c9f" data-action="Deal Block" data-label="R1 Pullover - Women's" data-dimension48="R1 Pullover - Women's" data-dimension25="$107">R1 Pullover - Women's: was $155 now $107</a></strong><br>The Patagonia R1 Pullover is a midlayer, meaning it's intended to be worn between a thermal base layer and an outer waterproof or windproof jacket like the Patagonia Houdini. <a class="view-deal button" href="https://www.rei.com/product/242323/patagonia-r1-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739d2d0-cf13-11f1-921f-bd7957933c9f" data-action="Deal Block" data-label="R1 Pullover - Women's" data-dimension48="R1 Pullover - Women's" data-dimension25="$107">View Deal</a></p></div><div class="product"><a data-dimension112="5739d334-cf13-11f1-95a9-756182c4d48a" data-action="Deal Block" data-label="Daily Snap-T Pullover - Women's" data-dimension48="Daily Snap-T Pullover - Women's" data-dimension25="$109" href="https://www.rei.com/product/C12816/patagonia-daily-snap-t-pullover-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1664px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="So92hKGkLN6sjJXpmCtawA" name="patagonia snap-t daily pullover" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/So92hKGkLN6sjJXpmCtawA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1664" height="1664" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C12816/patagonia-daily-snap-t-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739d334-cf13-11f1-95a9-756182c4d48a" data-action="Deal Block" data-label="Daily Snap-T Pullover - Women's" data-dimension48="Daily Snap-T Pullover - Women's" data-dimension25="$109">Daily Snap-T Pullover - Women's: was $169 now $109</a></strong><br>This fleece is perfect to wear at the campsite during chilly evenings, or on early morning trails. The Daily Snap-T Pullover is made from 100% regenerative organic cotton as well.<a class="view-deal button" href="https://www.rei.com/product/C12816/patagonia-daily-snap-t-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739d334-cf13-11f1-95a9-756182c4d48a" data-action="Deal Block" data-label="Daily Snap-T Pullover - Women's" data-dimension48="Daily Snap-T Pullover - Women's" data-dimension25="$109">View Deal</a></p></div><div class="product"><a data-dimension112="5739d38e-cf13-11f1-b911-d5fb61715add" data-action="Deal Block" data-label="Daily Snap-T Pullover (Men's)" data-dimension48="Daily Snap-T Pullover (Men's)" data-dimension25="$124" href="https://www.rei.com/product/C01345/patagonia-daily-snap-t-pullover-mens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1560px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="WGXNCXSCXiBba8uzoeFYnS" name="Patagonia Snap T" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/WGXNCXSCXiBba8uzoeFYnS-1920-80.jpg" mos="" align="middle" fullscreen="" width="1560" height="1560" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C01345/patagonia-daily-snap-t-pullover-mens" target="_blank" rel="nofollow" data-dimension112="5739d38e-cf13-11f1-b911-d5fb61715add" data-action="Deal Block" data-label="Daily Snap-T Pullover (Men's)" data-dimension48="Daily Snap-T Pullover (Men's)" data-dimension25="$124">Daily Snap-T Pullover (Men's): was $179 now $124</a></strong><br>This is the same as the deal listed above, except it's the men's version. It's available in nearly every single size in three different colors, so you'll be able to find your perfect fit. <a class="view-deal button" href="https://www.rei.com/product/C01345/patagonia-daily-snap-t-pullover-mens" target="_blank" rel="nofollow" data-dimension112="5739d38e-cf13-11f1-b911-d5fb61715add" data-action="Deal Block" data-label="Daily Snap-T Pullover (Men's)" data-dimension48="Daily Snap-T Pullover (Men's)" data-dimension25="$124">View Deal</a></p></div><div class="product"><a data-dimension112="5739d3f2-cf13-11f1-8c61-9da4a4ad59f0" data-action="Deal Block" data-label="Nano-Air Ultralight Hoody (Women's)" data-dimension48="Nano-Air Ultralight Hoody (Women's)" data-dimension25="$161" href="https://www.rei.com/product/C09325/patagonia-nano-air-ultralight-full-zip-hoody-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1608px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="PqgeChqQKgNDQGpRCoXDEh" name="Patagonia deals" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PqgeChqQKgNDQGpRCoXDEh-1920-80.jpg" mos="" align="middle" fullscreen="" width="1608" height="1608" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C09325/patagonia-nano-air-ultralight-full-zip-hoody-womens" target="_blank" rel="nofollow" data-dimension112="5739d3f2-cf13-11f1-8c61-9da4a4ad59f0" data-action="Deal Block" data-label="Nano-Air Ultralight Hoody (Women's)" data-dimension48="Nano-Air Ultralight Hoody (Women's)" data-dimension25="$161">Nano-Air Ultralight Hoody (Women's): was $249 now $161</a></strong><br>The Nano-Air Ultralight is one of the <a href="https://www.tomsguide.com/wellness/fitness/patagonia-nano-air-ultralight-review-outrageous-comfort-doesnt-come-cheap">best jackets we’ve ever tested </a>and a go-to in our Fitness Writer's daily rotation thanks to its use of super-soft and breathable materials with easy-roll-up sleeves and a comfortable, slightly fitted design. It’s also rarely on sale for as much as 35% off. <a class="view-deal button" href="https://www.rei.com/product/C09325/patagonia-nano-air-ultralight-full-zip-hoody-womens" target="_blank" rel="nofollow" data-dimension112="5739d3f2-cf13-11f1-8c61-9da4a4ad59f0" data-action="Deal Block" data-label="Nano-Air Ultralight Hoody (Women's)" data-dimension48="Nano-Air Ultralight Hoody (Women's)" data-dimension25="$161">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/15-best-patagonia-deals-at-rei-save-up-to-50-percent-on-my-favorite-fall-finds</link>
                                                                            <description>
                            <![CDATA[ REI just slashed prices on Patagonia gear. Save up to 50% on my favorite fall styles. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">m8M9EYXqERYR3VNRRSAjXH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/YcxLyCtwMkoWmrjSGrLKcV-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 08:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Olivia Halevy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/YAg7Fmh9dGKbg3hULBMWiU-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Olivia is a Deals Writer at Tom’s Guide. She loves all things lifestyle, shopping and sourcing the best deals from some of the top brands, retailers and websites around. From fashion and beauty to smart home and tech, she has an eye for finding practical, stylish, and reasonably-priced items that help make life simpler (and a little more aesthetically-pleasing).&amp;nbsp;Olivia has over five years of experience writing lifestyle, commerce, and branded content for &lt;a href=&quot;http://patch.com/&quot;&gt;Patch.com&lt;/a&gt;. She&#039;s covered major shopping holidays like Amazon Prime Day, Black Friday and Cyber Monday. In her free time, she enjoys trying out new exercise classes, binge-watching the latest viral TV shows, cooking, spending time with family and taking long walks with her dog, Gus.&amp;nbsp;&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/YcxLyCtwMkoWmrjSGrLKcV-1920-80.jpg">
                                                            <media:credit><![CDATA[REI / edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[REI deals]]></media:description>                                                            <media:text><![CDATA[REI deals]]></media:text>
                                <media:title type="plain"><![CDATA[REI deals]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/YcxLyCtwMkoWmrjSGrLKcV-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>REI is notorious for offering impressive markdowns on the best outdoor brands — and Patagonia is no exception. Now that temperatures are starting to drop, investing in some high-quality outerwear is a must. And fortunately, <a href="https://www.rei.com/b/patagonia/f/scd-deals?" target="_blank" rel="nofollow">Patagonia's best-selling styles are up to 50% off</a>. </p><p>For instance, <a href="https://www.rei.com/product/143470/patagonia-houdini-jacket-mens" target="_blank" rel="nofollow">the popular Patagonia Houdini Jacket is down to just $82</a> and is the perfect layer for fall adventures. You can also grab <a href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow">the Patagonia Micro-D Half-Zip Fleece Pullover for just $44</a>. Plus, there's plenty more deals on rain jackets, hats, hoodies and fleeces from $21.</p><p>Patagonia doesn't come cheap, so you'll want to snap up these deals ASAP.  Below, I've rounded up my favorite REI styles. Keep scrolling to check out the deals that are actually worth shopping for fall. </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.rei.com/f/scd-deals" target="_blank" rel="nofollow"><strong>shop REI's fall sale</strong></a></li><li><strong>Patagonia: </strong><a href="https://www.rei.com/b/patagonia/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&r=f%3Bb&sort=min-price" target="_blank" rel="nofollow"><strong>apparel/accessories from $15</strong></a></li><li><strong>Camping gear: </strong><a href="https://www.rei.com/c/camping-and-hiking/f/scd-deals" target="_blank" rel="nofollow"><strong>up to 30% off</strong></a></li><li><strong>Vuori: </strong><a href="https://www.rei.com/b/vuori/f/scd-deals?" target="_blank" rel="nofollow"><strong>up to 40% off</strong></a></li><li><strong>Arc'teryx: </strong><a href="https://www.rei.com/b/arcteryx/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&sort=min-price&r=f%3Bb" target="_blank" rel="nofollow"><strong>apparel from $24</strong></a></li><li><strong>Columbia: </strong><a href="https://www.rei.com/b/columbia/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&sort=min-price&irclickid=3KjxOUTuLxyKWYwT3BUaGy3DUkp2c0Uto0pyw40" target="_blank" rel="nofollow"><strong>apparel from $14</strong></a></li><li><strong>Marmot: </strong><a href="https://www.rei.com/b/marmot/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&sort=min-price&r=f%3Bb" target="_blank" rel="nofollow"><strong>apparel from $15</strong></a></li><li><strong>The North Face: </strong><a href="https://www.rei.com/b/the-north-face/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&r=f%3Bb&sort=min-price" target="_blank" rel="nofollow"><strong>apparel from $16</strong></a></li><li><strong>Yeti: </strong><a href="https://www.rei.com/b/yeti/f/scd-deals?" target="_blank" rel="nofollow"><strong>water bottles from $17</strong></a></li><li><strong>Saucony: </strong><a href="https://www.rei.com/b/saucony/f/scd-deals?ir=deals%3ASee+All+Deals&pagesize=90&sort=min-price&r=f%3Bb" target="_blank" rel="nofollow"><strong>running gear from $46</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-top-patagonia-deals"><span>Top Patagonia Deals</span></h3><div class="product"><a data-dimension112="5739ce20-cf13-11f1-a7ce-574d3763f097" data-action="Deal Block" data-label="Coastal Cable Beanie" data-dimension48="Coastal Cable Beanie" data-dimension25="$21" href="https://www.rei.com/product/240304/patagonia-coastal-cable-beanie" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:932px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="aBHmT9EnHGHJTKCk7hooyT" name="patagonia coastal cable beanie" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aBHmT9EnHGHJTKCk7hooyT-1920-80.jpg" mos="" align="middle" fullscreen="" width="932" height="932" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Made with recycled wool and recycled nylon, the Patagonia Coastal Cable beanie is super-warm and super-fuzzy, perfect for winter and fall. There's even a recycled fleece headband to keep the cold out and the warm in. The green color is eye-catching enough to ensure your friends will never lose you on the slopes or in the city. <a class="view-deal button" href="https://www.rei.com/product/240304/patagonia-coastal-cable-beanie" target="_blank" rel="nofollow" data-dimension112="5739ce20-cf13-11f1-a7ce-574d3763f097" data-action="Deal Block" data-label="Coastal Cable Beanie" data-dimension48="Coastal Cable Beanie" data-dimension25="$21">View Deal</a></p></div><div class="product"><a data-dimension112="5739ce8e-cf13-11f1-8e1c-5335e032695f" data-action="Deal Block" data-label="Powder Town Headband" data-dimension48="Powder Town Headband" data-dimension25="$22" href="https://www.rei.com/product/240312/patagonia-powder-town-headband" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:932px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ekwiWeSPvjXJ3G4PTtqQXP" name="patagonia powder town headband" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ekwiWeSPvjXJ3G4PTtqQXP-1920-80.jpg" mos="" align="middle" fullscreen="" width="932" height="932" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Patagonia Powder Town Headband is designed to keep your ears warm on the slopes, without overheating the rest of you. It's also so bright that your friends will always be able to find you. This headband has a moisture-wicking recycled fleece lining to keep you dry and cozy. <a class="view-deal button" href="https://www.rei.com/product/240312/patagonia-powder-town-headband" target="_blank" rel="nofollow" data-dimension112="5739ce8e-cf13-11f1-8e1c-5335e032695f" data-action="Deal Block" data-label="Powder Town Headband" data-dimension48="Powder Town Headband" data-dimension25="$22">View Deal</a></p></div><div class="product"><a data-dimension112="5739cefc-cf13-11f1-bae6-3b754de32af0" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension48="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension25="$48" href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1576px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="nf39PweshXkywy2qiMnC8k" name="b28afb8f-ec50-4921-9346-b3269d66e19b" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nf39PweshXkywy2qiMnC8k-1920-80.jpg" mos="" align="middle" fullscreen="" width="1576" height="1576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739cefc-cf13-11f1-bae6-3b754de32af0" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension48="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension25="$48">Micro-D Half-Zip Fleece Pullover (Women's): was $99 now $48</a></strong><br>Right now, the beautiful Thin Ice colorway is down to $48 in REI’s mid-season deal. It’s still available in a handful of sizes. The <a href="https://www.rei.com/product/143319/patagonia-micro-d-fleece-pullover-mens%20" target="_blank" rel="nofollow">men’s Micro D Fleece Pullover is still full price at $79</a>, but REI members can get rewards. <a class="view-deal button" href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739cefc-cf13-11f1-bae6-3b754de32af0" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension48="Micro-D Half-Zip Fleece Pullover (Women's)" data-dimension25="$48">View Deal</a></p></div><div class="product"><a data-dimension112="5739cf56-cf13-11f1-8ab2-a5e2fc3975b6" data-action="Deal Block" data-label="Baggies Shorts (Men’s)" data-dimension48="Baggies Shorts (Men’s)" data-dimension25="$54" href="https://www.rei.com/product/242831/patagonia-baggies-5-shorts-mens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1504px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="JtXgyevXrT5SUBGhvhBYQF" name="patagonia baggies" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JtXgyevXrT5SUBGhvhBYQF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1504" height="1504" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/242831/patagonia-baggies-5-shorts-mens" target="_blank" rel="nofollow" data-dimension112="5739cf56-cf13-11f1-8ab2-a5e2fc3975b6" data-action="Deal Block" data-label="Baggies Shorts (Men’s)" data-dimension48="Baggies Shorts (Men’s)" data-dimension25="$54">Baggies Shorts (Men’s): was $69 now $54</a></strong><br>Summer may be long gone, but Patagonia's Baggie shorts are suitable for both inside and out of the water. And as the brand clears out its end-of-season styles, you can get these shorts for as low as $54.<a class="view-deal button" href="https://www.rei.com/product/242831/patagonia-baggies-5-shorts-mens" target="_blank" rel="nofollow" data-dimension112="5739cf56-cf13-11f1-8ab2-a5e2fc3975b6" data-action="Deal Block" data-label="Baggies Shorts (Men’s)" data-dimension48="Baggies Shorts (Men’s)" data-dimension25="$54">View Deal</a></p></div><div class="product"><a data-dimension112="5739cfba-cf13-11f1-aa7a-c5c42a5782ea" data-action="Deal Block" data-label="Outdoor Everyday Pants (Women's)" data-dimension48="Outdoor Everyday Pants (Women's)" data-dimension25="$68" href="https://www.rei.com/product/228412/patagonia-outdoor-everyday-pants-womens" 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:100.00%;"><img id="zoeCcCwPahdqAedoN2ztbX" name="pants" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zoeCcCwPahdqAedoN2ztbX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/228412/patagonia-outdoor-everyday-pants-womens" target="_blank" rel="nofollow" data-dimension112="5739cfba-cf13-11f1-aa7a-c5c42a5782ea" data-action="Deal Block" data-label="Outdoor Everyday Pants (Women's)" data-dimension48="Outdoor Everyday Pants (Women's)" data-dimension25="$68">Outdoor Everyday Pants (Women's): was $99 now $68</a></strong><br>Although they look like sweatpants, the Patagonia Outdoor Everyday Pants are ideal for hikes and outdoor activities. As they're wide-legged, they're super comfortable, and are even water-repellant. They're on sale in two different colors.<a class="view-deal button" href="https://www.rei.com/product/228412/patagonia-outdoor-everyday-pants-womens" target="_blank" rel="nofollow" data-dimension112="5739cfba-cf13-11f1-aa7a-c5c42a5782ea" data-action="Deal Block" data-label="Outdoor Everyday Pants (Women's)" data-dimension48="Outdoor Everyday Pants (Women's)" data-dimension25="$68">View Deal</a></p></div><div class="product"><a data-dimension112="5739d01e-cf13-11f1-b67b-a7f8d31541ed" data-action="Deal Block" data-label="P-6 Logo Uprisal Hoody (Unisex)" data-dimension48="P-6 Logo Uprisal Hoody (Unisex)" data-dimension25="$71" href="https://www.rei.com/product/191626/patagonia-p-6-logo-uprisal-hoody" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1707px;"><p class="vanilla-image-block" style="padding-top:117.16%;"><img id="AxhSkgAYP5VCo4UWcfgBNi" name="Patagonia hoodie" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/AxhSkgAYP5VCo4UWcfgBNi-1920-80.jpg" mos="" align="middle" fullscreen="" width="1707" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/191626/patagonia-p-6-logo-uprisal-hoody" target="_blank" rel="nofollow" data-dimension112="5739d01e-cf13-11f1-b67b-a7f8d31541ed" data-action="Deal Block" data-label="P-6 Logo Uprisal Hoody (Unisex)" data-dimension48="P-6 Logo Uprisal Hoody (Unisex)" data-dimension25="$71">P-6 Logo Uprisal Hoody (Unisex): was $95 now $71</a></strong><br>This is such a classic versatile hoody, I can't quite believe it's discounted in three colors. This is the kind of sweater that never goes out of style. This hoody is made from 30 plastic bottles, so you know you're wearing something that is benefitting the planet.  <a class="view-deal button" href="https://www.rei.com/product/191626/patagonia-p-6-logo-uprisal-hoody" target="_blank" rel="nofollow" data-dimension112="5739d01e-cf13-11f1-b67b-a7f8d31541ed" data-action="Deal Block" data-label="P-6 Logo Uprisal Hoody (Unisex)" data-dimension48="P-6 Logo Uprisal Hoody (Unisex)" data-dimension25="$71">View Deal</a></p></div><div class="product"><a data-dimension112="5739d0d2-cf13-11f1-a651-8f12914c5637" data-action="Deal Block" data-label="Black Hole Pack 25L" data-dimension48="Black Hole Pack 25L" data-dimension25="$76" href="https://www.rei.com/product/221915/patagonia-black-hole-pack-25-l" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="Ajyo94pRBxZGziA2SbfTtP" name="patagonia black hole yellow" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Ajyo94pRBxZGziA2SbfTtP-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/221915/patagonia-black-hole-pack-25-l" target="_blank" rel="nofollow" data-dimension112="5739d0d2-cf13-11f1-a651-8f12914c5637" data-action="Deal Block" data-label="Black Hole Pack 25L" data-dimension48="Black Hole Pack 25L" data-dimension25="$76">Black Hole Pack 25L: was $149 now $76</a></strong><br>The Black Hole Pack is Patagonia's iconic backpack for a reason. This backpack does what it says on the tin — it fits way more stuff than you'd expect. It's on sale for just $76 right now, which is a massive $73 off. Only one color is discounted now, so I'd be quick if you're on the fence. <a class="view-deal button" href="https://www.rei.com/product/221915/patagonia-black-hole-pack-25-l" target="_blank" rel="nofollow" data-dimension112="5739d0d2-cf13-11f1-a651-8f12914c5637" data-action="Deal Block" data-label="Black Hole Pack 25L" data-dimension48="Black Hole Pack 25L" data-dimension25="$76">View Deal</a></p></div><div class="product"><a data-dimension112="5739d12c-cf13-11f1-a5c6-fb7b9b7d41d1" data-action="Deal Block" data-label="Houdini Jacket (Men's)" data-dimension48="Houdini Jacket (Men's)" data-dimension25="$82" href="https://www.rei.com/product/143470/patagonia-houdini-jacket-mens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:588px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="8GQeT4DV45yR8hUW8QhMEC" name="REI Patagonia jacket" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8GQeT4DV45yR8hUW8QhMEC-1920-80.jpg" mos="" align="middle" fullscreen="" width="588" height="588" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/143470/patagonia-houdini-jacket-mens" target="_blank" rel="nofollow" data-dimension112="5739d12c-cf13-11f1-a5c6-fb7b9b7d41d1" data-action="Deal Block" data-label="Houdini Jacket (Men's)" data-dimension48="Houdini Jacket (Men's)" data-dimension25="$82">Houdini Jacket (Men's): was $109 now $82</a></strong><br>Lightweight and compact enough to stuff into a back pocket, yet warm and weather-resistant enough to keep you dry and comfy in moderate rain and chilliness, the Patagonia Houdini really lives up to its magical name.  <a class="view-deal button" href="https://www.rei.com/product/143470/patagonia-houdini-jacket-mens" target="_blank" rel="nofollow" data-dimension112="5739d12c-cf13-11f1-a5c6-fb7b9b7d41d1" data-action="Deal Block" data-label="Houdini Jacket (Men's)" data-dimension48="Houdini Jacket (Men's)" data-dimension25="$82">View Deal</a></p></div><div class="product"><a data-dimension112="5739d190-cf13-11f1-8edf-658df9c91b15" data-action="Deal Block" data-label="Snap-T Fleece Pullover" data-dimension48="Snap-T Fleece Pullover" data-dimension25="$82" href="https://www.rei.com/product/252162/patagonia-lightweight-synchilla-snap-t-fleece-pullover-mens?color=ELLWOOD%2520GREEN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:932px;"><p class="vanilla-image-block" style="padding-top:102.25%;"><img id="3pubarQgzemrCrjiaDFxVf" name="Screenshot 2026-06-15 at 9.10.50 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3pubarQgzemrCrjiaDFxVf-1920-80.png" mos="" align="middle" fullscreen="" width="932" height="953" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/252162/patagonia-lightweight-synchilla-snap-t-fleece-pullover-mens?color=ELLWOOD%2520GREEN" target="_blank" rel="nofollow" data-dimension112="5739d190-cf13-11f1-8edf-658df9c91b15" data-action="Deal Block" data-label="Snap-T Fleece Pullover" data-dimension48="Snap-T Fleece Pullover" data-dimension25="$82">Snap-T Fleece Pullover: was $139 now $82</a></strong><br>Every wardrobe should have one of these classic fleece pullovers. With two stylish colorways to choose from and plenty of sizes still available, the Patagonia Synchilla Snap-T Fleece is the ultimate lounge-around-the-house garment for cooler temps. <a class="view-deal button" href="https://www.rei.com/product/252162/patagonia-lightweight-synchilla-snap-t-fleece-pullover-mens?color=ELLWOOD%2520GREEN" target="_blank" rel="nofollow" data-dimension112="5739d190-cf13-11f1-8edf-658df9c91b15" data-action="Deal Block" data-label="Snap-T Fleece Pullover" data-dimension48="Snap-T Fleece Pullover" data-dimension25="$82">View Deal</a></p></div><div class="product"><a data-dimension112="5739d1ea-cf13-11f1-8038-3d9c96b33bf6" data-action="Deal Block" data-label="Ahnya Pullover (Women's)" data-dimension48="Ahnya Pullover (Women's)" data-dimension25="$93" href="https://www.rei.com/product/250042/patagonia-ahnya-full-zip-hoody-womens" 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="8Ja4UguKzZauzQ2r3qNtGm" name="patagonia" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8Ja4UguKzZauzQ2r3qNtGm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/250042/patagonia-ahnya-full-zip-hoody-womens" target="_blank" rel="nofollow" data-dimension112="5739d1ea-cf13-11f1-8038-3d9c96b33bf6" data-action="Deal Block" data-label="Ahnya Pullover (Women's)" data-dimension48="Ahnya Pullover (Women's)" data-dimension25="$93">Ahnya Pullover (Women's): was $135 now $93</a></strong><br>Nothing says fall apparel like a lightweight pullover. The sweatshirt is made with Regenerative Organic Certified cotton and recycled polyester fleece and spandex, with front pockets and rib-knit cuffs. It's perfect for throwing over a tee or wearing under a jacket.<a class="view-deal button" href="https://www.rei.com/product/250042/patagonia-ahnya-full-zip-hoody-womens" target="_blank" rel="nofollow" data-dimension112="5739d1ea-cf13-11f1-8038-3d9c96b33bf6" data-action="Deal Block" data-label="Ahnya Pullover (Women's)" data-dimension48="Ahnya Pullover (Women's)" data-dimension25="$93">View Deal</a></p></div><div class="product"><a data-dimension112="5739d276-cf13-11f1-ab19-a39159ec7544" data-action="Deal Block" data-label="Houdini Half-zip" data-dimension48="Houdini Half-zip" data-dimension25="$100" href="https://www.rei.com/product/228564/patagonia-houdini-stash-half-zip-jacket-mens?color=CASCADE%2520GREEN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1090px;"><p class="vanilla-image-block" style="padding-top:112.75%;"><img id="Ae9C3N28VXVi824kshL69a" name="Screenshot 2026-06-15 at 9.10.35 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Ae9C3N28VXVi824kshL69a-1920-80.png" mos="" align="middle" fullscreen="" width="1090" height="1229" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Patagonia Houdini Half-Zip is nothing short of pure magic. This back-pocket-packable pull-over weighs about as much as a deck of playing cards, yet offers seriously solid protection from the rain, wind and chill.<a class="view-deal button" href="https://www.rei.com/product/228564/patagonia-houdini-stash-half-zip-jacket-mens?color=CASCADE%2520GREEN" target="_blank" rel="nofollow" data-dimension112="5739d276-cf13-11f1-ab19-a39159ec7544" data-action="Deal Block" data-label="Houdini Half-zip" data-dimension48="Houdini Half-zip" data-dimension25="$100">View Deal</a></p></div><div class="product"><a data-dimension112="5739d2d0-cf13-11f1-921f-bd7957933c9f" data-action="Deal Block" data-label="R1 Pullover - Women's" data-dimension48="R1 Pullover - Women's" data-dimension25="$107" href="https://www.rei.com/product/242323/patagonia-r1-pullover-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="bre5ZuSFLvwfm5qxrkvwTm" name="patagonia r1 pullover" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/bre5ZuSFLvwfm5qxrkvwTm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/242323/patagonia-r1-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739d2d0-cf13-11f1-921f-bd7957933c9f" data-action="Deal Block" data-label="R1 Pullover - Women's" data-dimension48="R1 Pullover - Women's" data-dimension25="$107">R1 Pullover - Women's: was $155 now $107</a></strong><br>The Patagonia R1 Pullover is a midlayer, meaning it's intended to be worn between a thermal base layer and an outer waterproof or windproof jacket like the Patagonia Houdini. <a class="view-deal button" href="https://www.rei.com/product/242323/patagonia-r1-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739d2d0-cf13-11f1-921f-bd7957933c9f" data-action="Deal Block" data-label="R1 Pullover - Women's" data-dimension48="R1 Pullover - Women's" data-dimension25="$107">View Deal</a></p></div><div class="product"><a data-dimension112="5739d334-cf13-11f1-95a9-756182c4d48a" data-action="Deal Block" data-label="Daily Snap-T Pullover - Women's" data-dimension48="Daily Snap-T Pullover - Women's" data-dimension25="$109" href="https://www.rei.com/product/C12816/patagonia-daily-snap-t-pullover-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1664px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="So92hKGkLN6sjJXpmCtawA" name="patagonia snap-t daily pullover" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/So92hKGkLN6sjJXpmCtawA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1664" height="1664" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C12816/patagonia-daily-snap-t-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739d334-cf13-11f1-95a9-756182c4d48a" data-action="Deal Block" data-label="Daily Snap-T Pullover - Women's" data-dimension48="Daily Snap-T Pullover - Women's" data-dimension25="$109">Daily Snap-T Pullover - Women's: was $169 now $109</a></strong><br>This fleece is perfect to wear at the campsite during chilly evenings, or on early morning trails. The Daily Snap-T Pullover is made from 100% regenerative organic cotton as well.<a class="view-deal button" href="https://www.rei.com/product/C12816/patagonia-daily-snap-t-pullover-womens" target="_blank" rel="nofollow" data-dimension112="5739d334-cf13-11f1-95a9-756182c4d48a" data-action="Deal Block" data-label="Daily Snap-T Pullover - Women's" data-dimension48="Daily Snap-T Pullover - Women's" data-dimension25="$109">View Deal</a></p></div><div class="product"><a data-dimension112="5739d38e-cf13-11f1-b911-d5fb61715add" data-action="Deal Block" data-label="Daily Snap-T Pullover (Men's)" data-dimension48="Daily Snap-T Pullover (Men's)" data-dimension25="$124" href="https://www.rei.com/product/C01345/patagonia-daily-snap-t-pullover-mens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1560px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="WGXNCXSCXiBba8uzoeFYnS" name="Patagonia Snap T" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/WGXNCXSCXiBba8uzoeFYnS-1920-80.jpg" mos="" align="middle" fullscreen="" width="1560" height="1560" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C01345/patagonia-daily-snap-t-pullover-mens" target="_blank" rel="nofollow" data-dimension112="5739d38e-cf13-11f1-b911-d5fb61715add" data-action="Deal Block" data-label="Daily Snap-T Pullover (Men's)" data-dimension48="Daily Snap-T Pullover (Men's)" data-dimension25="$124">Daily Snap-T Pullover (Men's): was $179 now $124</a></strong><br>This is the same as the deal listed above, except it's the men's version. It's available in nearly every single size in three different colors, so you'll be able to find your perfect fit. <a class="view-deal button" href="https://www.rei.com/product/C01345/patagonia-daily-snap-t-pullover-mens" target="_blank" rel="nofollow" data-dimension112="5739d38e-cf13-11f1-b911-d5fb61715add" data-action="Deal Block" data-label="Daily Snap-T Pullover (Men's)" data-dimension48="Daily Snap-T Pullover (Men's)" data-dimension25="$124">View Deal</a></p></div><div class="product"><a data-dimension112="5739d3f2-cf13-11f1-8c61-9da4a4ad59f0" data-action="Deal Block" data-label="Nano-Air Ultralight Hoody (Women's)" data-dimension48="Nano-Air Ultralight Hoody (Women's)" data-dimension25="$161" href="https://www.rei.com/product/C09325/patagonia-nano-air-ultralight-full-zip-hoody-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1608px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="PqgeChqQKgNDQGpRCoXDEh" name="Patagonia deals" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PqgeChqQKgNDQGpRCoXDEh-1920-80.jpg" mos="" align="middle" fullscreen="" width="1608" height="1608" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C09325/patagonia-nano-air-ultralight-full-zip-hoody-womens" target="_blank" rel="nofollow" data-dimension112="5739d3f2-cf13-11f1-8c61-9da4a4ad59f0" data-action="Deal Block" data-label="Nano-Air Ultralight Hoody (Women's)" data-dimension48="Nano-Air Ultralight Hoody (Women's)" data-dimension25="$161">Nano-Air Ultralight Hoody (Women's): was $249 now $161</a></strong><br>The Nano-Air Ultralight is one of the <a href="https://www.tomsguide.com/wellness/fitness/patagonia-nano-air-ultralight-review-outrageous-comfort-doesnt-come-cheap">best jackets we’ve ever tested </a>and a go-to in our Fitness Writer's daily rotation thanks to its use of super-soft and breathable materials with easy-roll-up sleeves and a comfortable, slightly fitted design. It’s also rarely on sale for as much as 35% off. <a class="view-deal button" href="https://www.rei.com/product/C09325/patagonia-nano-air-ultralight-full-zip-hoody-womens" target="_blank" rel="nofollow" data-dimension112="5739d3f2-cf13-11f1-8c61-9da4a4ad59f0" data-action="Deal Block" data-label="Nano-Air Ultralight Hoody (Women's)" data-dimension48="Nano-Air Ultralight Hoody (Women's)" data-dimension25="$161">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The Garmin Enduro 4 just launched, so I went hunting for deals on the Enduro 3, and it’s $110 cheaper than the new model ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Given the rocketing costs of top Garmin watches, the Garmin Enduro 4 is actually pretty good value at its launch price of $899, since it offers most of the key features of Garmin’s flagship Fenix 9 Pro and longer battery life.</p><p>However, the <a href="https://www.amazon.com/Garmin-EnduroTM-Ultraperformance-Smartwatch-Built/dp/B0DD5N9G17" target="_blank" rel="nofollow">Garmin Enduro 3 is currently just $789 on Amazon</a>, and that makes it even better value than the new Enduro 4, because Garmin has only made minimal updates to the watch and most of its new features will be rolling back to the Enduro 3.</p><div class="product"><a data-dimension112="6add76f0-ce02-11f1-9f85-176c4f61c4d2" data-action="Deal Block" data-label="Enduro 3" data-dimension48="Enduro 3" data-dimension25="$789" href="https://www.amazon.com/Garmin-EnduroTM-Ultraperformance-Smartwatch-Built/dp/B0DD5N9G17" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:838px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="tQpbbFCagSi7EYVYej676G" name="Garmin Enduro 3 sq.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tQpbbFCagSi7EYVYej676G-1920-80.jpg" mos="" align="middle" fullscreen="" width="838" height="838" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Garmin Enduro 3 has all the same key features as the new Enduro 4, and is definitely the better value buy for $110 less.<a class="view-deal button" href="https://www.amazon.com/Garmin-EnduroTM-Ultraperformance-Smartwatch-Built/dp/B0DD5N9G17" target="_blank" rel="nofollow" data-dimension112="6add76f0-ce02-11f1-9f85-176c4f61c4d2" data-action="Deal Block" data-label="Enduro 3" data-dimension48="Enduro 3" data-dimension25="$789">View Deal</a></p></div><h2 id="what-s-new-on-the-garmin-enduro-4">What’s new on the Garmin Enduro 4?</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="CVkrKCTyWs8hrtasBnVbAe" name="Garmin Enduro 4 and Garmin Enduro 3" alt="Garmin Enduro 4 and Garmin Enduro 3" src="https://cdn.mos.cms.futurecdn.net/CVkrKCTyWs8hrtasBnVbAe-1920-80.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 just started testing the Garmin Enduro 4, and the most noticeable change so far is cosmetic; it has a silver bezel with fewer yellow marks than the Enduro 3.</p><p>It also comes with Garmin’s new ComfortFit band, which is absolutely lovely and more comfortable than the UltraFit band on the Enduro 3, but you can buy this ComfortFit band separately and strap it on the old watch.</p><p>The new watch also has more storage — 64GB vs 32GB — and a faster processor and more RAM for maps, which should load more quickly when panning and zooming. </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="6cG3kWogVWt9MmLEMRA78e" name="Garmin Enduro 4 and Garmin Enduro 3" alt="Garmin Enduro 4 and Garmin Enduro 3" src="https://cdn.mos.cms.futurecdn.net/6cG3kWogVWt9MmLEMRA78e-1920-80.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>You also get a new perspective view on the map with the new Enduro 4, which isn’t coming to the Enduro 4, and a new archery feature I can’t claim to have tested.</p><p>These are all the features that won’t come to the Enduro 3, but there are also a lot of updates on the Enduro 4 right now due to come to the Enduro 3 in time through software updates.</p><p>Some of the most notable features in this category are Garmin’s Epic feature, which bundles activities into one group so you can look at all your stats for a multi-day ultramarathon, for example, and the new stamina feature that launched with the <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-9-pro-review-a-titanium-titan-for-your-biggest-adventures">Garmin Fenix 9 Pro</a>.</p><h2 id="the-garmin-enduro-3-is-also-a-good-fenix-alternative">The Garmin Enduro 3 is also a good Fenix alternative</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="L9TXZ4xNSHYH7prP8p98wj" name="Garmin Enduro 3 and Garmin Fenix 9 Pro" alt="Garmin Enduro 3 and Garmin Fenix 9 Pro" src="https://cdn.mos.cms.futurecdn.net/L9TXZ4xNSHYH7prP8p98wj-1920-80.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>Looking at that list, you can see the Enduro 4 is an iterative update aimed at people looking to upgrade from the Enduro 1 or 2 rather than the 3, which matches the new watch pretty closely in design and software.</p><p>I’d pick up the Enduro 3 in the sales myself, even if it might end up being phased out of software updates earlier than the Enduro 4 at some point in the future.</p><p>It’s not just the Enduro 4 that’s threatened by this deal on the Enduro 3, however, because I also think it’s a strong alternative to the Garmin Fenix 9 Pro.</p><p>The Fenix 9 Pro has an AMOLED option and extra features like LTE and satellite connectivity with a diveproof design and a mic and speaker, but the nuts and bolts of its sports tracking, training analysis and navigation features are the same as on the Enduro 3.</p><p>Furthermore, the Enduro 3 and its MIP display with solar charging offer longer battery life and a lighter design than the 51mm Fenix 9 Pro, which has a full titanium case.</p><p>At $789, the Enduro 3 is $110 cheaper than the Enduro 4, but a full $400-$500 cheaper than the 51mm Fenix 9 Pro. That’s a saving worth considering.</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/ive-been-in-a-serious-relationship-with-my-vagus-nerve-stimulator-for-30-days-to-see-if-it-would-decrease-my-stress-heres-why-im-breaking-up-with-it-already"><strong>I've been in a serious relationship with my vagus nerve stimulator for 30 days to see if it would decrease my stress — here's why I'm breaking up with it already</strong></a></li><li><a href="https://www.tomsguide.com/wellness/running/nike-pegasus-plus-2-review"><strong>I ran 40 miles in the Nike Pegasus Plus 2 and it’s worth the upgrade on the Pegasus 42</strong></a></li><li><a href="https://www.tomsguide.com/wellness/workouts/ive-been-coaching-my-72-year-old-dad-like-hes-30-heres-the-one-exercise-that-moves-the-needle-most-for-upper-body-strength-and-mobility"><strong>I coach my 72-year-old dad like he's 30: here's the one exercise that moves the needle most for upper-body strength and mobility</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/the-garmin-enduro-4-just-launched-so-i-went-hunting-for-deals-on-the-enduro-3-and-its-usd110-cheaper-than-the-new-model</link>
                                                                            <description>
                            <![CDATA[ The Garmin Enduro 4 is a minor update on the Garmin Enduro 3, so I think it’s worth picking up the older model in the sales instead. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">wk2idsEU3qgymtyKsqyPjQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sR8qxuyHZB65PFKmS3dCML-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nick Harris-Fry ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/J5Jjp49GUVjLZEbjEkTex-320-70.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/sR8qxuyHZB65PFKmS3dCML-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Garmin Enduro 3 savings squad]]></media:description>                                                            <media:text><![CDATA[Garmin Enduro 3 savings squad]]></media:text>
                                <media:title type="plain"><![CDATA[Garmin Enduro 3 savings squad]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sR8qxuyHZB65PFKmS3dCML-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Given the rocketing costs of top Garmin watches, the Garmin Enduro 4 is actually pretty good value at its launch price of $899, since it offers most of the key features of Garmin’s flagship Fenix 9 Pro and longer battery life.</p><p>However, the <a href="https://www.amazon.com/Garmin-EnduroTM-Ultraperformance-Smartwatch-Built/dp/B0DD5N9G17" target="_blank" rel="nofollow">Garmin Enduro 3 is currently just $789 on Amazon</a>, and that makes it even better value than the new Enduro 4, because Garmin has only made minimal updates to the watch and most of its new features will be rolling back to the Enduro 3.</p><div class="product"><a data-dimension112="6add76f0-ce02-11f1-9f85-176c4f61c4d2" data-action="Deal Block" data-label="Enduro 3" data-dimension48="Enduro 3" data-dimension25="$789" href="https://www.amazon.com/Garmin-EnduroTM-Ultraperformance-Smartwatch-Built/dp/B0DD5N9G17" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:838px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="tQpbbFCagSi7EYVYej676G" name="Garmin Enduro 3 sq.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tQpbbFCagSi7EYVYej676G-1920-80.jpg" mos="" align="middle" fullscreen="" width="838" height="838" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Garmin Enduro 3 has all the same key features as the new Enduro 4, and is definitely the better value buy for $110 less.<a class="view-deal button" href="https://www.amazon.com/Garmin-EnduroTM-Ultraperformance-Smartwatch-Built/dp/B0DD5N9G17" target="_blank" rel="nofollow" data-dimension112="6add76f0-ce02-11f1-9f85-176c4f61c4d2" data-action="Deal Block" data-label="Enduro 3" data-dimension48="Enduro 3" data-dimension25="$789">View Deal</a></p></div><h2 id="what-s-new-on-the-garmin-enduro-4">What’s new on the Garmin Enduro 4?</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="CVkrKCTyWs8hrtasBnVbAe" name="Garmin Enduro 4 and Garmin Enduro 3" alt="Garmin Enduro 4 and Garmin Enduro 3" src="https://cdn.mos.cms.futurecdn.net/CVkrKCTyWs8hrtasBnVbAe-1920-80.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 just started testing the Garmin Enduro 4, and the most noticeable change so far is cosmetic; it has a silver bezel with fewer yellow marks than the Enduro 3.</p><p>It also comes with Garmin’s new ComfortFit band, which is absolutely lovely and more comfortable than the UltraFit band on the Enduro 3, but you can buy this ComfortFit band separately and strap it on the old watch.</p><p>The new watch also has more storage — 64GB vs 32GB — and a faster processor and more RAM for maps, which should load more quickly when panning and zooming. </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="6cG3kWogVWt9MmLEMRA78e" name="Garmin Enduro 4 and Garmin Enduro 3" alt="Garmin Enduro 4 and Garmin Enduro 3" src="https://cdn.mos.cms.futurecdn.net/6cG3kWogVWt9MmLEMRA78e-1920-80.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>You also get a new perspective view on the map with the new Enduro 4, which isn’t coming to the Enduro 4, and a new archery feature I can’t claim to have tested.</p><p>These are all the features that won’t come to the Enduro 3, but there are also a lot of updates on the Enduro 4 right now due to come to the Enduro 3 in time through software updates.</p><p>Some of the most notable features in this category are Garmin’s Epic feature, which bundles activities into one group so you can look at all your stats for a multi-day ultramarathon, for example, and the new stamina feature that launched with the <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-fenix-9-pro-review-a-titanium-titan-for-your-biggest-adventures">Garmin Fenix 9 Pro</a>.</p><h2 id="the-garmin-enduro-3-is-also-a-good-fenix-alternative">The Garmin Enduro 3 is also a good Fenix alternative</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="L9TXZ4xNSHYH7prP8p98wj" name="Garmin Enduro 3 and Garmin Fenix 9 Pro" alt="Garmin Enduro 3 and Garmin Fenix 9 Pro" src="https://cdn.mos.cms.futurecdn.net/L9TXZ4xNSHYH7prP8p98wj-1920-80.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>Looking at that list, you can see the Enduro 4 is an iterative update aimed at people looking to upgrade from the Enduro 1 or 2 rather than the 3, which matches the new watch pretty closely in design and software.</p><p>I’d pick up the Enduro 3 in the sales myself, even if it might end up being phased out of software updates earlier than the Enduro 4 at some point in the future.</p><p>It’s not just the Enduro 4 that’s threatened by this deal on the Enduro 3, however, because I also think it’s a strong alternative to the Garmin Fenix 9 Pro.</p><p>The Fenix 9 Pro has an AMOLED option and extra features like LTE and satellite connectivity with a diveproof design and a mic and speaker, but the nuts and bolts of its sports tracking, training analysis and navigation features are the same as on the Enduro 3.</p><p>Furthermore, the Enduro 3 and its MIP display with solar charging offer longer battery life and a lighter design than the 51mm Fenix 9 Pro, which has a full titanium case.</p><p>At $789, the Enduro 3 is $110 cheaper than the Enduro 4, but a full $400-$500 cheaper than the 51mm Fenix 9 Pro. That’s a saving worth considering.</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/ive-been-in-a-serious-relationship-with-my-vagus-nerve-stimulator-for-30-days-to-see-if-it-would-decrease-my-stress-heres-why-im-breaking-up-with-it-already"><strong>I've been in a serious relationship with my vagus nerve stimulator for 30 days to see if it would decrease my stress — here's why I'm breaking up with it already</strong></a></li><li><a href="https://www.tomsguide.com/wellness/running/nike-pegasus-plus-2-review"><strong>I ran 40 miles in the Nike Pegasus Plus 2 and it’s worth the upgrade on the Pegasus 42</strong></a></li><li><a href="https://www.tomsguide.com/wellness/workouts/ive-been-coaching-my-72-year-old-dad-like-hes-30-heres-the-one-exercise-that-moves-the-needle-most-for-upper-body-strength-and-mobility"><strong>I coach my 72-year-old dad like he's 30: here's the one exercise that moves the needle most for upper-body strength and mobility</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ No, not Pilates — when my lower back aches from sitting all day, this is the 10-minute floor routine I use for relief ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Despite my part-time job as a personal trainer, my full-time work as a fitness editor means I spend quite a lot of time sitting during the day. Sure, I like to get up and move around often, work out, and my dog gets plenty of long walks, but that doesn't always <a href="https://www.tomsguide.com/wellness/workouts/a-top-pilates-instructor-says-these-anti-desk-exercises-are-the-best-thing-you-can-do-to-counter-the-effects-of-sitting-at-any-age">counteract the effects of prolonged sitting</a>.</p><p>When I've spent arguably too long at my desk, I have one of the <a href="https://www.tomsguide.com/best-picks/best-yoga-mats">best yoga mats</a> rolled out and on standby; when I get a spare few minutes, I'll work through a short mobility routine or gentle stretching, just to get things moving. It offers gentle muscle tension relief and allows me to move my joints and free up some space in my body.</p><p>It only takes 10 minutes, and I share the routine below, plus some benefits you can expect with regular practice. And remember, how well you <em>move </em>determines how well you <em>live</em> in the future. </p><h2 id="watch-10-minute-anti-sitting-routine-for-muscle-tension">Watch: 10-minute anti-sitting routine for muscle tension</h2><p>You can microdose these routines into your week; they're an anti-aging tool for healthier joints and more active muscles.</p><p><em>If you experience pain at any time, stop and rest. If you're working with an injury or health condition, I recommend seeking advice before starting these exercises.</em></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/De7HT2jz6LF/" target="_blank">A post shared by Tom's Guide Fitness | Workout Tips & Gear (@tomsguidefitness)</a></p><p>A photo posted by </p></blockquote></div><h2 id="what-are-the-benefits">What are the benefits?</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:1770px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="tuFVZg5LrEC557ZYWpFqPT" name="GettyImages-2234454694 legs over 40" alt="Blonde woman in pink workout gear against a blue sky backdrop holding her knee to her chest for a stretch" src="https://cdn.mos.cms.futurecdn.net/tuFVZg5LrEC557ZYWpFqPT-1920-80.jpg" mos="" align="middle" fullscreen="" width="1770" height="996" 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>Not only is a daily 10-minute yoga flow easy to build into a habit, but it also delivers both physiological and psychological benefits. Physically, it's perfect for moving your muscles and joints through range of motion, which can ease stiffness, release tension and open stiff joints. This is ideal to counter the slouching you probably do without noticing as you sit behind your phone or laptop.</p><p>Connecting with your breath allows you to breathe more deeply and rhythmically, activating the diaphragm and down-regulating your nervous system, which allows your body to enter rest-and-repair mode.</p><p>Short practices also improve sustainable consistency. By removing the barrier to exercise (equipment, time), you can improve mobility, strengthen your body and increase mental clarity after you step off the mat.</p><div><blockquote><p>Dynamic movement and stretching also stimulate blood flow and circulation, delivering oxygen and nutrients around your body. </p></blockquote></div><p>In just 10 minutes, this routine moves your spine through gentle extension and flexion, opening your chest and shoulders, releasing back tension and neck tightness that could impact posture. </p><p>Dynamic movement and stretching also stimulate blood flow and circulation, delivering oxygen and nutrients around your body. </p><p>You don't see results unless you stay consistent, so daily short-form stretching can help keep muscles and fascia more pliable and joints lubricated, meaning better mobility, flexibility and range of motion.</p><p>And finally, by regulating your nervous system, your heart rate and cortisol levels can lower, helping your body relax. If you tend to work from home often, a brief 10-minute sequence buffer between work and your personal life, which should help you find better balance.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="vGnNDN" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><p>Joints, ligaments and fascia respond well to low-impact movement, so a routine like this can serve you well if you're just starting. And remember, you might not notice progress straight away, but over time, you'll see huge benefits. Give it a try, and let us know how you get on in the comments.</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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank">I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/according-to-a-personal-trainer-this-exercise-is-100-times-more-effective-than-crunches-i-tried-it-and-was-humbled" target="_blank">According to a personal trainer, this exercise is 100 times more effective than crunches. I tried it and was humbled</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank">I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/workouts/no-not-pilates-when-my-lower-back-aches-from-sitting-all-day-this-is-the-10-minute-floor-routine-i-use-for-relief</link>
                                                                            <description>
                            <![CDATA[ If you sit for long periods, this short routine offers relief from muscle tension. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">hbVMJErCFyK79fcsCHb5TW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/uk3XjrGhcjWsUkMgXiMLTF-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 26 Oct 2026 05:00:00 +0000</pubDate>                                                                                                                                <updated>Mon, 26 Oct 2026 10:09:32 +0000</updated>
                                                                                                                                            <category><![CDATA[Workouts]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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;Live Science&lt;/a&gt;,&lt;a href=&quot;https://www.fitandwell.com/author/sam-hopes&quot;&gt; Fit&amp;amp;Well&lt;/a&gt;,&lt;a href=&quot;https://www.coachweb.com/author/sam-hopes&quot;&gt; Coach&lt;/a&gt;, and T3. &lt;/p&gt;&lt;p&gt;Having worked with fitness studios like F45 and Virgin Active and trained both group and 1:1, Sam now primarily teaches outdoor bootcamps, bodyweight, 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, Pilates 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, mindfulness, 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/uk3XjrGhcjWsUkMgXiMLTF-1920-80.jpg">
                                                            <media:credit><![CDATA[Future/ Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Sam at home performing upward dog stretch during workout]]></media:description>                                                            <media:text><![CDATA[Sam at home performing upward dog stretch during workout]]></media:text>
                                <media:title type="plain"><![CDATA[Sam at home performing upward dog stretch during workout]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/uk3XjrGhcjWsUkMgXiMLTF-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Despite my part-time job as a personal trainer, my full-time work as a fitness editor means I spend quite a lot of time sitting during the day. Sure, I like to get up and move around often, work out, and my dog gets plenty of long walks, but that doesn't always <a href="https://www.tomsguide.com/wellness/workouts/a-top-pilates-instructor-says-these-anti-desk-exercises-are-the-best-thing-you-can-do-to-counter-the-effects-of-sitting-at-any-age">counteract the effects of prolonged sitting</a>.</p><p>When I've spent arguably too long at my desk, I have one of the <a href="https://www.tomsguide.com/best-picks/best-yoga-mats">best yoga mats</a> rolled out and on standby; when I get a spare few minutes, I'll work through a short mobility routine or gentle stretching, just to get things moving. It offers gentle muscle tension relief and allows me to move my joints and free up some space in my body.</p><p>It only takes 10 minutes, and I share the routine below, plus some benefits you can expect with regular practice. And remember, how well you <em>move </em>determines how well you <em>live</em> in the future. </p><h2 id="watch-10-minute-anti-sitting-routine-for-muscle-tension">Watch: 10-minute anti-sitting routine for muscle tension</h2><p>You can microdose these routines into your week; they're an anti-aging tool for healthier joints and more active muscles.</p><p><em>If you experience pain at any time, stop and rest. If you're working with an injury or health condition, I recommend seeking advice before starting these exercises.</em></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/De7HT2jz6LF/" target="_blank">A post shared by Tom's Guide Fitness | Workout Tips & Gear (@tomsguidefitness)</a></p><p>A photo posted by </p></blockquote></div><h2 id="what-are-the-benefits">What are the benefits?</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:1770px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="tuFVZg5LrEC557ZYWpFqPT" name="GettyImages-2234454694 legs over 40" alt="Blonde woman in pink workout gear against a blue sky backdrop holding her knee to her chest for a stretch" src="https://cdn.mos.cms.futurecdn.net/tuFVZg5LrEC557ZYWpFqPT-1920-80.jpg" mos="" align="middle" fullscreen="" width="1770" height="996" 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>Not only is a daily 10-minute yoga flow easy to build into a habit, but it also delivers both physiological and psychological benefits. Physically, it's perfect for moving your muscles and joints through range of motion, which can ease stiffness, release tension and open stiff joints. This is ideal to counter the slouching you probably do without noticing as you sit behind your phone or laptop.</p><p>Connecting with your breath allows you to breathe more deeply and rhythmically, activating the diaphragm and down-regulating your nervous system, which allows your body to enter rest-and-repair mode.</p><p>Short practices also improve sustainable consistency. By removing the barrier to exercise (equipment, time), you can improve mobility, strengthen your body and increase mental clarity after you step off the mat.</p><div><blockquote><p>Dynamic movement and stretching also stimulate blood flow and circulation, delivering oxygen and nutrients around your body. </p></blockquote></div><p>In just 10 minutes, this routine moves your spine through gentle extension and flexion, opening your chest and shoulders, releasing back tension and neck tightness that could impact posture. </p><p>Dynamic movement and stretching also stimulate blood flow and circulation, delivering oxygen and nutrients around your body. </p><p>You don't see results unless you stay consistent, so daily short-form stretching can help keep muscles and fascia more pliable and joints lubricated, meaning better mobility, flexibility and range of motion.</p><p>And finally, by regulating your nervous system, your heart rate and cortisol levels can lower, helping your body relax. If you tend to work from home often, a brief 10-minute sequence buffer between work and your personal life, which should help you find better balance.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="vGnNDN" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><p>Joints, ligaments and fascia respond well to low-impact movement, so a routine like this can serve you well if you're just starting. And remember, you might not notice progress straight away, but over time, you'll see huge benefits. Give it a try, and let us know how you get on in the comments.</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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank">I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/according-to-a-personal-trainer-this-exercise-is-100-times-more-effective-than-crunches-i-tried-it-and-was-humbled" target="_blank">According to a personal trainer, this exercise is 100 times more effective than crunches. I tried it and was humbled</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank">I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Oura Ring 4 vs 5 sleep tracker: Is the upgrade worth it? ]]></title>
                                                                                                <dc:content><![CDATA[         <div class="featured_product_block featured_block_versus" data-id="26f95552-ce2b-11f1-9b77-bf088a2cba8e">            <a href="https://store.google.com/us/config/google_fitbit_edge?hl=en-US" data-model-name="Oura Ring 4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/B6TfeMfB5LTf4CokXCAtV8.jpg" alt="Oura , Ring 4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Oura</div>                    <div class="featured__title">Ring 4</div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong>Type: </strong>Smart ring<br><strong>Launched:</strong> October 2024<br><strong>Subscription: </strong>$5.99/£5.99 a month<br><strong>Price: </strong><a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVRYRP/ref=sr_1_3" target="_blank">From $349.99 / £199 at Amazon</a></p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="26f956d8-ce2b-11f1-914c-5f96adc51a6d">            <a href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/ref=sr_1_3" data-model-name="Oura Ring 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:86.42%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/9FSTezSsDEc5RZwExBfRMM.jpg" alt="the Oura Ring 5 in gold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Oura</div>                    <div class="featured__title">Ring 5</div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong>Type: </strong>Smart ring<br><strong>Launched:</strong> May 2026<br><strong>Subscription: </strong>$5.99/£5.99month <br><strong>Price: </strong><a href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/ref=sr_1_3" target="_blank">From $399/£389 at Amazon</a></p></p>                </div>                            </div>        </div><p>I've been tracking my sleep with the<a href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRJYWVTK/ref=sr_1_3" target="_blank"> Oura Ring 5, now from $399 at Amazon</a>, for four months and I have to say that it's the<a href="https://www.tomsguide.com/wellness/sleep-tech/best-sleep-tracker"> best sleep tracker</a> of 2026. The ‘most accurate Oura Ring yet’, according to Oura, using the Ring 5 has even helped me chip away at my <a href="https://www.tomsguide.com/wellness/sleep/a-board-certified-sleep-doctor-gave-me-a-1-week-schedule-to-go-from-6-to-7-hours-sleep-a-night-heres-what-happened-to-my-oura-ring-sleep-debt">mega sleep debt</a>.</p><p>However, the Oura Ring 5 shares a lot of similarities with its predecessor, the<a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WTRWSS/ref=sr_1_3"> Oura Ring 4, which is now as low as $254.48 at Amazon</a>. Before the launch of the 5, the 4 was our top-rated sleep tracker — but does the upgraded Oura Ring 5 deliver more accurate metrics? And is it worth the extra expense?</p><p>If you're looking to buy an Oura Ring to track your sleep in this month's<a href="https://www.tomsguide.com/news/best-cheap-mattress-deals-and-sales"> mattress and sleep sales</a>, or you're a proud owner of an Oura Ring 4 and debating whether to switch, I’m diving into the key differences between the Oura Ring 4 vs Oura Ring 5. For price, design and sleep tracking, I’ll help you decide if it’s worth the upgrade.</p><h3 class="article-body__section" id="section-price"><span>Price</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="XFvdawwyVf2uTWULLm5Rib" name="Oura Ring 5 home" alt="A close up of fingers holding the Oura Ring 5 in silver" src="https://cdn.mos.cms.futurecdn.net/XFvdawwyVf2uTWULLm5Rib-1920-80.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>Ever since the Oura Ring 5 dropped in May, I've been waiting for this premium sleep tracker to go on sale. However, from the<a href="https://www.tomsguide.com/deals/labor-day-mattress-sales"> Labor Day sleep sales</a> through to two <a href="https://www.tomsguide.com/wellness/mattresses/amazon-prime-day-mattress-deals">Prime Day sleep sales</a>, I've yet to see an Oura Ring 5 price slash. </p><p>That means you're looking at spending either $399 (for Black or Silver finishes) or $499 luxurious finishes like Gold or Rose Gold. It's a high price tag, although I think it's worth it for the accurate sleep tracking and suite of features. </p><p>However, I'm not ruling out an Oura RIng 5 price drop in the upcoming <a href="https://www.tomsguide.com/deals/black-friday-mattress-best-deals">Black Friday mattress and sleep deals</a> (or the <a href="https://www.tomsguide.com/deals/cyber-monday-mattress-best-deals">Cyber Monday mattress and sleep deals</a>, for that matter). </p><p>Meanwhile, the Oura Ring 4 is usually discounted at Amazon, albeit a little haphazardly, depending on size and finish. Currently, the cheapest model is a <a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWDR5H/ref=sr_1_3" target="_blank">size 15 Stealth finish at $254.48 at Amazon</a>. The highest price you'll pay is a $399 MSRP for a Gold in certain sizes. And while I can't guarantee a Black Friday price drop, based on past sales it seems likely.</p><p>To access Oura's sleep tracking, you will need to become a member for $5.99 a month, regardless of whether you choose a 4th or 5th generation. </p><div class="product"><a data-dimension112="26f95d72-ce2b-11f1-a28b-d18c788ef781" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$254.48" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVRYRP/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:2380px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="B6TfeMfB5LTf4CokXCAtV8" name="Ring 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/B6TfeMfB5LTf4CokXCAtV8-1920-80.jpg" mos="" align="middle" fullscreen="" width="2380" height="2380" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Oura Ring 4 is the tech company's most affordable smart ring. Depending on the size and finish, you can find over 25% off the Oura Ring 4, knocking certain options below $300. <a class="view-deal button" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVRYRP/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="26f95d72-ce2b-11f1-a28b-d18c788ef781" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$254.48">View Deal</a></p></div><div class="product"><a data-dimension112="26f95dd6-ce2b-11f1-b7c9-d52227403add" data-action="Deal Block" data-label="Ring 5" data-dimension48="Ring 5" data-dimension25="$399.99" href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/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:1392px;"><p class="vanilla-image-block" style="padding-top:86.42%;"><img id="JhHtifMhSwxsZB7V6gt8Yf" name="61sS2f7jtUL._AC_SL1500_ (1)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JhHtifMhSwxsZB7V6gt8Yf-1920-80.jpg" mos="" align="middle" fullscreen="" width="1392" height="1203" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="26f95dd6-ce2b-11f1-b7c9-d52227403add" data-action="Deal Block" data-label="Ring 5" data-dimension48="Ring 5" data-dimension25="$399.99">Ring 5: $399.99</a></strong><br>The Oura Ring is the tech company's latest and most sophisticated tracker, so naturally it has a higher starting price of $399 ($499 for some finishes). For now, we don't see a discount on the horizon, though anything could happen in the upcoming holiday sales. <a class="view-deal button" href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="26f95dd6-ce2b-11f1-b7c9-d52227403add" data-action="Deal Block" data-label="Ring 5" data-dimension48="Ring 5" data-dimension25="$399.99">View Deal</a></p></div><h3 class="article-body__section" id="section-oura-ring-4-vs-oura-ring-5-sleep-tracking"><span>Oura Ring 4 vs Oura Ring 5 sleep tracking</span></h3><p>Okay, so you're probably wondering whether the price difference boils down to better sleep tracking. After all, Oura has called the 5th generation "the most accurate Oura Ring yet". But let's unpack what that term means, especially in terms of sleep data. </p><p>The Oura Ring 5 uses different sensor technology to the Oura Ring 4. In short, it uses fewer sensors but the ones it has are higher quality and work better across different skin tones. The result? 12% more accurate overnight <a href="https://www.tomsguide.com/wellness/sleep/experts-explain-what-hrv-on-your-sleep-tracker-means-and-how-to-improve-yours">HRV </a>than the Oura Ring 4. </p><p>HRV offers a clear window into how deeply your body is recovering from stress, giving you a largely accurate and consistent reading of your body's baseline resilience. </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rZtWweMfmTbWFc3A7cEKNN" name="Sleep Trackers Oura Ring 4" alt="Our sleep tech tester testing the silver Oura Ring 4 in bed with white bedsheets and a rattan headboard" src="https://cdn.mos.cms.futurecdn.net/rZtWweMfmTbWFc3A7cEKNN-1920-80.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>Along with the change in sensor tech, the upgraded physical design of the Oura Ring 5 aids its sleep tracking quality. The Oura Ring 4's interior surface (the part that touches your finger) has a smoother, flat surface, but the Oura Ring has small "bumps". These gently raised areas allow the sensors to make better contact with your skin, resulting in more accurate sleep tracking. </p><p>The Oura Ring 5 also has better battery life, lasting 6 to 9 days on a single charge (compared to the Oura Ring 4's 5 to 8 days). While this doesn't directly affect sleep tracking, it does mean the Oura Ring 5 is less likely to run out of juice while you're sleeping. </p><p>However, there are plenty of sleep-tracking similarities that show that the Oura Ring 4 is still worth investing in (or sticking with). For example, both models provide the same top-notch sleep metrics, including <a href="https://www.tomsguide.com/wellness/sleep/sleep-cycles">sleep stages</a> (such as <a href="https://www.tomsguide.com/wellness/sleep/rem-sleep">REM sleep</a> and <a href="https://www.tomsguide.com/wellness/sleep/deep-sleep">deep sleep</a>), <a href="https://www.tomsguide.com/wellness/sleep/sleep-latency">sleep latency</a>) and a sleep score. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Od2jVe"></div>                            </div>                            <script src="https://kwizly.com/embed/Od2jVe.js" async></script><p>And the app displaying these sleep metrics is also the same for both generations. Plus, any software updates bring new features and metrics roll out to both the Oura Ring 4 and 5. </p><h3 class="article-body__section" id="section-design-and-comfort"><span>Design and 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:3057px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="uuQ3c59SLxGRmSDTPAbLYE" name="Oura Ring 5" alt="photos of the Oura Ring 5" src="https://cdn.mos.cms.futurecdn.net/uuQ3c59SLxGRmSDTPAbLYE-1920-80.jpg" mos="" align="middle" fullscreen="" width="3057" height="1720" 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 terms of aesthetics, the Oura Ring 5 and 4 share the same core finishes: Silver, Stealth, and Gold. However, both have their own exclusive finishes, like the Deep Rose of the Oura Ring 5 and the ceramic Cloud White of the 4 (although don't be surprised if ceramic options roll out for the 5). </p><p>According to Oura, the Oura Ring 5 is "40 percent smaller than Oura Ring 4" and has a "more elevated, comfortable design". In other words, the Oura Ring 5 is sleeker, lighter, and thinner, for less bulkiness and extra sleep comfort. </p><p>As someone who hates wearing an <a href="https://www.tomsguide.com/news/best-apple-watch-deals">Apple Watch</a> to bed due to its heaviness, I can confidently say that the Oura Ring 5 has a barely-there feel that shouldn't cause any comfort issues for most wearers. The 4 should also be relatively comfortable overnight, but without the 'barely there' feel of the 5.</p><h3 class="article-body__section" id="section-oura-ring-4-vs-oura-ring-5-which-sleep-tracker-should-you-buy"><span>Oura Ring 4 vs Oura Ring 5: Which sleep tracker should you buy?</span></h3><h2 id="choose-the-oura-ring-4-if">Choose the Oura Ring 4 if...</h2><p>✅ <strong>You want to save money:</strong> Not only is the Oura Ring 4 cheaper at MSRP than the Oura Ring 5, but it's also frequently subject to discounts, especially at Amazon. </p><p>✅ <strong>You already have an Oura Ring 4:</strong> If you're the owner of an Oura Ring 4, you aren't missing out on a lot of sleep-tracking features. So if your Ring 4 is working fine, stick with it — you can upgrade when the 6 comes along.</p><p>✅ <strong>You don't want to drill into the details of your sleep: </strong>The Oura Ring 5 promises better, more accurate sleep tracking but if all you want is an overview, save your money and opt for the 4. Plus, both have access to the same app, features, and software updates.</p><h2 id="upgrade-to-an-oura-ring-5-if">Upgrade to an Oura Ring 5 if...</h2><p>✅ <strong>You want the most accurate data:</strong> While the Oura Ring 4 and 5 have the same sleep metrics and app features, the 5 has a different sensor technology and design that results in more accurate tracking. </p><p>✅ <strong>You want a smaller, slimmer design:</strong> The Oura Ring 5 is 40% smaller than its predecessor. It's lighter and less bulky build makes it more comfortable to wear overnight.</p><p>✅ <strong>You want a longer battery life:</strong> Both models boast impressively long lifespans on a single charge, but the Oura Ring 5's week-long battery life has the Oura Ring 4 beat by a couple of days. </p><div data-model-name="Oura Ring 5,Oura Ring 4" data-widget-type="productname"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep-tech/oura-ring-4-vs-oura-ring-5-sleep-tracker-which-should-you-buy</link>
                                                                            <description>
                            <![CDATA[ The Oura Ring 5 mixes new sensor technology with a sleeker design — but how does its sleep tracking compare to its predecessor's? Here's how to know if you should upgrade from the Oura Ring 4. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">uknzuj3ahh4T9WcDyd7Sw8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DCdAmzUGXCZW5HVTX5Tqfj-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 25 Oct 2026 12:15: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-320-70.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/DCdAmzUGXCZW5HVTX5Tqfj-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[On the left, a close up of the Oura Ring 4 on a person&#039;s index finger. On the right, a close up of the Oura Ring 5 on another reviewer&#039;s index finger.]]></media:description>                                                            <media:text><![CDATA[On the left, a close up of the Oura Ring 4 on a person&#039;s index finger. On the right, a close up of the Oura Ring 5 on another reviewer&#039;s index finger.]]></media:text>
                                <media:title type="plain"><![CDATA[On the left, a close up of the Oura Ring 4 on a person&#039;s index finger. On the right, a close up of the Oura Ring 5 on another reviewer&#039;s index finger.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DCdAmzUGXCZW5HVTX5Tqfj-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="featured_product_block featured_block_versus" data-id="26f95552-ce2b-11f1-9b77-bf088a2cba8e">            <a href="https://store.google.com/us/config/google_fitbit_edge?hl=en-US" data-model-name="Oura Ring 4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/B6TfeMfB5LTf4CokXCAtV8.jpg" alt="Oura , Ring 4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Oura</div>                    <div class="featured__title">Ring 4</div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong>Type: </strong>Smart ring<br><strong>Launched:</strong> October 2024<br><strong>Subscription: </strong>$5.99/£5.99 a month<br><strong>Price: </strong><a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVRYRP/ref=sr_1_3" target="_blank">From $349.99 / £199 at Amazon</a></p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="26f956d8-ce2b-11f1-914c-5f96adc51a6d">            <a href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/ref=sr_1_3" data-model-name="Oura Ring 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:86.42%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/9FSTezSsDEc5RZwExBfRMM.jpg" alt="the Oura Ring 5 in gold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Oura</div>                    <div class="featured__title">Ring 5</div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong>Type: </strong>Smart ring<br><strong>Launched:</strong> May 2026<br><strong>Subscription: </strong>$5.99/£5.99month <br><strong>Price: </strong><a href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/ref=sr_1_3" target="_blank">From $399/£389 at Amazon</a></p></p>                </div>                            </div>        </div><p>I've been tracking my sleep with the<a href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRJYWVTK/ref=sr_1_3" target="_blank"> Oura Ring 5, now from $399 at Amazon</a>, for four months and I have to say that it's the<a href="https://www.tomsguide.com/wellness/sleep-tech/best-sleep-tracker"> best sleep tracker</a> of 2026. The ‘most accurate Oura Ring yet’, according to Oura, using the Ring 5 has even helped me chip away at my <a href="https://www.tomsguide.com/wellness/sleep/a-board-certified-sleep-doctor-gave-me-a-1-week-schedule-to-go-from-6-to-7-hours-sleep-a-night-heres-what-happened-to-my-oura-ring-sleep-debt">mega sleep debt</a>.</p><p>However, the Oura Ring 5 shares a lot of similarities with its predecessor, the<a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WTRWSS/ref=sr_1_3"> Oura Ring 4, which is now as low as $254.48 at Amazon</a>. Before the launch of the 5, the 4 was our top-rated sleep tracker — but does the upgraded Oura Ring 5 deliver more accurate metrics? And is it worth the extra expense?</p><p>If you're looking to buy an Oura Ring to track your sleep in this month's<a href="https://www.tomsguide.com/news/best-cheap-mattress-deals-and-sales"> mattress and sleep sales</a>, or you're a proud owner of an Oura Ring 4 and debating whether to switch, I’m diving into the key differences between the Oura Ring 4 vs Oura Ring 5. For price, design and sleep tracking, I’ll help you decide if it’s worth the upgrade.</p><h3 class="article-body__section" id="section-price"><span>Price</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="XFvdawwyVf2uTWULLm5Rib" name="Oura Ring 5 home" alt="A close up of fingers holding the Oura Ring 5 in silver" src="https://cdn.mos.cms.futurecdn.net/XFvdawwyVf2uTWULLm5Rib-1920-80.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>Ever since the Oura Ring 5 dropped in May, I've been waiting for this premium sleep tracker to go on sale. However, from the<a href="https://www.tomsguide.com/deals/labor-day-mattress-sales"> Labor Day sleep sales</a> through to two <a href="https://www.tomsguide.com/wellness/mattresses/amazon-prime-day-mattress-deals">Prime Day sleep sales</a>, I've yet to see an Oura Ring 5 price slash. </p><p>That means you're looking at spending either $399 (for Black or Silver finishes) or $499 luxurious finishes like Gold or Rose Gold. It's a high price tag, although I think it's worth it for the accurate sleep tracking and suite of features. </p><p>However, I'm not ruling out an Oura RIng 5 price drop in the upcoming <a href="https://www.tomsguide.com/deals/black-friday-mattress-best-deals">Black Friday mattress and sleep deals</a> (or the <a href="https://www.tomsguide.com/deals/cyber-monday-mattress-best-deals">Cyber Monday mattress and sleep deals</a>, for that matter). </p><p>Meanwhile, the Oura Ring 4 is usually discounted at Amazon, albeit a little haphazardly, depending on size and finish. Currently, the cheapest model is a <a href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WWDR5H/ref=sr_1_3" target="_blank">size 15 Stealth finish at $254.48 at Amazon</a>. The highest price you'll pay is a $399 MSRP for a Gold in certain sizes. And while I can't guarantee a Black Friday price drop, based on past sales it seems likely.</p><p>To access Oura's sleep tracking, you will need to become a member for $5.99 a month, regardless of whether you choose a 4th or 5th generation. </p><div class="product"><a data-dimension112="26f95d72-ce2b-11f1-a28b-d18c788ef781" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$254.48" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVRYRP/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:2380px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="B6TfeMfB5LTf4CokXCAtV8" name="Ring 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/B6TfeMfB5LTf4CokXCAtV8-1920-80.jpg" mos="" align="middle" fullscreen="" width="2380" height="2380" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Oura Ring 4 is the tech company's most affordable smart ring. Depending on the size and finish, you can find over 25% off the Oura Ring 4, knocking certain options below $300. <a class="view-deal button" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WVRYRP/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="26f95d72-ce2b-11f1-a28b-d18c788ef781" data-action="Deal Block" data-label="Ring 4" data-dimension48="Ring 4" data-dimension25="$254.48">View Deal</a></p></div><div class="product"><a data-dimension112="26f95dd6-ce2b-11f1-b7c9-d52227403add" data-action="Deal Block" data-label="Ring 5" data-dimension48="Ring 5" data-dimension25="$399.99" href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/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:1392px;"><p class="vanilla-image-block" style="padding-top:86.42%;"><img id="JhHtifMhSwxsZB7V6gt8Yf" name="61sS2f7jtUL._AC_SL1500_ (1)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JhHtifMhSwxsZB7V6gt8Yf-1920-80.jpg" mos="" align="middle" fullscreen="" width="1392" height="1203" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="26f95dd6-ce2b-11f1-b7c9-d52227403add" data-action="Deal Block" data-label="Ring 5" data-dimension48="Ring 5" data-dimension25="$399.99">Ring 5: $399.99</a></strong><br>The Oura Ring is the tech company's latest and most sophisticated tracker, so naturally it has a higher starting price of $399 ($499 for some finishes). For now, we don't see a discount on the horizon, though anything could happen in the upcoming holiday sales. <a class="view-deal button" href="https://www.amazon.com/Oura-Ring-Tracker-Activity-Compatible/dp/B0GRK1N94H/ref=sr_1_3" target="_blank" rel="nofollow" data-dimension112="26f95dd6-ce2b-11f1-b7c9-d52227403add" data-action="Deal Block" data-label="Ring 5" data-dimension48="Ring 5" data-dimension25="$399.99">View Deal</a></p></div><h3 class="article-body__section" id="section-oura-ring-4-vs-oura-ring-5-sleep-tracking"><span>Oura Ring 4 vs Oura Ring 5 sleep tracking</span></h3><p>Okay, so you're probably wondering whether the price difference boils down to better sleep tracking. After all, Oura has called the 5th generation "the most accurate Oura Ring yet". But let's unpack what that term means, especially in terms of sleep data. </p><p>The Oura Ring 5 uses different sensor technology to the Oura Ring 4. In short, it uses fewer sensors but the ones it has are higher quality and work better across different skin tones. The result? 12% more accurate overnight <a href="https://www.tomsguide.com/wellness/sleep/experts-explain-what-hrv-on-your-sleep-tracker-means-and-how-to-improve-yours">HRV </a>than the Oura Ring 4. </p><p>HRV offers a clear window into how deeply your body is recovering from stress, giving you a largely accurate and consistent reading of your body's baseline resilience. </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rZtWweMfmTbWFc3A7cEKNN" name="Sleep Trackers Oura Ring 4" alt="Our sleep tech tester testing the silver Oura Ring 4 in bed with white bedsheets and a rattan headboard" src="https://cdn.mos.cms.futurecdn.net/rZtWweMfmTbWFc3A7cEKNN-1920-80.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>Along with the change in sensor tech, the upgraded physical design of the Oura Ring 5 aids its sleep tracking quality. The Oura Ring 4's interior surface (the part that touches your finger) has a smoother, flat surface, but the Oura Ring has small "bumps". These gently raised areas allow the sensors to make better contact with your skin, resulting in more accurate sleep tracking. </p><p>The Oura Ring 5 also has better battery life, lasting 6 to 9 days on a single charge (compared to the Oura Ring 4's 5 to 8 days). While this doesn't directly affect sleep tracking, it does mean the Oura Ring 5 is less likely to run out of juice while you're sleeping. </p><p>However, there are plenty of sleep-tracking similarities that show that the Oura Ring 4 is still worth investing in (or sticking with). For example, both models provide the same top-notch sleep metrics, including <a href="https://www.tomsguide.com/wellness/sleep/sleep-cycles">sleep stages</a> (such as <a href="https://www.tomsguide.com/wellness/sleep/rem-sleep">REM sleep</a> and <a href="https://www.tomsguide.com/wellness/sleep/deep-sleep">deep sleep</a>), <a href="https://www.tomsguide.com/wellness/sleep/sleep-latency">sleep latency</a>) and a sleep score. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Od2jVe"></div>                            </div>                            <script src="https://kwizly.com/embed/Od2jVe.js" async></script><p>And the app displaying these sleep metrics is also the same for both generations. Plus, any software updates bring new features and metrics roll out to both the Oura Ring 4 and 5. </p><h3 class="article-body__section" id="section-design-and-comfort"><span>Design and 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:3057px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="uuQ3c59SLxGRmSDTPAbLYE" name="Oura Ring 5" alt="photos of the Oura Ring 5" src="https://cdn.mos.cms.futurecdn.net/uuQ3c59SLxGRmSDTPAbLYE-1920-80.jpg" mos="" align="middle" fullscreen="" width="3057" height="1720" 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 terms of aesthetics, the Oura Ring 5 and 4 share the same core finishes: Silver, Stealth, and Gold. However, both have their own exclusive finishes, like the Deep Rose of the Oura Ring 5 and the ceramic Cloud White of the 4 (although don't be surprised if ceramic options roll out for the 5). </p><p>According to Oura, the Oura Ring 5 is "40 percent smaller than Oura Ring 4" and has a "more elevated, comfortable design". In other words, the Oura Ring 5 is sleeker, lighter, and thinner, for less bulkiness and extra sleep comfort. </p><p>As someone who hates wearing an <a href="https://www.tomsguide.com/news/best-apple-watch-deals">Apple Watch</a> to bed due to its heaviness, I can confidently say that the Oura Ring 5 has a barely-there feel that shouldn't cause any comfort issues for most wearers. The 4 should also be relatively comfortable overnight, but without the 'barely there' feel of the 5.</p><h3 class="article-body__section" id="section-oura-ring-4-vs-oura-ring-5-which-sleep-tracker-should-you-buy"><span>Oura Ring 4 vs Oura Ring 5: Which sleep tracker should you buy?</span></h3><h2 id="choose-the-oura-ring-4-if">Choose the Oura Ring 4 if...</h2><p>✅ <strong>You want to save money:</strong> Not only is the Oura Ring 4 cheaper at MSRP than the Oura Ring 5, but it's also frequently subject to discounts, especially at Amazon. </p><p>✅ <strong>You already have an Oura Ring 4:</strong> If you're the owner of an Oura Ring 4, you aren't missing out on a lot of sleep-tracking features. So if your Ring 4 is working fine, stick with it — you can upgrade when the 6 comes along.</p><p>✅ <strong>You don't want to drill into the details of your sleep: </strong>The Oura Ring 5 promises better, more accurate sleep tracking but if all you want is an overview, save your money and opt for the 4. Plus, both have access to the same app, features, and software updates.</p><h2 id="upgrade-to-an-oura-ring-5-if">Upgrade to an Oura Ring 5 if...</h2><p>✅ <strong>You want the most accurate data:</strong> While the Oura Ring 4 and 5 have the same sleep metrics and app features, the 5 has a different sensor technology and design that results in more accurate tracking. </p><p>✅ <strong>You want a smaller, slimmer design:</strong> The Oura Ring 5 is 40% smaller than its predecessor. It's lighter and less bulky build makes it more comfortable to wear overnight.</p><p>✅ <strong>You want a longer battery life:</strong> Both models boast impressively long lifespans on a single charge, but the Oura Ring 5's week-long battery life has the Oura Ring 4 beat by a couple of days. </p><div data-model-name="Oura Ring 5,Oura Ring 4" data-widget-type="productname"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Are people relying too heavily on AI to evaluate their fitness, and could wearables be promoting unhealthy eating habits? I spoke to a leading sports dietitian to find out ]]></title>
                                                                                                <dc:content><![CDATA[ <p>A glance at the people around you on the train, walking down a busy street, or in the grocery store will tell you that the gym isn’t the only place people are wearing fitness trackers these days. </p><p>Devices like the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review">Apple Watch Series 12</a>, <a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review">Oura Ring 4</a>, or <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> have become more of a fashion accessory than strictly for tracking workouts. They’re a great way of tracking your training and seeing tangible evidence of your progress, but does everyone need one? I’m not so sure. </p><p>There’s a dark side to the tracking. Viewing burned calories so easily in an app can be an extremely triggering experience for some users, and it may even begin unhealthy habits like calorie counting and overexercising. So, let's go over the perks of these devices and discuss the science behind why they can also become harmful. </p><h2 id="fitness-tracker-or-calorie-counter">Fitness tracker or calorie counter</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:3520px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YVx5Aog8ZrwK7Ean8QHQPm" name="Oura Ring" alt="Oura Ring 5" src="https://cdn.mos.cms.futurecdn.net/YVx5Aog8ZrwK7Ean8QHQPm-1920-80.jpg" mos="" align="middle" fullscreen="" width="3520" height="1980" 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 majority of these smartwatches and smart rings track your health using metrics including sleep and activity. I’ve used these devices myself, and having a consistent way to make sure I’m getting enough rest as well as hitting my activity goals has been very helpful in my own fitness journey. </p><p>Recently, while testing these devices, I’ve noticed the introduction of calorie counting and ways to monitor food intake. This raises alarm bells for me, as while it’s important to track protein and nutrient intake for intense training, it’s not a feature every individual will need. </p><p>So now, with more people focusing on their food consumption alongside their training, could this lead to unhealthy eating habits taking hold? I spoke to leading sports dietician <a href="https://reneemcgregor.com/">Renee McGregor</a> to find out about the effect it may have.</p><p>She said, “A lot of these apps are built on the archaic equation and reduce a human to calories in versus calories out. Humans are much more complex than this, and so this setup often leads to underfuelling, especially in those individuals who are highly active.”</p><h2 id="a-healthy-lifestyle-or-an-obsession">A healthy lifestyle or an obsession</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="6PCNc5D6bFFGGF4cTsshtb" name="Amazfit Bip 6" alt="The Amazfit Bip 6 smartwatch photographed in front of a blue background" src="https://cdn.mos.cms.futurecdn.net/6PCNc5D6bFFGGF4cTsshtb-1920-80.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: Tom's Guide)</span></figcaption></figure><p>Although there’s some inaccuracy, these activity and food tracking features are excellent if you want to track your weight loss. Having a visual measure of calories burned and/or the number of steps you’ve completed can be a good indicator to inform a calorie deficit. </p><p>But what about people who are struggling with eating disorders? Is this just another way to reinforce the resurgence of diet culture we’re seeing in the wider media? </p><p>For some people, seeing calories burned rise and calories consumed fall can become intoxicating. It won’t come as a surprise to you that right now we’re entering into a “skinny epidemic.” </p><p>This cultural term was popularized in the 2010s, marking a resurgence of the ‘90s diet culture that was coined as “heroin chic”. It’s a pendulum we see swing from celebrating larger bodies and then smaller bodies over time. It’s all directly impacted by the media we consume. </p><p>Wearables now come with software that can evaluate meals. Oura has Meals, and Garmin has its own nutrition tracking in the app. I asked Renee about how wearables could contribute to this, especially for people who have previously lived with eating disorders. She told me, “The main concern is that it keeps people ‘contained,’ and they don't rebuild the relationship with their bodies. Instead of listening and responding to their bodies, they follow an external cue which keeps them stuck. While they may believe it helps them to be ‘in control’ in reality, they are being controlled.”</p><p>The <a href="https://www.allianceforeatingdisorders.com/fitness-trackers/" target="_blank" rel="nofollow">Alliance For Eating Disorders</a> advises, “For individuals struggling with eating disorders, fitness trackers can act as a form of control, feeding into the disordered mindset that one’s worth is tied to their physical appearance, weight, and level of activity. The numbers on the screen can become a constant source of validation or anxiety. These numbers may be used to justify extreme exercise regimens or changes in eating behaviors.”</p><h2 id="where-does-ai-come-into-this">Where does AI come into this?</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="tm93DfDmbdqJfKrPrQEvoL" name="HONOR_Watch_5_Ultra_ 4.JPG" alt="A black Honor Watch 5 Ultra smartwatch for Android and iOS smartphones" src="https://cdn.mos.cms.futurecdn.net/tm93DfDmbdqJfKrPrQEvoL-1920-80.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: Tom's Guide)</span></figcaption></figure><p>It’s not just companion apps for fitness trackers that are enabling these behaviours. People are taking pictures of their food and uploading them to AI chatbots, like ChatGPT, and asking how many calories are in their food. This can be damaging and lead to fueling the body improperly, meaning cutting down on more calories than you need. </p><p>Renee says using AI this way is highly inaccurate. “It’s only as good as the information that has actually been put into these AI apps. The other key problem is that not all calories are equal… a calorie is an arbitrary unit of energy.</p><p>“It’s based on the energy yielded when you burn a food in a calorimeter. Humans are not calorimeters. So while a calorimeter may say a carrot provides 10 calories, a human cannot absorb all of those calories because most of it is indigestible due to the high fibre content.” </p><p>This means that when we’re told something is <em>X</em> calories, we’re not actually taking all of that in. So if we burn more to remain in a deficit for weight loss, it could be more dramatic than intended. </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="BP92hkF2pUYvoN3nJHUbFD" name="woman after run.shutterstock_2237030023" alt="woman checking fitness tracker after run" src="https://cdn.mos.cms.futurecdn.net/BP92hkF2pUYvoN3nJHUbFD-1920-80.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>With all of this said, wearable technology can also aid in food and exercise tracking when done properly. Renee says, “In the same way that tracking food and exercise can be problematic, if done in the right way — maybe by ensuring an appropriate app or working alongside a coach — the data being collected can provide key information to demonstrate that you may be lacking sufficient recovery or not fuelling appropriately, particularly carbohydrates, which are the most important macros required for optimal health and performance.”</p><p>So, how did we get to a point where we need a wearable to tell us what to eat? The only way to get reliable nutritional information tailored to you is by talking to a nutritionist or reaching out to a medical professional. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XpB9bW"></div>                            </div>                            <script src="https://kwizly.com/embed/XpB9bW.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/sleep-tech/i-paired-my-oura-ring-5-with-the-hatch-sleep-clock-to-track-my-nights-for-2-months-heres-why-its-become-the-ultimate-combination"><strong>I paired my Oura Ring 5 with the Hatch Sleep Clock to track my nights for 2 months — here's why it's become the ultimate combination</strong></a></li><li><a href="https://www.tomsguide.com/home/i-stopped-ants-from-taking-over-my-countertop-by-removing-this-one-kitchen-item"><strong>I stopped ants from taking over my countertop by removing this one kitchen item</strong></a></li><li><a href="https://www.tomsguide.com/home/5-kitchen-cleaning-shortcuts-that-do-the-hard-work-for-you"><strong>5 kitchen cleaning shortcuts that do the hard work for you</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/are-people-relying-too-heavily-on-ai-to-evaluate-their-fitness-and-could-wearables-be-promoting-unhealthy-eating-habits-i-spoke-to-a-leading-sports-dietitian-to-find-out</link>
                                                                            <description>
                            <![CDATA[ Wearables are a part of our everyday lives, but should we be taking everything they tell us as gospel? This is what a sports nutritionist had to say. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CLFTKfioXUPadRZzyRAQZc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ZboZsgWFC8tkUbuPZRQZXm-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 25 Oct 2026 10:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness Trackers]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Smartwatches]]></category>
                                                                                                <author><![CDATA[ ashley.thieme@futurenet.com (Ashley Thieme) ]]></author>                    <dc:creator><![CDATA[ Ashley Thieme ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3AWovHjApwuNrSGRS6WBcL-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ashley Thieme is a staff writer on the Reviews team at Tom’s Guide where she tests out the latest tech so you can know what’s going to be worth your time and money. She has a master’s degree in Magazine Journalism and a bachelor’s degree in Journalism, Media and Sociology from Cardiff University. She has bylines in titles including Women’s Health UK, sharing the latest health and wellness news stories, and Virgin Radio UK, providing the latest entertainment news and working on celebrity interviews. She has experience reporting on a variety of topics including music, literature, motorsport, entertainment and health. In previously published work, she has reviewed live music events, books, and wellness products. She values the importance of tech enhancing your life rather than taking over, and as a music fanatic, she is always looking for the best way to listen to new music releases. Discovering the top audio equipment that enhances sound quality and provides optimum comfort is what Ashley does best. In her spare time, Ashley enjoys hitting her reading goals on Goodreads by getting into the latest novels with a cup of tea as well as getting out in the Welsh mountains for a good hike on the weekend.&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/ZboZsgWFC8tkUbuPZRQZXm-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a photo of a woman looking at her fitness tracker]]></media:description>                                                            <media:text><![CDATA[a photo of a woman looking at her fitness tracker]]></media:text>
                                <media:title type="plain"><![CDATA[a photo of a woman looking at her fitness tracker]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ZboZsgWFC8tkUbuPZRQZXm-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A glance at the people around you on the train, walking down a busy street, or in the grocery store will tell you that the gym isn’t the only place people are wearing fitness trackers these days. </p><p>Devices like the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review">Apple Watch Series 12</a>, <a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review">Oura Ring 4</a>, or <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> have become more of a fashion accessory than strictly for tracking workouts. They’re a great way of tracking your training and seeing tangible evidence of your progress, but does everyone need one? I’m not so sure. </p><p>There’s a dark side to the tracking. Viewing burned calories so easily in an app can be an extremely triggering experience for some users, and it may even begin unhealthy habits like calorie counting and overexercising. So, let's go over the perks of these devices and discuss the science behind why they can also become harmful. </p><h2 id="fitness-tracker-or-calorie-counter">Fitness tracker or calorie counter</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:3520px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YVx5Aog8ZrwK7Ean8QHQPm" name="Oura Ring" alt="Oura Ring 5" src="https://cdn.mos.cms.futurecdn.net/YVx5Aog8ZrwK7Ean8QHQPm-1920-80.jpg" mos="" align="middle" fullscreen="" width="3520" height="1980" 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 majority of these smartwatches and smart rings track your health using metrics including sleep and activity. I’ve used these devices myself, and having a consistent way to make sure I’m getting enough rest as well as hitting my activity goals has been very helpful in my own fitness journey. </p><p>Recently, while testing these devices, I’ve noticed the introduction of calorie counting and ways to monitor food intake. This raises alarm bells for me, as while it’s important to track protein and nutrient intake for intense training, it’s not a feature every individual will need. </p><p>So now, with more people focusing on their food consumption alongside their training, could this lead to unhealthy eating habits taking hold? I spoke to leading sports dietician <a href="https://reneemcgregor.com/">Renee McGregor</a> to find out about the effect it may have.</p><p>She said, “A lot of these apps are built on the archaic equation and reduce a human to calories in versus calories out. Humans are much more complex than this, and so this setup often leads to underfuelling, especially in those individuals who are highly active.”</p><h2 id="a-healthy-lifestyle-or-an-obsession">A healthy lifestyle or an obsession</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="6PCNc5D6bFFGGF4cTsshtb" name="Amazfit Bip 6" alt="The Amazfit Bip 6 smartwatch photographed in front of a blue background" src="https://cdn.mos.cms.futurecdn.net/6PCNc5D6bFFGGF4cTsshtb-1920-80.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: Tom's Guide)</span></figcaption></figure><p>Although there’s some inaccuracy, these activity and food tracking features are excellent if you want to track your weight loss. Having a visual measure of calories burned and/or the number of steps you’ve completed can be a good indicator to inform a calorie deficit. </p><p>But what about people who are struggling with eating disorders? Is this just another way to reinforce the resurgence of diet culture we’re seeing in the wider media? </p><p>For some people, seeing calories burned rise and calories consumed fall can become intoxicating. It won’t come as a surprise to you that right now we’re entering into a “skinny epidemic.” </p><p>This cultural term was popularized in the 2010s, marking a resurgence of the ‘90s diet culture that was coined as “heroin chic”. It’s a pendulum we see swing from celebrating larger bodies and then smaller bodies over time. It’s all directly impacted by the media we consume. </p><p>Wearables now come with software that can evaluate meals. Oura has Meals, and Garmin has its own nutrition tracking in the app. I asked Renee about how wearables could contribute to this, especially for people who have previously lived with eating disorders. She told me, “The main concern is that it keeps people ‘contained,’ and they don't rebuild the relationship with their bodies. Instead of listening and responding to their bodies, they follow an external cue which keeps them stuck. While they may believe it helps them to be ‘in control’ in reality, they are being controlled.”</p><p>The <a href="https://www.allianceforeatingdisorders.com/fitness-trackers/" target="_blank" rel="nofollow">Alliance For Eating Disorders</a> advises, “For individuals struggling with eating disorders, fitness trackers can act as a form of control, feeding into the disordered mindset that one’s worth is tied to their physical appearance, weight, and level of activity. The numbers on the screen can become a constant source of validation or anxiety. These numbers may be used to justify extreme exercise regimens or changes in eating behaviors.”</p><h2 id="where-does-ai-come-into-this">Where does AI come into this?</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="tm93DfDmbdqJfKrPrQEvoL" name="HONOR_Watch_5_Ultra_ 4.JPG" alt="A black Honor Watch 5 Ultra smartwatch for Android and iOS smartphones" src="https://cdn.mos.cms.futurecdn.net/tm93DfDmbdqJfKrPrQEvoL-1920-80.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: Tom's Guide)</span></figcaption></figure><p>It’s not just companion apps for fitness trackers that are enabling these behaviours. People are taking pictures of their food and uploading them to AI chatbots, like ChatGPT, and asking how many calories are in their food. This can be damaging and lead to fueling the body improperly, meaning cutting down on more calories than you need. </p><p>Renee says using AI this way is highly inaccurate. “It’s only as good as the information that has actually been put into these AI apps. The other key problem is that not all calories are equal… a calorie is an arbitrary unit of energy.</p><p>“It’s based on the energy yielded when you burn a food in a calorimeter. Humans are not calorimeters. So while a calorimeter may say a carrot provides 10 calories, a human cannot absorb all of those calories because most of it is indigestible due to the high fibre content.” </p><p>This means that when we’re told something is <em>X</em> calories, we’re not actually taking all of that in. So if we burn more to remain in a deficit for weight loss, it could be more dramatic than intended. </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="BP92hkF2pUYvoN3nJHUbFD" name="woman after run.shutterstock_2237030023" alt="woman checking fitness tracker after run" src="https://cdn.mos.cms.futurecdn.net/BP92hkF2pUYvoN3nJHUbFD-1920-80.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>With all of this said, wearable technology can also aid in food and exercise tracking when done properly. Renee says, “In the same way that tracking food and exercise can be problematic, if done in the right way — maybe by ensuring an appropriate app or working alongside a coach — the data being collected can provide key information to demonstrate that you may be lacking sufficient recovery or not fuelling appropriately, particularly carbohydrates, which are the most important macros required for optimal health and performance.”</p><p>So, how did we get to a point where we need a wearable to tell us what to eat? The only way to get reliable nutritional information tailored to you is by talking to a nutritionist or reaching out to a medical professional. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XpB9bW"></div>                            </div>                            <script src="https://kwizly.com/embed/XpB9bW.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/sleep-tech/i-paired-my-oura-ring-5-with-the-hatch-sleep-clock-to-track-my-nights-for-2-months-heres-why-its-become-the-ultimate-combination"><strong>I paired my Oura Ring 5 with the Hatch Sleep Clock to track my nights for 2 months — here's why it's become the ultimate combination</strong></a></li><li><a href="https://www.tomsguide.com/home/i-stopped-ants-from-taking-over-my-countertop-by-removing-this-one-kitchen-item"><strong>I stopped ants from taking over my countertop by removing this one kitchen item</strong></a></li><li><a href="https://www.tomsguide.com/home/5-kitchen-cleaning-shortcuts-that-do-the-hard-work-for-you"><strong>5 kitchen cleaning shortcuts that do the hard work for you</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Keep waking up at 3 a.m.? This is what sleep doctors want you to know ]]></title>
                                                                                                <dc:content><![CDATA[ <p>As someone who goes through periods of experiencing them frequently, I know how frustrating it is to keep<a href="https://www.tomsguide.com/wellness/sleep-problems/4-nighttime-habits-ruining-your-sleep-and-how-to-sleep-through-the-night-again"> waking up at 3 a.m.</a> and not know why. It feels as though while everyone else is sound asleep, you’re staring at the clock or the ceiling, wondering how you’re going to get through another day in a fog of exhaustion. <br><br>“Waking up during the night is normal,” reassures <a href="https://www.wchriswinter.com/#/" target="_blank">Dr. Chris Winter</a>, a double boarded sleep specialist. “We cycle through lighter and deeper sleep roughly every 90 minutes, and brief awakenings between cycles are part of healthy sleep. It only becomes a problem when you’re suddenly alert and can’t drift back off.”</p><p>If repeatedly waking up at 3 a.m. and not being able to fall back asleep is stopping you from getting the rest you need, these are the common causes. </p><ul><li><strong>Read more: </strong><a href="https://www.tomsguide.com/wellness/sleep/i-was-tossing-and-turning-all-night-until-i-made-this-2-second-tweak-to-my-bedtime-routine-experts-explains-why-it-works">I was tossing and turning all night until I made this 2-second tweak to my bedtime routine — experts explains why it works</a></li></ul><h3 class="article-body__section" id="section-why-do-i-keep-waking-up-at-3-a-m-5-common-causes"><span>Why do I keep waking up at 3 a.m.? 5 common causes</span></h3><p>Brief nighttime awakenings are normal. However, they become a problem when they impact the overall quality of your sleep. These are their common underlying causes:  </p><h2 id="1-stress-and-anxiety">1. Stress and anxiety</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="4rEESsqkzzHfyTp96QmeQY" name="Can't sleep" alt="The image shows a blonde haired woman sitting up in bed inside a dark bedroom.  Her knees are bent and her hands are placed over her face." src="https://cdn.mos.cms.futurecdn.net/4rEESsqkzzHfyTp96QmeQY-1920-80.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: Getty Images)</span></figcaption></figure><p><a href="https://www.tomsguide.com/wellness/sleep/cortisol">Cortisol,</a> the 'stress' hormone, begins rising around 3 a.m. Our bodies produce cortisol to help us feel alert upon waking — this is called our Cortisol Awakening Response (CAR). <br><br>However, if your baseline level of cortisol is already high, due to stress or anxiety, this natural climb can be enough to wake you up. <br><br>"Cortisol starts its natural morning climb, and stress can push that rise earlier," explains Dr. Winter, a board certified neurologist with over 30 years of clinical experience.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-egK6Ke"></div>                            </div>                            <script src="https://kwizly.com/embed/egK6Ke.js" async></script><h2 id="2-insomnia-and-underlying-sleep-issues">2. Insomnia and underlying sleep issues </h2><p>Your <a href="https://www.tomsguide.com/wellness/sleep/i-tried-the-7-1-sleep-rule-doctors-rate-as-the-best-way-to-stop-3-a-m-wake-ups-heres-why-it-works">3 a.m. wake-ups</a> could be caused by an underlying sleep issue, such as <a href="https://www.tomsguide.com/features/insomnia-what-is-it-whats-the-cause-and-how-to-tackle-it">insomnia. </a>This is  characterized by difficulty falling and staying asleep, as well as waking up at night.<br><br>"Other common culprits include <a href="https://www.tomsguide.com/wellness/sleep/what-is-nocturia-and-why-is-it-bad-news-for-your-sleep-we-ask-an-expert">needing to urinate</a>, acid reflux, and <a href="https://www.tomsguide.com/wellness/sleep-problems/sleep-apnea">sleep apnea</a>," says Dr. Winter. "If you’re snoring loudly, waking up gasping, or feeling unrefreshed no matter how long you sleep, talk to your doctor."</p><h2 id="3-temperature-fluctuations">3. Temperature fluctuations </h2><p>Studies suggest that the <a href="https://www.tomsguide.com/reference/the-best-temperature-for-sleeping">best temperature for sleep</a> is between 65 to 70° F (18 to 21 °C). When our sleep environment deviates outside of this window, it can cause us to wake up. <br><br>"Temperature is a big one," explains Dr. Winter. "Your core body temperature needs to drop to keep you asleep, so a warm bedroom, heavy bedding, or hormonal changes like menopause can pull you out of sleep early."</p><h2 id="4-alcohol-food-and-caffeine-consumption">4. Alcohol, food and caffeine consumption </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="xGeX665mmQKbWiSWF4LMBk" name="Untitled design (3).png" alt="A woman sat on the edge of her bed with her chin rested in her hand and a glass of wine in the other" src="https://cdn.mos.cms.futurecdn.net/xGeX665mmQKbWiSWF4LMBk-1920-80.png" 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: Getty Images)</span></figcaption></figure><p>You might not have connected the dots between your lifestyle habits and waking up at night, but late heavy meals, alcohol and caffeine consumption can wreak havoc on your ability to stay asleep. <br><br>"Alcohol plays a role too; as your body metabolizes it, sleep becomes fragmented," explains Dr. Winter, who is a member of <a href="https://www.natrol.com/pages/scientific-advisory-board" target="_blank">Natrol Scientific Advisory Board.</a> </p><h2 id="5-your-bedroom-environment">5. Your bedroom environment</h2><p>Clutter, an uncomfortable mattress and ambient light from your electrical cables can all cause sleep disturbances that lead to 3 a.m. wake ups. To give yourself a fighting chance of staying asleep all night, ensure your bedroom is cool, calm and comfortable (if you're looking for a new one, check out our guide to the <a href="https://www.tomsguide.com/mattresses/best-mattress">best mattress</a>).</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nfyuMKwhgXG4H2PVYibqNh" name="Studio shot from mattress testing.JPG" alt="A mattress we tested is dressed with neutral colour bed linens and pillows" src="https://cdn.mos.cms.futurecdn.net/nfyuMKwhgXG4H2PVYibqNh-1920-80.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><h3 class="article-body__section" id="section-3-things-you-can-do-to-stop-waking-up-at-3-a-m"><span>3 things you can do to stop waking up at 3 a.m.</span></h3><p>Some causes of 3 a.m. wake ups require medical intervention, such as sleep apnea. However, there is also plenty of lifestyle tweaks we can make to lower our chances of waking up at night.</p><h2 id="1-stick-to-a-consistent-sleep-schedule">1. Stick to a consistent sleep schedule</h2><p>Overwhelming evidence supports the idea that a regular sleep schedule can help you fall asleep faster and stay asleep longer. If you're someone who has a fairly erratic bedtime and going to sleep at the same time initially feels like a struggle, Dr. Winter recommends that you initially focus on the time you wake up. <br><br>"Start with a consistent wake time, weekends included," says Dr. Winter. "It anchors your circadian rhythm and makes your <a href="https://www.tomsguide.com/wellness/sleep/im-getting-38-minutes-more-deep-sleep-a-night-thanks-to-this-10-min-habit-and-it-fixed-my-3-a-m-wake-ups">sleep deeper</a> and more stable." </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="W5K7xVtTGFyn2ew952nPQc" name="tg_sleepfrances in dark" alt="Sleep writer Frances Daniels sleeps in a bed in a dimly lit room" src="https://cdn.mos.cms.futurecdn.net/W5K7xVtTGFyn2ew952nPQc-1920-80.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><h2 id="2-make-yourself-tired">2. Make yourself tired </h2><p>From the moment we wake up, something called our <a href="https://www.tomsguide.com/wellness/sleep/i-was-struggling-to-fall-asleep-yet-waking-up-at-3-a-m-until-an-expert-made-this-simple-change-to-my-routine">sleep pressure</a> builds. It's also referred to as our homeostatic sleep drive or sleep hunger, and describes how ready we are for sleep. It reaches its pinnacle as we fall asleep, which is when our sleep pressure drops again. <br><br>Our sleep pressure is dictated by a neurotransmitter called adenosine. There are certain things we can do in order to produce more adenosine so that our sleep pressure is higher, making falling and staying asleep easier. <br><br>This includes <a href="https://www.tomsguide.com/wellness/sleep/im-getting-38-minutes-more-deep-sleep-a-night-thanks-to-this-10-min-habit-and-it-fixed-my-3-a-m-wake-ups">daily exercise</a> and mental stimulation. As our sleep pressure builds the longer we stay awake, waking up early and skipping any afternoon naps ensures you're going into bedtime with a healthy amount of sleep pressure. </p><h2 id="3-tackle-your-stress-head-on">3. Tackle your stress head on </h2><p>If, like me, stress is a barrier to a decent night's sleep, it's time to tackle it head on. The cause of your stress or anxiety could be related to hormone fluctuations caused by perimenopause or menopause, which could benefit from seeing a doctor. </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:5700px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="ef4KCiDiomFNahayarwZPa" name="Woman writing in a journal in bed at night." alt="A woman lies in bed wearing a dressing gown as she writes in a journal." src="https://cdn.mos.cms.futurecdn.net/ef4KCiDiomFNahayarwZPa-1920-80.jpg" mos="" align="middle" fullscreen="" width="5700" height="3800" 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>However, for day to stress, Dr. Winter recommends spending some time before bed offloading your thoughts onto a piece of paper. "If stress is a factor, spend 15 minutes in the early evening writing down what’s on your mind," says the sleep doctor. "It’s easier to let go of something at 3 a.m. if it’s already on paper."<br><br>For me personally, I have found that a combination of short bursts of daily exercise and a regular wind down routine helps stop stress from waking me up at night. I've also tried <a href="https://www.tomsguide.com/wellness/sleep-tech/sensate-vagus-nerve-stimulator">vagus nerve stimulation</a>, which I do recommend if daily stress is stopping you from sleeping. </p><h3 class="article-body__section" id="section-how-to-fall-back-to-sleep-fast"><span>How to fall back to sleep fast</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="DvNQGn63UZ2REVu2UyLr4P" name="Apple Watch series 11 becky" alt="A close up of a woman lying in bed wearing an Apple Watch" src="https://cdn.mos.cms.futurecdn.net/DvNQGn63UZ2REVu2UyLr4P-1920-80.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>In the event that you do wake up at 3 a.m., don't panic. Here's how to fall back to sleep fast. </p><ul><li><strong>Don't watch the clock: </strong>"Once you see the time, your brain starts calculating how much sleep you have left, and that worry keeps you awake," says Dr. Winter. "Turn the clock around and keep your phone across the room."</li><li><strong>Trick your mind into switching off: </strong><a href="https://www.tomsguide.com/wellness/sleep/cognitive-shuffling">Cognitive shuffling</a> is the practice of visualizing random thoughts to break the cycle of rumination. Pick a word, such as 'sleep' and work through as many objects as you can that begin with each letter.</li><li><strong>Practice the 15 minute rule: </strong>If you haven't fallen back to sleep within 15 minutes, Dr. Winter advises getting out of bed. "If frustration sets in, get up, go somewhere dim, and do something calm, like reading a physical book, until you feel sleepy again."</li><li><strong>Kick off a layer: </strong>"If you wake up warm, cool down first," says Dr. Winter. "Kick off a layer. A cooler body is a sleepier body."</li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep/keep-waking-up-at-3-a-m-this-is-what-sleep-doctors-want-you-to-know</link>
                                                                            <description>
                            <![CDATA[ Sleep doctors outline the common causes of your 3 a.m. wake ups, plus how to fix them so you can stay asleep all night. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5icu6gRLRwgBq7hnszq3qK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/T8rHTbtX8phDTuXBcEh4sb-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 25 Oct 2026 10:15:00 +0000</pubDate>                                                                                                                                <updated>Mon, 26 Oct 2026 09:46:09 +0000</updated>
                                                                                                                                            <category><![CDATA[Sleep]]></category>
                                                    <category><![CDATA[Sleep Problems]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nicola Appleton ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/K2anUY2W7BNEiVbcZvw3iV-320-70.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/T8rHTbtX8phDTuXBcEh4sb-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A woman lies in bed in the dark looking at an alarm clock she holds in her hand, showing the time is 3 a.m. ]]></media:description>                                                            <media:text><![CDATA[A woman lies in bed in the dark looking at an alarm clock she holds in her hand, showing the time is 3 a.m. ]]></media:text>
                                <media:title type="plain"><![CDATA[A woman lies in bed in the dark looking at an alarm clock she holds in her hand, showing the time is 3 a.m. ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/T8rHTbtX8phDTuXBcEh4sb-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As someone who goes through periods of experiencing them frequently, I know how frustrating it is to keep<a href="https://www.tomsguide.com/wellness/sleep-problems/4-nighttime-habits-ruining-your-sleep-and-how-to-sleep-through-the-night-again"> waking up at 3 a.m.</a> and not know why. It feels as though while everyone else is sound asleep, you’re staring at the clock or the ceiling, wondering how you’re going to get through another day in a fog of exhaustion. <br><br>“Waking up during the night is normal,” reassures <a href="https://www.wchriswinter.com/#/" target="_blank">Dr. Chris Winter</a>, a double boarded sleep specialist. “We cycle through lighter and deeper sleep roughly every 90 minutes, and brief awakenings between cycles are part of healthy sleep. It only becomes a problem when you’re suddenly alert and can’t drift back off.”</p><p>If repeatedly waking up at 3 a.m. and not being able to fall back asleep is stopping you from getting the rest you need, these are the common causes. </p><ul><li><strong>Read more: </strong><a href="https://www.tomsguide.com/wellness/sleep/i-was-tossing-and-turning-all-night-until-i-made-this-2-second-tweak-to-my-bedtime-routine-experts-explains-why-it-works">I was tossing and turning all night until I made this 2-second tweak to my bedtime routine — experts explains why it works</a></li></ul><h3 class="article-body__section" id="section-why-do-i-keep-waking-up-at-3-a-m-5-common-causes"><span>Why do I keep waking up at 3 a.m.? 5 common causes</span></h3><p>Brief nighttime awakenings are normal. However, they become a problem when they impact the overall quality of your sleep. These are their common underlying causes:  </p><h2 id="1-stress-and-anxiety">1. Stress and anxiety</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="4rEESsqkzzHfyTp96QmeQY" name="Can't sleep" alt="The image shows a blonde haired woman sitting up in bed inside a dark bedroom.  Her knees are bent and her hands are placed over her face." src="https://cdn.mos.cms.futurecdn.net/4rEESsqkzzHfyTp96QmeQY-1920-80.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: Getty Images)</span></figcaption></figure><p><a href="https://www.tomsguide.com/wellness/sleep/cortisol">Cortisol,</a> the 'stress' hormone, begins rising around 3 a.m. Our bodies produce cortisol to help us feel alert upon waking — this is called our Cortisol Awakening Response (CAR). <br><br>However, if your baseline level of cortisol is already high, due to stress or anxiety, this natural climb can be enough to wake you up. <br><br>"Cortisol starts its natural morning climb, and stress can push that rise earlier," explains Dr. Winter, a board certified neurologist with over 30 years of clinical experience.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-egK6Ke"></div>                            </div>                            <script src="https://kwizly.com/embed/egK6Ke.js" async></script><h2 id="2-insomnia-and-underlying-sleep-issues">2. Insomnia and underlying sleep issues </h2><p>Your <a href="https://www.tomsguide.com/wellness/sleep/i-tried-the-7-1-sleep-rule-doctors-rate-as-the-best-way-to-stop-3-a-m-wake-ups-heres-why-it-works">3 a.m. wake-ups</a> could be caused by an underlying sleep issue, such as <a href="https://www.tomsguide.com/features/insomnia-what-is-it-whats-the-cause-and-how-to-tackle-it">insomnia. </a>This is  characterized by difficulty falling and staying asleep, as well as waking up at night.<br><br>"Other common culprits include <a href="https://www.tomsguide.com/wellness/sleep/what-is-nocturia-and-why-is-it-bad-news-for-your-sleep-we-ask-an-expert">needing to urinate</a>, acid reflux, and <a href="https://www.tomsguide.com/wellness/sleep-problems/sleep-apnea">sleep apnea</a>," says Dr. Winter. "If you’re snoring loudly, waking up gasping, or feeling unrefreshed no matter how long you sleep, talk to your doctor."</p><h2 id="3-temperature-fluctuations">3. Temperature fluctuations </h2><p>Studies suggest that the <a href="https://www.tomsguide.com/reference/the-best-temperature-for-sleeping">best temperature for sleep</a> is between 65 to 70° F (18 to 21 °C). When our sleep environment deviates outside of this window, it can cause us to wake up. <br><br>"Temperature is a big one," explains Dr. Winter. "Your core body temperature needs to drop to keep you asleep, so a warm bedroom, heavy bedding, or hormonal changes like menopause can pull you out of sleep early."</p><h2 id="4-alcohol-food-and-caffeine-consumption">4. Alcohol, food and caffeine consumption </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="xGeX665mmQKbWiSWF4LMBk" name="Untitled design (3).png" alt="A woman sat on the edge of her bed with her chin rested in her hand and a glass of wine in the other" src="https://cdn.mos.cms.futurecdn.net/xGeX665mmQKbWiSWF4LMBk-1920-80.png" 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: Getty Images)</span></figcaption></figure><p>You might not have connected the dots between your lifestyle habits and waking up at night, but late heavy meals, alcohol and caffeine consumption can wreak havoc on your ability to stay asleep. <br><br>"Alcohol plays a role too; as your body metabolizes it, sleep becomes fragmented," explains Dr. Winter, who is a member of <a href="https://www.natrol.com/pages/scientific-advisory-board" target="_blank">Natrol Scientific Advisory Board.</a> </p><h2 id="5-your-bedroom-environment">5. Your bedroom environment</h2><p>Clutter, an uncomfortable mattress and ambient light from your electrical cables can all cause sleep disturbances that lead to 3 a.m. wake ups. To give yourself a fighting chance of staying asleep all night, ensure your bedroom is cool, calm and comfortable (if you're looking for a new one, check out our guide to the <a href="https://www.tomsguide.com/mattresses/best-mattress">best mattress</a>).</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nfyuMKwhgXG4H2PVYibqNh" name="Studio shot from mattress testing.JPG" alt="A mattress we tested is dressed with neutral colour bed linens and pillows" src="https://cdn.mos.cms.futurecdn.net/nfyuMKwhgXG4H2PVYibqNh-1920-80.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><h3 class="article-body__section" id="section-3-things-you-can-do-to-stop-waking-up-at-3-a-m"><span>3 things you can do to stop waking up at 3 a.m.</span></h3><p>Some causes of 3 a.m. wake ups require medical intervention, such as sleep apnea. However, there is also plenty of lifestyle tweaks we can make to lower our chances of waking up at night.</p><h2 id="1-stick-to-a-consistent-sleep-schedule">1. Stick to a consistent sleep schedule</h2><p>Overwhelming evidence supports the idea that a regular sleep schedule can help you fall asleep faster and stay asleep longer. If you're someone who has a fairly erratic bedtime and going to sleep at the same time initially feels like a struggle, Dr. Winter recommends that you initially focus on the time you wake up. <br><br>"Start with a consistent wake time, weekends included," says Dr. Winter. "It anchors your circadian rhythm and makes your <a href="https://www.tomsguide.com/wellness/sleep/im-getting-38-minutes-more-deep-sleep-a-night-thanks-to-this-10-min-habit-and-it-fixed-my-3-a-m-wake-ups">sleep deeper</a> and more stable." </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="W5K7xVtTGFyn2ew952nPQc" name="tg_sleepfrances in dark" alt="Sleep writer Frances Daniels sleeps in a bed in a dimly lit room" src="https://cdn.mos.cms.futurecdn.net/W5K7xVtTGFyn2ew952nPQc-1920-80.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><h2 id="2-make-yourself-tired">2. Make yourself tired </h2><p>From the moment we wake up, something called our <a href="https://www.tomsguide.com/wellness/sleep/i-was-struggling-to-fall-asleep-yet-waking-up-at-3-a-m-until-an-expert-made-this-simple-change-to-my-routine">sleep pressure</a> builds. It's also referred to as our homeostatic sleep drive or sleep hunger, and describes how ready we are for sleep. It reaches its pinnacle as we fall asleep, which is when our sleep pressure drops again. <br><br>Our sleep pressure is dictated by a neurotransmitter called adenosine. There are certain things we can do in order to produce more adenosine so that our sleep pressure is higher, making falling and staying asleep easier. <br><br>This includes <a href="https://www.tomsguide.com/wellness/sleep/im-getting-38-minutes-more-deep-sleep-a-night-thanks-to-this-10-min-habit-and-it-fixed-my-3-a-m-wake-ups">daily exercise</a> and mental stimulation. As our sleep pressure builds the longer we stay awake, waking up early and skipping any afternoon naps ensures you're going into bedtime with a healthy amount of sleep pressure. </p><h2 id="3-tackle-your-stress-head-on">3. Tackle your stress head on </h2><p>If, like me, stress is a barrier to a decent night's sleep, it's time to tackle it head on. The cause of your stress or anxiety could be related to hormone fluctuations caused by perimenopause or menopause, which could benefit from seeing a doctor. </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:5700px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="ef4KCiDiomFNahayarwZPa" name="Woman writing in a journal in bed at night." alt="A woman lies in bed wearing a dressing gown as she writes in a journal." src="https://cdn.mos.cms.futurecdn.net/ef4KCiDiomFNahayarwZPa-1920-80.jpg" mos="" align="middle" fullscreen="" width="5700" height="3800" 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>However, for day to stress, Dr. Winter recommends spending some time before bed offloading your thoughts onto a piece of paper. "If stress is a factor, spend 15 minutes in the early evening writing down what’s on your mind," says the sleep doctor. "It’s easier to let go of something at 3 a.m. if it’s already on paper."<br><br>For me personally, I have found that a combination of short bursts of daily exercise and a regular wind down routine helps stop stress from waking me up at night. I've also tried <a href="https://www.tomsguide.com/wellness/sleep-tech/sensate-vagus-nerve-stimulator">vagus nerve stimulation</a>, which I do recommend if daily stress is stopping you from sleeping. </p><h3 class="article-body__section" id="section-how-to-fall-back-to-sleep-fast"><span>How to fall back to sleep fast</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="DvNQGn63UZ2REVu2UyLr4P" name="Apple Watch series 11 becky" alt="A close up of a woman lying in bed wearing an Apple Watch" src="https://cdn.mos.cms.futurecdn.net/DvNQGn63UZ2REVu2UyLr4P-1920-80.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>In the event that you do wake up at 3 a.m., don't panic. Here's how to fall back to sleep fast. </p><ul><li><strong>Don't watch the clock: </strong>"Once you see the time, your brain starts calculating how much sleep you have left, and that worry keeps you awake," says Dr. Winter. "Turn the clock around and keep your phone across the room."</li><li><strong>Trick your mind into switching off: </strong><a href="https://www.tomsguide.com/wellness/sleep/cognitive-shuffling">Cognitive shuffling</a> is the practice of visualizing random thoughts to break the cycle of rumination. Pick a word, such as 'sleep' and work through as many objects as you can that begin with each letter.</li><li><strong>Practice the 15 minute rule: </strong>If you haven't fallen back to sleep within 15 minutes, Dr. Winter advises getting out of bed. "If frustration sets in, get up, go somewhere dim, and do something calm, like reading a physical book, until you feel sleepy again."</li><li><strong>Kick off a layer: </strong>"If you wake up warm, cool down first," says Dr. Winter. "Kick off a layer. A cooler body is a sleepier body."</li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ A new study says this type of exercise is linked to a 36% lower risk of death, and I'm pretty surprised ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you needed any more reason to take up Pilates or yoga this year, emerging research just gave you one. According to a study, Pilates can lower the risk of death by 36%, with yoga not far behind. </p><p>We love a<a href="https://www.tomsguide.com/news/yoga-vs-pilates-which-burns-more-calories"> Pilates and yoga</a> practice here at Tom's Guide, but I was surprised by this news. Check out the details of the study below, and let us know whether this could convince you to start a practice by leaving a comment!</p><h2 id="what-is-the-study">What is the study?</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:3541px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="95rG4syEXKAauo2a8gHMsA" name="shutterstock_2175526501" alt="a woman doing Pilates" src="https://cdn.mos.cms.futurecdn.net/95rG4syEXKAauo2a8gHMsA-1920-80.jpg" mos="" align="middle" fullscreen="" width="3541" height="1992" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>A new <a href="https://news.asu.edu/20260904-health-and-medicine-asu-researchers-find-yoga-and-pilates-associated-longer-lifespans" target="_blank" rel="nofollow">study from Arizona State University</a> examined more than 55,000 U.S. adults and found that <strong>Pilates was associated with a 36% lower risk of death, while yoga was linked to a 27% lower risk.</strong> </p><p>Of 21 alternative health practices studied, Pilates and yoga were the only two associated with significantly lower mortality.</p><p>From the research, we can't establish a direct cause-and-effect relationship, but the findings raise interesting questions about the impact of movement, strength, balance, stress reduction and social connection on longevity and healthy aging.</p><div><blockquote><p>A new study from Arizona State University examined more than 55,000 U.S. adults and found that Pilates was associated with a 36% lower risk of death, while yoga was linked to a 27% lower risk. </p></blockquote></div><p>In a recent study, ASU Associate Professor Connor Sheehan and other researchers discovered that only yoga and Pilates "were associated with a significant decrease in the risk of death." </p><p>According to Sheehan, both practices improve balance and stress management and "offer a social component," which are "key contributors to longevity." However, despite the findings, further research is needed to determine causation.</p><p>We're living in a time where everyone wants to know the hacks for anti-aging and longevity. “Americans are spending billions on complementary and alternative medicine,” said Sheehan. “More than 40% of adults use at least one practice, from acupuncture to chiropractic care to specialized diets. But we actually know very little about whether any of these practices are associated with living longer.”</p><p>The researchers used "nationally representative data" from over 55,000 U.S. adults and linked to mortality records over roughly a decade. Many other practices like acupuncture and homeopathy showed "no significant association with mortality after researchers accounted for demographic and health differences between users and non-users."</p><p>Interestingly, the practices moving the needle most for boosting longevity are ones that combine movement, strengthening, social connection and mental wellbeing. That means it’s never too late to <a href="https://www.tomsguide.com/wellness/fitness/i-did-yoga-every-day-for-a-month-for-the-first-time-in-10-years-heres-what-happened-to-my-body">start a yoga routine</a>, take up <a href="https://www.tomsguide.com/features/3-things-i-wish-i-had-known-as-a-pilates-beginner">Pilates</a>, or even head to your local gym or community center to see what social exercise clubs you can join. </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/DewgqlzAdTN/" target="_blank">A post shared by Tom's Guide Fitness | Workout Tips & Gear (@tomsguidefitness)</a></p><p>A photo posted by </p></blockquote></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/forget-running-and-swimming-study-finds-this-sport-adds-10-years-to-your-life" target="_blank">Forget running and swimming — study finds this sport adds 10 years to your life</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/44-year-study-reveals-this-workout-reduces-dementia-risk-by-88-percent" target="_blank">New study reveals cycling can reduce dementia risk by 88%</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/new-study-shows-you-can-exercise-less-and-see-better-results-heres-exactly-how" target="_blank">Work out less and get better results — a new study says this is exactly how</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/a-new-study-says-this-type-of-exercise-is-linked-to-a-36-percent-lower-risk-of-death-and-im-pretty-surprised</link>
                                                                            <description>
                            <![CDATA[ A new study from Arizona State University examining more than 55,000 U.S. adults found thatPilates was associated with a 36% lower risk of death, while yoga was linked to a 27% lower risk. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DwJQwkfPzpF64nVuLQMnRN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/nZXwP72cy9fNqTqZKbMyZV-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 25 Oct 2026 08:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></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-320-70.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;Live Science&lt;/a&gt;,&lt;a href=&quot;https://www.fitandwell.com/author/sam-hopes&quot;&gt; Fit&amp;amp;Well&lt;/a&gt;,&lt;a href=&quot;https://www.coachweb.com/author/sam-hopes&quot;&gt; Coach&lt;/a&gt;, and T3. &lt;/p&gt;&lt;p&gt;Having worked with fitness studios like F45 and Virgin Active and trained both group and 1:1, Sam now primarily teaches outdoor bootcamps, bodyweight, 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, Pilates 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, mindfulness, 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/nZXwP72cy9fNqTqZKbMyZV-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a woman holding a Pilates ball]]></media:description>                                                            <media:text><![CDATA[a woman holding a Pilates ball]]></media:text>
                                <media:title type="plain"><![CDATA[a woman holding a Pilates ball]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/nZXwP72cy9fNqTqZKbMyZV-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you needed any more reason to take up Pilates or yoga this year, emerging research just gave you one. According to a study, Pilates can lower the risk of death by 36%, with yoga not far behind. </p><p>We love a<a href="https://www.tomsguide.com/news/yoga-vs-pilates-which-burns-more-calories"> Pilates and yoga</a> practice here at Tom's Guide, but I was surprised by this news. Check out the details of the study below, and let us know whether this could convince you to start a practice by leaving a comment!</p><h2 id="what-is-the-study">What is the study?</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:3541px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="95rG4syEXKAauo2a8gHMsA" name="shutterstock_2175526501" alt="a woman doing Pilates" src="https://cdn.mos.cms.futurecdn.net/95rG4syEXKAauo2a8gHMsA-1920-80.jpg" mos="" align="middle" fullscreen="" width="3541" height="1992" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>A new <a href="https://news.asu.edu/20260904-health-and-medicine-asu-researchers-find-yoga-and-pilates-associated-longer-lifespans" target="_blank" rel="nofollow">study from Arizona State University</a> examined more than 55,000 U.S. adults and found that <strong>Pilates was associated with a 36% lower risk of death, while yoga was linked to a 27% lower risk.</strong> </p><p>Of 21 alternative health practices studied, Pilates and yoga were the only two associated with significantly lower mortality.</p><p>From the research, we can't establish a direct cause-and-effect relationship, but the findings raise interesting questions about the impact of movement, strength, balance, stress reduction and social connection on longevity and healthy aging.</p><div><blockquote><p>A new study from Arizona State University examined more than 55,000 U.S. adults and found that Pilates was associated with a 36% lower risk of death, while yoga was linked to a 27% lower risk. </p></blockquote></div><p>In a recent study, ASU Associate Professor Connor Sheehan and other researchers discovered that only yoga and Pilates "were associated with a significant decrease in the risk of death." </p><p>According to Sheehan, both practices improve balance and stress management and "offer a social component," which are "key contributors to longevity." However, despite the findings, further research is needed to determine causation.</p><p>We're living in a time where everyone wants to know the hacks for anti-aging and longevity. “Americans are spending billions on complementary and alternative medicine,” said Sheehan. “More than 40% of adults use at least one practice, from acupuncture to chiropractic care to specialized diets. But we actually know very little about whether any of these practices are associated with living longer.”</p><p>The researchers used "nationally representative data" from over 55,000 U.S. adults and linked to mortality records over roughly a decade. Many other practices like acupuncture and homeopathy showed "no significant association with mortality after researchers accounted for demographic and health differences between users and non-users."</p><p>Interestingly, the practices moving the needle most for boosting longevity are ones that combine movement, strengthening, social connection and mental wellbeing. That means it’s never too late to <a href="https://www.tomsguide.com/wellness/fitness/i-did-yoga-every-day-for-a-month-for-the-first-time-in-10-years-heres-what-happened-to-my-body">start a yoga routine</a>, take up <a href="https://www.tomsguide.com/features/3-things-i-wish-i-had-known-as-a-pilates-beginner">Pilates</a>, or even head to your local gym or community center to see what social exercise clubs you can join. </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/DewgqlzAdTN/" target="_blank">A post shared by Tom's Guide Fitness | Workout Tips & Gear (@tomsguidefitness)</a></p><p>A photo posted by </p></blockquote></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/forget-running-and-swimming-study-finds-this-sport-adds-10-years-to-your-life" target="_blank">Forget running and swimming — study finds this sport adds 10 years to your life</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/44-year-study-reveals-this-workout-reduces-dementia-risk-by-88-percent" target="_blank">New study reveals cycling can reduce dementia risk by 88%</a></li><li><a href="https://www.tomsguide.com/wellness/fitness/new-study-shows-you-can-exercise-less-and-see-better-results-heres-exactly-how" target="_blank">Work out less and get better results — a new study says this is exactly how</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ You gained an hour’s sleep today — 4 ways your energy levels will change this week and how to fix it ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The clocks have gone back, but for anyone who’s ever found the seasonal shift leaves them feeling sluggish, unfocused or oddly out of sync, the extra hour of sleep may not feel like the win it promises to be. </p><p>While gaining an hour in bed sounds like an instant energy boost, changes to routine, meal times and the body’s internal clock can trigger a dip in alertness during the days that follow. Even a small change to your daily routine can throw your body clock out of sync, affecting everything from energy levels to concentration. </p><p>The good news? You don't have to simply wait it out. From making the most of morning light to tweaking your workout plan, there are a few easy ways to help your body adjust. Sleep experts Dr Nerina Ramlakhan and Jane Ollis share their expertise to help you stay one step ahead.</p><h3 class="article-body__section" id="section-5-ways-your-energy-will-change-this-week-and-how-to-fix-it"><span>5 ways your energy will change this week and how to fix it</span></h3><p>While you might fancy that extra hour in bed, a disrupted circadian rhythm means your energy levels take an immediate hit when the clocks go back. Our experts explain what you can do to ease the seasonal transition:</p><h2 id="1-you-feel-tired-much-earlier">1. You feel tired much earlier </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="LErrBLihjARtgxawpwdDjM" name="woman yawning" alt="A tired woman on a train looking out of the window and yawning" src="https://cdn.mos.cms.futurecdn.net/LErrBLihjARtgxawpwdDjM-1920-80.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: Getty Images)</span></figcaption></figure><p>The clocks may have gone back, but your brain is operating in a different time zone, leading to your body clock feeling out of sorts. </p><p>“Sunlight impacts our hypothalamus, which is the part of the brain that regulates our 'body clocks', so changes in sunlight hours might leave you feeling sleepier,” explains<a href="https://oaktreemobility.co.uk/help-and-advice/authors/dr-nerina" target="_blank"> Dr Nerina Ramlakhan, Sleep Expert at Oak Tree Mobility</a>. </p><p>“There's something to be said for the earlier sunsets that come with the clock change. A<a href="https://www.sciencedaily.com/releases/2020/02/200220141731.htm" target="_blank"> 2020 study</a> found that long-wavelength orange light, typical of a sunset, helps your sleeping patterns, because it stimulates the cone photoreceptor inputs to specific neurons in the eye, helping to regulate your circadian rhythm.”</p><p>So consider this your sign to embrace sunsets as your wind down signal for the day, rather than fighting them too hard.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xb8MNW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xb8MNW.js" async></script><h2 id="2-you-have-more-energy-in-the-morning-at-first">2. You have more energy in the morning… at first</h2><p>The first fortnight of the clocks going back feels like a honeymoon. Sunrise jumps up an hour earlier, so many of us will feel, albeit briefly, like morning people filled with energy. </p><p>Jane Ollis, medical biochemist and founder of<a href="https://sona.help/" target="_blank"> SONA</a>, explains, saying, “Light reaching the back of the eye mops up any lingering melatonin and tells your body clock the day has begun. It works alongside the cortisol awakening response, a natural surge that climbs by around half in the first 30 to 45 minutes after you wake.”</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9sXYSmGbQA48FLMYF2u9YU" name="Morning daylight" alt="A woman sat on her porch with a morning coffee, enjoying the natural daylight with a countryside landscape in the background" src="https://cdn.mos.cms.futurecdn.net/9sXYSmGbQA48FLMYF2u9YU-1920-80.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: Getty Images)</span></figcaption></figure><p>Sunlight in the morning triggers the production of your get-up-and-go hormones, cortisol and serotonin. As the sun rises later, you might notice your can-do attitude starting to flag.</p><p>“Without that morning light, melatonin hangs around, the fog takes longer to lift, and your body clock drifts gradually later, making each morning a little harder than the last,” says Jane. </p><h2 id="3-the-afternoon-energy-slumps-hit-harder">3. The afternoon energy slumps hit harder</h2><p>Lack of natural daylight will mean that your mood, energy and clarity can take a knock thanks to lower levels of serotonin.</p><p>As Dr Ramlakhan says, “Daylight impacts so many aspects of our health that are linked to our circadian rhythms. The bottom line is, if you're not getting enough light, the natural production of hormones that help to regulate your health and sleep gets disrupted. It can impact your cognitive performance, mental wellbeing, and make you feel sluggish and irritable."</p><p>Looking for a sign you’re feeling this effect? Look at the extra cup of coffee you grabbed at lunch, in an effort to beat the slump.</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:664px;"><p class="vanilla-image-block" style="padding-top:56.33%;"><img id="qFJvCjcJYLdrc7gGoKUbtA" name="woman yawning.jpg" alt="A woman with red hair and a fringe, wearing a red dress sitting with a tea cup in her hands yawning as she survives off four hours sleep" src="https://cdn.mos.cms.futurecdn.net/qFJvCjcJYLdrc7gGoKUbtA-1920-80.jpg" mos="" align="middle" fullscreen="" width="664" height="374" 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><h2 id="4-your-overall-mood-dips-too">4. Your overall mood dips, too</h2><p>Shorter, darker days means that, for many of us, our mood and energy levels start to drop.</p><p>For some, our moods can dip even lower. A<a href="https://www.cambridge.org/core/journals/the-british-journal-of-psychiatry/article/clinical-and-genetic-correlates-of-a-circadian-subtype-of-depression-in-the-australian-genetics-of-depression-study/A3429C15041E6BA0570968117909DDB6"> <u>recent study</u></a> in Australia identified a new subtype of depression – termed ‘circadian depression’ – highlighting that the clocks going back can hit some harder than others, leading to worryingly low moods. But why?</p><p>“As daylight decreases, changes in our body’s serotonin and melatonin rhythms can affect our mood and energy levels, leaving us feeling lower and sleepier,” says Jane.</p><p>“For some people, though, it’s more than the winter blues. These seasonal changes can contribute to seasonal affective disorder, or SAD, a type of depression that usually comes on in winter. If you notice persistent changes in your mood or mental health, it’s important to speak to your GP and seek support.”</p><h3 class="article-body__section" id="section-how-to-boost-your-energy-after-the-clock-change"><span>How to boost your energy after the clock change </span></h3><p>The clocks may be changing, but feeling sluggish doesn’t have to be part of the deal. A few small changes to your daily routine can make a real difference to your mood and energy, helping you feel more like you as we move further into the colder seasons.</p><h2 id="get-plenty-of-morning-sunlight">Get plenty of morning sunlight</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="zXio6idn6aG5MvTixQNTvP" name="A smiling mature woman basks in the morning sunlight." alt="A smiling mature woman basks in the morning sunlight." src="https://cdn.mos.cms.futurecdn.net/zXio6idn6aG5MvTixQNTvP-1920-80.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: Getty Images)</span></figcaption></figure><p>“Light first, coffee second. Get outdoors within an hour of waking, when your body clock is most receptive to being set. Aim for up to half an hour outdoors,” says Jane.</p><p>She continues, advising, “Guard a lunchtime walk too, as it's often the only proper daylight you might see, then reverse the rules in the evening: warm lamps on, ceiling lights off.“</p><p>The natural light will help regulate your circadian rhythm, helping to suppress melatonin whilst upping your serotonin. So, wrap up warm, enjoy those crisp autumn walks and soak up some winter sunshine. Your body clock – and your sleep – will thank you for it.</p><h2 id="stick-to-a-consistent-sleep-schedule">Stick to a consistent sleep schedule</h2><p>Jane says, “Your body clock doesn't wait to be told, it plans ahead. In the hours before you usually wake, it's already raising your core temperature, lifting cortisol and getting your gut ready for breakfast, like a very organised PA.</p><p>“Keep your timings steady, so you wake feeling rejuvenated and your body functioning like you expect. Shift timings around with a late Friday or a Sunday lie-in, and your organs will end up in feeling like they’re in different time zones, leading to a difficult night’s sleep.”</p><p>So craft a snooze schedule that works for you, and stick to it. For easier mornings, consider investing in one of the <a href="https://www.tomsguide.com/wellness/sleep/best-sunrise-alarm-clocks">best sunrise alarm clocks</a> to help trigger the key wakeful hormones.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Vd4Cjuin8vnVhUkTPnRPfN" name="TG_Sleep_280426_ps0812" alt="A woman lying on her back on a bed in the dark. She's wearing an eye mask and a sleep tracker." src="https://cdn.mos.cms.futurecdn.net/Vd4Cjuin8vnVhUkTPnRPfN-1920-80.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><h2 id="exercise-outside-within-daylight-hours">Exercise outside within daylight hours </h2><p>Whether it’s a brisk walk at lunchtime, run or cycle, exercising produces mood-boosting endorphins, as well as increasing our<a href="https://www.tomsguide.com/wellness/sleep/im-getting-38-minutes-more-deep-sleep-a-night-thanks-to-this-10-min-habit-and-it-fixed-my-3-a-m-wake-ups"> deep sleep</a>, helping us feeling more energised the following morning. </p><p>As Dr Ramlakhan explains, “Feeling tired isn't always about not getting enough sleep. Sometimes we think we need rest, when really, we need to move to give ourselves a boost.</p><p>“Regular moderate activity like walking or swimming can help improve both the quality and duration of sleep,” she advises. “But avoid exercise too close to bedtime, as it may end up having a stimulating effect, making it difficult to fall asleep." </p><p>Take your workout outside and earn double the benefit with natural daylight, helping to increase serotonin for improved mood and energy whilst tiring you out enough for a good night's kip.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep/you-gained-an-hours-sleep-today-4-ways-your-energy-levels-will-change-this-week-and-how-to-fix-it</link>
                                                                            <description>
                            <![CDATA[ Experts share the simple, everyday changes you can make to feel more energised, improve your mood and sleep better as the darker days set in. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DQmvsR9NS2j6EDUSxDYiQi</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/W5K7xVtTGFyn2ew952nPQc-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 25 Oct 2026 08:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sleep]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ louramsayjourno@gmail.com (Louise Ramsay) ]]></author>                    <dc:creator><![CDATA[ Louise Ramsay ]]></dc:creator>                                                                                                        <dc:description><![CDATA[ &lt;p&gt;Louise Ramsay is an experienced writer, regularly covering lifestyle and health articles. She has a masters in multimedia journalism and has recently started writing for Tom&#039;s Guide, sharing her expertise in the sleep industry. Louise is interested in the affect of sleep on our overall health and has a keen interest in helping readers improve their sleep, and therefore, their overall wellbeing.&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/W5K7xVtTGFyn2ew952nPQc-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Sleep writer Frances Daniels sleeps in a bed in a dimly lit room]]></media:description>                                                            <media:text><![CDATA[Sleep writer Frances Daniels sleeps in a bed in a dimly lit room]]></media:text>
                                <media:title type="plain"><![CDATA[Sleep writer Frances Daniels sleeps in a bed in a dimly lit room]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/W5K7xVtTGFyn2ew952nPQc-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The clocks have gone back, but for anyone who’s ever found the seasonal shift leaves them feeling sluggish, unfocused or oddly out of sync, the extra hour of sleep may not feel like the win it promises to be. </p><p>While gaining an hour in bed sounds like an instant energy boost, changes to routine, meal times and the body’s internal clock can trigger a dip in alertness during the days that follow. Even a small change to your daily routine can throw your body clock out of sync, affecting everything from energy levels to concentration. </p><p>The good news? You don't have to simply wait it out. From making the most of morning light to tweaking your workout plan, there are a few easy ways to help your body adjust. Sleep experts Dr Nerina Ramlakhan and Jane Ollis share their expertise to help you stay one step ahead.</p><h3 class="article-body__section" id="section-5-ways-your-energy-will-change-this-week-and-how-to-fix-it"><span>5 ways your energy will change this week and how to fix it</span></h3><p>While you might fancy that extra hour in bed, a disrupted circadian rhythm means your energy levels take an immediate hit when the clocks go back. Our experts explain what you can do to ease the seasonal transition:</p><h2 id="1-you-feel-tired-much-earlier">1. You feel tired much earlier </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="LErrBLihjARtgxawpwdDjM" name="woman yawning" alt="A tired woman on a train looking out of the window and yawning" src="https://cdn.mos.cms.futurecdn.net/LErrBLihjARtgxawpwdDjM-1920-80.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: Getty Images)</span></figcaption></figure><p>The clocks may have gone back, but your brain is operating in a different time zone, leading to your body clock feeling out of sorts. </p><p>“Sunlight impacts our hypothalamus, which is the part of the brain that regulates our 'body clocks', so changes in sunlight hours might leave you feeling sleepier,” explains<a href="https://oaktreemobility.co.uk/help-and-advice/authors/dr-nerina" target="_blank"> Dr Nerina Ramlakhan, Sleep Expert at Oak Tree Mobility</a>. </p><p>“There's something to be said for the earlier sunsets that come with the clock change. A<a href="https://www.sciencedaily.com/releases/2020/02/200220141731.htm" target="_blank"> 2020 study</a> found that long-wavelength orange light, typical of a sunset, helps your sleeping patterns, because it stimulates the cone photoreceptor inputs to specific neurons in the eye, helping to regulate your circadian rhythm.”</p><p>So consider this your sign to embrace sunsets as your wind down signal for the day, rather than fighting them too hard.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xb8MNW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xb8MNW.js" async></script><h2 id="2-you-have-more-energy-in-the-morning-at-first">2. You have more energy in the morning… at first</h2><p>The first fortnight of the clocks going back feels like a honeymoon. Sunrise jumps up an hour earlier, so many of us will feel, albeit briefly, like morning people filled with energy. </p><p>Jane Ollis, medical biochemist and founder of<a href="https://sona.help/" target="_blank"> SONA</a>, explains, saying, “Light reaching the back of the eye mops up any lingering melatonin and tells your body clock the day has begun. It works alongside the cortisol awakening response, a natural surge that climbs by around half in the first 30 to 45 minutes after you wake.”</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9sXYSmGbQA48FLMYF2u9YU" name="Morning daylight" alt="A woman sat on her porch with a morning coffee, enjoying the natural daylight with a countryside landscape in the background" src="https://cdn.mos.cms.futurecdn.net/9sXYSmGbQA48FLMYF2u9YU-1920-80.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: Getty Images)</span></figcaption></figure><p>Sunlight in the morning triggers the production of your get-up-and-go hormones, cortisol and serotonin. As the sun rises later, you might notice your can-do attitude starting to flag.</p><p>“Without that morning light, melatonin hangs around, the fog takes longer to lift, and your body clock drifts gradually later, making each morning a little harder than the last,” says Jane. </p><h2 id="3-the-afternoon-energy-slumps-hit-harder">3. The afternoon energy slumps hit harder</h2><p>Lack of natural daylight will mean that your mood, energy and clarity can take a knock thanks to lower levels of serotonin.</p><p>As Dr Ramlakhan says, “Daylight impacts so many aspects of our health that are linked to our circadian rhythms. The bottom line is, if you're not getting enough light, the natural production of hormones that help to regulate your health and sleep gets disrupted. It can impact your cognitive performance, mental wellbeing, and make you feel sluggish and irritable."</p><p>Looking for a sign you’re feeling this effect? Look at the extra cup of coffee you grabbed at lunch, in an effort to beat the slump.</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:664px;"><p class="vanilla-image-block" style="padding-top:56.33%;"><img id="qFJvCjcJYLdrc7gGoKUbtA" name="woman yawning.jpg" alt="A woman with red hair and a fringe, wearing a red dress sitting with a tea cup in her hands yawning as she survives off four hours sleep" src="https://cdn.mos.cms.futurecdn.net/qFJvCjcJYLdrc7gGoKUbtA-1920-80.jpg" mos="" align="middle" fullscreen="" width="664" height="374" 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><h2 id="4-your-overall-mood-dips-too">4. Your overall mood dips, too</h2><p>Shorter, darker days means that, for many of us, our mood and energy levels start to drop.</p><p>For some, our moods can dip even lower. A<a href="https://www.cambridge.org/core/journals/the-british-journal-of-psychiatry/article/clinical-and-genetic-correlates-of-a-circadian-subtype-of-depression-in-the-australian-genetics-of-depression-study/A3429C15041E6BA0570968117909DDB6"> <u>recent study</u></a> in Australia identified a new subtype of depression – termed ‘circadian depression’ – highlighting that the clocks going back can hit some harder than others, leading to worryingly low moods. But why?</p><p>“As daylight decreases, changes in our body’s serotonin and melatonin rhythms can affect our mood and energy levels, leaving us feeling lower and sleepier,” says Jane.</p><p>“For some people, though, it’s more than the winter blues. These seasonal changes can contribute to seasonal affective disorder, or SAD, a type of depression that usually comes on in winter. If you notice persistent changes in your mood or mental health, it’s important to speak to your GP and seek support.”</p><h3 class="article-body__section" id="section-how-to-boost-your-energy-after-the-clock-change"><span>How to boost your energy after the clock change </span></h3><p>The clocks may be changing, but feeling sluggish doesn’t have to be part of the deal. A few small changes to your daily routine can make a real difference to your mood and energy, helping you feel more like you as we move further into the colder seasons.</p><h2 id="get-plenty-of-morning-sunlight">Get plenty of morning sunlight</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="zXio6idn6aG5MvTixQNTvP" name="A smiling mature woman basks in the morning sunlight." alt="A smiling mature woman basks in the morning sunlight." src="https://cdn.mos.cms.futurecdn.net/zXio6idn6aG5MvTixQNTvP-1920-80.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: Getty Images)</span></figcaption></figure><p>“Light first, coffee second. Get outdoors within an hour of waking, when your body clock is most receptive to being set. Aim for up to half an hour outdoors,” says Jane.</p><p>She continues, advising, “Guard a lunchtime walk too, as it's often the only proper daylight you might see, then reverse the rules in the evening: warm lamps on, ceiling lights off.“</p><p>The natural light will help regulate your circadian rhythm, helping to suppress melatonin whilst upping your serotonin. So, wrap up warm, enjoy those crisp autumn walks and soak up some winter sunshine. Your body clock – and your sleep – will thank you for it.</p><h2 id="stick-to-a-consistent-sleep-schedule">Stick to a consistent sleep schedule</h2><p>Jane says, “Your body clock doesn't wait to be told, it plans ahead. In the hours before you usually wake, it's already raising your core temperature, lifting cortisol and getting your gut ready for breakfast, like a very organised PA.</p><p>“Keep your timings steady, so you wake feeling rejuvenated and your body functioning like you expect. Shift timings around with a late Friday or a Sunday lie-in, and your organs will end up in feeling like they’re in different time zones, leading to a difficult night’s sleep.”</p><p>So craft a snooze schedule that works for you, and stick to it. For easier mornings, consider investing in one of the <a href="https://www.tomsguide.com/wellness/sleep/best-sunrise-alarm-clocks">best sunrise alarm clocks</a> to help trigger the key wakeful hormones.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Vd4Cjuin8vnVhUkTPnRPfN" name="TG_Sleep_280426_ps0812" alt="A woman lying on her back on a bed in the dark. She's wearing an eye mask and a sleep tracker." src="https://cdn.mos.cms.futurecdn.net/Vd4Cjuin8vnVhUkTPnRPfN-1920-80.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><h2 id="exercise-outside-within-daylight-hours">Exercise outside within daylight hours </h2><p>Whether it’s a brisk walk at lunchtime, run or cycle, exercising produces mood-boosting endorphins, as well as increasing our<a href="https://www.tomsguide.com/wellness/sleep/im-getting-38-minutes-more-deep-sleep-a-night-thanks-to-this-10-min-habit-and-it-fixed-my-3-a-m-wake-ups"> deep sleep</a>, helping us feeling more energised the following morning. </p><p>As Dr Ramlakhan explains, “Feeling tired isn't always about not getting enough sleep. Sometimes we think we need rest, when really, we need to move to give ourselves a boost.</p><p>“Regular moderate activity like walking or swimming can help improve both the quality and duration of sleep,” she advises. “But avoid exercise too close to bedtime, as it may end up having a stimulating effect, making it difficult to fall asleep." </p><p>Take your workout outside and earn double the benefit with natural daylight, helping to increase serotonin for improved mood and energy whilst tiring you out enough for a good night's kip.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I test running shoes and three great sneakers have been reduced to under $100 in the early Black Friday sales ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Just like everything else, running shoes have been getting more and more expensive in recent years, and that means the only way to get a quality shoe for less than $100 is generally to shop during sales.</p><p>Fortunately for those in need of new sneakers, the biggest sales period of the year is just kicking off, and I’ve been hunting for early Black Friday deals on excellent running shoes I’ve tested and rate highly.</p><p>I didn’t just want good deals; I wanted great ones that brought the price of top-quality shoes under $100, and I’ve managed to find three that fit the bill. </p><p>For me, the standout deal is the <a href="https://www.nike.com/t/zoom-fly-6-womens-road-racing-shoes-HZkwmBM5/FN8455-107" target="_blank" rel="nofollow">Nike Zoom Fly 6 reduced to $99 in the Nike sale</a>, but really, all three discounts are worth looking at if you need new running shoes.</p><h2 class="article-body__section" id="section-quick-links"><span>Quick links</span></h2><ul><li><strong>Nike Zoom Fly 6: </strong><a href="https://www.nike.com/t/zoom-fly-6-womens-road-racing-shoes-HZkwmBM5/FN8455-107" target="_blank" rel="nofollow"><strong>was $180 now $99 @ Nike</strong></a></li><li><strong>Puma Velocity Nitro 4: </strong><a href="https://www.amazon.com/PUMA-Velocity-Nitro-Running-Sneaker/dp/B0DWZGK2MS" target="_blank" rel="nofollow"><strong>was $140 now $99 @ Amazon</strong></a></li><li><strong>Brooks Glycerin 22: </strong><a href="https://www.amazon.com/Brooks-Mens-Glycerin-Neutral-Running/dp/B0D2Z2VMHT" target="_blank" rel="nofollow"><strong>was $165 now $99 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-running-shoe-deals"><span>Running shoe deals</span></h3><div class="product"><a data-dimension112="75b035fa-ce1a-11f1-b478-7995b52db904" data-action="Deal Block" data-label="Zoom Fly 6" data-dimension48="Zoom Fly 6" data-dimension25="$99" href="https://www.nike.com/t/zoom-fly-6-womens-road-racing-shoes-HZkwmBM5/FN8455-107" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="D329JcvPkxDYFUkphkT4NF" name="Nike Zoom Fly 6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/D329JcvPkxDYFUkphkT4NF-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Nike Zoom Fly 6 is one of the most underrated shoes on the market, in my opinion, because it's incredibly versatile. It's a plated trainer I enjoyed every kind of run in, from easy plods to mile reps on the track. One color of the women's shoe is just $99 right now, with varying discounts available on other colors.<a class="view-deal button" href="https://www.nike.com/t/zoom-fly-6-womens-road-racing-shoes-HZkwmBM5/FN8455-107" target="_blank" rel="nofollow" data-dimension112="75b035fa-ce1a-11f1-b478-7995b52db904" data-action="Deal Block" data-label="Zoom Fly 6" data-dimension48="Zoom Fly 6" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="d33ddeca-ce1a-11f1-bfe1-0773190acace" data-action="Deal Block" data-label="Velocity Nitro 4" data-dimension48="Velocity Nitro 4" data-dimension25="$99" href="https://www.amazon.com/PUMA-Velocity-Nitro-Running-Sneaker/dp/B0DWZGK2MS" 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:100.00%;"><img id="ZywwzQJdVP9nHZLB8cfyjh" name="Puma Velocity Nitro 4 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZywwzQJdVP9nHZLB8cfyjh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Velocity Nitro 4 is a very good value at its full price of $140, so the fact that multiple colors of the shoe are under $100 on Amazon right now is certainly enticing. I love the Velocity Nitro as a simple, comfortable daily trainer with a great outsole for runs in wet weather. I recently tested the Velocity Nitro 5 and didn't find it a notable upgrade, so I'd jump on this deal on the  Velocity Nitro 4 instead.<a class="view-deal button" href="https://www.amazon.com/PUMA-Velocity-Nitro-Running-Sneaker/dp/B0DWZGK2MS" target="_blank" rel="nofollow" data-dimension112="d33ddeca-ce1a-11f1-bfe1-0773190acace" data-action="Deal Block" data-label="Velocity Nitro 4" data-dimension48="Velocity Nitro 4" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="2bea1098-ce1b-11f1-ae16-db5e806068ff" data-action="Deal Block" data-label="Glycerin 22" data-dimension48="Glycerin 22" data-dimension25="$99" href="https://www.amazon.com/Brooks-Mens-Glycerin-Neutral-Running/dp/B0D2Z2VMHT" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:991px;"><p class="vanilla-image-block" style="padding-top:58.02%;"><img id="6aNiZBS2vURoK2YnfymeE9" name="Brooks Glycerin 22" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6aNiZBS2vURoK2YnfymeE9-1920-80.png" mos="" align="middle" fullscreen="" width="991" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Glycerin 22 is an ultra comfortable, durable, cushioned running shoe ideal for beginners looking for a first sneaker or experienced runners who need a daily trainer for racking up big mileage. A few colors and sizes are under $100 on Amazon right now, a $66 saving off the full price.<a class="view-deal button" href="https://www.amazon.com/Brooks-Mens-Glycerin-Neutral-Running/dp/B0D2Z2VMHT" target="_blank" rel="nofollow" data-dimension112="2bea1098-ce1b-11f1-ae16-db5e806068ff" data-action="Deal Block" data-label="Glycerin 22" data-dimension48="Glycerin 22" data-dimension25="$99">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/ive-been-in-a-serious-relationship-with-my-vagus-nerve-stimulator-for-30-days-to-see-if-it-would-decrease-my-stress-heres-why-im-breaking-up-with-it-already"><strong>I've been in a serious relationship with my vagus nerve stimulator for 30 days to see if it would decrease my stress — here's why I'm breaking up with it already</strong></a></li><li><a href="https://www.tomsguide.com/wellness/running/nike-pegasus-plus-2-review"><strong>I ran 40 miles in the Nike Pegasus Plus 2 and it’s worth the upgrade on the Pegasus 42</strong></a></li><li><a href="https://www.tomsguide.com/wellness/workouts/ive-been-coaching-my-72-year-old-dad-like-hes-30-heres-the-one-exercise-that-moves-the-needle-most-for-upper-body-strength-and-mobility"><strong>I coach my 72-year-old dad like he's 30: here's the one exercise that moves the needle most for upper-body strength and mobility</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/running/i-test-running-shoes-and-three-great-sneakers-have-been-reduced-to-under-usd100-in-the-early-black-friday-sales</link>
                                                                            <description>
                            <![CDATA[ Getting a great running shoe for under $100 isn’t easy these days, but the early Black Friday sales have already produced big discounts on three excellent sneakers I’ve tested. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zdzUSaBKcCG6VWCKLCHiUf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Uc3xAddXsEw4UP4CNhCUe3-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 25 Oct 2026 06:30:00 +0000</pubDate>                                                                                                                                <updated>Sun, 25 Oct 2026 12:27:40 +0000</updated>
                                                                                                                                            <category><![CDATA[Running]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nick Harris-Fry ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/J5Jjp49GUVjLZEbjEkTex-320-70.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/Uc3xAddXsEw4UP4CNhCUe3-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Nike Zoom Fly 6 ]]></media:description>                                                            <media:text><![CDATA[Nike Zoom Fly 6 ]]></media:text>
                                <media:title type="plain"><![CDATA[Nike Zoom Fly 6 ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Uc3xAddXsEw4UP4CNhCUe3-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Just like everything else, running shoes have been getting more and more expensive in recent years, and that means the only way to get a quality shoe for less than $100 is generally to shop during sales.</p><p>Fortunately for those in need of new sneakers, the biggest sales period of the year is just kicking off, and I’ve been hunting for early Black Friday deals on excellent running shoes I’ve tested and rate highly.</p><p>I didn’t just want good deals; I wanted great ones that brought the price of top-quality shoes under $100, and I’ve managed to find three that fit the bill. </p><p>For me, the standout deal is the <a href="https://www.nike.com/t/zoom-fly-6-womens-road-racing-shoes-HZkwmBM5/FN8455-107" target="_blank" rel="nofollow">Nike Zoom Fly 6 reduced to $99 in the Nike sale</a>, but really, all three discounts are worth looking at if you need new running shoes.</p><h2 class="article-body__section" id="section-quick-links"><span>Quick links</span></h2><ul><li><strong>Nike Zoom Fly 6: </strong><a href="https://www.nike.com/t/zoom-fly-6-womens-road-racing-shoes-HZkwmBM5/FN8455-107" target="_blank" rel="nofollow"><strong>was $180 now $99 @ Nike</strong></a></li><li><strong>Puma Velocity Nitro 4: </strong><a href="https://www.amazon.com/PUMA-Velocity-Nitro-Running-Sneaker/dp/B0DWZGK2MS" target="_blank" rel="nofollow"><strong>was $140 now $99 @ Amazon</strong></a></li><li><strong>Brooks Glycerin 22: </strong><a href="https://www.amazon.com/Brooks-Mens-Glycerin-Neutral-Running/dp/B0D2Z2VMHT" target="_blank" rel="nofollow"><strong>was $165 now $99 @ Amazon</strong></a></li></ul><h3 class="article-body__section" id="section-running-shoe-deals"><span>Running shoe deals</span></h3><div class="product"><a data-dimension112="75b035fa-ce1a-11f1-b478-7995b52db904" data-action="Deal Block" data-label="Zoom Fly 6" data-dimension48="Zoom Fly 6" data-dimension25="$99" href="https://www.nike.com/t/zoom-fly-6-womens-road-racing-shoes-HZkwmBM5/FN8455-107" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="D329JcvPkxDYFUkphkT4NF" name="Nike Zoom Fly 6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/D329JcvPkxDYFUkphkT4NF-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Nike Zoom Fly 6 is one of the most underrated shoes on the market, in my opinion, because it's incredibly versatile. It's a plated trainer I enjoyed every kind of run in, from easy plods to mile reps on the track. One color of the women's shoe is just $99 right now, with varying discounts available on other colors.<a class="view-deal button" href="https://www.nike.com/t/zoom-fly-6-womens-road-racing-shoes-HZkwmBM5/FN8455-107" target="_blank" rel="nofollow" data-dimension112="75b035fa-ce1a-11f1-b478-7995b52db904" data-action="Deal Block" data-label="Zoom Fly 6" data-dimension48="Zoom Fly 6" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="d33ddeca-ce1a-11f1-bfe1-0773190acace" data-action="Deal Block" data-label="Velocity Nitro 4" data-dimension48="Velocity Nitro 4" data-dimension25="$99" href="https://www.amazon.com/PUMA-Velocity-Nitro-Running-Sneaker/dp/B0DWZGK2MS" 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:100.00%;"><img id="ZywwzQJdVP9nHZLB8cfyjh" name="Puma Velocity Nitro 4 sq" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZywwzQJdVP9nHZLB8cfyjh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Velocity Nitro 4 is a very good value at its full price of $140, so the fact that multiple colors of the shoe are under $100 on Amazon right now is certainly enticing. I love the Velocity Nitro as a simple, comfortable daily trainer with a great outsole for runs in wet weather. I recently tested the Velocity Nitro 5 and didn't find it a notable upgrade, so I'd jump on this deal on the  Velocity Nitro 4 instead.<a class="view-deal button" href="https://www.amazon.com/PUMA-Velocity-Nitro-Running-Sneaker/dp/B0DWZGK2MS" target="_blank" rel="nofollow" data-dimension112="d33ddeca-ce1a-11f1-bfe1-0773190acace" data-action="Deal Block" data-label="Velocity Nitro 4" data-dimension48="Velocity Nitro 4" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="2bea1098-ce1b-11f1-ae16-db5e806068ff" data-action="Deal Block" data-label="Glycerin 22" data-dimension48="Glycerin 22" data-dimension25="$99" href="https://www.amazon.com/Brooks-Mens-Glycerin-Neutral-Running/dp/B0D2Z2VMHT" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:991px;"><p class="vanilla-image-block" style="padding-top:58.02%;"><img id="6aNiZBS2vURoK2YnfymeE9" name="Brooks Glycerin 22" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6aNiZBS2vURoK2YnfymeE9-1920-80.png" mos="" align="middle" fullscreen="" width="991" height="575" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Glycerin 22 is an ultra comfortable, durable, cushioned running shoe ideal for beginners looking for a first sneaker or experienced runners who need a daily trainer for racking up big mileage. A few colors and sizes are under $100 on Amazon right now, a $66 saving off the full price.<a class="view-deal button" href="https://www.amazon.com/Brooks-Mens-Glycerin-Neutral-Running/dp/B0D2Z2VMHT" target="_blank" rel="nofollow" data-dimension112="2bea1098-ce1b-11f1-ae16-db5e806068ff" data-action="Deal Block" data-label="Glycerin 22" data-dimension48="Glycerin 22" data-dimension25="$99">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/ive-been-in-a-serious-relationship-with-my-vagus-nerve-stimulator-for-30-days-to-see-if-it-would-decrease-my-stress-heres-why-im-breaking-up-with-it-already"><strong>I've been in a serious relationship with my vagus nerve stimulator for 30 days to see if it would decrease my stress — here's why I'm breaking up with it already</strong></a></li><li><a href="https://www.tomsguide.com/wellness/running/nike-pegasus-plus-2-review"><strong>I ran 40 miles in the Nike Pegasus Plus 2 and it’s worth the upgrade on the Pegasus 42</strong></a></li><li><a href="https://www.tomsguide.com/wellness/workouts/ive-been-coaching-my-72-year-old-dad-like-hes-30-heres-the-one-exercise-that-moves-the-needle-most-for-upper-body-strength-and-mobility"><strong>I coach my 72-year-old dad like he's 30: here's the one exercise that moves the needle most for upper-body strength and mobility</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Over 60? These are the 4 most important beginning-level exercises to master ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It’s never too late to start exercising. As a certified personal trainer, I work with so many clients in their 60s, 70s, and even 80s that are embarking on their very first fitness journeys. And when they start seeing real progress, it’s thrilling for both of us.</p><p>It’s important to always start with the basics, though, so when I meet with a beginning-level senior client for the first time, I start them off with the following four exercises. These moves are relatively friendly on the joints, help build the strength needed for more advanced exercises, and can make everyday activities easier and safer. </p><p>You won’t need any equipment right off the bat, but as you get stronger, you can start using a set of <a href="https://www.tomsguide.com/wellness/fitness/best-adjustable-dumbbells"><u>dumbbells</u></a> for a few of these exercises. </p><h2 id="how-to-do-the-four-exercises">How to do the four exercises</h2><p>Consult a doctor before trying any new activity. They may caution against certain movements based on your health history.</p><p>This workout is appropriate for most beginners, but getting your form right is crucial. Consider meeting with a certified personal trainer who can teach you how to do the moves correctly. Exercising with improper form can cause pain or injury. </p><p>You’ll just need a section of bare wall and a sturdy chair for this workout. </p><p>Start with one set of 10 reps for chair squats, standing dead bug, and wall push-ups, and hold the wall plank for 30 seconds. If that feels easy, add an additional set or two, gradually increase your reps to 12-15, and hold the wall plank for 45-60 seconds. Eventually, you’ll want to complete 3 sets for each exercise, 3-4 times per week. Once that stops being a challenge, you’ll be ready for a more advanced routine. </p><p>Here’s how to do the exercises:</p><h3 class="article-body__section" id="section-1-chair-squats"><span>1. Chair squats</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="Bo5CcPvgMmoDY8PLN4wDHU" name="chair squat" alt="sit to stand squat" src="https://cdn.mos.cms.futurecdn.net/Bo5CcPvgMmoDY8PLN4wDHU-1920-80.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><ul><li>Stand tall in front of a chair with your feet hip-width apart.</li><li>Engage your core muscles, drawing your belly button towards your spine.</li><li>Hinge your hips behind you.</li><li>Bend your knees and slowly lower your hips towards the seat.</li><li>Lengthen your arms in front of you for balance.</li><li>Tap your hips onto the seat, then stand back up.</li><li>Continue for 10-15 reps.</li></ul><h3 class="article-body__section" id="section-2-wall-planks"><span>2. Wall planks</span></h3><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/K4ZijUE-o1A" allowfullscreen></iframe></div></div><ul><li>Stand facing a wall.</li><li>Place your forearms on the wall. Keep your elbows aligned with your shoulders.</li><li>Engage your core muscles.</li><li>Step your feet away from the wall.</li><li>Maintain a straight line with your body, from the top of your head to your toes.</li><li>Hold for 30-60 seconds.</li></ul><h3 class="article-body__section" id="section-3-standing-deadbug"><span>3. Standing deadbug</span></h3><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/DERetW6rStg" allowfullscreen></iframe></div></div><ul><li>Stand with your feet hip-width apart and your back against the wall.</li><li>Engage your core muscles.</li><li>Lift your left arm above your head while bringing your right knee to a 90-degree angle.</li><li>Pause briefly.</li><li>Lower your left arm and right leg.</li><li>Lift your right arm above your head while bringing your left knee to a 90-degree angle.</li><li>Pause briefly.</li><li>Lower your right arm and left leg.</li><li>Continue alternating between your two sides for 10-15 reps each side.</li></ul><h3 class="article-body__section" id="section-4-wall-push-ups"><span>4. Wall push-ups</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="EsTwpfEEGnBW9zVKV8L4L5" name="wall push up" alt="a man doing push ups on a wall" src="https://cdn.mos.cms.futurecdn.net/EsTwpfEEGnBW9zVKV8L4L5-1920-80.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><ul><li>Stand facing a wall.</li><li>Lengthen your arms and place your hands against the wall.</li><li>Engage your core muscles.</li><li>Bend your elbows and lower your chest towards the wall, keeping your head, hips, and feet in alignment.</li><li>Push yourself back up to the starting position.</li><li>Continue for 10-15 reps</li></ul><h2 id="benefits-of-these-exercises">Benefits of these exercises</h2><p>This workout targets major muscle groups in the lower body, upper body, and core, responsible for everyday movements like walking, getting up from a seated position, pushing yourself up, and balancing.</p><p>These exercises are beginner versions of more standard movements. Mastering chair squats prepares you for bodyweight squats, and mastering wall planks, standing deadbugs, and wall push-ups prepares you for regular push-ups, planks, and deadbugs. The chair and wall provide assistance as you strengthen your body progressively and with good form.</p><p>Since this workout is done standing, it’s appropriate for seniors who have trouble getting onto the floor. For those unable to do standard push ups, planks, and deadbugs, there are easy ways to make the standing versions of these moves more challenging: small weights can be held during the standing deadbug, and stepping further away from the wall will amp up the difficulty of the wall plank and wall push up. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.js" async></script><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-to-be-more-mobile-in-their-60s-and-70s-3-low-impact-exercises-you-should-start-with" target="_blank"><strong>I teach people to be more mobile in their 60s and 70s: 3 low-impact exercises you should start with</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/fitness/forget-burpees-the-pilates-burpee-is-beginner-friendly-and-low-impact-and-youll-love-it" target="_blank"><strong>Forget burpees —the 'Pilates burpee' is beginner-friendly and low-impact (and you’ll love it)</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/a-yoga-instructor-says-this-is-the-5-minute-yoga-routine-you-need-for-strong-and-mobile-hips-and-core-muscles" target="_blank"><strong>A yoga instructor says this is the 5-minute yoga routine you need for strong and mobile hips and core muscles</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/workouts/over-60-these-are-the-4-most-important-beginning-level-exercises-to-master</link>
                                                                            <description>
                            <![CDATA[ Here are the four beginner exercises everyone should be doing over 60 ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kSnrdq7eG6AKKNJWkZKXaC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VH7pGYGYnwv4MHqjEzLGVE-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 25 Oct 2026 04:30:00 +0000</pubDate>                                                                                                                                <updated>Sun, 25 Oct 2026 12:28:57 +0000</updated>
                                                                                                                                            <category><![CDATA[Workouts]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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/VH7pGYGYnwv4MHqjEzLGVE-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a middle-aged women in workout clothes ]]></media:description>                                                            <media:text><![CDATA[a middle-aged women in workout clothes ]]></media:text>
                                <media:title type="plain"><![CDATA[a middle-aged women in workout clothes ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VH7pGYGYnwv4MHqjEzLGVE-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It’s never too late to start exercising. As a certified personal trainer, I work with so many clients in their 60s, 70s, and even 80s that are embarking on their very first fitness journeys. And when they start seeing real progress, it’s thrilling for both of us.</p><p>It’s important to always start with the basics, though, so when I meet with a beginning-level senior client for the first time, I start them off with the following four exercises. These moves are relatively friendly on the joints, help build the strength needed for more advanced exercises, and can make everyday activities easier and safer. </p><p>You won’t need any equipment right off the bat, but as you get stronger, you can start using a set of <a href="https://www.tomsguide.com/wellness/fitness/best-adjustable-dumbbells"><u>dumbbells</u></a> for a few of these exercises. </p><h2 id="how-to-do-the-four-exercises">How to do the four exercises</h2><p>Consult a doctor before trying any new activity. They may caution against certain movements based on your health history.</p><p>This workout is appropriate for most beginners, but getting your form right is crucial. Consider meeting with a certified personal trainer who can teach you how to do the moves correctly. Exercising with improper form can cause pain or injury. </p><p>You’ll just need a section of bare wall and a sturdy chair for this workout. </p><p>Start with one set of 10 reps for chair squats, standing dead bug, and wall push-ups, and hold the wall plank for 30 seconds. If that feels easy, add an additional set or two, gradually increase your reps to 12-15, and hold the wall plank for 45-60 seconds. Eventually, you’ll want to complete 3 sets for each exercise, 3-4 times per week. Once that stops being a challenge, you’ll be ready for a more advanced routine. </p><p>Here’s how to do the exercises:</p><h3 class="article-body__section" id="section-1-chair-squats"><span>1. Chair squats</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="Bo5CcPvgMmoDY8PLN4wDHU" name="chair squat" alt="sit to stand squat" src="https://cdn.mos.cms.futurecdn.net/Bo5CcPvgMmoDY8PLN4wDHU-1920-80.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><ul><li>Stand tall in front of a chair with your feet hip-width apart.</li><li>Engage your core muscles, drawing your belly button towards your spine.</li><li>Hinge your hips behind you.</li><li>Bend your knees and slowly lower your hips towards the seat.</li><li>Lengthen your arms in front of you for balance.</li><li>Tap your hips onto the seat, then stand back up.</li><li>Continue for 10-15 reps.</li></ul><h3 class="article-body__section" id="section-2-wall-planks"><span>2. Wall planks</span></h3><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/K4ZijUE-o1A" allowfullscreen></iframe></div></div><ul><li>Stand facing a wall.</li><li>Place your forearms on the wall. Keep your elbows aligned with your shoulders.</li><li>Engage your core muscles.</li><li>Step your feet away from the wall.</li><li>Maintain a straight line with your body, from the top of your head to your toes.</li><li>Hold for 30-60 seconds.</li></ul><h3 class="article-body__section" id="section-3-standing-deadbug"><span>3. Standing deadbug</span></h3><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/DERetW6rStg" allowfullscreen></iframe></div></div><ul><li>Stand with your feet hip-width apart and your back against the wall.</li><li>Engage your core muscles.</li><li>Lift your left arm above your head while bringing your right knee to a 90-degree angle.</li><li>Pause briefly.</li><li>Lower your left arm and right leg.</li><li>Lift your right arm above your head while bringing your left knee to a 90-degree angle.</li><li>Pause briefly.</li><li>Lower your right arm and left leg.</li><li>Continue alternating between your two sides for 10-15 reps each side.</li></ul><h3 class="article-body__section" id="section-4-wall-push-ups"><span>4. Wall push-ups</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="EsTwpfEEGnBW9zVKV8L4L5" name="wall push up" alt="a man doing push ups on a wall" src="https://cdn.mos.cms.futurecdn.net/EsTwpfEEGnBW9zVKV8L4L5-1920-80.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><ul><li>Stand facing a wall.</li><li>Lengthen your arms and place your hands against the wall.</li><li>Engage your core muscles.</li><li>Bend your elbows and lower your chest towards the wall, keeping your head, hips, and feet in alignment.</li><li>Push yourself back up to the starting position.</li><li>Continue for 10-15 reps</li></ul><h2 id="benefits-of-these-exercises">Benefits of these exercises</h2><p>This workout targets major muscle groups in the lower body, upper body, and core, responsible for everyday movements like walking, getting up from a seated position, pushing yourself up, and balancing.</p><p>These exercises are beginner versions of more standard movements. Mastering chair squats prepares you for bodyweight squats, and mastering wall planks, standing deadbugs, and wall push-ups prepares you for regular push-ups, planks, and deadbugs. The chair and wall provide assistance as you strengthen your body progressively and with good form.</p><p>Since this workout is done standing, it’s appropriate for seniors who have trouble getting onto the floor. For those unable to do standard push ups, planks, and deadbugs, there are easy ways to make the standing versions of these moves more challenging: small weights can be held during the standing deadbug, and stepping further away from the wall will amp up the difficulty of the wall plank and wall push up. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.js" async></script><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-to-be-more-mobile-in-their-60s-and-70s-3-low-impact-exercises-you-should-start-with" target="_blank"><strong>I teach people to be more mobile in their 60s and 70s: 3 low-impact exercises you should start with</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/fitness/forget-burpees-the-pilates-burpee-is-beginner-friendly-and-low-impact-and-youll-love-it" target="_blank"><strong>Forget burpees —the 'Pilates burpee' is beginner-friendly and low-impact (and you’ll love it)</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/a-yoga-instructor-says-this-is-the-5-minute-yoga-routine-you-need-for-strong-and-mobile-hips-and-core-muscles" target="_blank"><strong>A yoga instructor says this is the 5-minute yoga routine you need for strong and mobile hips and core muscles</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I review running shoes for a living: Here’s the pair I’ve chosen to wear for my 7th marathon, and it’s probably not what you’re expecting ]]></title>
                                                                                                <dc:content><![CDATA[ <p>As a fitness editor, I spend my days writing about running shoes, so choosing a pair to wear on race day often feels (almost) as difficult as the race itself. The good news is, I’m currently a few days away from my seventh marathon, and I’ve settled on my race-day shoe — and it’s probably not what you’re expecting. </p><p>After testing most of the <a href="https://www.tomsguide.com/best-picks/best-carbon-fiber-running-shoes">best carbon-plate running shoes</a> on the market, I’ve chosen the <a href="https://www.tomsguide.com/wellness/running/weve-run-60-miles-in-the-new-balance-supercomp-rebel-v1-and-its-our-new-favorite-fast-training-shoe">New Balance Supercomp Rebel v1 </a>as my race-day shoe, even though New Balance markets it as an everyday runner rather than a racer. Read on to find out why this shoe in particular made it into my hand luggage as I fly to Frankfurt, Germany, for my next 26.2-mile race. </p><div class="product"><a data-dimension112="bd876ce0-cd6b-11f1-852c-df34de4e5afd" data-action="Deal Block" data-label="SuperComp Rebel v1" data-dimension48="SuperComp Rebel v1" data-dimension25="$199" href="https://www.newbalance.com/pd/supercomp-rebel/MREBXV1_RU-FTW-814193-PMG-NA.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:782px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="6RQwMy7NdQfbpW3fu4bSyM" name="nb sc rebel" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6RQwMy7NdQfbpW3fu4bSyM-1920-80.jpg" mos="" align="middle" fullscreen="" width="782" height="782" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.newbalance.com/pd/supercomp-rebel/MREBXV1_RU-FTW-814193-PMG-NA.html" target="_blank" rel="nofollow" data-dimension112="bd876ce0-cd6b-11f1-852c-df34de4e5afd" data-action="Deal Block" data-label="SuperComp Rebel v1" data-dimension48="SuperComp Rebel v1" data-dimension25="$199">SuperComp Rebel v1: $199</a></strong><br>The New Balance SC Rebel v1 is a super trainer, designed for fast, everyday miles, with a good amount of versatility. <a class="view-deal button" href="https://www.newbalance.com/pd/supercomp-rebel/MREBXV1_RU-FTW-814193-PMG-NA.html" target="_blank" rel="nofollow" data-dimension112="bd876ce0-cd6b-11f1-852c-df34de4e5afd" data-action="Deal Block" data-label="SuperComp Rebel v1" data-dimension48="SuperComp Rebel v1" data-dimension25="$199">View Deal</a></p></div><h3 class="article-body__section" id="section-the-carbon-infused-plate-is-more-flexible-than-other-racing-shoes"><span>The carbon-infused plate is more flexible than other racing shoes </span></h3><p>Ok, I ever-so-slightly lied — this shoe isn’t completely plateless. New Balance markets this shoe as a fast shoe for everyday runs, or a supertrainer, if you will. A lot of runners use the New Balance Rebel v1 for training and the New Balance SuperComp Elite v6 for race day, yet despite running a PR in the New Balance SC Elite v5, every time I run in the Elite v6, I get a hotspot on the bottom of my heel, where the carbon plate sits, often leaving me with a blister.</p><p>The Rebel v1 has a carbon-infused Pebax plate, which is a little more flexible than the plate used in the SuperComp Elite v6, making it more comfortable for regular use. In other words, the plate is plastic, not carbon. But don’t let this put you off — it makes the shoe more affordable than a lot of carbon racers, and it’s actually more comfortable underfoot. </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="Kn8XS32weRzoWD4sWZY7YN" name="New Balance SC Rebel v1" alt="New Balance SC Rebel v1" src="https://cdn.mos.cms.futurecdn.net/Kn8XS32weRzoWD4sWZY7YN-1920-80.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><h3 class="article-body__section" id="section-2-it-s-energetic-and-bouncy"><span>2. It’s energetic and bouncy </span></h3><p>After running over 100 miles in this shoe, I think it still has enough speed underfoot to be a contender for race day, while also feeling fantastic on slower, easy miles. It’s not the most stable or supportive if you’re running slowly, but it comes into its own on longer runs at race pace and tempo sessions. </p><p>I’ve worn this shoe for a 22-mile long run, with a few miles at race pace, and found it coped with everything I threw at it. I personally find it a lot more stable than a lot of the more aggressive carbon plates, and it’s definitely an exciting shoe to run in. </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="RgY8yAxbryySNcPqUnSsJN" name="New Balance SC Rebel v1" alt="New Balance SC Rebel v1" src="https://cdn.mos.cms.futurecdn.net/RgY8yAxbryySNcPqUnSsJN-1920-80.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><h3 class="article-body__section" id="section-3-it-has-great-traction-on-wet-roads"><span>3. It has great traction on wet roads </span></h3><p>My running coach used to tell me, "Control what you can control," and one thing no runner can control on the day of the race is the weather. Frankfurt looks pretty wet on race day, which is another reason I’m choosing the SuperComp Rebel v1, which, in my testing, has a good amount of grip even on wet roads.</p><p>Overall, I’ve been impressed with the versatility of this trainer, making it one of my favorite running shoes I’ve tested this year. Whether it propels me to a PR remains to be seen, but if you’re looking for a good all-rounder with a great deal of traction and a fun ride underfoot, this is a shoe to consider.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.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/running/rheon-running-shorts-are-being-used-by-top-road-track-and-trail-runners-i-spoke-to-an-expert-to-find-out-more-about-the-tech"><strong>Rheon running shorts are being used by top road, track and trail runners — I spoke to an expert to find out more about the tech</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/running/i-tested-shoes-from-5-up-and-coming-running-brands-here-are-the-ones-worth-your-money"><strong>I tested shoes from 5 up-and-coming running brands — here are the ones worth your money</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/no-squats-i-just-tried-this-8-minute-chair-workout-and-its-perfect-for-seniors-beginners-and-anyone-looking-to-build-strength-without-impact" target="_blank"><strong>No squats! I just tried this 8-minute chair workout, and it’s perfect for seniors, beginners, and anyone looking to build strength without impact</strong></a><strong></strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/running/i-review-running-shoes-for-a-living-heres-the-pair-ive-chosen-to-wear-for-my-7th-marathon-and-its-probably-not-what-youre-expecting</link>
                                                                            <description>
                            <![CDATA[ I spend my days reviewing running shoes, and this is the pair I've picked for my next marathon. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YqGFqc3y5dN9nKedtAvDjb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DBq8nVh6ng4RYNy9kU4GEZ-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 24 Oct 2026 10:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Running]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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/DBq8nVh6ng4RYNy9kU4GEZ-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[New Balance SC Rebel v1 and Jane McGuire ]]></media:description>                                                            <media:text><![CDATA[New Balance SC Rebel v1 and Jane McGuire ]]></media:text>
                                <media:title type="plain"><![CDATA[New Balance SC Rebel v1 and Jane McGuire ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DBq8nVh6ng4RYNy9kU4GEZ-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As a fitness editor, I spend my days writing about running shoes, so choosing a pair to wear on race day often feels (almost) as difficult as the race itself. The good news is, I’m currently a few days away from my seventh marathon, and I’ve settled on my race-day shoe — and it’s probably not what you’re expecting. </p><p>After testing most of the <a href="https://www.tomsguide.com/best-picks/best-carbon-fiber-running-shoes">best carbon-plate running shoes</a> on the market, I’ve chosen the <a href="https://www.tomsguide.com/wellness/running/weve-run-60-miles-in-the-new-balance-supercomp-rebel-v1-and-its-our-new-favorite-fast-training-shoe">New Balance Supercomp Rebel v1 </a>as my race-day shoe, even though New Balance markets it as an everyday runner rather than a racer. Read on to find out why this shoe in particular made it into my hand luggage as I fly to Frankfurt, Germany, for my next 26.2-mile race. </p><div class="product"><a data-dimension112="bd876ce0-cd6b-11f1-852c-df34de4e5afd" data-action="Deal Block" data-label="SuperComp Rebel v1" data-dimension48="SuperComp Rebel v1" data-dimension25="$199" href="https://www.newbalance.com/pd/supercomp-rebel/MREBXV1_RU-FTW-814193-PMG-NA.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:782px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="6RQwMy7NdQfbpW3fu4bSyM" name="nb sc rebel" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6RQwMy7NdQfbpW3fu4bSyM-1920-80.jpg" mos="" align="middle" fullscreen="" width="782" height="782" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.newbalance.com/pd/supercomp-rebel/MREBXV1_RU-FTW-814193-PMG-NA.html" target="_blank" rel="nofollow" data-dimension112="bd876ce0-cd6b-11f1-852c-df34de4e5afd" data-action="Deal Block" data-label="SuperComp Rebel v1" data-dimension48="SuperComp Rebel v1" data-dimension25="$199">SuperComp Rebel v1: $199</a></strong><br>The New Balance SC Rebel v1 is a super trainer, designed for fast, everyday miles, with a good amount of versatility. <a class="view-deal button" href="https://www.newbalance.com/pd/supercomp-rebel/MREBXV1_RU-FTW-814193-PMG-NA.html" target="_blank" rel="nofollow" data-dimension112="bd876ce0-cd6b-11f1-852c-df34de4e5afd" data-action="Deal Block" data-label="SuperComp Rebel v1" data-dimension48="SuperComp Rebel v1" data-dimension25="$199">View Deal</a></p></div><h3 class="article-body__section" id="section-the-carbon-infused-plate-is-more-flexible-than-other-racing-shoes"><span>The carbon-infused plate is more flexible than other racing shoes </span></h3><p>Ok, I ever-so-slightly lied — this shoe isn’t completely plateless. New Balance markets this shoe as a fast shoe for everyday runs, or a supertrainer, if you will. A lot of runners use the New Balance Rebel v1 for training and the New Balance SuperComp Elite v6 for race day, yet despite running a PR in the New Balance SC Elite v5, every time I run in the Elite v6, I get a hotspot on the bottom of my heel, where the carbon plate sits, often leaving me with a blister.</p><p>The Rebel v1 has a carbon-infused Pebax plate, which is a little more flexible than the plate used in the SuperComp Elite v6, making it more comfortable for regular use. In other words, the plate is plastic, not carbon. But don’t let this put you off — it makes the shoe more affordable than a lot of carbon racers, and it’s actually more comfortable underfoot. </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="Kn8XS32weRzoWD4sWZY7YN" name="New Balance SC Rebel v1" alt="New Balance SC Rebel v1" src="https://cdn.mos.cms.futurecdn.net/Kn8XS32weRzoWD4sWZY7YN-1920-80.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><h3 class="article-body__section" id="section-2-it-s-energetic-and-bouncy"><span>2. It’s energetic and bouncy </span></h3><p>After running over 100 miles in this shoe, I think it still has enough speed underfoot to be a contender for race day, while also feeling fantastic on slower, easy miles. It’s not the most stable or supportive if you’re running slowly, but it comes into its own on longer runs at race pace and tempo sessions. </p><p>I’ve worn this shoe for a 22-mile long run, with a few miles at race pace, and found it coped with everything I threw at it. I personally find it a lot more stable than a lot of the more aggressive carbon plates, and it’s definitely an exciting shoe to run in. </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="RgY8yAxbryySNcPqUnSsJN" name="New Balance SC Rebel v1" alt="New Balance SC Rebel v1" src="https://cdn.mos.cms.futurecdn.net/RgY8yAxbryySNcPqUnSsJN-1920-80.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><h3 class="article-body__section" id="section-3-it-has-great-traction-on-wet-roads"><span>3. It has great traction on wet roads </span></h3><p>My running coach used to tell me, "Control what you can control," and one thing no runner can control on the day of the race is the weather. Frankfurt looks pretty wet on race day, which is another reason I’m choosing the SuperComp Rebel v1, which, in my testing, has a good amount of grip even on wet roads.</p><p>Overall, I’ve been impressed with the versatility of this trainer, making it one of my favorite running shoes I’ve tested this year. Whether it propels me to a PR remains to be seen, but if you’re looking for a good all-rounder with a great deal of traction and a fun ride underfoot, this is a shoe to consider.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.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/running/rheon-running-shorts-are-being-used-by-top-road-track-and-trail-runners-i-spoke-to-an-expert-to-find-out-more-about-the-tech"><strong>Rheon running shorts are being used by top road, track and trail runners — I spoke to an expert to find out more about the tech</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/running/i-tested-shoes-from-5-up-and-coming-running-brands-here-are-the-ones-worth-your-money"><strong>I tested shoes from 5 up-and-coming running brands — here are the ones worth your money</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/no-squats-i-just-tried-this-8-minute-chair-workout-and-its-perfect-for-seniors-beginners-and-anyone-looking-to-build-strength-without-impact" target="_blank"><strong>No squats! I just tried this 8-minute chair workout, and it’s perfect for seniors, beginners, and anyone looking to build strength without impact</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The clocks fall back next Sunday — sleep experts are divided on whether it’s actually a good thing ]]></title>
                                                                                                <dc:content><![CDATA[ <p>For most US states, the clocks go back on <strong>Sunday, November 1st</strong>, marking the end of daylight savings. At 2 a.m. the clocks will go back to 1 a.m., which means an extra hour in bed. <br><br>But while an extra hour of sleep might sound like an alluring prospect, not everyone welcomes another clock change. Some sleep experts note the sudden shift negatively disrupts our <a href="https://www.tomsguide.com/wellness/sleep/circadian-rhythm">circadian function</a>, while others say shifting with the sun can instead keep your body clock aligned to natural rhythm.<br><br>With a <a href="https://news.gallup.com/poll/657584/half-daylight-saving-time-sunsetted.aspx" target="_blank">2025 poll</a> found that over half of Americans support abolishing the practice, we explore the pros and cons of both. </p><h2 class="article-body__section" id="section-should-daylight-savings-be-abolished-the-pros-and-cons"><span>Should daylight savings be abolished? The pros and cons...</span></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="Vd4Cjuin8vnVhUkTPnRPfN" name="TG_Sleep_280426_ps0812" alt="A woman lying on her back on a bed in the dark. She's wearing an eye mask and a sleep tracker." src="https://cdn.mos.cms.futurecdn.net/Vd4Cjuin8vnVhUkTPnRPfN-1920-80.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><h2 id="the-pros-of-abolishing-daylight-saving">The pros of abolishing daylight saving...</h2><p>“There are arguments on both sides," notes Dr. Zoe Williams, <a href="https://www.dreams.co.uk/" target="_blank">NHS GP and Dreams’ Resident Sleep Expert.</a> "But from a sleep and health point of view, our bodies generally like consistency. We all have an internal body clock, or circadian rhythm, which helps regulate not only when we sleep and wake, but things like hormone release, alertness and appetite." </p><div><blockquote><p>Having our routines suddenly shift twice a year means there is inevitably a period where that rhythm has to adjust</p><p>Dr. Zoe Williams</p></blockquote></div><p>Dr. Williams explains that when our routines are forced to suddenly shift twice a year, there's inevitably a period where that rhythm has to adjust.<br><br>“An hour might not sound like a big change, but our bodies don’t work according to the clock on the wall," explains Dr. Williams. "We get used to waking up, eating, winding down and going to sleep at certain times." </p><div><blockquote><p>Our circadian rhythms are tied to the rising of the sun... morning light is essential to wake us up</p><p>Dr. Tim Mercer</p></blockquote></div><p><a href="https://operabeds.com/pages/dr-tim-mercer" target="_blank">Dr. Tim Mercer</a>, NHS GP Partner & GP Trainer with <a href="https://operabeds.com/collections/adjustable-beds" target="_blank">Opera Beds</a> adds that for those with chronic conditions, such as dementia, the change in the clock can be "unsettling."</p><p>“It can increase confusion and agitation in the late afternoon or evening, a phenomenon known as sundowning," he says. "This happens because reduced sunlight and disrupted circadian rhythms make it harder to tell whether it is morning or evening.”</p><h2 id="the-cons-of-abolishing-daylight-saving">The cons of abolishing daylight saving...</h2><p>However, Dr. Mercer notes that in many places, the time change keeps our routine aligned with the natural daylight, which is "biologically and socially useful for our health."</p><p>“Our circadian rhythms are tied to the rising of the sun rather than the geographical time, and morning light is essential to wake us up," he explains. "Similarly, evening darkness helps us unwind and fall asleep."</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqgmVe"></div>                            </div>                            <script src="https://kwizly.com/embed/OqgmVe.js" async></script><h2 id="will-the-clocks-stop-changing">Will the clocks stop changing?</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="rELtWpioYiZVagq6y7qYRE" name="Daylight saving time ends - clock in leaves" alt="An image of an alarm clock buried in autumnal leaves with a blue silk sleep mask pulled over it" src="https://cdn.mos.cms.futurecdn.net/rELtWpioYiZVagq6y7qYRE-1920-80.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: Getty Images)</span></figcaption></figure><p>While other parts of the world are set on adhering to daylight savings for the next few years at least, here in the US it's a little complicated. <br><br>The <a href="https://www.bbc.co.uk/news/articles/cz9l9venjd8o" target="_blank">Sunshine Protection Ac</a>t, which aims to make daylight saving time permanent, passed the house in 2026. But it's yet to make it through the Senate, which is why you'll be stuck fiddling with the oven clock once again this fall.</p><p>And if the clock changes do come to an end, we'll run into the question of which time zone to stay in. Lighter evenings or lighter mornings — where do you stand in the debate?</p><h2 id="what-us-states-don-39-t-observe-the-clock-change">What US states don't observe the clock change?</h2><p>Not everywhere in the US changes time during the year. Hawaii remains in one time zone year-round, as does US territories American Samoa, Guam, Northern Mariana Islands, Puerto Rico and the Virgin Islands.</p><p>Most of Arizona also remains in Mountain Standard Time year-round. Apart from Navajo County, which observes the clock change to keep it aligned with reservations in Utah and New Mexico.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep/the-clocks-fall-back-next-sunday-sleep-experts-are-divided-on-whether-its-actually-a-good-thing</link>
                                                                            <description>
                            <![CDATA[ Those in support of abolishing daylight savings cite circadian disruptions as a driving factor, while those against the abolishment argue that humans are meant to be aligned with the sun. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BDXKYUjB2KairjH3sDsZFa</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UMf5PJujutaN66fi8fjiuj-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 24 Oct 2026 08:45:00 +0000</pubDate>                                                                                                                                <updated>Sat, 24 Oct 2026 12:20:27 +0000</updated>
                                                                                                                                            <category><![CDATA[Sleep]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ ruth.jones@futurenet.com (Ruth Jones) ]]></author>                    <dc:creator><![CDATA[ Ruth Jones ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/Cqbswyyro7aBYnvMKaoS6W-320-70.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/UMf5PJujutaN66fi8fjiuj-1920-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A woman lifts her arm out from under her white duvet in order to turn off her alarm clock]]></media:description>                                                            <media:text><![CDATA[A woman lifts her arm out from under her white duvet in order to turn off her alarm clock]]></media:text>
                                <media:title type="plain"><![CDATA[A woman lifts her arm out from under her white duvet in order to turn off her alarm clock]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UMf5PJujutaN66fi8fjiuj-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>For most US states, the clocks go back on <strong>Sunday, November 1st</strong>, marking the end of daylight savings. At 2 a.m. the clocks will go back to 1 a.m., which means an extra hour in bed. <br><br>But while an extra hour of sleep might sound like an alluring prospect, not everyone welcomes another clock change. Some sleep experts note the sudden shift negatively disrupts our <a href="https://www.tomsguide.com/wellness/sleep/circadian-rhythm">circadian function</a>, while others say shifting with the sun can instead keep your body clock aligned to natural rhythm.<br><br>With a <a href="https://news.gallup.com/poll/657584/half-daylight-saving-time-sunsetted.aspx" target="_blank">2025 poll</a> found that over half of Americans support abolishing the practice, we explore the pros and cons of both. </p><h2 class="article-body__section" id="section-should-daylight-savings-be-abolished-the-pros-and-cons"><span>Should daylight savings be abolished? The pros and cons...</span></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="Vd4Cjuin8vnVhUkTPnRPfN" name="TG_Sleep_280426_ps0812" alt="A woman lying on her back on a bed in the dark. She's wearing an eye mask and a sleep tracker." src="https://cdn.mos.cms.futurecdn.net/Vd4Cjuin8vnVhUkTPnRPfN-1920-80.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><h2 id="the-pros-of-abolishing-daylight-saving">The pros of abolishing daylight saving...</h2><p>“There are arguments on both sides," notes Dr. Zoe Williams, <a href="https://www.dreams.co.uk/" target="_blank">NHS GP and Dreams’ Resident Sleep Expert.</a> "But from a sleep and health point of view, our bodies generally like consistency. We all have an internal body clock, or circadian rhythm, which helps regulate not only when we sleep and wake, but things like hormone release, alertness and appetite." </p><div><blockquote><p>Having our routines suddenly shift twice a year means there is inevitably a period where that rhythm has to adjust</p><p>Dr. Zoe Williams</p></blockquote></div><p>Dr. Williams explains that when our routines are forced to suddenly shift twice a year, there's inevitably a period where that rhythm has to adjust.<br><br>“An hour might not sound like a big change, but our bodies don’t work according to the clock on the wall," explains Dr. Williams. "We get used to waking up, eating, winding down and going to sleep at certain times." </p><div><blockquote><p>Our circadian rhythms are tied to the rising of the sun... morning light is essential to wake us up</p><p>Dr. Tim Mercer</p></blockquote></div><p><a href="https://operabeds.com/pages/dr-tim-mercer" target="_blank">Dr. Tim Mercer</a>, NHS GP Partner & GP Trainer with <a href="https://operabeds.com/collections/adjustable-beds" target="_blank">Opera Beds</a> adds that for those with chronic conditions, such as dementia, the change in the clock can be "unsettling."</p><p>“It can increase confusion and agitation in the late afternoon or evening, a phenomenon known as sundowning," he says. "This happens because reduced sunlight and disrupted circadian rhythms make it harder to tell whether it is morning or evening.”</p><h2 id="the-cons-of-abolishing-daylight-saving">The cons of abolishing daylight saving...</h2><p>However, Dr. Mercer notes that in many places, the time change keeps our routine aligned with the natural daylight, which is "biologically and socially useful for our health."</p><p>“Our circadian rhythms are tied to the rising of the sun rather than the geographical time, and morning light is essential to wake us up," he explains. "Similarly, evening darkness helps us unwind and fall asleep."</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OqgmVe"></div>                            </div>                            <script src="https://kwizly.com/embed/OqgmVe.js" async></script><h2 id="will-the-clocks-stop-changing">Will the clocks stop changing?</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="rELtWpioYiZVagq6y7qYRE" name="Daylight saving time ends - clock in leaves" alt="An image of an alarm clock buried in autumnal leaves with a blue silk sleep mask pulled over it" src="https://cdn.mos.cms.futurecdn.net/rELtWpioYiZVagq6y7qYRE-1920-80.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: Getty Images)</span></figcaption></figure><p>While other parts of the world are set on adhering to daylight savings for the next few years at least, here in the US it's a little complicated. <br><br>The <a href="https://www.bbc.co.uk/news/articles/cz9l9venjd8o" target="_blank">Sunshine Protection Ac</a>t, which aims to make daylight saving time permanent, passed the house in 2026. But it's yet to make it through the Senate, which is why you'll be stuck fiddling with the oven clock once again this fall.</p><p>And if the clock changes do come to an end, we'll run into the question of which time zone to stay in. Lighter evenings or lighter mornings — where do you stand in the debate?</p><h2 id="what-us-states-don-39-t-observe-the-clock-change">What US states don't observe the clock change?</h2><p>Not everywhere in the US changes time during the year. Hawaii remains in one time zone year-round, as does US territories American Samoa, Guam, Northern Mariana Islands, Puerto Rico and the Virgin Islands.</p><p>Most of Arizona also remains in Mountain Standard Time year-round. Apart from Navajo County, which observes the clock change to keep it aligned with reservations in Utah and New Mexico.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Here’s my favorite watchOS 27 upgrade — and it’s one nobody is really talking about ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I’ve had an Apple Watch on my wrist for most of a decade, and one thing Apple does really well is roll out updates that improve the day-to-day experience of wearing the watch. I’ve been using <a href="https://www.tomsguide.com/wellness/smartwatches/watchos-27-is-live-7-new-features-to-try-first-on-your-apple-watch">watchOS 27</a> for the past few weeks, and my favorite feature is one nobody is really talking about — read on to find out more. </p><p>To get the new features on your watch, make sure you’ve updated to watchOS 27. To do this, install iOS 27 on your iPhone, then download the new WatchOS to your phone, or directly onto the watch by going to General, then Software Update. </p><h3 class="article-body__section" id="section-my-favorite-new-watchos-27-feature"><span>My favorite new watchOS 27 feature </span></h3><p>WatchOS 27 brings some new features to your Apple Watch, including Siri AI, which allows you to ask Siri questions or tell it to perform simple tasks on the Watch, like setting a timer or starting a workout. This new version is much more capable than its predecessor. </p><p>Yet, in my opinion, the best feature is the change to the dynamic app grid, which now shows your most recent apps at a glance. Apple hasn’t reinvented the wheel here, but it really is a game-changer — gone are the struggles of finding the app you need on the Apple Watch home screen grid, or scrolling through a long alphabetical list. </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:1804px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="m4WYYb9cwZa49jDrhG22RE" name="AW12-Live-Rewind" alt="Close-up of the Apple Watch Series 12 on a user's wrist at the Cupertino launch event on September 10, 2026" src="https://cdn.mos.cms.futurecdn.net/m4WYYb9cwZa49jDrhG22RE-1920-80.jpg" mos="" align="middle" fullscreen="" width="1804" height="1015" 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 dynamic app grid now shows only your five most frequently used or recently used apps, with a Siri icon in the center. Press the Digital Crown to open this grid. You can still tap the home screen to see the full list of your apps, and swipe down to return to the dynamic app grid. </p><p>This change confused me for a couple of days, but after living with it for a month, I can’t believe how much faster it made navigating my watch. I’d still really love to be able to customize the apps you can see on this grid, similar to the Smart Stack, but for now, this is definitely a watchOS 27 upgrade I’m using every day. </p><p>Talking of Smart Stack, Apple has also tweaked this slightly with watchOS 27. Apple added the ability to open the Smart Stack by double-tapping your thumb and index finger with last year’s watchOS 26, but with watchOS 27, things go a little further. You can still double-tap your fingers to open the Smart Stack and scroll down to the next widget in the stack. Once you find the widget you want, however, you can now tap once to open the widget.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xk8rge"></div>                            </div>                            <script src="https://kwizly.com/embed/Xk8rge.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-installed-watchos-27-and-instantly-regretted-it-heres-why">I just installed watchOS 27 and instantly regretted it — here’s why</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-review">Apple Watch Ultra 4 review: I ran 22 miles to test Apple’s ultimate adventure watch</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-vs-garmin-fenix-9-pro-price-specs-and-features-compared">Apple Watch Ultra 4 vs Garmin Fenix 9 Pro: price, specs and features compared</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/heres-my-favorite-watchos-27-upgrade-and-its-one-nobody-is-really-talking-about</link>
                                                                            <description>
                            <![CDATA[ Here's my favorite new watchOS 27 feature, and why you should try it. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">XdJJcMvpco3HNu8k3rnVaV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/jtcxiFMtKM8sjsdkKcMzff-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 24 Oct 2026 08:30:00 +0000</pubDate>                                                                                                                                <updated>Sat, 24 Oct 2026 12:20:26 +0000</updated>
                                                                                                                                            <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Wellness]]></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-320-70.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/jtcxiFMtKM8sjsdkKcMzff-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[dynamic grid on Apple Watch Ultra 4]]></media:description>                                                            <media:text><![CDATA[dynamic grid on Apple Watch Ultra 4]]></media:text>
                                <media:title type="plain"><![CDATA[dynamic grid on Apple Watch Ultra 4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/jtcxiFMtKM8sjsdkKcMzff-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve had an Apple Watch on my wrist for most of a decade, and one thing Apple does really well is roll out updates that improve the day-to-day experience of wearing the watch. I’ve been using <a href="https://www.tomsguide.com/wellness/smartwatches/watchos-27-is-live-7-new-features-to-try-first-on-your-apple-watch">watchOS 27</a> for the past few weeks, and my favorite feature is one nobody is really talking about — read on to find out more. </p><p>To get the new features on your watch, make sure you’ve updated to watchOS 27. To do this, install iOS 27 on your iPhone, then download the new WatchOS to your phone, or directly onto the watch by going to General, then Software Update. </p><h3 class="article-body__section" id="section-my-favorite-new-watchos-27-feature"><span>My favorite new watchOS 27 feature </span></h3><p>WatchOS 27 brings some new features to your Apple Watch, including Siri AI, which allows you to ask Siri questions or tell it to perform simple tasks on the Watch, like setting a timer or starting a workout. This new version is much more capable than its predecessor. </p><p>Yet, in my opinion, the best feature is the change to the dynamic app grid, which now shows your most recent apps at a glance. Apple hasn’t reinvented the wheel here, but it really is a game-changer — gone are the struggles of finding the app you need on the Apple Watch home screen grid, or scrolling through a long alphabetical list. </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:1804px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="m4WYYb9cwZa49jDrhG22RE" name="AW12-Live-Rewind" alt="Close-up of the Apple Watch Series 12 on a user's wrist at the Cupertino launch event on September 10, 2026" src="https://cdn.mos.cms.futurecdn.net/m4WYYb9cwZa49jDrhG22RE-1920-80.jpg" mos="" align="middle" fullscreen="" width="1804" height="1015" 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 dynamic app grid now shows only your five most frequently used or recently used apps, with a Siri icon in the center. Press the Digital Crown to open this grid. You can still tap the home screen to see the full list of your apps, and swipe down to return to the dynamic app grid. </p><p>This change confused me for a couple of days, but after living with it for a month, I can’t believe how much faster it made navigating my watch. I’d still really love to be able to customize the apps you can see on this grid, similar to the Smart Stack, but for now, this is definitely a watchOS 27 upgrade I’m using every day. </p><p>Talking of Smart Stack, Apple has also tweaked this slightly with watchOS 27. Apple added the ability to open the Smart Stack by double-tapping your thumb and index finger with last year’s watchOS 26, but with watchOS 27, things go a little further. You can still double-tap your fingers to open the Smart Stack and scroll down to the next widget in the stack. Once you find the widget you want, however, you can now tap once to open the widget.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xk8rge"></div>                            </div>                            <script src="https://kwizly.com/embed/Xk8rge.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-installed-watchos-27-and-instantly-regretted-it-heres-why">I just installed watchOS 27 and instantly regretted it — here’s why</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-review">Apple Watch Ultra 4 review: I ran 22 miles to test Apple’s ultimate adventure watch</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-vs-garmin-fenix-9-pro-price-specs-and-features-compared">Apple Watch Ultra 4 vs Garmin Fenix 9 Pro: price, specs and features compared</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I asked a longevity expert for 3 daily bodyweight exercises that maintain muscle mass in your 40s — here's what they chose ]]></title>
                                                                                                <dc:content><![CDATA[ <p>"Longevity" is the word on everyone's lips lately, and we all seem dialed into the best ways to boost longevity as birthdays relentlessly come and go. Recently, I spoke with expert Leslie Kenny, co-founder of the prestigious<a href="https://oxfordlongevityproject.org/" target="_blank" rel="nofollow"> Oxford Longevity Project</a>, who shared three exercises she recommends for maintaining muscle as you age.</p><p>"One of the most important things we can do for healthy aging is preserve our muscle mass," Kenny says. "From our 30s onwards, we can gradually lose muscle, particularly if we’re sedentary. This becomes increasingly important in our 40s, when hormonal changes, particularly during perimenopause for women, can make maintaining muscle more challenging."</p><p>The good news is that you don’t need an expensive gym membership or complicated equipment to start protecting your muscles. Three simple bodyweight exercises can make a real difference. We share them below. </p><h2 id="what-are-the-three-bodyweight-exercises-for-longevity">What are the three bodyweight exercises for longevity?</h2><p><em>If you experience pain at any time, stop and rest. If you're working with an injury or health condition, I recommend seeking advice before starting these exercises.</em></p><h3 class="article-body__section" id="section-1-squats-for-strong-legs-metabolic-health-and-maintaining-independence"><span>1. Squats: For strong legs, metabolic health and maintaining independence</span></h3><div><blockquote><p>When we keep our largest muscle groups strong and active, we’re doing much more than protecting our mobility. We’re also supporting the body’s ability to regulate inflammation, which is particularly important as we age.</p></blockquote></div><iframe src="https://content.jwplatform.com/players/YFgWfQv7.html" id="YFgWfQv7" title="Project Move - Goblet Dumbbell Squat" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><p>"My colleague at the Oxford Longevity Project, Sir Muir Gray, always says that the quickest route to a care home is when you can no longer sit down on the toilet and get up again unaided," says Kenny.</p><p>"It sounds rather blunt, but he makes an incredibly important point. The ability to sit down and stand up independently is one of the fundamental movements that allows us to remain independent as we age.</p><p>"<a href="https://www.tomsguide.com/how-to/squats-how-to-do-them-and-the-benefits-for-building-leg-strength-and-muscle">Squats </a>strengthen some of the biggest muscle groups in our bodies, particularly the quadriceps in our thighs and the gluteal muscles in our buttocks. But here’s something many people don’t realize: our muscles aren’t just there to move us around. They’re also endocrine organs, producing signaling molecules called <strong>myokines</strong>, some of which have powerful anti-inflammatory effects."</p><p>Contracting muscles during exercise means releasing myokines into the bloodstream that can help regulate inflammation, support metabolic health and communicate with other organs, including the brain.</p><p><strong>Tips:</strong></p><ul><li>Start with 10–15 slow, controlled squats, keeping your feet approximately shoulder-width apart and your knees tracking in the same direction as your toes.</li><li>If you’re a beginner, simply practice sitting down on a chair and standing up again without using your hands. It’s a surprisingly effective exercise.</li><li>As you get stronger, slow the lowering phase to three or four seconds, or progress to more challenging variations. And remember, the goal isn’t just to be able to do squats in your 40s. It’s to still be able to get up from the toilet unaided in your 90s!</li></ul><h3 class="article-body__section" id="section-2-push-ups-for-upper-body-strength-and-bone-health"><span>2. Push-ups: For upper-body strength and bone health</span></h3><div><blockquote><p>Push-ups are also a weight-bearing exercise, placing mechanical stress through the arms and shoulders.</p></blockquote></div><iframe src="https://content.jwplatform.com/players/neMFB64d.html" id="neMFB64d" title="Tg Fitness - Push-up" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><p>"<a href="https://www.tomsguide.com/how-to/how-to-do-a-push-up">Push-ups</a> are wonderful because they work several muscle groups simultaneously, including the chest, shoulders, triceps and core," Kenny tells us. "Upper-body strength is particularly important for women, who generally have less upper-body muscle mass than men.</p><p>"Push-ups are also a weight-bearing exercise, placing mechanical stress through the arms and shoulders, which can help support bone health alongside a comprehensive resistance-training program. They also help us preserve the strength needed for everyday activities, from lifting shopping bags to pushing ourselves up from the floor."</p><p><strong>Tips:</strong></p><ul><li>If a traditional floor push-up feels too difficult, start with your hands against a wall or sturdy kitchen counter.</li><li>Keep your body in a straight line, engage your abdominal muscles and lower yourself slowly.</li><li>Aim for 8–12 controlled repetitions, choosing a variation that makes the final few repetitions challenging without compromising your technique.</li><li>As you become stronger, gradually lower the incline until you can perform push-ups on the floor.</li></ul><h3 class="article-body__section" id="section-3-reverse-lunges-for-balance-stability-and-preserving-muscle-as-we-age"><span>3. Reverse lunges: For balance, stability and preserving muscle as we age</span></h3><div><blockquote><p>Reverse lunges strengthen the quadriceps, glutes and hamstrings while also challenging balance and coordination.</p></blockquote></div><iframe src="https://content.jwplatform.com/players/OEawmTNt.html" id="OEawmTNt" title="TG Fitness- Reverse Lunges" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><p>"<a href="https://www.tomsguide.com/news/i-did-100-lunges-a-day-for-a-week-heres-what-happened">Reverse lunges</a> strengthen the quadriceps, glutes and hamstrings while also challenging balance and coordination," Kenny says. "I particularly like single-leg exercises because they help address differences in strength between our left and right sides. </p><p>"They also challenge the stabilizing muscles around the hips, knees and ankles, which are essential for walking, climbing stairs and reducing the risk of falls as we age. And because lunges recruit several large muscle groups, they provide another opportunity to stimulate muscle contractions and the release of beneficial myokines."</p><p><strong>Tips:</strong></p><ul><li>Stand tall, step one foot backward and lower yourself slowly, bending both knees as far as is comfortable.</li><li>Push through your front foot to return to standing.</li><li>Start with 8–10 repetitions on each leg. If balance is difficult, hold onto a sturdy chair or kitchen counter.</li><li>For an extra challenge, pause briefly at the bottom of each repetition or slow down the movement.</li></ul><h3 class="article-body__section" id="section-final-tips-from-a-longevity-expert"><span>Final tips from a longevity expert</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="RRWjFooeZLxh24DZtMhcQ9" name="shutterstock_1397209415 color walk" alt="Woman outdoors in nature walking with a backpack on smiling" src="https://cdn.mos.cms.futurecdn.net/RRWjFooeZLxh24DZtMhcQ9-1920-80.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: Shutterstock)</span></figcaption></figure><p>"Muscle isn’t just about strength or looking toned. It’s metabolically active tissue that helps regulate blood glucose, supports insulin sensitivity, protects our joints and bones, and helps us remain independent as we get older," explains Kenny. </p><p>"The real secret to maintaining muscle mass isn’t doing hundreds of repetitions every day. It’s<a href="https://www.tomsguide.com/features/progressive-overload-what-is-it-and-how-does-it-help-build-muscle-and-strength"> <strong>progressive overload</strong> </a>— gradually increasing the challenge to your muscles, so they have a reason to stay strong. You can do this by increasing repetitions, slowing movements, progressing to more demanding variations, or eventually adding resistance."</p><div><blockquote><p>"I often remind people that muscle is our longevity currency. The strength we build and preserve in our 40s is an investment in how well we move, function and live in our 70s, 80s and beyond. After all, we don’t just want to live longer. We want to remain strong enough to enjoy those extra years!"</p></blockquote></div><p>Kenny says these three exercises "make an excellent short daily movement routine, but for meaningful muscle maintenance, I recommend performing <strong>challenging resistance-training sessions at least two or three times a week</strong>, allowing muscles sufficient time to recover. Ideally, a complete strength program should also include pulling movements to strengthen the back."</p><p>Finally, consider your<a href="https://www.tomsguide.com/wellness/fitness/how-much-protein-do-you-need-to-build-muscle"> protein intake</a>. While exercise stimulates muscle growth and maintenance, protein provides amino acids which are essential for repairing and rebuilding muscle tissue. <br><br>"I often remind people that <strong>muscle is our longevity currency</strong>. The strength we build and preserve in our 40s is an investment in how well we move, function and live in our 70s, 80s and beyond. After all, we don’t just want to live longer. We want to remain strong enough to enjoy those extra years!"</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OKB5GW"></div>                            </div>                            <script src="https://kwizly.com/embed/OKB5GW.js" async></script><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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank">I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/according-to-a-personal-trainer-this-exercise-is-100-times-more-effective-than-crunches-i-tried-it-and-was-humbled" target="_blank">According to a personal trainer, this exercise is 100 times more effective than crunches. I tried it and was humbled</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank">I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/workouts/i-asked-a-longevity-expert-for-3-daily-bodyweight-exercises-that-maintain-muscle-mass-in-your-40s-heres-what-they-chose</link>
                                                                            <description>
                            <![CDATA[ Leslie Kenny, who is a longevity expert and co-founder of the prestigious Oxford Longevity Project, shares three exercises to maintain muscle mass after 30. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">iYsvEMxTHtgqqvjpCuXKx5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/57CkKyN2EnRxj33ha7k9Kf-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 24 Oct 2026 04:15:00 +0000</pubDate>                                                                                                                                <updated>Sat, 24 Oct 2026 12:21:24 +0000</updated>
                                                                                                                                            <category><![CDATA[Workouts]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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;Live Science&lt;/a&gt;,&lt;a href=&quot;https://www.fitandwell.com/author/sam-hopes&quot;&gt; Fit&amp;amp;Well&lt;/a&gt;,&lt;a href=&quot;https://www.coachweb.com/author/sam-hopes&quot;&gt; Coach&lt;/a&gt;, and T3. &lt;/p&gt;&lt;p&gt;Having worked with fitness studios like F45 and Virgin Active and trained both group and 1:1, Sam now primarily teaches outdoor bootcamps, bodyweight, 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, Pilates 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, mindfulness, 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/57CkKyN2EnRxj33ha7k9Kf-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Woman in her 40s or 50s in red workout gear outdoors performing a squat on grass]]></media:description>                                                            <media:text><![CDATA[Woman in her 40s or 50s in red workout gear outdoors performing a squat on grass]]></media:text>
                                <media:title type="plain"><![CDATA[Woman in her 40s or 50s in red workout gear outdoors performing a squat on grass]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/57CkKyN2EnRxj33ha7k9Kf-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>"Longevity" is the word on everyone's lips lately, and we all seem dialed into the best ways to boost longevity as birthdays relentlessly come and go. Recently, I spoke with expert Leslie Kenny, co-founder of the prestigious<a href="https://oxfordlongevityproject.org/" target="_blank" rel="nofollow"> Oxford Longevity Project</a>, who shared three exercises she recommends for maintaining muscle as you age.</p><p>"One of the most important things we can do for healthy aging is preserve our muscle mass," Kenny says. "From our 30s onwards, we can gradually lose muscle, particularly if we’re sedentary. This becomes increasingly important in our 40s, when hormonal changes, particularly during perimenopause for women, can make maintaining muscle more challenging."</p><p>The good news is that you don’t need an expensive gym membership or complicated equipment to start protecting your muscles. Three simple bodyweight exercises can make a real difference. We share them below. </p><h2 id="what-are-the-three-bodyweight-exercises-for-longevity">What are the three bodyweight exercises for longevity?</h2><p><em>If you experience pain at any time, stop and rest. If you're working with an injury or health condition, I recommend seeking advice before starting these exercises.</em></p><h3 class="article-body__section" id="section-1-squats-for-strong-legs-metabolic-health-and-maintaining-independence"><span>1. Squats: For strong legs, metabolic health and maintaining independence</span></h3><div><blockquote><p>When we keep our largest muscle groups strong and active, we’re doing much more than protecting our mobility. We’re also supporting the body’s ability to regulate inflammation, which is particularly important as we age.</p></blockquote></div><iframe src="https://content.jwplatform.com/players/YFgWfQv7.html" id="YFgWfQv7" title="Project Move - Goblet Dumbbell Squat" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><p>"My colleague at the Oxford Longevity Project, Sir Muir Gray, always says that the quickest route to a care home is when you can no longer sit down on the toilet and get up again unaided," says Kenny.</p><p>"It sounds rather blunt, but he makes an incredibly important point. The ability to sit down and stand up independently is one of the fundamental movements that allows us to remain independent as we age.</p><p>"<a href="https://www.tomsguide.com/how-to/squats-how-to-do-them-and-the-benefits-for-building-leg-strength-and-muscle">Squats </a>strengthen some of the biggest muscle groups in our bodies, particularly the quadriceps in our thighs and the gluteal muscles in our buttocks. But here’s something many people don’t realize: our muscles aren’t just there to move us around. They’re also endocrine organs, producing signaling molecules called <strong>myokines</strong>, some of which have powerful anti-inflammatory effects."</p><p>Contracting muscles during exercise means releasing myokines into the bloodstream that can help regulate inflammation, support metabolic health and communicate with other organs, including the brain.</p><p><strong>Tips:</strong></p><ul><li>Start with 10–15 slow, controlled squats, keeping your feet approximately shoulder-width apart and your knees tracking in the same direction as your toes.</li><li>If you’re a beginner, simply practice sitting down on a chair and standing up again without using your hands. It’s a surprisingly effective exercise.</li><li>As you get stronger, slow the lowering phase to three or four seconds, or progress to more challenging variations. And remember, the goal isn’t just to be able to do squats in your 40s. It’s to still be able to get up from the toilet unaided in your 90s!</li></ul><h3 class="article-body__section" id="section-2-push-ups-for-upper-body-strength-and-bone-health"><span>2. Push-ups: For upper-body strength and bone health</span></h3><div><blockquote><p>Push-ups are also a weight-bearing exercise, placing mechanical stress through the arms and shoulders.</p></blockquote></div><iframe src="https://content.jwplatform.com/players/neMFB64d.html" id="neMFB64d" title="Tg Fitness - Push-up" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><p>"<a href="https://www.tomsguide.com/how-to/how-to-do-a-push-up">Push-ups</a> are wonderful because they work several muscle groups simultaneously, including the chest, shoulders, triceps and core," Kenny tells us. "Upper-body strength is particularly important for women, who generally have less upper-body muscle mass than men.</p><p>"Push-ups are also a weight-bearing exercise, placing mechanical stress through the arms and shoulders, which can help support bone health alongside a comprehensive resistance-training program. They also help us preserve the strength needed for everyday activities, from lifting shopping bags to pushing ourselves up from the floor."</p><p><strong>Tips:</strong></p><ul><li>If a traditional floor push-up feels too difficult, start with your hands against a wall or sturdy kitchen counter.</li><li>Keep your body in a straight line, engage your abdominal muscles and lower yourself slowly.</li><li>Aim for 8–12 controlled repetitions, choosing a variation that makes the final few repetitions challenging without compromising your technique.</li><li>As you become stronger, gradually lower the incline until you can perform push-ups on the floor.</li></ul><h3 class="article-body__section" id="section-3-reverse-lunges-for-balance-stability-and-preserving-muscle-as-we-age"><span>3. Reverse lunges: For balance, stability and preserving muscle as we age</span></h3><div><blockquote><p>Reverse lunges strengthen the quadriceps, glutes and hamstrings while also challenging balance and coordination.</p></blockquote></div><iframe src="https://content.jwplatform.com/players/OEawmTNt.html" id="OEawmTNt" title="TG Fitness- Reverse Lunges" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><p>"<a href="https://www.tomsguide.com/news/i-did-100-lunges-a-day-for-a-week-heres-what-happened">Reverse lunges</a> strengthen the quadriceps, glutes and hamstrings while also challenging balance and coordination," Kenny says. "I particularly like single-leg exercises because they help address differences in strength between our left and right sides. </p><p>"They also challenge the stabilizing muscles around the hips, knees and ankles, which are essential for walking, climbing stairs and reducing the risk of falls as we age. And because lunges recruit several large muscle groups, they provide another opportunity to stimulate muscle contractions and the release of beneficial myokines."</p><p><strong>Tips:</strong></p><ul><li>Stand tall, step one foot backward and lower yourself slowly, bending both knees as far as is comfortable.</li><li>Push through your front foot to return to standing.</li><li>Start with 8–10 repetitions on each leg. If balance is difficult, hold onto a sturdy chair or kitchen counter.</li><li>For an extra challenge, pause briefly at the bottom of each repetition or slow down the movement.</li></ul><h3 class="article-body__section" id="section-final-tips-from-a-longevity-expert"><span>Final tips from a longevity expert</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="RRWjFooeZLxh24DZtMhcQ9" name="shutterstock_1397209415 color walk" alt="Woman outdoors in nature walking with a backpack on smiling" src="https://cdn.mos.cms.futurecdn.net/RRWjFooeZLxh24DZtMhcQ9-1920-80.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: Shutterstock)</span></figcaption></figure><p>"Muscle isn’t just about strength or looking toned. It’s metabolically active tissue that helps regulate blood glucose, supports insulin sensitivity, protects our joints and bones, and helps us remain independent as we get older," explains Kenny. </p><p>"The real secret to maintaining muscle mass isn’t doing hundreds of repetitions every day. It’s<a href="https://www.tomsguide.com/features/progressive-overload-what-is-it-and-how-does-it-help-build-muscle-and-strength"> <strong>progressive overload</strong> </a>— gradually increasing the challenge to your muscles, so they have a reason to stay strong. You can do this by increasing repetitions, slowing movements, progressing to more demanding variations, or eventually adding resistance."</p><div><blockquote><p>"I often remind people that muscle is our longevity currency. The strength we build and preserve in our 40s is an investment in how well we move, function and live in our 70s, 80s and beyond. After all, we don’t just want to live longer. We want to remain strong enough to enjoy those extra years!"</p></blockquote></div><p>Kenny says these three exercises "make an excellent short daily movement routine, but for meaningful muscle maintenance, I recommend performing <strong>challenging resistance-training sessions at least two or three times a week</strong>, allowing muscles sufficient time to recover. Ideally, a complete strength program should also include pulling movements to strengthen the back."</p><p>Finally, consider your<a href="https://www.tomsguide.com/wellness/fitness/how-much-protein-do-you-need-to-build-muscle"> protein intake</a>. While exercise stimulates muscle growth and maintenance, protein provides amino acids which are essential for repairing and rebuilding muscle tissue. <br><br>"I often remind people that <strong>muscle is our longevity currency</strong>. The strength we build and preserve in our 40s is an investment in how well we move, function and live in our 70s, 80s and beyond. After all, we don’t just want to live longer. We want to remain strong enough to enjoy those extra years!"</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OKB5GW"></div>                            </div>                            <script src="https://kwizly.com/embed/OKB5GW.js" async></script><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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank">I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/according-to-a-personal-trainer-this-exercise-is-100-times-more-effective-than-crunches-i-tried-it-and-was-humbled" target="_blank">According to a personal trainer, this exercise is 100 times more effective than crunches. I tried it and was humbled</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank">I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The best golf gifts: 21 premium picks guaranteed to impress ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I am obsessed with golf. I am also addicted to golf equipment and apparel. I also love shopping for friends and loved ones (and myself), so I figured, why not combine those passions and round up the best golf gifts for any time of year? </p><p>Over the years, <strong>I've tested hundreds of golf products</strong>. I've played with the best <a href="https://www.tomsguide.com/wellness/smartwatches/i-tested-the-3-best-golf-apps-for-apple-watch-heres-my-favorite">game-tracking tool, Arccos</a>, and I've tried some <a href="https://www.tomsguide.com/wellness/fitness/stop-wasting-money-on-a-new-driver-every-year-get-this-simple-training-aid-insteadhttps://www.tomsguide.com/wellness/fitness/ive-been-golfing-for-4-years-and-these-are-the-gadgets-that-helped-me-improve">cool training aids</a>. I've used <a href="https://www.tomsguide.com/wellness/fitness/sick-of-your-golf-bag-looking-boring-i-tried-two-you-can-customize">custom golf bags</a> and <a href="https://www.tomsguide.com/wellness/fitness/foresight-gc3-launch-monitor-6-month-impressions">high-end launch monitors</a>. </p><p>I've seen it all and tried most of it (and yet I'm still not very good at golf, which proves two things: golf is hard, and equipment doesn't automatically make you good). </p><p>I've created the<strong> ultimate list of gifts for the golf lover in your life, including options for every budget</strong>. I could have included way more products, but I kept it to a manageable list of things I actually use (or would happily receive as a gift) so you can be confident you're getting something they'll like.</p><p>I <strong>didn't include highly preference-based products</strong>, especially for experienced golfers. </p><p>For example, you won't find golf balls on the list, as serious golfers typically have one ball they play, and unless you know which one it is, balls are almost guaranteed to be returned. The same goes for clubs — many golfers get fitted for the right clubs, so buying them a random 5-wood won't do the job. </p><p>Instead, we're <strong>focused on useful items </strong>golfers might not have that<strong> aren't custom or tied to specific preferences.</strong></p><p>Does that mean you can't buy balls or clubs if you know what to get? Of course not. If you know your favorite golfer plays <a href="https://www.amazon.com/Titleist-Pro-V1-2025/dp/B0DPN7QZ9R" target="_blank" rel="nofollow">Titleist Pro V1</a> or <a href="https://www.amazon.com/VICE-Drip-Version-Balls-Black/dp/B08SR9ZLSY" target="_blank" rel="nofollow">Vice Pro</a> (my golf ball of choice), for example, then by all means grab them a dozen balls and call it a day! </p><h3 class="article-body__section" id="section-quick-links-my-top-5-gifts-for-golfers"><span>Quick Links: My top 5 gifts for golfers</span></h3><ol start="1"><li><strong></strong><a href="https://www.arccosgolf.com/pages/us-air-sl" target="_blank" rel="nofollow"><strong>Arccos Air game tracking system</strong></a><strong></strong></li><li><strong></strong><a href="https://pathpalgolf.com/pages/complete-training-package" target="_blank" rel="nofollow"><strong>PathPal training aid</strong></a><strong></strong></li><li><a href="https://www.quince.com/shop/activewear/shop-by-activity/mens-golf" target="_blank" rel="nofollow"><strong>Quince affordable golf apparel</strong></a></li><li><a href="https://hackmotion.com/hackmotion-sensor-4/" target="_blank" rel="nofollow"><strong>HackMotion Sensor 4</strong></a></li><li><strong></strong><a href="https://vesselgolf.com/products/player-v-pro-stand-eden" target="_blank" rel="nofollow"><strong>Vessel Golf Player V Pro stand bag</strong></a><strong></strong></li></ol><h3 class="article-body__section" id="section-golf-apparel"><span>Golf apparel</span></h3><div class="product"><a data-dimension112="5595db6c-cee7-11f1-be82-93287409d51a" data-action="Deal Block" data-label="Quince Golf apparel: starting at $29" data-dimension48="Quince Golf apparel: starting at $29" href="https://www.quince.com/shop/activewear/shop-by-activity/mens-golf" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:399px;"><p class="vanilla-image-block" style="padding-top:125.56%;"><img id="78FdcUTCg7ciEJsjfamBbH" name="Quincepants" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/78FdcUTCg7ciEJsjfamBbH-1920-80.png" mos="" align="middle" fullscreen="" width="399" height="501" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.quince.com/shop/activewear/shop-by-activity/mens-golf?sortBy=PRICE_LOW_TO_HIGH" target="_blank" rel="nofollow" data-dimension112="5595db6c-cee7-11f1-be82-93287409d51a" data-action="Deal Block" data-label="Quince Golf apparel: starting at $29" data-dimension48="Quince Golf apparel: starting at $29" data-dimension25=""><strong>Quince Golf apparel: starting at $29</strong></a><br>Golf clothing is usually quite expensive. Most of my favorite pieces are $90 or more. But Quince is setting out to disrupt the trend by offering nice clothing at affordable prices. I tried <a href="https://www.quince.com/men/protech-golf-pants?color=riviera-blue" target="_blank" rel="nofollow">Quince golf pants</a>, a <a href="https://www.quince.com/men/recycled-flowknit-performance-polo?color=olive&gender=men&size=xl" target="_blank" rel="nofollow">comfy polo</a> and more and found them to be on the same level of comfort as stuff from more expensive brands. They're a great gift because you don't need to spend tons of money to get stylish, comfortable golf clothing for the player in your life.<a class="view-deal button" href="https://www.quince.com/shop/activewear/shop-by-activity/mens-golf" target="_blank" rel="nofollow" data-dimension112="5595db6c-cee7-11f1-be82-93287409d51a" data-action="Deal Block" data-label="Quince Golf apparel: starting at $29" data-dimension48="Quince Golf apparel: starting at $29" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5595dbda-cee7-11f1-a76f-915c31fabff3" data-action="Deal Block" data-label="3-Pack Golf Web Belt" data-dimension48="3-Pack Golf Web Belt" data-dimension25="$17" href="https://www.amazon.com/Nike-Mens-Pack-White-Gray/dp/B004NRNOG8" 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:108.25%;"><img id="brpVgfiASDYCT3oYqfMCiT" name="71H621JjWtL._AC_SX679_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/brpVgfiASDYCT3oYqfMCiT-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="735" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Mens-Pack-White-Gray/dp/B004NRNOG8" target="_blank" rel="nofollow" data-dimension112="5595dbda-cee7-11f1-a76f-915c31fabff3" data-action="Deal Block" data-label="3-Pack Golf Web Belt" data-dimension48="3-Pack Golf Web Belt" data-dimension25="$17">3-Pack Golf Web Belt: was $24 now $17</a></strong><br>Good belts are a must for golf attire, and our favorite value option is these stretchy Nike belts. This three-pack makes a great gift for golfers, considering it's one of those things you can never have enough of. Having color options allows golfers to complete their outfits, as the belt is often the finishing touch to a style.<a class="view-deal button" href="https://www.amazon.com/Nike-Mens-Pack-White-Gray/dp/B004NRNOG8" target="_blank" rel="nofollow" data-dimension112="5595dbda-cee7-11f1-a76f-915c31fabff3" data-action="Deal Block" data-label="3-Pack Golf Web Belt" data-dimension48="3-Pack Golf Web Belt" data-dimension25="$17">View Deal</a></p></div><div class="product"><a data-dimension112="5595dc48-cee7-11f1-8e38-49873a24b8e8" data-action="Deal Block" data-label="Braided Belt" data-dimension48="Braided Belt" data-dimension25="$49" href="https://thebyrd.com/products/the-braided-byrd-golf-belt-black-capped-chickadee" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:476px;"><p class="vanilla-image-block" style="padding-top:141.18%;"><img id="suZWaqKcciv8MbdqmJrErQ" name="Braided Belt" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/suZWaqKcciv8MbdqmJrErQ-1920-80.png" mos="" align="middle" fullscreen="" width="476" height="672" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://thebyrd.com/products/the-braided-byrd-golf-belt-black-capped-chickadee" target="_blank" rel="nofollow" data-dimension112="5595dc48-cee7-11f1-8e38-49873a24b8e8" data-action="Deal Block" data-label="Braided Belt" data-dimension48="Braided Belt" data-dimension25="$49">Braided Belt: was $55 now $49</a></strong><br>On the course, golfers need to carry a divot tool, ball marker, tees, balls and anything else they need to make their round enjoyable. The Byrd Belt is a fun gift that turns many of those products into a belt. And it's a nice belt that I wear off the course just as much as on it.<a class="view-deal button" href="https://thebyrd.com/products/the-braided-byrd-golf-belt-black-capped-chickadee" target="_blank" rel="nofollow" data-dimension112="5595dc48-cee7-11f1-8e38-49873a24b8e8" data-action="Deal Block" data-label="Braided Belt" data-dimension48="Braided Belt" data-dimension25="$49">View Deal</a></p></div><h3 class="article-body__section" id="section-golf-accessories"><span>Golf Accessories</span></h3><div class="product"><a data-dimension112="5595dd2e-cee7-11f1-aba9-ffa42f4dfc82" data-action="Deal Block" data-label="Odyssey Putt Target" data-dimension48="Odyssey Putt Target" data-dimension25="$8" href="https://www.pgatoursuperstore.com/odyssey-putt-target/1018975.html?cgid=golf-accessories-training-aids" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="2vAvha7DKVgfkaEV6A7ofg" name="Odyssey Putt Target" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2vAvha7DKVgfkaEV6A7ofg-1920-80.png" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.pgatoursuperstore.com/odyssey-putt-target/1018975.html?cgid=golf-accessories-training-aids" target="_blank" rel="nofollow" data-dimension112="5595dd2e-cee7-11f1-aba9-ffa42f4dfc82" data-action="Deal Block" data-label="Odyssey Putt Target" data-dimension48="Odyssey Putt Target" data-dimension25="$8">Odyssey Putt Target: $8</a></strong><br>This is the perfect gift for the golfer who seemingly has everything. It's a putting target the size of a golf hole, so when the putting green is busy and all the holes are taken, they can throw this down and get their warm-up putts in. It's thoughtful and cheap — two of my favorite elements of any gift.<a class="view-deal button" href="https://www.pgatoursuperstore.com/odyssey-putt-target/1018975.html?cgid=golf-accessories-training-aids" target="_blank" rel="nofollow" data-dimension112="5595dd2e-cee7-11f1-aba9-ffa42f4dfc82" data-action="Deal Block" data-label="Odyssey Putt Target" data-dimension48="Odyssey Putt Target" data-dimension25="$8">View Deal</a></p></div><div class="product"><a data-dimension112="5595dd9c-cee7-11f1-a1d7-5350f755f5ef" data-action="Deal Block" data-label="Magnetic Towel" data-dimension48="Magnetic Towel" data-dimension25="$30" href="https://ghostgolf.com/collections/towels/products/magnetic-towel-greenside" 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:100.00%;"><img id="NqKhij8fZ47hpCeqjJpSP4" name="golf towel.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NqKhij8fZ47hpCeqjJpSP4-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://ghostgolf.com/collections/towels/products/magnetic-towel-greenside" target="_blank" rel="nofollow" data-dimension112="5595dd9c-cee7-11f1-a1d7-5350f755f5ef" data-action="Deal Block" data-label="Magnetic Towel" data-dimension48="Magnetic Towel" data-dimension25="$30">Magnetic Towel: $30</a></strong><br>Another piece of equipment a golfer can never have enough of is a fresh golf towel for their bag. We like this magnetic one that can be picked up off the ground quickly with a club and has plenty of great color options. Ghost Golf has quickly risen to become one of the most popular brands, and it's largely thanks to making high-quality gear.<a class="view-deal button" href="https://ghostgolf.com/collections/towels/products/magnetic-towel-greenside" target="_blank" rel="nofollow" data-dimension112="5595dd9c-cee7-11f1-a1d7-5350f755f5ef" data-action="Deal Block" data-label="Magnetic Towel" data-dimension48="Magnetic Towel" data-dimension25="$30">View Deal</a></p></div><div class="product"><a data-dimension112="5595de0a-cee7-11f1-a203-cd3ca1ab7d84" data-action="Deal Block" data-label="2 Layer Golf Trunk Organizer" data-dimension48="2 Layer Golf Trunk Organizer" data-dimension25="$32" href="https://www.amazon.com/Organizer-Waterproof-Ventilated-Compartment-Accessories/dp/B09PZZ1QRM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1408px;"><p class="vanilla-image-block" style="padding-top:106.53%;"><img id="6q42gErTa4JearPAxSRMtk" name="2 Layer Golf Trunk Organizer" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6q42gErTa4JearPAxSRMtk-1920-80.png" mos="" align="middle" fullscreen="" width="1408" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Organizer-Waterproof-Ventilated-Compartment-Accessories/dp/B09PZZ1QRM" target="_blank" rel="nofollow" data-dimension112="5595de0a-cee7-11f1-a203-cd3ca1ab7d84" data-action="Deal Block" data-label="2 Layer Golf Trunk Organizer" data-dimension48="2 Layer Golf Trunk Organizer" data-dimension25="$32">2 Layer Golf Trunk Organizer: was $35 now $32</a></strong><br>I have this organizer in my trunk, and it's helped me make sure I always have a couple of pairs of golf shoes (I have a couple dozen pairs, so it's good to have some handy) and all my accessories ready to go. Sure, your golfer might just throw the stuff loose in their trunk, but why do that when this organizer is readily available?<a class="view-deal button" href="https://www.amazon.com/Organizer-Waterproof-Ventilated-Compartment-Accessories/dp/B09PZZ1QRM" target="_blank" rel="nofollow" data-dimension112="5595de0a-cee7-11f1-a203-cd3ca1ab7d84" data-action="Deal Block" data-label="2 Layer Golf Trunk Organizer" data-dimension48="2 Layer Golf Trunk Organizer" data-dimension25="$32">View Deal</a></p></div><div class="product"><a data-dimension112="5595de78-cee7-11f1-9b2d-cd38528f2fe5" data-action="Deal Block" data-label="Golf Tumbler 30oz" data-dimension48="Golf Tumbler 30oz" data-dimension25="$39" href="https://www.tallytumbler.com/products/golf-tally-tumbler" 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:100.00%;"><img id="gB4epwH8ghPQ6HDFKXgF9n" name="Golf Tumbler" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gB4epwH8ghPQ6HDFKXgF9n-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.tallytumbler.com/products/golf-tally-tumbler" target="_blank" rel="nofollow" data-dimension112="5595de78-cee7-11f1-9b2d-cd38528f2fe5" data-action="Deal Block" data-label="Golf Tumbler 30oz" data-dimension48="Golf Tumbler 30oz" data-dimension25="$39">Golf Tumbler 30oz: $39</a></strong><br>I just tried one of these tumblers, and it's a fun novelty to be sure! Importantly, it also works as a good cup for keeping your liquids cold (or warm) while offering a fun way to track your golf score and stats. If you think the golfer in your life has everything, this might be the perfect gift to get them that they haven't snagged yet. And if you prefer a smaller cup, you can get a <a href="https://www.tallytumbler.com/products/golf-tally-tumbler-20oz" target="_blank" rel="nofollow">20oz version</a>, too.<a class="view-deal button" href="https://www.tallytumbler.com/products/golf-tally-tumbler" target="_blank" rel="nofollow" data-dimension112="5595de78-cee7-11f1-9b2d-cd38528f2fe5" data-action="Deal Block" data-label="Golf Tumbler 30oz" data-dimension48="Golf Tumbler 30oz" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="5595dee6-cee7-11f1-b1d4-d39090d8916e" data-action="Deal Block" data-label="Golf Organizer" data-dimension48="Golf Organizer" data-dimension25="$59" href="https://www.amazon.com/Morvat-Organizer-Accessories-Organize-Equipment/dp/B0799QHWF6/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1447px;"><p class="vanilla-image-block" style="padding-top:103.66%;"><img id="tXeeBti6hHdSxbUg9p98Q8" name="91THUOGoGLL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tXeeBti6hHdSxbUg9p98Q8-1920-80.jpg" mos="" align="middle" fullscreen="" width="1447" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Morvat-Organizer-Accessories-Organize-Equipment/dp/B0799QHWF6/" target="_blank" rel="nofollow" data-dimension112="5595dee6-cee7-11f1-b1d4-d39090d8916e" data-action="Deal Block" data-label="Golf Organizer" data-dimension48="Golf Organizer" data-dimension25="$59">Golf Organizer: $59</a></strong><br>Do you know a golfer with so much equipment that they can't organize it? Then this budget-friendly golf bag organizer is a must. It's designed to hold two bags and has shelves for the rest of the golfer's gear, like their shoes, balls and everything else. Just be sure they have the space for this before buying.<a class="view-deal button" href="https://www.amazon.com/Morvat-Organizer-Accessories-Organize-Equipment/dp/B0799QHWF6/" target="_blank" rel="nofollow" data-dimension112="5595dee6-cee7-11f1-b1d4-d39090d8916e" data-action="Deal Block" data-label="Golf Organizer" data-dimension48="Golf Organizer" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="5595df54-cee7-11f1-893c-5f7074aab882" data-action="Deal Block" data-label="Headcover" data-dimension48="Headcover" data-dimension25="$" href="https://pinsandaces.com/collections/headcovers" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:125.00%;"><img id="BF97sXJr8AbxQdcmpgt2mg" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BF97sXJr8AbxQdcmpgt2mg-1920-80.png" mos="" align="middle" fullscreen="" width="600" height="750" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Every golfer needs headcovers to protect their woods, hybrids and putter, so getting a stylish, themed one from Pins & Aces is a perfect gift. The company makes some of the most fabulous head covers on the market, and you can choose from a variety to suit the tastes of the person you're shopping for (there are a ton of options, from licensed brands to original designs).<a class="view-deal button" href="https://pinsandaces.com/collections/headcovers" target="_blank" rel="nofollow" data-dimension112="5595df54-cee7-11f1-893c-5f7074aab882" data-action="Deal Block" data-label="Headcover" data-dimension48="Headcover" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5595dfc2-cee7-11f1-80d2-eb5d0ce750fc" data-action="Deal Block" data-label="Player V Pro" data-dimension48="Player V Pro" data-dimension25="$489" href="https://vesselgolf.com/products/player-v-pro-stand" 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="G2LsbYrPqZmrTngEHUqzub" name="Player V Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/G2LsbYrPqZmrTngEHUqzub-1920-80.png" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>To me, Vessel bags epitomize golf luxury. The Player V Pro was the best golf bag I've ever used, but the <a href="https://vesselgolf.com/products/player-vi-pro-stand" target="_blank" rel="nofollow" data-dimension112="5595dfc2-cee7-11f1-80d2-eb5d0ce750fc" data-action="Deal Block" data-label="Player V Pro" data-dimension48="Player V Pro" data-dimension25="$489">Player VI Pro</a> has surpassed it. However, if you want to get a tremendous bag for a little less, I can still easily recommend the Player V Pro! I even had the chance to <a href="https://www.tomsguide.com/wellness/fitness/i-think-we-may-have-the-biggest-market-share-on-tour-vessel-golfs-ceo-and-players-use-the-bags-by-choice">talk to Vessel's CEO</a> about what makes the bags so good.<a class="view-deal button" href="https://vesselgolf.com/products/player-v-pro-stand" target="_blank" rel="nofollow" data-dimension112="5595dfc2-cee7-11f1-80d2-eb5d0ce750fc" data-action="Deal Block" data-label="Player V Pro" data-dimension48="Player V Pro" data-dimension25="$489">View Deal</a></p></div><div class="product"><a data-dimension112="5595e030-cee7-11f1-8311-77ba8d3a8482" data-action="Deal Block" data-label="AI Navigator GPS+ Electric Caddy" data-dimension48="AI Navigator GPS+ Electric Caddy" data-dimension25="$1895" href="https://www.pgatoursuperstore.com/ai-navigator-gps-electric-caddy/2000000043838.html?dwvar_2000000043838_STK_COLOR=5&cgid=golf-bags-carts-ppcart-electric" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="wuf9d8NExMGrYzZRy4D6H9" name="AI Navigator GPS+ Electric Caddy" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wuf9d8NExMGrYzZRy4D6H9-1920-80.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.pgatoursuperstore.com/ai-navigator-gps-electric-caddy/2000000043838.html?dwvar_2000000043838_STK_COLOR=5&cgid=golf-bags-carts-ppcart-electric" target="_blank" rel="nofollow" data-dimension112="5595e030-cee7-11f1-8311-77ba8d3a8482" data-action="Deal Block" data-label="AI Navigator GPS+ Electric Caddy" data-dimension48="AI Navigator GPS+ Electric Caddy" data-dimension25="$1895">AI Navigator GPS+ Electric Caddy: $1895</a></strong><br>Okay, so this isn't your typical golf gift, as it's super expensive, but if you have a hefty budget and want a gift that most golfers will want but might not want to buy themselves, this is the electric push cart I use to golf every week. Between the rugged, all-terrain design, the GPS screen and all the other well-appointed features, this is the premium gift for any occasion.<a class="view-deal button" href="https://www.pgatoursuperstore.com/ai-navigator-gps-electric-caddy/2000000043838.html?dwvar_2000000043838_STK_COLOR=5&cgid=golf-bags-carts-ppcart-electric" target="_blank" rel="nofollow" data-dimension112="5595e030-cee7-11f1-8311-77ba8d3a8482" data-action="Deal Block" data-label="AI Navigator GPS+ Electric Caddy" data-dimension48="AI Navigator GPS+ Electric Caddy" data-dimension25="$1895">View Deal</a></p></div><h3 class="article-body__section" id="section-golf-gadgets"><span>Golf Gadgets</span></h3><div class="product"><a data-dimension112="5595e116-cee7-11f1-8206-29eedd84ca7d" data-action="Deal Block" data-label="Magnetic Golf Cart Phone Holder" data-dimension48="Magnetic Golf Cart Phone Holder" data-dimension25="$16" href="https://www.amazon.com/Dual-Sided-Magnetic-Holder-Rotatable-Accessories/dp/B0GTLSVQGP" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ZzDmKQtMQgWzraDUJzpfY5" name="Magnetic Golf Cart Phone Holder" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZzDmKQtMQgWzraDUJzpfY5-1920-80.png" mos="" align="middle" fullscreen="" width="1300" height="1300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Dual-Sided-Magnetic-Holder-Rotatable-Accessories/dp/B0GTLSVQGP" target="_blank" rel="nofollow" data-dimension112="5595e116-cee7-11f1-8206-29eedd84ca7d" data-action="Deal Block" data-label="Magnetic Golf Cart Phone Holder" data-dimension48="Magnetic Golf Cart Phone Holder" data-dimension25="$16">Magnetic Golf Cart Phone Holder: was $20 now $16</a></strong><br>This is a cool gift for the golfer who uses their phone as an on-course GPS device (and has a magnetic phone or case). This gives them a great place to put their phone without having to carry it around in their pocket all round.<a class="view-deal button" href="https://www.amazon.com/Dual-Sided-Magnetic-Holder-Rotatable-Accessories/dp/B0GTLSVQGP" target="_blank" rel="nofollow" data-dimension112="5595e116-cee7-11f1-8206-29eedd84ca7d" data-action="Deal Block" data-label="Magnetic Golf Cart Phone Holder" data-dimension48="Magnetic Golf Cart Phone Holder" data-dimension25="$16">View Deal</a></p></div><div class="product"><a data-dimension112="5595e184-cee7-11f1-b20d-c77785fd792f" data-action="Deal Block" data-label="Pop Up Golf Chipping Net" data-dimension48="Pop Up Golf Chipping Net" data-dimension25="$25" href="https://www.amazon.com/Rolilac-Pop-Golf-Chipping-Net/dp/B07GLY5NQQ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:982px;"><p class="vanilla-image-block" style="padding-top:82.69%;"><img id="FgjnAmmyrjAcvh3oMTGarK" name="71kT3myQjxL._AC_SL1000_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FgjnAmmyrjAcvh3oMTGarK-1920-80.jpg" mos="" align="middle" fullscreen="" width="982" height="812" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Rolilac-Pop-Golf-Chipping-Net/dp/B07GLY5NQQ/" target="_blank" rel="nofollow" data-dimension112="5595e184-cee7-11f1-b20d-c77785fd792f" data-action="Deal Block" data-label="Pop Up Golf Chipping Net" data-dimension48="Pop Up Golf Chipping Net" data-dimension25="$25">Pop Up Golf Chipping Net: $25</a></strong><br>This portable one is hard to beat for the golfer who would enjoy a simple practice net. It can be used indoors and outdoors to practice chipping, with multiple pockets to hone accuracy and aim. Rounds are won and lost around the greens; this practice tool can make a difference.<a class="view-deal button" href="https://www.amazon.com/Rolilac-Pop-Golf-Chipping-Net/dp/B07GLY5NQQ/" target="_blank" rel="nofollow" data-dimension112="5595e184-cee7-11f1-b20d-c77785fd792f" data-action="Deal Block" data-label="Pop Up Golf Chipping Net" data-dimension48="Pop Up Golf Chipping Net" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="5595e1f2-cee7-11f1-b7f2-15cd8018eb00" data-action="Deal Block" data-label="Golf Swing Trainer Aid" data-dimension48="Golf Swing Trainer Aid" data-dimension25="$40" href="https://www.amazon.com/Amazon-Basics-Golf-Swing-Trainer/dp/B09N3HZK2J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:98.87%;"><img id="DTkVcYRPfV6Jt7kQwus6oZ" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DTkVcYRPfV6Jt7kQwus6oZ-1920-80.png" mos="" align="middle" fullscreen="" width="1500" height="1483" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Amazon-Basics-Golf-Swing-Trainer/dp/B09N3HZK2J" target="_blank" rel="nofollow" data-dimension112="5595e1f2-cee7-11f1-b7f2-15cd8018eb00" data-action="Deal Block" data-label="Golf Swing Trainer Aid" data-dimension48="Golf Swing Trainer Aid" data-dimension25="$40">Golf Swing Trainer Aid: $40</a></strong><br>Golfers can spend their entire lives mastering their swing, but a trusted accessory for practicing swing sequencing and tempo is a swing trainer like this one. It fits in a golf bag, so golfers can warm up even on the course, as the extra weight helps get the blood flowing, allowing for a looser, more confident swing.<a class="view-deal button" href="https://www.amazon.com/Amazon-Basics-Golf-Swing-Trainer/dp/B09N3HZK2J" target="_blank" rel="nofollow" data-dimension112="5595e1f2-cee7-11f1-b7f2-15cd8018eb00" data-action="Deal Block" data-label="Golf Swing Trainer Aid" data-dimension48="Golf Swing Trainer Aid" data-dimension25="$40">View Deal</a></p></div><div class="product"><a data-dimension112="5595e260-cee7-11f1-b9cd-bb07a5750ff0" data-action="Deal Block" data-label="Putting Mat" data-dimension48="Putting Mat" data-dimension25="$69" href="https://www.amazon.com/CHAMPKEY-Premium-Wooden-Putting-Gates/dp/B0CSPQGX2Y" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1356px;"><p class="vanilla-image-block" style="padding-top:110.62%;"><img id="uUbhMJ8As7f4gCQ6heXuJn" name="81VLGD7Bx0L._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uUbhMJ8As7f4gCQ6heXuJn-1920-80.jpg" mos="" align="middle" fullscreen="" width="1356" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Yes, golfers <em>do</em> need dedicated training tools for each golf skill. So, if they don't already have a putting mat, this roll-up one would make a great gift. Measuring 10 feet, this training mat can help golfers master their putts, and it even comes with gates to help take the practice up a notch.<a class="view-deal button" href="https://www.amazon.com/CHAMPKEY-Premium-Wooden-Putting-Gates/dp/B0CSPQGX2Y" target="_blank" rel="nofollow" data-dimension112="5595e260-cee7-11f1-b9cd-bb07a5750ff0" data-action="Deal Block" data-label="Putting Mat" data-dimension48="Putting Mat" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="5595e2ce-cee7-11f1-8020-f91e9f108030" data-action="Deal Block" data-label="Complete System" data-dimension48="Complete System" data-dimension25="$175" href="https://pathpalgolf.com/pages/complete-training-package" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="yB4gvNi4hKZEw5RHeR54f" name="pathpal-white" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yB4gvNi4hKZEw5RHeR54f-1920-80.jpg" mos="" align="middle" fullscreen="" width="1280" height="1280" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I've talked before about how much <a href="https://www.tomsguide.com/wellness/fitness/stop-wasting-money-on-a-new-driver-every-year-get-this-simple-training-aid-instead" data-dimension112="5595e2ce-cee7-11f1-8020-f91e9f108030" data-action="Deal Block" data-label="Complete System" data-dimension48="Complete System" data-dimension25="$175">PathPal helped me improve my slice</a>, and I can't recommend this product enough. The complete system comes with all the pieces you need to improve your swing path and get better at golf. Is there a better gift for the golfer in your life than an improved swing? Better swing = more fun. <a class="view-deal button" href="https://pathpalgolf.com/pages/complete-training-package" target="_blank" rel="nofollow" data-dimension112="5595e2ce-cee7-11f1-8020-f91e9f108030" data-action="Deal Block" data-label="Complete System" data-dimension48="Complete System" data-dimension25="$175">View Deal</a></p></div><div class="product"><a data-dimension112="5595e60c-cee7-11f1-9a05-b1da21a2630d" data-action="Deal Block" data-label="Sensor 4" data-dimension48="Sensor 4" data-dimension25="$345" href="https://hackmotion.com/hackmotion-sensor-4/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="LMgvQfbLfbhtcrDihEYTnE" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LMgvQfbLfbhtcrDihEYTnE-1920-80.png" mos="" align="middle" fullscreen="" width="200" height="200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://hackmotion.com/hackmotion-sensor-4/" target="_blank" rel="nofollow" data-dimension112="5595e60c-cee7-11f1-9a05-b1da21a2630d" data-action="Deal Block" data-label="Sensor 4" data-dimension48="Sensor 4" data-dimension25="$345">Sensor 4: $345</a></strong><br>I've spent the last few months practicing with HackMotion's wrist-based training tool, the <a href="https://hackmotion.com/hackmotion-sensor-3/" target="_blank" rel="nofollow">Sensor 3</a>, and I'm constantly blown away by how much you can learn about your golf swing just from your wrist angles. I've noticeably improved both my ball striking and tee shots since using this fancy golf tech, and I can't imagine practicing without it.<a class="view-deal button" href="https://hackmotion.com/hackmotion-sensor-4/" target="_blank" rel="nofollow" data-dimension112="5595e60c-cee7-11f1-9a05-b1da21a2630d" data-action="Deal Block" data-label="Sensor 4" data-dimension48="Sensor 4" data-dimension25="$345">View Deal</a></p></div><div class="product"><a data-dimension112="5595e698-cee7-11f1-938a-0577624049ba" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$349" href="https://www.arccosgolf.com/pages/us-air-sl" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="B6KJ7gsv8Nqxiqc8QhfmdY" name="Air" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/B6KJ7gsv8Nqxiqc8QhfmdY-1920-80.png" mos="" align="middle" fullscreen="" width="1800" height="1800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>For my money, there's no better product on the golf market than Arccos. Since the day I started golfing, I've tracked my game with the <a href="https://www.arccosgolf.com/products/smart-sensors" target="_blank" rel="nofollow" data-dimension112="5595e698-cee7-11f1-938a-0577624049ba" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$349">club sensors</a>, and now the company offers the Air, which offers the same level of tracking without the need for anything on top of the clubs. If the golfer you love is looking to improve their game, this is the gift to buy.<a class="view-deal button" href="https://www.arccosgolf.com/pages/us-air-sl" target="_blank" rel="nofollow" data-dimension112="5595e698-cee7-11f1-938a-0577624049ba" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$349">View Deal</a></p></div><div class="product"><a data-dimension112="5595e706-cee7-11f1-995c-6b980055cb29" data-action="Deal Block" data-label="Approach R10" data-dimension48="Approach R10" data-dimension25="$499" href="https://www.amazon.com/Garmin-Approach-Portable-Monitor-Indoors/dp/B095QX1FSR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1470px;"><p class="vanilla-image-block" style="padding-top:102.04%;"><img id="PkuskGztGMrF4kpQkN95nF" name="61POLvv99xS._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PkuskGztGMrF4kpQkN95nF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1470" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/Garmin-approach-R10-review" data-dimension112="5595e706-cee7-11f1-995c-6b980055cb29" data-action="Deal Block" data-label="Approach R10" data-dimension48="Approach R10" data-dimension25="$499">Garmin Approach R10</a> golf launch monitor is a tremendous big-ticket gift for the golfer looking to measure their game. This clever gadget analyzes swings and shots to offer guidance in a companion app, and it even works as a complete golf simulator. Compared with others on the market, it's very reasonably priced, making it a good gift.<a class="view-deal button" href="https://www.amazon.com/Garmin-Approach-Portable-Monitor-Indoors/dp/B095QX1FSR" target="_blank" rel="nofollow" data-dimension112="5595e706-cee7-11f1-995c-6b980055cb29" data-action="Deal Block" data-label="Approach R10" data-dimension48="Approach R10" data-dimension25="$499">View Deal</a></p></div><h3 class="article-body__section" id="section-off-course-golf-gifts"><span>Off-Course Golf Gifts</span></h3><div class="product"><a data-dimension112="5595e7d8-cee7-11f1-93aa-27a04ca61e8b" data-action="Deal Block" data-label="Golfer's Scratch Off Poster" data-dimension48="Golfer's Scratch Off Poster" data-dimension25="$25" href="https://www.uncommongoods.com/product/golfers-scratch-off-poster" 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:100.00%;"><img id="xxLsMrXyZxsrKd5M7Hei4F" name="courses.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xxLsMrXyZxsrKd5M7Hei4F-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.uncommongoods.com/product/golfers-scratch-off-poster" target="_blank" rel="nofollow" data-dimension112="5595e7d8-cee7-11f1-93aa-27a04ca61e8b" data-action="Deal Block" data-label="Golfer's Scratch Off Poster" data-dimension48="Golfer's Scratch Off Poster" data-dimension25="$25">Golfer's Scratch Off Poster: $25</a></strong><br>If you know a golfer who travels to play famous courses, this scratch-off poster from Uncommon Goods is a thoughtful gift idea. This way, they can keep track of where they've played and where they should book a trip to next.<a class="view-deal button" href="https://www.uncommongoods.com/product/golfers-scratch-off-poster" target="_blank" rel="nofollow" data-dimension112="5595e7d8-cee7-11f1-93aa-27a04ca61e8b" data-action="Deal Block" data-label="Golfer's Scratch Off Poster" data-dimension48="Golfer's Scratch Off Poster" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="5595e83c-cee7-11f1-bf96-b9633b57e35f" data-action="Deal Block" data-label="Nextgen Den Caddy" data-dimension48="Nextgen Den Caddy" data-dimension25="$105" href="https://www.pxg.com/products/nextgen-den-caddy" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1440px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="RuCWdBXEop2ZpzQAKN44XX" name="Nextgen Den Caddy" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RuCWdBXEop2ZpzQAKN44XX-1920-80.png" mos="" align="middle" fullscreen="" width="1440" height="1440" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.pxg.com/products/nextgen-den-caddy" target="_blank" rel="nofollow" data-dimension112="5595e83c-cee7-11f1-bf96-b9633b57e35f" data-action="Deal Block" data-label="Nextgen Den Caddy" data-dimension48="Nextgen Den Caddy" data-dimension25="$105">Nextgen Den Caddy: $105</a></strong><br>A den caddy is a fun thing to have around the house for storing clubs, balls or just about anything else. It's like a mini golf bag that happens to look cool. I have a PXG den caddy in my simulator for storing my various training aids (some of which are outlined above), but it's just a cool accessory to have around, and at $105, PXG's is one of the more reasonably priced options.<a class="view-deal button" href="https://www.pxg.com/products/nextgen-den-caddy" target="_blank" rel="nofollow" data-dimension112="5595e83c-cee7-11f1-bf96-b9633b57e35f" data-action="Deal Block" data-label="Nextgen Den Caddy" data-dimension48="Nextgen Den Caddy" data-dimension25="$105">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/stop-buying-awful-golf-gifts-21-things-all-obsessed-golfers-actually-want</link>
                                                                            <description>
                            <![CDATA[ Here are the best gifts for golfers from top-rated golf brands, plus some fun gifts most golfers don't have. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">h3x7wRkM2QZj2PToUshJFH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/BJL3SmRhnc5eUGK8XimvdM-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 13:40:37 +0000</pubDate>                                                                                                                                <updated>Tue, 27 Oct 2026 11:21:55 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></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-320-70.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Managing 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/BJL3SmRhnc5eUGK8XimvdM-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A golfer celebrating a made putt with a cart in the background]]></media:description>                                                            <media:text><![CDATA[A golfer celebrating a made putt with a cart in the background]]></media:text>
                                <media:title type="plain"><![CDATA[A golfer celebrating a made putt with a cart in the background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/BJL3SmRhnc5eUGK8XimvdM-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I am obsessed with golf. I am also addicted to golf equipment and apparel. I also love shopping for friends and loved ones (and myself), so I figured, why not combine those passions and round up the best golf gifts for any time of year? </p><p>Over the years, <strong>I've tested hundreds of golf products</strong>. I've played with the best <a href="https://www.tomsguide.com/wellness/smartwatches/i-tested-the-3-best-golf-apps-for-apple-watch-heres-my-favorite">game-tracking tool, Arccos</a>, and I've tried some <a href="https://www.tomsguide.com/wellness/fitness/stop-wasting-money-on-a-new-driver-every-year-get-this-simple-training-aid-insteadhttps://www.tomsguide.com/wellness/fitness/ive-been-golfing-for-4-years-and-these-are-the-gadgets-that-helped-me-improve">cool training aids</a>. I've used <a href="https://www.tomsguide.com/wellness/fitness/sick-of-your-golf-bag-looking-boring-i-tried-two-you-can-customize">custom golf bags</a> and <a href="https://www.tomsguide.com/wellness/fitness/foresight-gc3-launch-monitor-6-month-impressions">high-end launch monitors</a>. </p><p>I've seen it all and tried most of it (and yet I'm still not very good at golf, which proves two things: golf is hard, and equipment doesn't automatically make you good). </p><p>I've created the<strong> ultimate list of gifts for the golf lover in your life, including options for every budget</strong>. I could have included way more products, but I kept it to a manageable list of things I actually use (or would happily receive as a gift) so you can be confident you're getting something they'll like.</p><p>I <strong>didn't include highly preference-based products</strong>, especially for experienced golfers. </p><p>For example, you won't find golf balls on the list, as serious golfers typically have one ball they play, and unless you know which one it is, balls are almost guaranteed to be returned. The same goes for clubs — many golfers get fitted for the right clubs, so buying them a random 5-wood won't do the job. </p><p>Instead, we're <strong>focused on useful items </strong>golfers might not have that<strong> aren't custom or tied to specific preferences.</strong></p><p>Does that mean you can't buy balls or clubs if you know what to get? Of course not. If you know your favorite golfer plays <a href="https://www.amazon.com/Titleist-Pro-V1-2025/dp/B0DPN7QZ9R" target="_blank" rel="nofollow">Titleist Pro V1</a> or <a href="https://www.amazon.com/VICE-Drip-Version-Balls-Black/dp/B08SR9ZLSY" target="_blank" rel="nofollow">Vice Pro</a> (my golf ball of choice), for example, then by all means grab them a dozen balls and call it a day! </p><h3 class="article-body__section" id="section-quick-links-my-top-5-gifts-for-golfers"><span>Quick Links: My top 5 gifts for golfers</span></h3><ol start="1"><li><strong></strong><a href="https://www.arccosgolf.com/pages/us-air-sl" target="_blank" rel="nofollow"><strong>Arccos Air game tracking system</strong></a><strong></strong></li><li><strong></strong><a href="https://pathpalgolf.com/pages/complete-training-package" target="_blank" rel="nofollow"><strong>PathPal training aid</strong></a><strong></strong></li><li><a href="https://www.quince.com/shop/activewear/shop-by-activity/mens-golf" target="_blank" rel="nofollow"><strong>Quince affordable golf apparel</strong></a></li><li><a href="https://hackmotion.com/hackmotion-sensor-4/" target="_blank" rel="nofollow"><strong>HackMotion Sensor 4</strong></a></li><li><strong></strong><a href="https://vesselgolf.com/products/player-v-pro-stand-eden" target="_blank" rel="nofollow"><strong>Vessel Golf Player V Pro stand bag</strong></a><strong></strong></li></ol><h3 class="article-body__section" id="section-golf-apparel"><span>Golf apparel</span></h3><div class="product"><a data-dimension112="5595db6c-cee7-11f1-be82-93287409d51a" data-action="Deal Block" data-label="Quince Golf apparel: starting at $29" data-dimension48="Quince Golf apparel: starting at $29" href="https://www.quince.com/shop/activewear/shop-by-activity/mens-golf" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:399px;"><p class="vanilla-image-block" style="padding-top:125.56%;"><img id="78FdcUTCg7ciEJsjfamBbH" name="Quincepants" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/78FdcUTCg7ciEJsjfamBbH-1920-80.png" mos="" align="middle" fullscreen="" width="399" height="501" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.quince.com/shop/activewear/shop-by-activity/mens-golf?sortBy=PRICE_LOW_TO_HIGH" target="_blank" rel="nofollow" data-dimension112="5595db6c-cee7-11f1-be82-93287409d51a" data-action="Deal Block" data-label="Quince Golf apparel: starting at $29" data-dimension48="Quince Golf apparel: starting at $29" data-dimension25=""><strong>Quince Golf apparel: starting at $29</strong></a><br>Golf clothing is usually quite expensive. Most of my favorite pieces are $90 or more. But Quince is setting out to disrupt the trend by offering nice clothing at affordable prices. I tried <a href="https://www.quince.com/men/protech-golf-pants?color=riviera-blue" target="_blank" rel="nofollow">Quince golf pants</a>, a <a href="https://www.quince.com/men/recycled-flowknit-performance-polo?color=olive&gender=men&size=xl" target="_blank" rel="nofollow">comfy polo</a> and more and found them to be on the same level of comfort as stuff from more expensive brands. They're a great gift because you don't need to spend tons of money to get stylish, comfortable golf clothing for the player in your life.<a class="view-deal button" href="https://www.quince.com/shop/activewear/shop-by-activity/mens-golf" target="_blank" rel="nofollow" data-dimension112="5595db6c-cee7-11f1-be82-93287409d51a" data-action="Deal Block" data-label="Quince Golf apparel: starting at $29" data-dimension48="Quince Golf apparel: starting at $29" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="5595dbda-cee7-11f1-a76f-915c31fabff3" data-action="Deal Block" data-label="3-Pack Golf Web Belt" data-dimension48="3-Pack Golf Web Belt" data-dimension25="$17" href="https://www.amazon.com/Nike-Mens-Pack-White-Gray/dp/B004NRNOG8" 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:108.25%;"><img id="brpVgfiASDYCT3oYqfMCiT" name="71H621JjWtL._AC_SX679_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/brpVgfiASDYCT3oYqfMCiT-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="735" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Mens-Pack-White-Gray/dp/B004NRNOG8" target="_blank" rel="nofollow" data-dimension112="5595dbda-cee7-11f1-a76f-915c31fabff3" data-action="Deal Block" data-label="3-Pack Golf Web Belt" data-dimension48="3-Pack Golf Web Belt" data-dimension25="$17">3-Pack Golf Web Belt: was $24 now $17</a></strong><br>Good belts are a must for golf attire, and our favorite value option is these stretchy Nike belts. This three-pack makes a great gift for golfers, considering it's one of those things you can never have enough of. Having color options allows golfers to complete their outfits, as the belt is often the finishing touch to a style.<a class="view-deal button" href="https://www.amazon.com/Nike-Mens-Pack-White-Gray/dp/B004NRNOG8" target="_blank" rel="nofollow" data-dimension112="5595dbda-cee7-11f1-a76f-915c31fabff3" data-action="Deal Block" data-label="3-Pack Golf Web Belt" data-dimension48="3-Pack Golf Web Belt" data-dimension25="$17">View Deal</a></p></div><div class="product"><a data-dimension112="5595dc48-cee7-11f1-8e38-49873a24b8e8" data-action="Deal Block" data-label="Braided Belt" data-dimension48="Braided Belt" data-dimension25="$49" href="https://thebyrd.com/products/the-braided-byrd-golf-belt-black-capped-chickadee" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:476px;"><p class="vanilla-image-block" style="padding-top:141.18%;"><img id="suZWaqKcciv8MbdqmJrErQ" name="Braided Belt" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/suZWaqKcciv8MbdqmJrErQ-1920-80.png" mos="" align="middle" fullscreen="" width="476" height="672" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://thebyrd.com/products/the-braided-byrd-golf-belt-black-capped-chickadee" target="_blank" rel="nofollow" data-dimension112="5595dc48-cee7-11f1-8e38-49873a24b8e8" data-action="Deal Block" data-label="Braided Belt" data-dimension48="Braided Belt" data-dimension25="$49">Braided Belt: was $55 now $49</a></strong><br>On the course, golfers need to carry a divot tool, ball marker, tees, balls and anything else they need to make their round enjoyable. The Byrd Belt is a fun gift that turns many of those products into a belt. And it's a nice belt that I wear off the course just as much as on it.<a class="view-deal button" href="https://thebyrd.com/products/the-braided-byrd-golf-belt-black-capped-chickadee" target="_blank" rel="nofollow" data-dimension112="5595dc48-cee7-11f1-8e38-49873a24b8e8" data-action="Deal Block" data-label="Braided Belt" data-dimension48="Braided Belt" data-dimension25="$49">View Deal</a></p></div><h3 class="article-body__section" id="section-golf-accessories"><span>Golf Accessories</span></h3><div class="product"><a data-dimension112="5595dd2e-cee7-11f1-aba9-ffa42f4dfc82" data-action="Deal Block" data-label="Odyssey Putt Target" data-dimension48="Odyssey Putt Target" data-dimension25="$8" href="https://www.pgatoursuperstore.com/odyssey-putt-target/1018975.html?cgid=golf-accessories-training-aids" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="2vAvha7DKVgfkaEV6A7ofg" name="Odyssey Putt Target" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2vAvha7DKVgfkaEV6A7ofg-1920-80.png" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.pgatoursuperstore.com/odyssey-putt-target/1018975.html?cgid=golf-accessories-training-aids" target="_blank" rel="nofollow" data-dimension112="5595dd2e-cee7-11f1-aba9-ffa42f4dfc82" data-action="Deal Block" data-label="Odyssey Putt Target" data-dimension48="Odyssey Putt Target" data-dimension25="$8">Odyssey Putt Target: $8</a></strong><br>This is the perfect gift for the golfer who seemingly has everything. It's a putting target the size of a golf hole, so when the putting green is busy and all the holes are taken, they can throw this down and get their warm-up putts in. It's thoughtful and cheap — two of my favorite elements of any gift.<a class="view-deal button" href="https://www.pgatoursuperstore.com/odyssey-putt-target/1018975.html?cgid=golf-accessories-training-aids" target="_blank" rel="nofollow" data-dimension112="5595dd2e-cee7-11f1-aba9-ffa42f4dfc82" data-action="Deal Block" data-label="Odyssey Putt Target" data-dimension48="Odyssey Putt Target" data-dimension25="$8">View Deal</a></p></div><div class="product"><a data-dimension112="5595dd9c-cee7-11f1-a1d7-5350f755f5ef" data-action="Deal Block" data-label="Magnetic Towel" data-dimension48="Magnetic Towel" data-dimension25="$30" href="https://ghostgolf.com/collections/towels/products/magnetic-towel-greenside" 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:100.00%;"><img id="NqKhij8fZ47hpCeqjJpSP4" name="golf towel.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NqKhij8fZ47hpCeqjJpSP4-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://ghostgolf.com/collections/towels/products/magnetic-towel-greenside" target="_blank" rel="nofollow" data-dimension112="5595dd9c-cee7-11f1-a1d7-5350f755f5ef" data-action="Deal Block" data-label="Magnetic Towel" data-dimension48="Magnetic Towel" data-dimension25="$30">Magnetic Towel: $30</a></strong><br>Another piece of equipment a golfer can never have enough of is a fresh golf towel for their bag. We like this magnetic one that can be picked up off the ground quickly with a club and has plenty of great color options. Ghost Golf has quickly risen to become one of the most popular brands, and it's largely thanks to making high-quality gear.<a class="view-deal button" href="https://ghostgolf.com/collections/towels/products/magnetic-towel-greenside" target="_blank" rel="nofollow" data-dimension112="5595dd9c-cee7-11f1-a1d7-5350f755f5ef" data-action="Deal Block" data-label="Magnetic Towel" data-dimension48="Magnetic Towel" data-dimension25="$30">View Deal</a></p></div><div class="product"><a data-dimension112="5595de0a-cee7-11f1-a203-cd3ca1ab7d84" data-action="Deal Block" data-label="2 Layer Golf Trunk Organizer" data-dimension48="2 Layer Golf Trunk Organizer" data-dimension25="$32" href="https://www.amazon.com/Organizer-Waterproof-Ventilated-Compartment-Accessories/dp/B09PZZ1QRM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1408px;"><p class="vanilla-image-block" style="padding-top:106.53%;"><img id="6q42gErTa4JearPAxSRMtk" name="2 Layer Golf Trunk Organizer" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6q42gErTa4JearPAxSRMtk-1920-80.png" mos="" align="middle" fullscreen="" width="1408" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Organizer-Waterproof-Ventilated-Compartment-Accessories/dp/B09PZZ1QRM" target="_blank" rel="nofollow" data-dimension112="5595de0a-cee7-11f1-a203-cd3ca1ab7d84" data-action="Deal Block" data-label="2 Layer Golf Trunk Organizer" data-dimension48="2 Layer Golf Trunk Organizer" data-dimension25="$32">2 Layer Golf Trunk Organizer: was $35 now $32</a></strong><br>I have this organizer in my trunk, and it's helped me make sure I always have a couple of pairs of golf shoes (I have a couple dozen pairs, so it's good to have some handy) and all my accessories ready to go. Sure, your golfer might just throw the stuff loose in their trunk, but why do that when this organizer is readily available?<a class="view-deal button" href="https://www.amazon.com/Organizer-Waterproof-Ventilated-Compartment-Accessories/dp/B09PZZ1QRM" target="_blank" rel="nofollow" data-dimension112="5595de0a-cee7-11f1-a203-cd3ca1ab7d84" data-action="Deal Block" data-label="2 Layer Golf Trunk Organizer" data-dimension48="2 Layer Golf Trunk Organizer" data-dimension25="$32">View Deal</a></p></div><div class="product"><a data-dimension112="5595de78-cee7-11f1-9b2d-cd38528f2fe5" data-action="Deal Block" data-label="Golf Tumbler 30oz" data-dimension48="Golf Tumbler 30oz" data-dimension25="$39" href="https://www.tallytumbler.com/products/golf-tally-tumbler" 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:100.00%;"><img id="gB4epwH8ghPQ6HDFKXgF9n" name="Golf Tumbler" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gB4epwH8ghPQ6HDFKXgF9n-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.tallytumbler.com/products/golf-tally-tumbler" target="_blank" rel="nofollow" data-dimension112="5595de78-cee7-11f1-9b2d-cd38528f2fe5" data-action="Deal Block" data-label="Golf Tumbler 30oz" data-dimension48="Golf Tumbler 30oz" data-dimension25="$39">Golf Tumbler 30oz: $39</a></strong><br>I just tried one of these tumblers, and it's a fun novelty to be sure! Importantly, it also works as a good cup for keeping your liquids cold (or warm) while offering a fun way to track your golf score and stats. If you think the golfer in your life has everything, this might be the perfect gift to get them that they haven't snagged yet. And if you prefer a smaller cup, you can get a <a href="https://www.tallytumbler.com/products/golf-tally-tumbler-20oz" target="_blank" rel="nofollow">20oz version</a>, too.<a class="view-deal button" href="https://www.tallytumbler.com/products/golf-tally-tumbler" target="_blank" rel="nofollow" data-dimension112="5595de78-cee7-11f1-9b2d-cd38528f2fe5" data-action="Deal Block" data-label="Golf Tumbler 30oz" data-dimension48="Golf Tumbler 30oz" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="5595dee6-cee7-11f1-b1d4-d39090d8916e" data-action="Deal Block" data-label="Golf Organizer" data-dimension48="Golf Organizer" data-dimension25="$59" href="https://www.amazon.com/Morvat-Organizer-Accessories-Organize-Equipment/dp/B0799QHWF6/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1447px;"><p class="vanilla-image-block" style="padding-top:103.66%;"><img id="tXeeBti6hHdSxbUg9p98Q8" name="91THUOGoGLL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tXeeBti6hHdSxbUg9p98Q8-1920-80.jpg" mos="" align="middle" fullscreen="" width="1447" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Morvat-Organizer-Accessories-Organize-Equipment/dp/B0799QHWF6/" target="_blank" rel="nofollow" data-dimension112="5595dee6-cee7-11f1-b1d4-d39090d8916e" data-action="Deal Block" data-label="Golf Organizer" data-dimension48="Golf Organizer" data-dimension25="$59">Golf Organizer: $59</a></strong><br>Do you know a golfer with so much equipment that they can't organize it? Then this budget-friendly golf bag organizer is a must. It's designed to hold two bags and has shelves for the rest of the golfer's gear, like their shoes, balls and everything else. Just be sure they have the space for this before buying.<a class="view-deal button" href="https://www.amazon.com/Morvat-Organizer-Accessories-Organize-Equipment/dp/B0799QHWF6/" target="_blank" rel="nofollow" data-dimension112="5595dee6-cee7-11f1-b1d4-d39090d8916e" data-action="Deal Block" data-label="Golf Organizer" data-dimension48="Golf Organizer" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="5595df54-cee7-11f1-893c-5f7074aab882" data-action="Deal Block" data-label="Headcover" data-dimension48="Headcover" data-dimension25="$" href="https://pinsandaces.com/collections/headcovers" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:600px;"><p class="vanilla-image-block" style="padding-top:125.00%;"><img id="BF97sXJr8AbxQdcmpgt2mg" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BF97sXJr8AbxQdcmpgt2mg-1920-80.png" mos="" align="middle" fullscreen="" width="600" height="750" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Every golfer needs headcovers to protect their woods, hybrids and putter, so getting a stylish, themed one from Pins & Aces is a perfect gift. The company makes some of the most fabulous head covers on the market, and you can choose from a variety to suit the tastes of the person you're shopping for (there are a ton of options, from licensed brands to original designs).<a class="view-deal button" href="https://pinsandaces.com/collections/headcovers" target="_blank" rel="nofollow" data-dimension112="5595df54-cee7-11f1-893c-5f7074aab882" data-action="Deal Block" data-label="Headcover" data-dimension48="Headcover" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="5595dfc2-cee7-11f1-80d2-eb5d0ce750fc" data-action="Deal Block" data-label="Player V Pro" data-dimension48="Player V Pro" data-dimension25="$489" href="https://vesselgolf.com/products/player-v-pro-stand" 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="G2LsbYrPqZmrTngEHUqzub" name="Player V Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/G2LsbYrPqZmrTngEHUqzub-1920-80.png" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>To me, Vessel bags epitomize golf luxury. The Player V Pro was the best golf bag I've ever used, but the <a href="https://vesselgolf.com/products/player-vi-pro-stand" target="_blank" rel="nofollow" data-dimension112="5595dfc2-cee7-11f1-80d2-eb5d0ce750fc" data-action="Deal Block" data-label="Player V Pro" data-dimension48="Player V Pro" data-dimension25="$489">Player VI Pro</a> has surpassed it. However, if you want to get a tremendous bag for a little less, I can still easily recommend the Player V Pro! I even had the chance to <a href="https://www.tomsguide.com/wellness/fitness/i-think-we-may-have-the-biggest-market-share-on-tour-vessel-golfs-ceo-and-players-use-the-bags-by-choice">talk to Vessel's CEO</a> about what makes the bags so good.<a class="view-deal button" href="https://vesselgolf.com/products/player-v-pro-stand" target="_blank" rel="nofollow" data-dimension112="5595dfc2-cee7-11f1-80d2-eb5d0ce750fc" data-action="Deal Block" data-label="Player V Pro" data-dimension48="Player V Pro" data-dimension25="$489">View Deal</a></p></div><div class="product"><a data-dimension112="5595e030-cee7-11f1-8311-77ba8d3a8482" data-action="Deal Block" data-label="AI Navigator GPS+ Electric Caddy" data-dimension48="AI Navigator GPS+ Electric Caddy" data-dimension25="$1895" href="https://www.pgatoursuperstore.com/ai-navigator-gps-electric-caddy/2000000043838.html?dwvar_2000000043838_STK_COLOR=5&cgid=golf-bags-carts-ppcart-electric" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="wuf9d8NExMGrYzZRy4D6H9" name="AI Navigator GPS+ Electric Caddy" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wuf9d8NExMGrYzZRy4D6H9-1920-80.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.pgatoursuperstore.com/ai-navigator-gps-electric-caddy/2000000043838.html?dwvar_2000000043838_STK_COLOR=5&cgid=golf-bags-carts-ppcart-electric" target="_blank" rel="nofollow" data-dimension112="5595e030-cee7-11f1-8311-77ba8d3a8482" data-action="Deal Block" data-label="AI Navigator GPS+ Electric Caddy" data-dimension48="AI Navigator GPS+ Electric Caddy" data-dimension25="$1895">AI Navigator GPS+ Electric Caddy: $1895</a></strong><br>Okay, so this isn't your typical golf gift, as it's super expensive, but if you have a hefty budget and want a gift that most golfers will want but might not want to buy themselves, this is the electric push cart I use to golf every week. Between the rugged, all-terrain design, the GPS screen and all the other well-appointed features, this is the premium gift for any occasion.<a class="view-deal button" href="https://www.pgatoursuperstore.com/ai-navigator-gps-electric-caddy/2000000043838.html?dwvar_2000000043838_STK_COLOR=5&cgid=golf-bags-carts-ppcart-electric" target="_blank" rel="nofollow" data-dimension112="5595e030-cee7-11f1-8311-77ba8d3a8482" data-action="Deal Block" data-label="AI Navigator GPS+ Electric Caddy" data-dimension48="AI Navigator GPS+ Electric Caddy" data-dimension25="$1895">View Deal</a></p></div><h3 class="article-body__section" id="section-golf-gadgets"><span>Golf Gadgets</span></h3><div class="product"><a data-dimension112="5595e116-cee7-11f1-8206-29eedd84ca7d" data-action="Deal Block" data-label="Magnetic Golf Cart Phone Holder" data-dimension48="Magnetic Golf Cart Phone Holder" data-dimension25="$16" href="https://www.amazon.com/Dual-Sided-Magnetic-Holder-Rotatable-Accessories/dp/B0GTLSVQGP" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1300px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ZzDmKQtMQgWzraDUJzpfY5" name="Magnetic Golf Cart Phone Holder" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZzDmKQtMQgWzraDUJzpfY5-1920-80.png" mos="" align="middle" fullscreen="" width="1300" height="1300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Dual-Sided-Magnetic-Holder-Rotatable-Accessories/dp/B0GTLSVQGP" target="_blank" rel="nofollow" data-dimension112="5595e116-cee7-11f1-8206-29eedd84ca7d" data-action="Deal Block" data-label="Magnetic Golf Cart Phone Holder" data-dimension48="Magnetic Golf Cart Phone Holder" data-dimension25="$16">Magnetic Golf Cart Phone Holder: was $20 now $16</a></strong><br>This is a cool gift for the golfer who uses their phone as an on-course GPS device (and has a magnetic phone or case). This gives them a great place to put their phone without having to carry it around in their pocket all round.<a class="view-deal button" href="https://www.amazon.com/Dual-Sided-Magnetic-Holder-Rotatable-Accessories/dp/B0GTLSVQGP" target="_blank" rel="nofollow" data-dimension112="5595e116-cee7-11f1-8206-29eedd84ca7d" data-action="Deal Block" data-label="Magnetic Golf Cart Phone Holder" data-dimension48="Magnetic Golf Cart Phone Holder" data-dimension25="$16">View Deal</a></p></div><div class="product"><a data-dimension112="5595e184-cee7-11f1-b20d-c77785fd792f" data-action="Deal Block" data-label="Pop Up Golf Chipping Net" data-dimension48="Pop Up Golf Chipping Net" data-dimension25="$25" href="https://www.amazon.com/Rolilac-Pop-Golf-Chipping-Net/dp/B07GLY5NQQ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:982px;"><p class="vanilla-image-block" style="padding-top:82.69%;"><img id="FgjnAmmyrjAcvh3oMTGarK" name="71kT3myQjxL._AC_SL1000_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FgjnAmmyrjAcvh3oMTGarK-1920-80.jpg" mos="" align="middle" fullscreen="" width="982" height="812" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Rolilac-Pop-Golf-Chipping-Net/dp/B07GLY5NQQ/" target="_blank" rel="nofollow" data-dimension112="5595e184-cee7-11f1-b20d-c77785fd792f" data-action="Deal Block" data-label="Pop Up Golf Chipping Net" data-dimension48="Pop Up Golf Chipping Net" data-dimension25="$25">Pop Up Golf Chipping Net: $25</a></strong><br>This portable one is hard to beat for the golfer who would enjoy a simple practice net. It can be used indoors and outdoors to practice chipping, with multiple pockets to hone accuracy and aim. Rounds are won and lost around the greens; this practice tool can make a difference.<a class="view-deal button" href="https://www.amazon.com/Rolilac-Pop-Golf-Chipping-Net/dp/B07GLY5NQQ/" target="_blank" rel="nofollow" data-dimension112="5595e184-cee7-11f1-b20d-c77785fd792f" data-action="Deal Block" data-label="Pop Up Golf Chipping Net" data-dimension48="Pop Up Golf Chipping Net" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="5595e1f2-cee7-11f1-b7f2-15cd8018eb00" data-action="Deal Block" data-label="Golf Swing Trainer Aid" data-dimension48="Golf Swing Trainer Aid" data-dimension25="$40" href="https://www.amazon.com/Amazon-Basics-Golf-Swing-Trainer/dp/B09N3HZK2J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:98.87%;"><img id="DTkVcYRPfV6Jt7kQwus6oZ" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DTkVcYRPfV6Jt7kQwus6oZ-1920-80.png" mos="" align="middle" fullscreen="" width="1500" height="1483" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Amazon-Basics-Golf-Swing-Trainer/dp/B09N3HZK2J" target="_blank" rel="nofollow" data-dimension112="5595e1f2-cee7-11f1-b7f2-15cd8018eb00" data-action="Deal Block" data-label="Golf Swing Trainer Aid" data-dimension48="Golf Swing Trainer Aid" data-dimension25="$40">Golf Swing Trainer Aid: $40</a></strong><br>Golfers can spend their entire lives mastering their swing, but a trusted accessory for practicing swing sequencing and tempo is a swing trainer like this one. It fits in a golf bag, so golfers can warm up even on the course, as the extra weight helps get the blood flowing, allowing for a looser, more confident swing.<a class="view-deal button" href="https://www.amazon.com/Amazon-Basics-Golf-Swing-Trainer/dp/B09N3HZK2J" target="_blank" rel="nofollow" data-dimension112="5595e1f2-cee7-11f1-b7f2-15cd8018eb00" data-action="Deal Block" data-label="Golf Swing Trainer Aid" data-dimension48="Golf Swing Trainer Aid" data-dimension25="$40">View Deal</a></p></div><div class="product"><a data-dimension112="5595e260-cee7-11f1-b9cd-bb07a5750ff0" data-action="Deal Block" data-label="Putting Mat" data-dimension48="Putting Mat" data-dimension25="$69" href="https://www.amazon.com/CHAMPKEY-Premium-Wooden-Putting-Gates/dp/B0CSPQGX2Y" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1356px;"><p class="vanilla-image-block" style="padding-top:110.62%;"><img id="uUbhMJ8As7f4gCQ6heXuJn" name="81VLGD7Bx0L._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uUbhMJ8As7f4gCQ6heXuJn-1920-80.jpg" mos="" align="middle" fullscreen="" width="1356" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Yes, golfers <em>do</em> need dedicated training tools for each golf skill. So, if they don't already have a putting mat, this roll-up one would make a great gift. Measuring 10 feet, this training mat can help golfers master their putts, and it even comes with gates to help take the practice up a notch.<a class="view-deal button" href="https://www.amazon.com/CHAMPKEY-Premium-Wooden-Putting-Gates/dp/B0CSPQGX2Y" target="_blank" rel="nofollow" data-dimension112="5595e260-cee7-11f1-b9cd-bb07a5750ff0" data-action="Deal Block" data-label="Putting Mat" data-dimension48="Putting Mat" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="5595e2ce-cee7-11f1-8020-f91e9f108030" data-action="Deal Block" data-label="Complete System" data-dimension48="Complete System" data-dimension25="$175" href="https://pathpalgolf.com/pages/complete-training-package" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="yB4gvNi4hKZEw5RHeR54f" name="pathpal-white" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yB4gvNi4hKZEw5RHeR54f-1920-80.jpg" mos="" align="middle" fullscreen="" width="1280" height="1280" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I've talked before about how much <a href="https://www.tomsguide.com/wellness/fitness/stop-wasting-money-on-a-new-driver-every-year-get-this-simple-training-aid-instead" data-dimension112="5595e2ce-cee7-11f1-8020-f91e9f108030" data-action="Deal Block" data-label="Complete System" data-dimension48="Complete System" data-dimension25="$175">PathPal helped me improve my slice</a>, and I can't recommend this product enough. The complete system comes with all the pieces you need to improve your swing path and get better at golf. Is there a better gift for the golfer in your life than an improved swing? Better swing = more fun. <a class="view-deal button" href="https://pathpalgolf.com/pages/complete-training-package" target="_blank" rel="nofollow" data-dimension112="5595e2ce-cee7-11f1-8020-f91e9f108030" data-action="Deal Block" data-label="Complete System" data-dimension48="Complete System" data-dimension25="$175">View Deal</a></p></div><div class="product"><a data-dimension112="5595e60c-cee7-11f1-9a05-b1da21a2630d" data-action="Deal Block" data-label="Sensor 4" data-dimension48="Sensor 4" data-dimension25="$345" href="https://hackmotion.com/hackmotion-sensor-4/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="LMgvQfbLfbhtcrDihEYTnE" name="image" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LMgvQfbLfbhtcrDihEYTnE-1920-80.png" mos="" align="middle" fullscreen="" width="200" height="200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://hackmotion.com/hackmotion-sensor-4/" target="_blank" rel="nofollow" data-dimension112="5595e60c-cee7-11f1-9a05-b1da21a2630d" data-action="Deal Block" data-label="Sensor 4" data-dimension48="Sensor 4" data-dimension25="$345">Sensor 4: $345</a></strong><br>I've spent the last few months practicing with HackMotion's wrist-based training tool, the <a href="https://hackmotion.com/hackmotion-sensor-3/" target="_blank" rel="nofollow">Sensor 3</a>, and I'm constantly blown away by how much you can learn about your golf swing just from your wrist angles. I've noticeably improved both my ball striking and tee shots since using this fancy golf tech, and I can't imagine practicing without it.<a class="view-deal button" href="https://hackmotion.com/hackmotion-sensor-4/" target="_blank" rel="nofollow" data-dimension112="5595e60c-cee7-11f1-9a05-b1da21a2630d" data-action="Deal Block" data-label="Sensor 4" data-dimension48="Sensor 4" data-dimension25="$345">View Deal</a></p></div><div class="product"><a data-dimension112="5595e698-cee7-11f1-938a-0577624049ba" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$349" href="https://www.arccosgolf.com/pages/us-air-sl" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="B6KJ7gsv8Nqxiqc8QhfmdY" name="Air" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/B6KJ7gsv8Nqxiqc8QhfmdY-1920-80.png" mos="" align="middle" fullscreen="" width="1800" height="1800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>For my money, there's no better product on the golf market than Arccos. Since the day I started golfing, I've tracked my game with the <a href="https://www.arccosgolf.com/products/smart-sensors" target="_blank" rel="nofollow" data-dimension112="5595e698-cee7-11f1-938a-0577624049ba" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$349">club sensors</a>, and now the company offers the Air, which offers the same level of tracking without the need for anything on top of the clubs. If the golfer you love is looking to improve their game, this is the gift to buy.<a class="view-deal button" href="https://www.arccosgolf.com/pages/us-air-sl" target="_blank" rel="nofollow" data-dimension112="5595e698-cee7-11f1-938a-0577624049ba" data-action="Deal Block" data-label="Air" data-dimension48="Air" data-dimension25="$349">View Deal</a></p></div><div class="product"><a data-dimension112="5595e706-cee7-11f1-995c-6b980055cb29" data-action="Deal Block" data-label="Approach R10" data-dimension48="Approach R10" data-dimension25="$499" href="https://www.amazon.com/Garmin-Approach-Portable-Monitor-Indoors/dp/B095QX1FSR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1470px;"><p class="vanilla-image-block" style="padding-top:102.04%;"><img id="PkuskGztGMrF4kpQkN95nF" name="61POLvv99xS._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PkuskGztGMrF4kpQkN95nF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1470" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/Garmin-approach-R10-review" data-dimension112="5595e706-cee7-11f1-995c-6b980055cb29" data-action="Deal Block" data-label="Approach R10" data-dimension48="Approach R10" data-dimension25="$499">Garmin Approach R10</a> golf launch monitor is a tremendous big-ticket gift for the golfer looking to measure their game. This clever gadget analyzes swings and shots to offer guidance in a companion app, and it even works as a complete golf simulator. Compared with others on the market, it's very reasonably priced, making it a good gift.<a class="view-deal button" href="https://www.amazon.com/Garmin-Approach-Portable-Monitor-Indoors/dp/B095QX1FSR" target="_blank" rel="nofollow" data-dimension112="5595e706-cee7-11f1-995c-6b980055cb29" data-action="Deal Block" data-label="Approach R10" data-dimension48="Approach R10" data-dimension25="$499">View Deal</a></p></div><h3 class="article-body__section" id="section-off-course-golf-gifts"><span>Off-Course Golf Gifts</span></h3><div class="product"><a data-dimension112="5595e7d8-cee7-11f1-93aa-27a04ca61e8b" data-action="Deal Block" data-label="Golfer's Scratch Off Poster" data-dimension48="Golfer's Scratch Off Poster" data-dimension25="$25" href="https://www.uncommongoods.com/product/golfers-scratch-off-poster" 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:100.00%;"><img id="xxLsMrXyZxsrKd5M7Hei4F" name="courses.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xxLsMrXyZxsrKd5M7Hei4F-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.uncommongoods.com/product/golfers-scratch-off-poster" target="_blank" rel="nofollow" data-dimension112="5595e7d8-cee7-11f1-93aa-27a04ca61e8b" data-action="Deal Block" data-label="Golfer's Scratch Off Poster" data-dimension48="Golfer's Scratch Off Poster" data-dimension25="$25">Golfer's Scratch Off Poster: $25</a></strong><br>If you know a golfer who travels to play famous courses, this scratch-off poster from Uncommon Goods is a thoughtful gift idea. This way, they can keep track of where they've played and where they should book a trip to next.<a class="view-deal button" href="https://www.uncommongoods.com/product/golfers-scratch-off-poster" target="_blank" rel="nofollow" data-dimension112="5595e7d8-cee7-11f1-93aa-27a04ca61e8b" data-action="Deal Block" data-label="Golfer's Scratch Off Poster" data-dimension48="Golfer's Scratch Off Poster" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="5595e83c-cee7-11f1-bf96-b9633b57e35f" data-action="Deal Block" data-label="Nextgen Den Caddy" data-dimension48="Nextgen Den Caddy" data-dimension25="$105" href="https://www.pxg.com/products/nextgen-den-caddy" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1440px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="RuCWdBXEop2ZpzQAKN44XX" name="Nextgen Den Caddy" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RuCWdBXEop2ZpzQAKN44XX-1920-80.png" mos="" align="middle" fullscreen="" width="1440" height="1440" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.pxg.com/products/nextgen-den-caddy" target="_blank" rel="nofollow" data-dimension112="5595e83c-cee7-11f1-bf96-b9633b57e35f" data-action="Deal Block" data-label="Nextgen Den Caddy" data-dimension48="Nextgen Den Caddy" data-dimension25="$105">Nextgen Den Caddy: $105</a></strong><br>A den caddy is a fun thing to have around the house for storing clubs, balls or just about anything else. It's like a mini golf bag that happens to look cool. I have a PXG den caddy in my simulator for storing my various training aids (some of which are outlined above), but it's just a cool accessory to have around, and at $105, PXG's is one of the more reasonably priced options.<a class="view-deal button" href="https://www.pxg.com/products/nextgen-den-caddy" target="_blank" rel="nofollow" data-dimension112="5595e83c-cee7-11f1-bf96-b9633b57e35f" data-action="Deal Block" data-label="Nextgen Den Caddy" data-dimension48="Nextgen Den Caddy" data-dimension25="$105">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ My favorite sunrise alarm clock is down to $59 at Amazon — if you still feel tired after 8 hours sleep, this is a must-buy ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I bought my husband the Dreamegg Sunrise Alarm clock for Christmas last year, and it helped us both wake up that little bit easier all winter long. I paid full price, but there's currently <a href="https://www.amazon.com/dp/B0D5MG7K8R" target="_blank"><strong>25% off the Dreamegg Sunrise Alarm 1 at Amazon</strong></a>, taking the price down to $59.98 from $79.99. <br><br>Dreamegg is the budget friendly brand behind some of the <a href="https://www.tomsguide.com/wellness/sleep/best-sunrise-alarm-clocks">best sunrise alarm clocks</a> you can buy, and 25% off is a decent saving outside of a Prime Day event. <br><br>If you're looking to get a jump start on your Christmas shopping, or just looking for a cost effective way to make mornings a bit easier this winter, I highly recommend snapping the Dreamegg up. Here's why. </p><div class="product"><a data-dimension112="227af56a-cecd-11f1-b699-0fc20e73875b" data-action="Deal Block" data-label="Sunrise 1" data-dimension48="Sunrise 1" data-dimension25="$59.98" href="https://www.amazon.com/dp/B0D5MG7K8R" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:298px;"><p class="vanilla-image-block" style="padding-top:100.67%;"><img id="y3RbLM9F852tFapQALWANH" name="Dreamegg Sunrise 1" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/y3RbLM9F852tFapQALWANH-1920-80.webp" mos="" align="middle" fullscreen="" width="298" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0D5MG7K8R" target="_blank" rel="nofollow" data-dimension112="227af56a-cecd-11f1-b699-0fc20e73875b" data-action="Deal Block" data-label="Sunrise 1" data-dimension48="Sunrise 1" data-dimension25="$59.98">Sunrise 1: was $79.99 now $59.98</a></strong><br>The Dreamegg is sunrise alarm clock and sound machine designed to help make mornings brighter with simulated daylight and soothing wake up sounds. This Amazon best-seller normally costs $79.99 but dops to $59.98 in a time limited sale, making it exceptional value for money. <a class="view-deal button" href="https://www.amazon.com/dp/B0D5MG7K8R" target="_blank" rel="nofollow" data-dimension112="227af56a-cecd-11f1-b699-0fc20e73875b" data-action="Deal Block" data-label="Sunrise 1" data-dimension48="Sunrise 1" data-dimension25="$59.98">View Deal</a></p></div><div data-widget-type="productname" data-model-name="1. Dreamegg Sunrise 1"></div><h2 id="waking-up-to-a-sunrise-alarm-clock-helps-you-feel-more-alert-here-39-s-why">Waking up to a sunrise alarm clock helps you feel more alert — here's why</h2><p>Even through our closed eyelids, daylight is a powerful cue that helps promote the production of <a href="https://www.tomsguide.com/wellness/sleep/sleep-hormones">key wakeful hormones</a>, like serotonin and cortisol. It also triggers the fall in the hormones that make us feel sleepy, like <a href="https://www.tomsguide.com/wellness/mattresses/what-is-melatonin">melatonin</a>. Together, the rise and fall of these hormones help us feel refreshed upon waking. <br><br>While daylight naturally helps wake us up during the lighter summer months, it's a different story in winter. Darker mornings means we miss that crucial cue that it's time to wake up, which can leave us feeling sluggish and drowsy when our alarm goes off. <br>Enter the sunrise alarm clock. With their sunrise simulation, sunrise alarm clocks can help draw us out of <a href="https://www.tomsguide.com/wellness/sleep/how-much-deep-sleep-do-you-need">deep sleep</a>, helping us feel more energetic when we wake up.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TyBXfMrURuYJ2a49uU7cUh" name="Dreamegg Sunrise Alarm Clock" alt="Dreamegg Sunrise Alarm Clock" src="https://cdn.mos.cms.futurecdn.net/TyBXfMrURuYJ2a49uU7cUh-1920-80.png" 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: Dreamegg)</span></figcaption></figure><p>Keen to try a sunrise alarm clock but not willing to spend a fortune, I bought my husband the Dreamegg Sunrise 1 last Christmas — and it instantly helped us wake up feeling a bit more energetic. <br><br>The dawn simulation lasts between 15, 30 and 60 minutes long, depending on your own preference. Ours is set to 60 minutes long, and that occasionally helps wake me up shortly before my alarm. <br><br>It comes with 29 different sounds, including white noise, so you can use it as part of your nighttime routine as well as waking you up. To be honest, I skip the white noise before bed but I do appreciate the soft glow as opposed to a bright light in the run up to bedtime. There's 9 light colors to choose from, including sleep-inducing orange and amber. <br><br>The accompanying sounds are pretty basic, but they do the job. For a large sound library and crisp audio, I would recommend the Hatch deal below (just be prepared to pay triple the price). But if you're looking for a sunrise alarm clock that works well and won't break the bank, I recommend the Dreamegg. </p><h2 id="looking-for-something-with-better-audio-try-this-instead">Looking for something with better audio? Try this instead...  </h2><div class="product"><a data-dimension112="d6f77416-ced0-11f1-a085-bb43af5999dc" data-action="Deal Block" data-label="Restore 3" data-dimension48="Restore 3" data-dimension25="$169.99" href="https://www.hatch.co/restore?srsltid=AYCX9vIEdxIJcRLrH7_fWiW_iHH9KS7sY53fs58AvhIsctN9BdrQyicc" 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="89vBDhZ7DpH7qJ5gbWKriK" name="Hatch Restore 3 rosy deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/89vBDhZ7DpH7qJ5gbWKriK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Hatch Restore 3 comes packed with a library of 60+ sleep sounds, ranging from historical stories to meditative sound tracks. However, be prepared to pay a $59.99 annual subscription fee to unlock the full audio features. It's a quality sound machine, wake up light and night light, as well as looking chic on your nightstand. Outside of sale season (like now) you'll pay $169.99, but we have seen it drop as low as $139.99 — so it's worth holding out for the <a href="https://www.tomsguide.com/deals/black-friday-mattress-best-deals" data-dimension112="d6f77416-ced0-11f1-a085-bb43af5999dc" data-action="Deal Block" data-label="Restore 3" data-dimension48="Restore 3" data-dimension25="$169.99">Black Friday sleep sales</a>.<a class="view-deal button" href="https://www.hatch.co/restore?srsltid=AYCX9vIEdxIJcRLrH7_fWiW_iHH9KS7sY53fs58AvhIsctN9BdrQyicc" target="_blank" rel="nofollow" data-dimension112="d6f77416-ced0-11f1-a085-bb43af5999dc" data-action="Deal Block" data-label="Restore 3" data-dimension48="Restore 3" data-dimension25="$169.99">View Deal</a></p></div><div data-widget-type="productname" data-model-name="Hatch Restore 3"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep-tech/my-favorite-sunrise-alarm-clock-is-down-to-usd59-at-amazon-if-you-still-feel-tired-after-8-hours-sleep-this-is-a-must-buy</link>
                                                                            <description>
                            <![CDATA[ I credit the Dreamegg sunrise alarm clock with helping me wake up with more energy all last winter, and it's currently $20 off in a new Amazon sale. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Gdyw9VFgCcRqaUtAzRym98</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kNSmn3CD2vbQprJ4Ea6EWj-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 12:03:25 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sleep Tech]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Sleep]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nicola Appleton ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/K2anUY2W7BNEiVbcZvw3iV-320-70.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/kNSmn3CD2vbQprJ4Ea6EWj-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The image shows an round alarm clock on a nightstand next to a green plant, emitting an orange light]]></media:description>                                                            <media:text><![CDATA[The image shows an round alarm clock on a nightstand next to a green plant, emitting an orange light]]></media:text>
                                <media:title type="plain"><![CDATA[The image shows an round alarm clock on a nightstand next to a green plant, emitting an orange light]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kNSmn3CD2vbQprJ4Ea6EWj-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I bought my husband the Dreamegg Sunrise Alarm clock for Christmas last year, and it helped us both wake up that little bit easier all winter long. I paid full price, but there's currently <a href="https://www.amazon.com/dp/B0D5MG7K8R" target="_blank"><strong>25% off the Dreamegg Sunrise Alarm 1 at Amazon</strong></a>, taking the price down to $59.98 from $79.99. <br><br>Dreamegg is the budget friendly brand behind some of the <a href="https://www.tomsguide.com/wellness/sleep/best-sunrise-alarm-clocks">best sunrise alarm clocks</a> you can buy, and 25% off is a decent saving outside of a Prime Day event. <br><br>If you're looking to get a jump start on your Christmas shopping, or just looking for a cost effective way to make mornings a bit easier this winter, I highly recommend snapping the Dreamegg up. Here's why. </p><div class="product"><a data-dimension112="227af56a-cecd-11f1-b699-0fc20e73875b" data-action="Deal Block" data-label="Sunrise 1" data-dimension48="Sunrise 1" data-dimension25="$59.98" href="https://www.amazon.com/dp/B0D5MG7K8R" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:298px;"><p class="vanilla-image-block" style="padding-top:100.67%;"><img id="y3RbLM9F852tFapQALWANH" name="Dreamegg Sunrise 1" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/y3RbLM9F852tFapQALWANH-1920-80.webp" mos="" align="middle" fullscreen="" width="298" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0D5MG7K8R" target="_blank" rel="nofollow" data-dimension112="227af56a-cecd-11f1-b699-0fc20e73875b" data-action="Deal Block" data-label="Sunrise 1" data-dimension48="Sunrise 1" data-dimension25="$59.98">Sunrise 1: was $79.99 now $59.98</a></strong><br>The Dreamegg is sunrise alarm clock and sound machine designed to help make mornings brighter with simulated daylight and soothing wake up sounds. This Amazon best-seller normally costs $79.99 but dops to $59.98 in a time limited sale, making it exceptional value for money. <a class="view-deal button" href="https://www.amazon.com/dp/B0D5MG7K8R" target="_blank" rel="nofollow" data-dimension112="227af56a-cecd-11f1-b699-0fc20e73875b" data-action="Deal Block" data-label="Sunrise 1" data-dimension48="Sunrise 1" data-dimension25="$59.98">View Deal</a></p></div><div data-widget-type="productname" data-model-name="1. Dreamegg Sunrise 1"></div><h2 id="waking-up-to-a-sunrise-alarm-clock-helps-you-feel-more-alert-here-39-s-why">Waking up to a sunrise alarm clock helps you feel more alert — here's why</h2><p>Even through our closed eyelids, daylight is a powerful cue that helps promote the production of <a href="https://www.tomsguide.com/wellness/sleep/sleep-hormones">key wakeful hormones</a>, like serotonin and cortisol. It also triggers the fall in the hormones that make us feel sleepy, like <a href="https://www.tomsguide.com/wellness/mattresses/what-is-melatonin">melatonin</a>. Together, the rise and fall of these hormones help us feel refreshed upon waking. <br><br>While daylight naturally helps wake us up during the lighter summer months, it's a different story in winter. Darker mornings means we miss that crucial cue that it's time to wake up, which can leave us feeling sluggish and drowsy when our alarm goes off. <br>Enter the sunrise alarm clock. With their sunrise simulation, sunrise alarm clocks can help draw us out of <a href="https://www.tomsguide.com/wellness/sleep/how-much-deep-sleep-do-you-need">deep sleep</a>, helping us feel more energetic when we wake up.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TyBXfMrURuYJ2a49uU7cUh" name="Dreamegg Sunrise Alarm Clock" alt="Dreamegg Sunrise Alarm Clock" src="https://cdn.mos.cms.futurecdn.net/TyBXfMrURuYJ2a49uU7cUh-1920-80.png" 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: Dreamegg)</span></figcaption></figure><p>Keen to try a sunrise alarm clock but not willing to spend a fortune, I bought my husband the Dreamegg Sunrise 1 last Christmas — and it instantly helped us wake up feeling a bit more energetic. <br><br>The dawn simulation lasts between 15, 30 and 60 minutes long, depending on your own preference. Ours is set to 60 minutes long, and that occasionally helps wake me up shortly before my alarm. <br><br>It comes with 29 different sounds, including white noise, so you can use it as part of your nighttime routine as well as waking you up. To be honest, I skip the white noise before bed but I do appreciate the soft glow as opposed to a bright light in the run up to bedtime. There's 9 light colors to choose from, including sleep-inducing orange and amber. <br><br>The accompanying sounds are pretty basic, but they do the job. For a large sound library and crisp audio, I would recommend the Hatch deal below (just be prepared to pay triple the price). But if you're looking for a sunrise alarm clock that works well and won't break the bank, I recommend the Dreamegg. </p><h2 id="looking-for-something-with-better-audio-try-this-instead">Looking for something with better audio? Try this instead...  </h2><div class="product"><a data-dimension112="d6f77416-ced0-11f1-a085-bb43af5999dc" data-action="Deal Block" data-label="Restore 3" data-dimension48="Restore 3" data-dimension25="$169.99" href="https://www.hatch.co/restore?srsltid=AYCX9vIEdxIJcRLrH7_fWiW_iHH9KS7sY53fs58AvhIsctN9BdrQyicc" 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="89vBDhZ7DpH7qJ5gbWKriK" name="Hatch Restore 3 rosy deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/89vBDhZ7DpH7qJ5gbWKriK-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Hatch Restore 3 comes packed with a library of 60+ sleep sounds, ranging from historical stories to meditative sound tracks. However, be prepared to pay a $59.99 annual subscription fee to unlock the full audio features. It's a quality sound machine, wake up light and night light, as well as looking chic on your nightstand. Outside of sale season (like now) you'll pay $169.99, but we have seen it drop as low as $139.99 — so it's worth holding out for the <a href="https://www.tomsguide.com/deals/black-friday-mattress-best-deals" data-dimension112="d6f77416-ced0-11f1-a085-bb43af5999dc" data-action="Deal Block" data-label="Restore 3" data-dimension48="Restore 3" data-dimension25="$169.99">Black Friday sleep sales</a>.<a class="view-deal button" href="https://www.hatch.co/restore?srsltid=AYCX9vIEdxIJcRLrH7_fWiW_iHH9KS7sY53fs58AvhIsctN9BdrQyicc" target="_blank" rel="nofollow" data-dimension112="d6f77416-ced0-11f1-a085-bb43af5999dc" data-action="Deal Block" data-label="Restore 3" data-dimension48="Restore 3" data-dimension25="$169.99">View Deal</a></p></div><div data-widget-type="productname" data-model-name="Hatch Restore 3"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Skechers walking shoes are up to 61% off — 21 best deals on sneakers, slip-ins and fall boots ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Black Friday excitement is building! If you just can't wait, there's no need to worry — <a href="https://www.amazon.com/stores/page/37AAEB46-A955-4D92-957D-28A4B4B3FDE2" target="_blank" rel="nofollow">Amazon is offering huge price drops on Skechers</a> right now. Whether you're on the hunt for sneakers or cozy fall boots, I'm sharing all the best styles.</p><p>The shoe I'm most interested in right now is the <a href="https://www.amazon.com/Skechers-Sport-Womens-Slip-INS-Sneaker/dp/B0F3RMY5YF" target="_blank" rel="nofollow">Skechers Contour Foam Cozy Fit on sale from $50</a>. Not only are they the perfect comfy fall sneakers, they have one of the best color selections of any pair of Skechers you can buy right now.</p><p><strong>Note: </strong>Prices vary depending on the size and color you choose. Check out any different color options available in your size to find the best deals. For more, check out our <a href="https://www.tomsguide.com/coupons/amazon.com">Amazon promo codes</a>.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong></strong><a href="https://www.amazon.com/stores/page/37AAEB46-A955-4D92-957D-28A4B4B3FDE2" target="_blank" rel="nofollow"><strong>shop all Skechers deals at Amazon</strong></a></li><li><strong>Virtue Stunner (Women's): </strong><a href="https://www.amazon.com/Skechers-Womens-Sport-Active-Virtue/dp/B0FNCB7C3X/" target="_blank" rel="nofollow"><strong>was $58 now from $25</strong></a></li><li><strong>Go Walk Arch Fit N-Joy Nate (Men's): </strong><a href="https://www.amazon.com/Skechers-Mens-N-Joy-Sneaker-White/dp/B0FDMS3F5K" target="_blank" rel="nofollow"><strong>was $78 now from $38</strong></a></li><li><strong>Keepsakes Cozy - Cozy Cascade (Women's): </strong><a href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Chestnut/dp/B0GPD3LSTC" target="_blank" rel="nofollow"><strong>was $55 now from $41</strong></a></li><li><strong>Summits Louvin Slip-Ins (Men's): </strong><a href="https://www.amazon.com/Skechers-Summits-Louvin-Loafer-Black/dp/B0864TFM51" target="_blank" rel="nofollow"><strong>was $70 now from $45</strong></a></li><li><strong>Summits Key Pace Slip-ins (Men's): </strong><a href="https://www.amazon.com/Skechers-Summits-Hands-Slip-Loafer/dp/B0H2K13WJL" target="_blank" rel="nofollow"><strong>was $72 now from $56</strong></a></li><li><strong>Refine 2.0 Nora (Women's): </strong><a href="https://www.amazon.com/Skechers-Womens-Sport-Active-Refine/dp/B0G1PK31X7" target="_blank" rel="nofollow"><strong>was $84 now from $57</strong></a></li><li><strong>Segment Rilar (Men's): </strong><a href="https://www.amazon.com/Skechers-Segment-Rilar-Oxford-Brown/dp/B00I1JPY76" target="_blank" rel="nofollow"><strong>was $95 now from $59</strong></a></li><li><strong>Go Walk Max Cushioning Hyper Burst Zoltar (Men's): </strong><a href="https://www.amazon.com/Skechers-Cushioning-Slip-Ins-Sneaker-Charcoal/dp/B0GY6FY26K" target="_blank" rel="nofollow"><strong>was $94 now from $81</strong></a></li><li><strong>Aero Razor Running Shoes (Women's): </strong><a href="https://www.amazon.com/Skechers-Womens-Razor-Turquoise-Medium/dp/B0GVPVGG8C" target="_blank" rel="nofollow"><strong>was $140 now from $91</strong></a></li></ul><h3 class="article-body__section" id="section-skechers-deals-women-s"><span>Skechers deals (Women's)</span></h3><div class="product"><a data-dimension112="c1b22920-cecb-11f1-9f29-c55ce8bef84a" data-action="Deal Block" data-label="Virtue Stunner (Women's)" data-dimension48="Virtue Stunner (Women's)" data-dimension25="$25" href="https://www.amazon.com/Skechers-Womens-Sport-Active-Virtue/dp/B0FNC7ZZD1/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:64.32%;"><img id="fuQGoHerZPQAPL7bem8Pic" name="Virtue Stunner (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/fuQGoHerZPQAPL7bem8Pic-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="447" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Sport-Active-Virtue/dp/B0FNC7ZZD1/" target="_blank" rel="nofollow" data-dimension112="c1b22920-cecb-11f1-9f29-c55ce8bef84a" data-action="Deal Block" data-label="Virtue Stunner (Women's)" data-dimension48="Virtue Stunner (Women's)" data-dimension25="$25">Virtue Stunner (Women's): was $59 now $25</a></strong><br>This is another hefty Skechers discount that you'll have to act fast to grab, if they're available in your size. Currently on 57% off in Grey and 50% off in Natural, these super-simple, super-comfortable shoes have a soft knit upper and air-cooled memory foam insoles.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Sport-Active-Virtue/dp/B0FNC7ZZD1/" target="_blank" rel="nofollow" data-dimension112="c1b22920-cecb-11f1-9f29-c55ce8bef84a" data-action="Deal Block" data-label="Virtue Stunner (Women's)" data-dimension48="Virtue Stunner (Women's)" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="913130c8-cec8-11f1-922c-ad116ac9d3cd" data-action="Deal Block" data-label="Refine 2.0 Nora (Women's)" data-dimension48="Refine 2.0 Nora (Women's)" data-dimension25="$35" href="https://www.amazon.com/Skechers-Womens-Sport-Active-Refine/dp/B0G1P5DSL6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:66.91%;"><img id="XtYccaXnTY5XF946soUYSE" name="Refine 2.0 Nora (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XtYccaXnTY5XF946soUYSE-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="465" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Sport-Active-Refine/dp/B0G1P5DSL6" target="_blank" rel="nofollow" data-dimension112="913130c8-cec8-11f1-922c-ad116ac9d3cd" data-action="Deal Block" data-label="Refine 2.0 Nora (Women's)" data-dimension48="Refine 2.0 Nora (Women's)" data-dimension25="$35">Refine 2.0 Nora (Women's): was $84 now $35</a></strong><br>These Skechers have seen an impressive 58% discount when you check to apply the coupon on Amazon's page. Incredibly easy to wear, they feature a stretch knit upper, arch-fit insoles and are machine washable. <a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Sport-Active-Refine/dp/B0G1P5DSL6" target="_blank" rel="nofollow" data-dimension112="913130c8-cec8-11f1-922c-ad116ac9d3cd" data-action="Deal Block" data-label="Refine 2.0 Nora (Women's)" data-dimension48="Refine 2.0 Nora (Women's)" data-dimension25="$35">View Deal</a></p></div><div class="product"><a data-dimension112="91313136-cec8-11f1-8ab9-7b04dd6482f5" data-action="Deal Block" data-label="Bobs Keepsakes Lite Slipper (Women's)" data-dimension48="Bobs Keepsakes Lite Slipper (Women's)" data-dimension25="$39" href="https://www.amazon.com/Skechers-Keepsakes-Lite-Cozy-Slipper-Chestnut/dp/B0BX22T5PF/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1181px;"><p class="vanilla-image-block" style="padding-top:58.85%;"><img id="ut3KQ3LGhZKe4rhieo9nsK" name="719iDVut31L._AC_SY695" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ut3KQ3LGhZKe4rhieo9nsK-1920-80.png" mos="" align="middle" fullscreen="" width="1181" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Keepsakes-Lite-Cozy-Slipper-Chestnut/dp/B0BX22T5PF/" target="_blank" rel="nofollow" data-dimension112="91313136-cec8-11f1-8ab9-7b04dd6482f5" data-action="Deal Block" data-label="Bobs Keepsakes Lite Slipper (Women's)" data-dimension48="Bobs Keepsakes Lite Slipper (Women's)" data-dimension25="$39">Bobs Keepsakes Lite Slipper (Women's): was $51 now $39</a></strong><br>Get yourself prepared for winter extra early with these cozy, lined Skechers slippers. With memory-foam insoles, faux fur trim and traction outer sole, these snug slippers will keep you warm, no matter where you wear them.  <a class="view-deal button" href="https://www.amazon.com/Skechers-Keepsakes-Lite-Cozy-Slipper-Chestnut/dp/B0BX22T5PF/" target="_blank" rel="nofollow" data-dimension112="91313136-cec8-11f1-8ab9-7b04dd6482f5" data-action="Deal Block" data-label="Bobs Keepsakes Lite Slipper (Women's)" data-dimension48="Bobs Keepsakes Lite Slipper (Women's)" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="c1b229ac-cecb-11f1-a96f-d55b9dd5dd35" data-action="Deal Block" data-label="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension48="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension25="$41" href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Chestnut/dp/B0GPMGKPT8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:55.68%;"><img id="hYSZfU9nU4nzZJ6fSLnpeZ" name="Keepsakes Cozy - Cozy Cascade (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hYSZfU9nU4nzZJ6fSLnpeZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="387" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Chestnut/dp/B0GPMGKPT8" target="_blank" rel="nofollow" data-dimension112="c1b229ac-cecb-11f1-a96f-d55b9dd5dd35" data-action="Deal Block" data-label="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension48="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension25="$41">Keepsakes Cozy - Cozy Cascade (Women's): was $55 now $41</a></strong><br>You can't have enough cozy pairs of slippers, especially this time of year. These Skechers stand out for their pretty embroidered design on the cuff, and have a soft fuzzy lining — plus Skechers memory foam.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Chestnut/dp/B0GPMGKPT8" target="_blank" rel="nofollow" data-dimension112="c1b229ac-cecb-11f1-a96f-d55b9dd5dd35" data-action="Deal Block" data-label="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension48="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension25="$41">View Deal</a></p></div><div class="product"><a data-dimension112="91313352-cec8-11f1-b43d-51f87ac772f8" data-action="Deal Block" data-label="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension48="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension25="$50" href="https://www.amazon.com/Skechers-Sport-Womens-Slip-INS-Sneaker/dp/B0F3RMY5YF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:66.91%;"><img id="Upd6k99BCo75ngNtEoAdxJ" name="Contour Foam Cozy Fit Slip-Ins (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Upd6k99BCo75ngNtEoAdxJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="465" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Sport-Womens-Slip-INS-Sneaker/dp/B0F3RMY5YF" target="_blank" rel="nofollow" data-dimension112="91313352-cec8-11f1-b43d-51f87ac772f8" data-action="Deal Block" data-label="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension48="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension25="$50">Contour Foam Cozy Fit Slip-Ins (Women's): was $89 now $50</a></strong><br>I love the look of these Skechers, because of the two-tone design — you can get them in white paired with a bunch of other accent colors. As well as looking great, they have a Contour Foam midsole that adapts to your foot's shape, making them some of the comfiest-feeling shoes around.<a class="view-deal button" href="https://www.amazon.com/Skechers-Sport-Womens-Slip-INS-Sneaker/dp/B0F3RMY5YF" target="_blank" rel="nofollow" data-dimension112="91313352-cec8-11f1-b43d-51f87ac772f8" data-action="Deal Block" data-label="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension48="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension25="$50">View Deal</a></p></div><div class="product"><a data-dimension112="c1b22a24-cecb-11f1-818f-fffaa8c68890" data-action="Deal Block" data-label="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension48="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension25="$52" href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Slip-Ins/dp/B0GZJHW6DJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:72.23%;"><img id="C6vf8hr9LiPZZL7EueMWZH" name="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/C6vf8hr9LiPZZL7EueMWZH-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="502" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Slip-Ins/dp/B0GZJHW6DJ" target="_blank" rel="nofollow" data-dimension112="c1b22a24-cecb-11f1-818f-fffaa8c68890" data-action="Deal Block" data-label="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension48="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension25="$52">Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's): was $75 now $52</a></strong><br>Double the cozy! Skechers seems to have taken some style cues from Ugg here with a slip-in, wool-lined boot. The heart-shaped charm on the side is a nice touch.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Slip-Ins/dp/B0GZJHW6DJ" target="_blank" rel="nofollow" data-dimension112="c1b22a24-cecb-11f1-818f-fffaa8c68890" data-action="Deal Block" data-label="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension48="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension25="$52">View Deal</a></p></div><div class="product"><a data-dimension112="91313488-cec8-11f1-969e-15c257f47827" data-action="Deal Block" data-label="Uno - Champagne & Roses (Women's)" data-dimension48="Uno - Champagne & Roses (Women's)" data-dimension25="$53" href="https://www.amazon.com/Skechers-Street-Womens-UNO-Champagne/dp/B0FN6Y36CP" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:73.09%;"><img id="k9WB77eyZDmMW3XwNPTVym" name="Uno - Champagne & Roses (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/k9WB77eyZDmMW3XwNPTVym-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="508" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Street-Womens-UNO-Champagne/dp/B0FN6Y36CP" target="_blank" rel="nofollow" data-dimension112="91313488-cec8-11f1-969e-15c257f47827" data-action="Deal Block" data-label="Uno - Champagne & Roses (Women's)" data-dimension48="Uno - Champagne & Roses (Women's)" data-dimension25="$53">Uno - Champagne & Roses (Women's): was $83 now $53</a></strong><br>Need a practical gift? These shoes are perfect for the job since they look super stylish and are extremely comfortable. The rose petal decor further elevates the look.<a class="view-deal button" href="https://www.amazon.com/Skechers-Street-Womens-UNO-Champagne/dp/B0FN6Y36CP" target="_blank" rel="nofollow" data-dimension112="91313488-cec8-11f1-969e-15c257f47827" data-action="Deal Block" data-label="Uno - Champagne & Roses (Women's)" data-dimension48="Uno - Champagne & Roses (Women's)" data-dimension25="$53">View Deal</a></p></div><div class="product"><a data-dimension112="c1b22a9c-cecb-11f1-a4d1-d3fbd5fd194c" data-action="Deal Block" data-label="Glide-Step Pro Soft Mirage (Women's)" data-dimension48="Glide-Step Pro Soft Mirage (Women's)" data-dimension25="$61" href="https://www.amazon.com/Skechers-Womens-Glide-Step-Soft-Mirage/dp/B0HMJWHM8D" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:70.36%;"><img id="gENhFcxWPfR5eGzmaeeMrZ" name="Glide-Step Pro Soft Mirage (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gENhFcxWPfR5eGzmaeeMrZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="489" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Glide-Step-Soft-Mirage/dp/B0HMJWHM8D" target="_blank" rel="nofollow" data-dimension112="c1b22a9c-cecb-11f1-a4d1-d3fbd5fd194c" data-action="Deal Block" data-label="Glide-Step Pro Soft Mirage (Women's)" data-dimension48="Glide-Step Pro Soft Mirage (Women's)" data-dimension25="$61">Glide-Step Pro Soft Mirage (Women's): was $78 now $61</a></strong><br>The Skechers Glide-Step offer improved movement and momentum, making every step feel lighter and more energetic. These Soft Mirage sneakers deliver all that as well as a sleek, understated style.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Glide-Step-Soft-Mirage/dp/B0HMJWHM8D" target="_blank" rel="nofollow" data-dimension112="c1b22a9c-cecb-11f1-a4d1-d3fbd5fd194c" data-action="Deal Block" data-label="Glide-Step Pro Soft Mirage (Women's)" data-dimension48="Glide-Step Pro Soft Mirage (Women's)" data-dimension25="$61">View Deal</a></p></div><div class="product star-deal"><a data-dimension112="91313424-cec8-11f1-b781-a32374e2b11a" data-action="Star Deal Block" data-label="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension48="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension25="$64" href="https://www.amazon.com/Skechers-Womens-Elevate-Sneaker-Black/dp/B0CNP8Z6FM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:52.81%;"><img id="vCHwenty55qSsiSaaAhmLh" name="Go Run Elevate 2.0 Sneaker (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vCHwenty55qSsiSaaAhmLh-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="367" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Elevate-Sneaker-Black/dp/B0CNP8Z6FM" target="_blank" rel="nofollow" data-dimension112="91313424-cec8-11f1-b781-a32374e2b11a" data-action="Star Deal Block" data-label="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension48="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension25="$64">Go Run Elevate 2.0 Sneaker (Women's): was $85 now $64</a></strong><br>If you're hitting the road, these Skechers are an excellent choice. Our <a href="https://www.tomsguide.com/wellness/running/skechers-go-run-elevate-2-review">Skechers Go Run Elevate 2.0 review</a> said that these are great for beginner runners thanks to their affordable price point, bouncy and propulsive soles and breathable design. These sneakers were originally priced at $85, but now you can get them for $64.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Elevate-Sneaker-Black/dp/B0CNP8Z6FM" target="_blank" rel="nofollow" data-dimension112="91313424-cec8-11f1-b781-a32374e2b11a" data-action="Star Deal Block" data-label="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension48="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="c1b22b00-cecb-11f1-9b5f-dbddd6d2807b" data-action="Deal Block" data-label="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension48="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension25="$80" href="https://www.amazon.com/Skechers-Womens-EASY-GOING-Chocolate/dp/B0GPD6P9F9" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:77.99%;"><img id="6SS6HJuer92iBVzNnRbUbU" name="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6SS6HJuer92iBVzNnRbUbU-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="542" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-EASY-GOING-Chocolate/dp/B0GPD6P9F9" target="_blank" rel="nofollow" data-dimension112="c1b22b00-cecb-11f1-9b5f-dbddd6d2807b" data-action="Deal Block" data-label="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension48="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension25="$80">Easy Going - Warm Occasion - Hands Free Slip-ins (Women's): was $95 now $80</a></strong><br>These cozy Skechers boots are basically an essential this season. They slip on easily and bring both cushioning and warmth that you won't want to go without on your fall walks.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-EASY-GOING-Chocolate/dp/B0GPD6P9F9" target="_blank" rel="nofollow" data-dimension112="c1b22b00-cecb-11f1-9b5f-dbddd6d2807b" data-action="Deal Block" data-label="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension48="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension25="$80">View Deal</a></p></div><div class="product"><a data-dimension112="913134f6-cec8-11f1-8420-c503bd559b16" data-action="Deal Block" data-label="Max Cushioning Elite 2.0 (Women's)" data-dimension48="Max Cushioning Elite 2.0 (Women's)" data-dimension25="$84" href="https://www.amazon.com/Skechers-Cushioning-Elite-Natural-Pink/dp/B0BZ93LKDQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:63.60%;"><img id="DDNtxm7NqaHbqokBvRhcxe" name="Skechers Max Cushioning Elite 2.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DDNtxm7NqaHbqokBvRhcxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="442" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Cushioning-Elite-Natural-Pink/dp/B0BZ93LKDQ" target="_blank" rel="nofollow" data-dimension112="913134f6-cec8-11f1-8420-c503bd559b16" data-action="Deal Block" data-label="Max Cushioning Elite 2.0 (Women's)" data-dimension48="Max Cushioning Elite 2.0 (Women's)" data-dimension25="$84">Max Cushioning Elite 2.0 (Women's): was $100 now $84</a></strong><br>These are a pair of comfortable, max-cushioned shoes, best suited to easy miles and long runs. They are hailed as cheaper dupes for the <a href="https://www.tomsguide.com/reviews/hoka-clifton-9">Hoka Clifton 9</a> trainers, without the price tag. Best suited to beginners, or runners looking for a plush shoe to wear for easy miles and long walks, these are a decent option. Read our <a href="https://www.tomsguide.com/wellness/fitness/skechers-max-cushioning-elite-2-0-review">Skechers Max Cushioning Elite 2.0 review</a> for all the info.<a class="view-deal button" href="https://www.amazon.com/Skechers-Cushioning-Elite-Natural-Pink/dp/B0BZ93LKDQ" target="_blank" rel="nofollow" data-dimension112="913134f6-cec8-11f1-8420-c503bd559b16" data-action="Deal Block" data-label="Max Cushioning Elite 2.0 (Women's)" data-dimension48="Max Cushioning Elite 2.0 (Women's)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="9131362c-cec8-11f1-8251-7fa7af1c2d72" data-action="Deal Block" data-label="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension48="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension25="$85" href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Cushioning-Endeavour/dp/B0GY6J4H4G" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:59.57%;"><img id="gX8x3dDgKEF8A5TFTT62gg" name="Max Cushioning Endeavour Pace Rhythm (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gX8x3dDgKEF8A5TFTT62gg-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="414" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Cushioning-Endeavour/dp/B0GY6J4H4G" target="_blank" rel="nofollow" data-dimension112="9131362c-cec8-11f1-8251-7fa7af1c2d72" data-action="Deal Block" data-label="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension48="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension25="$85">Max Cushioning Endeavour Pace Rhythm (Women's): was $105 now $85</a></strong><br>Though they're on the expensive side of Skechers' offerings, these running shoes make a statement and offer tons of comfortable cushioning. The Goga Mat insole propels you forwards and the rocker shape helps your steps transition naturally.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Cushioning-Endeavour/dp/B0GY6J4H4G" target="_blank" rel="nofollow" data-dimension112="9131362c-cec8-11f1-8251-7fa7af1c2d72" data-action="Deal Block" data-label="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension48="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension25="$85">View Deal</a></p></div><div class="product"><a data-dimension112="913135be-cec8-11f1-af62-7fe0a945fa4b" data-action="Deal Block" data-label="Aero Razor Running Shoes (Women's)" data-dimension48="Aero Razor Running Shoes (Women's)" data-dimension25="$91" href="https://www.amazon.com/Skechers-Womens-Razor-Turquoise-Medium/dp/B0GVPVGG8C" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:56.69%;"><img id="aqUWsueeM3Z3zz4bY64ro4" name="Aero Razor Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aqUWsueeM3Z3zz4bY64ro4-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="394" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Razor-Turquoise-Medium/dp/B0GVPVGG8C" target="_blank" rel="nofollow" data-dimension112="913135be-cec8-11f1-af62-7fe0a945fa4b" data-action="Deal Block" data-label="Aero Razor Running Shoes (Women's)" data-dimension48="Aero Razor Running Shoes (Women's)" data-dimension25="$91">Aero Razor Running Shoes (Women's): was $140 now $91</a></strong><br>We loved these shoes in our <a href="https://www.tomsguide.com/wellness/running/skechers-aero-razor-review">Skechers Aero Razor review</a>! Our testers said this is a great pair of lightweight shoes for runners who want to pick up speed. You'll find more cushioning elsewhere, but these running shoes bring a super energetic feel to every step you take.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Razor-Turquoise-Medium/dp/B0GVPVGG8C" target="_blank" rel="nofollow" data-dimension112="913135be-cec8-11f1-af62-7fe0a945fa4b" data-action="Deal Block" data-label="Aero Razor Running Shoes (Women's)" data-dimension48="Aero Razor Running Shoes (Women's)" data-dimension25="$91">View Deal</a></p></div><div class="product"><a data-dimension112="9131369a-cec8-11f1-b1eb-93110f318f78" data-action="Deal Block" data-label="Go Walk Workout Walker (Women's)" data-dimension48="Go Walk Workout Walker (Women's)" data-dimension25="$117" href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Workout-Walker/dp/B0GTRTRK9P" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:59.42%;"><img id="g6Fbk2tgHp3unLKa8Gkd3g" name="Go Walk Workout Walker (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/g6Fbk2tgHp3unLKa8Gkd3g-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="413" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Workout-Walker/dp/B0GTRTRK9P" target="_blank" rel="nofollow" data-dimension112="9131369a-cec8-11f1-b1eb-93110f318f78" data-action="Deal Block" data-label="Go Walk Workout Walker (Women's)" data-dimension48="Go Walk Workout Walker (Women's)" data-dimension25="$117">Go Walk Workout Walker (Women's): was $135 now $117</a></strong><br>One of the <a href="https://www.tomsguide.com/best-picks/best-skechers-shoes-in-year">best Skechers</a> we've tested, the <a href="https://www.tomsguide.com/reviews/skechers-go-walk-workout-walker">Skechers Go Walk Workout Walker</a>, has gotten a new look. I love the new color options — plus you get a slip-in fit, super-soft cushioning and air cooled memory foam on board.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Workout-Walker/dp/B0GTRTRK9P" target="_blank" rel="nofollow" data-dimension112="9131369a-cec8-11f1-b1eb-93110f318f78" data-action="Deal Block" data-label="Go Walk Workout Walker (Women's)" data-dimension48="Go Walk Workout Walker (Women's)" data-dimension25="$117">View Deal</a></p></div><h3 class="article-body__section" id="section-skechers-deals-men-s"><span>Skechers deals (Men's)</span></h3><div class="product"><a data-dimension112="c1b22b96-cecb-11f1-8713-1f477ba8fa0d" data-action="Deal Block" data-label="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension48="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension25="$38" href="https://www.amazon.com/Skechers-Mens-N-Joy-Sneaker-White/dp/B0FDMS3F5K" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:54.53%;"><img id="m29EB9wmTKU2Ur4NSbtm8K" name="Go Walk Arch Fit N-Joy Nate (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/m29EB9wmTKU2Ur4NSbtm8K-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="379" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Mens-N-Joy-Sneaker-White/dp/B0FDMS3F5K" target="_blank" rel="nofollow" data-dimension112="c1b22b96-cecb-11f1-8713-1f477ba8fa0d" data-action="Deal Block" data-label="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension48="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension25="$38">Go Walk Arch Fit N-Joy Nate (Men's): was $78 now $38</a></strong><br>Need some extra support? These Skechers Arch Fit sneakers bring all that and more. The removeable insole absorbs shock and the upper is breathable and stretchy. I also love the sporty look these offer.<a class="view-deal button" href="https://www.amazon.com/Skechers-Mens-N-Joy-Sneaker-White/dp/B0FDMS3F5K" target="_blank" rel="nofollow" data-dimension112="c1b22b96-cecb-11f1-8713-1f477ba8fa0d" data-action="Deal Block" data-label="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension48="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension25="$38">View Deal</a></p></div><div class="product"><a data-dimension112="91313776-cec8-11f1-b0e9-efbb7a440890" data-action="Deal Block" data-label="Summits Louvin Slip-Ins (Men's)" data-dimension48="Summits Louvin Slip-Ins (Men's)" data-dimension25="$45" href="https://www.amazon.com/Skechers-Summits-Louvin-Loafer-Black/dp/B0864TFM51" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:65.61%;"><img id="jjR9bFWMb8tELv4o24E6Xm" name="Summits Louvin Slip-Ins (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jjR9bFWMb8tELv4o24E6Xm-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="456" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Summits-Louvin-Loafer-Black/dp/B0864TFM51" target="_blank" rel="nofollow" data-dimension112="91313776-cec8-11f1-b0e9-efbb7a440890" data-action="Deal Block" data-label="Summits Louvin Slip-Ins (Men's)" data-dimension48="Summits Louvin Slip-Ins (Men's)" data-dimension25="$45">Summits Louvin Slip-Ins (Men's): was $70 now $45</a></strong><br>Designed for athletics and light training, these Skechers are extremely comfortable — and their slip-on design means you don't have to tie your laces. They fit securely, too, and have soft memory foam insoles.<a class="view-deal button" href="https://www.amazon.com/Skechers-Summits-Louvin-Loafer-Black/dp/B0864TFM51" target="_blank" rel="nofollow" data-dimension112="91313776-cec8-11f1-b0e9-efbb7a440890" data-action="Deal Block" data-label="Summits Louvin Slip-Ins (Men's)" data-dimension48="Summits Louvin Slip-Ins (Men's)" data-dimension25="$45">View Deal</a></p></div><div class="product"><a data-dimension112="913137e4-cec8-11f1-9015-69214f380e55" data-action="Deal Block" data-label="Go Walk Max (Men's)" data-dimension48="Go Walk Max (Men's)" data-dimension25="$48" href="https://www.amazon.com/Skechers-Mens-Walk-Athletic-Walking/dp/B0F1Z7M7PT/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1065px;"><p class="vanilla-image-block" style="padding-top:56.06%;"><img id="hsosGofDzupcYyTW7KQq5m" name="61gxvfQj7xL._AC_SY625_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hsosGofDzupcYyTW7KQq5m-1920-80.jpg" mos="" align="middle" fullscreen="" width="1065" height="597" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Mens-Walk-Athletic-Walking/dp/B0F1Z7M7PT/" target="_blank" rel="nofollow" data-dimension112="913137e4-cec8-11f1-9015-69214f380e55" data-action="Deal Block" data-label="Go Walk Max (Men's)" data-dimension48="Go Walk Max (Men's)" data-dimension25="$48">Go Walk Max (Men's): was $49 now $48</a></strong><br>The Skechers Go Walk Max slip-on sneakers feature a super supportive insole that uses Goga Max Technology with high-rebound cushioning, along with an extra-padded heel for comfort. We rank them as one of the <a href="https://www.tomsguide.com/best-picks/best-skechers-shoes-in-year">best Skechers</a> you can buy.<a class="view-deal button" href="https://www.amazon.com/Skechers-Mens-Walk-Athletic-Walking/dp/B0F1Z7M7PT/" target="_blank" rel="nofollow" data-dimension112="913137e4-cec8-11f1-9015-69214f380e55" data-action="Deal Block" data-label="Go Walk Max (Men's)" data-dimension48="Go Walk Max (Men's)" data-dimension25="$48">View Deal</a></p></div><div class="product"><a data-dimension112="91313852-cec8-11f1-a518-7b3161f6fc33" data-action="Deal Block" data-label="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension48="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension25="$49" href="https://www.amazon.com/Skechers-Dighton-Black-Synthetic-Leather/dp/B01LY3WLXS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:50.50%;"><img id="ui9u7nTTsuRfPaNGRJ3e8g" name="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ui9u7nTTsuRfPaNGRJ3e8g-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="351" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Dighton-Black-Synthetic-Leather/dp/B01LY3WLXS" target="_blank" rel="nofollow" data-dimension112="91313852-cec8-11f1-a518-7b3161f6fc33" data-action="Deal Block" data-label="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension48="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension25="$49">Dighton Athletic Work Slip Resistant Food Service Shoe (Men's): was $65 now $49</a></strong><br>These Skechers have the look of a pair of smart leather shoes, but are durable, slip-resistant, and feature super-soft memory foam cushioning. They're built for long work days when you can't get off your feet, and will keep you feeling comfortable for hours.<a class="view-deal button" href="https://www.amazon.com/Skechers-Dighton-Black-Synthetic-Leather/dp/B01LY3WLXS" target="_blank" rel="nofollow" data-dimension112="91313852-cec8-11f1-a518-7b3161f6fc33" data-action="Deal Block" data-label="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension48="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="9131391a-cec8-11f1-b570-a3feb6fe85af" data-action="Deal Block" data-label="Summits Key Pace Slip-ins (Men's)" data-dimension48="Summits Key Pace Slip-ins (Men's)" data-dimension25="$56" href="https://www.amazon.com/Skechers-Summits-Hands-Slip-Loafer/dp/B0H2K13WJL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1143px;"><p class="vanilla-image-block" style="padding-top:60.80%;"><img id="d83wo5d5cEeEp8tWjiqKrC" name="716ignpBYCL._AC_SY695_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/d83wo5d5cEeEp8tWjiqKrC-1920-80.jpg" mos="" align="middle" fullscreen="" width="1143" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Summits-Hands-Slip-Loafer/dp/B0H2K13WJL" target="_blank" rel="nofollow" data-dimension112="9131391a-cec8-11f1-b570-a3feb6fe85af" data-action="Deal Block" data-label="Summits Key Pace Slip-ins (Men's)" data-dimension48="Summits Key Pace Slip-ins (Men's)" data-dimension25="$56">Summits Key Pace Slip-ins (Men's): was $72 now $56</a></strong><br>Another super-popular shoe, these men's slip-in sneakers have elastic stretch laces to save you from bending to tie your shoes. With a navy design that goes with everything, these are a seriously comfortable pair of sneakers at a great price. <a class="view-deal button" href="https://www.amazon.com/Skechers-Summits-Hands-Slip-Loafer/dp/B0H2K13WJL" target="_blank" rel="nofollow" data-dimension112="9131391a-cec8-11f1-b570-a3feb6fe85af" data-action="Deal Block" data-label="Summits Key Pace Slip-ins (Men's)" data-dimension48="Summits Key Pace Slip-ins (Men's)" data-dimension25="$56">View Deal</a></p></div><div class="product"><a data-dimension112="913138b6-cec8-11f1-ae7e-3910357b1187" data-action="Deal Block" data-label="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension48="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension25="$57" href="https://www.amazon.com/Skechers-Mens-Walk-Flex-Hands-Sneaker/dp/B0CFN8VR99" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:54.68%;"><img id="DsBvJExJKzNCdDFDnDXn3T" name="71y3Wpz-YFL._AC_SX695_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DsBvJExJKzNCdDFDnDXn3T-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="380" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Mens-Walk-Flex-Hands-Sneaker/dp/B0CFN8VR99" target="_blank" rel="nofollow" data-dimension112="913138b6-cec8-11f1-ae7e-3910357b1187" data-action="Deal Block" data-label="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension48="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension25="$57">Slip-Ins Go Walk Flex Hands Up Sneaker: was $84 now $57</a></strong><br>A comfortable, reliable shoe, the Skechers Go Walk Flex Hands Up are now on sale starting from just $57. These come in a range of muted shades, meaning they're easy to pair with a range of outfits, and have Ultra Go cushioning to keep you light on your feet. Make sure to add a pair to your basket! <a class="view-deal button" href="https://www.amazon.com/Skechers-Mens-Walk-Flex-Hands-Sneaker/dp/B0CFN8VR99" target="_blank" rel="nofollow" data-dimension112="913138b6-cec8-11f1-ae7e-3910357b1187" data-action="Deal Block" data-label="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension48="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension25="$57">View Deal</a></p></div><div class="product"><a data-dimension112="c1b22c2c-cecb-11f1-ac8a-971b768153c7" data-action="Deal Block" data-label="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension48="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension25="$81" href="https://www.amazon.com/Skechers-Cushioning-Slip-Ins-Sneaker-Charcoal/dp/B0GY6FY26K" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:71.94%;"><img id="encAr2otkFXcfAuc4YmDdD" name="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/encAr2otkFXcfAuc4YmDdD-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Cushioning-Slip-Ins-Sneaker-Charcoal/dp/B0GY6FY26K" target="_blank" rel="nofollow" data-dimension112="c1b22c2c-cecb-11f1-ac8a-971b768153c7" data-action="Deal Block" data-label="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension48="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension25="$81">Go Walk Max Cushioning Hyper Burst Zoltar (Men's): was $94 now $81</a></strong><br>These Skechers are simple, reliable and easy to style — but also provide tons of cushioning and energy to your walks. You also get a Goga Mat insole that keep the shoes breathable and lightweight.<a class="view-deal button" href="https://www.amazon.com/Skechers-Cushioning-Slip-Ins-Sneaker-Charcoal/dp/B0GY6FY26K" target="_blank" rel="nofollow" data-dimension112="c1b22c2c-cecb-11f1-ac8a-971b768153c7" data-action="Deal Block" data-label="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension48="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension25="$81">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/skechers-walking-shoes-are-up-to-61-percent-off-21-best-deals-on-sneakers-slip-ins-and-fall-boots</link>
                                                                            <description>
                            <![CDATA[ Amazon is offering huge discounts on Skechers! Check out the biggest savings you can shop this month. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">A42A42NSLXWmmyfv3MbiqT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/dTR2fSKAShqNMLJJi6w5GH-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 10:50:00 +0000</pubDate>                                                                                                                                <updated>Tue, 27 Oct 2026 12:47:06 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></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-320-70.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/dTR2fSKAShqNMLJJi6w5GH-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Skechers Aero Razor running shoes]]></media:description>                                                            <media:text><![CDATA[Skechers Aero Razor running shoes]]></media:text>
                                <media:title type="plain"><![CDATA[Skechers Aero Razor running shoes]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/dTR2fSKAShqNMLJJi6w5GH-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Black Friday excitement is building! If you just can't wait, there's no need to worry — <a href="https://www.amazon.com/stores/page/37AAEB46-A955-4D92-957D-28A4B4B3FDE2" target="_blank" rel="nofollow">Amazon is offering huge price drops on Skechers</a> right now. Whether you're on the hunt for sneakers or cozy fall boots, I'm sharing all the best styles.</p><p>The shoe I'm most interested in right now is the <a href="https://www.amazon.com/Skechers-Sport-Womens-Slip-INS-Sneaker/dp/B0F3RMY5YF" target="_blank" rel="nofollow">Skechers Contour Foam Cozy Fit on sale from $50</a>. Not only are they the perfect comfy fall sneakers, they have one of the best color selections of any pair of Skechers you can buy right now.</p><p><strong>Note: </strong>Prices vary depending on the size and color you choose. Check out any different color options available in your size to find the best deals. For more, check out our <a href="https://www.tomsguide.com/coupons/amazon.com">Amazon promo codes</a>.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong></strong><a href="https://www.amazon.com/stores/page/37AAEB46-A955-4D92-957D-28A4B4B3FDE2" target="_blank" rel="nofollow"><strong>shop all Skechers deals at Amazon</strong></a></li><li><strong>Virtue Stunner (Women's): </strong><a href="https://www.amazon.com/Skechers-Womens-Sport-Active-Virtue/dp/B0FNCB7C3X/" target="_blank" rel="nofollow"><strong>was $58 now from $25</strong></a></li><li><strong>Go Walk Arch Fit N-Joy Nate (Men's): </strong><a href="https://www.amazon.com/Skechers-Mens-N-Joy-Sneaker-White/dp/B0FDMS3F5K" target="_blank" rel="nofollow"><strong>was $78 now from $38</strong></a></li><li><strong>Keepsakes Cozy - Cozy Cascade (Women's): </strong><a href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Chestnut/dp/B0GPD3LSTC" target="_blank" rel="nofollow"><strong>was $55 now from $41</strong></a></li><li><strong>Summits Louvin Slip-Ins (Men's): </strong><a href="https://www.amazon.com/Skechers-Summits-Louvin-Loafer-Black/dp/B0864TFM51" target="_blank" rel="nofollow"><strong>was $70 now from $45</strong></a></li><li><strong>Summits Key Pace Slip-ins (Men's): </strong><a href="https://www.amazon.com/Skechers-Summits-Hands-Slip-Loafer/dp/B0H2K13WJL" target="_blank" rel="nofollow"><strong>was $72 now from $56</strong></a></li><li><strong>Refine 2.0 Nora (Women's): </strong><a href="https://www.amazon.com/Skechers-Womens-Sport-Active-Refine/dp/B0G1PK31X7" target="_blank" rel="nofollow"><strong>was $84 now from $57</strong></a></li><li><strong>Segment Rilar (Men's): </strong><a href="https://www.amazon.com/Skechers-Segment-Rilar-Oxford-Brown/dp/B00I1JPY76" target="_blank" rel="nofollow"><strong>was $95 now from $59</strong></a></li><li><strong>Go Walk Max Cushioning Hyper Burst Zoltar (Men's): </strong><a href="https://www.amazon.com/Skechers-Cushioning-Slip-Ins-Sneaker-Charcoal/dp/B0GY6FY26K" target="_blank" rel="nofollow"><strong>was $94 now from $81</strong></a></li><li><strong>Aero Razor Running Shoes (Women's): </strong><a href="https://www.amazon.com/Skechers-Womens-Razor-Turquoise-Medium/dp/B0GVPVGG8C" target="_blank" rel="nofollow"><strong>was $140 now from $91</strong></a></li></ul><h3 class="article-body__section" id="section-skechers-deals-women-s"><span>Skechers deals (Women's)</span></h3><div class="product"><a data-dimension112="c1b22920-cecb-11f1-9f29-c55ce8bef84a" data-action="Deal Block" data-label="Virtue Stunner (Women's)" data-dimension48="Virtue Stunner (Women's)" data-dimension25="$25" href="https://www.amazon.com/Skechers-Womens-Sport-Active-Virtue/dp/B0FNC7ZZD1/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:64.32%;"><img id="fuQGoHerZPQAPL7bem8Pic" name="Virtue Stunner (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/fuQGoHerZPQAPL7bem8Pic-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="447" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Sport-Active-Virtue/dp/B0FNC7ZZD1/" target="_blank" rel="nofollow" data-dimension112="c1b22920-cecb-11f1-9f29-c55ce8bef84a" data-action="Deal Block" data-label="Virtue Stunner (Women's)" data-dimension48="Virtue Stunner (Women's)" data-dimension25="$25">Virtue Stunner (Women's): was $59 now $25</a></strong><br>This is another hefty Skechers discount that you'll have to act fast to grab, if they're available in your size. Currently on 57% off in Grey and 50% off in Natural, these super-simple, super-comfortable shoes have a soft knit upper and air-cooled memory foam insoles.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Sport-Active-Virtue/dp/B0FNC7ZZD1/" target="_blank" rel="nofollow" data-dimension112="c1b22920-cecb-11f1-9f29-c55ce8bef84a" data-action="Deal Block" data-label="Virtue Stunner (Women's)" data-dimension48="Virtue Stunner (Women's)" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="913130c8-cec8-11f1-922c-ad116ac9d3cd" data-action="Deal Block" data-label="Refine 2.0 Nora (Women's)" data-dimension48="Refine 2.0 Nora (Women's)" data-dimension25="$35" href="https://www.amazon.com/Skechers-Womens-Sport-Active-Refine/dp/B0G1P5DSL6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:66.91%;"><img id="XtYccaXnTY5XF946soUYSE" name="Refine 2.0 Nora (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XtYccaXnTY5XF946soUYSE-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="465" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Sport-Active-Refine/dp/B0G1P5DSL6" target="_blank" rel="nofollow" data-dimension112="913130c8-cec8-11f1-922c-ad116ac9d3cd" data-action="Deal Block" data-label="Refine 2.0 Nora (Women's)" data-dimension48="Refine 2.0 Nora (Women's)" data-dimension25="$35">Refine 2.0 Nora (Women's): was $84 now $35</a></strong><br>These Skechers have seen an impressive 58% discount when you check to apply the coupon on Amazon's page. Incredibly easy to wear, they feature a stretch knit upper, arch-fit insoles and are machine washable. <a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Sport-Active-Refine/dp/B0G1P5DSL6" target="_blank" rel="nofollow" data-dimension112="913130c8-cec8-11f1-922c-ad116ac9d3cd" data-action="Deal Block" data-label="Refine 2.0 Nora (Women's)" data-dimension48="Refine 2.0 Nora (Women's)" data-dimension25="$35">View Deal</a></p></div><div class="product"><a data-dimension112="91313136-cec8-11f1-8ab9-7b04dd6482f5" data-action="Deal Block" data-label="Bobs Keepsakes Lite Slipper (Women's)" data-dimension48="Bobs Keepsakes Lite Slipper (Women's)" data-dimension25="$39" href="https://www.amazon.com/Skechers-Keepsakes-Lite-Cozy-Slipper-Chestnut/dp/B0BX22T5PF/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1181px;"><p class="vanilla-image-block" style="padding-top:58.85%;"><img id="ut3KQ3LGhZKe4rhieo9nsK" name="719iDVut31L._AC_SY695" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ut3KQ3LGhZKe4rhieo9nsK-1920-80.png" mos="" align="middle" fullscreen="" width="1181" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Keepsakes-Lite-Cozy-Slipper-Chestnut/dp/B0BX22T5PF/" target="_blank" rel="nofollow" data-dimension112="91313136-cec8-11f1-8ab9-7b04dd6482f5" data-action="Deal Block" data-label="Bobs Keepsakes Lite Slipper (Women's)" data-dimension48="Bobs Keepsakes Lite Slipper (Women's)" data-dimension25="$39">Bobs Keepsakes Lite Slipper (Women's): was $51 now $39</a></strong><br>Get yourself prepared for winter extra early with these cozy, lined Skechers slippers. With memory-foam insoles, faux fur trim and traction outer sole, these snug slippers will keep you warm, no matter where you wear them.  <a class="view-deal button" href="https://www.amazon.com/Skechers-Keepsakes-Lite-Cozy-Slipper-Chestnut/dp/B0BX22T5PF/" target="_blank" rel="nofollow" data-dimension112="91313136-cec8-11f1-8ab9-7b04dd6482f5" data-action="Deal Block" data-label="Bobs Keepsakes Lite Slipper (Women's)" data-dimension48="Bobs Keepsakes Lite Slipper (Women's)" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="c1b229ac-cecb-11f1-a96f-d55b9dd5dd35" data-action="Deal Block" data-label="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension48="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension25="$41" href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Chestnut/dp/B0GPMGKPT8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:55.68%;"><img id="hYSZfU9nU4nzZJ6fSLnpeZ" name="Keepsakes Cozy - Cozy Cascade (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hYSZfU9nU4nzZJ6fSLnpeZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="387" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Chestnut/dp/B0GPMGKPT8" target="_blank" rel="nofollow" data-dimension112="c1b229ac-cecb-11f1-a96f-d55b9dd5dd35" data-action="Deal Block" data-label="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension48="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension25="$41">Keepsakes Cozy - Cozy Cascade (Women's): was $55 now $41</a></strong><br>You can't have enough cozy pairs of slippers, especially this time of year. These Skechers stand out for their pretty embroidered design on the cuff, and have a soft fuzzy lining — plus Skechers memory foam.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Chestnut/dp/B0GPMGKPT8" target="_blank" rel="nofollow" data-dimension112="c1b229ac-cecb-11f1-a96f-d55b9dd5dd35" data-action="Deal Block" data-label="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension48="Keepsakes Cozy - Cozy Cascade (Women's)" data-dimension25="$41">View Deal</a></p></div><div class="product"><a data-dimension112="91313352-cec8-11f1-b43d-51f87ac772f8" data-action="Deal Block" data-label="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension48="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension25="$50" href="https://www.amazon.com/Skechers-Sport-Womens-Slip-INS-Sneaker/dp/B0F3RMY5YF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:66.91%;"><img id="Upd6k99BCo75ngNtEoAdxJ" name="Contour Foam Cozy Fit Slip-Ins (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Upd6k99BCo75ngNtEoAdxJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="465" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Sport-Womens-Slip-INS-Sneaker/dp/B0F3RMY5YF" target="_blank" rel="nofollow" data-dimension112="91313352-cec8-11f1-b43d-51f87ac772f8" data-action="Deal Block" data-label="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension48="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension25="$50">Contour Foam Cozy Fit Slip-Ins (Women's): was $89 now $50</a></strong><br>I love the look of these Skechers, because of the two-tone design — you can get them in white paired with a bunch of other accent colors. As well as looking great, they have a Contour Foam midsole that adapts to your foot's shape, making them some of the comfiest-feeling shoes around.<a class="view-deal button" href="https://www.amazon.com/Skechers-Sport-Womens-Slip-INS-Sneaker/dp/B0F3RMY5YF" target="_blank" rel="nofollow" data-dimension112="91313352-cec8-11f1-b43d-51f87ac772f8" data-action="Deal Block" data-label="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension48="Contour Foam Cozy Fit Slip-Ins (Women's)" data-dimension25="$50">View Deal</a></p></div><div class="product"><a data-dimension112="c1b22a24-cecb-11f1-818f-fffaa8c68890" data-action="Deal Block" data-label="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension48="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension25="$52" href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Slip-Ins/dp/B0GZJHW6DJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:72.23%;"><img id="C6vf8hr9LiPZZL7EueMWZH" name="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/C6vf8hr9LiPZZL7EueMWZH-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="502" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Slip-Ins/dp/B0GZJHW6DJ" target="_blank" rel="nofollow" data-dimension112="c1b22a24-cecb-11f1-818f-fffaa8c68890" data-action="Deal Block" data-label="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension48="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension25="$52">Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's): was $75 now $52</a></strong><br>Double the cozy! Skechers seems to have taken some style cues from Ugg here with a slip-in, wool-lined boot. The heart-shaped charm on the side is a nice touch.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-KEEPSAKES-COZY-Slip-Ins/dp/B0GZJHW6DJ" target="_blank" rel="nofollow" data-dimension112="c1b22a24-cecb-11f1-818f-fffaa8c68890" data-action="Deal Block" data-label="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension48="Keepsakes Cozy Cozy Mini Slip-Ins Boot (Women's)" data-dimension25="$52">View Deal</a></p></div><div class="product"><a data-dimension112="91313488-cec8-11f1-969e-15c257f47827" data-action="Deal Block" data-label="Uno - Champagne & Roses (Women's)" data-dimension48="Uno - Champagne & Roses (Women's)" data-dimension25="$53" href="https://www.amazon.com/Skechers-Street-Womens-UNO-Champagne/dp/B0FN6Y36CP" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:73.09%;"><img id="k9WB77eyZDmMW3XwNPTVym" name="Uno - Champagne & Roses (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/k9WB77eyZDmMW3XwNPTVym-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="508" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Street-Womens-UNO-Champagne/dp/B0FN6Y36CP" target="_blank" rel="nofollow" data-dimension112="91313488-cec8-11f1-969e-15c257f47827" data-action="Deal Block" data-label="Uno - Champagne & Roses (Women's)" data-dimension48="Uno - Champagne & Roses (Women's)" data-dimension25="$53">Uno - Champagne & Roses (Women's): was $83 now $53</a></strong><br>Need a practical gift? These shoes are perfect for the job since they look super stylish and are extremely comfortable. The rose petal decor further elevates the look.<a class="view-deal button" href="https://www.amazon.com/Skechers-Street-Womens-UNO-Champagne/dp/B0FN6Y36CP" target="_blank" rel="nofollow" data-dimension112="91313488-cec8-11f1-969e-15c257f47827" data-action="Deal Block" data-label="Uno - Champagne & Roses (Women's)" data-dimension48="Uno - Champagne & Roses (Women's)" data-dimension25="$53">View Deal</a></p></div><div class="product"><a data-dimension112="c1b22a9c-cecb-11f1-a4d1-d3fbd5fd194c" data-action="Deal Block" data-label="Glide-Step Pro Soft Mirage (Women's)" data-dimension48="Glide-Step Pro Soft Mirage (Women's)" data-dimension25="$61" href="https://www.amazon.com/Skechers-Womens-Glide-Step-Soft-Mirage/dp/B0HMJWHM8D" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:70.36%;"><img id="gENhFcxWPfR5eGzmaeeMrZ" name="Glide-Step Pro Soft Mirage (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gENhFcxWPfR5eGzmaeeMrZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="489" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Glide-Step-Soft-Mirage/dp/B0HMJWHM8D" target="_blank" rel="nofollow" data-dimension112="c1b22a9c-cecb-11f1-a4d1-d3fbd5fd194c" data-action="Deal Block" data-label="Glide-Step Pro Soft Mirage (Women's)" data-dimension48="Glide-Step Pro Soft Mirage (Women's)" data-dimension25="$61">Glide-Step Pro Soft Mirage (Women's): was $78 now $61</a></strong><br>The Skechers Glide-Step offer improved movement and momentum, making every step feel lighter and more energetic. These Soft Mirage sneakers deliver all that as well as a sleek, understated style.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Glide-Step-Soft-Mirage/dp/B0HMJWHM8D" target="_blank" rel="nofollow" data-dimension112="c1b22a9c-cecb-11f1-a4d1-d3fbd5fd194c" data-action="Deal Block" data-label="Glide-Step Pro Soft Mirage (Women's)" data-dimension48="Glide-Step Pro Soft Mirage (Women's)" data-dimension25="$61">View Deal</a></p></div><div class="product star-deal"><a data-dimension112="91313424-cec8-11f1-b781-a32374e2b11a" data-action="Star Deal Block" data-label="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension48="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension25="$64" href="https://www.amazon.com/Skechers-Womens-Elevate-Sneaker-Black/dp/B0CNP8Z6FM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:52.81%;"><img id="vCHwenty55qSsiSaaAhmLh" name="Go Run Elevate 2.0 Sneaker (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vCHwenty55qSsiSaaAhmLh-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="367" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Elevate-Sneaker-Black/dp/B0CNP8Z6FM" target="_blank" rel="nofollow" data-dimension112="91313424-cec8-11f1-b781-a32374e2b11a" data-action="Star Deal Block" data-label="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension48="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension25="$64">Go Run Elevate 2.0 Sneaker (Women's): was $85 now $64</a></strong><br>If you're hitting the road, these Skechers are an excellent choice. Our <a href="https://www.tomsguide.com/wellness/running/skechers-go-run-elevate-2-review">Skechers Go Run Elevate 2.0 review</a> said that these are great for beginner runners thanks to their affordable price point, bouncy and propulsive soles and breathable design. These sneakers were originally priced at $85, but now you can get them for $64.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Elevate-Sneaker-Black/dp/B0CNP8Z6FM" target="_blank" rel="nofollow" data-dimension112="91313424-cec8-11f1-b781-a32374e2b11a" data-action="Star Deal Block" data-label="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension48="Go Run Elevate 2.0 Sneaker (Women's)" data-dimension25="$64">View Deal</a></p></div><div class="product"><a data-dimension112="c1b22b00-cecb-11f1-9b5f-dbddd6d2807b" data-action="Deal Block" data-label="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension48="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension25="$80" href="https://www.amazon.com/Skechers-Womens-EASY-GOING-Chocolate/dp/B0GPD6P9F9" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:77.99%;"><img id="6SS6HJuer92iBVzNnRbUbU" name="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6SS6HJuer92iBVzNnRbUbU-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="542" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-EASY-GOING-Chocolate/dp/B0GPD6P9F9" target="_blank" rel="nofollow" data-dimension112="c1b22b00-cecb-11f1-9b5f-dbddd6d2807b" data-action="Deal Block" data-label="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension48="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension25="$80">Easy Going - Warm Occasion - Hands Free Slip-ins (Women's): was $95 now $80</a></strong><br>These cozy Skechers boots are basically an essential this season. They slip on easily and bring both cushioning and warmth that you won't want to go without on your fall walks.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-EASY-GOING-Chocolate/dp/B0GPD6P9F9" target="_blank" rel="nofollow" data-dimension112="c1b22b00-cecb-11f1-9b5f-dbddd6d2807b" data-action="Deal Block" data-label="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension48="Easy Going - Warm Occasion - Hands Free Slip-ins (Women's)" data-dimension25="$80">View Deal</a></p></div><div class="product"><a data-dimension112="913134f6-cec8-11f1-8420-c503bd559b16" data-action="Deal Block" data-label="Max Cushioning Elite 2.0 (Women's)" data-dimension48="Max Cushioning Elite 2.0 (Women's)" data-dimension25="$84" href="https://www.amazon.com/Skechers-Cushioning-Elite-Natural-Pink/dp/B0BZ93LKDQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:63.60%;"><img id="DDNtxm7NqaHbqokBvRhcxe" name="Skechers Max Cushioning Elite 2.0" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DDNtxm7NqaHbqokBvRhcxe-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="442" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Cushioning-Elite-Natural-Pink/dp/B0BZ93LKDQ" target="_blank" rel="nofollow" data-dimension112="913134f6-cec8-11f1-8420-c503bd559b16" data-action="Deal Block" data-label="Max Cushioning Elite 2.0 (Women's)" data-dimension48="Max Cushioning Elite 2.0 (Women's)" data-dimension25="$84">Max Cushioning Elite 2.0 (Women's): was $100 now $84</a></strong><br>These are a pair of comfortable, max-cushioned shoes, best suited to easy miles and long runs. They are hailed as cheaper dupes for the <a href="https://www.tomsguide.com/reviews/hoka-clifton-9">Hoka Clifton 9</a> trainers, without the price tag. Best suited to beginners, or runners looking for a plush shoe to wear for easy miles and long walks, these are a decent option. Read our <a href="https://www.tomsguide.com/wellness/fitness/skechers-max-cushioning-elite-2-0-review">Skechers Max Cushioning Elite 2.0 review</a> for all the info.<a class="view-deal button" href="https://www.amazon.com/Skechers-Cushioning-Elite-Natural-Pink/dp/B0BZ93LKDQ" target="_blank" rel="nofollow" data-dimension112="913134f6-cec8-11f1-8420-c503bd559b16" data-action="Deal Block" data-label="Max Cushioning Elite 2.0 (Women's)" data-dimension48="Max Cushioning Elite 2.0 (Women's)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="9131362c-cec8-11f1-8251-7fa7af1c2d72" data-action="Deal Block" data-label="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension48="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension25="$85" href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Cushioning-Endeavour/dp/B0GY6J4H4G" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:59.57%;"><img id="gX8x3dDgKEF8A5TFTT62gg" name="Max Cushioning Endeavour Pace Rhythm (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gX8x3dDgKEF8A5TFTT62gg-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="414" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Cushioning-Endeavour/dp/B0GY6J4H4G" target="_blank" rel="nofollow" data-dimension112="9131362c-cec8-11f1-8251-7fa7af1c2d72" data-action="Deal Block" data-label="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension48="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension25="$85">Max Cushioning Endeavour Pace Rhythm (Women's): was $105 now $85</a></strong><br>Though they're on the expensive side of Skechers' offerings, these running shoes make a statement and offer tons of comfortable cushioning. The Goga Mat insole propels you forwards and the rocker shape helps your steps transition naturally.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Cushioning-Endeavour/dp/B0GY6J4H4G" target="_blank" rel="nofollow" data-dimension112="9131362c-cec8-11f1-8251-7fa7af1c2d72" data-action="Deal Block" data-label="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension48="Max Cushioning Endeavour Pace Rhythm (Women's)" data-dimension25="$85">View Deal</a></p></div><div class="product"><a data-dimension112="913135be-cec8-11f1-af62-7fe0a945fa4b" data-action="Deal Block" data-label="Aero Razor Running Shoes (Women's)" data-dimension48="Aero Razor Running Shoes (Women's)" data-dimension25="$91" href="https://www.amazon.com/Skechers-Womens-Razor-Turquoise-Medium/dp/B0GVPVGG8C" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:56.69%;"><img id="aqUWsueeM3Z3zz4bY64ro4" name="Aero Razor Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aqUWsueeM3Z3zz4bY64ro4-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="394" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Razor-Turquoise-Medium/dp/B0GVPVGG8C" target="_blank" rel="nofollow" data-dimension112="913135be-cec8-11f1-af62-7fe0a945fa4b" data-action="Deal Block" data-label="Aero Razor Running Shoes (Women's)" data-dimension48="Aero Razor Running Shoes (Women's)" data-dimension25="$91">Aero Razor Running Shoes (Women's): was $140 now $91</a></strong><br>We loved these shoes in our <a href="https://www.tomsguide.com/wellness/running/skechers-aero-razor-review">Skechers Aero Razor review</a>! Our testers said this is a great pair of lightweight shoes for runners who want to pick up speed. You'll find more cushioning elsewhere, but these running shoes bring a super energetic feel to every step you take.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Razor-Turquoise-Medium/dp/B0GVPVGG8C" target="_blank" rel="nofollow" data-dimension112="913135be-cec8-11f1-af62-7fe0a945fa4b" data-action="Deal Block" data-label="Aero Razor Running Shoes (Women's)" data-dimension48="Aero Razor Running Shoes (Women's)" data-dimension25="$91">View Deal</a></p></div><div class="product"><a data-dimension112="9131369a-cec8-11f1-b1eb-93110f318f78" data-action="Deal Block" data-label="Go Walk Workout Walker (Women's)" data-dimension48="Go Walk Workout Walker (Women's)" data-dimension25="$117" href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Workout-Walker/dp/B0GTRTRK9P" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:59.42%;"><img id="g6Fbk2tgHp3unLKa8Gkd3g" name="Go Walk Workout Walker (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/g6Fbk2tgHp3unLKa8Gkd3g-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="413" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Workout-Walker/dp/B0GTRTRK9P" target="_blank" rel="nofollow" data-dimension112="9131369a-cec8-11f1-b1eb-93110f318f78" data-action="Deal Block" data-label="Go Walk Workout Walker (Women's)" data-dimension48="Go Walk Workout Walker (Women's)" data-dimension25="$117">Go Walk Workout Walker (Women's): was $135 now $117</a></strong><br>One of the <a href="https://www.tomsguide.com/best-picks/best-skechers-shoes-in-year">best Skechers</a> we've tested, the <a href="https://www.tomsguide.com/reviews/skechers-go-walk-workout-walker">Skechers Go Walk Workout Walker</a>, has gotten a new look. I love the new color options — plus you get a slip-in fit, super-soft cushioning and air cooled memory foam on board.<a class="view-deal button" href="https://www.amazon.com/Skechers-Womens-Slip-Ins-Workout-Walker/dp/B0GTRTRK9P" target="_blank" rel="nofollow" data-dimension112="9131369a-cec8-11f1-b1eb-93110f318f78" data-action="Deal Block" data-label="Go Walk Workout Walker (Women's)" data-dimension48="Go Walk Workout Walker (Women's)" data-dimension25="$117">View Deal</a></p></div><h3 class="article-body__section" id="section-skechers-deals-men-s"><span>Skechers deals (Men's)</span></h3><div class="product"><a data-dimension112="c1b22b96-cecb-11f1-8713-1f477ba8fa0d" data-action="Deal Block" data-label="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension48="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension25="$38" href="https://www.amazon.com/Skechers-Mens-N-Joy-Sneaker-White/dp/B0FDMS3F5K" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:54.53%;"><img id="m29EB9wmTKU2Ur4NSbtm8K" name="Go Walk Arch Fit N-Joy Nate (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/m29EB9wmTKU2Ur4NSbtm8K-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="379" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Mens-N-Joy-Sneaker-White/dp/B0FDMS3F5K" target="_blank" rel="nofollow" data-dimension112="c1b22b96-cecb-11f1-8713-1f477ba8fa0d" data-action="Deal Block" data-label="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension48="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension25="$38">Go Walk Arch Fit N-Joy Nate (Men's): was $78 now $38</a></strong><br>Need some extra support? These Skechers Arch Fit sneakers bring all that and more. The removeable insole absorbs shock and the upper is breathable and stretchy. I also love the sporty look these offer.<a class="view-deal button" href="https://www.amazon.com/Skechers-Mens-N-Joy-Sneaker-White/dp/B0FDMS3F5K" target="_blank" rel="nofollow" data-dimension112="c1b22b96-cecb-11f1-8713-1f477ba8fa0d" data-action="Deal Block" data-label="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension48="Go Walk Arch Fit N-Joy Nate (Men's)" data-dimension25="$38">View Deal</a></p></div><div class="product"><a data-dimension112="91313776-cec8-11f1-b0e9-efbb7a440890" data-action="Deal Block" data-label="Summits Louvin Slip-Ins (Men's)" data-dimension48="Summits Louvin Slip-Ins (Men's)" data-dimension25="$45" href="https://www.amazon.com/Skechers-Summits-Louvin-Loafer-Black/dp/B0864TFM51" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:65.61%;"><img id="jjR9bFWMb8tELv4o24E6Xm" name="Summits Louvin Slip-Ins (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jjR9bFWMb8tELv4o24E6Xm-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="456" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Summits-Louvin-Loafer-Black/dp/B0864TFM51" target="_blank" rel="nofollow" data-dimension112="91313776-cec8-11f1-b0e9-efbb7a440890" data-action="Deal Block" data-label="Summits Louvin Slip-Ins (Men's)" data-dimension48="Summits Louvin Slip-Ins (Men's)" data-dimension25="$45">Summits Louvin Slip-Ins (Men's): was $70 now $45</a></strong><br>Designed for athletics and light training, these Skechers are extremely comfortable — and their slip-on design means you don't have to tie your laces. They fit securely, too, and have soft memory foam insoles.<a class="view-deal button" href="https://www.amazon.com/Skechers-Summits-Louvin-Loafer-Black/dp/B0864TFM51" target="_blank" rel="nofollow" data-dimension112="91313776-cec8-11f1-b0e9-efbb7a440890" data-action="Deal Block" data-label="Summits Louvin Slip-Ins (Men's)" data-dimension48="Summits Louvin Slip-Ins (Men's)" data-dimension25="$45">View Deal</a></p></div><div class="product"><a data-dimension112="913137e4-cec8-11f1-9015-69214f380e55" data-action="Deal Block" data-label="Go Walk Max (Men's)" data-dimension48="Go Walk Max (Men's)" data-dimension25="$48" href="https://www.amazon.com/Skechers-Mens-Walk-Athletic-Walking/dp/B0F1Z7M7PT/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1065px;"><p class="vanilla-image-block" style="padding-top:56.06%;"><img id="hsosGofDzupcYyTW7KQq5m" name="61gxvfQj7xL._AC_SY625_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hsosGofDzupcYyTW7KQq5m-1920-80.jpg" mos="" align="middle" fullscreen="" width="1065" height="597" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Mens-Walk-Athletic-Walking/dp/B0F1Z7M7PT/" target="_blank" rel="nofollow" data-dimension112="913137e4-cec8-11f1-9015-69214f380e55" data-action="Deal Block" data-label="Go Walk Max (Men's)" data-dimension48="Go Walk Max (Men's)" data-dimension25="$48">Go Walk Max (Men's): was $49 now $48</a></strong><br>The Skechers Go Walk Max slip-on sneakers feature a super supportive insole that uses Goga Max Technology with high-rebound cushioning, along with an extra-padded heel for comfort. We rank them as one of the <a href="https://www.tomsguide.com/best-picks/best-skechers-shoes-in-year">best Skechers</a> you can buy.<a class="view-deal button" href="https://www.amazon.com/Skechers-Mens-Walk-Athletic-Walking/dp/B0F1Z7M7PT/" target="_blank" rel="nofollow" data-dimension112="913137e4-cec8-11f1-9015-69214f380e55" data-action="Deal Block" data-label="Go Walk Max (Men's)" data-dimension48="Go Walk Max (Men's)" data-dimension25="$48">View Deal</a></p></div><div class="product"><a data-dimension112="91313852-cec8-11f1-a518-7b3161f6fc33" data-action="Deal Block" data-label="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension48="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension25="$49" href="https://www.amazon.com/Skechers-Dighton-Black-Synthetic-Leather/dp/B01LY3WLXS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:50.50%;"><img id="ui9u7nTTsuRfPaNGRJ3e8g" name="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ui9u7nTTsuRfPaNGRJ3e8g-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="351" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Dighton-Black-Synthetic-Leather/dp/B01LY3WLXS" target="_blank" rel="nofollow" data-dimension112="91313852-cec8-11f1-a518-7b3161f6fc33" data-action="Deal Block" data-label="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension48="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension25="$49">Dighton Athletic Work Slip Resistant Food Service Shoe (Men's): was $65 now $49</a></strong><br>These Skechers have the look of a pair of smart leather shoes, but are durable, slip-resistant, and feature super-soft memory foam cushioning. They're built for long work days when you can't get off your feet, and will keep you feeling comfortable for hours.<a class="view-deal button" href="https://www.amazon.com/Skechers-Dighton-Black-Synthetic-Leather/dp/B01LY3WLXS" target="_blank" rel="nofollow" data-dimension112="91313852-cec8-11f1-a518-7b3161f6fc33" data-action="Deal Block" data-label="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension48="Dighton Athletic Work Slip Resistant Food Service Shoe (Men's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="9131391a-cec8-11f1-b570-a3feb6fe85af" data-action="Deal Block" data-label="Summits Key Pace Slip-ins (Men's)" data-dimension48="Summits Key Pace Slip-ins (Men's)" data-dimension25="$56" href="https://www.amazon.com/Skechers-Summits-Hands-Slip-Loafer/dp/B0H2K13WJL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1143px;"><p class="vanilla-image-block" style="padding-top:60.80%;"><img id="d83wo5d5cEeEp8tWjiqKrC" name="716ignpBYCL._AC_SY695_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/d83wo5d5cEeEp8tWjiqKrC-1920-80.jpg" mos="" align="middle" fullscreen="" width="1143" height="695" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Summits-Hands-Slip-Loafer/dp/B0H2K13WJL" target="_blank" rel="nofollow" data-dimension112="9131391a-cec8-11f1-b570-a3feb6fe85af" data-action="Deal Block" data-label="Summits Key Pace Slip-ins (Men's)" data-dimension48="Summits Key Pace Slip-ins (Men's)" data-dimension25="$56">Summits Key Pace Slip-ins (Men's): was $72 now $56</a></strong><br>Another super-popular shoe, these men's slip-in sneakers have elastic stretch laces to save you from bending to tie your shoes. With a navy design that goes with everything, these are a seriously comfortable pair of sneakers at a great price. <a class="view-deal button" href="https://www.amazon.com/Skechers-Summits-Hands-Slip-Loafer/dp/B0H2K13WJL" target="_blank" rel="nofollow" data-dimension112="9131391a-cec8-11f1-b570-a3feb6fe85af" data-action="Deal Block" data-label="Summits Key Pace Slip-ins (Men's)" data-dimension48="Summits Key Pace Slip-ins (Men's)" data-dimension25="$56">View Deal</a></p></div><div class="product"><a data-dimension112="913138b6-cec8-11f1-ae7e-3910357b1187" data-action="Deal Block" data-label="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension48="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension25="$57" href="https://www.amazon.com/Skechers-Mens-Walk-Flex-Hands-Sneaker/dp/B0CFN8VR99" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:54.68%;"><img id="DsBvJExJKzNCdDFDnDXn3T" name="71y3Wpz-YFL._AC_SX695_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DsBvJExJKzNCdDFDnDXn3T-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="380" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Mens-Walk-Flex-Hands-Sneaker/dp/B0CFN8VR99" target="_blank" rel="nofollow" data-dimension112="913138b6-cec8-11f1-ae7e-3910357b1187" data-action="Deal Block" data-label="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension48="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension25="$57">Slip-Ins Go Walk Flex Hands Up Sneaker: was $84 now $57</a></strong><br>A comfortable, reliable shoe, the Skechers Go Walk Flex Hands Up are now on sale starting from just $57. These come in a range of muted shades, meaning they're easy to pair with a range of outfits, and have Ultra Go cushioning to keep you light on your feet. Make sure to add a pair to your basket! <a class="view-deal button" href="https://www.amazon.com/Skechers-Mens-Walk-Flex-Hands-Sneaker/dp/B0CFN8VR99" target="_blank" rel="nofollow" data-dimension112="913138b6-cec8-11f1-ae7e-3910357b1187" data-action="Deal Block" data-label="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension48="Slip-Ins Go Walk Flex Hands Up Sneaker" data-dimension25="$57">View Deal</a></p></div><div class="product"><a data-dimension112="c1b22c2c-cecb-11f1-ac8a-971b768153c7" data-action="Deal Block" data-label="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension48="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension25="$81" href="https://www.amazon.com/Skechers-Cushioning-Slip-Ins-Sneaker-Charcoal/dp/B0GY6FY26K" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:71.94%;"><img id="encAr2otkFXcfAuc4YmDdD" name="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/encAr2otkFXcfAuc4YmDdD-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Skechers-Cushioning-Slip-Ins-Sneaker-Charcoal/dp/B0GY6FY26K" target="_blank" rel="nofollow" data-dimension112="c1b22c2c-cecb-11f1-ac8a-971b768153c7" data-action="Deal Block" data-label="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension48="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension25="$81">Go Walk Max Cushioning Hyper Burst Zoltar (Men's): was $94 now $81</a></strong><br>These Skechers are simple, reliable and easy to style — but also provide tons of cushioning and energy to your walks. You also get a Goga Mat insole that keep the shoes breathable and lightweight.<a class="view-deal button" href="https://www.amazon.com/Skechers-Cushioning-Slip-Ins-Sneaker-Charcoal/dp/B0GY6FY26K" target="_blank" rel="nofollow" data-dimension112="c1b22c2c-cecb-11f1-ac8a-971b768153c7" data-action="Deal Block" data-label="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension48="Go Walk Max Cushioning Hyper Burst Zoltar (Men's)" data-dimension25="$81">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve been running on the WalkingPad G5i treadmill and its tri-fold design is perfect for small homes ]]></title>
                                                                                                <dc:content><![CDATA[ <div  class="fancy-box"><div class="fancy_box-title">WalkindPad G5i Specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Dimensions (unfolded): </strong>64.6 x 33.4 x 43.4 inches<br><strong>Dimensions (folded)</strong>: 45.7 x 33.4 x 10.2 inches<br><strong>Running surface: </strong>51.2 x 19.7 inches<br><strong>Weight: </strong>150lbs<br><strong>Max user weight: </strong>300lbs<br><strong>Motor: </strong>4.5 HP <br><strong>Max speed:</strong> 10 mph<br><strong>Max incline: </strong>18%<br><strong>Connectivity: </strong>Bluetooth</p></div></div><p>One of the biggest barriers to buying a home treadmill is space. The <a href="https://www.tomsguide.com/best-picks/best-treadmills">best treadmills</a> are not small, and finding room is tricky even if the machine folds down flat.</p><p>The Walking G5i treadmill doesn’t just fold down flat. It also folds in half, and ends up around the size of a large suitcase when it is in its folded position. It’s still heavy, but it’s much easier to maneuver and store when not in use than most treadmills.</p><p>Importantly, it’s also impressive when unfolded and actually in use. The top speed is low, especially given the high price, but the belt runs smoothly and the max incline setting is very high, so you can increase the intensity on your walks and runs.</p><p>It’s still a little underspecced for its price in my view, but the fully foldable design might make it worth the outlay for those short on space. If you have room, however, a treadmill like the <a href="https://www.tomsguide.com/wellness/running/urevo-cybermega-smart-treadmill-review">Urevo CyberMega</a> offers a higher top speed at a lower price.</p><h2 class="article-body__section" id="section-walkingpad-g5i-treadmill-review-price-and-availability"><span>WalkingPad G5i treadmill review: price and availability</span></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="ZggFHJN6qNtrFgCz85Aey4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/ZggFHJN6qNtrFgCz85Aey4-1920-80.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>The WalkingPad G5i treadmill costs $1,899 in the U.S. and £1,899 in the U.K., though it’s currently reduced to £1,599 in the latter and I’d expect fairly regular sales on the machine.</p><p>It’s an expensive machine, especially as for that kind of money you’d normally be looking at a gym-standard treadmill with a higher top speed and a larger design with a bigger running belt. </p><p>With the WalkingPad G5i you’re actually paying a premium for the smart folding design and its high max incline compared to other trifold models like the WalkingPad X218.</p><h2 class="article-body__section" id="section-walkingpad-g5i-treadmill-review-design"><span>WalkingPad G5i treadmill review: design</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/cshpMCgjF5Mn82U2hzoxx4-1920-80.jpg" alt="WalkingPad G5i Treadmill" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/M2pTNckbVeg2HFN7CAg4z4-1920-80.jpg" alt="WalkingPad G5i Treadmill" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/yicGCKGpAd5zH2xVwSmRH4-1920-80.jpg" alt="WalkingPad G5i Treadmill" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>The WalkingPad G5i arrives fully assembled, so you just need to open the box and unfold it to get started.</p><p>Folding the machine is simple to do using the foot lever, and once it’s fully assembled it feels remarkably sturdy — it didn’t feel any different to me during use than a treadmill that doesn’t fold in the middle of the belt.</p><p>When folded, it’s easier to lift and move around than treadmills that only fold flat or don’t fold at all, and you can stand it against a wall to save space, or slip it under a table.</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="JMeMWyS7wGqEUwHSkDdQx4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/JMeMWyS7wGqEUwHSkDdQx4-1920-80.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>The console has touch-sensitive buttons you can use to change the incline, pick a preset workout program, and quickly adjust to speed to one of three preset options. </p><p>There’s also a dial in the center you use to start and stop the treadmill and adjust the speed, which is done in 0.1 increments with each turn, so it can take a while to get up to speed at the start of a run.</p><p>On the top of the console is a phone or tablet holder that looks small, but was very effective in holding my iPad during runs. I worried that it would shake off, but it stayed firmly in place even when using the machine at high speed or incline settings.</p><h2 class="article-body__section" id="section-walkingpad-g5i-treadmill-review-performance"><span>WalkingPad G5i treadmill review: performance</span></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="8DZVATXf3MH3jcv8fvyry4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/8DZVATXf3MH3jcv8fvyry4-1920-80.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 ran once or twice a week on the WalkingPad G5i treadmill over several weeks of marathon training.</p><p>The top speed of 10mph is not fast enough for my workouts and for the price I’d expect a top speed of 12-12.5mph, which you’ll find on other treadmills for less, but it’s still a reasonable top speed for a foldable machine.</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="sENvst7pmCYanBAq4eyuc4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/sENvst7pmCYanBAq4eyuc4-1920-80.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 found that the WalkingPad G5i did run smoothly for long periods at its max speed as well. It feels sturdier than most folding models in this regard, and the belt is surprisingly spacious for a folding treadmill.</p><p>However, if I tried to change the incline when running at high speeds things did get shaky. Once the incline is set, the shaking settles down, but it takes a very long time for the machine to change the incline, which rises/lowers by one level at a time using the buttons on the console.</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="BMcah8oDoo2docq6rJq4z4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/BMcah8oDoo2docq6rJq4z4-1920-80.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>If you’re walking on the machine while changing the incline the shaking isn’t so noticeable, and very few people are going to be running on the WalkingPad G5i once it gets anywhere near its 18% max incline, because that is very steep indeed.</p><p>There are preset workouts you can pick using the P button on the console before you start, which are explained/previewed in the user manual, but it’s more convenient to set these workouts up and follow them using the partner KS Fit app.</p><h2 class="article-body__section" id="section-walkingpad-g5i-treadmill-review-app"><span>WalkingPad G5i treadmill review: app</span></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="kM9yc2dpBDRx93u5toMKz3" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/kM9yc2dpBDRx93u5toMKz3-1920-80.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>The partner app for the WalkingPad G5i is the KS Fit app, not the WalkingPad+ app, which I found constantly crashed and wouldn’t connect to the treadmill.</p><p>With the KS Fit app installed, things were much smoother. The app connects easily to the treadmill and maintains that connection, and you can use it to follow guided workouts and adjust the settings on the WalkingPad G5i during activities.</p><p>The app does stay in portrait mode even on an iPad though, which means the stats and info on show is a bit cramped.</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="srXqwhzpYVxuohGvi7zi54" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/srXqwhzpYVxuohGvi7zi54-1920-80.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>There are a lot of walking and running workouts in the app, but even though a ‘coach’ does appear on screen to run with you during them, they’re not an instructor and don’t speak to guide or motivate you in the session.</p><p>It’s not as helpful or engaging as the fully guided classes with instructors you get with Peloton or Echelon, but the sessions are a good option if you just need a bit of variety or prompting in what to do in your workouts.</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="8JE8tCkQkYBhonvBgzFqu3" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/8JE8tCkQkYBhonvBgzFqu3-1920-80.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>During testing I also tried to link the WalkingPad G5i with other apps like Zwift, but the connection never held. Fortunately I can link to Zwift on my <a href="https://www.tomsguide.com/wellness/smartwatches/coros-pace-4-pro-review">Coros Pace 4 Pro </a>running watch and use that to match my speed to the treadmill.</p><h2 class="article-body__section" id="section-should-you-buy-the-walkingpad-g5i-treadmill"><span>Should you buy the WalkingPad G5i treadmill?</span></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:2419px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="rWpAf4XXyaABTjvrtanqtk" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/v2/w:1920,t:0,l:0,cw:2419,ch:1361,q:80/rWpAf4XXyaABTjvrtanqtk.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>The WalkingPad G5i offers something special in combining its tri-fold design with a very high max incline setting, which makes it great for people short on space who love doing intense walking workouts in particular.</p><p>It’s also a capable option for runners, though if you’re not worried about incline then the X Series models from WalkingPad offer the tri-fold design and higher max speeds at a lower price.</p><p>If you have room for a machine that only folds flat, the <a href="https://www.tomsguide.com/wellness/running/urevo-cybermega-smart-treadmill-review">Urevo CyberMega</a> impressed me in testing with its high top speed and powerful motor, and it costs $999.</p><p>I’d also consider looking at a <a href="https://www.tomsguide.com/wellness/fitness/peloton-finally-releases-a-treadmill-that-i-can-sorta-afford-and-it-sorta-folds-too">Peloton</a> or Echelon treadmill instead if you prefer to do instructor-led classes — the <a href="https://www.tomsguide.com/wellness/running/this-folding-treadmill-is-a-space-saving-peloton-alternative-thats-only-worth-buying-if-youre-happy-to-pay-a-subscription">Echelon Stride-6s-10</a> is a good folding option, though more expensive than the WalkingPad G5i and you’ll also have to pay for a monthly subscription to unlock the classes.</p><p>The WalkingPad G5i did impress me in testing overall, but there are some better value alternatives out there if you don’t need its tri-fold/high incline combo.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/running/walkingpad-g5i-treadmill-review</link>
                                                                            <description>
                            <![CDATA[ The WalkingPad G5i treadmill might be the perfect home training option if you don’t have much space, but it’s underspecced for its high price. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5bN8fBmfKqPja25gAQMxSH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/zpkU92rBxhwLysHzUECFcP-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 10:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Running]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nick Harris-Fry ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/J5Jjp49GUVjLZEbjEkTex-320-70.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/zpkU92rBxhwLysHzUECFcP-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[WalkingPad G5i Treadmill]]></media:description>                                                            <media:text><![CDATA[WalkingPad G5i Treadmill]]></media:text>
                                <media:title type="plain"><![CDATA[WalkingPad G5i Treadmill]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/zpkU92rBxhwLysHzUECFcP-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div  class="fancy-box"><div class="fancy_box-title">WalkindPad G5i Specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Dimensions (unfolded): </strong>64.6 x 33.4 x 43.4 inches<br><strong>Dimensions (folded)</strong>: 45.7 x 33.4 x 10.2 inches<br><strong>Running surface: </strong>51.2 x 19.7 inches<br><strong>Weight: </strong>150lbs<br><strong>Max user weight: </strong>300lbs<br><strong>Motor: </strong>4.5 HP <br><strong>Max speed:</strong> 10 mph<br><strong>Max incline: </strong>18%<br><strong>Connectivity: </strong>Bluetooth</p></div></div><p>One of the biggest barriers to buying a home treadmill is space. The <a href="https://www.tomsguide.com/best-picks/best-treadmills">best treadmills</a> are not small, and finding room is tricky even if the machine folds down flat.</p><p>The Walking G5i treadmill doesn’t just fold down flat. It also folds in half, and ends up around the size of a large suitcase when it is in its folded position. It’s still heavy, but it’s much easier to maneuver and store when not in use than most treadmills.</p><p>Importantly, it’s also impressive when unfolded and actually in use. The top speed is low, especially given the high price, but the belt runs smoothly and the max incline setting is very high, so you can increase the intensity on your walks and runs.</p><p>It’s still a little underspecced for its price in my view, but the fully foldable design might make it worth the outlay for those short on space. If you have room, however, a treadmill like the <a href="https://www.tomsguide.com/wellness/running/urevo-cybermega-smart-treadmill-review">Urevo CyberMega</a> offers a higher top speed at a lower price.</p><h2 class="article-body__section" id="section-walkingpad-g5i-treadmill-review-price-and-availability"><span>WalkingPad G5i treadmill review: price and availability</span></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="ZggFHJN6qNtrFgCz85Aey4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/ZggFHJN6qNtrFgCz85Aey4-1920-80.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>The WalkingPad G5i treadmill costs $1,899 in the U.S. and £1,899 in the U.K., though it’s currently reduced to £1,599 in the latter and I’d expect fairly regular sales on the machine.</p><p>It’s an expensive machine, especially as for that kind of money you’d normally be looking at a gym-standard treadmill with a higher top speed and a larger design with a bigger running belt. </p><p>With the WalkingPad G5i you’re actually paying a premium for the smart folding design and its high max incline compared to other trifold models like the WalkingPad X218.</p><h2 class="article-body__section" id="section-walkingpad-g5i-treadmill-review-design"><span>WalkingPad G5i treadmill review: design</span></h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/cshpMCgjF5Mn82U2hzoxx4-1920-80.jpg" alt="WalkingPad G5i Treadmill" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/M2pTNckbVeg2HFN7CAg4z4-1920-80.jpg" alt="WalkingPad G5i Treadmill" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/yicGCKGpAd5zH2xVwSmRH4-1920-80.jpg" alt="WalkingPad G5i Treadmill" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>The WalkingPad G5i arrives fully assembled, so you just need to open the box and unfold it to get started.</p><p>Folding the machine is simple to do using the foot lever, and once it’s fully assembled it feels remarkably sturdy — it didn’t feel any different to me during use than a treadmill that doesn’t fold in the middle of the belt.</p><p>When folded, it’s easier to lift and move around than treadmills that only fold flat or don’t fold at all, and you can stand it against a wall to save space, or slip it under a table.</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="JMeMWyS7wGqEUwHSkDdQx4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/JMeMWyS7wGqEUwHSkDdQx4-1920-80.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>The console has touch-sensitive buttons you can use to change the incline, pick a preset workout program, and quickly adjust to speed to one of three preset options. </p><p>There’s also a dial in the center you use to start and stop the treadmill and adjust the speed, which is done in 0.1 increments with each turn, so it can take a while to get up to speed at the start of a run.</p><p>On the top of the console is a phone or tablet holder that looks small, but was very effective in holding my iPad during runs. I worried that it would shake off, but it stayed firmly in place even when using the machine at high speed or incline settings.</p><h2 class="article-body__section" id="section-walkingpad-g5i-treadmill-review-performance"><span>WalkingPad G5i treadmill review: performance</span></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="8DZVATXf3MH3jcv8fvyry4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/8DZVATXf3MH3jcv8fvyry4-1920-80.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 ran once or twice a week on the WalkingPad G5i treadmill over several weeks of marathon training.</p><p>The top speed of 10mph is not fast enough for my workouts and for the price I’d expect a top speed of 12-12.5mph, which you’ll find on other treadmills for less, but it’s still a reasonable top speed for a foldable machine.</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="sENvst7pmCYanBAq4eyuc4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/sENvst7pmCYanBAq4eyuc4-1920-80.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 found that the WalkingPad G5i did run smoothly for long periods at its max speed as well. It feels sturdier than most folding models in this regard, and the belt is surprisingly spacious for a folding treadmill.</p><p>However, if I tried to change the incline when running at high speeds things did get shaky. Once the incline is set, the shaking settles down, but it takes a very long time for the machine to change the incline, which rises/lowers by one level at a time using the buttons on the console.</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="BMcah8oDoo2docq6rJq4z4" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/BMcah8oDoo2docq6rJq4z4-1920-80.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>If you’re walking on the machine while changing the incline the shaking isn’t so noticeable, and very few people are going to be running on the WalkingPad G5i once it gets anywhere near its 18% max incline, because that is very steep indeed.</p><p>There are preset workouts you can pick using the P button on the console before you start, which are explained/previewed in the user manual, but it’s more convenient to set these workouts up and follow them using the partner KS Fit app.</p><h2 class="article-body__section" id="section-walkingpad-g5i-treadmill-review-app"><span>WalkingPad G5i treadmill review: app</span></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="kM9yc2dpBDRx93u5toMKz3" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/kM9yc2dpBDRx93u5toMKz3-1920-80.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>The partner app for the WalkingPad G5i is the KS Fit app, not the WalkingPad+ app, which I found constantly crashed and wouldn’t connect to the treadmill.</p><p>With the KS Fit app installed, things were much smoother. The app connects easily to the treadmill and maintains that connection, and you can use it to follow guided workouts and adjust the settings on the WalkingPad G5i during activities.</p><p>The app does stay in portrait mode even on an iPad though, which means the stats and info on show is a bit cramped.</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="srXqwhzpYVxuohGvi7zi54" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/srXqwhzpYVxuohGvi7zi54-1920-80.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>There are a lot of walking and running workouts in the app, but even though a ‘coach’ does appear on screen to run with you during them, they’re not an instructor and don’t speak to guide or motivate you in the session.</p><p>It’s not as helpful or engaging as the fully guided classes with instructors you get with Peloton or Echelon, but the sessions are a good option if you just need a bit of variety or prompting in what to do in your workouts.</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="8JE8tCkQkYBhonvBgzFqu3" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/8JE8tCkQkYBhonvBgzFqu3-1920-80.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>During testing I also tried to link the WalkingPad G5i with other apps like Zwift, but the connection never held. Fortunately I can link to Zwift on my <a href="https://www.tomsguide.com/wellness/smartwatches/coros-pace-4-pro-review">Coros Pace 4 Pro </a>running watch and use that to match my speed to the treadmill.</p><h2 class="article-body__section" id="section-should-you-buy-the-walkingpad-g5i-treadmill"><span>Should you buy the WalkingPad G5i treadmill?</span></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:2419px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="rWpAf4XXyaABTjvrtanqtk" name="WalkingPad G5i Treadmill" alt="WalkingPad G5i Treadmill" src="https://cdn.mos.cms.futurecdn.net/v2/w:1920,t:0,l:0,cw:2419,ch:1361,q:80/rWpAf4XXyaABTjvrtanqtk.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>The WalkingPad G5i offers something special in combining its tri-fold design with a very high max incline setting, which makes it great for people short on space who love doing intense walking workouts in particular.</p><p>It’s also a capable option for runners, though if you’re not worried about incline then the X Series models from WalkingPad offer the tri-fold design and higher max speeds at a lower price.</p><p>If you have room for a machine that only folds flat, the <a href="https://www.tomsguide.com/wellness/running/urevo-cybermega-smart-treadmill-review">Urevo CyberMega</a> impressed me in testing with its high top speed and powerful motor, and it costs $999.</p><p>I’d also consider looking at a <a href="https://www.tomsguide.com/wellness/fitness/peloton-finally-releases-a-treadmill-that-i-can-sorta-afford-and-it-sorta-folds-too">Peloton</a> or Echelon treadmill instead if you prefer to do instructor-led classes — the <a href="https://www.tomsguide.com/wellness/running/this-folding-treadmill-is-a-space-saving-peloton-alternative-thats-only-worth-buying-if-youre-happy-to-pay-a-subscription">Echelon Stride-6s-10</a> is a good folding option, though more expensive than the WalkingPad G5i and you’ll also have to pay for a monthly subscription to unlock the classes.</p><p>The WalkingPad G5i did impress me in testing overall, but there are some better value alternatives out there if you don’t need its tri-fold/high incline combo.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget deep sleep — REM sleep is key to longevity and this is the sleep tracking metric to pay attention to, experts say ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When you open your sleep tracker tomorrow morning, skip the <a href="https://www.tomsguide.com/wellness/sleep/i-hit-a-sleep-score-of-100-last-weekend-heres-everything-i-did-to-sleep-better">sleep score</a> and turn your attention to another number. A recent study has found time spent in <a href="https://www.tomsguide.com/wellness/sleep/how-to-get-more-rem-sleep"><strong>REM sleep</strong></a> is a vital metric for understanding your longevity and illness risk — and most sleep trackers measure it.</p><p>A 2026 survey published in <a href="https://journals.plos.org/plosmedicine/article?id=10.1371/journal.pmed.1005213" target="_blank"><em>PLOS Medicine</em></a><em> </em>analyzed data from over 95,000 people wearing a sleep trackers. The researchers linked increased amounts of Rapid Eye Movement (REM) sleep with a lower risk of 83 conditions, including heart failure and dementia. </p><p>You might overlook REM in favor of juicier metrics like deep sleep and <a href="https://www.tomsguide.com/wellness/sleep/why-do-i-keep-waking-up-at-3am">3 a.m. wake ups</a>, but this sleep stage is essential for your wellbeing. We asked sleep experts <a href="https://www.time4sleep.co.uk/pages/bed-size-guide" target="_blank">Dr. Hana Patel</a> and <a href="https://newwatersrecovery.com/contributor/hanul-bandari/" target="_blank">Dr. Hanul Bhandari</a>, what we need to know about REM sleep, including how to get more of it.</p><h3 class="article-body__section" id="section-what-is-rem-sleep-and-why-do-you-need-it"><span>What is REM sleep — and why do you need it?</span></h3><p>“REM sleep, (Rapid Eye Movement), is the fourth and final stage of sleep," explains Dr. Patel, NHS GP and resident sleep expert for <a href="https://www.time4sleep.co.uk/pages/bed-size-guide" target="_blank">Time4Sleep.</a> "While this stage tends to be best known for <a href="https://www.tomsguide.com/wellness/sleep/why-do-we-dream">vivid dreaming</a>, it’s also essential for brain development, <a href="https://www.tomsguide.com/wellness/sleep/sleep-and-learning">memory</a>, and emotional regulation." </p><p>"REM sleep is characterized by abundant rapid eye movements, high-frequency EEG signals similar to those during alert waking periods, and other polysomnographic indicators," explains <a href="https://newwatersrecovery.com/contributor/hanul-bandari/" target="_blank">Dr. Bhandari, MD</a>.</p><p>REM should account for 20-25% of your sleep, or around 90 to 120 minutes (assuming a seven hour total sleep time.) But REM sleep often gets cut short because of when it occurs in your <a href="https://www.tomsguide.com/wellness/sleep/sleep-cycles">sleep cycle</a>. </p><p>"The length of REM stages can last for different durations but the periods increase as the night progresses," explains Dr. Bhandari. "As the sleep progresses through the night, a greater fraction of each cycle is spent in REM sleep." <br><br>That means waking up early cuts down time in REM.</p><p>Dr. Patel warns this disruption is associated with a worse mood and can contribute to "<a href="https://www.tomsguide.com/features/how-to-get-a-good-nights-sleep-if-youre-stressed">chronic stress</a>, anxiety, and depression." </p><p>Dr. Bhandari also notes that <a href="https://jamanetwork.com/journals/jamaneurology/fullarticle/2767713" target="_blank">studies</a> have linked a lack of REM sleep to "higher mortality." However, he adds that increasing the amount of time spent in the REM stage isn't a simple fix for a longer life — your sleep is more complex than that.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-egK6Ke"></div>                            </div>                            <script src="https://kwizly.com/embed/egK6Ke.js" async></script><h3 class="article-body__section" id="section-how-to-find-rem-sleep-on-your-sleep-tracker"><span>How to find REM sleep on your sleep tracker</span></h3><p>Most of the <a href="https://www.tomsguide.com/wellness/sleep-tech/best-sleep-tracker">best sleep trackers</a> divide sleep into three key stages: light sleep (or <a href="https://www.tomsguide.com/wellness/sleep-tech/forget-about-core-sleep-on-your-apple-watch-this-is-the-sleep-metric-you-really-need-to-pay-attention-to">core sleep</a>), REM sleep, and <a href="https://www.tomsguide.com/wellness/sleep/how-much-deep-sleep-do-you-need">deep sleep</a>. How long you spent in each stage and overall sleep duration are typically combined to create your sleep score.</p><p>Dr. Patel explains that REM sleep is characterized by "increased brain activity, darting eye movements, limited muscle movement, and fluctuating heart and respiration rates." It's these metrics your sleep tracker observes and uses to determine when you're in that REM stage.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nNFy5fV8uM8aY4oZjwLmHT" name="sleep tracking oura, apple, google" alt="An example of sleep tracking from Oura (left), Apple (center) and Google (right)" src="https://cdn.mos.cms.futurecdn.net/nNFy5fV8uM8aY4oZjwLmHT-1920-80.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: Oura / Apple / Google)</span></figcaption></figure><p>You can typically see your REM sleep in two ways. First, as a graph, which shows when in the night REM sleep occurred. This helps you understand if you're waking up before the increased REM associated with the latter stages of sleep (and if your alarm is blaring you awake in REM stage.)</p><p>Second, you can view it as a duration, combining all the different moments of REM sleep during the night. It's an easy way to see if you racked up enough REM sleep, and to compare it to other sleep stages.</p><h3 class="article-body__section" id="section-how-to-get-more-rem-sleep"><span>How to get more REM 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HFFFvXT8qcdEPuEFTbVkJk" name="Sleep at night" alt="A woman lies sleeping soundly in a dark room" src="https://cdn.mos.cms.futurecdn.net/HFFFvXT8qcdEPuEFTbVkJk-1920-80.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>If your sleep tracker is putting your REM sleep in the red, it's time for a <a href="https://www.tomsguide.com/wellness/sleep/sleep-quality--matters-more-than-quantity-says-new-study">sleep quality</a> audit.</p><p>“To increase REM sleep, you’ll need to increase your overall sleep duration, explains Dr. Patel. "The NHS recommends that the average <a href="https://www.tomsguide.com/news/how-much-sleep-do-adults-need">adult needs seven to nine hours of sleep</a> every night."</p><p>"Start by protecting the latter part of the sleep period," adds Dr. Bhandari, "because REM sleep becomes more concentrated as the night progresses."</p><p>Both recommend practicing <a href="https://www.tomsguide.com/wellness/sleep/i-asked-the-experts-whats-the-number-one-rule-of-good-sleep-hygiene-and-they-all-said-the-same-thing">good sleep hygiene</a>, to help you stay asleep for longer and avoid the 3 a.m. wake ups that can cut your sleep cycles short.</p><ul><li><strong>"Keep regular waking times and bedtimes</strong>," says Dr. Patel. Dr. Bhandari explains this helps "promote a stronger <a href="https://www.tomsguide.com/wellness/sleep/circadian-rhythm">sleep-wake cycle</a>," which can increase your overall sleep duration.</li><li>"<strong>Try to work out exactly how much sleep you need</strong>," Dr. Patel recommends, "so you can sleep enough so as not to need an alarm clock to wake in the morning."</li><li>"<strong>Maintain a comfortable, quiet sleeping environment</strong> at the <a href="https://www.tomsguide.com/reference/the-best-temperature-for-sleeping">right temperature</a>," advises Dr. Patel. Our <a href="https://www.tomsguide.com/mattresses/best-mattress">best mattress</a> guide can help you get started.</li><li>"<strong>Avoid </strong><a href="https://www.tomsguide.com/wellness/sleep/how-long-does-caffeine-last"><strong>caffeine</strong></a><strong> in the afternoon</strong> and keep the amount low in the morning," says Dr. Patel. She also recommends cutting out <a href="https://www.tomsguide.com/features/when-should-you-stop-drinking-before-bed">alcohol before bed</a>.</li><li>"<strong>Practice psychological relaxation techniques</strong> prior to sleep," says Dr. Patel. <a href="https://www.tomsguide.com/wellness/sleep/sleep-meditation">Guided sleep meditations</a> are an accessible option.</li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep/forget-deep-sleep-rem-sleep-is-key-to-longevity-and-the-sleep-tracking-metric-to-pay-attention-to-experts-say</link>
                                                                            <description>
                            <![CDATA[ A recent study has found strong links between REM sleep and a risk of 83 diseases. Experts explain why you might be missing out on this vital sleep stage and how to get more of it. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Zojx4TDG3nSPzDWf3h9vJD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/bXTa6uznnwqoiu9VHxNWWP-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 09:14:25 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 10:07:26 +0000</updated>
                                                                                                                                            <category><![CDATA[Sleep]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ ruth.jones@futurenet.com (Ruth Jones) ]]></author>                    <dc:creator><![CDATA[ Ruth Jones ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/Cqbswyyro7aBYnvMKaoS6W-320-70.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/bXTa6uznnwqoiu9VHxNWWP-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The main image shows a woman sitting up in bed and stretching her arms above her head. In the bottom left is a close up of a phone showing sleep tracking data]]></media:description>                                                            <media:text><![CDATA[The main image shows a woman sitting up in bed and stretching her arms above her head. In the bottom left is a close up of a phone showing sleep tracking data]]></media:text>
                                <media:title type="plain"><![CDATA[The main image shows a woman sitting up in bed and stretching her arms above her head. In the bottom left is a close up of a phone showing sleep tracking data]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/bXTa6uznnwqoiu9VHxNWWP-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When you open your sleep tracker tomorrow morning, skip the <a href="https://www.tomsguide.com/wellness/sleep/i-hit-a-sleep-score-of-100-last-weekend-heres-everything-i-did-to-sleep-better">sleep score</a> and turn your attention to another number. A recent study has found time spent in <a href="https://www.tomsguide.com/wellness/sleep/how-to-get-more-rem-sleep"><strong>REM sleep</strong></a> is a vital metric for understanding your longevity and illness risk — and most sleep trackers measure it.</p><p>A 2026 survey published in <a href="https://journals.plos.org/plosmedicine/article?id=10.1371/journal.pmed.1005213" target="_blank"><em>PLOS Medicine</em></a><em> </em>analyzed data from over 95,000 people wearing a sleep trackers. The researchers linked increased amounts of Rapid Eye Movement (REM) sleep with a lower risk of 83 conditions, including heart failure and dementia. </p><p>You might overlook REM in favor of juicier metrics like deep sleep and <a href="https://www.tomsguide.com/wellness/sleep/why-do-i-keep-waking-up-at-3am">3 a.m. wake ups</a>, but this sleep stage is essential for your wellbeing. We asked sleep experts <a href="https://www.time4sleep.co.uk/pages/bed-size-guide" target="_blank">Dr. Hana Patel</a> and <a href="https://newwatersrecovery.com/contributor/hanul-bandari/" target="_blank">Dr. Hanul Bhandari</a>, what we need to know about REM sleep, including how to get more of it.</p><h3 class="article-body__section" id="section-what-is-rem-sleep-and-why-do-you-need-it"><span>What is REM sleep — and why do you need it?</span></h3><p>“REM sleep, (Rapid Eye Movement), is the fourth and final stage of sleep," explains Dr. Patel, NHS GP and resident sleep expert for <a href="https://www.time4sleep.co.uk/pages/bed-size-guide" target="_blank">Time4Sleep.</a> "While this stage tends to be best known for <a href="https://www.tomsguide.com/wellness/sleep/why-do-we-dream">vivid dreaming</a>, it’s also essential for brain development, <a href="https://www.tomsguide.com/wellness/sleep/sleep-and-learning">memory</a>, and emotional regulation." </p><p>"REM sleep is characterized by abundant rapid eye movements, high-frequency EEG signals similar to those during alert waking periods, and other polysomnographic indicators," explains <a href="https://newwatersrecovery.com/contributor/hanul-bandari/" target="_blank">Dr. Bhandari, MD</a>.</p><p>REM should account for 20-25% of your sleep, or around 90 to 120 minutes (assuming a seven hour total sleep time.) But REM sleep often gets cut short because of when it occurs in your <a href="https://www.tomsguide.com/wellness/sleep/sleep-cycles">sleep cycle</a>. </p><p>"The length of REM stages can last for different durations but the periods increase as the night progresses," explains Dr. Bhandari. "As the sleep progresses through the night, a greater fraction of each cycle is spent in REM sleep." <br><br>That means waking up early cuts down time in REM.</p><p>Dr. Patel warns this disruption is associated with a worse mood and can contribute to "<a href="https://www.tomsguide.com/features/how-to-get-a-good-nights-sleep-if-youre-stressed">chronic stress</a>, anxiety, and depression." </p><p>Dr. Bhandari also notes that <a href="https://jamanetwork.com/journals/jamaneurology/fullarticle/2767713" target="_blank">studies</a> have linked a lack of REM sleep to "higher mortality." However, he adds that increasing the amount of time spent in the REM stage isn't a simple fix for a longer life — your sleep is more complex than that.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-egK6Ke"></div>                            </div>                            <script src="https://kwizly.com/embed/egK6Ke.js" async></script><h3 class="article-body__section" id="section-how-to-find-rem-sleep-on-your-sleep-tracker"><span>How to find REM sleep on your sleep tracker</span></h3><p>Most of the <a href="https://www.tomsguide.com/wellness/sleep-tech/best-sleep-tracker">best sleep trackers</a> divide sleep into three key stages: light sleep (or <a href="https://www.tomsguide.com/wellness/sleep-tech/forget-about-core-sleep-on-your-apple-watch-this-is-the-sleep-metric-you-really-need-to-pay-attention-to">core sleep</a>), REM sleep, and <a href="https://www.tomsguide.com/wellness/sleep/how-much-deep-sleep-do-you-need">deep sleep</a>. How long you spent in each stage and overall sleep duration are typically combined to create your sleep score.</p><p>Dr. Patel explains that REM sleep is characterized by "increased brain activity, darting eye movements, limited muscle movement, and fluctuating heart and respiration rates." It's these metrics your sleep tracker observes and uses to determine when you're in that REM stage.</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nNFy5fV8uM8aY4oZjwLmHT" name="sleep tracking oura, apple, google" alt="An example of sleep tracking from Oura (left), Apple (center) and Google (right)" src="https://cdn.mos.cms.futurecdn.net/nNFy5fV8uM8aY4oZjwLmHT-1920-80.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: Oura / Apple / Google)</span></figcaption></figure><p>You can typically see your REM sleep in two ways. First, as a graph, which shows when in the night REM sleep occurred. This helps you understand if you're waking up before the increased REM associated with the latter stages of sleep (and if your alarm is blaring you awake in REM stage.)</p><p>Second, you can view it as a duration, combining all the different moments of REM sleep during the night. It's an easy way to see if you racked up enough REM sleep, and to compare it to other sleep stages.</p><h3 class="article-body__section" id="section-how-to-get-more-rem-sleep"><span>How to get more REM 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HFFFvXT8qcdEPuEFTbVkJk" name="Sleep at night" alt="A woman lies sleeping soundly in a dark room" src="https://cdn.mos.cms.futurecdn.net/HFFFvXT8qcdEPuEFTbVkJk-1920-80.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>If your sleep tracker is putting your REM sleep in the red, it's time for a <a href="https://www.tomsguide.com/wellness/sleep/sleep-quality--matters-more-than-quantity-says-new-study">sleep quality</a> audit.</p><p>“To increase REM sleep, you’ll need to increase your overall sleep duration, explains Dr. Patel. "The NHS recommends that the average <a href="https://www.tomsguide.com/news/how-much-sleep-do-adults-need">adult needs seven to nine hours of sleep</a> every night."</p><p>"Start by protecting the latter part of the sleep period," adds Dr. Bhandari, "because REM sleep becomes more concentrated as the night progresses."</p><p>Both recommend practicing <a href="https://www.tomsguide.com/wellness/sleep/i-asked-the-experts-whats-the-number-one-rule-of-good-sleep-hygiene-and-they-all-said-the-same-thing">good sleep hygiene</a>, to help you stay asleep for longer and avoid the 3 a.m. wake ups that can cut your sleep cycles short.</p><ul><li><strong>"Keep regular waking times and bedtimes</strong>," says Dr. Patel. Dr. Bhandari explains this helps "promote a stronger <a href="https://www.tomsguide.com/wellness/sleep/circadian-rhythm">sleep-wake cycle</a>," which can increase your overall sleep duration.</li><li>"<strong>Try to work out exactly how much sleep you need</strong>," Dr. Patel recommends, "so you can sleep enough so as not to need an alarm clock to wake in the morning."</li><li>"<strong>Maintain a comfortable, quiet sleeping environment</strong> at the <a href="https://www.tomsguide.com/reference/the-best-temperature-for-sleeping">right temperature</a>," advises Dr. Patel. Our <a href="https://www.tomsguide.com/mattresses/best-mattress">best mattress</a> guide can help you get started.</li><li>"<strong>Avoid </strong><a href="https://www.tomsguide.com/wellness/sleep/how-long-does-caffeine-last"><strong>caffeine</strong></a><strong> in the afternoon</strong> and keep the amount low in the morning," says Dr. Patel. She also recommends cutting out <a href="https://www.tomsguide.com/features/when-should-you-stop-drinking-before-bed">alcohol before bed</a>.</li><li>"<strong>Practice psychological relaxation techniques</strong> prior to sleep," says Dr. Patel. <a href="https://www.tomsguide.com/wellness/sleep/sleep-meditation">Guided sleep meditations</a> are an accessible option.</li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget heavy squats — a physical therapist shares 5 joint-friendly moves to build leg power after 60 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Squats are one of the most functional exercises, and doing them regularly as you age helps you preserve strength, muscle and power for activities like climbing stairs or going to the bathroom unaided; in short, strong legs keep you independent. </p><p>But not everyone can do squats, whether that's due to mobility, injury, health conditions, or preference. So, I turned to physical therapist Leighton Roberts, managing director at <a href="https://www.grosvenormobility.co.uk/" target="_blank" rel="nofollow">Grosvenor Mobility,</a> for some advice. </p><p>“Here are five simple exercises I'd recommend trying, provided they're suitable for your individual health and mobility needs," says Roberts. Read on for the moves and how to do them.</p><h2 id="5-lower-body-exercises-from-a-physical-therapist-to-build-leg-strength-and-power">5 lower-body exercises from a physical therapist to build leg strength and power</h2><p>"Maintaining joint strength is essential for staying active, mobile and independent," Roberts tells us. "For those experiencing joint stiffness or reduced mobility, gentle bed exercises are a great starting point. They help strengthen the muscles surrounding your hips without needing specialist gym equipment. An adjustable bed can also offer additional comfort when positioning yourself before and after exercise."</p><p>It's up to you where you perform these exercises, of course, whether that's on a bed or using an exercise mat rolled out at home. </p><h3 class="article-body__section" id="section-1-straight-leg-raises"><span> 1. Straight leg raises</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="FJKaaGt82LyvQUFc9zo7Ni" name="leg lifts.jpg" alt="a woman doing leg lifts" src="https://cdn.mos.cms.futurecdn.net/FJKaaGt82LyvQUFc9zo7Ni-1920-80.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: Getty/lioputra)</span></figcaption></figure><p>"These target the hip flexor muscles, helping with everyday movements such as walking, climbing stairs and lifting your legs," says Roberts.</p><ul><li>Lie on your back with your legs extended and arms by your sides</li><li>Engage your core and lightly tuck your pelvis toward you</li><li>Lift your legs into the air, keeping a soft bend in your knees</li><li>With control, lower your legs toward the floor. Only lower them as far as you can control without your back arching away from the mat</li><li><strong>Continue for 6-10 reps and 2 sets.</strong></li></ul><h3 class="article-body__section" id="section-2-hip-bridges"><span>2. Hip bridges</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="9J9AEAPFpcKYtHswZPkhAd" name="glute bridge.jpg" alt="a photo of a man doing a glute bridge" src="https://cdn.mos.cms.futurecdn.net/9J9AEAPFpcKYtHswZPkhAd-1920-80.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>"Hip bridges strengthen the gluteal muscles, improving hip stability and supporting movements such as standing up and walking."</p><ul><li>Lie on your back with your feet hip-width apart and knees bent</li><li>Press through your heels and lift your hips into the air</li><li>Squeeze your glutes at the top and pause</li><li>Slowly lower through your spine to reset</li><li><strong>Continue for 6-10 reps and 2 sets.</strong></li></ul><h3 class="article-body__section" id="section-3-side-lying-leg-raises"><span>3. Side-lying leg raises</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="eZ5tyxx62YdB7rhgJsErYb" name="side leg lift" alt="an illo of a man doing a side leg lift" src="https://cdn.mos.cms.futurecdn.net/eZ5tyxx62YdB7rhgJsErYb-1920-80.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>"These strengthen the outer hip muscles, which help stabilize your pelvis and maintain balance when walking."</p><ul><li>Lie on your side with your elbow resting and legs extended</li><li>With control, lift your top leg into the air and squeeze your glutes at the top. Your hips should stay facing forward</li><li>Lower your leg and repeat. Switch sides</li><li><strong>Continue for 6-10 reps and 2 sets.</strong></li></ul><h3 class="article-body__section" id="section-4-heel-slides"><span>4. Heel slides </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:1510px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="FauBQDPaVo2GGhUSmgKfj4" name="heel slides blue" alt="an illo of a woman doing heel slide exercise" src="https://cdn.mos.cms.futurecdn.net/FauBQDPaVo2GGhUSmgKfj4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1510" height="850" 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>"Heel slides encourage gentle movement through the hip and knee joints, helping improve flexibility and relieve stiffness after periods of inactivity."</p><ul><li>Lie on your back with your legs extended</li><li>Slowly bend one knee and slide your heel toward your butt</li><li>Hold for a few seconds, then slowly slide your foot away to extend the leg again</li><li><strong>Continue for 6-10 reps and 2 sets per side.</strong></li></ul><h3 class="article-body__section" id="section-5-clamshells"><span>5. Clamshells</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="wp9e4bnKz7ZcrwvM2sdDE5" name="clamshells illo.jpg" alt="an illo of a woman doing clamshells with a resistance band" src="https://cdn.mos.cms.futurecdn.net/wp9e4bnKz7ZcrwvM2sdDE5-1920-80.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>"Clamshells target the muscles around the outer hips, helping improve stability, balance and control during everyday movements."</p><ul><li>Lie on your side with your hips, thighs and ankles stacked at 90 degrees</li><li>Keep the inner sides of your feet pressed together, then slowly open your top knee and squeeze your outer glutes as you open your hips. Keep your hips facing forward</li><li>Pause, then lower your knee with control</li><li><strong>Continue for 6-10 reps and 2 sets per side.</strong></li></ul><p>Start with these exercises two to three times a week, alongside other activities such as walking, running, lifting weights, or gardening. Overall, consistency is one of the most important factors in maintaining strength and long-term mobility.</p><p>While these exercises are recommended by a qualified physical therapist, you should always listen to your body and stop if you feel sharp pain, numbness, or tingling. Working with a physical therapist, physician, or similar professional will help you determine the issue and provide specialized recommendations based on your personal journey.</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><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank">I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-how-to-be-strong-and-mobile-this-is-the-one-exercise-i-regret-ignoring-for-years" target="_blank">I teach people how to be strong and mobile: this is the one exercise I regret ignoring for years</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank">I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/workouts/forget-heavy-squats-a-physical-therapist-shares-5-joint-friendly-moves-to-build-leg-power-after-60</link>
                                                                            <description>
                            <![CDATA[ A physical therapist recommends five crucial strengthening exercises for leg power in people over 60, none of which are squats. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5KumXJ6THzwbZfgnnTFcsb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/rFmDncitwtNguzdZG8npiK-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Workouts]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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;Live Science&lt;/a&gt;,&lt;a href=&quot;https://www.fitandwell.com/author/sam-hopes&quot;&gt; Fit&amp;amp;Well&lt;/a&gt;,&lt;a href=&quot;https://www.coachweb.com/author/sam-hopes&quot;&gt; Coach&lt;/a&gt;, and T3. &lt;/p&gt;&lt;p&gt;Having worked with fitness studios like F45 and Virgin Active and trained both group and 1:1, Sam now primarily teaches outdoor bootcamps, bodyweight, 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, Pilates 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, mindfulness, 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/rFmDncitwtNguzdZG8npiK-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Male in shorts and t-shirt balancing on one leg while hugging his knee outdoors ]]></media:description>                                                            <media:text><![CDATA[Male in shorts and t-shirt balancing on one leg while hugging his knee outdoors ]]></media:text>
                                <media:title type="plain"><![CDATA[Male in shorts and t-shirt balancing on one leg while hugging his knee outdoors ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/rFmDncitwtNguzdZG8npiK-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Squats are one of the most functional exercises, and doing them regularly as you age helps you preserve strength, muscle and power for activities like climbing stairs or going to the bathroom unaided; in short, strong legs keep you independent. </p><p>But not everyone can do squats, whether that's due to mobility, injury, health conditions, or preference. So, I turned to physical therapist Leighton Roberts, managing director at <a href="https://www.grosvenormobility.co.uk/" target="_blank" rel="nofollow">Grosvenor Mobility,</a> for some advice. </p><p>“Here are five simple exercises I'd recommend trying, provided they're suitable for your individual health and mobility needs," says Roberts. Read on for the moves and how to do them.</p><h2 id="5-lower-body-exercises-from-a-physical-therapist-to-build-leg-strength-and-power">5 lower-body exercises from a physical therapist to build leg strength and power</h2><p>"Maintaining joint strength is essential for staying active, mobile and independent," Roberts tells us. "For those experiencing joint stiffness or reduced mobility, gentle bed exercises are a great starting point. They help strengthen the muscles surrounding your hips without needing specialist gym equipment. An adjustable bed can also offer additional comfort when positioning yourself before and after exercise."</p><p>It's up to you where you perform these exercises, of course, whether that's on a bed or using an exercise mat rolled out at home. </p><h3 class="article-body__section" id="section-1-straight-leg-raises"><span> 1. Straight leg raises</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="FJKaaGt82LyvQUFc9zo7Ni" name="leg lifts.jpg" alt="a woman doing leg lifts" src="https://cdn.mos.cms.futurecdn.net/FJKaaGt82LyvQUFc9zo7Ni-1920-80.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: Getty/lioputra)</span></figcaption></figure><p>"These target the hip flexor muscles, helping with everyday movements such as walking, climbing stairs and lifting your legs," says Roberts.</p><ul><li>Lie on your back with your legs extended and arms by your sides</li><li>Engage your core and lightly tuck your pelvis toward you</li><li>Lift your legs into the air, keeping a soft bend in your knees</li><li>With control, lower your legs toward the floor. Only lower them as far as you can control without your back arching away from the mat</li><li><strong>Continue for 6-10 reps and 2 sets.</strong></li></ul><h3 class="article-body__section" id="section-2-hip-bridges"><span>2. Hip bridges</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="9J9AEAPFpcKYtHswZPkhAd" name="glute bridge.jpg" alt="a photo of a man doing a glute bridge" src="https://cdn.mos.cms.futurecdn.net/9J9AEAPFpcKYtHswZPkhAd-1920-80.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>"Hip bridges strengthen the gluteal muscles, improving hip stability and supporting movements such as standing up and walking."</p><ul><li>Lie on your back with your feet hip-width apart and knees bent</li><li>Press through your heels and lift your hips into the air</li><li>Squeeze your glutes at the top and pause</li><li>Slowly lower through your spine to reset</li><li><strong>Continue for 6-10 reps and 2 sets.</strong></li></ul><h3 class="article-body__section" id="section-3-side-lying-leg-raises"><span>3. Side-lying leg raises</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="eZ5tyxx62YdB7rhgJsErYb" name="side leg lift" alt="an illo of a man doing a side leg lift" src="https://cdn.mos.cms.futurecdn.net/eZ5tyxx62YdB7rhgJsErYb-1920-80.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>"These strengthen the outer hip muscles, which help stabilize your pelvis and maintain balance when walking."</p><ul><li>Lie on your side with your elbow resting and legs extended</li><li>With control, lift your top leg into the air and squeeze your glutes at the top. Your hips should stay facing forward</li><li>Lower your leg and repeat. Switch sides</li><li><strong>Continue for 6-10 reps and 2 sets.</strong></li></ul><h3 class="article-body__section" id="section-4-heel-slides"><span>4. Heel slides </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:1510px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="FauBQDPaVo2GGhUSmgKfj4" name="heel slides blue" alt="an illo of a woman doing heel slide exercise" src="https://cdn.mos.cms.futurecdn.net/FauBQDPaVo2GGhUSmgKfj4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1510" height="850" 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>"Heel slides encourage gentle movement through the hip and knee joints, helping improve flexibility and relieve stiffness after periods of inactivity."</p><ul><li>Lie on your back with your legs extended</li><li>Slowly bend one knee and slide your heel toward your butt</li><li>Hold for a few seconds, then slowly slide your foot away to extend the leg again</li><li><strong>Continue for 6-10 reps and 2 sets per side.</strong></li></ul><h3 class="article-body__section" id="section-5-clamshells"><span>5. Clamshells</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="wp9e4bnKz7ZcrwvM2sdDE5" name="clamshells illo.jpg" alt="an illo of a woman doing clamshells with a resistance band" src="https://cdn.mos.cms.futurecdn.net/wp9e4bnKz7ZcrwvM2sdDE5-1920-80.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>"Clamshells target the muscles around the outer hips, helping improve stability, balance and control during everyday movements."</p><ul><li>Lie on your side with your hips, thighs and ankles stacked at 90 degrees</li><li>Keep the inner sides of your feet pressed together, then slowly open your top knee and squeeze your outer glutes as you open your hips. Keep your hips facing forward</li><li>Pause, then lower your knee with control</li><li><strong>Continue for 6-10 reps and 2 sets per side.</strong></li></ul><p>Start with these exercises two to three times a week, alongside other activities such as walking, running, lifting weights, or gardening. Overall, consistency is one of the most important factors in maintaining strength and long-term mobility.</p><p>While these exercises are recommended by a qualified physical therapist, you should always listen to your body and stop if you feel sharp pain, numbness, or tingling. Working with a physical therapist, physician, or similar professional will help you determine the issue and provide specialized recommendations based on your personal journey.</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><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank">I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-how-to-be-strong-and-mobile-this-is-the-one-exercise-i-regret-ignoring-for-years" target="_blank">I teach people how to be strong and mobile: this is the one exercise I regret ignoring for years</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank">I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 reasons why the new Fitbit Edge beats the Fitbit Charge 6 — and 1 reason it doesn’t ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I'm reviewing the new <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-just-spent-24-hours-with-the-fitbit-edge-3-reasons-why-im-already-impressed">Fitbit Edge</a>, Google's follow-up to the 2023 Fitbit Charge 6, one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> we've tested. </p><p>In terms of upgrades, the Edge has a lot going for it, including several important new health and safety features, welcomed design improvements, and enhanced outdoor tracking capabilities.</p><p>It's not all lollipops and ice cream, though. The Fitbit Edge comes up short in one key area <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-vs-fitbit-charge-6-which-google-fitness-tracker-wins">versus the Fitbit Charge 6</a>; read on to find out which one that is. But first, here are the three biggest reasons why the Fitbit Edge beats the Fitbit Charge 6. </p><div class="product"><a data-dimension112="4a12368c-ce74-11f1-9e9d-b37904c2ab81" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179" href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" 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="DRT3ZxaNQFpy6ohGGDyquC" name="FitbitEdge" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DRT3ZxaNQFpy6ohGGDyquC-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="810" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Edge was announced on October 12, 2026, and is available for preorder now from major retailers like <a href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" target="_blank" rel="nofollow" data-dimension112="4a12368c-ce74-11f1-9e9d-b37904c2ab81" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179">Amazon for $179</a>. As a replacement for the 2023 Fitbit Charge 6, the Edge is expected to ship by the end of the month.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" target="_blank" rel="nofollow" data-dimension112="4a12368c-ce74-11f1-9e9d-b37904c2ab81" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179">View Deal</a></p></div><h3 class="article-body__section" id="section-1-a-bigger-better-screen"><span>1. A bigger, better screen</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PTjN8q9e45sZwgK2hHWfWC" name="FitbitEdge-rev-08" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/PTjN8q9e45sZwgK2hHWfWC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>'s 1.04-inch AMOLED touchscreen isn't the smallest I've encountered on a modern fitness tracker, but it's far from the biggest. Translation: interacting with it can be a tad fumbly for those with big fingers, and squint-inducing for farsighted folks. </p><p>This is much less the case with the Fitbit Edge, which features a noticeably roomier 1.34-inch AMOLED screen. Roughly twice the maximum brightness output means the Fitbit Edge is also easier to read than the Fitbit Charge 6 in direct sunlight. </p><h3 class="article-body__section" id="section-2-more-advanced-health-features"><span>2. More advanced health 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8obRGqn7ctr9KYTt7WBfKC" name="FitbitEdge-rev-07" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/8obRGqn7ctr9KYTt7WBfKC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Both the 2023 Fitbit Charge 6 and 2026 Fitbit Edge work with Google's recently overhauled Google Health app, which replaces the <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">old Fitbit app</a>. Regardless of which tracker you wear, you'll be greeted with daily insights into your sleep quality, energy levels, heart rate, blood oxygen saturation (SpO2), body temperature trends, and more. </p><p>You can also perform ECG readings using either Fitbit, but only the Fitbit Edge supports Google's new insulin resistance and <a href="https://www.tomsguide.com/wellness/fitness-trackers/3-reasons-the-new-google-pixel-watch-5-is-good-news-for-the-fitbit-air">blood pressure trend</a> reports. The Edge additionally has important health safety tools absent from the Charge 6, including <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">Loss of Pulse Detection</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/exclusive-google-pm-says-the-pixel-watch-5-is-like-an-airbag-on-your-wrist-thanks-to-features-like-breathing-emergency-detection">Breathing Emergency Alerts</a>. </p><h3 class="article-body__section" id="section-3-onboard-altimeter-for-elevation-tracking"><span>3. Onboard altimeter for elevation 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vmyPUsPYBjNEJ47uPsP3bC" name="FitbitEdge-rev-06" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/vmyPUsPYBjNEJ47uPsP3bC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>As a lover of outdoor mountain adventures, including <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-trekked-the-cascade-mountains-with-the-apple-watch-ultra-3-vs-garmin-instinct-3-vs-samsung-galaxy-watch-ultra-2-this-is-the-one-id-take-on-my-next-hike">hiking</a>, <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">skiing</a>, snowmobiling, and more, I'm thrilled that Google added a barometric altimeter to the Fitbit Edge, something that was noticeably lacking in the Fitbit Charge 6. </p><p>While some fitness trackers without onboard altimeters try to guess elevation gain using GPS insights, this method is far from precise, which is probably why the Fitbit Charge 6 doesn't bother to share the metric at all.</p><p>Thankfully, the Fitbit Edge does, but how accurate is the new model's elevation tracking performance? You'll have to wait a few more days until I publish the full review to find out!</p><h3 class="article-body__section" id="section-but-only-the-fitbit-charge-6-has-nfc"><span>But only the Fitbit Charge 6 has NFC</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="rEpkssC899SufDo23cfMh6" name="IMG_9309.jpg" alt="set a goal on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/rEpkssC899SufDo23cfMh6-1920-80.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: Future)</span></figcaption></figure><p>While the new Fitbit Edge handily beats its predecessor when it comes to health and fitness tracking chops as well as overall usability and design, the newer model omits one key piece of tech: NFC for contactless payments.</p><p>It's ultimately a bit ironic that the 2023 model supports tap-to-pay but the 2026 model doesn't. On the flip side, perhaps Google needed to nix something from the design to make room for the altimeter. If that's the case, I gladly take precise elevation tracking over the ability to pay for things from the wrist. </p><p>What are your thoughts on the Fitbit Edge vs. Fitbit Charge 6? Let me know below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2nMX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2nMX.js" async></script><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-first-impressions-5-reasons-to-buy-and-2-reasons-to-skip-googles-new-fitness-tracker"><strong>Fitbit Edge first impressions: 5 reasons to buy (and 2 reasons to skip) Google's new fitness tracker</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/google-fitbit-edge-vs-fitbit-air-which-should-you-choose"><strong>Google Fitbit Edge vs Fitbit Air: Which should you choose?</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/exclusive-google-pm-says-the-pixel-watch-5-is-like-an-airbag-on-your-wrist-thanks-to-features-like-breathing-emergency-detection"><strong>Exclusive: Inside the Pixel Watch 5's breathing emergency detection — and why it's like an 'airbag on your wrist'</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness-trackers/3-reasons-why-the-new-fitbit-edge-beats-the-fitbit-charge-6-and-1-reason-it-doesnt</link>
                                                                            <description>
                            <![CDATA[ The Fitbit Edge replaces the three-year-old Fitbit Charge in Google's fitness tracker line, and it's a notable improvement in all but one regard. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5NsAbUQtPiPGf8sDapsVWb</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/vf5UBBimGKRzcfEMhkGTpC-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 23 Oct 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-320-70.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/vf5UBBimGKRzcfEMhkGTpC-1920-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Google Fitbit Edge fitness tracker]]></media:description>                                                            <media:text><![CDATA[Close-up of the Google Fitbit Edge fitness tracker]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Google Fitbit Edge fitness tracker]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/vf5UBBimGKRzcfEMhkGTpC-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I'm reviewing the new <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-just-spent-24-hours-with-the-fitbit-edge-3-reasons-why-im-already-impressed">Fitbit Edge</a>, Google's follow-up to the 2023 Fitbit Charge 6, one of the <a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html">best fitness trackers</a> we've tested. </p><p>In terms of upgrades, the Edge has a lot going for it, including several important new health and safety features, welcomed design improvements, and enhanced outdoor tracking capabilities.</p><p>It's not all lollipops and ice cream, though. The Fitbit Edge comes up short in one key area <a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-vs-fitbit-charge-6-which-google-fitness-tracker-wins">versus the Fitbit Charge 6</a>; read on to find out which one that is. But first, here are the three biggest reasons why the Fitbit Edge beats the Fitbit Charge 6. </p><div class="product"><a data-dimension112="4a12368c-ce74-11f1-9e9d-b37904c2ab81" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179" href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" 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="DRT3ZxaNQFpy6ohGGDyquC" name="FitbitEdge" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DRT3ZxaNQFpy6ohGGDyquC-1920-80.jpg" mos="" align="middle" fullscreen="" width="679" height="810" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fitbit Edge was announced on October 12, 2026, and is available for preorder now from major retailers like <a href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" target="_blank" rel="nofollow" data-dimension112="4a12368c-ce74-11f1-9e9d-b37904c2ab81" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179">Amazon for $179</a>. As a replacement for the 2023 Fitbit Charge 6, the Edge is expected to ship by the end of the month.<a class="view-deal button" href="https://www.amazon.com/Google-Fitbit-Edge-glanceable-quick-charging/dp/B0HG61DKC8/" target="_blank" rel="nofollow" data-dimension112="4a12368c-ce74-11f1-9e9d-b37904c2ab81" data-action="Deal Block" data-label="Fitbit Edge" data-dimension48="Fitbit Edge" data-dimension25="$179">View Deal</a></p></div><h3 class="article-body__section" id="section-1-a-bigger-better-screen"><span>1. A bigger, better screen</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PTjN8q9e45sZwgK2hHWfWC" name="FitbitEdge-rev-08" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/PTjN8q9e45sZwgK2hHWfWC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/reviews/fitbit-charge-6">Fitbit Charge 6</a>'s 1.04-inch AMOLED touchscreen isn't the smallest I've encountered on a modern fitness tracker, but it's far from the biggest. Translation: interacting with it can be a tad fumbly for those with big fingers, and squint-inducing for farsighted folks. </p><p>This is much less the case with the Fitbit Edge, which features a noticeably roomier 1.34-inch AMOLED screen. Roughly twice the maximum brightness output means the Fitbit Edge is also easier to read than the Fitbit Charge 6 in direct sunlight. </p><h3 class="article-body__section" id="section-2-more-advanced-health-features"><span>2. More advanced health 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8obRGqn7ctr9KYTt7WBfKC" name="FitbitEdge-rev-07" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/8obRGqn7ctr9KYTt7WBfKC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Both the 2023 Fitbit Charge 6 and 2026 Fitbit Edge work with Google's recently overhauled Google Health app, which replaces the <a href="https://www.tomsguide.com/wellness/fitness/the-fitbit-app-is-officially-dead-but-dont-panic-its-replacement-is-even-better">old Fitbit app</a>. Regardless of which tracker you wear, you'll be greeted with daily insights into your sleep quality, energy levels, heart rate, blood oxygen saturation (SpO2), body temperature trends, and more. </p><p>You can also perform ECG readings using either Fitbit, but only the Fitbit Edge supports Google's new insulin resistance and <a href="https://www.tomsguide.com/wellness/fitness-trackers/3-reasons-the-new-google-pixel-watch-5-is-good-news-for-the-fitbit-air">blood pressure trend</a> reports. The Edge additionally has important health safety tools absent from the Charge 6, including <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">Loss of Pulse Detection</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/exclusive-google-pm-says-the-pixel-watch-5-is-like-an-airbag-on-your-wrist-thanks-to-features-like-breathing-emergency-detection">Breathing Emergency Alerts</a>. </p><h3 class="article-body__section" id="section-3-onboard-altimeter-for-elevation-tracking"><span>3. Onboard altimeter for elevation 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vmyPUsPYBjNEJ47uPsP3bC" name="FitbitEdge-rev-06" alt="Close-up of the Google Fitbit Edge fitness tracker" src="https://cdn.mos.cms.futurecdn.net/vmyPUsPYBjNEJ47uPsP3bC-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>As a lover of outdoor mountain adventures, including <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-trekked-the-cascade-mountains-with-the-apple-watch-ultra-3-vs-garmin-instinct-3-vs-samsung-galaxy-watch-ultra-2-this-is-the-one-id-take-on-my-next-hike">hiking</a>, <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">skiing</a>, snowmobiling, and more, I'm thrilled that Google added a barometric altimeter to the Fitbit Edge, something that was noticeably lacking in the Fitbit Charge 6. </p><p>While some fitness trackers without onboard altimeters try to guess elevation gain using GPS insights, this method is far from precise, which is probably why the Fitbit Charge 6 doesn't bother to share the metric at all.</p><p>Thankfully, the Fitbit Edge does, but how accurate is the new model's elevation tracking performance? You'll have to wait a few more days until I publish the full review to find out!</p><h3 class="article-body__section" id="section-but-only-the-fitbit-charge-6-has-nfc"><span>But only the Fitbit Charge 6 has NFC</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="rEpkssC899SufDo23cfMh6" name="IMG_9309.jpg" alt="set a goal on the Fitbit Charge 6" src="https://cdn.mos.cms.futurecdn.net/rEpkssC899SufDo23cfMh6-1920-80.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: Future)</span></figcaption></figure><p>While the new Fitbit Edge handily beats its predecessor when it comes to health and fitness tracking chops as well as overall usability and design, the newer model omits one key piece of tech: NFC for contactless payments.</p><p>It's ultimately a bit ironic that the 2023 model supports tap-to-pay but the 2026 model doesn't. On the flip side, perhaps Google needed to nix something from the design to make room for the altimeter. If that's the case, I gladly take precise elevation tracking over the ability to pay for things from the wrist. </p><p>What are your thoughts on the Fitbit Edge vs. Fitbit Charge 6? Let me know below. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xj2nMX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xj2nMX.js" async></script><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/fitbit-edge-first-impressions-5-reasons-to-buy-and-2-reasons-to-skip-googles-new-fitness-tracker"><strong>Fitbit Edge first impressions: 5 reasons to buy (and 2 reasons to skip) Google's new fitness tracker</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/google-fitbit-edge-vs-fitbit-air-which-should-you-choose"><strong>Google Fitbit Edge vs Fitbit Air: Which should you choose?</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/exclusive-google-pm-says-the-pixel-watch-5-is-like-an-airbag-on-your-wrist-thanks-to-features-like-breathing-emergency-detection"><strong>Exclusive: Inside the Pixel Watch 5's breathing emergency detection — and why it's like an 'airbag on your wrist'</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ It's International Crocs Day and these are the 21 pairs of Croslite-made shoes on my wishlist ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Happy International Crocs Day! 🐊 It's officially Croctober, and there's no better way to celebrate than snapping up a new pair of the beloved brand's clogs, slides and sandals. </p><p>To mark the occasion, clogs, sandals, slides and, of course, Jibbitz have been <a href="https://www.amazon.com.au/stores/page/A78DA5EF-2BD1-4348-8761-62D9E0708303?ingress=2&lp_context_asin=B0GK93HV6M&lp_context_query=crocs&visitId=6ef53acf-1086-425e-8894-b2e1ddc2f569&ref_=ast_bln" target="_blank">discounted by up to 60% on Amazon</a> and on the <a href="https://www.crocs.com.au/c/sale-au">Crocs website</a>. To get your Croc-stomping on, I've gathered 21 of the best Crocs deals below. Of course, this doesn't completely reflect all the discounted styles, but you can check them out on <a href="https://www.amazon.com.au/b?_encoding=UTF8&node=221947539051" target="_blank">Crocs' Amazon storefront</a> or <a href="https://www.crocs.com.au/c/sale-au" target="_blank">Crocs' sale page here</a>. </p><p>You'll need to act fast to snap up a new pair of Crocs — these prices won't hang around long and Croctober only comes around once a year!</p>        <div class="featured_product_block featured_block_hero" data-id="2ae6e822-ce5e-11f1-8724-19b1c0fcd1cc">            <a href="https://www.amazon.com.au/Crocs-Classic-Comfortable-Casual-Lavender/dp/B0BFNLJX4P" data-model-name="Unisex Adult Classic Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:59.60%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/vPJhGnTg4QQULnX7zMtCAQ.jpg" alt="Crocs Unisex Adult Classic Clog, Atmosphere, Us M11w13"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult Classic Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6e89a-ce5e-11f1-80fd-a7822dabf52b">            <a href="https://www.amazon.com.au/Crocs-Getaway-Strappy-Champagne-Metallic/dp/B0DWZT662V/" data-model-name="Women's Getaway Strappy" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ULifhmzSuwhfsmwiKPmetP.jpg" alt="Crocs Women's Getaway Strappy, Champagne Metallic, Us W7"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Getaway Strappy</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6e908-ce5e-11f1-bc09-179a7097ac82">            <a href="https://www.amazon.com.au/Crocs-Womens-Ballet-Shoes-Barely/dp/B0D7VJZM31/" data-model-name="Women's Kadee Flat" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/99Zo7MZfaMSGKunaVQxRoP.jpg" alt="Crocs Women's Kadee Flat, Barely Pink, Us W7"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Kadee Flat</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6eaa2-ce5e-11f1-a292-9be267d0a0e5">            <a href="https://www.amazon.com.au/Crocs-Womens-Getaway-Platform-Sandals/dp/B0C8CQVCZZ/" data-model-name="Women's Getaway Platform Flip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/irfPZrMFSiK4oYG5DbGf2Q.jpg" alt="Crocs Women's Getaway Platform Flip, Quartz, Us W8"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Getaway Platform Flip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6eb10-ce5e-11f1-9f13-9194c6cca73d">            <a href="https://www.amazon.com.au/Crocs-Womens-Brooklyn-Buckle-Sandal/dp/B0DG1DPXZ7/" data-model-name="Women's Brooklyn Buckle Low Low Sandal" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/q5JVsRNkf5sKzXvRb92k7Q.jpg" alt="Crocs Women's Brooklyn Buckle Low Low Sandal, Black, Us W6 | Walking Sandals"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Brooklyn Buckle Low Low Sandal</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6eb88-ce5e-11f1-9039-e5c8ef0fcf37">            <a href="https://www.amazon.com.au/Crocs-Womens-Leopard-Casual-Summer/dp/B07TBMVC7W/" data-model-name="Women's Kadee II Graphic Print Flip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:37.60%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/LhLZ6ewNUuf9PQqwz5ZpzP.jpg" alt="Crocs Women's Kadee Ii Graphic Print Flip, Leopard/gold, Us W7"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Kadee II Graphic Print Flip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ed72-ce5e-11f1-9a27-6574b7b589c5">            <a href="https://www.amazon.com.au/Crocs-Womens-Brooklyn-Sandal-Stucco/dp/B0CXGQ4RFF/" data-model-name="Women's Brooklyn 4U Sandal" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:50.80%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QFgqSZwpeCjpMCYqqS874Q.jpg" alt="Crocs Women's Brooklyn 4u Sandal, Stucco, Us W10"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Brooklyn 4U Sandal</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6edd6-ce5e-11f1-a948-c3fa43de2441">            <a href="https://www.amazon.com.au/Crocs-Mens-Yukon-Vista-Black/dp/B0DW4HBLK1/" data-model-name="Men's Yukon Vista LR Flip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:44.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CmVsbLts6bidTA7x5LHLpP.jpg" alt="Crocs Men's Yukon Vista Lr Flip, Black/black, Us M10"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Men's Yukon Vista LR Flip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ee3a-ce5e-11f1-8768-c16981075a14">            <a href="https://www.amazon.com.au/Crocs-Unisex-Adult-Dylan-Clogs-Shoes-Cognac/dp/B0BX4WHYXV/" data-model-name="Unisex Adult Dylan Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QmL2TKjm6Y8gFwZLQgxcRQ.jpg" alt="Crocs Unisex Adult Dylan Clog, Cognac, Us M6w8"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult Dylan Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ee9e-ce5e-11f1-ac3c-df4255a49794">            <a href="https://www.amazon.com.au/Crocs-Unisex-Adult-Mellow-Recovery/dp/B0BFNQF814/" data-model-name="Unisex Adult Mellow Recovery Slide" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RnG6iRaDvSaYp6ZGt8YxdP.jpg" alt="Crocs Unisex Adult Mellow Recovery Slide, Black, Us M7w9"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult Mellow Recovery Slide</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ef02-ce5e-11f1-84a9-395fb63c12c8">            <a href="https://www.amazon.com.au/crocs-Crocband-Comfort-Shoes-Black/dp/B002JCSSQA/" data-model-name="Unisex Adult Crocband Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:60.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7i69mAVZPC6iCtC5RgKbSQ.jpg" alt="Crocs Unisex Adult Crocband Clog, Black, Us M5w7 | Casual Shoes"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult Crocband Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ef5c-ce5e-11f1-b05b-5147c61497f4">            <a href="https://www.amazon.com.au/Crocs-Unisex-Adult-Terrain-Black/dp/B0FBRQ6SMV" data-model-name="Unisex Adult All Terrain Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/LK2y6EmvnzHp3jb9DkwCpP.jpg" alt="Crocs Unisex Adult All Terrain Clog, Black/black, Us M5w7"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult All Terrain Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6e976-ce5e-11f1-b775-f35d34cfb562">            <a href="https://www.crocs.com.au/p/baya-platform-clog/208186.html?cgid=sale-au&cid=100" data-model-name="Baja Platform Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cD4uCExGGRUjqbUf5KcfnP.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Baja Platform Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6e9da-ce5e-11f1-bfaf-65d790986990">            <a href="https://www.crocs.com.au/p/classic-studded-clog/211596.html" data-model-name="Classic Studded Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ToZFxpPMf3Tzit3uF3kdYQ.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Classic Studded Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ea3e-ce5e-11f1-92ba-efad25389ed9">            <a href="https://www.crocs.com.au/p/classic-confetti-clog/212462.html" data-model-name="Classic Confetti Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/5YzpwQaLKixvuRKqoKVoCR.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Classic Confetti Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ec0a-ce5e-11f1-9ab1-65c3571d2a5a">            <a href="https://www.crocs.com.au/p/disney-zootopia-2-classic-clog/211749.html" data-model-name="Disney Zootopia 2 Classic Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/S85Qrmzni8ZW8JA26f4VkP.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Disney Zootopia 2 Classic Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ec82-ce5e-11f1-a834-23d7734dbc77">            <a href="https://www.crocs.com.au/p/caged-mule/211907.html?cgid=sale-au&cid=738" data-model-name="Caged Mule" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HfjkRUD4ozjAr4XdRs87uQ.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Caged Mule</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ecfa-ce5e-11f1-aff4-31ebb46003a7">            <a href="https://www.crocs.com.au/p/hello-kitty-bae-clog/211199.html?cgid=sale-au&cid=90H" data-model-name="Hello Kitty Bae Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/puGfTCktr4zc4tCBfpyBHQ.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Hello Kitty Bae Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6efb6-ce5e-11f1-92e8-876d7a6abdd9">            <a href="https://www.crocs.com.au/p/caged-clog/211141.html?cgid=sale-au&cid=2MD" data-model-name="Caged Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/J5y9xtiyrHzRGqTWCsvJ2Q.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Caged Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6f01a-ce5e-11f1-9b6f-efa81bb8fb7b">            <a href="https://www.crocs.com.au/p/classic-mary-jane-clog/210581.html?cgid=sale-au&cid=001" data-model-name="Classic Mary Jane Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BuxP8nG7PGws9Fi2nMDutP.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Classic Mary Jane Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6f074-ce5e-11f1-bbf1-2b1c7ae336c8">            <a href="https://www.crocs.com.au/p/classic-frosted-clog/210928.html?cgid=sale-au&cid=6XX" data-model-name="Classic Frosted Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/bBadLuC8tZSGmKxVVHv4pP.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Classic Frosted Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/its-international-crocs-day-and-these-are-the-21-pairs-of-croslite-made-shoes-on-my-wishlist</link>
                                                                            <description>
                            <![CDATA[ It's International Crocs Day and here are 21 pairs worth stepping into to celebrate the occasion. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">D4ZzRSur2FSyy8rFvQDKe9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Y6LpPZJUFraVCcUmJiVeiK-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 23:05:51 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 02:53:39 +0000</updated>
                                                                                                                                            <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ lucy.scotting@futurenet.com (Lucy Scotting) ]]></author>                    <dc:creator><![CDATA[ Lucy Scotting ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/PQTnAGVHEDNmwJEbWkaqHV-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Lucy Scotting is a staff writer for Tom’s Guide Australia, primarily covering lifestyle, streaming and internet-related news. Lucy started her career writing for HR and staffing industry publications, covering emerging tech, business and finance.&lt;/p&gt;&lt;p&gt;In her spare time, Lucy can be found watching sci-fi movies, working on her dystopian fiction novel (in progress since 2017) or hanging out with her dog, Fletcher. If she’s not found doing any of the above, she’s likely on her next adventure to a new city, country, or continent. &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/Y6LpPZJUFraVCcUmJiVeiK-1920-80.jpg">
                                                            <media:credit><![CDATA[Future / Crocs]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Crocs on rainbow gradient background]]></media:description>                                                            <media:text><![CDATA[Crocs on rainbow gradient background]]></media:text>
                                <media:title type="plain"><![CDATA[Crocs on rainbow gradient background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Y6LpPZJUFraVCcUmJiVeiK-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Happy International Crocs Day! 🐊 It's officially Croctober, and there's no better way to celebrate than snapping up a new pair of the beloved brand's clogs, slides and sandals. </p><p>To mark the occasion, clogs, sandals, slides and, of course, Jibbitz have been <a href="https://www.amazon.com.au/stores/page/A78DA5EF-2BD1-4348-8761-62D9E0708303?ingress=2&lp_context_asin=B0GK93HV6M&lp_context_query=crocs&visitId=6ef53acf-1086-425e-8894-b2e1ddc2f569&ref_=ast_bln" target="_blank">discounted by up to 60% on Amazon</a> and on the <a href="https://www.crocs.com.au/c/sale-au">Crocs website</a>. To get your Croc-stomping on, I've gathered 21 of the best Crocs deals below. Of course, this doesn't completely reflect all the discounted styles, but you can check them out on <a href="https://www.amazon.com.au/b?_encoding=UTF8&node=221947539051" target="_blank">Crocs' Amazon storefront</a> or <a href="https://www.crocs.com.au/c/sale-au" target="_blank">Crocs' sale page here</a>. </p><p>You'll need to act fast to snap up a new pair of Crocs — these prices won't hang around long and Croctober only comes around once a year!</p>        <div class="featured_product_block featured_block_hero" data-id="2ae6e822-ce5e-11f1-8724-19b1c0fcd1cc">            <a href="https://www.amazon.com.au/Crocs-Classic-Comfortable-Casual-Lavender/dp/B0BFNLJX4P" data-model-name="Unisex Adult Classic Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:59.60%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/vPJhGnTg4QQULnX7zMtCAQ.jpg" alt="Crocs Unisex Adult Classic Clog, Atmosphere, Us M11w13"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult Classic Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6e89a-ce5e-11f1-80fd-a7822dabf52b">            <a href="https://www.amazon.com.au/Crocs-Getaway-Strappy-Champagne-Metallic/dp/B0DWZT662V/" data-model-name="Women's Getaway Strappy" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ULifhmzSuwhfsmwiKPmetP.jpg" alt="Crocs Women's Getaway Strappy, Champagne Metallic, Us W7"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Getaway Strappy</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6e908-ce5e-11f1-bc09-179a7097ac82">            <a href="https://www.amazon.com.au/Crocs-Womens-Ballet-Shoes-Barely/dp/B0D7VJZM31/" data-model-name="Women's Kadee Flat" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/99Zo7MZfaMSGKunaVQxRoP.jpg" alt="Crocs Women's Kadee Flat, Barely Pink, Us W7"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Kadee Flat</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6eaa2-ce5e-11f1-a292-9be267d0a0e5">            <a href="https://www.amazon.com.au/Crocs-Womens-Getaway-Platform-Sandals/dp/B0C8CQVCZZ/" data-model-name="Women's Getaway Platform Flip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/irfPZrMFSiK4oYG5DbGf2Q.jpg" alt="Crocs Women's Getaway Platform Flip, Quartz, Us W8"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Getaway Platform Flip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6eb10-ce5e-11f1-9f13-9194c6cca73d">            <a href="https://www.amazon.com.au/Crocs-Womens-Brooklyn-Buckle-Sandal/dp/B0DG1DPXZ7/" data-model-name="Women's Brooklyn Buckle Low Low Sandal" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/q5JVsRNkf5sKzXvRb92k7Q.jpg" alt="Crocs Women's Brooklyn Buckle Low Low Sandal, Black, Us W6 | Walking Sandals"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Brooklyn Buckle Low Low Sandal</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6eb88-ce5e-11f1-9039-e5c8ef0fcf37">            <a href="https://www.amazon.com.au/Crocs-Womens-Leopard-Casual-Summer/dp/B07TBMVC7W/" data-model-name="Women's Kadee II Graphic Print Flip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:37.60%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/LhLZ6ewNUuf9PQqwz5ZpzP.jpg" alt="Crocs Women's Kadee Ii Graphic Print Flip, Leopard/gold, Us W7"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Kadee II Graphic Print Flip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ed72-ce5e-11f1-9a27-6574b7b589c5">            <a href="https://www.amazon.com.au/Crocs-Womens-Brooklyn-Sandal-Stucco/dp/B0CXGQ4RFF/" data-model-name="Women's Brooklyn 4U Sandal" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:50.80%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QFgqSZwpeCjpMCYqqS874Q.jpg" alt="Crocs Women's Brooklyn 4u Sandal, Stucco, Us W10"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Women's Brooklyn 4U Sandal</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6edd6-ce5e-11f1-a948-c3fa43de2441">            <a href="https://www.amazon.com.au/Crocs-Mens-Yukon-Vista-Black/dp/B0DW4HBLK1/" data-model-name="Men's Yukon Vista LR Flip" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:44.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CmVsbLts6bidTA7x5LHLpP.jpg" alt="Crocs Men's Yukon Vista Lr Flip, Black/black, Us M10"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Men's Yukon Vista LR Flip</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ee3a-ce5e-11f1-8768-c16981075a14">            <a href="https://www.amazon.com.au/Crocs-Unisex-Adult-Dylan-Clogs-Shoes-Cognac/dp/B0BX4WHYXV/" data-model-name="Unisex Adult Dylan Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QmL2TKjm6Y8gFwZLQgxcRQ.jpg" alt="Crocs Unisex Adult Dylan Clog, Cognac, Us M6w8"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult Dylan Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ee9e-ce5e-11f1-ac3c-df4255a49794">            <a href="https://www.amazon.com.au/Crocs-Unisex-Adult-Mellow-Recovery/dp/B0BFNQF814/" data-model-name="Unisex Adult Mellow Recovery Slide" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RnG6iRaDvSaYp6ZGt8YxdP.jpg" alt="Crocs Unisex Adult Mellow Recovery Slide, Black, Us M7w9"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult Mellow Recovery Slide</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ef02-ce5e-11f1-84a9-395fb63c12c8">            <a href="https://www.amazon.com.au/crocs-Crocband-Comfort-Shoes-Black/dp/B002JCSSQA/" data-model-name="Unisex Adult Crocband Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:60.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7i69mAVZPC6iCtC5RgKbSQ.jpg" alt="Crocs Unisex Adult Crocband Clog, Black, Us M5w7 | Casual Shoes"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult Crocband Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ef5c-ce5e-11f1-b05b-5147c61497f4">            <a href="https://www.amazon.com.au/Crocs-Unisex-Adult-Terrain-Black/dp/B0FBRQ6SMV" data-model-name="Unisex Adult All Terrain Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/LK2y6EmvnzHp3jb9DkwCpP.jpg" alt="Crocs Unisex Adult All Terrain Clog, Black/black, Us M5w7"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Unisex Adult All Terrain Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6e976-ce5e-11f1-b775-f35d34cfb562">            <a href="https://www.crocs.com.au/p/baya-platform-clog/208186.html?cgid=sale-au&cid=100" data-model-name="Baja Platform Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cD4uCExGGRUjqbUf5KcfnP.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Baja Platform Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6e9da-ce5e-11f1-bfaf-65d790986990">            <a href="https://www.crocs.com.au/p/classic-studded-clog/211596.html" data-model-name="Classic Studded Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ToZFxpPMf3Tzit3uF3kdYQ.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Classic Studded Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ea3e-ce5e-11f1-92ba-efad25389ed9">            <a href="https://www.crocs.com.au/p/classic-confetti-clog/212462.html" data-model-name="Classic Confetti Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/5YzpwQaLKixvuRKqoKVoCR.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Classic Confetti Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ec0a-ce5e-11f1-9ab1-65c3571d2a5a">            <a href="https://www.crocs.com.au/p/disney-zootopia-2-classic-clog/211749.html" data-model-name="Disney Zootopia 2 Classic Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/S85Qrmzni8ZW8JA26f4VkP.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Disney Zootopia 2 Classic Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ec82-ce5e-11f1-a834-23d7734dbc77">            <a href="https://www.crocs.com.au/p/caged-mule/211907.html?cgid=sale-au&cid=738" data-model-name="Caged Mule" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HfjkRUD4ozjAr4XdRs87uQ.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Caged Mule</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6ecfa-ce5e-11f1-aff4-31ebb46003a7">            <a href="https://www.crocs.com.au/p/hello-kitty-bae-clog/211199.html?cgid=sale-au&cid=90H" data-model-name="Hello Kitty Bae Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/puGfTCktr4zc4tCBfpyBHQ.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Hello Kitty Bae Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6efb6-ce5e-11f1-92e8-876d7a6abdd9">            <a href="https://www.crocs.com.au/p/caged-clog/211141.html?cgid=sale-au&cid=2MD" data-model-name="Caged Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/J5y9xtiyrHzRGqTWCsvJ2Q.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Caged Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6f01a-ce5e-11f1-9b6f-efa81bb8fb7b">            <a href="https://www.crocs.com.au/p/classic-mary-jane-clog/210581.html?cgid=sale-au&cid=001" data-model-name="Classic Mary Jane Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BuxP8nG7PGws9Fi2nMDutP.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Classic Mary Jane Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ae6f074-ce5e-11f1-bbf1-2b1c7ae336c8">            <a href="https://www.crocs.com.au/p/classic-frosted-clog/210928.html?cgid=sale-au&cid=6XX" data-model-name="Classic Frosted Clog" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/bBadLuC8tZSGmKxVVHv4pP.png" alt="Crocs on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crocs</div>                                        <div class="featured__title">Classic Frosted Clog</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ REI is taking up to 50% off best-selling Arc’teryx gear for fall — here are my 13 favorite deals ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Arc'teryx is commonly known for its winter gear, but many of its best-selling pieces are also great for fall. From lightweight layers to hiking pants and rain jackets, they have plenty of high-quality styles built for the changing seasons ahead. </p><p>Case in point: <a href="https://www.rei.com/b/arcteryx/f/scd-deals?" target="_blank" rel="nofollow">REI is currently knocking up to 50% off best-selling Arc'teryx apparel for fall</a>. Whether you’re planning alpine hikes, backcountry trail rides or you simply want to spend more time in the great outdoors, the Arc'teryx sale is the perfect opportunity to invest in top-tier gear for all your upcoming adventures. </p><p>So don't wait! Keep scrolling to check out the rest of my favorite finds from the Arc'teryx sale at REI.  </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.rei.com/b/arcteryx/f/scd-deals" target="_blank" rel="nofollow"><strong>shop all Arc'teryx deals at REI</strong></a></li><li><strong>Arc'teryx Taema Tank Top (Women's): </strong><a href="https://www.rei.com/product/C05677/arcteryx-taema-tank-top-womens" target="_blank" rel="nofollow"><strong>was $60 now $38</strong></a></li><li><strong>Arc'teryx Cormac Logo T-Shirt (Men's): </strong><a href="https://www.rei.com/product/C01312/arcteryx-cormac-logo-t-shirt-mens" target="_blank" rel="nofollow"><strong>was $80 now $39</strong></a></li><li><strong>Arc'teryx Cormac Crew Long-Sleeve Shirt (Men's): </strong><a href="https://www.rei.com/product/218811/arcteryx-cormac-crew-long-sleeve-shirt-mens?" target="_blank" rel="nofollow"><strong>was $80 now $55</strong></a></li><li><strong>Arc'teryx Satoro Merino Wool Long-Sleeve Top (Women's): </strong><a href="https://www.rei.com/product/C11758/arcteryx-satoro-merino-wool-crew-neck-long-sleeve-base-layer-top-womens" target="_blank" rel="nofollow"><strong>was $120 now $95</strong></a></li><li><strong>Arc'teryx Atom Insulated Hoody (Men's): </strong><a href="https://www.rei.com/product/243175/arcteryx-atom-insulated-hoody-mens?" target="_blank" rel="nofollow"><strong>was $300 now $199</strong></a></li><li><strong>Arc'teryx Beta SL Jacket (Men's): </strong><a href="https://www.rei.com/product/235112/arcteryx-beta-sl-jacket-mens" target="_blank" rel="nofollow"><strong>was $500 now $299</strong></a></li></ul><h3 class="article-body__section" id="section-arc-teryx-deals"><span>Arc'teryx Deals </span></h3><div class="product"><a data-dimension112="7069a3a4-ce3a-11f1-b31e-2f77c6693aab" data-action="Deal Block" data-label="Taema Tank Top (Women's)" data-dimension48="Taema Tank Top (Women's)" data-dimension25="$38" href="https://www.rei.com/product/C05677/arcteryx-taema-tank-top-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="rXhnnkZbPZd2ntrTrKECK3" name="Taema tank top" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rXhnnkZbPZd2ntrTrKECK3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C05677/arcteryx-taema-tank-top-womens" target="_blank" rel="nofollow" data-dimension112="7069a3a4-ce3a-11f1-b31e-2f77c6693aab" data-action="Deal Block" data-label="Taema Tank Top (Women's)" data-dimension48="Taema Tank Top (Women's)" data-dimension25="$38">Taema Tank Top (Women's): was $60 now $38</a></strong><br>This racerback, crew neck tank top features a breathable fabric that wicks moisture away and dries quickly, making it perfect for longer hikes. It's soft, comfortable and built for performance. <a class="view-deal button" href="https://www.rei.com/product/C05677/arcteryx-taema-tank-top-womens" target="_blank" rel="nofollow" data-dimension112="7069a3a4-ce3a-11f1-b31e-2f77c6693aab" data-action="Deal Block" data-label="Taema Tank Top (Women's)" data-dimension48="Taema Tank Top (Women's)" data-dimension25="$38">View Deal</a></p></div><div class="product"><a data-dimension112="7069a43a-ce3a-11f1-92c0-15ed0468cebd" data-action="Deal Block" data-label="Cormac Logo T-Shirt (Men's)" data-dimension48="Cormac Logo T-Shirt (Men's)" data-dimension25="$39" href="https://www.rei.com/product/C01312/arcteryx-cormac-logo-t-shirt-mens" 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:100.00%;"><img id="jJvHixb5ZKWc2ciLwkBt3J" name="Arc'teryx tee" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jJvHixb5ZKWc2ciLwkBt3J-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C01312/arcteryx-cormac-logo-t-shirt-mens" target="_blank" rel="nofollow" data-dimension112="7069a43a-ce3a-11f1-92c0-15ed0468cebd" data-action="Deal Block" data-label="Cormac Logo T-Shirt (Men's)" data-dimension48="Cormac Logo T-Shirt (Men's)" data-dimension25="$39">Cormac Logo T-Shirt (Men's): was $80 now $39</a></strong><br>If you're a big Arc'teryx fan (who isn't?) then you'll want to grab this t-shirt. It has the Arc'teryx logo front and center and is made of comfortable, breathable cotton jersey fabric.<a class="view-deal button" href="https://www.rei.com/product/C01312/arcteryx-cormac-logo-t-shirt-mens" target="_blank" rel="nofollow" data-dimension112="7069a43a-ce3a-11f1-92c0-15ed0468cebd" data-action="Deal Block" data-label="Cormac Logo T-Shirt (Men's)" data-dimension48="Cormac Logo T-Shirt (Men's)" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="6afc31ba-cec2-11f1-b54e-012b3a9d2ab0" data-action="Deal Block" data-label="Small Bird Cap" data-dimension48="Small Bird Cap" data-dimension25="$39" href="https://www.rei.com/product/C11817/arcteryx-small-bird-cap" 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:100.00%;"><img id="GhyZp7wzR7ogFWo5rp5cfZ" name="Arc'teryx hst" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GhyZp7wzR7ogFWo5rp5cfZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C11817/arcteryx-small-bird-cap" target="_blank" rel="nofollow" data-dimension112="6afc31ba-cec2-11f1-b54e-012b3a9d2ab0" data-action="Deal Block" data-label="Small Bird Cap" data-dimension48="Small Bird Cap" data-dimension25="$39">Small Bird Cap: was $50 now $39</a></strong><br>Need a new hat for the trails? The Arc'teryx Small Bird hat is made with breathable, stretchy material and a soft, quick-drying headband that will keep your head feeling airy and dry. It will get the job done on the toughest of routes. <a class="view-deal button" href="https://www.rei.com/product/C11817/arcteryx-small-bird-cap" target="_blank" rel="nofollow" data-dimension112="6afc31ba-cec2-11f1-b54e-012b3a9d2ab0" data-action="Deal Block" data-label="Small Bird Cap" data-dimension48="Small Bird Cap" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="7069a4bc-ce3a-11f1-b123-35461167aea6" data-action="Deal Block" data-label="Word Toque (Unisex)" data-dimension48="Word Toque (Unisex)" data-dimension25="$44" href="https://www.rei.com/product/C11815/arcteryx-color-block-toque" 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:100.00%;"><img id="KFMjo5N4Bne6DPzoJtjey5" name="Arc'teryx deals" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KFMjo5N4Bne6DPzoJtjey5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C11815/arcteryx-color-block-toque" target="_blank" rel="nofollow" data-dimension112="7069a4bc-ce3a-11f1-b123-35461167aea6" data-action="Deal Block" data-label="Word Toque (Unisex)" data-dimension48="Word Toque (Unisex)" data-dimension25="$44">Word Toque (Unisex): was $55 now $44</a></strong><br>A cozy, cuffed beanie never goes out of style, and with temperatures dropping, this blue staple is ready to keep you warm and fashionable, all fall and winter long.<a class="view-deal button" href="https://www.rei.com/product/C11815/arcteryx-color-block-toque" target="_blank" rel="nofollow" data-dimension112="7069a4bc-ce3a-11f1-b123-35461167aea6" data-action="Deal Block" data-label="Word Toque (Unisex)" data-dimension48="Word Toque (Unisex)" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="6afc323c-cec2-11f1-b339-7141bbc60ef7" data-action="Deal Block" data-label="Base Layer Bottoms (Women's)" data-dimension48="Base Layer Bottoms (Women's)" data-dimension25="$49" href="https://www.rei.com/product/209252/arcteryx-rho-base-layer-bottoms-womens?color=BLACK" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:588px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="rn5oNYv8T4jW6o67MGfR9B" name="Rho Base Layer" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rn5oNYv8T4jW6o67MGfR9B-1920-80.jpg" mos="" align="middle" fullscreen="" width="588" height="588" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/209252/arcteryx-rho-base-layer-bottoms-womens?color=BLACK" target="_blank" rel="nofollow" data-dimension112="6afc323c-cec2-11f1-b339-7141bbc60ef7" data-action="Deal Block" data-label="Base Layer Bottoms (Women's)" data-dimension48="Base Layer Bottoms (Women's)" data-dimension25="$49">Base Layer Bottoms (Women's): was $100 now $49</a></strong><br>These heavyweight bottoms from Arc’teryx just got a massive discount. Arc’teryx’s Polygiene treatment helps with odor, while the Torrent brushed fleece is soft against your skin. <a class="view-deal button" href="https://www.rei.com/product/209252/arcteryx-rho-base-layer-bottoms-womens?color=BLACK" target="_blank" rel="nofollow" data-dimension112="6afc323c-cec2-11f1-b339-7141bbc60ef7" data-action="Deal Block" data-label="Base Layer Bottoms (Women's)" data-dimension48="Base Layer Bottoms (Women's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="7069a52a-ce3a-11f1-a050-ed45b7697e73" data-action="Deal Block" data-label="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension48="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension25="$55" href="https://www.rei.com/product/218811/arcteryx-cormac-crew-long-sleeve-shirt-mens?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1450px;"><p class="vanilla-image-block" style="padding-top:103.45%;"><img id="9ovahzghZXKKQwERkhLbWH" name="cormac" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9ovahzghZXKKQwERkhLbWH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1450" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/218811/arcteryx-cormac-crew-long-sleeve-shirt-mens?" target="_blank" rel="nofollow" data-dimension112="7069a52a-ce3a-11f1-a050-ed45b7697e73" data-action="Deal Block" data-label="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension48="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension25="$55">Cormac Crew Long-Sleeve Shirt (Men's): was $80 now $55</a></strong><br>This long-sleeved exercise top was inspired by running apparel, but then adapted to make it suitable for mountain-based high-intensity activities. It's breathable, maximizes airflow, and is designed to reduce chafing. <a class="view-deal button" href="https://www.rei.com/product/218811/arcteryx-cormac-crew-long-sleeve-shirt-mens?" target="_blank" rel="nofollow" data-dimension112="7069a52a-ce3a-11f1-a050-ed45b7697e73" data-action="Deal Block" data-label="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension48="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension25="$55">View Deal</a></p></div><div class="product"><a data-dimension112="7069a598-ce3a-11f1-9ea6-fde28fa3d81e" data-action="Deal Block" data-label="Cranbrook Hat" data-dimension48="Cranbrook Hat" data-dimension25="$68" href="https://www.rei.com/product/246886/arcteryx-cranbrook-hat" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:588px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="x8NaJfMivLbsqngaKxLaKZ" name="Arc'teryx bucket hat" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/x8NaJfMivLbsqngaKxLaKZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="588" height="588" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you have some backcountry adventures planned, this is the hat you'll want to bring along. The Arc'teryx Cranbrook hat has a wide brim that shades your face, ears and neck from the sun, and it's ventilated to keep you nice and cool. <a class="view-deal button" href="https://www.rei.com/product/246886/arcteryx-cranbrook-hat" target="_blank" rel="nofollow" data-dimension112="7069a598-ce3a-11f1-9ea6-fde28fa3d81e" data-action="Deal Block" data-label="Cranbrook Hat" data-dimension48="Cranbrook Hat" data-dimension25="$68">View Deal</a></p></div><div class="product"><a data-dimension112="7069a610-ce3a-11f1-92f0-c50a0fcc37f6" data-action="Deal Block" data-label="Incendo Pants (Men's)" data-dimension48="Incendo Pants (Men's)" data-dimension25="$90" href="https://www.rei.com/product/229268/arcteryx-incendo-pants-mens" 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:100.00%;"><img id="KfdPeGj43M8ocSgpPLLmjZ" name="incendo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KfdPeGj43M8ocSgpPLLmjZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/229268/arcteryx-incendo-pants-mens" target="_blank" rel="nofollow" data-dimension112="7069a610-ce3a-11f1-92f0-c50a0fcc37f6" data-action="Deal Block" data-label="Incendo Pants (Men's)" data-dimension48="Incendo Pants (Men's)" data-dimension25="$90">Incendo Pants (Men's): was $130 now $90</a></strong><br>If you have some hikes or excursions on your agenda, these pants will be your go to. Their breathable, 4-way stretch nylon fabric was built for movement and their durable, air permeable and water repellent properties will keep you protected from the elements. <a class="view-deal button" href="https://www.rei.com/product/229268/arcteryx-incendo-pants-mens" target="_blank" rel="nofollow" data-dimension112="7069a610-ce3a-11f1-92f0-c50a0fcc37f6" data-action="Deal Block" data-label="Incendo Pants (Men's)" data-dimension48="Incendo Pants (Men's)" data-dimension25="$90">View Deal</a></p></div><div class="product"><a data-dimension112="7069a67e-ce3a-11f1-9888-63f4d784fa7e" data-action="Deal Block" data-label="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension48="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension25="$95" href="https://www.rei.com/product/C11758/arcteryx-satoro-merino-wool-crew-neck-long-sleeve-base-layer-top-womens" 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:100.00%;"><img id="ZsZ2QSG882yqPoyEzEAnXk" name="Arc'teryx long sleeve" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZsZ2QSG882yqPoyEzEAnXk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C11758/arcteryx-satoro-merino-wool-crew-neck-long-sleeve-base-layer-top-womens" target="_blank" rel="nofollow" data-dimension112="7069a67e-ce3a-11f1-9888-63f4d784fa7e" data-action="Deal Block" data-label="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension48="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension25="$95">Satoro Merino Wool Long-Sleeve Top (Women's): was $120 now $95</a></strong><br>This stylish long sleeve shirt is made with a soft, warm and breathable merino wool blend and it has a streamlined fit which layers easily. Its seams are also minimized to reduce irritation. It's the perfect shirt to help you move comfortably on hikes, runs and treks.<a class="view-deal button" href="https://www.rei.com/product/C11758/arcteryx-satoro-merino-wool-crew-neck-long-sleeve-base-layer-top-womens" target="_blank" rel="nofollow" data-dimension112="7069a67e-ce3a-11f1-9888-63f4d784fa7e" data-action="Deal Block" data-label="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension48="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension25="$95">View Deal</a></p></div><div class="product"><a data-dimension112="7069a6ec-ce3a-11f1-96d2-f1a6e1cf6262" data-action="Deal Block" data-label="Sima Hoody (Men's)" data-dimension48="Sima Hoody (Men's)" data-dimension25="$119" href="https://www.rei.com/product/C01372/arcteryx-sima-hoody-mens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1999px;"><p class="vanilla-image-block" style="padding-top:100.05%;"><img id="7ALJ3myuTiT2XsP4zXyHWg" name="Arc'teryx Sima" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7ALJ3myuTiT2XsP4zXyHWg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1999" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C01372/arcteryx-sima-hoody-mens" target="_blank" rel="nofollow" data-dimension112="7069a6ec-ce3a-11f1-96d2-f1a6e1cf6262" data-action="Deal Block" data-label="Sima Hoody (Men's)" data-dimension48="Sima Hoody (Men's)" data-dimension25="$119">Sima Hoody (Men's): was $160 now $119</a></strong><br>This chic zip-up jacket is designed with backpackers and hikers in mind. Weighing just over six ounces, it's made from synthetic fabric with UPF 50+ sun protection. Nice and breathable, the fabric is also moisture-wicking to keep you dry.<a class="view-deal button" href="https://www.rei.com/product/C01372/arcteryx-sima-hoody-mens" target="_blank" rel="nofollow" data-dimension112="7069a6ec-ce3a-11f1-96d2-f1a6e1cf6262" data-action="Deal Block" data-label="Sima Hoody (Men's)" data-dimension48="Sima Hoody (Men's)" data-dimension25="$119">View Deal</a></p></div><div class="product"><a data-dimension112="7069a778-ce3a-11f1-a502-831417a06770" data-action="Deal Block" data-label="Squamish Hoody (Men's)" data-dimension48="Squamish Hoody (Men's)" data-dimension25="$119" href="https://www.rei.com/product/C01005/arcteryx-squamish-hoody-mens" 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:100.00%;"><img id="gU2HZNV4QV8x48bVFDMoVL" name="Arc'teryx Squamish" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gU2HZNV4QV8x48bVFDMoVL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C01005/arcteryx-squamish-hoody-mens" target="_blank" rel="nofollow" data-dimension112="7069a778-ce3a-11f1-a502-831417a06770" data-action="Deal Block" data-label="Squamish Hoody (Men's)" data-dimension48="Squamish Hoody (Men's)" data-dimension25="$119">Squamish Hoody (Men's): was $200 now $119</a></strong><br>The Arc'teryx Squamish Hoody is completely windproof and finished with DWR, making it a versatile outer layer for those nippy wintry hikes. There's even a capped hood for keeping your face dry. There are currently six colors discounted at varying price points. <a class="view-deal button" href="https://www.rei.com/product/C01005/arcteryx-squamish-hoody-mens" target="_blank" rel="nofollow" data-dimension112="7069a778-ce3a-11f1-a502-831417a06770" data-action="Deal Block" data-label="Squamish Hoody (Men's)" data-dimension48="Squamish Hoody (Men's)" data-dimension25="$119">View Deal</a></p></div><div class="product"><a data-dimension112="7069a7f0-ce3a-11f1-92b4-f5a843a0d9a2" data-action="Deal Block" data-label="Atom Insulated Hoody (Men's)" data-dimension48="Atom Insulated Hoody (Men's)" data-dimension25="$199" href="https://www.rei.com/product/243175/arcteryx-atom-insulated-hoody-mens?" 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:100.00%;"><img id="hU57P6aYLHiVCsRgboxC6R" name="Arc'teryx" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hU57P6aYLHiVCsRgboxC6R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/243175/arcteryx-atom-insulated-hoody-mens?" target="_blank" rel="nofollow" data-dimension112="7069a7f0-ce3a-11f1-92b4-f5a843a0d9a2" data-action="Deal Block" data-label="Atom Insulated Hoody (Men's)" data-dimension48="Atom Insulated Hoody (Men's)" data-dimension25="$199">Atom Insulated Hoody (Men's): was $300 now $199</a></strong><br>This deal is on the men’s Arc’teryx Atom Insulated Hoody, which is available in four different colors that are now on sale. Lightweight and weather-resistant, warm yet breathable, this high-tech piece of gorpware is fully worth the hype.<a class="view-deal button" href="https://www.rei.com/product/243175/arcteryx-atom-insulated-hoody-mens?" target="_blank" rel="nofollow" data-dimension112="7069a7f0-ce3a-11f1-92b4-f5a843a0d9a2" data-action="Deal Block" data-label="Atom Insulated Hoody (Men's)" data-dimension48="Atom Insulated Hoody (Men's)" data-dimension25="$199">View Deal</a></p></div><div class="product"><a data-dimension112="7069a8b8-ce3a-11f1-aac9-3bff2f05fec2" data-action="Deal Block" data-label="Beta SL Jacket (Men's)" data-dimension48="Beta SL Jacket (Men's)" data-dimension25="$299" href="https://www.rei.com/product/235112/arcteryx-beta-sl-jacket-mens" 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:100.00%;"><img id="qb97kzq9mCRC8aoRkEXVCX" name="Arc'teryx Beta" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/qb97kzq9mCRC8aoRkEXVCX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/235112/arcteryx-beta-sl-jacket-mens" target="_blank" rel="nofollow" data-dimension112="7069a8b8-ce3a-11f1-aac9-3bff2f05fec2" data-action="Deal Block" data-label="Beta SL Jacket (Men's)" data-dimension48="Beta SL Jacket (Men's)" data-dimension25="$299">Beta SL Jacket (Men's): was $500 now $299</a></strong><br>Lightweight, comfortable and breathable, this durable waterproof and windproof jacket will protect you from the elements without sacrificing features or packability. It's a great option for layering or wearing on its own. <a class="view-deal button" href="https://www.rei.com/product/235112/arcteryx-beta-sl-jacket-mens" target="_blank" rel="nofollow" data-dimension112="7069a8b8-ce3a-11f1-aac9-3bff2f05fec2" data-action="Deal Block" data-label="Beta SL Jacket (Men's)" data-dimension48="Beta SL Jacket (Men's)" data-dimension25="$299">View Deal</a></p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/rei-is-taking-up-to-50-percent-off-best-selling-arcteryx-gear-for-fall-here-are-my-11-favorite-deals</link>
                                                                            <description>
                            <![CDATA[ REI is hosting a huge sale on Arc'teryx fall apparel. Here are my favorite deals to shop now from $38. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">dC9cK86mV49Zm5jHnam92N</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XJWohJ2qmbomBLVhRBzewn-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 17:33:49 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 09:16:24 +0000</updated>
                                                                                                                                            <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Olivia Halevy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/YAg7Fmh9dGKbg3hULBMWiU-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Olivia is a Deals Writer at Tom’s Guide. She loves all things lifestyle, shopping and sourcing the best deals from some of the top brands, retailers and websites around. From fashion and beauty to smart home and tech, she has an eye for finding practical, stylish, and reasonably-priced items that help make life simpler (and a little more aesthetically-pleasing).&amp;nbsp;Olivia has over five years of experience writing lifestyle, commerce, and branded content for &lt;a href=&quot;http://patch.com/&quot;&gt;Patch.com&lt;/a&gt;. She&#039;s covered major shopping holidays like Amazon Prime Day, Black Friday and Cyber Monday. In her free time, she enjoys trying out new exercise classes, binge-watching the latest viral TV shows, cooking, spending time with family and taking long walks with her dog, Gus.&amp;nbsp;&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/XJWohJ2qmbomBLVhRBzewn-1920-80.jpg">
                                                            <media:credit><![CDATA[REI / edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Arc&#039;teryx]]></media:description>                                                            <media:text><![CDATA[Arc&#039;teryx]]></media:text>
                                <media:title type="plain"><![CDATA[Arc&#039;teryx]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XJWohJ2qmbomBLVhRBzewn-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Arc'teryx is commonly known for its winter gear, but many of its best-selling pieces are also great for fall. From lightweight layers to hiking pants and rain jackets, they have plenty of high-quality styles built for the changing seasons ahead. </p><p>Case in point: <a href="https://www.rei.com/b/arcteryx/f/scd-deals?" target="_blank" rel="nofollow">REI is currently knocking up to 50% off best-selling Arc'teryx apparel for fall</a>. Whether you’re planning alpine hikes, backcountry trail rides or you simply want to spend more time in the great outdoors, the Arc'teryx sale is the perfect opportunity to invest in top-tier gear for all your upcoming adventures. </p><p>So don't wait! Keep scrolling to check out the rest of my favorite finds from the Arc'teryx sale at REI.  </p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><a href="https://www.rei.com/b/arcteryx/f/scd-deals" target="_blank" rel="nofollow"><strong>shop all Arc'teryx deals at REI</strong></a></li><li><strong>Arc'teryx Taema Tank Top (Women's): </strong><a href="https://www.rei.com/product/C05677/arcteryx-taema-tank-top-womens" target="_blank" rel="nofollow"><strong>was $60 now $38</strong></a></li><li><strong>Arc'teryx Cormac Logo T-Shirt (Men's): </strong><a href="https://www.rei.com/product/C01312/arcteryx-cormac-logo-t-shirt-mens" target="_blank" rel="nofollow"><strong>was $80 now $39</strong></a></li><li><strong>Arc'teryx Cormac Crew Long-Sleeve Shirt (Men's): </strong><a href="https://www.rei.com/product/218811/arcteryx-cormac-crew-long-sleeve-shirt-mens?" target="_blank" rel="nofollow"><strong>was $80 now $55</strong></a></li><li><strong>Arc'teryx Satoro Merino Wool Long-Sleeve Top (Women's): </strong><a href="https://www.rei.com/product/C11758/arcteryx-satoro-merino-wool-crew-neck-long-sleeve-base-layer-top-womens" target="_blank" rel="nofollow"><strong>was $120 now $95</strong></a></li><li><strong>Arc'teryx Atom Insulated Hoody (Men's): </strong><a href="https://www.rei.com/product/243175/arcteryx-atom-insulated-hoody-mens?" target="_blank" rel="nofollow"><strong>was $300 now $199</strong></a></li><li><strong>Arc'teryx Beta SL Jacket (Men's): </strong><a href="https://www.rei.com/product/235112/arcteryx-beta-sl-jacket-mens" target="_blank" rel="nofollow"><strong>was $500 now $299</strong></a></li></ul><h3 class="article-body__section" id="section-arc-teryx-deals"><span>Arc'teryx Deals </span></h3><div class="product"><a data-dimension112="7069a3a4-ce3a-11f1-b31e-2f77c6693aab" data-action="Deal Block" data-label="Taema Tank Top (Women's)" data-dimension48="Taema Tank Top (Women's)" data-dimension25="$38" href="https://www.rei.com/product/C05677/arcteryx-taema-tank-top-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="rXhnnkZbPZd2ntrTrKECK3" name="Taema tank top" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rXhnnkZbPZd2ntrTrKECK3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C05677/arcteryx-taema-tank-top-womens" target="_blank" rel="nofollow" data-dimension112="7069a3a4-ce3a-11f1-b31e-2f77c6693aab" data-action="Deal Block" data-label="Taema Tank Top (Women's)" data-dimension48="Taema Tank Top (Women's)" data-dimension25="$38">Taema Tank Top (Women's): was $60 now $38</a></strong><br>This racerback, crew neck tank top features a breathable fabric that wicks moisture away and dries quickly, making it perfect for longer hikes. It's soft, comfortable and built for performance. <a class="view-deal button" href="https://www.rei.com/product/C05677/arcteryx-taema-tank-top-womens" target="_blank" rel="nofollow" data-dimension112="7069a3a4-ce3a-11f1-b31e-2f77c6693aab" data-action="Deal Block" data-label="Taema Tank Top (Women's)" data-dimension48="Taema Tank Top (Women's)" data-dimension25="$38">View Deal</a></p></div><div class="product"><a data-dimension112="7069a43a-ce3a-11f1-92c0-15ed0468cebd" data-action="Deal Block" data-label="Cormac Logo T-Shirt (Men's)" data-dimension48="Cormac Logo T-Shirt (Men's)" data-dimension25="$39" href="https://www.rei.com/product/C01312/arcteryx-cormac-logo-t-shirt-mens" 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:100.00%;"><img id="jJvHixb5ZKWc2ciLwkBt3J" name="Arc'teryx tee" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jJvHixb5ZKWc2ciLwkBt3J-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C01312/arcteryx-cormac-logo-t-shirt-mens" target="_blank" rel="nofollow" data-dimension112="7069a43a-ce3a-11f1-92c0-15ed0468cebd" data-action="Deal Block" data-label="Cormac Logo T-Shirt (Men's)" data-dimension48="Cormac Logo T-Shirt (Men's)" data-dimension25="$39">Cormac Logo T-Shirt (Men's): was $80 now $39</a></strong><br>If you're a big Arc'teryx fan (who isn't?) then you'll want to grab this t-shirt. It has the Arc'teryx logo front and center and is made of comfortable, breathable cotton jersey fabric.<a class="view-deal button" href="https://www.rei.com/product/C01312/arcteryx-cormac-logo-t-shirt-mens" target="_blank" rel="nofollow" data-dimension112="7069a43a-ce3a-11f1-92c0-15ed0468cebd" data-action="Deal Block" data-label="Cormac Logo T-Shirt (Men's)" data-dimension48="Cormac Logo T-Shirt (Men's)" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="6afc31ba-cec2-11f1-b54e-012b3a9d2ab0" data-action="Deal Block" data-label="Small Bird Cap" data-dimension48="Small Bird Cap" data-dimension25="$39" href="https://www.rei.com/product/C11817/arcteryx-small-bird-cap" 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:100.00%;"><img id="GhyZp7wzR7ogFWo5rp5cfZ" name="Arc'teryx hst" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GhyZp7wzR7ogFWo5rp5cfZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C11817/arcteryx-small-bird-cap" target="_blank" rel="nofollow" data-dimension112="6afc31ba-cec2-11f1-b54e-012b3a9d2ab0" data-action="Deal Block" data-label="Small Bird Cap" data-dimension48="Small Bird Cap" data-dimension25="$39">Small Bird Cap: was $50 now $39</a></strong><br>Need a new hat for the trails? The Arc'teryx Small Bird hat is made with breathable, stretchy material and a soft, quick-drying headband that will keep your head feeling airy and dry. It will get the job done on the toughest of routes. <a class="view-deal button" href="https://www.rei.com/product/C11817/arcteryx-small-bird-cap" target="_blank" rel="nofollow" data-dimension112="6afc31ba-cec2-11f1-b54e-012b3a9d2ab0" data-action="Deal Block" data-label="Small Bird Cap" data-dimension48="Small Bird Cap" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="7069a4bc-ce3a-11f1-b123-35461167aea6" data-action="Deal Block" data-label="Word Toque (Unisex)" data-dimension48="Word Toque (Unisex)" data-dimension25="$44" href="https://www.rei.com/product/C11815/arcteryx-color-block-toque" 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:100.00%;"><img id="KFMjo5N4Bne6DPzoJtjey5" name="Arc'teryx deals" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KFMjo5N4Bne6DPzoJtjey5-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C11815/arcteryx-color-block-toque" target="_blank" rel="nofollow" data-dimension112="7069a4bc-ce3a-11f1-b123-35461167aea6" data-action="Deal Block" data-label="Word Toque (Unisex)" data-dimension48="Word Toque (Unisex)" data-dimension25="$44">Word Toque (Unisex): was $55 now $44</a></strong><br>A cozy, cuffed beanie never goes out of style, and with temperatures dropping, this blue staple is ready to keep you warm and fashionable, all fall and winter long.<a class="view-deal button" href="https://www.rei.com/product/C11815/arcteryx-color-block-toque" target="_blank" rel="nofollow" data-dimension112="7069a4bc-ce3a-11f1-b123-35461167aea6" data-action="Deal Block" data-label="Word Toque (Unisex)" data-dimension48="Word Toque (Unisex)" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="6afc323c-cec2-11f1-b339-7141bbc60ef7" data-action="Deal Block" data-label="Base Layer Bottoms (Women's)" data-dimension48="Base Layer Bottoms (Women's)" data-dimension25="$49" href="https://www.rei.com/product/209252/arcteryx-rho-base-layer-bottoms-womens?color=BLACK" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:588px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="rn5oNYv8T4jW6o67MGfR9B" name="Rho Base Layer" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rn5oNYv8T4jW6o67MGfR9B-1920-80.jpg" mos="" align="middle" fullscreen="" width="588" height="588" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/209252/arcteryx-rho-base-layer-bottoms-womens?color=BLACK" target="_blank" rel="nofollow" data-dimension112="6afc323c-cec2-11f1-b339-7141bbc60ef7" data-action="Deal Block" data-label="Base Layer Bottoms (Women's)" data-dimension48="Base Layer Bottoms (Women's)" data-dimension25="$49">Base Layer Bottoms (Women's): was $100 now $49</a></strong><br>These heavyweight bottoms from Arc’teryx just got a massive discount. Arc’teryx’s Polygiene treatment helps with odor, while the Torrent brushed fleece is soft against your skin. <a class="view-deal button" href="https://www.rei.com/product/209252/arcteryx-rho-base-layer-bottoms-womens?color=BLACK" target="_blank" rel="nofollow" data-dimension112="6afc323c-cec2-11f1-b339-7141bbc60ef7" data-action="Deal Block" data-label="Base Layer Bottoms (Women's)" data-dimension48="Base Layer Bottoms (Women's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="7069a52a-ce3a-11f1-a050-ed45b7697e73" data-action="Deal Block" data-label="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension48="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension25="$55" href="https://www.rei.com/product/218811/arcteryx-cormac-crew-long-sleeve-shirt-mens?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1450px;"><p class="vanilla-image-block" style="padding-top:103.45%;"><img id="9ovahzghZXKKQwERkhLbWH" name="cormac" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9ovahzghZXKKQwERkhLbWH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1450" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/218811/arcteryx-cormac-crew-long-sleeve-shirt-mens?" target="_blank" rel="nofollow" data-dimension112="7069a52a-ce3a-11f1-a050-ed45b7697e73" data-action="Deal Block" data-label="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension48="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension25="$55">Cormac Crew Long-Sleeve Shirt (Men's): was $80 now $55</a></strong><br>This long-sleeved exercise top was inspired by running apparel, but then adapted to make it suitable for mountain-based high-intensity activities. It's breathable, maximizes airflow, and is designed to reduce chafing. <a class="view-deal button" href="https://www.rei.com/product/218811/arcteryx-cormac-crew-long-sleeve-shirt-mens?" target="_blank" rel="nofollow" data-dimension112="7069a52a-ce3a-11f1-a050-ed45b7697e73" data-action="Deal Block" data-label="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension48="Cormac Crew Long-Sleeve Shirt (Men's)" data-dimension25="$55">View Deal</a></p></div><div class="product"><a data-dimension112="7069a598-ce3a-11f1-9ea6-fde28fa3d81e" data-action="Deal Block" data-label="Cranbrook Hat" data-dimension48="Cranbrook Hat" data-dimension25="$68" href="https://www.rei.com/product/246886/arcteryx-cranbrook-hat" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:588px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="x8NaJfMivLbsqngaKxLaKZ" name="Arc'teryx bucket hat" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/x8NaJfMivLbsqngaKxLaKZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="588" height="588" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you have some backcountry adventures planned, this is the hat you'll want to bring along. The Arc'teryx Cranbrook hat has a wide brim that shades your face, ears and neck from the sun, and it's ventilated to keep you nice and cool. <a class="view-deal button" href="https://www.rei.com/product/246886/arcteryx-cranbrook-hat" target="_blank" rel="nofollow" data-dimension112="7069a598-ce3a-11f1-9ea6-fde28fa3d81e" data-action="Deal Block" data-label="Cranbrook Hat" data-dimension48="Cranbrook Hat" data-dimension25="$68">View Deal</a></p></div><div class="product"><a data-dimension112="7069a610-ce3a-11f1-92f0-c50a0fcc37f6" data-action="Deal Block" data-label="Incendo Pants (Men's)" data-dimension48="Incendo Pants (Men's)" data-dimension25="$90" href="https://www.rei.com/product/229268/arcteryx-incendo-pants-mens" 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:100.00%;"><img id="KfdPeGj43M8ocSgpPLLmjZ" name="incendo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KfdPeGj43M8ocSgpPLLmjZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/229268/arcteryx-incendo-pants-mens" target="_blank" rel="nofollow" data-dimension112="7069a610-ce3a-11f1-92f0-c50a0fcc37f6" data-action="Deal Block" data-label="Incendo Pants (Men's)" data-dimension48="Incendo Pants (Men's)" data-dimension25="$90">Incendo Pants (Men's): was $130 now $90</a></strong><br>If you have some hikes or excursions on your agenda, these pants will be your go to. Their breathable, 4-way stretch nylon fabric was built for movement and their durable, air permeable and water repellent properties will keep you protected from the elements. <a class="view-deal button" href="https://www.rei.com/product/229268/arcteryx-incendo-pants-mens" target="_blank" rel="nofollow" data-dimension112="7069a610-ce3a-11f1-92f0-c50a0fcc37f6" data-action="Deal Block" data-label="Incendo Pants (Men's)" data-dimension48="Incendo Pants (Men's)" data-dimension25="$90">View Deal</a></p></div><div class="product"><a data-dimension112="7069a67e-ce3a-11f1-9888-63f4d784fa7e" data-action="Deal Block" data-label="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension48="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension25="$95" href="https://www.rei.com/product/C11758/arcteryx-satoro-merino-wool-crew-neck-long-sleeve-base-layer-top-womens" 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:100.00%;"><img id="ZsZ2QSG882yqPoyEzEAnXk" name="Arc'teryx long sleeve" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZsZ2QSG882yqPoyEzEAnXk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C11758/arcteryx-satoro-merino-wool-crew-neck-long-sleeve-base-layer-top-womens" target="_blank" rel="nofollow" data-dimension112="7069a67e-ce3a-11f1-9888-63f4d784fa7e" data-action="Deal Block" data-label="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension48="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension25="$95">Satoro Merino Wool Long-Sleeve Top (Women's): was $120 now $95</a></strong><br>This stylish long sleeve shirt is made with a soft, warm and breathable merino wool blend and it has a streamlined fit which layers easily. Its seams are also minimized to reduce irritation. It's the perfect shirt to help you move comfortably on hikes, runs and treks.<a class="view-deal button" href="https://www.rei.com/product/C11758/arcteryx-satoro-merino-wool-crew-neck-long-sleeve-base-layer-top-womens" target="_blank" rel="nofollow" data-dimension112="7069a67e-ce3a-11f1-9888-63f4d784fa7e" data-action="Deal Block" data-label="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension48="Satoro Merino Wool Long-Sleeve Top (Women's)" data-dimension25="$95">View Deal</a></p></div><div class="product"><a data-dimension112="7069a6ec-ce3a-11f1-96d2-f1a6e1cf6262" data-action="Deal Block" data-label="Sima Hoody (Men's)" data-dimension48="Sima Hoody (Men's)" data-dimension25="$119" href="https://www.rei.com/product/C01372/arcteryx-sima-hoody-mens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1999px;"><p class="vanilla-image-block" style="padding-top:100.05%;"><img id="7ALJ3myuTiT2XsP4zXyHWg" name="Arc'teryx Sima" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7ALJ3myuTiT2XsP4zXyHWg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1999" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C01372/arcteryx-sima-hoody-mens" target="_blank" rel="nofollow" data-dimension112="7069a6ec-ce3a-11f1-96d2-f1a6e1cf6262" data-action="Deal Block" data-label="Sima Hoody (Men's)" data-dimension48="Sima Hoody (Men's)" data-dimension25="$119">Sima Hoody (Men's): was $160 now $119</a></strong><br>This chic zip-up jacket is designed with backpackers and hikers in mind. Weighing just over six ounces, it's made from synthetic fabric with UPF 50+ sun protection. Nice and breathable, the fabric is also moisture-wicking to keep you dry.<a class="view-deal button" href="https://www.rei.com/product/C01372/arcteryx-sima-hoody-mens" target="_blank" rel="nofollow" data-dimension112="7069a6ec-ce3a-11f1-96d2-f1a6e1cf6262" data-action="Deal Block" data-label="Sima Hoody (Men's)" data-dimension48="Sima Hoody (Men's)" data-dimension25="$119">View Deal</a></p></div><div class="product"><a data-dimension112="7069a778-ce3a-11f1-a502-831417a06770" data-action="Deal Block" data-label="Squamish Hoody (Men's)" data-dimension48="Squamish Hoody (Men's)" data-dimension25="$119" href="https://www.rei.com/product/C01005/arcteryx-squamish-hoody-mens" 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:100.00%;"><img id="gU2HZNV4QV8x48bVFDMoVL" name="Arc'teryx Squamish" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gU2HZNV4QV8x48bVFDMoVL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/C01005/arcteryx-squamish-hoody-mens" target="_blank" rel="nofollow" data-dimension112="7069a778-ce3a-11f1-a502-831417a06770" data-action="Deal Block" data-label="Squamish Hoody (Men's)" data-dimension48="Squamish Hoody (Men's)" data-dimension25="$119">Squamish Hoody (Men's): was $200 now $119</a></strong><br>The Arc'teryx Squamish Hoody is completely windproof and finished with DWR, making it a versatile outer layer for those nippy wintry hikes. There's even a capped hood for keeping your face dry. There are currently six colors discounted at varying price points. <a class="view-deal button" href="https://www.rei.com/product/C01005/arcteryx-squamish-hoody-mens" target="_blank" rel="nofollow" data-dimension112="7069a778-ce3a-11f1-a502-831417a06770" data-action="Deal Block" data-label="Squamish Hoody (Men's)" data-dimension48="Squamish Hoody (Men's)" data-dimension25="$119">View Deal</a></p></div><div class="product"><a data-dimension112="7069a7f0-ce3a-11f1-92b4-f5a843a0d9a2" data-action="Deal Block" data-label="Atom Insulated Hoody (Men's)" data-dimension48="Atom Insulated Hoody (Men's)" data-dimension25="$199" href="https://www.rei.com/product/243175/arcteryx-atom-insulated-hoody-mens?" 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:100.00%;"><img id="hU57P6aYLHiVCsRgboxC6R" name="Arc'teryx" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hU57P6aYLHiVCsRgboxC6R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/243175/arcteryx-atom-insulated-hoody-mens?" target="_blank" rel="nofollow" data-dimension112="7069a7f0-ce3a-11f1-92b4-f5a843a0d9a2" data-action="Deal Block" data-label="Atom Insulated Hoody (Men's)" data-dimension48="Atom Insulated Hoody (Men's)" data-dimension25="$199">Atom Insulated Hoody (Men's): was $300 now $199</a></strong><br>This deal is on the men’s Arc’teryx Atom Insulated Hoody, which is available in four different colors that are now on sale. Lightweight and weather-resistant, warm yet breathable, this high-tech piece of gorpware is fully worth the hype.<a class="view-deal button" href="https://www.rei.com/product/243175/arcteryx-atom-insulated-hoody-mens?" target="_blank" rel="nofollow" data-dimension112="7069a7f0-ce3a-11f1-92b4-f5a843a0d9a2" data-action="Deal Block" data-label="Atom Insulated Hoody (Men's)" data-dimension48="Atom Insulated Hoody (Men's)" data-dimension25="$199">View Deal</a></p></div><div class="product"><a data-dimension112="7069a8b8-ce3a-11f1-aac9-3bff2f05fec2" data-action="Deal Block" data-label="Beta SL Jacket (Men's)" data-dimension48="Beta SL Jacket (Men's)" data-dimension25="$299" href="https://www.rei.com/product/235112/arcteryx-beta-sl-jacket-mens" 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:100.00%;"><img id="qb97kzq9mCRC8aoRkEXVCX" name="Arc'teryx Beta" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/qb97kzq9mCRC8aoRkEXVCX-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/235112/arcteryx-beta-sl-jacket-mens" target="_blank" rel="nofollow" data-dimension112="7069a8b8-ce3a-11f1-aac9-3bff2f05fec2" data-action="Deal Block" data-label="Beta SL Jacket (Men's)" data-dimension48="Beta SL Jacket (Men's)" data-dimension25="$299">Beta SL Jacket (Men's): was $500 now $299</a></strong><br>Lightweight, comfortable and breathable, this durable waterproof and windproof jacket will protect you from the elements without sacrificing features or packability. It's a great option for layering or wearing on its own. <a class="view-deal button" href="https://www.rei.com/product/235112/arcteryx-beta-sl-jacket-mens" target="_blank" rel="nofollow" data-dimension112="7069a8b8-ce3a-11f1-aac9-3bff2f05fec2" data-action="Deal Block" data-label="Beta SL Jacket (Men's)" data-dimension48="Beta SL Jacket (Men's)" data-dimension25="$299">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 12 women's sneaker deals on Nike, New Balance, Puma and more – from $56 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you're looking to add some new sneakers to your daily rotation, then make sure to check out Amazon. The online retailer has a huge range of offers on shoes right now, including some great sneakers for women.</p><p>For this article, I've rounded up 12 styles from a range of cool brands, including New Balance, Puma, Nike, and more. All of these picks are currently discounted, with up to 50% off the retail price of some pairs.</p><p>Amazon deals change quickly, so if you spot something that you like, run, don't walk, to these brilliant deals and add some new flair to your shoe collection today.</p>        <div class="featured_product_block featured_block_hero" data-id="72c5eb44-ce03-11f1-a71a-3b5b948e0431">            <a href="https://www.amazon.com/adidas-Womens-Gamecourt-Tennis-WhiteZeroMetallicWhite/dp/B0FW51R3X1/" data-model-name="Adidas Gamecourt 3 Tennis Sneakers" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:144.51%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/M4FmFLUS9VCmje8Br33GmK.jpg" alt="Adidas Women's Gamecourt 3 Tennis, White/zero Metallic/white, 9"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Adidas Gamecourt 3 Tennis Sneakers</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ebc6-ce03-11f1-8a52-51e8d962a610">            <a href="https://www.amazon.com/Karl-Lagerfeld-Paris-Womens-Sneaker/dp/B091V6SQQC/" data-model-name="Karl Lagerfeld Women's Cate Lace Up Sneaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:66.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CysN4sKE5mJaKp5ULohK2L.jpg" alt="Karl Lagerfeld Women's Cate Lace Up Sneaker, Black, 6.5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Karl Lagerfeld Women's Cate Lace Up Sneaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ec3e-ce03-11f1-a932-65458be5edd4">            <a href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-MORGANITE/dp/B0FV7M4Z2R/" data-model-name="Asics Women's Gel-Venture" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/DKQ6pgJ6ccsYyzfhdX5M8L.jpg" alt="Asics Women's Gel-Venture 11 Running Shoes, 8.5, Black/morganite"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Asics Women's Gel-Venture</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ecb6-ce03-11f1-b695-63f5dc80f1f7">            <a href="https://www.amazon.com/Nike-Womens-Cortez-Sneakers-Varsity/dp/B0D1YFQSBK/" data-model-name="Nike Women's Cortez Sneakers" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:75.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZxE3d5fcHu2AjqBiQTZ7WL.jpg" alt="Nike Women's Cortez Sneakers, White/varsity Red/varsity Blue, 8.5 Medium Us"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Nike Women's Cortez Sneakers</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ed2e-ce03-11f1-a507-e3717bbc341d">            <a href="https://www.amazon.com/Franco-Sarto-Womens-Felina-Sneaker/dp/B0FXBS1RHK/" data-model-name="Franco Sarto Women's Felina Sneaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cQnF9So9g2wGQrFw6JeijL.jpg" alt="Franco Sarto Women's Felina Sneaker Cloud White Nylon 7.5 M"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Franco Sarto Women's Felina Sneaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ed9c-ce03-11f1-bd82-51516f27c370">            <a href="https://www.amazon.com/New-Balance-Womens-Sneaker-Nimbus/dp/B093QK8S8R/" data-model-name="New Balance Women's 574 Core Sneaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TuiF9YxC9KhqqkTdS3aZmL.jpg" alt="New Balance Women's 574 Core Sneaker, Nimbus Cloud/nb White, 7 B"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">New Balance Women's 574 Core Sneaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ee14-ce03-11f1-b74d-55388f84e1a3">            <a href="https://www.amazon.com/New-Balance-Womens-Delray-Boysenberry/dp/B0DJV366W9/" data-model-name="New Balance FuelCell Delray V2 Tennis Sneakers" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CQDpCoQ9jJi5ARdGtwaUxL.jpg" alt="New Balance Women's Coco Delray V2 Hard Court Tennis Shoe, Apollo Gold/boysenberry, 8 M"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">New Balance FuelCell Delray V2 Tennis Sneakers</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ee82-ce03-11f1-8257-61eec769a56c">            <a href="https://www.amazon.com/Nike-Womens-Sneaker-Black-8/dp/B0BS6N47FL/" data-model-name="Nike Women's W Free Metcon Training Shoes" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/DDgGKRMd2v2Nsb5mGu4c5M.jpg" alt="Nike Women's W Free Metcon 5 Training Shoes, Black White Anthracite, 8"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Nike Women's W Free Metcon Training Shoes</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5eefa-ce03-11f1-9142-bfffe83a5537">            <a href="https://www.amazon.com/SKECHERS-Womens-Pickleball-Viper-Sneaker/dp/B0DWQG6Y6Z/" data-model-name="Skechers Women's Pickleball Viper Court Pro 2.0 Sneaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:75.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Q364zk9PDxe7mLapjzAaAM.jpg" alt="Skechers Women's Pickleball Viper Court Pro 2.0 Sneaker, Hot Pink, 8 Medium"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Skechers Women's Pickleball Viper Court Pro 2.0 Sneaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ef68-ce03-11f1-b63e-9f37c65df397">            <a href="https://www.amazon.com/PUMA-Womens-Speedcat-Shoes-Royal-Puma/dp/B0FBK4RRQT/" data-model-name="Puma Women's Speedcat OG Shoes" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/5Zr43Tso3EfpngXfTrTSkM.jpg" alt="Puma Women's Speedcat Og Shoes, Puma Team Royal-Puma White, 9"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Puma Women's Speedcat OG Shoes</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5efe0-ce03-11f1-ab26-f19a4950aac0">            <a href="https://www.amazon.com/Nike-Womens-Sneakers-White-Medium/dp/B08Q9Q27GQ/" data-model-name="Nike Women's Dunk Low Sneakers" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2aH7ogH8AdupJ8GJPpJenM.jpg" alt="Nike Women's Dunk Low Sneakers, White/black/white, 6 Medium Us"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Nike Women's Dunk Low Sneakers</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5f058-ce03-11f1-a409-ed32186f7e6c">            <a href="https://www.amazon.com/Brooks-Glycerin-Neutral-Running-Walking/dp/B0F5N9VN8S/" data-model-name="Brooks Women's Glycerin Flex Neutral Running Shoe" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/iiqbJvnHTzLD8DQQAtW8uM.jpg" alt="Brooks Women’s Glycerin Flex Neutral Running & Walking Shoe - White/black/gum - 9 Medium"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Brooks Women's Glycerin Flex Neutral Running Shoe</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/running/12-womens-sneaker-deals-on-nike-new-balance-puma-and-more-from-usd56</link>
                                                                            <description>
                            <![CDATA[ Add some cool new sneakers to your collection with these deals on 12 different styles for women– with up to 50% off the retail price. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">pogEYZJjHu7DvZFBrWBCSN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PjHjGSYLRAFYGuT9PN9nVZ-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 14:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Running]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Will Salmon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/HpRWP7Mh9ErgRGoTvZBbBJ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Will Salmon is Tom&#039;s Guide&#039;s Collections Editor, curating advice on the best products to spend your money on. Will has been writing about tech and entertainment for almost 20 years, including stints as GamesRadar+&#039;s Streaming Editor, editing comics website Newsarama, and writing for lots and lots of magazines.&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/PjHjGSYLRAFYGuT9PN9nVZ-1920-80.jpg">
                                                            <media:credit><![CDATA[Franco Sarto, New Balance, Asics, Puma, Nike / Edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of womens&#039; sneakers.]]></media:description>                                                            <media:text><![CDATA[A selection of womens&#039; sneakers.]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of womens&#039; sneakers.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PjHjGSYLRAFYGuT9PN9nVZ-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you're looking to add some new sneakers to your daily rotation, then make sure to check out Amazon. The online retailer has a huge range of offers on shoes right now, including some great sneakers for women.</p><p>For this article, I've rounded up 12 styles from a range of cool brands, including New Balance, Puma, Nike, and more. All of these picks are currently discounted, with up to 50% off the retail price of some pairs.</p><p>Amazon deals change quickly, so if you spot something that you like, run, don't walk, to these brilliant deals and add some new flair to your shoe collection today.</p>        <div class="featured_product_block featured_block_hero" data-id="72c5eb44-ce03-11f1-a71a-3b5b948e0431">            <a href="https://www.amazon.com/adidas-Womens-Gamecourt-Tennis-WhiteZeroMetallicWhite/dp/B0FW51R3X1/" data-model-name="Adidas Gamecourt 3 Tennis Sneakers" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:144.51%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/M4FmFLUS9VCmje8Br33GmK.jpg" alt="Adidas Women's Gamecourt 3 Tennis, White/zero Metallic/white, 9"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Adidas Gamecourt 3 Tennis Sneakers</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ebc6-ce03-11f1-8a52-51e8d962a610">            <a href="https://www.amazon.com/Karl-Lagerfeld-Paris-Womens-Sneaker/dp/B091V6SQQC/" data-model-name="Karl Lagerfeld Women's Cate Lace Up Sneaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:66.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CysN4sKE5mJaKp5ULohK2L.jpg" alt="Karl Lagerfeld Women's Cate Lace Up Sneaker, Black, 6.5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Karl Lagerfeld Women's Cate Lace Up Sneaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ec3e-ce03-11f1-a932-65458be5edd4">            <a href="https://www.amazon.com/ASICS-Womens-Gel-Pulse-Running-MORGANITE/dp/B0FV7M4Z2R/" data-model-name="Asics Women's Gel-Venture" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/DKQ6pgJ6ccsYyzfhdX5M8L.jpg" alt="Asics Women's Gel-Venture 11 Running Shoes, 8.5, Black/morganite"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Asics Women's Gel-Venture</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ecb6-ce03-11f1-b695-63f5dc80f1f7">            <a href="https://www.amazon.com/Nike-Womens-Cortez-Sneakers-Varsity/dp/B0D1YFQSBK/" data-model-name="Nike Women's Cortez Sneakers" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:75.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZxE3d5fcHu2AjqBiQTZ7WL.jpg" alt="Nike Women's Cortez Sneakers, White/varsity Red/varsity Blue, 8.5 Medium Us"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Nike Women's Cortez Sneakers</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ed2e-ce03-11f1-a507-e3717bbc341d">            <a href="https://www.amazon.com/Franco-Sarto-Womens-Felina-Sneaker/dp/B0FXBS1RHK/" data-model-name="Franco Sarto Women's Felina Sneaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cQnF9So9g2wGQrFw6JeijL.jpg" alt="Franco Sarto Women's Felina Sneaker Cloud White Nylon 7.5 M"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Franco Sarto Women's Felina Sneaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ed9c-ce03-11f1-bd82-51516f27c370">            <a href="https://www.amazon.com/New-Balance-Womens-Sneaker-Nimbus/dp/B093QK8S8R/" data-model-name="New Balance Women's 574 Core Sneaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TuiF9YxC9KhqqkTdS3aZmL.jpg" alt="New Balance Women's 574 Core Sneaker, Nimbus Cloud/nb White, 7 B"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">New Balance Women's 574 Core Sneaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ee14-ce03-11f1-b74d-55388f84e1a3">            <a href="https://www.amazon.com/New-Balance-Womens-Delray-Boysenberry/dp/B0DJV366W9/" data-model-name="New Balance FuelCell Delray V2 Tennis Sneakers" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CQDpCoQ9jJi5ARdGtwaUxL.jpg" alt="New Balance Women's Coco Delray V2 Hard Court Tennis Shoe, Apollo Gold/boysenberry, 8 M"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">New Balance FuelCell Delray V2 Tennis Sneakers</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ee82-ce03-11f1-8257-61eec769a56c">            <a href="https://www.amazon.com/Nike-Womens-Sneaker-Black-8/dp/B0BS6N47FL/" data-model-name="Nike Women's W Free Metcon Training Shoes" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/DDgGKRMd2v2Nsb5mGu4c5M.jpg" alt="Nike Women's W Free Metcon 5 Training Shoes, Black White Anthracite, 8"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Nike Women's W Free Metcon Training Shoes</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5eefa-ce03-11f1-9142-bfffe83a5537">            <a href="https://www.amazon.com/SKECHERS-Womens-Pickleball-Viper-Sneaker/dp/B0DWQG6Y6Z/" data-model-name="Skechers Women's Pickleball Viper Court Pro 2.0 Sneaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:75.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Q364zk9PDxe7mLapjzAaAM.jpg" alt="Skechers Women's Pickleball Viper Court Pro 2.0 Sneaker, Hot Pink, 8 Medium"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Skechers Women's Pickleball Viper Court Pro 2.0 Sneaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5ef68-ce03-11f1-b63e-9f37c65df397">            <a href="https://www.amazon.com/PUMA-Womens-Speedcat-Shoes-Royal-Puma/dp/B0FBK4RRQT/" data-model-name="Puma Women's Speedcat OG Shoes" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/5Zr43Tso3EfpngXfTrTSkM.jpg" alt="Puma Women's Speedcat Og Shoes, Puma Team Royal-Puma White, 9"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Puma Women's Speedcat OG Shoes</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5efe0-ce03-11f1-ab26-f19a4950aac0">            <a href="https://www.amazon.com/Nike-Womens-Sneakers-White-Medium/dp/B08Q9Q27GQ/" data-model-name="Nike Women's Dunk Low Sneakers" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2aH7ogH8AdupJ8GJPpJenM.jpg" alt="Nike Women's Dunk Low Sneakers, White/black/white, 6 Medium Us"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Nike Women's Dunk Low Sneakers</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="72c5f058-ce03-11f1-a409-ed32186f7e6c">            <a href="https://www.amazon.com/Brooks-Glycerin-Neutral-Running-Walking/dp/B0F5N9VN8S/" data-model-name="Brooks Women's Glycerin Flex Neutral Running Shoe" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/iiqbJvnHTzLD8DQQAtW8uM.jpg" alt="Brooks Women’s Glycerin Flex Neutral Running & Walking Shoe - White/black/gum - 9 Medium"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title">Brooks Women's Glycerin Flex Neutral Running Shoe</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ We named the Nike Pegasus 42 the best value running shoe on the market, and it's 42% off right now — plus 17 more of our favorite Nike running shoe deals ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It's a great day to buy a new pair of running shoes — even if your wallet is feeling the pinch. Don't hang around, the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best value running shoes</a> we've tested just got a big price cut!</p><p>The <a href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow">Nike Pegasus 42 are on sale from $82 at Nike</a>. These were already excellent value at full price, and with 42% off (a fitting discount for the 42nd version of the shoe) they're an absolute steal. They're versatile, smooth and great for both beginners and experienced runners alike.</p><p><strong>Note: </strong>prices vary depending on the size and color you choose. To find the best deals, check out any different color options available in your size. For more, see our <a href="https://www.tomsguide.com/wellness/fitness/nike-promo-codes">Nike promo codes</a>.</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/E9C7C6A6-9A88-4959-A67F-4D44FC67320F" target="_blank" rel="nofollow"><strong>shop Nike deals at Amazon</strong></a><strong></strong></li><li><strong>Nike Victori One Slides (Men's): </strong><a href="https://www.nike.com/t/victori-one-mens-slides-vrTGLL/CN9675-304" target="_blank" rel="nofollow"><strong>was $37 now from $27</strong></a></li><li><strong>Nike Uplift Sc Shoes (Women's): </strong><a href="https://www.amazon.com/Nike-Womens-Uplift-Sneaker-Black/dp/B0F13DYVP8" target="_blank" rel="nofollow"><strong>was $70 now from $49</strong></a></li><li><strong>Nike Downshifter 14 (Men's): </strong><a href="https://www.nike.com/t/downshifter-14-mens-road-running-shoe-wrouoOtz/IB1895-108" target="_blank" rel="nofollow"><strong>was $80 now from $49</strong></a></li><li><strong>Nike Flex Train Workout Shoes (Men's): </strong><a href="https://www.amazon.com/Nike-Train-Sneaker-Safety-Orange/dp/B0FBS23WGF" target="_blank" rel="nofollow"><strong>was $80 now from $59</strong></a></li><li><strong>Nike Pegasus 42 (Men's): </strong><a href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow"><strong>was $145 now from $82</strong></a><br><strong>Nike Zoom Fly 6 (Men's): </strong><a href="https://www.nike.com/t/zoom-fly-6-mens-road-racing-shoes-wn2ALjkm/IV6296-635" target="_blank" rel="nofollow"><strong>was $190 now from $143</strong></a></li><li><strong>Nike Alphafly 3 (Women's): </strong><a href="https://www.nike.com/t/alphafly-3-womens-road-racing-shoes-LQX5b4" target="_blank" rel="nofollow"><strong>was $295 now from $221</strong></a></li></ul><h3 class="article-body__section" id="section-nike-footwear-deals"><span>Nike Footwear Deals</span></h3><div class="product"><a data-dimension112="c590e140-ce16-11f1-b8f5-2165faf7167e" data-action="Deal Block" data-label="Victori One Slides (Men's)" data-dimension48="Victori One Slides (Men's)" data-dimension25="$27" href="https://www.nike.com/t/victori-one-mens-slides-vrTGLL/CN9675-304" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1152px;"><p class="vanilla-image-block" style="padding-top:125.00%;"><img id="Mz3Cjo9qZABfdrYoi3ovNj" name="nike victori one slides" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Mz3Cjo9qZABfdrYoi3ovNj-1920-80.png" mos="" align="middle" fullscreen="" width="1152" height="1440" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/victori-one-mens-slides-vrTGLL/CN9675-304" target="_blank" rel="nofollow" data-dimension112="c590e140-ce16-11f1-b8f5-2165faf7167e" data-action="Deal Block" data-label="Victori One Slides (Men's)" data-dimension48="Victori One Slides (Men's)" data-dimension25="$27">Victori One Slides (Men's): was $37 now $27</a></strong><br>These Nike slides are perfect for staying comfy when you're relaxing indoors or out. Right now, you can get a pair for as little as $27, which is a steal. <a class="view-deal button" href="https://www.nike.com/t/victori-one-mens-slides-vrTGLL/CN9675-304" target="_blank" rel="nofollow" data-dimension112="c590e140-ce16-11f1-b8f5-2165faf7167e" data-action="Deal Block" data-label="Victori One Slides (Men's)" data-dimension48="Victori One Slides (Men's)" data-dimension25="$27">View Deal</a></p></div><div class="product"><a data-dimension112="28a4656a-ce1a-11f1-b818-db1a72325cdb" data-action="Deal Block" data-label="Uplift Sc Shoes (Women's)" data-dimension48="Uplift Sc Shoes (Women's)" data-dimension25="$49" href="https://www.amazon.com/Nike-Womens-Uplift-Sneaker-Black/dp/B0F13DYVP8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:47.33%;"><img id="zRhg6N5G4meqd9RBtCU5i6" name="Uplift Sc Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zRhg6N5G4meqd9RBtCU5i6-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="710" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Womens-Uplift-Sneaker-Black/dp/B0F13DYVP8" target="_blank" rel="nofollow" data-dimension112="28a4656a-ce1a-11f1-b818-db1a72325cdb" data-action="Deal Block" data-label="Uplift Sc Shoes (Women's)" data-dimension48="Uplift Sc Shoes (Women's)" data-dimension25="$49">Uplift Sc Shoes (Women's): was $70 now $49</a></strong><br>These casual Nike sneakers have a super-soft textile upper and plush foam cushioning that'll support your feet through their toughest journeys. They're well-loved by Amazon shoppers, too, earning a 4.5-star rating based on over 500 reviews.<a class="view-deal button" href="https://www.amazon.com/Nike-Womens-Uplift-Sneaker-Black/dp/B0F13DYVP8" target="_blank" rel="nofollow" data-dimension112="28a4656a-ce1a-11f1-b818-db1a72325cdb" data-action="Deal Block" data-label="Uplift Sc Shoes (Women's)" data-dimension48="Uplift Sc Shoes (Women's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="c590e1ae-ce16-11f1-9d2d-df95b6798613" data-action="Deal Block" data-label="Downshifter 14 (Men's)" data-dimension48="Downshifter 14 (Men's)" data-dimension25="$49" href="https://www.nike.com/t/downshifter-14-mens-road-running-shoe-wrouoOtz/IB1895-108" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="zCmFyZvZvT6Ayijv4yrZGL" name="Downshifter 14 (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zCmFyZvZvT6Ayijv4yrZGL-1920-80.jpg" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/downshifter-14-mens-road-running-shoe-wrouoOtz/IB1895-108" target="_blank" rel="nofollow" data-dimension112="c590e1ae-ce16-11f1-9d2d-df95b6798613" data-action="Deal Block" data-label="Downshifter 14 (Men's)" data-dimension48="Downshifter 14 (Men's)" data-dimension25="$49">Downshifter 14 (Men's): was $80 now $49</a></strong><br>The Nike Downshifter 14 are some of the cheapest Nike running shoes around — and this is a popular deal with only a few sizes left in stock! These road running shoes have a lightweight and breathable mesh upper, improved support thanks to their internal fit band and a soft foam midsole.<a class="view-deal button" href="https://www.nike.com/t/downshifter-14-mens-road-running-shoe-wrouoOtz/IB1895-108" target="_blank" rel="nofollow" data-dimension112="c590e1ae-ce16-11f1-9d2d-df95b6798613" data-action="Deal Block" data-label="Downshifter 14 (Men's)" data-dimension48="Downshifter 14 (Men's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="c590e28a-ce16-11f1-b830-09f3362655c9" data-action="Deal Block" data-label="Revolution 8 Road Running Shoes (Women's)" data-dimension48="Revolution 8 Road Running Shoes (Women's)" data-dimension25="$52" href="https://www.amazon.com/Nike-Revolution-Running-White-Particle-Rose-Tattoo/dp/B0DPHRJLX1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:47.73%;"><img id="mgvruyyzCcNL6RT2MW9d86" name="Revolution 8 Road Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mgvruyyzCcNL6RT2MW9d86-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="716" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Revolution-Running-White-Particle-Rose-Tattoo/dp/B0DPHRJLX1" target="_blank" rel="nofollow" data-dimension112="c590e28a-ce16-11f1-b830-09f3362655c9" data-action="Deal Block" data-label="Revolution 8 Road Running Shoes (Women's)" data-dimension48="Revolution 8 Road Running Shoes (Women's)" data-dimension25="$52">Revolution 8 Road Running Shoes (Women's): was $70 now $52</a></strong><br>These Nike road runners are on sale starting from just $52, which is a steal. They're packed with cushioning, have a breathable mesh upper and a flexible outsole. <a class="view-deal button" href="https://www.amazon.com/Nike-Revolution-Running-White-Particle-Rose-Tattoo/dp/B0DPHRJLX1" target="_blank" rel="nofollow" data-dimension112="c590e28a-ce16-11f1-b830-09f3362655c9" data-action="Deal Block" data-label="Revolution 8 Road Running Shoes (Women's)" data-dimension48="Revolution 8 Road Running Shoes (Women's)" data-dimension25="$52">View Deal</a></p></div><div class="product"><a data-dimension112="c590e21c-ce16-11f1-87a3-972487cad230" data-action="Deal Block" data-label="Flex Train Workout Shoes (Men's)" data-dimension48="Flex Train Workout Shoes (Men's)" data-dimension25="$59" href="https://www.amazon.com/Nike-Train-Sneaker-Safety-Orange/dp/B0FBS23WGF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:41.73%;"><img id="r7FRkdByzV8oBkZ6N2AJj8" name="Flex Train Workout Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/r7FRkdByzV8oBkZ6N2AJj8-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="626" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Train-Sneaker-Safety-Orange/dp/B0FBS23WGF" target="_blank" rel="nofollow" data-dimension112="c590e21c-ce16-11f1-87a3-972487cad230" data-action="Deal Block" data-label="Flex Train Workout Shoes (Men's)" data-dimension48="Flex Train Workout Shoes (Men's)" data-dimension25="$59">Flex Train Workout Shoes (Men's): was $80 now $59</a></strong><br>Great for a variety of workouts, the Nike Flex Train are a steal with prices starting from $59. These are designed to be extra lightweight and flexible, with comfortable cushioning along the entire midsole. They also look pretty excellent. <a class="view-deal button" href="https://www.amazon.com/Nike-Train-Sneaker-Safety-Orange/dp/B0FBS23WGF" target="_blank" rel="nofollow" data-dimension112="c590e21c-ce16-11f1-87a3-972487cad230" data-action="Deal Block" data-label="Flex Train Workout Shoes (Men's)" data-dimension48="Flex Train Workout Shoes (Men's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="c590e2f8-ce16-11f1-9abb-fdb00f6f4e11" data-action="Deal Block" data-label="Flex Control 4 (Men's)" data-dimension48="Flex Control 4 (Men's)" data-dimension25="$59" href="https://www.nike.com/t/flex-control-4-mens-workout-shoes-14Z62l/CD0197-002" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1152px;"><p class="vanilla-image-block" style="padding-top:125.00%;"><img id="scsYMxY2qNypF4Mx8uThT4" name="nike flex control 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/scsYMxY2qNypF4Mx8uThT4-1920-80.png" mos="" align="middle" fullscreen="" width="1152" height="1440" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/flex-control-4-mens-workout-shoes-14Z62l/CD0197-002" target="_blank" rel="nofollow" data-dimension112="c590e2f8-ce16-11f1-9abb-fdb00f6f4e11" data-action="Deal Block" data-label="Flex Control 4 (Men's)" data-dimension48="Flex Control 4 (Men's)" data-dimension25="$59">Flex Control 4 (Men's): was $70 now $59</a></strong><br>The Nike Flex Control 4 can now be yours for just $59. These budget-friendly sneakers are designed for workouts, with flexible soles and a midfoot strap to keep them securely on your feet.<a class="view-deal button" href="https://www.nike.com/t/flex-control-4-mens-workout-shoes-14Z62l/CD0197-002" target="_blank" rel="nofollow" data-dimension112="c590e2f8-ce16-11f1-9abb-fdb00f6f4e11" data-action="Deal Block" data-label="Flex Control 4 (Men's)" data-dimension48="Flex Control 4 (Men's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="c590e3d4-ce16-11f1-b721-87623cdab7f0" data-action="Deal Block" data-label="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension48="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension25="$59" href="https://www.amazon.com/Monarch-Training-Shoes-Metallic-Silver-Mid/dp/B004IM3JO0" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1611px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="WvCxU4cK4R2aacLaDQGyLN" name="Air Monarch IV Training/Workout Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/WvCxU4cK4R2aacLaDQGyLN-1920-80.jpg" mos="" align="middle" fullscreen="" width="1611" height="806" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Monarch-Training-Shoes-Metallic-Silver-Mid/dp/B004IM3JO0" target="_blank" rel="nofollow" data-dimension112="c590e3d4-ce16-11f1-b721-87623cdab7f0" data-action="Deal Block" data-label="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension48="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension25="$59">Air Monarch IV Training/Workout Shoes (Men's): was $85 now $59</a></strong><br>Enhance your training sessions in the gym with the Nike Air Monarch IV. They're durable, lightweight and supportive — and beloved by shoppers on Amazon, with one reviewer writing "Great comfort, cushioning, long-wearing and a great value." <a class="view-deal button" href="https://www.amazon.com/Monarch-Training-Shoes-Metallic-Silver-Mid/dp/B004IM3JO0" target="_blank" rel="nofollow" data-dimension112="c590e3d4-ce16-11f1-b721-87623cdab7f0" data-action="Deal Block" data-label="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension48="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="c590e366-ce16-11f1-afc1-3502e4696026" data-action="Deal Block" data-label="Court Shot Herrenschuh Sneakers (Men's)" data-dimension48="Court Shot Herrenschuh Sneakers (Men's)" data-dimension25="$63" href="https://www.amazon.com/Nike-Court-Shoes-Sneaker-Black/dp/B0F1325R84" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1608px;"><p class="vanilla-image-block" style="padding-top:40.80%;"><img id="pDtAyY4zxyRycE74uP7eue" name="Court Shot Herrenschuh Sneakers (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pDtAyY4zxyRycE74uP7eue-1920-80.jpg" mos="" align="middle" fullscreen="" width="1608" height="656" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Court-Shoes-Sneaker-Black/dp/B0F1325R84" target="_blank" rel="nofollow" data-dimension112="c590e366-ce16-11f1-afc1-3502e4696026" data-action="Deal Block" data-label="Court Shot Herrenschuh Sneakers (Men's)" data-dimension48="Court Shot Herrenschuh Sneakers (Men's)" data-dimension25="$63">Court Shot Herrenschuh Sneakers (Men's): was $80 now $63</a></strong><br>The Nike Court Shot Herrenschuh have a super sleek look and are perfect for elevated outfits that still look cool and casual. They have a synthetic leather upper and padded collar for a super comfortable feel. <a class="view-deal button" href="https://www.amazon.com/Nike-Court-Shoes-Sneaker-Black/dp/B0F1325R84" target="_blank" rel="nofollow" data-dimension112="c590e366-ce16-11f1-afc1-3502e4696026" data-action="Deal Block" data-label="Court Shot Herrenschuh Sneakers (Men's)" data-dimension48="Court Shot Herrenschuh Sneakers (Men's)" data-dimension25="$63">View Deal</a></p></div><div class="product"><a data-dimension112="c590e442-ce16-11f1-8f4d-2dc64e641d86" data-action="Deal Block" data-label="Run Swift 3 (Women's)" data-dimension48="Run Swift 3 (Women's)" data-dimension25="$65" href="https://www.amazon.com/Nike-Swift-Running-Shoes-Spruce-Sanddrift-Sail/dp/B0BX4B1S1T" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1723px;"><p class="vanilla-image-block" style="padding-top:47.42%;"><img id="oGEcMPMyVERhdD6die3fdA" name="Run Swift" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/oGEcMPMyVERhdD6die3fdA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1723" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Swift-Running-Shoes-Spruce-Sanddrift-Sail/dp/B0BX4B1S1T" target="_blank" rel="nofollow" data-dimension112="c590e442-ce16-11f1-8f4d-2dc64e641d86" data-action="Deal Block" data-label="Run Swift 3 (Women's)" data-dimension48="Run Swift 3 (Women's)" data-dimension25="$65">Run Swift 3 (Women's): was $85 now $65</a></strong><br>Save on the nifty Swift 3 road running shoes, which feature a durable, comfortable design and soft foam cushioning to give you plenty of support. Breathable mesh keeps air moving through with every stride, and the grippy grooves on the outsole combine flexibility with sure-footed security.<a class="view-deal button" href="https://www.amazon.com/Nike-Swift-Running-Shoes-Spruce-Sanddrift-Sail/dp/B0BX4B1S1T" target="_blank" rel="nofollow" data-dimension112="c590e442-ce16-11f1-8f4d-2dc64e641d86" data-action="Deal Block" data-label="Run Swift 3 (Women's)" data-dimension48="Run Swift 3 (Women's)" data-dimension25="$65">View Deal</a></p></div><div class="product"><a data-dimension112="28a4668c-ce1a-11f1-b29a-6326411c74db" data-action="Deal Block" data-label="Air Max Excee Shoes (Men's)" data-dimension48="Air Max Excee Shoes (Men's)" data-dimension25="$70" href="https://www.amazon.com/dp/B07T7WG4FZ?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1769px;"><p class="vanilla-image-block" style="padding-top:42.68%;"><img id="DfwCdBPWwrLSD4ywzkVkd5" name="Air Max Excee Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DfwCdBPWwrLSD4ywzkVkd5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1769" height="755" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B07T7WG4FZ?" target="_blank" rel="nofollow" data-dimension112="28a4668c-ce1a-11f1-b29a-6326411c74db" data-action="Deal Block" data-label="Air Max Excee Shoes (Men's)" data-dimension48="Air Max Excee Shoes (Men's)" data-dimension25="$70">Air Max Excee Shoes (Men's): was $100 now $70</a></strong><br>A comfortable and reliable shoe, the Nike Air Max Excee is now on sale for $70. The style puts a modern twist on the original Air Max shoes, with patches of contrasting textures across the upper.<a class="view-deal button" href="https://www.amazon.com/dp/B07T7WG4FZ?" target="_blank" rel="nofollow" data-dimension112="28a4668c-ce1a-11f1-b29a-6326411c74db" data-action="Deal Block" data-label="Air Max Excee Shoes (Men's)" data-dimension48="Air Max Excee Shoes (Men's)" data-dimension25="$70">View Deal</a></p></div><div class="product"><a data-dimension112="c590e51e-ce16-11f1-9a7f-91aad85e50c1" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82" href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="uxG2rhW9L4NBaWbeVEreNS" name="Nike Pegasus 42" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uxG2rhW9L4NBaWbeVEreNS-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow" data-dimension112="c590e51e-ce16-11f1-9a7f-91aad85e50c1" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82">Pegasus 42 (Men's): was $145 now $82</a></strong><br>Earning a 3.5-star rating in our <a href="https://www.tomsguide.com/wellness/running/nike-pegasus-42-review">Nike Pegasus 42 review</a>, we currently rank this as one of the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> you can buy in terms of value. Compared to the Pegasus 41 (which was already great,) the 42 feels even smoother and more energetic underfoot. It's a great shoe for just about anybody.<a class="view-deal button" href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow" data-dimension112="c590e51e-ce16-11f1-9a7f-91aad85e50c1" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82">View Deal</a></p></div><div class="product"><a data-dimension112="def7095c-cef2-11f1-9d02-4bdf0ba83225" data-action="Deal Block" data-label="V5 RNR" data-dimension48="V5 RNR" data-dimension25="$85" href="https://www.amazon.com/Nike-Womens-Sneaker-Metallic-Silver/dp/B0FBHZFS9L" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="JYFv7uRx28KgqsJ4Gf3iga" name="Nike V5 RNR" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JYFv7uRx28KgqsJ4Gf3iga-1920-80.jpg" mos="" align="middle" fullscreen="" width="1070" height="1070" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Tackle the everyday in a shoe that matches comfort with style. Staying true to its Y2K roots, the V5 RNR has a foam midsole that's chunky yet lightweight. Plus, metallic details and a 3D Swoosh logo elevate this retro runner.<a class="view-deal button" href="https://www.amazon.com/Nike-Womens-Sneaker-Metallic-Silver/dp/B0FBHZFS9L" target="_blank" rel="nofollow" data-dimension112="def7095c-cef2-11f1-9d02-4bdf0ba83225" data-action="Deal Block" data-label="V5 RNR" data-dimension48="V5 RNR" data-dimension25="$85">View Deal</a></p></div><div class="product"><a data-dimension112="def709d4-cef2-11f1-8238-27d3bcb8e882" data-action="Deal Block" data-label="Journey Run Road Running Shoes (Men's)" data-dimension48="Journey Run Road Running Shoes (Men's)" data-dimension25="$85" href="https://www.amazon.com/Nike-Journey-Running-FN0228-001-Anthracite/dp/B0D2DJ5Z58" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="4xXdT6m9HxzUUo9qTuvaBV" name="Journey Run (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4xXdT6m9HxzUUo9qTuvaBV-1920-80.jpg" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Journey-Running-FN0228-001-Anthracite/dp/B0D2DJ5Z58" target="_blank" rel="nofollow" data-dimension112="def709d4-cef2-11f1-8238-27d3bcb8e882" data-action="Deal Block" data-label="Journey Run Road Running Shoes (Men's)" data-dimension48="Journey Run Road Running Shoes (Men's)" data-dimension25="$85">Journey Run Road Running Shoes (Men's): was $95 now $85</a></strong><br>Relish every step of the journey with the Nike Journey Run road running shoes, which were designed to pound the pavement with aplomb. You get plenty of cushioning under the heel to keep you bouncy right up until the last mile, with soft touch points in the tongue and collar to keep chafing at bay.<a class="view-deal button" href="https://www.amazon.com/Nike-Journey-Running-FN0228-001-Anthracite/dp/B0D2DJ5Z58" target="_blank" rel="nofollow" data-dimension112="def709d4-cef2-11f1-8238-27d3bcb8e882" data-action="Deal Block" data-label="Journey Run Road Running Shoes (Men's)" data-dimension48="Journey Run Road Running Shoes (Men's)" data-dimension25="$85">View Deal</a></p></div><div class="product"><a data-dimension112="c590e4b0-ce16-11f1-81fe-11e9a1a49e23" data-action="Deal Block" data-label="Pegasus 41 Running Shoes (Women's)" data-dimension48="Pegasus 41 Running Shoes (Women's)" data-dimension25="$106" href="https://www.amazon.com/Nike-Pegasus-Sneaker-Playful-Metallic/dp/B0F2G75S6N" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:44.60%;"><img id="8rtJszfW7dGEJYJc4He9CN" name="81O2j-efNTL._AC_SX695_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8rtJszfW7dGEJYJc4He9CN-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="310" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Pegasus-Sneaker-Playful-Metallic/dp/B0F2G75S6N" target="_blank" rel="nofollow" data-dimension112="c590e4b0-ce16-11f1-81fe-11e9a1a49e23" data-action="Deal Block" data-label="Pegasus 41 Running Shoes (Women's)" data-dimension48="Pegasus 41 Running Shoes (Women's)" data-dimension25="$106">Pegasus 41 Running Shoes (Women's): was $140 now $106</a></strong><br>The ReactX midsole and higher stack on the Pegasus 41 give it a softer ride than its predecessors, but it’s not so squishy underfoot as to be unstable in any way. It’s a balanced midsole that is comfortable for easy and long runs, but has a little bounce to it when you want to up the pace. Read our full <a href="https://www.tomsguide.com/wellness/running/i-ran-35-miles-in-the-nike-pegasus-41-and-its-my-favorite-pegasus-in-years">Nike Pegasus 41 review</a> here to find out more.<a class="view-deal button" href="https://www.amazon.com/Nike-Pegasus-Sneaker-Playful-Metallic/dp/B0F2G75S6N" target="_blank" rel="nofollow" data-dimension112="c590e4b0-ce16-11f1-81fe-11e9a1a49e23" data-action="Deal Block" data-label="Pegasus 41 Running Shoes (Women's)" data-dimension48="Pegasus 41 Running Shoes (Women's)" data-dimension25="$106">View Deal</a></p></div><div class="product"><a data-dimension112="c590e5c8-ce16-11f1-a28c-3ff67766a372" data-action="Deal Block" data-label="Structure Plus (Men's)" data-dimension48="Structure Plus (Men's)" data-dimension25="$118" href="https://www.nike.com/t/structure-plus-mens-road-running-shoes-XEfeTqfe/IR1816-100" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="AsCNB6yFLQbuH7JwdNFcpf" name="Nike Structure Plus" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/AsCNB6yFLQbuH7JwdNFcpf-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/structure-plus-mens-road-running-shoes-XEfeTqfe/IR1816-100" target="_blank" rel="nofollow" data-dimension112="c590e5c8-ce16-11f1-a28c-3ff67766a372" data-action="Deal Block" data-label="Structure Plus (Men's)" data-dimension48="Structure Plus (Men's)" data-dimension25="$118">Structure Plus (Men's): was $180 now $118</a></strong><br>The<a href="https://www.tomsguide.com/wellness/running/i-ran-35-miles-in-the-nike-structure-plus-heres-my-verdict-on-nikes-most-cushioned-stability-shoe"> Nike Structure Plus </a>is a stability running shoe that provides a lot of support as well as comfort. Our tester enjoyed racking up the miles in this shoe, which is bouncier than most traditional stability shoes thanks to the ZoomX foam in its midsole.<a class="view-deal button" href="https://www.nike.com/t/structure-plus-mens-road-running-shoes-XEfeTqfe/IR1816-100" target="_blank" rel="nofollow" data-dimension112="c590e5c8-ce16-11f1-a28c-3ff67766a372" data-action="Deal Block" data-label="Structure Plus (Men's)" data-dimension48="Structure Plus (Men's)" data-dimension25="$118">View Deal</a></p></div><div class="product"><a data-dimension112="c590e6d6-ce16-11f1-9ec6-c9cddc54e6e6" data-action="Deal Block" data-label="Zoom Fly 6 (Men's)" data-dimension48="Zoom Fly 6 (Men's)" data-dimension25="$143" href="https://www.nike.com/t/zoom-fly-6-mens-road-racing-shoes-wn2ALjkm/IV6296-635" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="nqSnCnJGciuR9s63xgLepK" name="Nike Zoom Fly 6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nqSnCnJGciuR9s63xgLepK-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/zoom-fly-6-mens-road-racing-shoes-wn2ALjkm/IV6296-635" target="_blank" rel="nofollow" data-dimension112="c590e6d6-ce16-11f1-9ec6-c9cddc54e6e6" data-action="Deal Block" data-label="Zoom Fly 6 (Men's)" data-dimension48="Zoom Fly 6 (Men's)" data-dimension25="$143">Zoom Fly 6 (Men's): was $190 now $143</a></strong><br>The <a href="https://www.tomsguide.com/wellness/running/nike-zoom-fly-6-review">Nike Zoom Fly 6</a> is a ‘super-trainer’, which is a type of shoe that uses some of the tech from the <a href="https://www.tomsguide.com/best-picks/best-carbon-fiber-running-shoes">best carbon plate running shoes</a> in a sneaker that’s cheaper and more suitable for daily training, rather than just being good for race day.<a class="view-deal button" href="https://www.nike.com/t/zoom-fly-6-mens-road-racing-shoes-wn2ALjkm/IV6296-635" target="_blank" rel="nofollow" data-dimension112="c590e6d6-ce16-11f1-9ec6-c9cddc54e6e6" data-action="Deal Block" data-label="Zoom Fly 6 (Men's)" data-dimension48="Zoom Fly 6 (Men's)" data-dimension25="$143">View Deal</a></p></div><div class="product"><a data-dimension112="c590e78a-ce16-11f1-aaf8-5f4db6b5697f" data-action="Deal Block" data-label="Alphafly 3 (Women's)" data-dimension48="Alphafly 3 (Women's)" data-dimension25="$221" href="https://www.nike.com/t/alphafly-3-womens-road-racing-shoes-LQX5b4/FD8315-700" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1152px;"><p class="vanilla-image-block" style="padding-top:125.00%;"><img id="pTKFtRHQkEja7ovGDvyNob" name="nike alphafly 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTKFtRHQkEja7ovGDvyNob-1920-80.png" mos="" align="middle" fullscreen="" width="1152" height="1440" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/alphafly-3-womens-road-racing-shoes-LQX5b4/FD8315-700" target="_blank" rel="nofollow" data-dimension112="c590e78a-ce16-11f1-aaf8-5f4db6b5697f" data-action="Deal Block" data-label="Alphafly 3 (Women's)" data-dimension48="Alphafly 3 (Women's)" data-dimension25="$221">Alphafly 3 (Women's): was $295 now $221</a></strong><br>You can currently save 25% on the <a href="https://www.tomsguide.com/wellness/running/i-ran-80-miles-in-the-nike-alphafly-3-and-nikes-record-breaking-racing-shoe-didnt-disappoint">Nike Alphafly 3</a>, which we rank as one of the <a href="https://www.tomsguide.com/best-picks/best-carbon-fiber-running-shoes">best carbon plate running shoes</a>. These are an awesome pick for runners looking to set fast times thanks to their lightweight, propulsive design.<a class="view-deal button" href="https://www.nike.com/t/alphafly-3-womens-road-racing-shoes-LQX5b4/FD8315-700" target="_blank" rel="nofollow" data-dimension112="c590e78a-ce16-11f1-aaf8-5f4db6b5697f" data-action="Deal Block" data-label="Alphafly 3 (Women's)" data-dimension48="Alphafly 3 (Women's)" data-dimension25="$221">View Deal</a></p></div><div data-model-name="Nike Men's Pegasus 41 Road Running Shoe" data-widget-type="review"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/running/we-named-the-nike-pegasus-42-the-best-value-running-shoe-on-the-market-and-its-42-percent-off-right-now-plus-15-more-of-our-favorite-nike-running-shoe-deals</link>
                                                                            <description>
                            <![CDATA[ The best Nike running shoes we've tested, the Nike Pegasus 42, just got a major price cut. Check out the biggest savings right now! ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">iw6bdv3m6dMBMwenhNpiAd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/RiUcAVwxuZTXqWJaygGgN8-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 13:37:45 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 15:03:14 +0000</updated>
                                                                                                                                            <category><![CDATA[Running]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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/RiUcAVwxuZTXqWJaygGgN8-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Nike Pegasus 42 running shoes]]></media:description>                                                            <media:text><![CDATA[Nike Pegasus 42 running shoes]]></media:text>
                                <media:title type="plain"><![CDATA[Nike Pegasus 42 running shoes]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/RiUcAVwxuZTXqWJaygGgN8-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's a great day to buy a new pair of running shoes — even if your wallet is feeling the pinch. Don't hang around, the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best value running shoes</a> we've tested just got a big price cut!</p><p>The <a href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow">Nike Pegasus 42 are on sale from $82 at Nike</a>. These were already excellent value at full price, and with 42% off (a fitting discount for the 42nd version of the shoe) they're an absolute steal. They're versatile, smooth and great for both beginners and experienced runners alike.</p><p><strong>Note: </strong>prices vary depending on the size and color you choose. To find the best deals, check out any different color options available in your size. For more, see our <a href="https://www.tomsguide.com/wellness/fitness/nike-promo-codes">Nike promo codes</a>.</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/E9C7C6A6-9A88-4959-A67F-4D44FC67320F" target="_blank" rel="nofollow"><strong>shop Nike deals at Amazon</strong></a><strong></strong></li><li><strong>Nike Victori One Slides (Men's): </strong><a href="https://www.nike.com/t/victori-one-mens-slides-vrTGLL/CN9675-304" target="_blank" rel="nofollow"><strong>was $37 now from $27</strong></a></li><li><strong>Nike Uplift Sc Shoes (Women's): </strong><a href="https://www.amazon.com/Nike-Womens-Uplift-Sneaker-Black/dp/B0F13DYVP8" target="_blank" rel="nofollow"><strong>was $70 now from $49</strong></a></li><li><strong>Nike Downshifter 14 (Men's): </strong><a href="https://www.nike.com/t/downshifter-14-mens-road-running-shoe-wrouoOtz/IB1895-108" target="_blank" rel="nofollow"><strong>was $80 now from $49</strong></a></li><li><strong>Nike Flex Train Workout Shoes (Men's): </strong><a href="https://www.amazon.com/Nike-Train-Sneaker-Safety-Orange/dp/B0FBS23WGF" target="_blank" rel="nofollow"><strong>was $80 now from $59</strong></a></li><li><strong>Nike Pegasus 42 (Men's): </strong><a href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow"><strong>was $145 now from $82</strong></a><br><strong>Nike Zoom Fly 6 (Men's): </strong><a href="https://www.nike.com/t/zoom-fly-6-mens-road-racing-shoes-wn2ALjkm/IV6296-635" target="_blank" rel="nofollow"><strong>was $190 now from $143</strong></a></li><li><strong>Nike Alphafly 3 (Women's): </strong><a href="https://www.nike.com/t/alphafly-3-womens-road-racing-shoes-LQX5b4" target="_blank" rel="nofollow"><strong>was $295 now from $221</strong></a></li></ul><h3 class="article-body__section" id="section-nike-footwear-deals"><span>Nike Footwear Deals</span></h3><div class="product"><a data-dimension112="c590e140-ce16-11f1-b8f5-2165faf7167e" data-action="Deal Block" data-label="Victori One Slides (Men's)" data-dimension48="Victori One Slides (Men's)" data-dimension25="$27" href="https://www.nike.com/t/victori-one-mens-slides-vrTGLL/CN9675-304" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1152px;"><p class="vanilla-image-block" style="padding-top:125.00%;"><img id="Mz3Cjo9qZABfdrYoi3ovNj" name="nike victori one slides" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Mz3Cjo9qZABfdrYoi3ovNj-1920-80.png" mos="" align="middle" fullscreen="" width="1152" height="1440" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/victori-one-mens-slides-vrTGLL/CN9675-304" target="_blank" rel="nofollow" data-dimension112="c590e140-ce16-11f1-b8f5-2165faf7167e" data-action="Deal Block" data-label="Victori One Slides (Men's)" data-dimension48="Victori One Slides (Men's)" data-dimension25="$27">Victori One Slides (Men's): was $37 now $27</a></strong><br>These Nike slides are perfect for staying comfy when you're relaxing indoors or out. Right now, you can get a pair for as little as $27, which is a steal. <a class="view-deal button" href="https://www.nike.com/t/victori-one-mens-slides-vrTGLL/CN9675-304" target="_blank" rel="nofollow" data-dimension112="c590e140-ce16-11f1-b8f5-2165faf7167e" data-action="Deal Block" data-label="Victori One Slides (Men's)" data-dimension48="Victori One Slides (Men's)" data-dimension25="$27">View Deal</a></p></div><div class="product"><a data-dimension112="28a4656a-ce1a-11f1-b818-db1a72325cdb" data-action="Deal Block" data-label="Uplift Sc Shoes (Women's)" data-dimension48="Uplift Sc Shoes (Women's)" data-dimension25="$49" href="https://www.amazon.com/Nike-Womens-Uplift-Sneaker-Black/dp/B0F13DYVP8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:47.33%;"><img id="zRhg6N5G4meqd9RBtCU5i6" name="Uplift Sc Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zRhg6N5G4meqd9RBtCU5i6-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="710" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Womens-Uplift-Sneaker-Black/dp/B0F13DYVP8" target="_blank" rel="nofollow" data-dimension112="28a4656a-ce1a-11f1-b818-db1a72325cdb" data-action="Deal Block" data-label="Uplift Sc Shoes (Women's)" data-dimension48="Uplift Sc Shoes (Women's)" data-dimension25="$49">Uplift Sc Shoes (Women's): was $70 now $49</a></strong><br>These casual Nike sneakers have a super-soft textile upper and plush foam cushioning that'll support your feet through their toughest journeys. They're well-loved by Amazon shoppers, too, earning a 4.5-star rating based on over 500 reviews.<a class="view-deal button" href="https://www.amazon.com/Nike-Womens-Uplift-Sneaker-Black/dp/B0F13DYVP8" target="_blank" rel="nofollow" data-dimension112="28a4656a-ce1a-11f1-b818-db1a72325cdb" data-action="Deal Block" data-label="Uplift Sc Shoes (Women's)" data-dimension48="Uplift Sc Shoes (Women's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="c590e1ae-ce16-11f1-9d2d-df95b6798613" data-action="Deal Block" data-label="Downshifter 14 (Men's)" data-dimension48="Downshifter 14 (Men's)" data-dimension25="$49" href="https://www.nike.com/t/downshifter-14-mens-road-running-shoe-wrouoOtz/IB1895-108" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="zCmFyZvZvT6Ayijv4yrZGL" name="Downshifter 14 (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zCmFyZvZvT6Ayijv4yrZGL-1920-80.jpg" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/downshifter-14-mens-road-running-shoe-wrouoOtz/IB1895-108" target="_blank" rel="nofollow" data-dimension112="c590e1ae-ce16-11f1-9d2d-df95b6798613" data-action="Deal Block" data-label="Downshifter 14 (Men's)" data-dimension48="Downshifter 14 (Men's)" data-dimension25="$49">Downshifter 14 (Men's): was $80 now $49</a></strong><br>The Nike Downshifter 14 are some of the cheapest Nike running shoes around — and this is a popular deal with only a few sizes left in stock! These road running shoes have a lightweight and breathable mesh upper, improved support thanks to their internal fit band and a soft foam midsole.<a class="view-deal button" href="https://www.nike.com/t/downshifter-14-mens-road-running-shoe-wrouoOtz/IB1895-108" target="_blank" rel="nofollow" data-dimension112="c590e1ae-ce16-11f1-9d2d-df95b6798613" data-action="Deal Block" data-label="Downshifter 14 (Men's)" data-dimension48="Downshifter 14 (Men's)" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="c590e28a-ce16-11f1-b830-09f3362655c9" data-action="Deal Block" data-label="Revolution 8 Road Running Shoes (Women's)" data-dimension48="Revolution 8 Road Running Shoes (Women's)" data-dimension25="$52" href="https://www.amazon.com/Nike-Revolution-Running-White-Particle-Rose-Tattoo/dp/B0DPHRJLX1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:47.73%;"><img id="mgvruyyzCcNL6RT2MW9d86" name="Revolution 8 Road Running Shoes (Women's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mgvruyyzCcNL6RT2MW9d86-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="716" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Revolution-Running-White-Particle-Rose-Tattoo/dp/B0DPHRJLX1" target="_blank" rel="nofollow" data-dimension112="c590e28a-ce16-11f1-b830-09f3362655c9" data-action="Deal Block" data-label="Revolution 8 Road Running Shoes (Women's)" data-dimension48="Revolution 8 Road Running Shoes (Women's)" data-dimension25="$52">Revolution 8 Road Running Shoes (Women's): was $70 now $52</a></strong><br>These Nike road runners are on sale starting from just $52, which is a steal. They're packed with cushioning, have a breathable mesh upper and a flexible outsole. <a class="view-deal button" href="https://www.amazon.com/Nike-Revolution-Running-White-Particle-Rose-Tattoo/dp/B0DPHRJLX1" target="_blank" rel="nofollow" data-dimension112="c590e28a-ce16-11f1-b830-09f3362655c9" data-action="Deal Block" data-label="Revolution 8 Road Running Shoes (Women's)" data-dimension48="Revolution 8 Road Running Shoes (Women's)" data-dimension25="$52">View Deal</a></p></div><div class="product"><a data-dimension112="c590e21c-ce16-11f1-87a3-972487cad230" data-action="Deal Block" data-label="Flex Train Workout Shoes (Men's)" data-dimension48="Flex Train Workout Shoes (Men's)" data-dimension25="$59" href="https://www.amazon.com/Nike-Train-Sneaker-Safety-Orange/dp/B0FBS23WGF" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:41.73%;"><img id="r7FRkdByzV8oBkZ6N2AJj8" name="Flex Train Workout Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/r7FRkdByzV8oBkZ6N2AJj8-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="626" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Train-Sneaker-Safety-Orange/dp/B0FBS23WGF" target="_blank" rel="nofollow" data-dimension112="c590e21c-ce16-11f1-87a3-972487cad230" data-action="Deal Block" data-label="Flex Train Workout Shoes (Men's)" data-dimension48="Flex Train Workout Shoes (Men's)" data-dimension25="$59">Flex Train Workout Shoes (Men's): was $80 now $59</a></strong><br>Great for a variety of workouts, the Nike Flex Train are a steal with prices starting from $59. These are designed to be extra lightweight and flexible, with comfortable cushioning along the entire midsole. They also look pretty excellent. <a class="view-deal button" href="https://www.amazon.com/Nike-Train-Sneaker-Safety-Orange/dp/B0FBS23WGF" target="_blank" rel="nofollow" data-dimension112="c590e21c-ce16-11f1-87a3-972487cad230" data-action="Deal Block" data-label="Flex Train Workout Shoes (Men's)" data-dimension48="Flex Train Workout Shoes (Men's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="c590e2f8-ce16-11f1-9abb-fdb00f6f4e11" data-action="Deal Block" data-label="Flex Control 4 (Men's)" data-dimension48="Flex Control 4 (Men's)" data-dimension25="$59" href="https://www.nike.com/t/flex-control-4-mens-workout-shoes-14Z62l/CD0197-002" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1152px;"><p class="vanilla-image-block" style="padding-top:125.00%;"><img id="scsYMxY2qNypF4Mx8uThT4" name="nike flex control 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/scsYMxY2qNypF4Mx8uThT4-1920-80.png" mos="" align="middle" fullscreen="" width="1152" height="1440" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/flex-control-4-mens-workout-shoes-14Z62l/CD0197-002" target="_blank" rel="nofollow" data-dimension112="c590e2f8-ce16-11f1-9abb-fdb00f6f4e11" data-action="Deal Block" data-label="Flex Control 4 (Men's)" data-dimension48="Flex Control 4 (Men's)" data-dimension25="$59">Flex Control 4 (Men's): was $70 now $59</a></strong><br>The Nike Flex Control 4 can now be yours for just $59. These budget-friendly sneakers are designed for workouts, with flexible soles and a midfoot strap to keep them securely on your feet.<a class="view-deal button" href="https://www.nike.com/t/flex-control-4-mens-workout-shoes-14Z62l/CD0197-002" target="_blank" rel="nofollow" data-dimension112="c590e2f8-ce16-11f1-9abb-fdb00f6f4e11" data-action="Deal Block" data-label="Flex Control 4 (Men's)" data-dimension48="Flex Control 4 (Men's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="c590e3d4-ce16-11f1-b721-87623cdab7f0" data-action="Deal Block" data-label="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension48="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension25="$59" href="https://www.amazon.com/Monarch-Training-Shoes-Metallic-Silver-Mid/dp/B004IM3JO0" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1611px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="WvCxU4cK4R2aacLaDQGyLN" name="Air Monarch IV Training/Workout Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/WvCxU4cK4R2aacLaDQGyLN-1920-80.jpg" mos="" align="middle" fullscreen="" width="1611" height="806" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Monarch-Training-Shoes-Metallic-Silver-Mid/dp/B004IM3JO0" target="_blank" rel="nofollow" data-dimension112="c590e3d4-ce16-11f1-b721-87623cdab7f0" data-action="Deal Block" data-label="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension48="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension25="$59">Air Monarch IV Training/Workout Shoes (Men's): was $85 now $59</a></strong><br>Enhance your training sessions in the gym with the Nike Air Monarch IV. They're durable, lightweight and supportive — and beloved by shoppers on Amazon, with one reviewer writing "Great comfort, cushioning, long-wearing and a great value." <a class="view-deal button" href="https://www.amazon.com/Monarch-Training-Shoes-Metallic-Silver-Mid/dp/B004IM3JO0" target="_blank" rel="nofollow" data-dimension112="c590e3d4-ce16-11f1-b721-87623cdab7f0" data-action="Deal Block" data-label="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension48="Air Monarch IV Training/Workout Shoes (Men's)" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="c590e366-ce16-11f1-afc1-3502e4696026" data-action="Deal Block" data-label="Court Shot Herrenschuh Sneakers (Men's)" data-dimension48="Court Shot Herrenschuh Sneakers (Men's)" data-dimension25="$63" href="https://www.amazon.com/Nike-Court-Shoes-Sneaker-Black/dp/B0F1325R84" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1608px;"><p class="vanilla-image-block" style="padding-top:40.80%;"><img id="pDtAyY4zxyRycE74uP7eue" name="Court Shot Herrenschuh Sneakers (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pDtAyY4zxyRycE74uP7eue-1920-80.jpg" mos="" align="middle" fullscreen="" width="1608" height="656" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Court-Shoes-Sneaker-Black/dp/B0F1325R84" target="_blank" rel="nofollow" data-dimension112="c590e366-ce16-11f1-afc1-3502e4696026" data-action="Deal Block" data-label="Court Shot Herrenschuh Sneakers (Men's)" data-dimension48="Court Shot Herrenschuh Sneakers (Men's)" data-dimension25="$63">Court Shot Herrenschuh Sneakers (Men's): was $80 now $63</a></strong><br>The Nike Court Shot Herrenschuh have a super sleek look and are perfect for elevated outfits that still look cool and casual. They have a synthetic leather upper and padded collar for a super comfortable feel. <a class="view-deal button" href="https://www.amazon.com/Nike-Court-Shoes-Sneaker-Black/dp/B0F1325R84" target="_blank" rel="nofollow" data-dimension112="c590e366-ce16-11f1-afc1-3502e4696026" data-action="Deal Block" data-label="Court Shot Herrenschuh Sneakers (Men's)" data-dimension48="Court Shot Herrenschuh Sneakers (Men's)" data-dimension25="$63">View Deal</a></p></div><div class="product"><a data-dimension112="c590e442-ce16-11f1-8f4d-2dc64e641d86" data-action="Deal Block" data-label="Run Swift 3 (Women's)" data-dimension48="Run Swift 3 (Women's)" data-dimension25="$65" href="https://www.amazon.com/Nike-Swift-Running-Shoes-Spruce-Sanddrift-Sail/dp/B0BX4B1S1T" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1723px;"><p class="vanilla-image-block" style="padding-top:47.42%;"><img id="oGEcMPMyVERhdD6die3fdA" name="Run Swift" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/oGEcMPMyVERhdD6die3fdA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1723" height="817" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Swift-Running-Shoes-Spruce-Sanddrift-Sail/dp/B0BX4B1S1T" target="_blank" rel="nofollow" data-dimension112="c590e442-ce16-11f1-8f4d-2dc64e641d86" data-action="Deal Block" data-label="Run Swift 3 (Women's)" data-dimension48="Run Swift 3 (Women's)" data-dimension25="$65">Run Swift 3 (Women's): was $85 now $65</a></strong><br>Save on the nifty Swift 3 road running shoes, which feature a durable, comfortable design and soft foam cushioning to give you plenty of support. Breathable mesh keeps air moving through with every stride, and the grippy grooves on the outsole combine flexibility with sure-footed security.<a class="view-deal button" href="https://www.amazon.com/Nike-Swift-Running-Shoes-Spruce-Sanddrift-Sail/dp/B0BX4B1S1T" target="_blank" rel="nofollow" data-dimension112="c590e442-ce16-11f1-8f4d-2dc64e641d86" data-action="Deal Block" data-label="Run Swift 3 (Women's)" data-dimension48="Run Swift 3 (Women's)" data-dimension25="$65">View Deal</a></p></div><div class="product"><a data-dimension112="28a4668c-ce1a-11f1-b29a-6326411c74db" data-action="Deal Block" data-label="Air Max Excee Shoes (Men's)" data-dimension48="Air Max Excee Shoes (Men's)" data-dimension25="$70" href="https://www.amazon.com/dp/B07T7WG4FZ?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1769px;"><p class="vanilla-image-block" style="padding-top:42.68%;"><img id="DfwCdBPWwrLSD4ywzkVkd5" name="Air Max Excee Shoes (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DfwCdBPWwrLSD4ywzkVkd5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1769" height="755" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B07T7WG4FZ?" target="_blank" rel="nofollow" data-dimension112="28a4668c-ce1a-11f1-b29a-6326411c74db" data-action="Deal Block" data-label="Air Max Excee Shoes (Men's)" data-dimension48="Air Max Excee Shoes (Men's)" data-dimension25="$70">Air Max Excee Shoes (Men's): was $100 now $70</a></strong><br>A comfortable and reliable shoe, the Nike Air Max Excee is now on sale for $70. The style puts a modern twist on the original Air Max shoes, with patches of contrasting textures across the upper.<a class="view-deal button" href="https://www.amazon.com/dp/B07T7WG4FZ?" target="_blank" rel="nofollow" data-dimension112="28a4668c-ce1a-11f1-b29a-6326411c74db" data-action="Deal Block" data-label="Air Max Excee Shoes (Men's)" data-dimension48="Air Max Excee Shoes (Men's)" data-dimension25="$70">View Deal</a></p></div><div class="product"><a data-dimension112="c590e51e-ce16-11f1-9a7f-91aad85e50c1" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82" href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="uxG2rhW9L4NBaWbeVEreNS" name="Nike Pegasus 42" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uxG2rhW9L4NBaWbeVEreNS-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow" data-dimension112="c590e51e-ce16-11f1-9a7f-91aad85e50c1" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82">Pegasus 42 (Men's): was $145 now $82</a></strong><br>Earning a 3.5-star rating in our <a href="https://www.tomsguide.com/wellness/running/nike-pegasus-42-review">Nike Pegasus 42 review</a>, we currently rank this as one of the <a href="https://www.tomsguide.com/best-picks/best-running-shoes">best running shoes</a> you can buy in terms of value. Compared to the Pegasus 41 (which was already great,) the 42 feels even smoother and more energetic underfoot. It's a great shoe for just about anybody.<a class="view-deal button" href="https://www.nike.com/t/pegasus-42-mens-road-running-shoes-S1bYkOza/IB1873-107" target="_blank" rel="nofollow" data-dimension112="c590e51e-ce16-11f1-9a7f-91aad85e50c1" data-action="Deal Block" data-label="Pegasus 42 (Men's)" data-dimension48="Pegasus 42 (Men's)" data-dimension25="$82">View Deal</a></p></div><div class="product"><a data-dimension112="def7095c-cef2-11f1-9d02-4bdf0ba83225" data-action="Deal Block" data-label="V5 RNR" data-dimension48="V5 RNR" data-dimension25="$85" href="https://www.amazon.com/Nike-Womens-Sneaker-Metallic-Silver/dp/B0FBHZFS9L" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="JYFv7uRx28KgqsJ4Gf3iga" name="Nike V5 RNR" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JYFv7uRx28KgqsJ4Gf3iga-1920-80.jpg" mos="" align="middle" fullscreen="" width="1070" height="1070" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Tackle the everyday in a shoe that matches comfort with style. Staying true to its Y2K roots, the V5 RNR has a foam midsole that's chunky yet lightweight. Plus, metallic details and a 3D Swoosh logo elevate this retro runner.<a class="view-deal button" href="https://www.amazon.com/Nike-Womens-Sneaker-Metallic-Silver/dp/B0FBHZFS9L" target="_blank" rel="nofollow" data-dimension112="def7095c-cef2-11f1-9d02-4bdf0ba83225" data-action="Deal Block" data-label="V5 RNR" data-dimension48="V5 RNR" data-dimension25="$85">View Deal</a></p></div><div class="product"><a data-dimension112="def709d4-cef2-11f1-8238-27d3bcb8e882" data-action="Deal Block" data-label="Journey Run Road Running Shoes (Men's)" data-dimension48="Journey Run Road Running Shoes (Men's)" data-dimension25="$85" href="https://www.amazon.com/Nike-Journey-Running-FN0228-001-Anthracite/dp/B0D2DJ5Z58" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="4xXdT6m9HxzUUo9qTuvaBV" name="Journey Run (Men's)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4xXdT6m9HxzUUo9qTuvaBV-1920-80.jpg" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Journey-Running-FN0228-001-Anthracite/dp/B0D2DJ5Z58" target="_blank" rel="nofollow" data-dimension112="def709d4-cef2-11f1-8238-27d3bcb8e882" data-action="Deal Block" data-label="Journey Run Road Running Shoes (Men's)" data-dimension48="Journey Run Road Running Shoes (Men's)" data-dimension25="$85">Journey Run Road Running Shoes (Men's): was $95 now $85</a></strong><br>Relish every step of the journey with the Nike Journey Run road running shoes, which were designed to pound the pavement with aplomb. You get plenty of cushioning under the heel to keep you bouncy right up until the last mile, with soft touch points in the tongue and collar to keep chafing at bay.<a class="view-deal button" href="https://www.amazon.com/Nike-Journey-Running-FN0228-001-Anthracite/dp/B0D2DJ5Z58" target="_blank" rel="nofollow" data-dimension112="def709d4-cef2-11f1-8238-27d3bcb8e882" data-action="Deal Block" data-label="Journey Run Road Running Shoes (Men's)" data-dimension48="Journey Run Road Running Shoes (Men's)" data-dimension25="$85">View Deal</a></p></div><div class="product"><a data-dimension112="c590e4b0-ce16-11f1-81fe-11e9a1a49e23" data-action="Deal Block" data-label="Pegasus 41 Running Shoes (Women's)" data-dimension48="Pegasus 41 Running Shoes (Women's)" data-dimension25="$106" href="https://www.amazon.com/Nike-Pegasus-Sneaker-Playful-Metallic/dp/B0F2G75S6N" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:695px;"><p class="vanilla-image-block" style="padding-top:44.60%;"><img id="8rtJszfW7dGEJYJc4He9CN" name="81O2j-efNTL._AC_SX695_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8rtJszfW7dGEJYJc4He9CN-1920-80.jpg" mos="" align="middle" fullscreen="" width="695" height="310" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Nike-Pegasus-Sneaker-Playful-Metallic/dp/B0F2G75S6N" target="_blank" rel="nofollow" data-dimension112="c590e4b0-ce16-11f1-81fe-11e9a1a49e23" data-action="Deal Block" data-label="Pegasus 41 Running Shoes (Women's)" data-dimension48="Pegasus 41 Running Shoes (Women's)" data-dimension25="$106">Pegasus 41 Running Shoes (Women's): was $140 now $106</a></strong><br>The ReactX midsole and higher stack on the Pegasus 41 give it a softer ride than its predecessors, but it’s not so squishy underfoot as to be unstable in any way. It’s a balanced midsole that is comfortable for easy and long runs, but has a little bounce to it when you want to up the pace. Read our full <a href="https://www.tomsguide.com/wellness/running/i-ran-35-miles-in-the-nike-pegasus-41-and-its-my-favorite-pegasus-in-years">Nike Pegasus 41 review</a> here to find out more.<a class="view-deal button" href="https://www.amazon.com/Nike-Pegasus-Sneaker-Playful-Metallic/dp/B0F2G75S6N" target="_blank" rel="nofollow" data-dimension112="c590e4b0-ce16-11f1-81fe-11e9a1a49e23" data-action="Deal Block" data-label="Pegasus 41 Running Shoes (Women's)" data-dimension48="Pegasus 41 Running Shoes (Women's)" data-dimension25="$106">View Deal</a></p></div><div class="product"><a data-dimension112="c590e5c8-ce16-11f1-a28c-3ff67766a372" data-action="Deal Block" data-label="Structure Plus (Men's)" data-dimension48="Structure Plus (Men's)" data-dimension25="$118" href="https://www.nike.com/t/structure-plus-mens-road-running-shoes-XEfeTqfe/IR1816-100" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="AsCNB6yFLQbuH7JwdNFcpf" name="Nike Structure Plus" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/AsCNB6yFLQbuH7JwdNFcpf-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/structure-plus-mens-road-running-shoes-XEfeTqfe/IR1816-100" target="_blank" rel="nofollow" data-dimension112="c590e5c8-ce16-11f1-a28c-3ff67766a372" data-action="Deal Block" data-label="Structure Plus (Men's)" data-dimension48="Structure Plus (Men's)" data-dimension25="$118">Structure Plus (Men's): was $180 now $118</a></strong><br>The<a href="https://www.tomsguide.com/wellness/running/i-ran-35-miles-in-the-nike-structure-plus-heres-my-verdict-on-nikes-most-cushioned-stability-shoe"> Nike Structure Plus </a>is a stability running shoe that provides a lot of support as well as comfort. Our tester enjoyed racking up the miles in this shoe, which is bouncier than most traditional stability shoes thanks to the ZoomX foam in its midsole.<a class="view-deal button" href="https://www.nike.com/t/structure-plus-mens-road-running-shoes-XEfeTqfe/IR1816-100" target="_blank" rel="nofollow" data-dimension112="c590e5c8-ce16-11f1-a28c-3ff67766a372" data-action="Deal Block" data-label="Structure Plus (Men's)" data-dimension48="Structure Plus (Men's)" data-dimension25="$118">View Deal</a></p></div><div class="product"><a data-dimension112="c590e6d6-ce16-11f1-9ec6-c9cddc54e6e6" data-action="Deal Block" data-label="Zoom Fly 6 (Men's)" data-dimension48="Zoom Fly 6 (Men's)" data-dimension25="$143" href="https://www.nike.com/t/zoom-fly-6-mens-road-racing-shoes-wn2ALjkm/IV6296-635" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1070px;"><p class="vanilla-image-block" style="padding-top:125.05%;"><img id="nqSnCnJGciuR9s63xgLepK" name="Nike Zoom Fly 6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nqSnCnJGciuR9s63xgLepK-1920-80.png" mos="" align="middle" fullscreen="" width="1070" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/zoom-fly-6-mens-road-racing-shoes-wn2ALjkm/IV6296-635" target="_blank" rel="nofollow" data-dimension112="c590e6d6-ce16-11f1-9ec6-c9cddc54e6e6" data-action="Deal Block" data-label="Zoom Fly 6 (Men's)" data-dimension48="Zoom Fly 6 (Men's)" data-dimension25="$143">Zoom Fly 6 (Men's): was $190 now $143</a></strong><br>The <a href="https://www.tomsguide.com/wellness/running/nike-zoom-fly-6-review">Nike Zoom Fly 6</a> is a ‘super-trainer’, which is a type of shoe that uses some of the tech from the <a href="https://www.tomsguide.com/best-picks/best-carbon-fiber-running-shoes">best carbon plate running shoes</a> in a sneaker that’s cheaper and more suitable for daily training, rather than just being good for race day.<a class="view-deal button" href="https://www.nike.com/t/zoom-fly-6-mens-road-racing-shoes-wn2ALjkm/IV6296-635" target="_blank" rel="nofollow" data-dimension112="c590e6d6-ce16-11f1-9ec6-c9cddc54e6e6" data-action="Deal Block" data-label="Zoom Fly 6 (Men's)" data-dimension48="Zoom Fly 6 (Men's)" data-dimension25="$143">View Deal</a></p></div><div class="product"><a data-dimension112="c590e78a-ce16-11f1-aaf8-5f4db6b5697f" data-action="Deal Block" data-label="Alphafly 3 (Women's)" data-dimension48="Alphafly 3 (Women's)" data-dimension25="$221" href="https://www.nike.com/t/alphafly-3-womens-road-racing-shoes-LQX5b4/FD8315-700" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1152px;"><p class="vanilla-image-block" style="padding-top:125.00%;"><img id="pTKFtRHQkEja7ovGDvyNob" name="nike alphafly 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pTKFtRHQkEja7ovGDvyNob-1920-80.png" mos="" align="middle" fullscreen="" width="1152" height="1440" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.nike.com/t/alphafly-3-womens-road-racing-shoes-LQX5b4/FD8315-700" target="_blank" rel="nofollow" data-dimension112="c590e78a-ce16-11f1-aaf8-5f4db6b5697f" data-action="Deal Block" data-label="Alphafly 3 (Women's)" data-dimension48="Alphafly 3 (Women's)" data-dimension25="$221">Alphafly 3 (Women's): was $295 now $221</a></strong><br>You can currently save 25% on the <a href="https://www.tomsguide.com/wellness/running/i-ran-80-miles-in-the-nike-alphafly-3-and-nikes-record-breaking-racing-shoe-didnt-disappoint">Nike Alphafly 3</a>, which we rank as one of the <a href="https://www.tomsguide.com/best-picks/best-carbon-fiber-running-shoes">best carbon plate running shoes</a>. These are an awesome pick for runners looking to set fast times thanks to their lightweight, propulsive design.<a class="view-deal button" href="https://www.nike.com/t/alphafly-3-womens-road-racing-shoes-LQX5b4/FD8315-700" target="_blank" rel="nofollow" data-dimension112="c590e78a-ce16-11f1-aaf8-5f4db6b5697f" data-action="Deal Block" data-label="Alphafly 3 (Women's)" data-dimension48="Alphafly 3 (Women's)" data-dimension25="$221">View Deal</a></p></div><div data-model-name="Nike Men's Pegasus 41 Road Running Shoe" data-widget-type="review"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ My 50-year-old client wanted to start lifting weights at home — these are the 4 dumbbell exercises I gave her first ]]></title>
                                                                                                <dc:content><![CDATA[ <p>You don't need a fancy, expensive gym membership to build muscle and strength. Sure, you might have more equipment available at a gym, but you can do a lot more than you may realize with just a set of <a href="https://www.tomsguide.com/wellness/fitness/best-adjustable-dumbbells">adjustable dumbbells</a> or even a medium-heavy set of fixed dumbbells and your exercise mat.</p><p>Most importantly, you need to focus on three key areas with your workouts: <strong>consistency</strong> (several times per week, if you can), <strong>staple functional </strong><a href="https://www.tomsguide.com/wellness/fitness/im-a-personal-trainer-these-are-the-5-compound-exercises-i-taught-my-dad-to-build-strength-and-muscle"><strong>compound exercises</strong></a><strong> </strong>and <strong>progressive programming. </strong>That means repeating exercises and tweaking them to feel more challenging over time while focusing on multiple muscle groups. Do that, and it doesn't matter if you're at home or in the studio.</p><p>Not long ago, my 50-year-old client asked for a home dumbbell workout she could do between sessions. These are the four moves and the routine I gave her. Just remember, this routine was designed with someone in mind. If you experience pain or feel unwell, stop immediately and seek medical advice as soon as possible.</p><h2 id="watch-20-minute-dumbbell-workout">Watch: 20-minute dumbbell workout</h2><p><em>If you're working with an injury or health condition, I recommend seeking advice before starting this routine.</em></p><ul><li><strong>Curtsy lunges: 3-4 sets of 6-8 heavy reps per side.</strong></li><li>Start with your feet hip-width apart, weights at your sides or one weight held at your chest. Step your right foot out to the side on your toes, then circle the right foot back behind your left in a wide arc over to the left. Imagine you're drawing a smiley face. Bend your knees and lower into a lunge, hinging forward slightly at the hips with a straight back. It should look like you're curtsying. Drive up through your legs and core to stand, then repeat the lunge. Switch sides after you complete your reps.</li></ul><iframe src="https://content.jwplatform.com/players/tQ98ST0x.html" id="tQ98ST0x" title="Project Move - Curtsy Lunge" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><ul><li><strong>Thrusters</strong>: <strong>3-4 sets of 8-10 reps.</strong></li><li>Stand with your feet roughly shoulder-width apart and rack your dumbbells to your shoulders, elbows drawn upward for support. Brace your core. Sit your hips back and squat, sitting as low as you can while pressing through your feet. Your chest should be proud, back straight. Drive upward to stand and press the weights overhead in one move. Keep your arms close to your ears to stabilize the weights. As you sit back into the squat, bring the weights back to your shoulders.</li></ul><iframe src="https://content.jwplatform.com/players/3fBuTsyk.html" id="3fBuTsyk" title="Project Move - Thrusters" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><ul><li><strong>Suitcase deadlifts:</strong> <strong>3-4 sets of 8-10 reps.</strong></li><li>Stand holding your weights at your sides, feet hip-width apart and core active. Set your shoulders back and down, then slowly hinge forward at your hips, maintaining a soft knee bend. Keep your chest proud and back straight. Lower the weights along your outer legs toward the ground. If you can reach the ground outside your feet without hunching, great; if not, pause near the ground, then press upward to stand with power.</li></ul><iframe src="https://content.jwplatform.com/players/r57z5PbE.html" id="r57z5PbE" title="Project Move - Suitcase Deadlift" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><ul><li><strong>Alternating rows: 3-4 sets of 6-8 heavy reps per side.</strong></li><li>Hinge forward at your hips until your chest is almost parallel to the ground, feet hip-width apart and core engaged. Hold your weights with a neutral grip in front of your shins. With control, row one weight toward your back pocket, elbow nice and close to your body. Pause, squeeze your back, then lower the weight again. Repeat on the other side.</li></ul><iframe src="https://content.jwplatform.com/players/1Do7LJ9j.html" id="1Do7LJ9j" title="Project Move - Alternating Row" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><h2 id="what-are-the-benefits-2">What are the benefits?</h2><div><blockquote><p>You're hitting pretty much every major muscle group during this routine</p></blockquote></div><p>You're hitting pretty much every major muscle group during this routine; <strong>curtsy lunges </strong>strengthen your legs with an outer gluteus and adductor bias, meaning your butt and inner thighs will feel this one; <strong>thrusters</strong> work the whole body, including your legs, glutes, core, triceps, shoulders and upper chest; <strong>suitcase deadlifts</strong> work your posterior chain, including your lower back, glutes and hamstrings, but the position of the weights will also strengthen your quads and knees, and your core works hard for stability; finally, <strong>rows</strong> hit your back and biceps, meaning better posture and pulling power while improving your hip hinge.</p><p>I like to load quite heavy on these exercises, but make sure your form doesn't get put to one side for the sake of load. A general rule of thumb: aim for the last two or three reps to be difficult to finish, but not impossible. Lifting close to failure with intensity is one of the <a href="https://www.tomsguide.com/features/5-clever-ways-to-build-muscle-without-lifting-heavy">best ways to build muscle </a>and make gains with your routine. </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><p>Take 30-60 seconds of rest between your sets and move with control. You could also try slowing the tempo of each move to increase overall intensity. </p><p>My client rates this routine for working her whole body while remaining low-impact and easy to scale up or down. She's moved up in weight a few times since we first programmed it, and credits it with helping her build and maintain muscle and strength between her gym sessions. Plus, she doesn't have to leave the house. Bonus!</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="vGnNDN" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank"><strong>I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-how-to-be-strong-and-mobile-this-is-the-one-exercise-i-regret-ignoring-for-years" target="_blank"><strong>I teach people how to be strong and mobile: this is the one exercise I regret ignoring for years</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank"><strong>I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/workouts/my-50-year-old-client-wanted-to-start-lifting-weights-at-home-these-are-the-4-dumbbell-exercises-i-gave-her-first</link>
                                                                            <description>
                            <![CDATA[ Try this 20-minute dumbbell workout for a full-body burn at home with one set of weights. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DCV94y2sqW34MQVdj25FN7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/GqBJRADbSUyK5DaQt7pw9g-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 09:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 22 Oct 2026 17:28:36 +0000</updated>
                                                                                                                                            <category><![CDATA[Workouts]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Fitness]]></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-320-70.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;Live Science&lt;/a&gt;,&lt;a href=&quot;https://www.fitandwell.com/author/sam-hopes&quot;&gt; Fit&amp;amp;Well&lt;/a&gt;,&lt;a href=&quot;https://www.coachweb.com/author/sam-hopes&quot;&gt; Coach&lt;/a&gt;, and T3. &lt;/p&gt;&lt;p&gt;Having worked with fitness studios like F45 and Virgin Active and trained both group and 1:1, Sam now primarily teaches outdoor bootcamps, bodyweight, 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, Pilates 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, mindfulness, 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/GqBJRADbSUyK5DaQt7pw9g-1920-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a woman performing dumbbell curls]]></media:description>                                                            <media:text><![CDATA[a woman performing dumbbell curls]]></media:text>
                                <media:title type="plain"><![CDATA[a woman performing dumbbell curls]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/GqBJRADbSUyK5DaQt7pw9g-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>You don't need a fancy, expensive gym membership to build muscle and strength. Sure, you might have more equipment available at a gym, but you can do a lot more than you may realize with just a set of <a href="https://www.tomsguide.com/wellness/fitness/best-adjustable-dumbbells">adjustable dumbbells</a> or even a medium-heavy set of fixed dumbbells and your exercise mat.</p><p>Most importantly, you need to focus on three key areas with your workouts: <strong>consistency</strong> (several times per week, if you can), <strong>staple functional </strong><a href="https://www.tomsguide.com/wellness/fitness/im-a-personal-trainer-these-are-the-5-compound-exercises-i-taught-my-dad-to-build-strength-and-muscle"><strong>compound exercises</strong></a><strong> </strong>and <strong>progressive programming. </strong>That means repeating exercises and tweaking them to feel more challenging over time while focusing on multiple muscle groups. Do that, and it doesn't matter if you're at home or in the studio.</p><p>Not long ago, my 50-year-old client asked for a home dumbbell workout she could do between sessions. These are the four moves and the routine I gave her. Just remember, this routine was designed with someone in mind. If you experience pain or feel unwell, stop immediately and seek medical advice as soon as possible.</p><h2 id="watch-20-minute-dumbbell-workout">Watch: 20-minute dumbbell workout</h2><p><em>If you're working with an injury or health condition, I recommend seeking advice before starting this routine.</em></p><ul><li><strong>Curtsy lunges: 3-4 sets of 6-8 heavy reps per side.</strong></li><li>Start with your feet hip-width apart, weights at your sides or one weight held at your chest. Step your right foot out to the side on your toes, then circle the right foot back behind your left in a wide arc over to the left. Imagine you're drawing a smiley face. Bend your knees and lower into a lunge, hinging forward slightly at the hips with a straight back. It should look like you're curtsying. Drive up through your legs and core to stand, then repeat the lunge. Switch sides after you complete your reps.</li></ul><iframe src="https://content.jwplatform.com/players/tQ98ST0x.html" id="tQ98ST0x" title="Project Move - Curtsy Lunge" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><ul><li><strong>Thrusters</strong>: <strong>3-4 sets of 8-10 reps.</strong></li><li>Stand with your feet roughly shoulder-width apart and rack your dumbbells to your shoulders, elbows drawn upward for support. Brace your core. Sit your hips back and squat, sitting as low as you can while pressing through your feet. Your chest should be proud, back straight. Drive upward to stand and press the weights overhead in one move. Keep your arms close to your ears to stabilize the weights. As you sit back into the squat, bring the weights back to your shoulders.</li></ul><iframe src="https://content.jwplatform.com/players/3fBuTsyk.html" id="3fBuTsyk" title="Project Move - Thrusters" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><ul><li><strong>Suitcase deadlifts:</strong> <strong>3-4 sets of 8-10 reps.</strong></li><li>Stand holding your weights at your sides, feet hip-width apart and core active. Set your shoulders back and down, then slowly hinge forward at your hips, maintaining a soft knee bend. Keep your chest proud and back straight. Lower the weights along your outer legs toward the ground. If you can reach the ground outside your feet without hunching, great; if not, pause near the ground, then press upward to stand with power.</li></ul><iframe src="https://content.jwplatform.com/players/r57z5PbE.html" id="r57z5PbE" title="Project Move - Suitcase Deadlift" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><ul><li><strong>Alternating rows: 3-4 sets of 6-8 heavy reps per side.</strong></li><li>Hinge forward at your hips until your chest is almost parallel to the ground, feet hip-width apart and core engaged. Hold your weights with a neutral grip in front of your shins. With control, row one weight toward your back pocket, elbow nice and close to your body. Pause, squeeze your back, then lower the weight again. Repeat on the other side.</li></ul><iframe src="https://content.jwplatform.com/players/1Do7LJ9j.html" id="1Do7LJ9j" title="Project Move - Alternating Row" width="960" height="540" frameborder="0" scrolling="auto" allowfullscreen></iframe><h2 id="what-are-the-benefits-2">What are the benefits?</h2><div><blockquote><p>You're hitting pretty much every major muscle group during this routine</p></blockquote></div><p>You're hitting pretty much every major muscle group during this routine; <strong>curtsy lunges </strong>strengthen your legs with an outer gluteus and adductor bias, meaning your butt and inner thighs will feel this one; <strong>thrusters</strong> work the whole body, including your legs, glutes, core, triceps, shoulders and upper chest; <strong>suitcase deadlifts</strong> work your posterior chain, including your lower back, glutes and hamstrings, but the position of the weights will also strengthen your quads and knees, and your core works hard for stability; finally, <strong>rows</strong> hit your back and biceps, meaning better posture and pulling power while improving your hip hinge.</p><p>I like to load quite heavy on these exercises, but make sure your form doesn't get put to one side for the sake of load. A general rule of thumb: aim for the last two or three reps to be difficult to finish, but not impossible. Lifting close to failure with intensity is one of the <a href="https://www.tomsguide.com/features/5-clever-ways-to-build-muscle-without-lifting-heavy">best ways to build muscle </a>and make gains with your routine. </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><p>Take 30-60 seconds of rest between your sets and move with control. You could also try slowing the tempo of each move to increase overall intensity. </p><p>My client rates this routine for working her whole body while remaining low-impact and easy to scale up or down. She's moved up in weight a few times since we first programmed it, and credits it with helping her build and maintain muscle and strength between her gym sessions. Plus, she doesn't have to leave the house. Bonus!</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="vGnNDN" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEq7ae"></div>                            </div>                            <script src="https://kwizly.com/embed/eEq7ae.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/workouts/i-teach-people-how-to-be-more-mobile-3-low-impact-back-and-shoulder-moves-that-build-stability-and-strength-after-40" target="_blank"><strong>I teach people how to be more mobile: 3 low-impact back and shoulder moves that build stability and strength after 40</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-how-to-be-strong-and-mobile-this-is-the-one-exercise-i-regret-ignoring-for-years" target="_blank"><strong>I teach people how to be strong and mobile: this is the one exercise I regret ignoring for years</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/workouts/i-teach-people-over-50-to-be-mobile-3-low-impact-moves-that-build-more-stability-than-a-30-minute-walk" target="_blank"><strong>I teach people over 50 to be mobile: 3 low-impact moves that build more stability than a 30-minute walk</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve tested the Garmin Forerunner 570 vs Coros Pace 4 Pro — which should you buy? ]]></title>
                                                                                                <dc:content><![CDATA[         <div class="featured_product_block featured_block_versus" data-id="0a01f8e8-cbb8-11f1-982f-4b921c208808">            <a href="https://www.amazon.com/Forerunner%C2%AE-Advanced-Triathlon-Smartwatch-Translucent/dp/B0F8QZF3GS/" data-model-name="Garmin Forerunner 570" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:117.90%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BLdSu46ieynvWdaMFngUxE.png" alt="Garmin, Forerunner 570"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Garmin</div>                    <div class="featured__title">Forerunner 570</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>The Garmin Forerunner 570 is a great-looking sports watch that comes in two size and offers useful smarts, but lacks maps and doesn't match the Coros' battery life.</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="0a01fa1e-cbb8-11f1-8c0a-5d51deb0eac4">            <a href="https://www.amazon.com/COROS-PACE-Pro-AMOLED-Titanium/dp/B0HGMV1NNV/" data-model-name="Coros Pace 4 Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:123.08%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jFLedsASvoLsKnhy5dmkWk.png" alt="Coros, Pace 4 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Coros</div>                    <div class="featured__title">Pace 4 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>The Coros Pace 4 Pro is cheaper than the Forerunner 570 and offers longer battery life, maps and a bigger screen as key upgrades on the Garmin.</p></p>                </div>                            </div>        </div><p>The Coros Pace 4 Pro is one of the <a href="https://www.tomsguide.com/us/best-gps-watches,review-2638.html">best sports watches</a> to come out this year, and I’ve kept it on since testing it for my review to use as my main running watch during marathon training.</p><p>It’s a key competitor to Garmin’s Forerunner line-up, and the Garmin Forerunner 570 in particular, which lacks a key feature the Pace 4 Pro has in the shape of offline maps.</p><p>However, the Forerunner 570 does outshine the cheaper Coros in some areas, most notably smart features and training analysis, and it comes in two sizes.</p><p>I’ve run hundreds of miles with both watches individually in testing, and also wore them both for a run to test them head-to-head. </p><p>I’ve outlined the key differences to consider below, and for more details on either, check our <a href="https://www.tomsguide.com/wellness/smartwatches/coros-pace-4-pro-review">Coros Pace 4 Pro review </a>and <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-570-review">Garmin Forerunner 570 </a>review.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-price"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: price</span></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="dJ84DB5vHgHA6qpnu3hiik" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/dJ84DB5vHgHA6qpnu3hiik-1920-80.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>The Coros Pace 4 Pro is the cheaper watch, costing $449/£389 compared to $549.99/£459.99 for the Forerunner 570. That’s at full price, but it’s worth noting the Forerunner 570 is reduced quite regularly to $449, the same price as the Coros.</p><p>Right now, the Pace 4 Pro only comes in one size with two colors: black and white. The Forerunner 570 comes in two sizes — 42mm and 47mm — with three colors available in each size.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-design-and-display"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: design and display</span></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="Zr8VkGiR9wi7Z9LvnEFq9k" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/Zr8VkGiR9wi7Z9LvnEFq9k-1920-80.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>The Forerunner 570 has some design advantages purely in terms of the choice on offer — there are brighter colors available and having the smaller size option is great for those with smaller wrists.</p><p>I also slightly prefer the five-button design on the Garmin to the three buttons on the Coros, one of which is a digital dial, just because I sometimes set off the dial accidentally and find it less precise than buttons.</p><p>Both are attractive watches with bright AMOLED displays, but the Coros has a larger screen at 1.47 in to 1.4 in on the 47mm Forerunner 570 I tested (1.2 in on the 42mm watch), and it also uses more durable materials.</p><p>The Pace 4 Pro has a titanium bezel and sapphire crystal screen, whereas the Forerunner 570 has a Gorilla Glass screen and aluminum bezel. The sapphire crystal display in particular is a bonus for me as someone who has scratched glass screens in the past on runs.</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="oTTy7AhCCqsssw4qAcvZDk" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/oTTy7AhCCqsssw4qAcvZDk-1920-80.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>Both 47mm watches feel light on the wrist, with the Coros being a little thinner, but the Garmin a little lighter. I found both comfortable to wear 24/7.</p><p>You get more storage on the Pace 4 Pro, which has 32GB of space compared with 8GB on the Garmin, which makes room for the maps you can download to the Coros.</p><p>Neither watch has a built-in flashlight, which is surprising for the Forerunner 570 since it’s a feature that is found on many Garmins, including the Venu 4 at the same price.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-sports-tracking-and-training-analysis"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: sports tracking and training analysis</span></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="vaPA5Xb4PPPTv8GhRbtXXF" name="Coros Pace 4 Pro" alt="Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/vaPA5Xb4PPPTv8GhRbtXXF-1920-80.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>Both watches offer a wide array of sports modes, including track run, triathlon and open water swimming, with lots of stats available for the main sports of running, cycling and swimming in particular.</p><p>Though it doesn’t have all the training analysis features found on pricier Garmins, the Forerunner 570 does offer more features in this area than the Coros Pace 4 Pro.</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="7nccQH7qX4hMXSwJDn3F8Y" name="Garmin Forerunner 570" alt="Garmin Forerunner 570" src="https://cdn.mos.cms.futurecdn.net/7nccQH7qX4hMXSwJDn3F8Y-1920-80.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: Future)</span></figcaption></figure><p>One notable extra is Garmin’s Training Readiness rating, which condenses a lot of the data it tracks into one score you can use to guide your approach to training on any given day. </p><p>I also think Garmin does a better job of showing its training analysis in an engaging and easy-to-understand way.</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="gdTWHtUBE9eGBc6ACrdadE" name="Coros Pace 4 Pro" alt="Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/gdTWHtUBE9eGBc6ACrdadE-1920-80.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>The Coros does offer a good level of insight into your training, though, including info on your overall training load, VO2 max estimates, race predictions, and a recovery advisor. I don’t think the Pace 4 Pro is lacking in this area, but the Garmin does offer more.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-gps-and-heart-rate-accuracy"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: GPS and heart rate accuracy</span></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="xPczimNMFRvRBM3DvEJFKk" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/xPczimNMFRvRBM3DvEJFKk-1920-80.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>Throughout testing, I kept constant tabs on the GPS accuracy of the watches by checking their tracks and looking at the pacing and distance stats in comparison to other top watches. </p><p>I also raced with both to see if they lined up with the official race distances, and both have been excellent for me with regard to GPS accuracy. I used the most accurate multi-band mode in both watches and haven’t experienced any noticeable errors with either.</p><p>To check their heart rate accuracy, I compared them with the readings from a chest strap sensor for a variety of workouts.</p><p>Both impressed again, but the odd error did creep in, I’d say more noticeably with the Coros Pace 4 Pro, which would show the occasional incorrect spike in heart rate and lag behind the chest strap more noticeably during interval sessions.</p><p>I’d call it a draw on GPS accuracy and give the Garmin an edge on heart rate accuracy, but both are very strong in both areas based on my testing.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-smart-features"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: smart features</span></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:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zu2CfBjMWGPPEm2XeAhx6k" name="Garmin Forerunner 570" alt="Garmin Forerunner 570" src="https://cdn.mos.cms.futurecdn.net/zu2CfBjMWGPPEm2XeAhx6k-1920-80.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: Future)</span></figcaption></figure><p>One area where the Forerunner 570 easily beats the Coros Pace 4 Pro is smart features.  </p><p>The best Garmin watches in general are way ahead of their sporty rivals on this front, offering NFC payments, music storage including being able to link with streaming services like Spotify, and the Connect IQ app store, which does contain useful extras for the watch.</p><p>You also get more smart widgets on the Forerunner 570, like a calendar app and sports scores, and you can customize the watch face a lot more than on the Coros.</p><p>While the Pace 4 Pro does offer music storage, it can’t link with streaming apps, so you have to drag and drop MP3 files onto the watch, and it doesn’t offer NFC payments or an app store, beyond being able to send new watch faces from the app.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-maps-and-navigation"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: maps and navigation</span></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="PgE4gYNqYkm6Z9VNhWJbcF" name="Coros Pace 4 Pro" alt="Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/PgE4gYNqYkm6Z9VNhWJbcF-1920-80.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>Garmin has the best maps and navigation tools available for sports watches, but only on its top-end devices, and the Forerunner 570 only offers breadcrumb navigation.</p><p>The Coros Pace 4 Pro has full offline maps, making navigation easier, especially when following routes on the watch, and it also delivers alerts when notable climbs and descents are coming up on your route.</p><p>Breadcrumb navigation is fine most of the time, but the maps on the Pace 4 Pro are a clear advantage over the Forerunner 570.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-battery-life"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: battery life</span></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="zTmBdBP2auvT8jFfaYjKgk" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/zTmBdBP2auvT8jFfaYjKgk-1920-80.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>Battery life is an area where Coros always shines, and the Pace 4 Pro easily outlasts the Forerunner 570 in both watch and GPS modes.</p><p>The 47mm Forerunner 570 lasts up to 11 days in watch mode and offers 14 hours of multi-band GPS tracking, whereas the Pace 4 Pro can last up to 21 days in watch mode and has 30 hours of multi-band GPS.</p><p>In my testing, I had the screen always on with both watches, which reduces battery life, and ran every day using the GPS, and the Forerunner 570 needed charging every three to four days, whereas the Coros lasted me seven days on a charge.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-specs-compared"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: specs compared</span></h2><div ><table><caption>Garmin Forerunner 265 vs Forerunner 570</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Coros Pace 4 Pro</strong></p></td><td  ><p><strong>Forerunner 570 (42mm)</strong></p></td><td  ><p><strong>Forerunner 570 (47mm) </strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$449/£389</p></td><td  ><p>$549/£459</p></td><td  ><p>$549/£459</p></td></tr><tr><td class="firstcol " ><p><strong>Case size</strong></p></td><td  ><p>47.6 x 11.8mm</p></td><td  ><p>42.4 x 12.9 mm</p></td><td  ><p>47 x 12.9 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Screen size</strong></p></td><td  ><p>1.47 inches </p></td><td  ><p>1.2 inches</p></td><td  ><p>1.4 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>416 x 416 pixels</p></td><td  ><p>390 x 390 pixels</p></td><td  ><p>454 x 454 pixels</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>51g</p></td><td  ><p>42g</p></td><td  ><p>50g</p></td></tr><tr><td class="firstcol " ><p><strong>Multi-band GPS battery life</strong></p></td><td  ><p>30 hours</p></td><td  ><p>13 hours</p></td><td  ><p>14 hours</p></td></tr><tr><td class="firstcol " ><p><strong>Smartwatch battery life</strong></p></td><td  ><p>21 says</p></td><td  ><p>10 days</p></td><td  ><p>11 days</p></td></tr><tr><td class="firstcol " ><p><strong>Maps</strong></p></td><td  ><p>Yes</p></td><td  ><p>No</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Music storage</strong></p></td><td  ><p>MP3 files only</p></td><td  ><p>Yes & streaming services support</p></td><td  ><p>Yes & streaming services support</p></td></tr><tr><td class="firstcol " ><p><strong>NFC payments</strong></p></td><td  ><p>No</p></td><td  ><p>Yes</p></td><td  ><p>Yes</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>32GB</p></td><td  ><p>8GB</p></td><td  ><p>8GB</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-verdict"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: verdict</span></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="qt2iQQVahE7MegYzxMaDak" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/qt2iQQVahE7MegYzxMaDak-1920-80.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>The Garmin Forerunner 570 is a great sports watch, but given its high price, it’s definitely a shame Garmin left out some key features, including maps and a flashlight.</p><p>Unless you really need the smart features on the watch, or love its design and smaller size option, the Coros Pace 4 Pro is the better buy in my opinion.</p><p>It’s cheaper, lasts longer on a charge, has maps and a bigger display, and has proved to be reliably accurate and enjoyable to wear 24/7 in my experience.</p><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/if-you-enjoy-lifting-weights-these-are-the-only-3-gym-shoes-id-wear-and-theyre-up-to-30-percent-off-in-prime-day-sales"><strong>If you enjoy lifting weights — these are the only 3 gym shoes I'd wear, and they're up to 30% off in Prime Day sales</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/running/ive-tested-the-hoka-clifton-11-vs-hoka-bondi-9-and-this-is-the-one-id-buy"><strong>I’ve tested the Hoka Clifton 11 vs Hoka Bondi 9 and this is the one I’d buy</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/running/my-favorite-trail-running-shoe-is-34-percent-off-for-prime-day-and-its-great-for-hiking-too"><strong>My favorite trail-running shoe is 34% off for Prime Day, and it’s great for hiking too</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/ive-tested-the-garmin-forerunner-570-vs-coros-pace-4-pro-which-should-you-buy</link>
                                                                            <description>
                            <![CDATA[ The Coros Pace 4 Pro comes in cheaper than the Garmin Forerunner 570 while offering maps, but the Garmin fights back with better smarts and extra training analysis. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">XjQuC66hshx7nwbvEXVZn3</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EkhMVbLctUoo4YPd4uXqNk-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 08:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Smartwatches]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nick Harris-Fry ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/J5Jjp49GUVjLZEbjEkTex-320-70.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/EkhMVbLctUoo4YPd4uXqNk-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Garmin Forerunner 570 vs Coros Pace 4 Pro]]></media:description>                                                            <media:text><![CDATA[Garmin Forerunner 570 vs Coros Pace 4 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[Garmin Forerunner 570 vs Coros Pace 4 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EkhMVbLctUoo4YPd4uXqNk-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="featured_product_block featured_block_versus" data-id="0a01f8e8-cbb8-11f1-982f-4b921c208808">            <a href="https://www.amazon.com/Forerunner%C2%AE-Advanced-Triathlon-Smartwatch-Translucent/dp/B0F8QZF3GS/" data-model-name="Garmin Forerunner 570" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:117.90%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BLdSu46ieynvWdaMFngUxE.png" alt="Garmin, Forerunner 570"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Garmin</div>                    <div class="featured__title">Forerunner 570</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>The Garmin Forerunner 570 is a great-looking sports watch that comes in two size and offers useful smarts, but lacks maps and doesn't match the Coros' battery life.</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="0a01fa1e-cbb8-11f1-8c0a-5d51deb0eac4">            <a href="https://www.amazon.com/COROS-PACE-Pro-AMOLED-Titanium/dp/B0HGMV1NNV/" data-model-name="Coros Pace 4 Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:123.08%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jFLedsASvoLsKnhy5dmkWk.png" alt="Coros, Pace 4 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Coros</div>                    <div class="featured__title">Pace 4 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>The Coros Pace 4 Pro is cheaper than the Forerunner 570 and offers longer battery life, maps and a bigger screen as key upgrades on the Garmin.</p></p>                </div>                            </div>        </div><p>The Coros Pace 4 Pro is one of the <a href="https://www.tomsguide.com/us/best-gps-watches,review-2638.html">best sports watches</a> to come out this year, and I’ve kept it on since testing it for my review to use as my main running watch during marathon training.</p><p>It’s a key competitor to Garmin’s Forerunner line-up, and the Garmin Forerunner 570 in particular, which lacks a key feature the Pace 4 Pro has in the shape of offline maps.</p><p>However, the Forerunner 570 does outshine the cheaper Coros in some areas, most notably smart features and training analysis, and it comes in two sizes.</p><p>I’ve run hundreds of miles with both watches individually in testing, and also wore them both for a run to test them head-to-head. </p><p>I’ve outlined the key differences to consider below, and for more details on either, check our <a href="https://www.tomsguide.com/wellness/smartwatches/coros-pace-4-pro-review">Coros Pace 4 Pro review </a>and <a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-570-review">Garmin Forerunner 570 </a>review.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-price"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: price</span></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="dJ84DB5vHgHA6qpnu3hiik" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/dJ84DB5vHgHA6qpnu3hiik-1920-80.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>The Coros Pace 4 Pro is the cheaper watch, costing $449/£389 compared to $549.99/£459.99 for the Forerunner 570. That’s at full price, but it’s worth noting the Forerunner 570 is reduced quite regularly to $449, the same price as the Coros.</p><p>Right now, the Pace 4 Pro only comes in one size with two colors: black and white. The Forerunner 570 comes in two sizes — 42mm and 47mm — with three colors available in each size.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-design-and-display"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: design and display</span></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="Zr8VkGiR9wi7Z9LvnEFq9k" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/Zr8VkGiR9wi7Z9LvnEFq9k-1920-80.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>The Forerunner 570 has some design advantages purely in terms of the choice on offer — there are brighter colors available and having the smaller size option is great for those with smaller wrists.</p><p>I also slightly prefer the five-button design on the Garmin to the three buttons on the Coros, one of which is a digital dial, just because I sometimes set off the dial accidentally and find it less precise than buttons.</p><p>Both are attractive watches with bright AMOLED displays, but the Coros has a larger screen at 1.47 in to 1.4 in on the 47mm Forerunner 570 I tested (1.2 in on the 42mm watch), and it also uses more durable materials.</p><p>The Pace 4 Pro has a titanium bezel and sapphire crystal screen, whereas the Forerunner 570 has a Gorilla Glass screen and aluminum bezel. The sapphire crystal display in particular is a bonus for me as someone who has scratched glass screens in the past on runs.</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="oTTy7AhCCqsssw4qAcvZDk" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/oTTy7AhCCqsssw4qAcvZDk-1920-80.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>Both 47mm watches feel light on the wrist, with the Coros being a little thinner, but the Garmin a little lighter. I found both comfortable to wear 24/7.</p><p>You get more storage on the Pace 4 Pro, which has 32GB of space compared with 8GB on the Garmin, which makes room for the maps you can download to the Coros.</p><p>Neither watch has a built-in flashlight, which is surprising for the Forerunner 570 since it’s a feature that is found on many Garmins, including the Venu 4 at the same price.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-sports-tracking-and-training-analysis"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: sports tracking and training analysis</span></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="vaPA5Xb4PPPTv8GhRbtXXF" name="Coros Pace 4 Pro" alt="Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/vaPA5Xb4PPPTv8GhRbtXXF-1920-80.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>Both watches offer a wide array of sports modes, including track run, triathlon and open water swimming, with lots of stats available for the main sports of running, cycling and swimming in particular.</p><p>Though it doesn’t have all the training analysis features found on pricier Garmins, the Forerunner 570 does offer more features in this area than the Coros Pace 4 Pro.</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="7nccQH7qX4hMXSwJDn3F8Y" name="Garmin Forerunner 570" alt="Garmin Forerunner 570" src="https://cdn.mos.cms.futurecdn.net/7nccQH7qX4hMXSwJDn3F8Y-1920-80.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: Future)</span></figcaption></figure><p>One notable extra is Garmin’s Training Readiness rating, which condenses a lot of the data it tracks into one score you can use to guide your approach to training on any given day. </p><p>I also think Garmin does a better job of showing its training analysis in an engaging and easy-to-understand way.</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="gdTWHtUBE9eGBc6ACrdadE" name="Coros Pace 4 Pro" alt="Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/gdTWHtUBE9eGBc6ACrdadE-1920-80.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>The Coros does offer a good level of insight into your training, though, including info on your overall training load, VO2 max estimates, race predictions, and a recovery advisor. I don’t think the Pace 4 Pro is lacking in this area, but the Garmin does offer more.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-gps-and-heart-rate-accuracy"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: GPS and heart rate accuracy</span></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="xPczimNMFRvRBM3DvEJFKk" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/xPczimNMFRvRBM3DvEJFKk-1920-80.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>Throughout testing, I kept constant tabs on the GPS accuracy of the watches by checking their tracks and looking at the pacing and distance stats in comparison to other top watches. </p><p>I also raced with both to see if they lined up with the official race distances, and both have been excellent for me with regard to GPS accuracy. I used the most accurate multi-band mode in both watches and haven’t experienced any noticeable errors with either.</p><p>To check their heart rate accuracy, I compared them with the readings from a chest strap sensor for a variety of workouts.</p><p>Both impressed again, but the odd error did creep in, I’d say more noticeably with the Coros Pace 4 Pro, which would show the occasional incorrect spike in heart rate and lag behind the chest strap more noticeably during interval sessions.</p><p>I’d call it a draw on GPS accuracy and give the Garmin an edge on heart rate accuracy, but both are very strong in both areas based on my testing.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-smart-features"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: smart features</span></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:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zu2CfBjMWGPPEm2XeAhx6k" name="Garmin Forerunner 570" alt="Garmin Forerunner 570" src="https://cdn.mos.cms.futurecdn.net/zu2CfBjMWGPPEm2XeAhx6k-1920-80.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: Future)</span></figcaption></figure><p>One area where the Forerunner 570 easily beats the Coros Pace 4 Pro is smart features.  </p><p>The best Garmin watches in general are way ahead of their sporty rivals on this front, offering NFC payments, music storage including being able to link with streaming services like Spotify, and the Connect IQ app store, which does contain useful extras for the watch.</p><p>You also get more smart widgets on the Forerunner 570, like a calendar app and sports scores, and you can customize the watch face a lot more than on the Coros.</p><p>While the Pace 4 Pro does offer music storage, it can’t link with streaming apps, so you have to drag and drop MP3 files onto the watch, and it doesn’t offer NFC payments or an app store, beyond being able to send new watch faces from the app.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-maps-and-navigation"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: maps and navigation</span></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="PgE4gYNqYkm6Z9VNhWJbcF" name="Coros Pace 4 Pro" alt="Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/PgE4gYNqYkm6Z9VNhWJbcF-1920-80.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>Garmin has the best maps and navigation tools available for sports watches, but only on its top-end devices, and the Forerunner 570 only offers breadcrumb navigation.</p><p>The Coros Pace 4 Pro has full offline maps, making navigation easier, especially when following routes on the watch, and it also delivers alerts when notable climbs and descents are coming up on your route.</p><p>Breadcrumb navigation is fine most of the time, but the maps on the Pace 4 Pro are a clear advantage over the Forerunner 570.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-battery-life"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: battery life</span></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="zTmBdBP2auvT8jFfaYjKgk" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/zTmBdBP2auvT8jFfaYjKgk-1920-80.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>Battery life is an area where Coros always shines, and the Pace 4 Pro easily outlasts the Forerunner 570 in both watch and GPS modes.</p><p>The 47mm Forerunner 570 lasts up to 11 days in watch mode and offers 14 hours of multi-band GPS tracking, whereas the Pace 4 Pro can last up to 21 days in watch mode and has 30 hours of multi-band GPS.</p><p>In my testing, I had the screen always on with both watches, which reduces battery life, and ran every day using the GPS, and the Forerunner 570 needed charging every three to four days, whereas the Coros lasted me seven days on a charge.</p><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-specs-compared"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: specs compared</span></h2><div ><table><caption>Garmin Forerunner 265 vs Forerunner 570</caption><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>Coros Pace 4 Pro</strong></p></td><td  ><p><strong>Forerunner 570 (42mm)</strong></p></td><td  ><p><strong>Forerunner 570 (47mm) </strong></p></td></tr><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$449/£389</p></td><td  ><p>$549/£459</p></td><td  ><p>$549/£459</p></td></tr><tr><td class="firstcol " ><p><strong>Case size</strong></p></td><td  ><p>47.6 x 11.8mm</p></td><td  ><p>42.4 x 12.9 mm</p></td><td  ><p>47 x 12.9 mm</p></td></tr><tr><td class="firstcol " ><p><strong>Screen size</strong></p></td><td  ><p>1.47 inches </p></td><td  ><p>1.2 inches</p></td><td  ><p>1.4 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>416 x 416 pixels</p></td><td  ><p>390 x 390 pixels</p></td><td  ><p>454 x 454 pixels</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>51g</p></td><td  ><p>42g</p></td><td  ><p>50g</p></td></tr><tr><td class="firstcol " ><p><strong>Multi-band GPS battery life</strong></p></td><td  ><p>30 hours</p></td><td  ><p>13 hours</p></td><td  ><p>14 hours</p></td></tr><tr><td class="firstcol " ><p><strong>Smartwatch battery life</strong></p></td><td  ><p>21 says</p></td><td  ><p>10 days</p></td><td  ><p>11 days</p></td></tr><tr><td class="firstcol " ><p><strong>Maps</strong></p></td><td  ><p>Yes</p></td><td  ><p>No</p></td><td  ><p>No</p></td></tr><tr><td class="firstcol " ><p><strong>Music storage</strong></p></td><td  ><p>MP3 files only</p></td><td  ><p>Yes & streaming services support</p></td><td  ><p>Yes & streaming services support</p></td></tr><tr><td class="firstcol " ><p><strong>NFC payments</strong></p></td><td  ><p>No</p></td><td  ><p>Yes</p></td><td  ><p>Yes</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>32GB</p></td><td  ><p>8GB</p></td><td  ><p>8GB</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-garmin-forerunner-570-vs-coros-pace-4-pro-verdict"><span>Garmin Forerunner 570 vs Coros Pace 4 Pro: verdict</span></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="qt2iQQVahE7MegYzxMaDak" name="Garmin Forerunner 570 vs Coros Pace 4 Pro" alt="Garmin Forerunner 570 vs Coros Pace 4 Pro" src="https://cdn.mos.cms.futurecdn.net/qt2iQQVahE7MegYzxMaDak-1920-80.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>The Garmin Forerunner 570 is a great sports watch, but given its high price, it’s definitely a shame Garmin left out some key features, including maps and a flashlight.</p><p>Unless you really need the smart features on the watch, or love its design and smaller size option, the Coros Pace 4 Pro is the better buy in my opinion.</p><p>It’s cheaper, lasts longer on a charge, has maps and a bigger display, and has proved to be reliably accurate and enjoyable to wear 24/7 in my experience.</p><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/if-you-enjoy-lifting-weights-these-are-the-only-3-gym-shoes-id-wear-and-theyre-up-to-30-percent-off-in-prime-day-sales"><strong>If you enjoy lifting weights — these are the only 3 gym shoes I'd wear, and they're up to 30% off in Prime Day sales</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/running/ive-tested-the-hoka-clifton-11-vs-hoka-bondi-9-and-this-is-the-one-id-buy"><strong>I’ve tested the Hoka Clifton 11 vs Hoka Bondi 9 and this is the one I’d buy</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/running/my-favorite-trail-running-shoe-is-34-percent-off-for-prime-day-and-its-great-for-hiking-too"><strong>My favorite trail-running shoe is 34% off for Prime Day, and it’s great for hiking too</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The clocks go back on Sunday — 3 steps to take tonight to thrive, not just survive, the shift to shorter days ]]></title>
                                                                                                <dc:content><![CDATA[ <p>This<strong> Sunday, 25th October 2026</strong>, the clocks go back, marking the end of daylight savings. At 2 a.m. the clocks will shift back one hour to 1 a.m., giving us an extra hour in bed. </p><p>However, <a href="https://www.bristol.ac.uk/news/2024/october/clock-changes.html" target="_blank">studies suggest</a> that 34% of us dread the clock change, while 45% find it hard to adjust to the sudden shift from British Summer Time to Greenwich Mean Time. <br><br>Sleep disruptions, daytime energy slumps and fatigue are common ways in which your <a href="https://www.tomsguide.com/wellness/sleep/the-clocks-go-back-at-2-a-m-this-sunday-3-ways-your-sleep-will-change-experts-reveal">sleep can be affected by the clocks going back</a> — but it doesn't have to be this way. To find out what we can do to sail through the time change, we spoke to Dr. Zoe Williams, <a href="https://www.dreams.co.uk/" target="_blank">NHS GP and Dreams’ Resident Sleep Expert</a>.</p><ul><li><a href="https://www.tomsguide.com/wellness/sleep/forget-deep-sleep-rem-sleep-is-key-to-longevity-and-the-sleep-tracking-metric-to-pay-attention-to-experts-say">Forget deep sleep — REM sleep is key to longevity and the sleep tracking metric to pay attention to, experts say</a></li></ul><h3 class="article-body__section" id="section-how-to-prepare-for-the-clock-change"><span>How to prepare for the clock change</span></h3><p>The days following the clock change are historically a time of increased fatigue, which can even lead to an uptick in <a href="https://www.theaa.com/about-us/newsroom/crashes-rise-by-11-percent-when-clocks-go-back" target="_blank">car accidents</a>. However, a few steps can help you prepare and adjust for this new time.</p><h2 id="1-move-your-bedtime-slightly-earlier">1. Move your bedtime (slightly) earlier</h2><p>“You don’t need to completely change your routine in preparation," says Dr. Williams. "But if you know that changes to your sleep tend to affect you, try gradually moving your bedtime and <a href="https://www.tomsguide.com/wellness/mattresses/waking-up-early-after-a-late-night-is-the-best-way-to-fix-your-sleep-schedule-heres-why">wake-up time</a> 15 minutes later each day for a few days beforehand."</p><p>These small changes are easier on your body than the sudden switch of the clock change. In spring, move in the opposite direction: start waking up earlier and going to bed earlier.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLYzJX"></div>                            </div>                            <script src="https://kwizly.com/embed/OLYzJX.js" async></script><h2 id="2-open-the-curtains-first-thing">2. Open the curtains first thing</h2><p>The clock change allows us to enjoy lighter mornings, so make the most of it.</p><p>"<a href="https://www.tomsguide.com/wellness/mattresses/doing-this-before-looking-at-your-phone-each-morning-helps-you-fall-asleep-fast-at-night">Exposure to natural sunlight</a> in the morning can help reset your internal clock," advises <a href="https://operabeds.com/pages/dr-tim-mercer" target="_blank">Dr Tim Mercer</a>, NHS GP Partner & GP Trainer with <a href="https://operabeds.com/" target="_blank">Opera Beds</a>. "Light is one of the most powerful signals for regulating the circadian rhythm, so spending time outside in the early daylight hours can help your body adjust more quickly."</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Gfz2422K3agAzUVVkuxQs3" name="GettyImages-1306710222.jpg" alt="Man opening curtains" src="https://cdn.mos.cms.futurecdn.net/Gfz2422K3agAzUVVkuxQs3-1920-80.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: Getty)</span></figcaption></figure><p>And if you're feeling sleepy in the early evening, he recommends turning the lights on. This tells your internal clock that it's still daytime, so you don't have to prepare for bed just yet.</p><h2 id="3-keep-to-your-wind-down-routine">3. Keep to your wind-down routine</h2><p>“It’s the sudden change in routine that can be more noticeable than the hour itself," notes Dr. Williams. Our body clocks thrive on consistency, so even a relatively small shift can temporarily affect when we feel sleepy and alert."</p><p>To counteract this, she advises keeping your <a href="https://www.tomsguide.com/wellness/sleep/sleep-expert-shares-her-simple-but-effective-three-step-bedtime-routine">bedtime routine</a> familiar.</p><p>“Try to eat, exercise and wind down at roughly the times you normally would, and make the most of natural light during the day," she says. “Don’t overlook your sleep environment either. Keeping your bedroom dark, cool and comfortable can help create the right conditions for a good night’s sleep."</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep/the-clocks-go-back-on-sunday-3-steps-to-take-tonight-to-thrive-not-just-survive-the-shift-to-shorter-days</link>
                                                                            <description>
                            <![CDATA[ If you're among the 34% of Brits who dread the clocks going back, here's what you can do from tonight to sail through the shift to shorter days. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">uY2cUdtCAjxqrgPJs49CG8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/W5K7xVtTGFyn2ew952nPQc-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 06:30:00 +0000</pubDate>                                                                                                                                <updated>Fri, 23 Oct 2026 09:34:26 +0000</updated>
                                                                                                                                            <category><![CDATA[Sleep]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                <author><![CDATA[ ruth.jones@futurenet.com (Ruth Jones) ]]></author>                    <dc:creator><![CDATA[ Ruth Jones ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/Cqbswyyro7aBYnvMKaoS6W-320-70.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/W5K7xVtTGFyn2ew952nPQc-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Sleep writer Frances Daniels sleeps in a bed in a dimly lit room]]></media:description>                                                            <media:text><![CDATA[Sleep writer Frances Daniels sleeps in a bed in a dimly lit room]]></media:text>
                                <media:title type="plain"><![CDATA[Sleep writer Frances Daniels sleeps in a bed in a dimly lit room]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/W5K7xVtTGFyn2ew952nPQc-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This<strong> Sunday, 25th October 2026</strong>, the clocks go back, marking the end of daylight savings. At 2 a.m. the clocks will shift back one hour to 1 a.m., giving us an extra hour in bed. </p><p>However, <a href="https://www.bristol.ac.uk/news/2024/october/clock-changes.html" target="_blank">studies suggest</a> that 34% of us dread the clock change, while 45% find it hard to adjust to the sudden shift from British Summer Time to Greenwich Mean Time. <br><br>Sleep disruptions, daytime energy slumps and fatigue are common ways in which your <a href="https://www.tomsguide.com/wellness/sleep/the-clocks-go-back-at-2-a-m-this-sunday-3-ways-your-sleep-will-change-experts-reveal">sleep can be affected by the clocks going back</a> — but it doesn't have to be this way. To find out what we can do to sail through the time change, we spoke to Dr. Zoe Williams, <a href="https://www.dreams.co.uk/" target="_blank">NHS GP and Dreams’ Resident Sleep Expert</a>.</p><ul><li><a href="https://www.tomsguide.com/wellness/sleep/forget-deep-sleep-rem-sleep-is-key-to-longevity-and-the-sleep-tracking-metric-to-pay-attention-to-experts-say">Forget deep sleep — REM sleep is key to longevity and the sleep tracking metric to pay attention to, experts say</a></li></ul><h3 class="article-body__section" id="section-how-to-prepare-for-the-clock-change"><span>How to prepare for the clock change</span></h3><p>The days following the clock change are historically a time of increased fatigue, which can even lead to an uptick in <a href="https://www.theaa.com/about-us/newsroom/crashes-rise-by-11-percent-when-clocks-go-back" target="_blank">car accidents</a>. However, a few steps can help you prepare and adjust for this new time.</p><h2 id="1-move-your-bedtime-slightly-earlier">1. Move your bedtime (slightly) earlier</h2><p>“You don’t need to completely change your routine in preparation," says Dr. Williams. "But if you know that changes to your sleep tend to affect you, try gradually moving your bedtime and <a href="https://www.tomsguide.com/wellness/mattresses/waking-up-early-after-a-late-night-is-the-best-way-to-fix-your-sleep-schedule-heres-why">wake-up time</a> 15 minutes later each day for a few days beforehand."</p><p>These small changes are easier on your body than the sudden switch of the clock change. In spring, move in the opposite direction: start waking up earlier and going to bed earlier.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLYzJX"></div>                            </div>                            <script src="https://kwizly.com/embed/OLYzJX.js" async></script><h2 id="2-open-the-curtains-first-thing">2. Open the curtains first thing</h2><p>The clock change allows us to enjoy lighter mornings, so make the most of it.</p><p>"<a href="https://www.tomsguide.com/wellness/mattresses/doing-this-before-looking-at-your-phone-each-morning-helps-you-fall-asleep-fast-at-night">Exposure to natural sunlight</a> in the morning can help reset your internal clock," advises <a href="https://operabeds.com/pages/dr-tim-mercer" target="_blank">Dr Tim Mercer</a>, NHS GP Partner & GP Trainer with <a href="https://operabeds.com/" target="_blank">Opera Beds</a>. "Light is one of the most powerful signals for regulating the circadian rhythm, so spending time outside in the early daylight hours can help your body adjust more quickly."</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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Gfz2422K3agAzUVVkuxQs3" name="GettyImages-1306710222.jpg" alt="Man opening curtains" src="https://cdn.mos.cms.futurecdn.net/Gfz2422K3agAzUVVkuxQs3-1920-80.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: Getty)</span></figcaption></figure><p>And if you're feeling sleepy in the early evening, he recommends turning the lights on. This tells your internal clock that it's still daytime, so you don't have to prepare for bed just yet.</p><h2 id="3-keep-to-your-wind-down-routine">3. Keep to your wind-down routine</h2><p>“It’s the sudden change in routine that can be more noticeable than the hour itself," notes Dr. Williams. Our body clocks thrive on consistency, so even a relatively small shift can temporarily affect when we feel sleepy and alert."</p><p>To counteract this, she advises keeping your <a href="https://www.tomsguide.com/wellness/sleep/sleep-expert-shares-her-simple-but-effective-three-step-bedtime-routine">bedtime routine</a> familiar.</p><p>“Try to eat, exercise and wind down at roughly the times you normally would, and make the most of natural light during the day," she says. “Don’t overlook your sleep environment either. Keeping your bedroom dark, cool and comfortable can help create the right conditions for a good night’s sleep."</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to unlock Apple’s new dynamic Readiness Score on your Apple Watch ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Apple Watch finally has a dynamic Readiness Score. Based on a scale from zero to ten, the score takes into account your recent sleep quality, physical activity, and vital trends. </p><p>Unlocking your dynamic Readiness Score on Apple Watch is fairly straightforward, though you will need to wear the device for seven nights to see your first one. </p><p>Apple's Readiness Score is just one of the cool, new features found in the <a href="https://www.tomsguide.com/best-picks/best-apple-watch">best Apple Watch</a> models in 2026. Others include support for a vastly improved <a href="https://www.tomsguide.com/wellness/smartwatches/how-to-enable-siri-ai-on-your-apple-watch">AI-powered Siri</a>, real-time <a href="https://www.tomsguide.com/wellness/smartwatches/how-to-add-apples-new-dynamic-step-count-widget-to-your-apple-watch">dynamic step count data</a>, an impressively comprehensive at-home <a href="https://www.tomsguide.com/wellness/smartwatches/i-tried-apples-new-at-home-wellness-assessment-in-ios-27-and-gained-valuable-insights-into-my-flexibility-and-balance">wellness assessment</a>, and <a href="https://www.tomsguide.com/wellness/smartwatches/im-a-smartwatch-reviewer-this-is-the-new-apple-watch-12-feature-im-most-excited-for">Live Rewind</a>, an AI tool that transcribes live audio around you. </p><p>Of course, I've already covered all of the above at length; here's how to unlock Apple's new dynamic Readiness Score on your Apple Watch in four easy steps. </p><h2 id="how-to-unlock-the-readiness-score-on-your-apple-watch">How to unlock the Readiness Score on your Apple Watch </h2><ol start="1"><li><strong>Make sure you have a compatible Apple Watch model</strong></li><li><strong>Enter your height, weight, and age in the Apple Fitness app</strong></li><li><strong>Wear your Apple Watch to bed for seven consecutive nights; ensure you get at least four hours of sleep per night</strong></li><li><strong>After seven nights logged, open the Readiness app on your Apple Watch to see your dynamic score </strong></li></ol><p><em>Read on to see full illustrated instructions for each step.   </em></p><section class="howto-block">                    <h3>1. Make sure you have a compatible Apple Watch model</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/HuFVW7DSMUng84qvE57MVT.jpg"                                        alt="Close-up of the Apple Watch 12 and Apple Watch Ultra 4 on a user's wrist"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/HuFVW7DSMUng84qvE57MVT.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Before we dive into the Readiness Score setup process, <strong>first make sure you have a compatible Apple Watch model. </strong>Unfortunately, only those with Apple's latest S11 chip have access to the feature for now. That list includes only the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review" target="_blank">Apple Watch Series 12</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-review" target="_blank">Apple Watch Ultra 4</a>, though other models may be added down the road.</p></p>                </section><section class="howto-block">                    <h3>2. Enter your height, weight, and age in the Apple Fitness app</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/eTc5BcBcCFgoWKunVFZdzX.jpg"                                        alt="Screenshot from the health details section of the Apple Fitness app"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/eTc5BcBcCFgoWKunVFZdzX.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>Next, <strong>open the Fitness app on your companion iPhone, tap "Summary," and then tap the icon in the top-right corner of the screen</strong>; it should either be a small photo of you or your initials. Next, <strong>scroll down and tap "Health Details," and enter your age, weight, and height. </strong></p><p>You'll also want to<strong> ensure that you have daily activity, vitals, and </strong><a href="https://www.tomsguide.com/wellness/smartwatches/watchos-26-heres-how-to-enable-your-apple-watchs-sleep-score"><strong>sleep tracking </strong></a><strong>turned on</strong> (they should be on by default). <strong>Double-check by opening each app on your Apple Watch</strong>; if tracking is on, you'll see recent data. If it's not, you'll be prompted to turn it on.</p></p>                </section><section class="howto-block">                    <h3>3. Wear your Apple Watch to bed for seven consecutive nights</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/eqXrqiAqxcpcuoVfQ7FZ3f.jpg"                                        alt="Close-up of the Apple Watch 12 on a user's wrist with a recent sleep report shown on the screen"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/eqXrqiAqxcpcuoVfQ7FZ3f.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>With all your health details entered, the only thing you'll need to do to generate your first Readiness Score is<strong> wear your Apple Watch for seven consecutive nights, ensuring you get at least four hours of sleep per night.</strong> You'll also want to wear it during the day to ensure accurate activity data. </p></p>                </section><section class="howto-block">                    <h3>4. Open the Readiness app on your Apple Watch to see your dynamic score </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/m4WYYb9cwZa49jDrhG22RE.jpg"                                        alt="Close-up of the Apple Watch Series 12 on a user's wrist at the Cupertino launch event on September 10, 2026"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/m4WYYb9cwZa49jDrhG22RE.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>After seven nights, your first Readiness Score should be, well, ready! To view it, <strong>open the new Readiness app on your Apple Watch</strong>. It's a blue circle with a pink and green scale in it (shown in the bottom left of the image above). </p></p>                </section><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1541px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="u4rBKarcnhBMVXdeQU9Jxn" name="AW12-Readiness-widget" alt="Close-up of the Apple Watch 12 home screen; the daily Readiness Score as one of  several widgets shown" src="https://cdn.mos.cms.futurecdn.net/u4rBKarcnhBMVXdeQU9Jxn-1920-80.jpg" mos="" align="middle" fullscreen="" width="1541" height="867" 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>Readiness Scores break down into four categories: "Recover" (0-1), "Pace Yourself" (2-4), "Ready" (5-7), and "Go for it" (8-10).</p><p>Keep in mind, after your initial Readiness Score is generated, it will dynamically update throughout the day as you go about your business. Workouts, movement, naps, and heart rate can all have an impact on your real-time score. </p><p>And for easy viewing, there's even a Readiness Score widget you can add to your watch's home screen, right alongside the new <a href="https://www.tomsguide.com/wellness/smartwatches/how-to-enable-siri-ai-on-your-apple-watch">Siri AI</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/how-to-add-apples-new-dynamic-step-count-widget-to-your-apple-watch">dynamic step count</a> widgets. </p><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-12-vs-garmin-forerunner-170-and-the-winner-was-nearly-too-close-to-call"><strong>I walked 5,000 steps with the Apple Watch 12 vs Garmin Forerunner 170 — here's the winner</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tested-the-apple-watch-12s-heart-rate-accuracy-vs-a-chest-strap-for-running-cycling-hiit-and-strength-workouts-heres-my-verdict"><strong>I tested the Apple Watch 12’s heart rate accuracy vs a chest strap for running, cycling, HIIT and strength workouts — here's my verdict</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-vs-apple-watch-ultra-4-which-new-apple-watch-should-you-buy"><strong>Apple Watch Series 12 vs Apple Watch Ultra 4: Which new Apple Watch should you buy?</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/how-to-unlock-apples-new-dynamic-readiness-score-on-your-apple-watch</link>
                                                                            <description>
                            <![CDATA[ Apple's latest health metric might be its most useful. Here's how to view your Readiness Score in a handful of easy steps. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DMnmNqJb9Ep6fUS2KuiMsF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/3VJVS8XEtNymjMfB7nLC5N-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 22 Oct 2026 05:30:00 +0000</pubDate>                                                                                                                                <updated>Thu, 22 Oct 2026 09:44: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-320-70.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/3VJVS8XEtNymjMfB7nLC5N-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Apple Watch 12 on a user&#039;s wrist with the new dynamic Readiness Score shown]]></media:description>                                                            <media:text><![CDATA[Close-up of the Apple Watch 12 on a user&#039;s wrist with the new dynamic Readiness Score shown]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Apple Watch 12 on a user&#039;s wrist with the new dynamic Readiness Score shown]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/3VJVS8XEtNymjMfB7nLC5N-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Apple Watch finally has a dynamic Readiness Score. Based on a scale from zero to ten, the score takes into account your recent sleep quality, physical activity, and vital trends. </p><p>Unlocking your dynamic Readiness Score on Apple Watch is fairly straightforward, though you will need to wear the device for seven nights to see your first one. </p><p>Apple's Readiness Score is just one of the cool, new features found in the <a href="https://www.tomsguide.com/best-picks/best-apple-watch">best Apple Watch</a> models in 2026. Others include support for a vastly improved <a href="https://www.tomsguide.com/wellness/smartwatches/how-to-enable-siri-ai-on-your-apple-watch">AI-powered Siri</a>, real-time <a href="https://www.tomsguide.com/wellness/smartwatches/how-to-add-apples-new-dynamic-step-count-widget-to-your-apple-watch">dynamic step count data</a>, an impressively comprehensive at-home <a href="https://www.tomsguide.com/wellness/smartwatches/i-tried-apples-new-at-home-wellness-assessment-in-ios-27-and-gained-valuable-insights-into-my-flexibility-and-balance">wellness assessment</a>, and <a href="https://www.tomsguide.com/wellness/smartwatches/im-a-smartwatch-reviewer-this-is-the-new-apple-watch-12-feature-im-most-excited-for">Live Rewind</a>, an AI tool that transcribes live audio around you. </p><p>Of course, I've already covered all of the above at length; here's how to unlock Apple's new dynamic Readiness Score on your Apple Watch in four easy steps. </p><h2 id="how-to-unlock-the-readiness-score-on-your-apple-watch">How to unlock the Readiness Score on your Apple Watch </h2><ol start="1"><li><strong>Make sure you have a compatible Apple Watch model</strong></li><li><strong>Enter your height, weight, and age in the Apple Fitness app</strong></li><li><strong>Wear your Apple Watch to bed for seven consecutive nights; ensure you get at least four hours of sleep per night</strong></li><li><strong>After seven nights logged, open the Readiness app on your Apple Watch to see your dynamic score </strong></li></ol><p><em>Read on to see full illustrated instructions for each step.   </em></p><section class="howto-block">                    <h3>1. Make sure you have a compatible Apple Watch model</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/HuFVW7DSMUng84qvE57MVT.jpg"                                        alt="Close-up of the Apple Watch 12 and Apple Watch Ultra 4 on a user's wrist"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/HuFVW7DSMUng84qvE57MVT.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Before we dive into the Readiness Score setup process, <strong>first make sure you have a compatible Apple Watch model. </strong>Unfortunately, only those with Apple's latest S11 chip have access to the feature for now. That list includes only the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review" target="_blank">Apple Watch Series 12</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-4-review" target="_blank">Apple Watch Ultra 4</a>, though other models may be added down the road.</p></p>                </section><section class="howto-block">                    <h3>2. Enter your height, weight, and age in the Apple Fitness app</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/eTc5BcBcCFgoWKunVFZdzX.jpg"                                        alt="Screenshot from the health details section of the Apple Fitness app"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/eTc5BcBcCFgoWKunVFZdzX.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>Next, <strong>open the Fitness app on your companion iPhone, tap "Summary," and then tap the icon in the top-right corner of the screen</strong>; it should either be a small photo of you or your initials. Next, <strong>scroll down and tap "Health Details," and enter your age, weight, and height. </strong></p><p>You'll also want to<strong> ensure that you have daily activity, vitals, and </strong><a href="https://www.tomsguide.com/wellness/smartwatches/watchos-26-heres-how-to-enable-your-apple-watchs-sleep-score"><strong>sleep tracking </strong></a><strong>turned on</strong> (they should be on by default). <strong>Double-check by opening each app on your Apple Watch</strong>; if tracking is on, you'll see recent data. If it's not, you'll be prompted to turn it on.</p></p>                </section><section class="howto-block">                    <h3>3. Wear your Apple Watch to bed for seven consecutive nights</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/eqXrqiAqxcpcuoVfQ7FZ3f.jpg"                                        alt="Close-up of the Apple Watch 12 on a user's wrist with a recent sleep report shown on the screen"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/eqXrqiAqxcpcuoVfQ7FZ3f.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>With all your health details entered, the only thing you'll need to do to generate your first Readiness Score is<strong> wear your Apple Watch for seven consecutive nights, ensuring you get at least four hours of sleep per night.</strong> You'll also want to wear it during the day to ensure accurate activity data. </p></p>                </section><section class="howto-block">                    <h3>4. Open the Readiness app on your Apple Watch to see your dynamic score </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/m4WYYb9cwZa49jDrhG22RE.jpg"                                        alt="Close-up of the Apple Watch Series 12 on a user's wrist at the Cupertino launch event on September 10, 2026"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/m4WYYb9cwZa49jDrhG22RE.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>After seven nights, your first Readiness Score should be, well, ready! To view it, <strong>open the new Readiness app on your Apple Watch</strong>. It's a blue circle with a pink and green scale in it (shown in the bottom left of the image above). </p></p>                </section><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1541px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="u4rBKarcnhBMVXdeQU9Jxn" name="AW12-Readiness-widget" alt="Close-up of the Apple Watch 12 home screen; the daily Readiness Score as one of  several widgets shown" src="https://cdn.mos.cms.futurecdn.net/u4rBKarcnhBMVXdeQU9Jxn-1920-80.jpg" mos="" align="middle" fullscreen="" width="1541" height="867" 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>Readiness Scores break down into four categories: "Recover" (0-1), "Pace Yourself" (2-4), "Ready" (5-7), and "Go for it" (8-10).</p><p>Keep in mind, after your initial Readiness Score is generated, it will dynamically update throughout the day as you go about your business. Workouts, movement, naps, and heart rate can all have an impact on your real-time score. </p><p>And for easy viewing, there's even a Readiness Score widget you can add to your watch's home screen, right alongside the new <a href="https://www.tomsguide.com/wellness/smartwatches/how-to-enable-siri-ai-on-your-apple-watch">Siri AI</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/how-to-add-apples-new-dynamic-step-count-widget-to-your-apple-watch">dynamic step count</a> widgets. </p><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><a href="https://www.tomsguide.com/wellness/fitness-trackers/i-walked-5-000-steps-with-the-apple-watch-12-vs-garmin-forerunner-170-and-the-winner-was-nearly-too-close-to-call"><strong>I walked 5,000 steps with the Apple Watch 12 vs Garmin Forerunner 170 — here's the winner</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-tested-the-apple-watch-12s-heart-rate-accuracy-vs-a-chest-strap-for-running-cycling-hiit-and-strength-workouts-heres-my-verdict"><strong>I tested the Apple Watch 12’s heart rate accuracy vs a chest strap for running, cycling, HIIT and strength workouts — here's my verdict</strong></a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-vs-apple-watch-ultra-4-which-new-apple-watch-should-you-buy"><strong>Apple Watch Series 12 vs Apple Watch Ultra 4: Which new Apple Watch should you buy?</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’ve owned this Patagonia fleece for a decade — it’s perfect for cold mornings and chilly evenings, and it's 50% off right now in this secret sale ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The clocks are changing, the temperature is dropping, and fleece season is officially here. I’ve been testing fitness gear for a decade, and one of my go-to items is my Micro-D Patagonia fleece — and right now, it’s <a href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens " target="_blank" rel="nofollow">50% off in this REI sale</a>. </p><p>Good gear lasts more than one season, and this fleece is going into its 10th winter. It has a high neck to keep the weather out, and it’s made of fast-drying microfleece for a breathable yet cosy layer. </p><div class="product"><a data-dimension112="089e506e-cc7b-11f1-b1cd-7313d4eb11ad" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover" data-dimension48="Micro-D Half-Zip Fleece Pullover" data-dimension25="$48" href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1576px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="nf39PweshXkywy2qiMnC8k" name="b28afb8f-ec50-4921-9346-b3269d66e19b" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nf39PweshXkywy2qiMnC8k-1920-80.jpg" mos="" align="middle" fullscreen="" width="1576" height="1576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow" data-dimension112="089e506e-cc7b-11f1-b1cd-7313d4eb11ad" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover" data-dimension48="Micro-D Half-Zip Fleece Pullover" data-dimension25="$48">Micro-D Half-Zip Fleece Pullover: was $99 now $48</a></strong><br>Right now, the beautiful Thin Ice colorway is down to $48 in REI’s mid-season deal. It’s still available in a handful of sizes. The <a href="https://www.rei.com/product/143319/patagonia-micro-d-fleece-pullover-mens%20" target="_blank" rel="nofollow">men’s Micro D Fleece Pullover is still full price at $79</a>, but REI members can get rewards. <a class="view-deal button" href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow" data-dimension112="089e506e-cc7b-11f1-b1cd-7313d4eb11ad" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover" data-dimension48="Micro-D Half-Zip Fleece Pullover" data-dimension25="$48">View Deal</a></p></div><p>This layer is seriously cute and cosy for fall, with dropped shoulders for a relaxed fit that sits at hip-height. It’s a lightweight layer, weighing 8.6 ounces, so it won’t take up much space or weight in your pack, and it has a relaxed fit for throwing on mid-hike. </p><p>The half-zip design makes it easy to layer — you can pull the zip right down to make it more breathable as you start walking, or zip it fully to keep the cold out when you stop for a hot chocolate. The elasticated cuffs keep the cold out, but also make it easier to layer this underneath a jacket or wear gloves. </p><p>Like all Patagonia items, it’s built to last, and my Micro D fleece proves this tenfold. I’ve chucked this in my pack, thrown it on after a marathon, and worn it for countless dog walks. It hasn’t pilled or lost its shape, and it’s one I reach for season after season. Plus, for $48, it’s a bargain right now. </p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/ive-owned-this-patagonia-fleece-for-a-decade-its-perfect-for-cold-mornings-and-chilly-evenings-and-its-50-percent-off-right-now-in-this-secret-sale</link>
                                                                            <description>
                            <![CDATA[ Now is a great time to grab my go-to layer for fall. Trust me, I'm a fitness editor who reviews outdoor gear for a living! ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">hFGATApRbeqiZab74E9WY3</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/2ZXDTq5RfNW2dKiqzSYkZZ-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 11:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></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-320-70.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/2ZXDTq5RfNW2dKiqzSYkZZ-1920-80.jpg">
                                                            <media:credit><![CDATA[Patagonia/Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A photo of a Patagonia fleece ]]></media:description>                                                            <media:text><![CDATA[A photo of a Patagonia fleece ]]></media:text>
                                <media:title type="plain"><![CDATA[A photo of a Patagonia fleece ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/2ZXDTq5RfNW2dKiqzSYkZZ-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The clocks are changing, the temperature is dropping, and fleece season is officially here. I’ve been testing fitness gear for a decade, and one of my go-to items is my Micro-D Patagonia fleece — and right now, it’s <a href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens " target="_blank" rel="nofollow">50% off in this REI sale</a>. </p><p>Good gear lasts more than one season, and this fleece is going into its 10th winter. It has a high neck to keep the weather out, and it’s made of fast-drying microfleece for a breathable yet cosy layer. </p><div class="product"><a data-dimension112="089e506e-cc7b-11f1-b1cd-7313d4eb11ad" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover" data-dimension48="Micro-D Half-Zip Fleece Pullover" data-dimension25="$48" href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1576px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="nf39PweshXkywy2qiMnC8k" name="b28afb8f-ec50-4921-9346-b3269d66e19b" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nf39PweshXkywy2qiMnC8k-1920-80.jpg" mos="" align="middle" fullscreen="" width="1576" height="1576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow" data-dimension112="089e506e-cc7b-11f1-b1cd-7313d4eb11ad" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover" data-dimension48="Micro-D Half-Zip Fleece Pullover" data-dimension25="$48">Micro-D Half-Zip Fleece Pullover: was $99 now $48</a></strong><br>Right now, the beautiful Thin Ice colorway is down to $48 in REI’s mid-season deal. It’s still available in a handful of sizes. The <a href="https://www.rei.com/product/143319/patagonia-micro-d-fleece-pullover-mens%20" target="_blank" rel="nofollow">men’s Micro D Fleece Pullover is still full price at $79</a>, but REI members can get rewards. <a class="view-deal button" href="https://www.rei.com/product/242671/patagonia-micro-d-half-zip-fleece-pullover-womens" target="_blank" rel="nofollow" data-dimension112="089e506e-cc7b-11f1-b1cd-7313d4eb11ad" data-action="Deal Block" data-label="Micro-D Half-Zip Fleece Pullover" data-dimension48="Micro-D Half-Zip Fleece Pullover" data-dimension25="$48">View Deal</a></p></div><p>This layer is seriously cute and cosy for fall, with dropped shoulders for a relaxed fit that sits at hip-height. It’s a lightweight layer, weighing 8.6 ounces, so it won’t take up much space or weight in your pack, and it has a relaxed fit for throwing on mid-hike. </p><p>The half-zip design makes it easy to layer — you can pull the zip right down to make it more breathable as you start walking, or zip it fully to keep the cold out when you stop for a hot chocolate. The elasticated cuffs keep the cold out, but also make it easier to layer this underneath a jacket or wear gloves. </p><p>Like all Patagonia items, it’s built to last, and my Micro D fleece proves this tenfold. I’ve chucked this in my pack, thrown it on after a marathon, and worn it for countless dog walks. It hasn’t pilled or lost its shape, and it’s one I reach for season after season. Plus, for $48, it’s a bargain right now. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ My 3 a.m. wake-ups stopped when I started testing this pebble shaped device — here's why and how it works ]]></title>
                                                                                                <dc:content><![CDATA[ <h2 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-in-brief"><span>Sensate vagus nerve stimulator: Review in brief</span></h2><p>The Sensate is a non-invasive vagus nerve stimulator (nVNS). A smooth, pebble shaped gadget that sends out electrical pulses along the vagus nerve to de-stress the nervous system. </p><div  class="fancy-box"><div class="fancy_box-title">Sensate Vagus Nerve Stimulator At A Glance</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Type: </strong>Vagus nerve stimulator<br><strong>Best for: </strong>Combating stress and anxiety<br><strong>Dimensions: </strong>6.95 x 6.25 x 10.75cm<br><strong>Weight: </strong>0.385g<br><strong>Warranty: </strong>90 day money back guarantee<br><strong>Price: </strong>$299/£299</p></div></div><p>The idea is that during times of stress, you place the Sensate on your sternum, where it rests along the pathway of your vagus nerve.</p><p>From here it sends out vibrational pulses and infrasonic resonance (low frequency soundwaves). These help stimulate your vagus nerve, which should lower sympathetic nerve activity (fight or flight) and increase parasympathetic nerve activity (rest and digest). </p><p>You do this while listening to a calming soundscape via the app for between 10-30 minutes, as per Sensate’s recommendation.  </p><p>While there are physiological ways of <a href="https://www.tomsguide.com/wellness/sleep/vagus-nerve-stimulators-promise-to-ease-nighttime-anxiety-and-prevent-3am-wakeups-heres-how-to-do-it-at-home">stimulating your vagus nerve for free</a> (for example, humming, <a href="https://www.tomsguide.com/wellness/sleep/sleep-meditation">meditation</a> and brief cold water exposure), the Sensate is a low-lift option that produces an immediate calming effect. Do you need it? Probably not, especially not for $299. However, as someone who struggles with underlying stress and subsequent <a href="https://www.tomsguide.com/wellness/sleep/i-tried-the-7-1-sleep-rule-doctors-rate-as-the-best-way-to-stop-3-a-m-wake-ups-heres-why-it-works">3 a.m. wake ups</a>, I do recommend it.  </p><p>I was even strongly tempted to wear it like an oversized necklace to a mildly fraught family lunch. But I abstained. Instead, I’ve been using the Sensate immediately after finishing work in order to decompress and transition into relaxation mode, and then once again before bed. </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ffiR7Nszj9KqbkcVmZGSDU" name="Sensate vagus nerve stimulator" alt="The image shows a blonde sleep writer lying in bed with a pebble-shaped object resting on her sternum" src="https://cdn.mos.cms.futurecdn.net/ffiR7Nszj9KqbkcVmZGSDU-1920-80.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 combination of my blackout eye mask with soothing soundscapes and vibrational pulses is akin to taking a tranquilizer dart to the neck; I’m yet to use it before bed without falling straight asleep afterwards. Even better? My <a href="https://www.tomsguide.com/wellness/sleep/i-asked-a-top-sleep-expert-why-im-waking-up-at-3-a-m-again-he-instantly-spotted-my-new-mistake-and-how-to-fix-it">3 a.m. wake-ups</a> stopped. </p><p>It costs £299/ $299 which is pricey but compared to some other vagus nerve stimulators is pretty average. While the <a href="https://www.tomsguide.com/wellness/sleep-tech/how-the-nurosym-vagus-nerve-stimulator-improved-my-sleep">Nuropod</a>, which is a nVNS that sits on your ear, retails at $900/ £599, other nVNS from brands such as <a href="https://www.tomsguide.com/wellness/sleep-tech/i-used-the-pulsetto-vagus-nerve-stimulator-for-a-week-for-better-sleep-my-thoughts">Pulsetto</a> and Truvaga cost in the region of £300/ $300. </p><div class="product"><a data-dimension112="2c6dcde8-c704-11f1-8425-a55423356ff6" data-action="Deal Block" data-label="Vagus nerve stimulator" data-dimension48="Vagus nerve stimulator" data-dimension25="$299" href="https://www.getsensate.com/?variant=57357001294205" 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="yVNPh5vLvHwzUS2RwnhHBj" name="Sensate vagus nerve stimulator" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yVNPh5vLvHwzUS2RwnhHBj-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.getsensate.com/?variant=57357001294205" target="_blank" rel="nofollow" data-dimension112="2c6dcde8-c704-11f1-8425-a55423356ff6" data-action="Deal Block" data-label="Vagus nerve stimulator" data-dimension48="Vagus nerve stimulator" data-dimension25="$299">Vagus nerve stimulator: $299</a></strong><br>The Sensate retails at $299/£299, which, while undoubtedly an investment, is fairly average for an nVNS. It comes with app access to 14 standard soundscapes. However, for an extra $49/£49 per year you can unlock a larger 50+ library of sounds. It ships worldwide and comes with a 90 day money back guarantee. <a class="view-deal button" href="https://www.getsensate.com/?variant=57357001294205" target="_blank" rel="nofollow" data-dimension112="2c6dcde8-c704-11f1-8425-a55423356ff6" data-action="Deal Block" data-label="Vagus nerve stimulator" data-dimension48="Vagus nerve stimulator" data-dimension25="$299">View Deal</a></p></div><h2 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-design-comfort"><span>Sensate vagus nerve stimulator review: Design & comfort</span></h2><p>The Sensate is a smooth, pebble shaped device that sits comfortably in the palm of your hands. When in use, you can either rest it directly on your sternum while lying down, or, if you intend to use it while horizontal, you can wear it via its lanyard.</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="2MmAMcJ7muLPgurdGbVrXL" name="Sensate review" alt="A black, pebble shaped object against a marble backdrop" src="https://cdn.mos.cms.futurecdn.net/2MmAMcJ7muLPgurdGbVrXL-1920-80.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>The vagus nerve is a long cranial nerve that runs from the brainstem to major organs, including the heart, lungs and digestive system. This interconnected system means different nVNS can all strive do the same thing, but be placed on different parts of the body.</p><p>For example, the Pulsetto nVNS sits around the neck like a collar, the Truvago targets your neck via a handheld device that requires an application gel, while the NuroPod clips on to the tragus of your ear. </p><p>In comparison, the Sensate seems like the easiest to use and most comfortable to wear. Placing it on your body isn't a fine science and it doesn't feel at all claustrophobic (I've struggled to get comfortable wearing sleep-inducing headbands before, such as the <a href="https://www.tomsguide.com/wellness/sleep-tech/elemind-sleep-headband">Elemind</a>). Turn it on, open the app, place it on your chest and you're off.</p><p><strong>Score: 4 out of 5</strong></p><h3 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-performance"><span>Sensate vagus nerve stimulator review: Performance</span></h3><p>To give a 360° analysis of the Sensate, I tested it for a week, using it twice a day, for 10 minutes each time. Here's how I rate its performance.</p><h2 id="set-up">Set up</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="KgxUWpDD7B9P8CabusR9bV" name="Sensate vagus nerve stimulator" alt="The image shows a black pebble-shaped device in a box, with a black pouch, lanyard, charging cable and instruction pamphlet next to it" src="https://cdn.mos.cms.futurecdn.net/KgxUWpDD7B9P8CabusR9bV-1920-80.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 Sensate comes with a USB to USB-C charging cable, a travel pouch, lanyard and instruction pamphlet. Getting started is simple and only takes a few minutes. </p><p>First, download the app using the QR code provided. Hold down the button on the Sensate for half a second, and watch the power light turn on. From there, you can connect your device via Bluetooth and start your session. <br><br><strong>Score: 3.5 out of 5</strong></p><h2 id="features">Features</h2><p>The Sensate comes in two parts; the pebble shaped vagus nerve stimulator and the accompanying app, from where you can control your 'pebble.'</p><p>To start a session turn your device on, connect to the app and choose a soundscape and duration you like. Once the session begins, you will feel the infrasonic resonance as vibrational pulses that work in tandem with the soundscape. You can turn the vibration intensity up and down until you find a level which feels comfortable. </p><p>Combining the vagus nerve stimulation with an accompanying soothing sound isn't standard for consumer-focused nVNS but it's incredibly effective. It feels like a more holistic approach to reducing stress.</p><p><strong>Score: 3.5 out of 5</strong></p><h2 id="stress-relief">Stress relief</h2><p>Alongside a central role in the gut-brain connection, the vagus nerve is the main highway of the parasympathetic nervous system and helps the body manage stress and inflammation. </p><p>There are physiological ways you can stimulate the vagus nerve, like humming and <a href="https://www.tomsguide.com/wellness/sleep/box-breathing">deep breathing</a>. However, the Sensate targets the nerve directly, using infrasonic resonance. These low frequency soundwaves trigger a parasympathetic nervous response. This is what helps take you out of fight or flight.</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="ptBL5sjBX7zoM8YEkvowna" name="Sensate vagus nerve stimulator" alt="A blonde haired woman wearing a white t-shirt sitting crossed legged in bed with her eyes closed and her hands resting on her knees with a black, pebble shaped gadget around her neck" src="https://cdn.mos.cms.futurecdn.net/ptBL5sjBX7zoM8YEkvowna-1920-80.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>Sensate recommends sessions lasting between 10 and 30 minute during times of stress, or as part of a daily routine. I used mine at the end of my working day and again before bed. </p><p>The best way I can describe the Sensate is to say that it feels like lying down with a warm cat purring away on your chest. At the end of a particularly stressful day, I could practically feel my nervous system uncoil with every pulse. And during the night, my stress didn't wake me up at 3 a.m.</p><p>The combination of the blackout eye mask I wore during the sessions, the soundscape (which I stream through my <a href="https://www.tomsguide.com/wellness/sleep-tech/ozlo-sleepbuds-2">Ozlo Sleepbuds 2</a> to block out any noise that might bring me back to real life) and the vibrational pulsing on my chest is incredibly effective. </p><p>In my mind, I follow the vibrational reach of the pulses across my chest, abdomen and even towards my toes. It's almost like I can feel my stress levels dropping in real time. </p><p>Curious to see if that was true, I <a href="https://www.tomsguide.com/wellness/sleep/do-you-really-need-a-usd299-gadget-to-de-stress-i-pitted-a-vagus-nerve-stimulator-against-usd0-practices-heres-the-one-i-recommend-if-you-cant-sleep">put it to the test</a>. Via my <a href="https://www.tomsguide.com/wellness/sleep-tech/apple-watch-vs-whoop-mg-sleep-tracker-comparison">Apple Watch</a> and a third party app, <a href="https://welltory.com/" target="_blank">Welltory</a>, I was able to record my stress levels before and after a session. I logged my stress levels before one session: 65% (medium), then again afterwards: 17% (low). </p><p><strong>Score: 4</strong></p><h3 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-should-you-buy-it"><span>Sensate vagus nerve stimulator review: Should you buy it?</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WW5JKarewqeGGwqsMp4zAc" name="Sensate review" alt="A black, pebble shaped device held up against a green plant" src="https://cdn.mos.cms.futurecdn.net/WW5JKarewqeGGwqsMp4zAc-1920-80.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>The Sensate is a consumer focused vagus nerve stimulator that offers a non pharmaceutical solution to daily stress. I tried the device for a week and found that it helped reduce my overall stress levels and instil a warm feeling of calm. </p><p>There are ways you can stimulate your vagus nerve for free, so I wouldn't say that you <em>need</em> the Sensate. You can almost recreate the relaxing experience through meditation or listening to a soundscape (minus the vibrational pulsing.) However, if daily stress is sabotaging your sleep and if you can afford it, I do recommend the Sensate. </p><p>It's a very low-lift option that you can grab, turn on and go. Ten minutes later, you'll likely feel more grounded and relaxed. But if you're not someone who feels stressed on a day to day basis, you can live without it. Try some deep breathing next time your anxiety levels tick upwards.</p><h2 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-alternatives"><span>Sensate vagus nerve stimulator review: Alternatives</span></h2>        <div class="featured_product_block featured_block_versus" data-id="23c67ffe-c94e-11f1-8147-c51580ef45a0">            <a href="https://uk.pulsetto.tech/products/meet-pulsetto" data-model-name="Pulsetto FIT vagus nerve stimulator" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Wgn3RZs6EZP8a6ZYhQyZaD.jpg" alt="The Pulsetto Vagus Nerve Stimulator against a white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Pulsetto</div>                    <div class="featured__title">FIT vagus nerve stimulator</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Like the Sensate, the Pulsetto is a non-invasive vagus nerve stimulator. It's a neck-worn device that delivers electrical impulses to the vagus nerve. Sessions are operated via an app and can last from 4 to 30 minutes. It's available in both the US and UK (£296).</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="23c68094-c94e-11f1-b686-4556166501e3">            <a href="https://nuropod.com/products/nuropod" data-model-name="Nurosym vagus nerve stimulator" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/agv7zGrQwLLhc5kLRzQbVc.jpg" alt="Nurosym vagus nerve stimulator on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Nuropod</div>                    <div class="featured__title">vagus nerve stimulator</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>This device is known as the Nurosym in the UK (£599) and Nuropod in the US ($900), and is been backed by 60+ clinical studies. It clips onto the tragus part of your ear, where it sends out electrical pulses to stimulate the vagus nerve. </p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep-tech/sensate-vagus-nerve-stimulator</link>
                                                                            <description>
                            <![CDATA[ I tested the Sensate vagus nerve stimulator for a week to see if it could reduce my daily stress levels. It works, but is it worth its £299/$299 price tag? Here's what I think. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oh8DuCvtTMcNWwUD6QxTmA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/9iqYjeDVWdW4krueVFVguB-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 10:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sleep Tech]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Sleep]]></category>
                                                                                                                    <dc:creator><![CDATA[ Nicola Appleton ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/K2anUY2W7BNEiVbcZvw3iV-320-70.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/9iqYjeDVWdW4krueVFVguB-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A black, pebble shaped device held up against a green plant]]></media:description>                                                            <media:text><![CDATA[A black, pebble shaped device held up against a green plant]]></media:text>
                                <media:title type="plain"><![CDATA[A black, pebble shaped device held up against a green plant]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/9iqYjeDVWdW4krueVFVguB-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <h2 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-in-brief"><span>Sensate vagus nerve stimulator: Review in brief</span></h2><p>The Sensate is a non-invasive vagus nerve stimulator (nVNS). A smooth, pebble shaped gadget that sends out electrical pulses along the vagus nerve to de-stress the nervous system. </p><div  class="fancy-box"><div class="fancy_box-title">Sensate Vagus Nerve Stimulator At A Glance</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Type: </strong>Vagus nerve stimulator<br><strong>Best for: </strong>Combating stress and anxiety<br><strong>Dimensions: </strong>6.95 x 6.25 x 10.75cm<br><strong>Weight: </strong>0.385g<br><strong>Warranty: </strong>90 day money back guarantee<br><strong>Price: </strong>$299/£299</p></div></div><p>The idea is that during times of stress, you place the Sensate on your sternum, where it rests along the pathway of your vagus nerve.</p><p>From here it sends out vibrational pulses and infrasonic resonance (low frequency soundwaves). These help stimulate your vagus nerve, which should lower sympathetic nerve activity (fight or flight) and increase parasympathetic nerve activity (rest and digest). </p><p>You do this while listening to a calming soundscape via the app for between 10-30 minutes, as per Sensate’s recommendation.  </p><p>While there are physiological ways of <a href="https://www.tomsguide.com/wellness/sleep/vagus-nerve-stimulators-promise-to-ease-nighttime-anxiety-and-prevent-3am-wakeups-heres-how-to-do-it-at-home">stimulating your vagus nerve for free</a> (for example, humming, <a href="https://www.tomsguide.com/wellness/sleep/sleep-meditation">meditation</a> and brief cold water exposure), the Sensate is a low-lift option that produces an immediate calming effect. Do you need it? Probably not, especially not for $299. However, as someone who struggles with underlying stress and subsequent <a href="https://www.tomsguide.com/wellness/sleep/i-tried-the-7-1-sleep-rule-doctors-rate-as-the-best-way-to-stop-3-a-m-wake-ups-heres-why-it-works">3 a.m. wake ups</a>, I do recommend it.  </p><p>I was even strongly tempted to wear it like an oversized necklace to a mildly fraught family lunch. But I abstained. Instead, I’ve been using the Sensate immediately after finishing work in order to decompress and transition into relaxation mode, and then once again before bed. </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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ffiR7Nszj9KqbkcVmZGSDU" name="Sensate vagus nerve stimulator" alt="The image shows a blonde sleep writer lying in bed with a pebble-shaped object resting on her sternum" src="https://cdn.mos.cms.futurecdn.net/ffiR7Nszj9KqbkcVmZGSDU-1920-80.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 combination of my blackout eye mask with soothing soundscapes and vibrational pulses is akin to taking a tranquilizer dart to the neck; I’m yet to use it before bed without falling straight asleep afterwards. Even better? My <a href="https://www.tomsguide.com/wellness/sleep/i-asked-a-top-sleep-expert-why-im-waking-up-at-3-a-m-again-he-instantly-spotted-my-new-mistake-and-how-to-fix-it">3 a.m. wake-ups</a> stopped. </p><p>It costs £299/ $299 which is pricey but compared to some other vagus nerve stimulators is pretty average. While the <a href="https://www.tomsguide.com/wellness/sleep-tech/how-the-nurosym-vagus-nerve-stimulator-improved-my-sleep">Nuropod</a>, which is a nVNS that sits on your ear, retails at $900/ £599, other nVNS from brands such as <a href="https://www.tomsguide.com/wellness/sleep-tech/i-used-the-pulsetto-vagus-nerve-stimulator-for-a-week-for-better-sleep-my-thoughts">Pulsetto</a> and Truvaga cost in the region of £300/ $300. </p><div class="product"><a data-dimension112="2c6dcde8-c704-11f1-8425-a55423356ff6" data-action="Deal Block" data-label="Vagus nerve stimulator" data-dimension48="Vagus nerve stimulator" data-dimension25="$299" href="https://www.getsensate.com/?variant=57357001294205" 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="yVNPh5vLvHwzUS2RwnhHBj" name="Sensate vagus nerve stimulator" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yVNPh5vLvHwzUS2RwnhHBj-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.getsensate.com/?variant=57357001294205" target="_blank" rel="nofollow" data-dimension112="2c6dcde8-c704-11f1-8425-a55423356ff6" data-action="Deal Block" data-label="Vagus nerve stimulator" data-dimension48="Vagus nerve stimulator" data-dimension25="$299">Vagus nerve stimulator: $299</a></strong><br>The Sensate retails at $299/£299, which, while undoubtedly an investment, is fairly average for an nVNS. It comes with app access to 14 standard soundscapes. However, for an extra $49/£49 per year you can unlock a larger 50+ library of sounds. It ships worldwide and comes with a 90 day money back guarantee. <a class="view-deal button" href="https://www.getsensate.com/?variant=57357001294205" target="_blank" rel="nofollow" data-dimension112="2c6dcde8-c704-11f1-8425-a55423356ff6" data-action="Deal Block" data-label="Vagus nerve stimulator" data-dimension48="Vagus nerve stimulator" data-dimension25="$299">View Deal</a></p></div><h2 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-design-comfort"><span>Sensate vagus nerve stimulator review: Design & comfort</span></h2><p>The Sensate is a smooth, pebble shaped device that sits comfortably in the palm of your hands. When in use, you can either rest it directly on your sternum while lying down, or, if you intend to use it while horizontal, you can wear it via its lanyard.</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="2MmAMcJ7muLPgurdGbVrXL" name="Sensate review" alt="A black, pebble shaped object against a marble backdrop" src="https://cdn.mos.cms.futurecdn.net/2MmAMcJ7muLPgurdGbVrXL-1920-80.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>The vagus nerve is a long cranial nerve that runs from the brainstem to major organs, including the heart, lungs and digestive system. This interconnected system means different nVNS can all strive do the same thing, but be placed on different parts of the body.</p><p>For example, the Pulsetto nVNS sits around the neck like a collar, the Truvago targets your neck via a handheld device that requires an application gel, while the NuroPod clips on to the tragus of your ear. </p><p>In comparison, the Sensate seems like the easiest to use and most comfortable to wear. Placing it on your body isn't a fine science and it doesn't feel at all claustrophobic (I've struggled to get comfortable wearing sleep-inducing headbands before, such as the <a href="https://www.tomsguide.com/wellness/sleep-tech/elemind-sleep-headband">Elemind</a>). Turn it on, open the app, place it on your chest and you're off.</p><p><strong>Score: 4 out of 5</strong></p><h3 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-performance"><span>Sensate vagus nerve stimulator review: Performance</span></h3><p>To give a 360° analysis of the Sensate, I tested it for a week, using it twice a day, for 10 minutes each time. Here's how I rate its performance.</p><h2 id="set-up">Set up</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="KgxUWpDD7B9P8CabusR9bV" name="Sensate vagus nerve stimulator" alt="The image shows a black pebble-shaped device in a box, with a black pouch, lanyard, charging cable and instruction pamphlet next to it" src="https://cdn.mos.cms.futurecdn.net/KgxUWpDD7B9P8CabusR9bV-1920-80.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 Sensate comes with a USB to USB-C charging cable, a travel pouch, lanyard and instruction pamphlet. Getting started is simple and only takes a few minutes. </p><p>First, download the app using the QR code provided. Hold down the button on the Sensate for half a second, and watch the power light turn on. From there, you can connect your device via Bluetooth and start your session. <br><br><strong>Score: 3.5 out of 5</strong></p><h2 id="features">Features</h2><p>The Sensate comes in two parts; the pebble shaped vagus nerve stimulator and the accompanying app, from where you can control your 'pebble.'</p><p>To start a session turn your device on, connect to the app and choose a soundscape and duration you like. Once the session begins, you will feel the infrasonic resonance as vibrational pulses that work in tandem with the soundscape. You can turn the vibration intensity up and down until you find a level which feels comfortable. </p><p>Combining the vagus nerve stimulation with an accompanying soothing sound isn't standard for consumer-focused nVNS but it's incredibly effective. It feels like a more holistic approach to reducing stress.</p><p><strong>Score: 3.5 out of 5</strong></p><h2 id="stress-relief">Stress relief</h2><p>Alongside a central role in the gut-brain connection, the vagus nerve is the main highway of the parasympathetic nervous system and helps the body manage stress and inflammation. </p><p>There are physiological ways you can stimulate the vagus nerve, like humming and <a href="https://www.tomsguide.com/wellness/sleep/box-breathing">deep breathing</a>. However, the Sensate targets the nerve directly, using infrasonic resonance. These low frequency soundwaves trigger a parasympathetic nervous response. This is what helps take you out of fight or flight.</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="ptBL5sjBX7zoM8YEkvowna" name="Sensate vagus nerve stimulator" alt="A blonde haired woman wearing a white t-shirt sitting crossed legged in bed with her eyes closed and her hands resting on her knees with a black, pebble shaped gadget around her neck" src="https://cdn.mos.cms.futurecdn.net/ptBL5sjBX7zoM8YEkvowna-1920-80.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>Sensate recommends sessions lasting between 10 and 30 minute during times of stress, or as part of a daily routine. I used mine at the end of my working day and again before bed. </p><p>The best way I can describe the Sensate is to say that it feels like lying down with a warm cat purring away on your chest. At the end of a particularly stressful day, I could practically feel my nervous system uncoil with every pulse. And during the night, my stress didn't wake me up at 3 a.m.</p><p>The combination of the blackout eye mask I wore during the sessions, the soundscape (which I stream through my <a href="https://www.tomsguide.com/wellness/sleep-tech/ozlo-sleepbuds-2">Ozlo Sleepbuds 2</a> to block out any noise that might bring me back to real life) and the vibrational pulsing on my chest is incredibly effective. </p><p>In my mind, I follow the vibrational reach of the pulses across my chest, abdomen and even towards my toes. It's almost like I can feel my stress levels dropping in real time. </p><p>Curious to see if that was true, I <a href="https://www.tomsguide.com/wellness/sleep/do-you-really-need-a-usd299-gadget-to-de-stress-i-pitted-a-vagus-nerve-stimulator-against-usd0-practices-heres-the-one-i-recommend-if-you-cant-sleep">put it to the test</a>. Via my <a href="https://www.tomsguide.com/wellness/sleep-tech/apple-watch-vs-whoop-mg-sleep-tracker-comparison">Apple Watch</a> and a third party app, <a href="https://welltory.com/" target="_blank">Welltory</a>, I was able to record my stress levels before and after a session. I logged my stress levels before one session: 65% (medium), then again afterwards: 17% (low). </p><p><strong>Score: 4</strong></p><h3 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-should-you-buy-it"><span>Sensate vagus nerve stimulator review: Should you buy it?</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WW5JKarewqeGGwqsMp4zAc" name="Sensate review" alt="A black, pebble shaped device held up against a green plant" src="https://cdn.mos.cms.futurecdn.net/WW5JKarewqeGGwqsMp4zAc-1920-80.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>The Sensate is a consumer focused vagus nerve stimulator that offers a non pharmaceutical solution to daily stress. I tried the device for a week and found that it helped reduce my overall stress levels and instil a warm feeling of calm. </p><p>There are ways you can stimulate your vagus nerve for free, so I wouldn't say that you <em>need</em> the Sensate. You can almost recreate the relaxing experience through meditation or listening to a soundscape (minus the vibrational pulsing.) However, if daily stress is sabotaging your sleep and if you can afford it, I do recommend the Sensate. </p><p>It's a very low-lift option that you can grab, turn on and go. Ten minutes later, you'll likely feel more grounded and relaxed. But if you're not someone who feels stressed on a day to day basis, you can live without it. Try some deep breathing next time your anxiety levels tick upwards.</p><h2 class="article-body__section" id="section-sensate-vagus-nerve-stimulator-review-alternatives"><span>Sensate vagus nerve stimulator review: Alternatives</span></h2>        <div class="featured_product_block featured_block_versus" data-id="23c67ffe-c94e-11f1-8147-c51580ef45a0">            <a href="https://uk.pulsetto.tech/products/meet-pulsetto" data-model-name="Pulsetto FIT vagus nerve stimulator" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Wgn3RZs6EZP8a6ZYhQyZaD.jpg" alt="The Pulsetto Vagus Nerve Stimulator against a white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Pulsetto</div>                    <div class="featured__title">FIT vagus nerve stimulator</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Like the Sensate, the Pulsetto is a non-invasive vagus nerve stimulator. It's a neck-worn device that delivers electrical impulses to the vagus nerve. Sessions are operated via an app and can last from 4 to 30 minutes. It's available in both the US and UK (£296).</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_versus" data-id="23c68094-c94e-11f1-b686-4556166501e3">            <a href="https://nuropod.com/products/nuropod" data-model-name="Nurosym vagus nerve stimulator" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/agv7zGrQwLLhc5kLRzQbVc.jpg" alt="Nurosym vagus nerve stimulator on white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                            <div class='featured__brand'>Nuropod</div>                    <div class="featured__title">vagus nerve stimulator</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>This device is known as the Nurosym in the UK (£599) and Nuropod in the US ($900), and is been backed by 60+ clinical studies. It clips onto the tragus part of your ear, where it sends out electrical pulses to stimulate the vagus nerve. </p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I just went hands-on with the Pebble Time 2 — and it’s unlike any smartwatch I’ve ever tested ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Pebble Time 2 doesn’t take itself too seriously, which is exactly why it's one of the most enjoyable smartwatches I’ve ever tested. Supported by an open-source community of developers and wearable tech enthusiasts, this $225 device is pretty much the antithesis of an Apple Watch. And that's a good thing. </p><p>I just got my hands on the <a href="https://www.tomsguide.com/wellness/smartwatches/pebble-watch-returns-from-the-dead-with-its-founder-and-open-source-software">Pebble Time 2</a>, and after a quick and easy setup — it works with both Android and iOS devices — I became immersed in Pebble's vast library of (mostly) free watch faces, apps, and even games.</p><p>Stay tuned for a full review, but in the meantime, here are the five most important things you should know about the Pebble Time 2 smartwatch. </p><h3 class="article-body__section" id="section-1-retro-design-e-paper-display"><span>1. Retro design + e-paper display</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xmFPcSg8Sv7CmVxHa2WkrR" name="PebbleWatch2-04" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/xmFPcSg8Sv7CmVxHa2WkrR-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Pebble Time 2 features a rectangular-shaped stainless steel and plastic case that very much reminds me of my favorite digital watches from the late 1980s and early 1990s, including the legendary Casio F-91W shown above. </p><p>Rather than a power-hungry AMOLED screen, the Pebble Time 2 has a 1.5-inch, 64-color e-paper touchscreen that's always-on and surprisingly easy to read in direct sunlight. That said, in some lighting conditions, it can appear a tad dull or faded. </p><p>The case has three physical buttons on the right side and a single "back" button on the left side. They all have ample gnarling, and overall, the Pebble Time 2 feels well-made. Gorilla Glass protects the display; however, because the glass is raised beyond the bezel, I worry about scratches in the long term. </p><h3 class="article-body__section" id="section-2-open-source-highly-customizable-os"><span>2. Open-source, highly customizable OS</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LBcQpogx4kLmdCUGUEPWnR" name="PebbleWatch2-01" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/LBcQpogx4kLmdCUGUEPWnR-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Pebble Time 2 is ridiculously customizable. For example, users can assign pretty much any action to a long press on the button of their choice. And even though PebbleOS lacks the flashy animations and overall pizzazz of more mainstream smartwatch operating systems like the latest watchOS and Wear OS, it's still quite easy to navigate and personalize.</p><p>There are presently more than 10,000 watch faces, apps, and games to choose from in the Pebble store, many of which are free. My first order of action upon completing the setup was to install a Super Mario-like watch face, where the character jumps every time the minute changes.</p><p>As a bonus, apps and watch faces take a negligible amount of time to download and install. </p><h3 class="article-body__section" id="section-3-insane-battery"><span>3. Insane 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KhFhedhvHkUprCs9vLMRcR" name="PebbleWatch2-06" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/KhFhedhvHkUprCs9vLMRcR-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Since the Pebble Time 2 lacks power-hungry components like a bright AMOLED screen, GPS, or cellular antenna, battery life is seriously impressive. According to Pebble, users can expect up to 30 days per charge. Just think: that's 30x better battery performance than the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review">Apple Watch Series 12</a>, one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best full-featured smartwatches</a> in 2026. </p><h3 class="article-body__section" id="section-4-entry-level-fitness-tracking"><span>4. Entry-level 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="bLrNviA7G6X95RwrarwHfR" name="PebbleWatch2-02" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/bLrNviA7G6X95RwrarwHfR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1441" 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 Pebble Time 2 is not designed to be a fitness or health tracker, but it does offer some basic holistic tech and features on par with a very entry-level tracker. These include a continuous heart rate sensor, an accelerometer for logging daily step counts and workouts, and insights into sleep duration and light vs. deep sleep.</p><h3 class="article-body__section" id="section-5-free-games-galore"><span>5. Free games galore</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="fAdUhu5uYt9RMjCky7yotR" name="PebbleWatch2-05" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/fAdUhu5uYt9RMjCky7yotR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1441" 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>While fitness features may be light, I'm seriously blown away by the number of free, genuinely fun games you can play on the Pebble Time 2. So far, "Turbo Drift," a game that reminds me of the 1980s Sega classic "Out Run," has been my go-to. Some others I'm looking forward to trying, based on positive reviews, include "Pixel Miner," "Strike Force," and "Rock Crusher."</p><p>As noted in the intro, I'm in the process of fully testing the Pebble Time 2, so stay tuned for my full review. For now, what are your thoughts on the new Pebble Time 2 smartwatch, and what should I test? Also, are you excited to see the return of the Pebble brand, and do you plan on buying one for yourself? Let me know in the comments below. </p><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><strong></strong><a href="https://www.tomsguide.com/wellness/smartwatches/pebble-founder-on-why-hes-bringing-pebble-watch-back-samsung-google-apple-dont-take-any-risks"><strong>Pebble founder on why he's bringing Pebble watch back — 'Samsung, Google, Apple don't take any risks'</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/smartwatches/pebble-is-back-with-two-new-smartwatches-starting-at-usd149-how-to-preorder"><strong>Pebble is back with two new smartwatches starting at $149 — how to preorder</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/smart-rings/the-new-pebble-smart-ring-wont-track-your-health-doesnt-need-to-be-recharged-and-costs-just-usd75-heres-why-i-cant-wait-to-try-one"><strong>The new Pebble smart ring has a built-in mic and costs just $75 — here’s why I can’t wait to try one</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/smartwatches/i-just-went-hands-on-with-the-pebble-time-2-and-its-unlike-any-smartwatch-ive-ever-tested</link>
                                                                            <description>
                            <![CDATA[ 5 things to know about the Pebble Time 2, arguably the world’s most customizable smartwatch. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DPeYbvctkZyfM7hrbSsPjK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/d8gMsTLXnheFPqxBFDTUiR-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 08:30:00 +0000</pubDate>                                                                                                                                                                                                                                <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-320-70.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/d8gMsTLXnheFPqxBFDTUiR-1920-80.jpg">
                                                            <media:credit><![CDATA[Dan Bracaglia/Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close-up of the Pebble Time 2 smartwatch]]></media:description>                                                            <media:text><![CDATA[Close-up of the Pebble Time 2 smartwatch]]></media:text>
                                <media:title type="plain"><![CDATA[Close-up of the Pebble Time 2 smartwatch]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/d8gMsTLXnheFPqxBFDTUiR-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Pebble Time 2 doesn’t take itself too seriously, which is exactly why it's one of the most enjoyable smartwatches I’ve ever tested. Supported by an open-source community of developers and wearable tech enthusiasts, this $225 device is pretty much the antithesis of an Apple Watch. And that's a good thing. </p><p>I just got my hands on the <a href="https://www.tomsguide.com/wellness/smartwatches/pebble-watch-returns-from-the-dead-with-its-founder-and-open-source-software">Pebble Time 2</a>, and after a quick and easy setup — it works with both Android and iOS devices — I became immersed in Pebble's vast library of (mostly) free watch faces, apps, and even games.</p><p>Stay tuned for a full review, but in the meantime, here are the five most important things you should know about the Pebble Time 2 smartwatch. </p><h3 class="article-body__section" id="section-1-retro-design-e-paper-display"><span>1. Retro design + e-paper display</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xmFPcSg8Sv7CmVxHa2WkrR" name="PebbleWatch2-04" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/xmFPcSg8Sv7CmVxHa2WkrR-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Pebble Time 2 features a rectangular-shaped stainless steel and plastic case that very much reminds me of my favorite digital watches from the late 1980s and early 1990s, including the legendary Casio F-91W shown above. </p><p>Rather than a power-hungry AMOLED screen, the Pebble Time 2 has a 1.5-inch, 64-color e-paper touchscreen that's always-on and surprisingly easy to read in direct sunlight. That said, in some lighting conditions, it can appear a tad dull or faded. </p><p>The case has three physical buttons on the right side and a single "back" button on the left side. They all have ample gnarling, and overall, the Pebble Time 2 feels well-made. Gorilla Glass protects the display; however, because the glass is raised beyond the bezel, I worry about scratches in the long term. </p><h3 class="article-body__section" id="section-2-open-source-highly-customizable-os"><span>2. Open-source, highly customizable OS</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LBcQpogx4kLmdCUGUEPWnR" name="PebbleWatch2-01" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/LBcQpogx4kLmdCUGUEPWnR-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>The Pebble Time 2 is ridiculously customizable. For example, users can assign pretty much any action to a long press on the button of their choice. And even though PebbleOS lacks the flashy animations and overall pizzazz of more mainstream smartwatch operating systems like the latest watchOS and Wear OS, it's still quite easy to navigate and personalize.</p><p>There are presently more than 10,000 watch faces, apps, and games to choose from in the Pebble store, many of which are free. My first order of action upon completing the setup was to install a Super Mario-like watch face, where the character jumps every time the minute changes.</p><p>As a bonus, apps and watch faces take a negligible amount of time to download and install. </p><h3 class="article-body__section" id="section-3-insane-battery"><span>3. Insane 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KhFhedhvHkUprCs9vLMRcR" name="PebbleWatch2-06" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/KhFhedhvHkUprCs9vLMRcR-1920-80.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: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Since the Pebble Time 2 lacks power-hungry components like a bright AMOLED screen, GPS, or cellular antenna, battery life is seriously impressive. According to Pebble, users can expect up to 30 days per charge. Just think: that's 30x better battery performance than the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-12-review">Apple Watch Series 12</a>, one of the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best full-featured smartwatches</a> in 2026. </p><h3 class="article-body__section" id="section-4-entry-level-fitness-tracking"><span>4. Entry-level 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:2560px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="bLrNviA7G6X95RwrarwHfR" name="PebbleWatch2-02" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/bLrNviA7G6X95RwrarwHfR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1441" 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 Pebble Time 2 is not designed to be a fitness or health tracker, but it does offer some basic holistic tech and features on par with a very entry-level tracker. These include a continuous heart rate sensor, an accelerometer for logging daily step counts and workouts, and insights into sleep duration and light vs. deep sleep.</p><h3 class="article-body__section" id="section-5-free-games-galore"><span>5. Free games galore</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:2560px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="fAdUhu5uYt9RMjCky7yotR" name="PebbleWatch2-05" alt="Close-up of the Pebble Time 2 smartwatch" src="https://cdn.mos.cms.futurecdn.net/fAdUhu5uYt9RMjCky7yotR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1441" 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>While fitness features may be light, I'm seriously blown away by the number of free, genuinely fun games you can play on the Pebble Time 2. So far, "Turbo Drift," a game that reminds me of the 1980s Sega classic "Out Run," has been my go-to. Some others I'm looking forward to trying, based on positive reviews, include "Pixel Miner," "Strike Force," and "Rock Crusher."</p><p>As noted in the intro, I'm in the process of fully testing the Pebble Time 2, so stay tuned for my full review. For now, what are your thoughts on the new Pebble Time 2 smartwatch, and what should I test? Also, are you excited to see the return of the Pebble brand, and do you plan on buying one for yourself? Let me know in the comments below. </p><h2 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h2><ul><li><strong></strong><a href="https://www.tomsguide.com/wellness/smartwatches/pebble-founder-on-why-hes-bringing-pebble-watch-back-samsung-google-apple-dont-take-any-risks"><strong>Pebble founder on why he's bringing Pebble watch back — 'Samsung, Google, Apple don't take any risks'</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/smartwatches/pebble-is-back-with-two-new-smartwatches-starting-at-usd149-how-to-preorder"><strong>Pebble is back with two new smartwatches starting at $149 — how to preorder</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/wellness/smart-rings/the-new-pebble-smart-ring-wont-track-your-health-doesnt-need-to-be-recharged-and-costs-just-usd75-heres-why-i-cant-wait-to-try-one"><strong>The new Pebble smart ring has a built-in mic and costs just $75 — here’s why I can’t wait to try one</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The clocks going back on Sunday can cause 3 a.m. wake ups and make it harder to fall asleep — 5 products I'm using to survive the change ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The clocks will go back this Sunday, bagging us an extra hour of sleep and a few weeks of brighter mornings. However, <a href="https://www.tomsguide.com/wellness/sleep/the-clocks-fall-back-tonight">daylight savings </a>also mean that our days are about to get shorter, and research has <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC10351306/#s2" target="_blank">shown</a> that this can lead to night-time awakenings and trouble falling asleep. </p><p>That's why I've curated a sleep survival kit to help combat the common<a href="https://www.tomsguide.com/wellness/sleep-problems/side-effects-of-clock-change"> side effects of the clocks being pushed back</a>. One sleep gadget that can help you deal with shorter days and darker evenings is the<strong> </strong><a href="https://www.amazon.co.uk/Lumie-Dash-Compact-Improved-Illumination/dp/B0DF7K7RX3/ref=sr_1_1_sspa" target="_blank"><strong>Lumie Dash Light Therapy Lamp, now $152.14 down from $179 at Amazon</strong></a>, a piece of sleep tech that Certified Sleep Coach <a href="https://www.tomsguide.com/author/claire-davies">Claire Davies </a>swears by for "getting the right type of light for winter sleep health". </p><p>Here, I've rounded up the five sleep essentials I'll be using to limit disruption to my <a href="https://www.tomsguide.com/wellness/sleep/circadian-rhythm">circadian rhythm</a>. The good news? All these sleep accessories are in this month's top <a href="https://www.tomsguide.com/news/best-cheap-mattress-deals-and-sales">sleep and mattress sales</a>, so you can get through the upcoming clock change with ease and for less. </p><div class="product"><a data-dimension112="3baac3b8-cbbb-11f1-88ba-c963a0b333ff" data-action="Deal Block" data-label="Dash Light Therapy Lamp" data-dimension48="Dash Light Therapy Lamp" data-dimension25="£152.14" href="https://www.amazon.co.uk/Lumie-Dash-Compact-Improved-Illumination/dp/B0DF7K7RX3/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:1344px;"><p class="vanilla-image-block" style="padding-top:111.61%;"><img id="cCnQoBhEPG32dMPZWWKDni" name="Lumie Dash" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cCnQoBhEPG32dMPZWWKDni-1920-80.jpg" mos="" align="middle" fullscreen="" width="1344" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/Lumie-Dash-Compact-Improved-Illumination/dp/B0DF7K7RX3/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="3baac3b8-cbbb-11f1-88ba-c963a0b333ff" data-action="Deal Block" data-label="Dash Light Therapy Lamp" data-dimension48="Dash Light Therapy Lamp" data-dimension25="£152.14">Dash Light Therapy Lamp: was £179 now £152.14</a></strong><br>One of the best products you can invest in to protect your sleep, mood and energy levels during shorter days is a light therapy lamp. The Lumie Dash is a light therapy lamp that emits 10,000 lux at a 15cm distance for "winter blues relief" and improved mood and energy. Lumie <a href="https://www.lumie.com/blogs/all/clock-change-101-when-do-the-clocks-go-back-and-how-does-the-time-change-affect-your-wellbeing" target="_blank">recommends</a> using this lamp first thing in the morning and in the early afternoon to beat the "post-lunch slump". At Amazon, there's a special voucher that takes 15% off the full retail price, taking the Dash down to £152.24. <a class="view-deal button" href="https://www.amazon.co.uk/Lumie-Dash-Compact-Improved-Illumination/dp/B0DF7K7RX3/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="3baac3b8-cbbb-11f1-88ba-c963a0b333ff" data-action="Deal Block" data-label="Dash Light Therapy Lamp" data-dimension48="Dash Light Therapy Lamp" data-dimension25="£152.14">View Deal</a></p></div><div class="product"><a data-dimension112="3baac2e6-cbbb-11f1-8e8d-814ec8bf4bcb" data-action="Deal Block" data-label="Blackout Sleep Mask" data-dimension48="Blackout Sleep Mask" data-dimension25="£9.99" href="https://www.amazon.co.uk/Halo-Sleep-Masks-Sleeping-Mask/dp/B09CZ68WV3/ref=sr_1_6" 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="iMkwVHb3aQtXbrGUYzi8n3" name="MyHalos Sleep Mask" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iMkwVHb3aQtXbrGUYzi8n3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Research <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11217455/" target="_blank" data-dimension112="3baac2e6-cbbb-11f1-8e8d-814ec8bf4bcb" data-action="Deal Block" data-label="Blackout Sleep Mask" data-dimension48="Blackout Sleep Mask" data-dimension25="£9.99">shows</a> that waking up ahead of your alarm is a common side effect of the clocks going back as our circadian rhythm is still stuck on its old sleep schedule. To prevent erratic wake up times throughout the night and early morning, use a blackout sleep mask to block out sleep-disrupting light and fall back asleep fast after a night-time awakening. This blackout mask by MyHalos is now under £10 and has a 3D design for zero-pressure eye comfort. <a class="view-deal button" href="https://www.amazon.co.uk/Halo-Sleep-Masks-Sleeping-Mask/dp/B09CZ68WV3/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="3baac2e6-cbbb-11f1-8e8d-814ec8bf4bcb" data-action="Deal Block" data-label="Blackout Sleep Mask" data-dimension48="Blackout Sleep Mask" data-dimension25="£9.99">View Deal</a></p></div><div class="product"><a data-dimension112="3baac354-cbbb-11f1-a335-f57cb545f19e" data-action="Deal Block" data-label="Weighted Blanket" data-dimension48="Weighted Blanket" data-dimension25="£76.30" href="https://theoodie.co.uk/products/blue-oodie-weighted-blanket" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1417px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ywCw3y4czwynDqYSwktgpP" name="Oodie Weighted Blanket_Blue.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ywCw3y4czwynDqYSwktgpP-1920-80.jpg" mos="" align="middle" fullscreen="" width="1417" height="1417" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Oodie's products have become synonymous with cozy winter evenings, and this weighted blanket will help keep you warm on chillier nights. The <a href="https://www.tomsguide.com/best-picks/best-weighted-blanket" data-dimension112="3baac354-cbbb-11f1-a335-f57cb545f19e" data-action="Deal Block" data-label="Weighted Blanket" data-dimension48="Weighted Blanket" data-dimension25="£76.30">best weighted blankets</a> also promote a relaxation response and ease the transition into darker, shorter days. Right now, Oodie is having a big 30% off sale on its signature weighted blanket, with every weight category and colour down to £76.30 (down from £109). <a class="view-deal button" href="https://theoodie.co.uk/products/blue-oodie-weighted-blanket" target="_blank" rel="nofollow" data-dimension112="3baac354-cbbb-11f1-a335-f57cb545f19e" data-action="Deal Block" data-label="Weighted Blanket" data-dimension48="Weighted Blanket" data-dimension25="£76.30">View Deal</a></p></div><div class="product"><a data-dimension112="3baac26e-cbbb-11f1-8d0a-bf6e19c2b405" data-action="Deal Block" data-label="Sunrise Alarm Clock" data-dimension48="Sunrise Alarm Clock" data-dimension25="£28.04" href="https://www.amazon.co.uk/Sunrise-Simulation-Control-Calibration-Function/dp/B0FYP6MM4B/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:522px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="Ag89es8QGXPKYuj9Kaz3DW" name="ARTINABS Sunrise Alarm Clock Wake Up Light" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Ag89es8QGXPKYuj9Kaz3DW-1920-80.jpg" mos="" align="middle" fullscreen="" width="522" height="522" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Yes, mornings are initially brighter after the clock fall back, but the earlier sunrises only last around three to four weeks. After that, mornings become darker, so prepare for gloomy winter mornings with one of the <a href="https://www.tomsguide.com/wellness/sleep/best-sunrise-alarm-clocks" data-dimension112="3baac26e-cbbb-11f1-8d0a-bf6e19c2b405" data-action="Deal Block" data-label="Sunrise Alarm Clock" data-dimension48="Sunrise Alarm Clock" data-dimension25="£28.04">best sunrise alarm clocks</a>. These sunlight-mimicking wake-up lights gently help you to rise with more energy, and I'm currently using this budget-friendly sunrise alarm from Amazon stalwart ARTINABS. Now 15% off, this wake-up light is under £30. <a class="view-deal button" href="https://www.amazon.co.uk/Sunrise-Simulation-Control-Calibration-Function/dp/B0FYP6MM4B/ref=sr_1_7" target="_blank" rel="nofollow" data-dimension112="3baac26e-cbbb-11f1-8d0a-bf6e19c2b405" data-action="Deal Block" data-label="Sunrise Alarm Clock" data-dimension48="Sunrise Alarm Clock" data-dimension25="£28.04">View Deal</a></p></div><div class="product"><a data-dimension112="3baac41c-cbbb-11f1-bfe6-5f04b4647cf7" data-action="Deal Block" data-label="Chamomile Lullaby Tea" data-dimension48="Chamomile Lullaby Tea" data-dimension25="£3.50" href="https://www.amazon.co.uk/teapigs-Chamomile-Lullaby-Tea-Passionflower/dp/B0G7L8G7PR/ref=sr_1_6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:779px;"><p class="vanilla-image-block" style="padding-top:173.17%;"><img id="8NDBb2gTeYYBpK4YnHV7Vc" name="Chamomile Lullaby Tea" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8NDBb2gTeYYBpK4YnHV7Vc-1920-80.jpg" mos="" align="middle" fullscreen="" width="779" height="1349" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/teapigs-Chamomile-Lullaby-Tea-Passionflower/dp/B0G7L8G7PR/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="3baac41c-cbbb-11f1-bfe6-5f04b4647cf7" data-action="Deal Block" data-label="Chamomile Lullaby Tea" data-dimension48="Chamomile Lullaby Tea" data-dimension25="£3.50">Chamomile Lullaby Tea: was £4.99 now £3.50</a></strong><br>If you're having trouble settling down earlier in the evenings, calming herbal tea is an excellent way to help you to unwind. <a href="https://www.tomsguide.com/wellness/sleep/i-tried-reishi-mushroom-tea-for-the-first-time-this-is-what-happened-to-my-sleep-and-an-expert-explains-why">I tried this reishi mushroom tea from teapigs</a>, and it's now my go-to psychological signal to go to sleep. Also boasting soothing chamomile and passionflower, this caffeine-free herbal infusion is a great way to relax on dark evenings for less than £5. <a class="view-deal button" href="https://www.amazon.co.uk/teapigs-Chamomile-Lullaby-Tea-Passionflower/dp/B0G7L8G7PR/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="3baac41c-cbbb-11f1-bfe6-5f04b4647cf7" data-action="Deal Block" data-label="Chamomile Lullaby Tea" data-dimension48="Chamomile Lullaby Tea" data-dimension25="£3.50">View Deal</a></p></div><div data-model-name="Silentnight Wellbeing Weighted Blanket,JALL Wake Up Light Sunrise Alarm Clock,Teapigs Snooze Sleepy Tea,MyHalos Blackout Sleep Mask,Lumie Vitamin L" data-rows="5" data-merchant="Amazon" data-widget-type="multimodelreview" data-widget-title="Best UK sleep deals this October"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/sleep/the-clocks-going-back-on-sunday-can-cause-3-a-m-wake-ups-and-make-it-harder-to-fall-asleep-5-products-im-using-to-survive-the-change</link>
                                                                            <description>
                            <![CDATA[ From and energy-boosting light therapy lamp to a cozy weighted blanket, here are all the sleep essentials I'm using to stop daylight savings from disrupting my sleep. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ZaHAs5QwN42xt9FnuxvJdC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4c9cCVjfcJPdAyrkPHNpER-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Oct 2026 07:58:02 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sleep]]></category>
                                                    <category><![CDATA[Sleep Tech]]></category>
                                                    <category><![CDATA[Pillows & Bedding]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                    <category><![CDATA[Mattresses]]></category>
                                                                                                                    <dc:creator><![CDATA[ Frances Daniels ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/gwtHaY4CfWtqYQH6EuKPGE-320-70.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/4c9cCVjfcJPdAyrkPHNpER-1920-80.jpg">
                                                            <media:credit><![CDATA[Amazon / Oodie]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A collage of sleep accessories used to deal with sleep disorders brought on by daylight savings. In the bottom right foreground, there is a deals badge. ]]></media:description>                                                            <media:text><![CDATA[A collage of sleep accessories used to deal with sleep disorders brought on by daylight savings. In the bottom right foreground, there is a deals badge. ]]></media:text>
                                <media:title type="plain"><![CDATA[A collage of sleep accessories used to deal with sleep disorders brought on by daylight savings. In the bottom right foreground, there is a deals badge. ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4c9cCVjfcJPdAyrkPHNpER-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The clocks will go back this Sunday, bagging us an extra hour of sleep and a few weeks of brighter mornings. However, <a href="https://www.tomsguide.com/wellness/sleep/the-clocks-fall-back-tonight">daylight savings </a>also mean that our days are about to get shorter, and research has <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC10351306/#s2" target="_blank">shown</a> that this can lead to night-time awakenings and trouble falling asleep. </p><p>That's why I've curated a sleep survival kit to help combat the common<a href="https://www.tomsguide.com/wellness/sleep-problems/side-effects-of-clock-change"> side effects of the clocks being pushed back</a>. One sleep gadget that can help you deal with shorter days and darker evenings is the<strong> </strong><a href="https://www.amazon.co.uk/Lumie-Dash-Compact-Improved-Illumination/dp/B0DF7K7RX3/ref=sr_1_1_sspa" target="_blank"><strong>Lumie Dash Light Therapy Lamp, now $152.14 down from $179 at Amazon</strong></a>, a piece of sleep tech that Certified Sleep Coach <a href="https://www.tomsguide.com/author/claire-davies">Claire Davies </a>swears by for "getting the right type of light for winter sleep health". </p><p>Here, I've rounded up the five sleep essentials I'll be using to limit disruption to my <a href="https://www.tomsguide.com/wellness/sleep/circadian-rhythm">circadian rhythm</a>. The good news? All these sleep accessories are in this month's top <a href="https://www.tomsguide.com/news/best-cheap-mattress-deals-and-sales">sleep and mattress sales</a>, so you can get through the upcoming clock change with ease and for less. </p><div class="product"><a data-dimension112="3baac3b8-cbbb-11f1-88ba-c963a0b333ff" data-action="Deal Block" data-label="Dash Light Therapy Lamp" data-dimension48="Dash Light Therapy Lamp" data-dimension25="£152.14" href="https://www.amazon.co.uk/Lumie-Dash-Compact-Improved-Illumination/dp/B0DF7K7RX3/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:1344px;"><p class="vanilla-image-block" style="padding-top:111.61%;"><img id="cCnQoBhEPG32dMPZWWKDni" name="Lumie Dash" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cCnQoBhEPG32dMPZWWKDni-1920-80.jpg" mos="" align="middle" fullscreen="" width="1344" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/Lumie-Dash-Compact-Improved-Illumination/dp/B0DF7K7RX3/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="3baac3b8-cbbb-11f1-88ba-c963a0b333ff" data-action="Deal Block" data-label="Dash Light Therapy Lamp" data-dimension48="Dash Light Therapy Lamp" data-dimension25="£152.14">Dash Light Therapy Lamp: was £179 now £152.14</a></strong><br>One of the best products you can invest in to protect your sleep, mood and energy levels during shorter days is a light therapy lamp. The Lumie Dash is a light therapy lamp that emits 10,000 lux at a 15cm distance for "winter blues relief" and improved mood and energy. Lumie <a href="https://www.lumie.com/blogs/all/clock-change-101-when-do-the-clocks-go-back-and-how-does-the-time-change-affect-your-wellbeing" target="_blank">recommends</a> using this lamp first thing in the morning and in the early afternoon to beat the "post-lunch slump". At Amazon, there's a special voucher that takes 15% off the full retail price, taking the Dash down to £152.24. <a class="view-deal button" href="https://www.amazon.co.uk/Lumie-Dash-Compact-Improved-Illumination/dp/B0DF7K7RX3/ref=sr_1_1_sspa" target="_blank" rel="nofollow" data-dimension112="3baac3b8-cbbb-11f1-88ba-c963a0b333ff" data-action="Deal Block" data-label="Dash Light Therapy Lamp" data-dimension48="Dash Light Therapy Lamp" data-dimension25="£152.14">View Deal</a></p></div><div class="product"><a data-dimension112="3baac2e6-cbbb-11f1-8e8d-814ec8bf4bcb" data-action="Deal Block" data-label="Blackout Sleep Mask" data-dimension48="Blackout Sleep Mask" data-dimension25="£9.99" href="https://www.amazon.co.uk/Halo-Sleep-Masks-Sleeping-Mask/dp/B09CZ68WV3/ref=sr_1_6" 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="iMkwVHb3aQtXbrGUYzi8n3" name="MyHalos Sleep Mask" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iMkwVHb3aQtXbrGUYzi8n3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Research <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11217455/" target="_blank" data-dimension112="3baac2e6-cbbb-11f1-8e8d-814ec8bf4bcb" data-action="Deal Block" data-label="Blackout Sleep Mask" data-dimension48="Blackout Sleep Mask" data-dimension25="£9.99">shows</a> that waking up ahead of your alarm is a common side effect of the clocks going back as our circadian rhythm is still stuck on its old sleep schedule. To prevent erratic wake up times throughout the night and early morning, use a blackout sleep mask to block out sleep-disrupting light and fall back asleep fast after a night-time awakening. This blackout mask by MyHalos is now under £10 and has a 3D design for zero-pressure eye comfort. <a class="view-deal button" href="https://www.amazon.co.uk/Halo-Sleep-Masks-Sleeping-Mask/dp/B09CZ68WV3/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="3baac2e6-cbbb-11f1-8e8d-814ec8bf4bcb" data-action="Deal Block" data-label="Blackout Sleep Mask" data-dimension48="Blackout Sleep Mask" data-dimension25="£9.99">View Deal</a></p></div><div class="product"><a data-dimension112="3baac354-cbbb-11f1-a335-f57cb545f19e" data-action="Deal Block" data-label="Weighted Blanket" data-dimension48="Weighted Blanket" data-dimension25="£76.30" href="https://theoodie.co.uk/products/blue-oodie-weighted-blanket" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1417px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ywCw3y4czwynDqYSwktgpP" name="Oodie Weighted Blanket_Blue.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ywCw3y4czwynDqYSwktgpP-1920-80.jpg" mos="" align="middle" fullscreen="" width="1417" height="1417" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Oodie's products have become synonymous with cozy winter evenings, and this weighted blanket will help keep you warm on chillier nights. The <a href="https://www.tomsguide.com/best-picks/best-weighted-blanket" data-dimension112="3baac354-cbbb-11f1-a335-f57cb545f19e" data-action="Deal Block" data-label="Weighted Blanket" data-dimension48="Weighted Blanket" data-dimension25="£76.30">best weighted blankets</a> also promote a relaxation response and ease the transition into darker, shorter days. Right now, Oodie is having a big 30% off sale on its signature weighted blanket, with every weight category and colour down to £76.30 (down from £109). <a class="view-deal button" href="https://theoodie.co.uk/products/blue-oodie-weighted-blanket" target="_blank" rel="nofollow" data-dimension112="3baac354-cbbb-11f1-a335-f57cb545f19e" data-action="Deal Block" data-label="Weighted Blanket" data-dimension48="Weighted Blanket" data-dimension25="£76.30">View Deal</a></p></div><div class="product"><a data-dimension112="3baac26e-cbbb-11f1-8d0a-bf6e19c2b405" data-action="Deal Block" data-label="Sunrise Alarm Clock" data-dimension48="Sunrise Alarm Clock" data-dimension25="£28.04" href="https://www.amazon.co.uk/Sunrise-Simulation-Control-Calibration-Function/dp/B0FYP6MM4B/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:522px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="Ag89es8QGXPKYuj9Kaz3DW" name="ARTINABS Sunrise Alarm Clock Wake Up Light" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Ag89es8QGXPKYuj9Kaz3DW-1920-80.jpg" mos="" align="middle" fullscreen="" width="522" height="522" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Yes, mornings are initially brighter after the clock fall back, but the earlier sunrises only last around three to four weeks. After that, mornings become darker, so prepare for gloomy winter mornings with one of the <a href="https://www.tomsguide.com/wellness/sleep/best-sunrise-alarm-clocks" data-dimension112="3baac26e-cbbb-11f1-8d0a-bf6e19c2b405" data-action="Deal Block" data-label="Sunrise Alarm Clock" data-dimension48="Sunrise Alarm Clock" data-dimension25="£28.04">best sunrise alarm clocks</a>. These sunlight-mimicking wake-up lights gently help you to rise with more energy, and I'm currently using this budget-friendly sunrise alarm from Amazon stalwart ARTINABS. Now 15% off, this wake-up light is under £30. <a class="view-deal button" href="https://www.amazon.co.uk/Sunrise-Simulation-Control-Calibration-Function/dp/B0FYP6MM4B/ref=sr_1_7" target="_blank" rel="nofollow" data-dimension112="3baac26e-cbbb-11f1-8d0a-bf6e19c2b405" data-action="Deal Block" data-label="Sunrise Alarm Clock" data-dimension48="Sunrise Alarm Clock" data-dimension25="£28.04">View Deal</a></p></div><div class="product"><a data-dimension112="3baac41c-cbbb-11f1-bfe6-5f04b4647cf7" data-action="Deal Block" data-label="Chamomile Lullaby Tea" data-dimension48="Chamomile Lullaby Tea" data-dimension25="£3.50" href="https://www.amazon.co.uk/teapigs-Chamomile-Lullaby-Tea-Passionflower/dp/B0G7L8G7PR/ref=sr_1_6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:779px;"><p class="vanilla-image-block" style="padding-top:173.17%;"><img id="8NDBb2gTeYYBpK4YnHV7Vc" name="Chamomile Lullaby Tea" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8NDBb2gTeYYBpK4YnHV7Vc-1920-80.jpg" mos="" align="middle" fullscreen="" width="779" height="1349" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/teapigs-Chamomile-Lullaby-Tea-Passionflower/dp/B0G7L8G7PR/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="3baac41c-cbbb-11f1-bfe6-5f04b4647cf7" data-action="Deal Block" data-label="Chamomile Lullaby Tea" data-dimension48="Chamomile Lullaby Tea" data-dimension25="£3.50">Chamomile Lullaby Tea: was £4.99 now £3.50</a></strong><br>If you're having trouble settling down earlier in the evenings, calming herbal tea is an excellent way to help you to unwind. <a href="https://www.tomsguide.com/wellness/sleep/i-tried-reishi-mushroom-tea-for-the-first-time-this-is-what-happened-to-my-sleep-and-an-expert-explains-why">I tried this reishi mushroom tea from teapigs</a>, and it's now my go-to psychological signal to go to sleep. Also boasting soothing chamomile and passionflower, this caffeine-free herbal infusion is a great way to relax on dark evenings for less than £5. <a class="view-deal button" href="https://www.amazon.co.uk/teapigs-Chamomile-Lullaby-Tea-Passionflower/dp/B0G7L8G7PR/ref=sr_1_6" target="_blank" rel="nofollow" data-dimension112="3baac41c-cbbb-11f1-bfe6-5f04b4647cf7" data-action="Deal Block" data-label="Chamomile Lullaby Tea" data-dimension48="Chamomile Lullaby Tea" data-dimension25="£3.50">View Deal</a></p></div><div data-model-name="Silentnight Wellbeing Weighted Blanket,JALL Wake Up Light Sunrise Alarm Clock,Teapigs Snooze Sleepy Tea,MyHalos Blackout Sleep Mask,Lumie Vitamin L" data-rows="5" data-merchant="Amazon" data-widget-type="multimodelreview" data-widget-title="Best UK sleep deals this October"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>